diff --git a/dist/base.css b/dist/base.css index abf9ca46..1f609769 100644 --- a/dist/base.css +++ b/dist/base.css @@ -1,185 +1,6 @@ -.pathwayMapper .list-group { -margin-bottom: 0px; -} -.pathwayMapper .toolbar .toolbar-button { -margin-right: 1px; -margin-left: 1px; -} -.pathwayMapper tbody tr:hover { -background: #97bfdb !important; -} -.pathwayMapper .cBioMode .cytoscape-navigatorView { -background: #4389c0; -} -.pathwayMapper .ui-cytoscape-nodeadd-nodediv { -background: #fbfbfb none repeat scroll 0% 0%; -border: 0px solid white; -border-radius: 5px; -font-size: 1.3em !important; -cursor: pointer; -text-align: center; -} -.pathwayMapper #ranking-bar .info-entry { -margin-bottom: 10px; -} -.pathwayMapper #ranking-bar .info-entry .indent { -margin-left: 20px; -margin-top: 6px; -} -.pathwayMapper #ranking-bar:first-child { -margin-top: 20px; -} -.pathwayMapper #ranking-bar .info-title { -background-color: white; -width: 100%; -color: black; -font-weight: bold; -padding-top: 3px; -padding-bottom: 3px; -border-radius: 4px; -} -.pathwayMapper #cy { -margin-top: 10px; -} -.pathwayMapper #ranking-table { -/*margin-left: 20px; */ -margin-top: 6px; -margin-right: 6px; -} -.pathwayMapper #toolbar { -margin-top: 10px; -margin-left: 13px; -} -.pathwayMapper .ui-cytoscape-nodeadd img { -width: 110px; -height: 28.5px; -} -.pathwayMapper .label:hover { -background-color: #97bfdb !important; -} -.pathwayMapper .label-default { -background-color: #adadad !important; -} -.pathwayMapper .checkbox.disabled { -color: #adadad !important; -} -.pathwayMapper #ranking-bar .table tbody tr td { -padding: 5px !important; -} -.pathwayMapper #ranking-bar .label { -padding-top: 6px; -padding-bottom: 6px; -margin-bottom: 4px; -display: inline-block; -margin-right: 4px; -font-size: 11px; -} -.pathwayMapper .label:hover { -cursor: pointer; -} -.pathwayMapper .dropdown-submenu .caret { -display: none; -} -.pathwayMapper #ranking-bar .fa-question-circle { -cursor: pointer; -} -.pathwayMapper .__react_component_tooltip { -max-width: 350px; -z-index: 1040; -} -.pathwayMapper .__react_component_tooltip.type-light.border { -border: 1px solid #878686; -} -.pathwayMapper .__react_component_tooltip.show { -opacity: 1; -} -.pathwayMapper #ranking-bar thead td { -font-size: 12px; -} -.pathwayMapper #ranking-bar tbody td { -font-size: 11px; -} -.pathwayMapper #about-model-header { -margin-bottom: 15px !important; -} -.pathwayMapper .list-group-item:focus { -background-color: white; -} -.pathwayMapper .qtip-tipsy { -background: rgba(47, 65, 84, 0.92) !important; -} -.pathwayMapper #dropdown-study { -width: 500px; -text-align: left; -} -.pathwayMapper #searchGeneToolbar { -max-width: 200px; -} -.pathwayMapper #compartmentNodeDiv img { -height: 30.26px; -} -.pathwayMapper .pmTip { -background-color: #2f4154 !important; -font-family: arial, sans-serif; -font-size: 12px; -border-radius: 7px; -} -.pathwayMapper .checkbox.layProps { -margin-top: 0; -} -.pathwayMapper .Toastify__toast-container { -width: 420px; -} -.pathwayMapper .Toastify__toast--success { -background-color: #1abc9c; -} -.pathwayMapper #alterationCheckBox { -margin-top: 0; -} -.pathwayMapper #toolbar img { -cursor: pointer; -margin-left: 5px; -} -.pathwayMapper table .radio { -margin-top: 0 !important; -margin-bottom: 0 !important; -} -.pathwayMapper .cBioMode #showMoreButton { -width: 100px !important; -} -#cBioHelpModal table td { -padding: 4px; -} - -#cBioHelpModal .modal-header { - background-color: #ececec; - border-top-left-radius: 6px; - border-top-right-radius: 6px; - text-align: center; -} - -.pathwayMapper .cBioMode .Toastify__toast--default { -background-color: #dff0d8; -color: #333333; -} -.pathwayMapper .cBioMode .Toastify__toast { -min-height: 50px !important; -} -.pathwayMapper .cBioMode .Toastify__toast-container { -width: 550px !important; -} -.pathwayMapper .cytoscape-navigator-wrapper { -transform: scale(0.86); -} - -.pathwayMapper .pathway-toolbar.navbar{ - border-radius: 6px; -} - -.pathwayMapper .smallToast { - width: 325px; -} -.pathwayMapper .modal .modal-body .aboutImageContent,.pathwayMapper .modal .modal-body .adressText{margin-bottom:15px}.pathwayMapper #gridOptionsDiv .modal,.pathwayMapper #gridOptionsDiv .modal-body,.pathwayMapper #layoutPropertiesDiv .modal,.pathwayMapper #layoutPropertiesDiv .modal-body,.pathwayMapper #pathwayDetailsDiv .modal,.pathwayMapper #pathwayDetailsDiv .modal-body{max-height:100%}.pathwayMapper .modal,.pathwayMapper .modal .modal-footer,.pathwayMapper .pubmedIDLabel{text-align:center}.pathwayMapper .modal .modal-body .aboutImageContent label{font-weight:400;font-size:24px;color:#1974b8}.pathwayMapper .modal .modal-body h3,.pathwayMapper .modal .modal-footer a{color:#1abc9c}.pathwayMapper .modal .modal-body .adressText p{margin-bottom:0!important}.pathwayMapper #aboutModal .modal-dialog{width:400px}.pathwayMapper #edge_legend_modal .modal-body img,.pathwayMapper #layoutPropertiesDiv .modal-dialog,.pathwayMapper #node_legend_modal .modal-body img{width:500px}.pathwayMapper #quickHelpModal .modal-body ul li{margin-bottom:15px}.pathwayMapper .ui-cytoscape-nodeadd{z-index:99999;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;margin-bottom:5px}.pathwayMapper #ui-cytoscape-nodeadd-icon{font-size:1.3em!important;cursor:pointer}.pathwayMapper #ui-cytoscape-nodeadd-icon .explanationText{font:14px helvetica neue,helvetica,arial,sans-serif}.pathwayMapper #ui-cytoscape-nodeadd-icon img{width:110px}.pathwayMapper .ui-cytoscape-nodeadd-nodediv{z-index:99999;padding:3px;text-align:center;width:110px;-webkit-backface-visibility:hidden;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.pathwayMapper .dropdown-submenu{position:relative;font-size:12px!important}.pathwayMapper .dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:0;margin-left:0;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;background-color:#34495e!important}.pathwayMapper .dropdown-submenu:hover>.dropdown-menu{display:block}.pathwayMapper .dropdown-submenu>.dropdown-menu>li>a{color:#fff!important;font-size:12px!important}.pathwayMapper .dropdown-submenu>.dropdown-menu>li>a:hover{color:#fff!important;background-color:#1abc9c!important;border-radius:4px!important}.pathwayMapper .dropdown-submenu>a:after{display:block;content:" ";float:right;width:0;height:0;border-color:transparent transparent transparent #ccc;border-style:solid;border-width:5px 0 5px 5px;margin-top:5px;margin-right:-10px}.pathwayMapper #gridOptionsDiv .modal-footer button,.pathwayMapper #layoutPropertiesDiv .modal-footer button,.pathwayMapper #pathwayDetailsDiv .modal-footer button{border:none!important}.pathwayMapper .geneDetails,.pathwayMapper .qtipLabel{margin-top:10px}.pathwayMapper #pathwayDetailsDiv .modal .form-control:focus,.pathwayMapper #pathwayDetailsDiv .modal-body .form-control:focus{box-shadow:inset 0 2px 2px rgba(0,0,0,.075),0 0 8px #1abc9c;color:#2f4154}.pathwayMapper .form-control:focus,.pathwayMapper .qtip-tipsy .form-control:focus{box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #1abc9c}.pathwayMapper .pubmedIDList a{cursor:pointer}.pathwayMapper .qtipRemovePmedID{float:right}.pathwayMapper .qtipRemovePmedID:hover{color:#1abc9c;cursor:pointer}.pathwayMapper .inputCol{padding-left:0!important}.pathwayMapper .qtip-tipsy{background:rgba(47,65,84,.92);color:#fff;border:0 solid transparent;font-size:12px;font-family:'Lucida Grande',sans-serif;font-weight:700;line-height:16px}.pathwayMapper .qtip-tipsy .qtip-content{padding:5px 10px}.pathwayMapper .qtip-tipsy .scrollable{max-height:200px;overflow-y:scroll}.pathwayMapper .qtip-tipsy .form-control:focus{border-color:#1abc9c}.pathwayMapper .qtip-tipsy a{color:#1abc9c}.pathwayMapper .centerText{text-align:center!important}.pathwayMapper .leftText{text-align:left!important}.pathwayMapper .justifyText{text-align:justify!important}.pathwayMapper .popover{max-width:400px}.pathwayMapper .popover span{background-color:#e74c3c}.pathwayMapper .welcomePageContainer{position:fixed;top:0;left:0;background-color:#f6f6f6;z-index:100;height:100%;display:table;width:100%}.pathwayMapper .welcomePageContainer h1,.pathwayMapper .welcomePageContainer h3{color:#2f4154}.pathwayMapper .welcomePageContainer .landingContent{height:100%;position:relative;display:table-cell;vertical-align:middle;padding-top:70px;padding-bottom:70px}.pathwayMapper .welcomePageContainer .landingContent .creditInformation{font-weight:500;margin-top:25px;color:#1abc9c}.pathwayMapper .welcomePageContainer .landingContent .creditInformation a{color:#1abc9c}.pathwayMapper .welcomePageContainer .landingContent .contactInformation{font-weight:500;margin-top:25px;color:#979797}.pathwayMapper .welcomePageContainer .landingContent .contactInformation a{color:#979797}.pathwayMapper .welcomePageContainer .welcomePageLoading{display:none;margin-top:20px;margin-bottom:20px}.pathwayMapper .welcomePageContainer .welcomePageLoading i{color:#1abc9c}.pathwayMapper .welcomePageContainer .welPageButtons{margin-top:30px}.pathwayMapper .welcomePageContainer .welcomePageCheckable{display:inline-block;padding:10px;background-color:#fff;border-radius:6px;border:2px solid #979797;color:#606060;font-weight:500;transition:all .2s linear;min-width:180px;cursor:pointer}.pathwayMapper .welcomePageContainer .welcomePageCheckable i{visibility:hidden}.pathwayMapper .welcomePageContainer .active,.pathwayMapper .welcomePageContainer .welcomePageCheckable:hover{color:#2f4154;border-color:#1abc9c}.pathwayMapper .welcomePageContainer .active i,.pathwayMapper .welcomePageContainer .welcomePageCheckable:hover i{visibility:visible;color:#1abc9c}.pathwayMapper .welcomePageContainer .continueRow{margin-top:30px;visibility:hidden;cursor:pointer}.pathwayMapper .welcomePageContainer .continueButton{padding:10px;background-color:#2f4154;border-radius:6px;color:#fff;font-weight:500;transition:all .2s linear;max-width:200px;margin-left:auto;margin-right:auto}.pathwayMapper .welcomePageContainer .continueButton:hover{background-color:#1abc9c}.pathwayMapper .welcomePageContainer .buttonsSeparator{margin-left:10px;margin-right:10px;font-weight:600}.pathwayMapper .modal .modal-header{background-color:#ececec;border-top-left-radius:6px;border-top-right-radius:6px}.pathwayMapper .modal .modal-footer{background-color:#ececec;border-bottom-left-radius:6px;border-bottom-right-radius:6px}.pathwayMapper .modal .close{outline:0!important}.pathwayMapper .modal .modal-title{color:#2f4154}.pathwayMapper .modal .close:hover{color:#1abc9c}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicLoadButton{padding:10px;border-radius:6px;outline:0;background-color:#fff;border:2px solid #2f4154;color:#2f4154;transition:all .2s linear}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicLoadButton:hover{border-color:#1abc9c;color:#1abc9c}.pathwayMapper #genomicDataExplorerDiv .modal-body .wrapper{margin-top:20px;margin-bottom:20px}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicChecboxDiv{text-align:left!important;margin-left:50px!important}.pathwayMapper #cbioPortalModal .modal-body,.pathwayMapper .control-label{text-align:left}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicDataContentDiv{margin-bottom:15px}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicDataContentDiv h4{margin-bottom:5px}.pathwayMapper .cy-context-menus-cxt-menu{display:none;z-index:1000;position:absolute;padding:0;margin:0;outline:0;border-radius:6px;border:none;opacity:.9}.pathwayMapper .cy-context-menus-cxt-menu:first-child{border-top-left-radius:6px;border-top-right-radius:6px}.pathwayMapper .cy-context-menus-cxt-menu:last-child{border-bottom-left-radius:6px;border-bottom-right-radius:6px}.pathwayMapper .cy-context-menus-cxt-menuitem{display:block;z-index:1000;width:100%;padding:3px 20px;position:relative;margin:0;background-color:#2f4154;font-weight:400;font-size:13px;white-space:nowrap;border:0;text-align:left;outline:0}.pathwayMapper .pathwayPanel .fileNameContent,.pathwayMapper body{font:14px helvetica neue,helvetica,arial,sans-serif}.pathwayMapper .cy-context-menus-cxt-menuitem:enabled{color:#fff}.pathwayMapper .cy-context-menus-ctx-operation:focus{outline:0}.pathwayMapper .cy-context-menus-cxt-menuitem:hover{color:#fff;text-decoration:none;background-color:#1abc9c;background-image:none;cursor:pointer}.pathwayMapper .cy-context-menus-cxt-menuitem[title]:before{content:attr(title)}.pathwayMapper .cy-context-menus-cxt-menuitem:not([title]):before{content:"\2630"}.pathwayMapper #cbioPortalModal .modal-body .bootstrap-select>.dropdown-toggle{width:500px}.pathwayMapper #cbioPortalModal .modal-body .section{margin-bottom:20px}.pathwayMapper .animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.pathwayMapper .animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.pathwayMapper .animated.hinge{-webkit-animation-duration:2s;animation-duration:2s}.pathwayMapper .animated.bounceIn,.pathwayMapper .animated.bounceOut,.pathwayMapper .animated.flipOutX,.pathwayMapper .animated.flipOutY{-webkit-animation-duration:.75s;animation-duration:.75s}@-webkit-keyframes bounce{20%,53%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}@keyframes bounce{20%,53%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}.pathwayMapper .bounce{-webkit-animation-name:bounce;animation-name:bounce;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes flash{50%,from,to{opacity:1}25%,75%{opacity:0}}@keyframes flash{50%,from,to{opacity:1}25%,75%{opacity:0}}.pathwayMapper .flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}}@keyframes pulse{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}}.pathwayMapper .pulse{-webkit-animation-name:pulse;animation-name:pulse}@-webkit-keyframes rubberBand{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}}@keyframes rubberBand{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}}.pathwayMapper .rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shake{from,to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@keyframes shake{from,to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}.pathwayMapper .shake{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}.pathwayMapper .headShake{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-name:headShake;animation-name:headShake}@-webkit-keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}to{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}@keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}to{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}.pathwayMapper .swing{-webkit-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}}@keyframes tada{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}}.pathwayMapper .tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{from,to{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}}@keyframes wobble{from,to{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}}.pathwayMapper .wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes jello{11.1%,from,to{-webkit-transform:none;transform:none}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.39062deg) skewY(.39062deg);transform:skewX(.39062deg) skewY(.39062deg)}88.8%{-webkit-transform:skewX(-.19531deg) skewY(-.19531deg);transform:skewX(-.19531deg) skewY(-.19531deg)}}@keyframes jello{11.1%,from,to{-webkit-transform:none;transform:none}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.39062deg) skewY(.39062deg);transform:skewX(.39062deg) skewY(.39062deg)}88.8%{-webkit-transform:skewX(-.19531deg) skewY(-.19531deg);transform:skewX(-.19531deg) skewY(-.19531deg)}}.pathwayMapper .jello{-webkit-animation-name:jello;animation-name:jello;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes bounceIn{20%,40%,60%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes bounceIn{20%,40%,60%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.pathwayMapper .bounceIn{-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceInDown{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInDown{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}.pathwayMapper .bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInLeft{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}.pathwayMapper .bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInRight{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}.pathwayMapper .bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes bounceInUp{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}@keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}.pathwayMapper .bounceOut{-webkit-animation-name:bounceOut;animation-name:bounceOut}@-webkit-keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.pathwayMapper .bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.pathwayMapper .bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.pathwayMapper .bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.pathwayMapper .bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}.pathwayMapper .fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{from{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDownBig{from{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{from{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeft{from{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{from{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeftBig{from{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{from{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRight{from{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{from{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRightBig{from{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{from{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUp{from{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{from{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUpBig{from{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeOut{from{opacity:1}to{opacity:0}}@keyframes fadeOut{from{opacity:1}to{opacity:0}}.pathwayMapper .fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes fadeOutDown{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.pathwayMapper .fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes fadeOutDownBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.pathwayMapper .fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes fadeOutLeft{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.pathwayMapper .fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes fadeOutLeftBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.pathwayMapper .fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes fadeOutRight{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.pathwayMapper .fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes fadeOutRightBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.pathwayMapper .fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes fadeOutUp{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.pathwayMapper .fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes fadeOutUpBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.pathwayMapper .fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes flip{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.pathwayMapper .animated.flip{-webkit-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes flipInX{from{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{from{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.pathwayMapper .flipInX{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInX;animation-name:flipInX}.pathwayMapper .flipInY,.pathwayMapper .flipOutX{-webkit-backface-visibility:visible!important}@-webkit-keyframes flipInY{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.pathwayMapper .flipInY{backface-visibility:visible!important;-webkit-animation-name:flipInY;animation-name:flipInY}@-webkit-keyframes flipOutX{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}@keyframes flipOutX{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}.pathwayMapper .flipOutX{-webkit-animation-name:flipOutX;animation-name:flipOutX;backface-visibility:visible!important}@-webkit-keyframes flipOutY{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}@keyframes flipOutY{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}.pathwayMapper .flipOutY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipOutY;animation-name:flipOutY}@-webkit-keyframes lightSpeedIn{from{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}to{-webkit-transform:none;transform:none;opacity:1}}@keyframes lightSpeedIn{from{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}to{-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .lightSpeedIn{-webkit-animation-name:lightSpeedIn;animation-name:lightSpeedIn;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOut{from{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}@keyframes lightSpeedOut{from{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.pathwayMapper .lightSpeedOut{-webkit-animation-name:lightSpeedOut;animation-name:lightSpeedOut;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{from{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateIn{from{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn}@-webkit-keyframes rotateInDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft}@-webkit-keyframes rotateInDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight}@-webkit-keyframes rotateInUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft}@-webkit-keyframes rotateInUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight}@-webkit-keyframes rotateOut{from{-webkit-transform-origin:center;transform-origin:center;opacity:1}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}@keyframes rotateOut{from{-webkit-transform-origin:center;transform-origin:center;opacity:1}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}.pathwayMapper .rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut}@-webkit-keyframes rotateOutDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}}@keyframes rotateOutDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}}.pathwayMapper .rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft}@-webkit-keyframes rotateOutDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.pathwayMapper .rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight}@-webkit-keyframes rotateOutUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.pathwayMapper .rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft}@-webkit-keyframes rotateOutUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}@keyframes rotateOutUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}.pathwayMapper .rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight}@-webkit-keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}@keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}.pathwayMapper .hinge{-webkit-animation-name:hinge;animation-name:hinge}@-webkit-keyframes rollIn{from{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes rollIn{from{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}@keyframes rollOut{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}.pathwayMapper .rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}.pathwayMapper .zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInDown{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInLeft{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInRight{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInUp{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes zoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}.pathwayMapper .zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown}@-webkit-keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}@keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}.pathwayMapper .zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft}@-webkit-keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}@keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}.pathwayMapper .zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight}@-webkit-keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp}@-webkit-keyframes slideInDown{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInDown{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{from{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInLeft{from{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{from{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInRight{from{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideInUp{from{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInUp{from{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .slideInUp{-webkit-animation-name:slideInUp;animation-name:slideInUp}@-webkit-keyframes slideOutDown{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes slideOutDown{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.pathwayMapper .slideOutDown{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}@-webkit-keyframes slideOutLeft{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes slideOutLeft{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.pathwayMapper .slideOutLeft{-webkit-animation-name:slideOutLeft;animation-name:slideOutLeft}@-webkit-keyframes slideOutRight{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes slideOutRight{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.pathwayMapper .slideOutRight{-webkit-animation-name:slideOutRight;animation-name:slideOutRight}@-webkit-keyframes slideOutUp{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes slideOutUp{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.pathwayMapper .slideOutUp{-webkit-animation-name:slideOutUp;animation-name:slideOutUp}.pathwayMapper [data-notify=container][class*=alert-pathwayMapper-] .close{opacity:1;color:#fff;margin-top:7px;outline:0}.pathwayMapper .control-label,.pathwayMapper .input-group input[type=checkbox]{margin-top:10px}.pathwayMapper [data-notify=container][class*=alert-pathwayMapper-] .close:hover{color:#fff}.pathwayMapper [data-notify=container].alert-pathwayMapper-success{background-color:#1abc9c;color:#fff}.pathwayMapper [data-notify=container].alert-pathwayMapper-fail{background-color:#ff2644;color:#fff}.pathwayMapper .gridModal{width:350px!important}.pathwayMapper body{background-color:#fff}.pathwayMapper input[type=color]{padding:2px}.pathwayMapper input[type=color]:hover{cursor:pointer}.pathwayMapper #colorPickerButton{padding-top:10px}.pathwayMapper .form-control:focus{border:2px solid #1abc9c;color:#2f4154}.pathwayMapper .cy-panzoom{right:120px;z-index:100}.pathwayMapper .cytoscape-navigatorView{background:#1abc9c}.pathwayMapper .cytoscape-navigator-wrapper{position:absolute;border:2px solid #2f4154;border-radius:6px;background:#fff;z-index:100;width:300px;height:200px;bottom:8.5%;right:3.5%;overflow:hidden}.pathwayMapper .btn:focus{outline:0!important}.pathwayMapper .pathwayPanel .fileNameContent{color:#2f4154;margin-bottom:10px;padding:5px;cursor:pointer;min-width:100px}.pathwayMapper .pathwayPanel div[contenteditable=true]:focus{outline:#1abc9c solid 2px;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #1abc9c;background-color:#fff}.pathwayMapper .pathwayPanel textarea{width:170px;height:50px;margin-bottom:10px;z-index:999999}.pathwayMapper .mainContentWrapper{display:flex}.pathwayMapper .sideBarWrapper{min-width:130px;max-width:130px;font-size:12px}.pathwayMapper .control-label{color:rgba(23,22,22,.78)!important;font-weight:300!important}.pathwayMapper .buttonContainer,.pathwayMapper .edgePaletteWrapper,.pathwayMapper .pnl .pnl-header{text-align:center}.pathwayMapper .input-group{margin-bottom:5px;width:100%}.pathwayMapper .input-group .form-control{border-radius:6px!important}.pathwayMapper .edgePaletteWrapper .list-group{margin-bottom:0!important}.pathwayMapper .edgePaletteWrapper .list-group .list-group-item{border:none!important}.pathwayMapper .edgePaletteWrapper .edge-palette .list-group-item.active,.pathwayMapper .edgePaletteWrapper .edge-palette .list-group-item.active:focus,.pathwayMapper .edgePaletteWrapper .edge-palette .list-group-item.active:hover{background-color:#1abc9c!important}.pathwayMapper .edgePaletteWrapper .edge-palette .list-group-item{padding:7px 5px}.pathwayMapper .edgePaletteWrapper .edge-palette a{margin-bottom:5px;border-radius:6px;font-size:12px}.pathwayMapper .edgePaletteWrapper .edge-palette a img{width:30px}.pathwayMapper footer{background-color:#eee;color:#393939;height:100%}.pathwayMapper .pageContentWrapper{margin-bottom:70px}.pathwayMapper .navbar-nav>.open>a,.pathwayMapper .navbar-nav>.open>a:focus,.pathwayMapper .navbar-nav>.open>a:hover{color:#fff!important;background-color:#1abc9c!important;border-left-color:transparent}.pathwayMapper .navbar-nav>.open>.dropdown-menu>li>a{color:#fff!important;border-radius:4px!important;font-size:12px!important}.pathwayMapper .navbar-nav>.open>.dropdown-menu{background-color:#2f4154!important}.pathwayMapper .navbar-nav>li>.dropdown-menu,.pathwayMapper .navbar-nav>li>.dropdown-submenu{border-radius:4px!important;border:none}.pathwayMapper .navbar-nav>.open>.dropdown-menu>li>a:focus,.pathwayMapper .navbar-nav>.open>.dropdown-menu>li>a:hover{color:#fff;background-color:#1abc9c}.pathwayMapper .navbar{border-radius:0 0 6px 6px;background-color:#2f4154;border:none!important;margin-bottom:10px!important}.pathwayMapper .navbar-nav a{transition:all .2s linear}.pathwayMapper .navbar-nav>li>a{color:#fff!important;font-weight:500!important;font-size:12px}.pathwayMapper .navbar-nav>li>a:hover{color:#1abc9c!important}.pathwayMapper .navbar-brand{color:#fff!important;font-size:16px;font-weight:700}.pathwayMapper .pnl{margin-bottom:10px;border-radius:6px;box-shadow:0 1px 1px rgba(0,0,0,.15),0 -1px 1px rgba(0,0,0,.15)}.pathwayMapper .pnl .pnl-header{background-color:#1abc9c;border-top-left-radius:6px;border-top-right-radius:6px;padding:8px 5px 5px;color:#fff;font-size:12px;font-weight:900}.pathwayMapper .pnl .pnl-body{background-color:#eff0f2;padding:4px 2px;border-bottom-left-radius:6px;border-bottom-right-radius:6px}.pathwayMapper .pnl .pnl-body .buttonContainer>button{border:none!important}.pathwayMapper .pnl .pnl-body .dragButtonContainer{width:115px;margin-left:auto;margin-right:auto}.pathwayMapper .customMargins{margin-left:3%!important;margin-right:3%!important}.pathwayMapper .leftPanelFix{padding-left:0}.pathwayMapper .hiddenfile{width:0;height:0;overflow:hidden}.pathwayMapper .buttonContainer{margin-bottom:5px}.pathwayMapper .buttonContainer button{font-size:12px;width:85%}.pathwayMapper .cyContainer{border:3px solid #1abc9c;height:850px;border-radius:6px;padding-right:0!important;padding-left:0!important;width:100%;margin-left:10px}.pathwayMapper #cy{height:100%}.pathwayMapper .modal .modal-body .aboutImageContent,.pathwayMapper .modal .modal-body .adressText{margin-bottom:15px}.pathwayMapper #gridOptionsDiv .modal,.pathwayMapper #gridOptionsDiv .modal-body,.pathwayMapper #layoutPropertiesDiv .modal,.pathwayMapper #layoutPropertiesDiv .modal-body,.pathwayMapper #pathwayDetailsDiv .modal,.pathwayMapper #pathwayDetailsDiv .modal-body{max-height:100%}.pathwayMapper .modal,.pathwayMapper .modal .modal-footer,.pathwayMapper .pubmedIDLabel{text-align:center}.pathwayMapper .modal .modal-body .aboutImageContent label{font-weight:400;font-size:24px;color:#1974b8}.pathwayMapper .modal .modal-body h3,.pathwayMapper .modal .modal-footer a{color:#1abc9c}.pathwayMapper .modal .modal-body .adressText p{margin-bottom:0!important}.pathwayMapper #aboutModal .modal-dialog{width:400px}.pathwayMapper #edge_legend_modal .modal-body img,.pathwayMapper #layoutPropertiesDiv .modal-dialog,.pathwayMapper #node_legend_modal .modal-body img{width:500px}.pathwayMapper #quickHelpModal .modal-body ul li{margin-bottom:15px}.pathwayMapper .ui-cytoscape-nodeadd{z-index:99999;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;margin-bottom:5px}.pathwayMapper #ui-cytoscape-nodeadd-icon{font-size:1.3em!important;cursor:pointer}.pathwayMapper #ui-cytoscape-nodeadd-icon .explanationText{font:14px helvetica neue,helvetica,arial,sans-serif}.pathwayMapper #ui-cytoscape-nodeadd-icon img{width:110px}.pathwayMapper .ui-cytoscape-nodeadd-nodediv{z-index:99999;padding:3px;text-align:center;width:110px;-webkit-backface-visibility:hidden;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.pathwayMapper .dropdown-submenu{position:relative;font-size:12px!important}.pathwayMapper .dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:0;margin-left:0;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;background-color:#34495e!important}.pathwayMapper .dropdown-submenu:hover>.dropdown-menu{display:block}.pathwayMapper .dropdown-submenu>.dropdown-menu>li>a{color:#fff!important;font-size:12px!important}.pathwayMapper .dropdown-submenu>.dropdown-menu>li>a:hover{color:#fff!important;background-color:#1abc9c!important;border-radius:4px!important}.pathwayMapper .dropdown-submenu>a:after{display:block;content:" ";float:right;width:0;height:0;border-color:transparent transparent transparent #ccc;border-style:solid;border-width:5px 0 5px 5px;margin-top:5px;margin-right:-10px}.pathwayMapper #gridOptionsDiv .modal-footer button,.pathwayMapper #layoutPropertiesDiv .modal-footer button,.pathwayMapper #pathwayDetailsDiv .modal-footer button{border:none!important}.pathwayMapper .geneDetails,.pathwayMapper .qtipLabel{margin-top:10px}.pathwayMapper #pathwayDetailsDiv .modal .form-control:focus,.pathwayMapper #pathwayDetailsDiv .modal-body .form-control:focus{box-shadow:inset 0 2px 2px rgba(0,0,0,.075),0 0 8px #1abc9c;color:#2f4154}.pathwayMapper .pubmedIDList a{cursor:pointer}.pathwayMapper .qtipRemovePmedID{float:right}.pathwayMapper .qtipRemovePmedID:hover{color:#1abc9c;cursor:pointer}.pathwayMapper .inputCol{padding-left:0!important}.pathwayMapper .qtip-tipsy{background:rgba(47,65,84,.92);color:#fff;border:0 solid transparent;font-size:12px;font-family:'Lucida Grande',sans-serif;font-weight:700;line-height:16px}.pathwayMapper .qtip-tipsy .qtip-content{padding:5px 10px}.pathwayMapper .qtip-tipsy .scrollable{max-height:200px;overflow-y:scroll}.pathwayMapper .qtip-tipsy .form-control:focus{border-color:#1abc9c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #1abc9c}.pathwayMapper .qtip-tipsy a{color:#1abc9c}.pathwayMapper .centerText{text-align:center!important}.pathwayMapper .leftText{text-align:left!important}.pathwayMapper .justifyText{text-align:justify!important}.pathwayMapper .popover{max-width:410px}.pathwayMapper .popover span{background-color:#e74c3c}.pathwayMapper .welcomePageContainer{position:fixed;top:0;left:0;background-color:#f6f6f6;z-index:100;height:100%;display:table;width:100%}.pathwayMapper .welcomePageContainer h1,.pathwayMapper .welcomePageContainer h3{color:#2f4154}.pathwayMapper .welcomePageContainer .landingContent{height:100%;position:relative;display:table-cell;vertical-align:middle;padding-top:70px;padding-bottom:70px}.pathwayMapper .welcomePageContainer .welcomePageLoading{display:none;margin-top:20px;margin-bottom:20px}.pathwayMapper .welcomePageContainer .welcomePageLoading i{color:#1abc9c}.pathwayMapper .welcomePageContainer .welPageButtons{margin-top:30px}.pathwayMapper .welcomePageContainer .welcomePageCheckable{display:inline-block;padding:10px;background-color:#fff;border-radius:6px;border:2px solid #979797;color:#606060;font-weight:500;transition:all .2s linear;min-width:180px;cursor:pointer}.pathwayMapper .welcomePageContainer .welcomePageCheckable i{visibility:hidden}.pathwayMapper .welcomePageContainer .active,.pathwayMapper .welcomePageContainer .welcomePageCheckable:hover{color:#2f4154;border-color:#1abc9c}.pathwayMapper .welcomePageContainer .active i,.pathwayMapper .welcomePageContainer .welcomePageCheckable:hover i{visibility:visible;color:#1abc9c}.pathwayMapper .welcomePageContainer .continueRow{margin-top:30px;visibility:hidden;cursor:pointer}.pathwayMapper .welcomePageContainer .continueButton{padding:10px;background-color:#2f4154;border-radius:6px;color:#fff;font-weight:500;transition:all .2s linear;max-width:200px;margin-left:auto;margin-right:auto}.pathwayMapper .welcomePageContainer .continueButton:hover{background-color:#1abc9c}.pathwayMapper .welcomePageContainer .buttonsSeparator{margin-left:10px;margin-right:10px;font-weight:600}.pathwayMapper .welcomePageContainer .creditInformation{font-weight:500;margin-top:25px;color:#1abc9c}.pathwayMapper .welcomePageContainer .creditInformation a{color:#1abc9c}.pathwayMapper .welcomePageContainer .contactInformation{font-weight:500;margin-top:25px;color:#979797}.pathwayMapper .welcomePageContainer .contactInformation a{color:#979797}.pathwayMapper .modal .modal-header{background-color:#ececec;border-top-left-radius:6px;border-top-right-radius:6px}.pathwayMapper .modal .modal-footer{background-color:#ececec;border-bottom-left-radius:6px;border-bottom-right-radius:6px}.pathwayMapper .modal .close{outline:0!important}.pathwayMapper .modal .modal-title{color:#2f4154}.pathwayMapper .modal .close:hover{color:#1abc9c}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicLoadButton{padding:10px;border-radius:6px;outline:0;background-color:#fff;border:2px solid #2f4154;color:#2f4154;transition:all .2s linear}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicLoadButton:hover{border-color:#1abc9c;color:#1abc9c}.pathwayMapper #genomicDataExplorerDiv .modal-body .wrapper{margin-top:20px;margin-bottom:20px}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicChecboxDiv{text-align:left!important;margin-left:50px!important}.pathwayMapper #cbioPortalModal .modal-body,.pathwayMapper .control-label{text-align:left}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicDataContentDiv{margin-bottom:15px}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicDataContentDiv h4{margin-bottom:5px}.pathwayMapper .cy-context-menus-cxt-menu{display:none;z-index:1000;position:absolute;border:1px solid #a0a0a0;padding:0;margin:0;width:auto;border-radius:6px;opacity:.9;outline:0}.pathwayMapper #cy-context-menus-cxt-menu:first-child{border-top-left-radius:6px;border-top-right-radius:6px}.pathwayMapper #cy-context-menus-cxt-menu:last-child{border-bottom-left-radius:6px;border-bottom-right-radius:6px}.pathwayMapper .cy-context-menus-cxt-menuitem{display:block;z-index:1000;width:100%;padding:3px 20px;position:relative;margin:0;background-color:#2f4154;font-weight:400;font-size:12px;white-space:nowrap;border:0;text-align:left}.pathwayMapper .pathwayPanel .fileNameContent,.pathwayMapper body{font:14px helvetica neue,helvetica,arial,sans-serif}.pathwayMapper .cy-context-menus-cxt-menuitem:enabled{color:#fff}.pathwayMapper .cy-context-menus-ctx-operation:focus{outline:0}.pathwayMapper .cy-context-menus-cxt-menuitem:hover{color:#fff;text-decoration:none;background-color:#1abc9c;background-image:none;cursor:pointer}.pathwayMapper .cy-context-menus-cxt-menuitem[content]:before{content:attr(content)}.pathwayMapper .cy-context-menus-divider{border-bottom:1px solid #a0a0a0}.pathwayMapper #cbioPortalModal .modal-body .bootstrap-select>.dropdown-toggle{width:500px}.pathwayMapper #cbioPortalModal .modal-body .section{margin-bottom:20px}.pathwayMapper .animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.pathwayMapper .animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.pathwayMapper .animated.hinge{-webkit-animation-duration:2s;animation-duration:2s}.pathwayMapper .animated.bounceIn,.pathwayMapper .animated.bounceOut,.pathwayMapper .animated.flipOutX,.pathwayMapper .animated.flipOutY{-webkit-animation-duration:.75s;animation-duration:.75s}@-webkit-keyframes bounce{20%,53%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}@keyframes bounce{20%,53%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}.pathwayMapper .bounce{-webkit-animation-name:bounce;animation-name:bounce;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes flash{50%,from,to{opacity:1}25%,75%{opacity:0}}@keyframes flash{50%,from,to{opacity:1}25%,75%{opacity:0}}.pathwayMapper .flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}}@keyframes pulse{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}}.pathwayMapper .pulse{-webkit-animation-name:pulse;animation-name:pulse}@-webkit-keyframes rubberBand{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}}@keyframes rubberBand{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}}.pathwayMapper .rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shake{from,to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@keyframes shake{from,to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}.pathwayMapper .shake{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}.pathwayMapper .headShake{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-name:headShake;animation-name:headShake}@-webkit-keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}to{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}@keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}to{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}.pathwayMapper .swing{-webkit-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}}@keyframes tada{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}}.pathwayMapper .tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{from,to{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}}@keyframes wobble{from,to{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}}.pathwayMapper .wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes jello{11.1%,from,to{-webkit-transform:none;transform:none}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.39062deg) skewY(.39062deg);transform:skewX(.39062deg) skewY(.39062deg)}88.8%{-webkit-transform:skewX(-.19531deg) skewY(-.19531deg);transform:skewX(-.19531deg) skewY(-.19531deg)}}@keyframes jello{11.1%,from,to{-webkit-transform:none;transform:none}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.39062deg) skewY(.39062deg);transform:skewX(.39062deg) skewY(.39062deg)}88.8%{-webkit-transform:skewX(-.19531deg) skewY(-.19531deg);transform:skewX(-.19531deg) skewY(-.19531deg)}}.pathwayMapper .jello{-webkit-animation-name:jello;animation-name:jello;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes bounceIn{20%,40%,60%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes bounceIn{20%,40%,60%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.pathwayMapper .bounceIn{-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceInDown{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInDown{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}.pathwayMapper .bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInLeft{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}.pathwayMapper .bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInRight{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}.pathwayMapper .bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes bounceInUp{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}@keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}.pathwayMapper .bounceOut{-webkit-animation-name:bounceOut;animation-name:bounceOut}@-webkit-keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.pathwayMapper .bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.pathwayMapper .bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.pathwayMapper .bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.pathwayMapper .bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}.pathwayMapper .fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{from{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDownBig{from{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{from{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeft{from{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{from{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeftBig{from{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{from{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRight{from{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{from{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRightBig{from{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{from{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUp{from{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{from{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUpBig{from{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeOut{from{opacity:1}to{opacity:0}}@keyframes fadeOut{from{opacity:1}to{opacity:0}}.pathwayMapper .fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes fadeOutDown{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.pathwayMapper .fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes fadeOutDownBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.pathwayMapper .fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes fadeOutLeft{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.pathwayMapper .fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes fadeOutLeftBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.pathwayMapper .fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes fadeOutRight{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.pathwayMapper .fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes fadeOutRightBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.pathwayMapper .fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes fadeOutUp{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.pathwayMapper .fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes fadeOutUpBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.pathwayMapper .fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes flip{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.pathwayMapper .animated.flip{-webkit-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes flipInX{from{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{from{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.pathwayMapper .flipInX{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInX;animation-name:flipInX}.pathwayMapper .flipInY,.pathwayMapper .flipOutX{-webkit-backface-visibility:visible!important}@-webkit-keyframes flipInY{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.pathwayMapper .flipInY{backface-visibility:visible!important;-webkit-animation-name:flipInY;animation-name:flipInY}@-webkit-keyframes flipOutX{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}@keyframes flipOutX{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}.pathwayMapper .flipOutX{-webkit-animation-name:flipOutX;animation-name:flipOutX;backface-visibility:visible!important}@-webkit-keyframes flipOutY{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}@keyframes flipOutY{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}.pathwayMapper .flipOutY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipOutY;animation-name:flipOutY}@-webkit-keyframes lightSpeedIn{from{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}to{-webkit-transform:none;transform:none;opacity:1}}@keyframes lightSpeedIn{from{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}to{-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .lightSpeedIn{-webkit-animation-name:lightSpeedIn;animation-name:lightSpeedIn;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOut{from{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}@keyframes lightSpeedOut{from{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.pathwayMapper .lightSpeedOut{-webkit-animation-name:lightSpeedOut;animation-name:lightSpeedOut;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{from{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateIn{from{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn}@-webkit-keyframes rotateInDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft}@-webkit-keyframes rotateInDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight}@-webkit-keyframes rotateInUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft}@-webkit-keyframes rotateInUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight}@-webkit-keyframes rotateOut{from{-webkit-transform-origin:center;transform-origin:center;opacity:1}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}@keyframes rotateOut{from{-webkit-transform-origin:center;transform-origin:center;opacity:1}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}.pathwayMapper .rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut}@-webkit-keyframes rotateOutDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}}@keyframes rotateOutDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}}.pathwayMapper .rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft}@-webkit-keyframes rotateOutDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.pathwayMapper .rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight}@-webkit-keyframes rotateOutUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.pathwayMapper .rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft}@-webkit-keyframes rotateOutUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}@keyframes rotateOutUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}.pathwayMapper .rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight}@-webkit-keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}@keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}.pathwayMapper .hinge{-webkit-animation-name:hinge;animation-name:hinge}@-webkit-keyframes rollIn{from{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes rollIn{from{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}@keyframes rollOut{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}.pathwayMapper .rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}.pathwayMapper .zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInDown{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInLeft{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInRight{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInUp{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes zoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}.pathwayMapper .zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown}@-webkit-keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}@keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}.pathwayMapper .zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft}@-webkit-keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}@keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}.pathwayMapper .zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight}@-webkit-keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp}@-webkit-keyframes slideInDown{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInDown{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{from{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInLeft{from{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{from{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInRight{from{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideInUp{from{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInUp{from{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .slideInUp{-webkit-animation-name:slideInUp;animation-name:slideInUp}@-webkit-keyframes slideOutDown{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes slideOutDown{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.pathwayMapper .slideOutDown{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}@-webkit-keyframes slideOutLeft{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes slideOutLeft{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.pathwayMapper .slideOutLeft{-webkit-animation-name:slideOutLeft;animation-name:slideOutLeft}@-webkit-keyframes slideOutRight{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes slideOutRight{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.pathwayMapper .slideOutRight{-webkit-animation-name:slideOutRight;animation-name:slideOutRight}@-webkit-keyframes slideOutUp{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes slideOutUp{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.pathwayMapper .slideOutUp{-webkit-animation-name:slideOutUp;animation-name:slideOutUp}.pathwayMapper [data-notify=container][class*=alert-pathwayMapper-] .close{opacity:1;color:#fff;margin-top:7px;outline:0}.pathwayMapper [data-notify=container][class*=alert-pathwayMapper-] .close:hover{color:#fff}.pathwayMapper [data-notify=container].alert-pathwayMapper-success{background-color:#1abc9c;color:#fff}.pathwayMapper [data-notify=container].alert-pathwayMapper-fail{background-color:#ff2644;color:#fff}.pathwayMapper .toolbar{margin-bottom:5px;padding:5px;background-color:#eff0f2;border-radius:6px}.pathwayMapper .toolbar .toolbar-button{margin-left:-1px;margin-right:-1px;border:2px solid #eff0f2;border-radius:6px;display:inline-block;cursor:pointer}.pathwayMapper .toolbar .toolbar-button:hover{border-color:#1abc9c}.pathwayMapper .toolbar .toolbar-button-focused{border-color:#1abc9c!important}.pathwayMapper .toolbar .btn-group{margin-right:2px;margin-left:2px;border:2px solid #2f4154;padding:1px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.pathwayMapper .toolbar #searchGeneToolbar{float:right;margin-right:0!important;border:none!important}.pathwayMapper .toolbar .input-group.input-group-unstyled input.form-control{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.pathwayMapper .toolbar .input-group-unstyled .input-group-addon{border-radius:4px;border:0;background-color:transparent}.pathwayMapper .toolbar .form-group{margin:0!important}.pathwayMapper .control-label,.pathwayMapper .input-group input[type=checkbox]{margin-top:10px}.pathwayMapper .toolbar img{height:22px;margin-left:2px;margin-right:2px}.pathwayMapper .gridModal{width:350px!important}.pathwayMapper .geneSearchDiv input{border-radius:6px;border:2px solid #2b2b2d;box-shadow:none!important;-webkit-box-shadow:none!important;-moz-box-shadow:none!important;width:100%}.pathwayMapper .geneSearchDiv input:focus{border-color:#1abc9c;outline:0;border-style:solid;box-shadow:none!important;-webkit-box-shadow:none!important;-moz-box-shadow:none!important}.pathwayMapper body{background-color:#fff}.pathwayMapper input[type=color]{padding:2px}.pathwayMapper input[type=color]:hover{cursor:pointer}.pathwayMapper #colorPickerButton{padding-top:10px}.pathwayMapper .form-control:focus{border:2px solid #1abc9c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #1abc9c;color:#2f4154}.pathwayMapper .cy-panzoom{position:absolute}.pathwayMapper .cytoscape-navigatorView{background:#1abc9c}.pathwayMapper .cytoscape-navigator-wrapper{position:absolute;border:2px solid #2f4154;border-radius:6px;background:#fff;z-index:100;width:300px;height:200px;bottom:8.5%;right:3.5%;overflow:hidden}.pathwayMapper .btn:focus{outline:0!important}.pathwayMapper .pathwayPanel .fileNameContent{color:#2f4154;margin-bottom:10px;padding:5px;cursor:pointer;min-width:100px}.pathwayMapper .pathwayPanel div[contenteditable=true]:focus{outline:#1abc9c solid 2px;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #1abc9c;background-color:#fff}.pathwayMapper .pathwayPanel textarea{width:170px;height:50px;margin-bottom:10px;z-index:999999}.pathwayMapper .mainContentWrapper{display:flex}.pathwayMapper .sideBarWrapper{min-width:130px;max-width:130px;font-size:12px}.pathwayMapper .control-label{color:rgba(23,22,22,.78)!important;font-weight:300!important}.pathwayMapper .buttonContainer,.pathwayMapper .edgePaletteWrapper,.pathwayMapper .pnl .pnl-header{text-align:center}.pathwayMapper .input-group{margin-bottom:5px;width:100%}.pathwayMapper .input-group .form-control{border-radius:6px!important}.pathwayMapper .edgePaletteWrapper .list-group{margin-bottom:0!important}.pathwayMapper .edgePaletteWrapper .list-group .list-group-item{border:none!important}.pathwayMapper .edgePaletteWrapper .edge-palette .list-group-item.active,.pathwayMapper .edgePaletteWrapper .edge-palette .list-group-item.active:focus,.pathwayMapper .edgePaletteWrapper .edge-palette .list-group-item.active:hover{background-color:#1abc9c!important}.pathwayMapper .edgePaletteWrapper .edge-palette .list-group-item{padding:7px 5px}.pathwayMapper .edgePaletteWrapper .edge-palette a{margin-bottom:5px;border-radius:6px;font-size:12px}.pathwayMapper .edgePaletteWrapper .edge-palette a img{width:30px}.pathwayMapper footer{background-color:#eee;color:#393939;height:100%}.pathwayMapper .pageContentWrapper{margin-bottom:70px}.pathwayMapper .navbar-nav>.open>a,.pathwayMapper .navbar-nav>.open>a:focus,.pathwayMapper .navbar-nav>.open>a:hover{color:#fff!important;background-color:#1abc9c!important;border-left-color:transparent}.pathwayMapper .navbar-nav>.open>.dropdown-menu>li>a{color:#fff!important;border-radius:4px!important;font-size:12px!important}.pathwayMapper .navbar-nav>.open>.dropdown-menu{background-color:#2f4154!important}.pathwayMapper .navbar-nav>li>.dropdown-menu,.pathwayMapper .navbar-nav>li>.dropdown-submenu{border-radius:4px!important;border:none}.pathwayMapper .navbar-nav>.open>.dropdown-menu>li>a:focus,.pathwayMapper .navbar-nav>.open>.dropdown-menu>li>a:hover{color:#fff;background-color:#1abc9c}.pathwayMapper .navbar{border-radius:0 0 6px 6px;background-color:#2f4154;border:none!important;margin-bottom:5px!important}.pathwayMapper .navbar-nav a{transition:all .2s linear}.pathwayMapper .navbar-nav>li>a{color:#fff!important;font-weight:500!important;font-size:12px}.pathwayMapper .navbar-nav>li>a:hover{color:#1abc9c!important}.pathwayMapper .navbar-brand{color:#fff!important;font-size:16px;font-weight:700}.pathwayMapper .pnl{margin-bottom:10px;border-radius:6px;box-shadow:0 1px 1px rgba(0,0,0,.15),0 -1px 1px rgba(0,0,0,.15)}.pathwayMapper .pnl .pnl-header{background-color:#1abc9c;border-top-left-radius:6px;border-top-right-radius:6px;padding:8px 5px 5px;color:#fff;font-size:12px;font-weight:900}.pathwayMapper .pnl .pnl-body{background-color:#eff0f2;padding:4px 2px;border-bottom-left-radius:6px;border-bottom-right-radius:6px}.pathwayMapper .pnl .pnl-body .buttonContainer>button{border:none!important}.pathwayMapper .pnl .pnl-body .dragButtonContainer{width:115px;margin-left:auto;margin-right:auto}.pathwayMapper .customMargins{margin-left:3%!important;margin-right:3%!important}.pathwayMapper .leftPanelFix{padding-left:0}.pathwayMapper .hiddenfile{width:0;height:0;overflow:hidden}.pathwayMapper .buttonContainer{margin-bottom:5px}.pathwayMapper .buttonContainer button{font-size:12px;width:85%}.pathwayMapper .cyContainer{border:3px solid #1abc9c;height:780px;border-radius:6px;padding-right:0!important;padding-left:0!important;width:100%;margin-left:10px}.pathwayMapper #cy{height:100%}.pathwayMapper .html5tooltip-box{background-color:rgba(47,65,84,.92);border-radius:8px}/* +.pathwayMapper .modal .modal-body .aboutImageContent,.pathwayMapper .modal .modal-body .adressText{margin-bottom:15px}.pathwayMapper #gridOptionsDiv .modal,.pathwayMapper #gridOptionsDiv .modal-body,.pathwayMapper #layoutPropertiesDiv .modal,.pathwayMapper #layoutPropertiesDiv .modal-body,.pathwayMapper #pathwayDetailsDiv .modal,.pathwayMapper #pathwayDetailsDiv .modal-body{max-height:100%}.pathwayMapper .modal,.pathwayMapper .modal .modal-footer,.pathwayMapper .pubmedIDLabel{text-align:center}.pathwayMapper .modal .modal-body .aboutImageContent label{font-weight:400;font-size:24px;color:#1974b8}.pathwayMapper .modal .modal-body h3,.pathwayMapper .modal .modal-footer a{color:#1abc9c}.pathwayMapper .modal .modal-body .adressText p{margin-bottom:0!important}.pathwayMapper #aboutModal .modal-dialog{width:400px}.pathwayMapper #edge_legend_modal .modal-body img,.pathwayMapper #layoutPropertiesDiv .modal-dialog,.pathwayMapper #node_legend_modal .modal-body img{width:500px}.pathwayMapper #quickHelpModal .modal-body ul li{margin-bottom:15px}.pathwayMapper .ui-cytoscape-nodeadd{z-index:99999;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;margin-bottom:5px}.pathwayMapper #ui-cytoscape-nodeadd-icon{font-size:1.3em!important;cursor:pointer}.pathwayMapper #ui-cytoscape-nodeadd-icon .explanationText{font:14px helvetica neue,helvetica,arial,sans-serif}.pathwayMapper #ui-cytoscape-nodeadd-icon img{width:110px}.pathwayMapper .ui-cytoscape-nodeadd-nodediv{z-index:99999;padding:3px;text-align:center;width:110px;-webkit-backface-visibility:hidden;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.pathwayMapper .dropdown-submenu{position:relative;font-size:12px!important}.pathwayMapper .dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:0;margin-left:0;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;background-color:#34495e!important}.pathwayMapper .dropdown-submenu:hover>.dropdown-menu{display:block}.pathwayMapper .dropdown-submenu>.dropdown-menu>li>a{color:#fff!important;font-size:12px!important}.pathwayMapper .dropdown-submenu>.dropdown-menu>li>a:hover{color:#fff!important;background-color:#1abc9c!important;border-radius:4px!important}.pathwayMapper .dropdown-submenu>a:after{display:block;content:" ";float:right;width:0;height:0;border-color:transparent transparent transparent #ccc;border-style:solid;border-width:5px 0 5px 5px;margin-top:5px;margin-right:-10px}.pathwayMapper #gridOptionsDiv .modal-footer button,.pathwayMapper #layoutPropertiesDiv .modal-footer button,.pathwayMapper #pathwayDetailsDiv .modal-footer button{border:none!important}.pathwayMapper .geneDetails,.pathwayMapper .qtipLabel{margin-top:10px}.pathwayMapper #pathwayDetailsDiv .modal .form-control:focus,.pathwayMapper #pathwayDetailsDiv .modal-body .form-control:focus{box-shadow:inset 0 2px 2px rgba(0,0,0,.075),0 0 8px #1abc9c;color:#2f4154}.pathwayMapper .form-control:focus,.pathwayMapper .qtip-tipsy .form-control:focus{box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #1abc9c}.pathwayMapper .pubmedIDList a{cursor:pointer}.pathwayMapper .qtipRemovePmedID{float:right}.pathwayMapper .qtipRemovePmedID:hover{color:#1abc9c;cursor:pointer}.pathwayMapper .inputCol{padding-left:0!important}.pathwayMapper .qtip-tipsy{background:rgba(47,65,84,.92);color:#fff;border:0 solid transparent;font-size:12px;font-family:'Lucida Grande',sans-serif;font-weight:700;line-height:16px}.pathwayMapper .qtip-tipsy .qtip-content{padding:5px 10px}.pathwayMapper .qtip-tipsy .scrollable{max-height:200px;overflow-y:scroll}.pathwayMapper .qtip-tipsy .form-control:focus{border-color:#1abc9c}.pathwayMapper .qtip-tipsy a{color:#1abc9c}.pathwayMapper .centerText{text-align:center!important}.pathwayMapper .leftText{text-align:left!important}.pathwayMapper .justifyText{text-align:justify!important}.pathwayMapper .popover{max-width:400px}.pathwayMapper .popover span{background-color:#e74c3c}.pathwayMapper .welcomePageContainer{position:fixed;top:0;left:0;background-color:#f6f6f6;z-index:100;height:100%;display:table;width:100%}.pathwayMapper .welcomePageContainer h1,.pathwayMapper .welcomePageContainer h3{color:#2f4154}.pathwayMapper .welcomePageContainer .landingContent{height:100%;position:relative;display:table-cell;vertical-align:middle;padding-top:70px;padding-bottom:70px}.pathwayMapper .welcomePageContainer .landingContent .creditInformation{font-weight:500;margin-top:25px;color:#1abc9c}.pathwayMapper .welcomePageContainer .landingContent .creditInformation a{color:#1abc9c}.pathwayMapper .welcomePageContainer .landingContent .contactInformation{font-weight:500;margin-top:25px;color:#979797}.pathwayMapper .welcomePageContainer .landingContent .contactInformation a{color:#979797}.pathwayMapper .welcomePageContainer .welcomePageLoading{display:none;margin-top:20px;margin-bottom:20px}.pathwayMapper .welcomePageContainer .welcomePageLoading i{color:#1abc9c}.pathwayMapper .welcomePageContainer .welPageButtons{margin-top:30px}.pathwayMapper .welcomePageContainer .welcomePageCheckable{display:inline-block;padding:10px;background-color:#fff;border-radius:6px;border:2px solid #979797;color:#606060;font-weight:500;transition:all .2s linear;min-width:180px;cursor:pointer}.pathwayMapper .welcomePageContainer .welcomePageCheckable i{visibility:hidden}.pathwayMapper .welcomePageContainer .active,.pathwayMapper .welcomePageContainer .welcomePageCheckable:hover{color:#2f4154;border-color:#1abc9c}.pathwayMapper .welcomePageContainer .active i,.pathwayMapper .welcomePageContainer .welcomePageCheckable:hover i{visibility:visible;color:#1abc9c}.pathwayMapper .welcomePageContainer .continueRow{margin-top:30px;visibility:hidden;cursor:pointer}.pathwayMapper .welcomePageContainer .continueButton{padding:10px;background-color:#2f4154;border-radius:6px;color:#fff;font-weight:500;transition:all .2s linear;max-width:200px;margin-left:auto;margin-right:auto}.pathwayMapper .welcomePageContainer .continueButton:hover{background-color:#1abc9c}.pathwayMapper .welcomePageContainer .buttonsSeparator{margin-left:10px;margin-right:10px;font-weight:600}.pathwayMapper .modal .modal-header{background-color:#ececec;border-top-left-radius:6px;border-top-right-radius:6px}.pathwayMapper .modal .modal-footer{background-color:#ececec;border-bottom-left-radius:6px;border-bottom-right-radius:6px}.pathwayMapper .modal .close{outline:0!important}.pathwayMapper .modal .modal-title{color:#2f4154}.pathwayMapper .modal .close:hover{color:#1abc9c}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicLoadButton{padding:10px;border-radius:6px;outline:0;background-color:#fff;border:2px solid #2f4154;color:#2f4154;transition:all .2s linear}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicLoadButton:hover{border-color:#1abc9c;color:#1abc9c}.pathwayMapper #genomicDataExplorerDiv .modal-body .wrapper{margin-top:20px;margin-bottom:20px}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicChecboxDiv{text-align:left!important;margin-left:50px!important}.pathwayMapper #cbioPortalModal .modal-body,.pathwayMapper .control-label{text-align:left}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicDataContentDiv{margin-bottom:15px}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicDataContentDiv h4{margin-bottom:5px}.pathwayMapper .cy-context-menus-cxt-menu{display:none;z-index:1000;position:absolute;padding:0;margin:0;outline:0;border-radius:6px;border:none;opacity:.9}.pathwayMapper .cy-context-menus-cxt-menu:first-child{border-top-left-radius:6px;border-top-right-radius:6px}.pathwayMapper .cy-context-menus-cxt-menu:last-child{border-bottom-left-radius:6px;border-bottom-right-radius:6px}.pathwayMapper .cy-context-menus-cxt-menuitem{display:block;z-index:1000;width:100%;padding:3px 20px;position:relative;margin:0;background-color:#2f4154;font-weight:400;font-size:13px;white-space:nowrap;border:0;text-align:left;outline:0}.pathwayMapper .pathwayPanel .fileNameContent,.pathwayMapper body{font:14px helvetica neue,helvetica,arial,sans-serif}.pathwayMapper .cy-context-menus-cxt-menuitem:enabled{color:#fff}.pathwayMapper .cy-context-menus-ctx-operation:focus{outline:0}.pathwayMapper .cy-context-menus-cxt-menuitem:hover{color:#fff;text-decoration:none;background-color:#1abc9c;background-image:none;cursor:pointer}.pathwayMapper .cy-context-menus-cxt-menuitem[title]:before{content:attr(title)}.pathwayMapper .cy-context-menus-cxt-menuitem:not([title]):before{content:"\2630"}.pathwayMapper #cbioPortalModal .modal-body .bootstrap-select>.dropdown-toggle{width:500px}.pathwayMapper #cbioPortalModal .modal-body .section{margin-bottom:20px}.pathwayMapper .animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.pathwayMapper .animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.pathwayMapper .animated.hinge{-webkit-animation-duration:2s;animation-duration:2s}.pathwayMapper .animated.bounceIn,.pathwayMapper .animated.bounceOut,.pathwayMapper .animated.flipOutX,.pathwayMapper .animated.flipOutY{-webkit-animation-duration:.75s;animation-duration:.75s}@-webkit-keyframes bounce{20%,53%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}@keyframes bounce{20%,53%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}.pathwayMapper .bounce{-webkit-animation-name:bounce;animation-name:bounce;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes flash{50%,from,to{opacity:1}25%,75%{opacity:0}}@keyframes flash{50%,from,to{opacity:1}25%,75%{opacity:0}}.pathwayMapper .flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}}@keyframes pulse{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}}.pathwayMapper .pulse{-webkit-animation-name:pulse;animation-name:pulse}@-webkit-keyframes rubberBand{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}}@keyframes rubberBand{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}}.pathwayMapper .rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shake{from,to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@keyframes shake{from,to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}.pathwayMapper .shake{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}.pathwayMapper .headShake{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-name:headShake;animation-name:headShake}@-webkit-keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}to{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}@keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}to{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}.pathwayMapper .swing{-webkit-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}}@keyframes tada{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}}.pathwayMapper .tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{from,to{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}}@keyframes wobble{from,to{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}}.pathwayMapper .wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes jello{11.1%,from,to{-webkit-transform:none;transform:none}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.39062deg) skewY(.39062deg);transform:skewX(.39062deg) skewY(.39062deg)}88.8%{-webkit-transform:skewX(-.19531deg) skewY(-.19531deg);transform:skewX(-.19531deg) skewY(-.19531deg)}}@keyframes jello{11.1%,from,to{-webkit-transform:none;transform:none}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.39062deg) skewY(.39062deg);transform:skewX(.39062deg) skewY(.39062deg)}88.8%{-webkit-transform:skewX(-.19531deg) skewY(-.19531deg);transform:skewX(-.19531deg) skewY(-.19531deg)}}.pathwayMapper .jello{-webkit-animation-name:jello;animation-name:jello;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes bounceIn{20%,40%,60%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes bounceIn{20%,40%,60%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.pathwayMapper .bounceIn{-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceInDown{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInDown{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}.pathwayMapper .bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInLeft{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}.pathwayMapper .bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInRight{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}.pathwayMapper .bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes bounceInUp{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}@keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}.pathwayMapper .bounceOut{-webkit-animation-name:bounceOut;animation-name:bounceOut}@-webkit-keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.pathwayMapper .bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.pathwayMapper .bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.pathwayMapper .bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.pathwayMapper .bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}.pathwayMapper .fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{from{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDownBig{from{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{from{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeft{from{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{from{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeftBig{from{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{from{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRight{from{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{from{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRightBig{from{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{from{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUp{from{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{from{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUpBig{from{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeOut{from{opacity:1}to{opacity:0}}@keyframes fadeOut{from{opacity:1}to{opacity:0}}.pathwayMapper .fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes fadeOutDown{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.pathwayMapper .fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes fadeOutDownBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.pathwayMapper .fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes fadeOutLeft{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.pathwayMapper .fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes fadeOutLeftBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.pathwayMapper .fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes fadeOutRight{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.pathwayMapper .fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes fadeOutRightBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.pathwayMapper .fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes fadeOutUp{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.pathwayMapper .fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes fadeOutUpBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.pathwayMapper .fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes flip{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.pathwayMapper .animated.flip{-webkit-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes flipInX{from{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{from{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.pathwayMapper .flipInX{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInX;animation-name:flipInX}.pathwayMapper .flipInY,.pathwayMapper .flipOutX{-webkit-backface-visibility:visible!important}@-webkit-keyframes flipInY{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.pathwayMapper .flipInY{backface-visibility:visible!important;-webkit-animation-name:flipInY;animation-name:flipInY}@-webkit-keyframes flipOutX{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}@keyframes flipOutX{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}.pathwayMapper .flipOutX{-webkit-animation-name:flipOutX;animation-name:flipOutX;backface-visibility:visible!important}@-webkit-keyframes flipOutY{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}@keyframes flipOutY{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}.pathwayMapper .flipOutY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipOutY;animation-name:flipOutY}@-webkit-keyframes lightSpeedIn{from{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}to{-webkit-transform:none;transform:none;opacity:1}}@keyframes lightSpeedIn{from{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}to{-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .lightSpeedIn{-webkit-animation-name:lightSpeedIn;animation-name:lightSpeedIn;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOut{from{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}@keyframes lightSpeedOut{from{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.pathwayMapper .lightSpeedOut{-webkit-animation-name:lightSpeedOut;animation-name:lightSpeedOut;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{from{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateIn{from{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn}@-webkit-keyframes rotateInDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft}@-webkit-keyframes rotateInDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight}@-webkit-keyframes rotateInUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft}@-webkit-keyframes rotateInUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight}@-webkit-keyframes rotateOut{from{-webkit-transform-origin:center;transform-origin:center;opacity:1}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}@keyframes rotateOut{from{-webkit-transform-origin:center;transform-origin:center;opacity:1}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}.pathwayMapper .rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut}@-webkit-keyframes rotateOutDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}}@keyframes rotateOutDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}}.pathwayMapper .rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft}@-webkit-keyframes rotateOutDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.pathwayMapper .rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight}@-webkit-keyframes rotateOutUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.pathwayMapper .rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft}@-webkit-keyframes rotateOutUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}@keyframes rotateOutUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}.pathwayMapper .rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight}@-webkit-keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}@keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}.pathwayMapper .hinge{-webkit-animation-name:hinge;animation-name:hinge}@-webkit-keyframes rollIn{from{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes rollIn{from{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}@keyframes rollOut{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}.pathwayMapper .rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}.pathwayMapper .zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInDown{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInLeft{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInRight{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInUp{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes zoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}.pathwayMapper .zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown}@-webkit-keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}@keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}.pathwayMapper .zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft}@-webkit-keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}@keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}.pathwayMapper .zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight}@-webkit-keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp}@-webkit-keyframes slideInDown{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInDown{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{from{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInLeft{from{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{from{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInRight{from{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideInUp{from{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInUp{from{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .slideInUp{-webkit-animation-name:slideInUp;animation-name:slideInUp}@-webkit-keyframes slideOutDown{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes slideOutDown{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.pathwayMapper .slideOutDown{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}@-webkit-keyframes slideOutLeft{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes slideOutLeft{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.pathwayMapper .slideOutLeft{-webkit-animation-name:slideOutLeft;animation-name:slideOutLeft}@-webkit-keyframes slideOutRight{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes slideOutRight{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.pathwayMapper .slideOutRight{-webkit-animation-name:slideOutRight;animation-name:slideOutRight}@-webkit-keyframes slideOutUp{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes slideOutUp{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.pathwayMapper .slideOutUp{-webkit-animation-name:slideOutUp;animation-name:slideOutUp}.pathwayMapper [data-notify=container][class*=alert-pathwayMapper-] .close{opacity:1;color:#fff;margin-top:7px;outline:0}.pathwayMapper .control-label,.pathwayMapper .input-group input[type=checkbox]{margin-top:10px}.pathwayMapper [data-notify=container][class*=alert-pathwayMapper-] .close:hover{color:#fff}.pathwayMapper [data-notify=container].alert-pathwayMapper-success{background-color:#1abc9c;color:#fff}.pathwayMapper [data-notify=container].alert-pathwayMapper-fail{background-color:#ff2644;color:#fff}.pathwayMapper .gridModal{width:350px!important}.pathwayMapper body{background-color:#fff}.pathwayMapper input[type=color]{padding:2px}.pathwayMapper input[type=color]:hover{cursor:pointer}.pathwayMapper #colorPickerButton{padding-top:10px}.pathwayMapper .form-control:focus{border:2px solid #1abc9c;color:#2f4154}.pathwayMapper .cy-panzoom{right:120px;z-index:100}.pathwayMapper .cytoscape-navigatorView{background:#1abc9c}.pathwayMapper .cytoscape-navigator-wrapper{position:absolute;border:2px solid #2f4154;border-radius:6px;background:#fff;z-index:100;width:300px;height:200px;bottom:8.5%;right:3.5%;overflow:hidden}.pathwayMapper .btn:focus{outline:0!important}.pathwayMapper .pathwayPanel .fileNameContent{color:#2f4154;margin-bottom:10px;padding:5px;cursor:pointer;min-width:100px}.pathwayMapper .pathwayPanel div[contenteditable=true]:focus{outline:#1abc9c solid 2px;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #1abc9c;background-color:#fff}.pathwayMapper .pathwayPanel textarea{width:170px;height:50px;margin-bottom:10px;z-index:999999}.pathwayMapper .mainContentWrapper{display:flex}.pathwayMapper .sideBarWrapper{min-width:130px;max-width:130px;font-size:12px}.pathwayMapper .control-label{color:rgba(23,22,22,.78)!important;font-weight:300!important}.pathwayMapper .buttonContainer,.pathwayMapper .edgePaletteWrapper,.pathwayMapper .pnl .pnl-header{text-align:center}.pathwayMapper .input-group{margin-bottom:5px;width:100%}.pathwayMapper .input-group .form-control{border-radius:6px}.pathwayMapper .edgePaletteWrapper .list-group{margin-bottom:0!important}.pathwayMapper .edgePaletteWrapper .list-group .list-group-item{border:none!important}.pathwayMapper .edgePaletteWrapper .edge-palette .list-group-item.active,.pathwayMapper .edgePaletteWrapper .edge-palette .list-group-item.active:focus,.pathwayMapper .edgePaletteWrapper .edge-palette .list-group-item.active:hover{background-color:#1abc9c!important}.pathwayMapper .edgePaletteWrapper .edge-palette .list-group-item{padding:7px 5px}.pathwayMapper .edgePaletteWrapper .edge-palette a{margin-bottom:5px;border-radius:6px;font-size:12px}.pathwayMapper .edgePaletteWrapper .edge-palette a img{width:30px}.pathwayMapper footer{background-color:#eee;color:#393939;height:100%}.pathwayMapper .pageContentWrapper{margin-bottom:70px}.pathwayMapper .navbar-nav>.open>a,.pathwayMapper .navbar-nav>.open>a:focus,.pathwayMapper .navbar-nav>.open>a:hover{color:#fff!important;background-color:#1abc9c!important;border-left-color:transparent}.pathwayMapper .navbar-nav>.open>.dropdown-menu>li>a{color:#fff!important;border-radius:4px!important;font-size:12px!important}.pathwayMapper .navbar-nav>.open>.dropdown-menu{background-color:#2f4154!important}.pathwayMapper .navbar-nav>li>.dropdown-menu,.pathwayMapper .navbar-nav>li>.dropdown-submenu{border-radius:4px!important;border:none}.pathwayMapper .navbar-nav>.open>.dropdown-menu>li>a:focus,.pathwayMapper .navbar-nav>.open>.dropdown-menu>li>a:hover{color:#fff;background-color:#1abc9c}.pathwayMapper .navbar{border-radius:0 0 6px 6px;background-color:#2f4154;border:none!important;margin-bottom:10px!important}.pathwayMapper .navbar-nav a{transition:all .2s linear}.pathwayMapper .navbar-nav>li>a{color:#fff!important;font-weight:500!important;font-size:12px}.pathwayMapper .navbar-nav>li>a:hover{color:#1abc9c!important}.pathwayMapper .navbar-brand{color:#fff!important;font-size:16px;font-weight:700}.pathwayMapper .pnl{margin-bottom:10px;border-radius:6px;box-shadow:0 1px 1px rgba(0,0,0,.15),0 -1px 1px rgba(0,0,0,.15)}.pathwayMapper .pnl .pnl-header{background-color:#1abc9c;border-top-left-radius:6px;border-top-right-radius:6px;padding:8px 5px 5px;color:#fff;font-size:12px;font-weight:900}.pathwayMapper .pnl .pnl-body{background-color:#eff0f2;padding:4px 2px;border-bottom-left-radius:6px;border-bottom-right-radius:6px}.pathwayMapper .pnl .pnl-body .buttonContainer>button{border:none!important}.pathwayMapper .pnl .pnl-body .dragButtonContainer{width:115px;margin-left:auto;margin-right:auto}.pathwayMapper .customMargins{margin-left:3%!important;margin-right:3%!important}.pathwayMapper .leftPanelFix{padding-left:0}.pathwayMapper .hiddenfile{width:0;height:0;overflow:hidden}.pathwayMapper .buttonContainer{margin-bottom:5px}.pathwayMapper .buttonContainer button{font-size:12px;width:85%}.pathwayMapper .cyContainer{border:3px solid #1abc9c;height:850px;border-radius:6px;padding-right:0!important;padding-left:0!important;width:100%;margin-left:10px}.pathwayMapper #cy{height:100%} +.pathwayMapper .modal .modal-body .aboutImageContent,.pathwayMapper .modal .modal-body .adressText{margin-bottom:15px}.pathwayMapper #gridOptionsDiv .modal,.pathwayMapper #gridOptionsDiv .modal-body,.pathwayMapper #layoutPropertiesDiv .modal,.pathwayMapper #layoutPropertiesDiv .modal-body,.pathwayMapper #pathwayDetailsDiv .modal,.pathwayMapper #pathwayDetailsDiv .modal-body{max-height:100%}.pathwayMapper .modal,.pathwayMapper .modal .modal-footer,.pathwayMapper .pubmedIDLabel{text-align:center}.pathwayMapper .modal .modal-body .aboutImageContent label{font-weight:400;font-size:24px;color:#1974b8}.pathwayMapper .modal .modal-body h3,.pathwayMapper .modal .modal-footer a{color:#1abc9c}.pathwayMapper .modal .modal-body .adressText p{margin-bottom:0!important}.pathwayMapper #aboutModal .modal-dialog{width:400px}.pathwayMapper #edge_legend_modal .modal-body img,.pathwayMapper #layoutPropertiesDiv .modal-dialog,.pathwayMapper #node_legend_modal .modal-body img{width:500px}.pathwayMapper #quickHelpModal .modal-body ul li{margin-bottom:15px}.pathwayMapper .ui-cytoscape-nodeadd{z-index:99999;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;margin-bottom:5px}.pathwayMapper #ui-cytoscape-nodeadd-icon{font-size:1.3em!important;cursor:pointer}.pathwayMapper #ui-cytoscape-nodeadd-icon .explanationText{font:14px helvetica neue,helvetica,arial,sans-serif}.pathwayMapper #ui-cytoscape-nodeadd-icon img{width:110px}.pathwayMapper .ui-cytoscape-nodeadd-nodediv{z-index:99999;padding:3px;text-align:center;width:110px;-webkit-backface-visibility:hidden;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.pathwayMapper .dropdown-submenu{position:relative;font-size:12px!important}.pathwayMapper .dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:0;margin-left:0;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;background-color:#34495e!important}.pathwayMapper .dropdown-submenu:hover>.dropdown-menu{display:block}.pathwayMapper .dropdown-submenu>.dropdown-menu>li>a{color:#fff!important;font-size:12px!important}.pathwayMapper .dropdown-submenu>.dropdown-menu>li>a:hover{color:#fff!important;background-color:#1abc9c!important;border-radius:4px!important}.pathwayMapper .dropdown-submenu>a:after{display:block;content:" ";float:right;width:0;height:0;border-color:transparent transparent transparent #ccc;border-style:solid;border-width:5px 0 5px 5px;margin-top:5px;margin-right:-10px}.pathwayMapper #gridOptionsDiv .modal-footer button,.pathwayMapper #layoutPropertiesDiv .modal-footer button,.pathwayMapper #pathwayDetailsDiv .modal-footer button{border:none!important}.pathwayMapper .geneDetails,.pathwayMapper .qtipLabel{margin-top:10px}.pathwayMapper #pathwayDetailsDiv .modal .form-control:focus,.pathwayMapper #pathwayDetailsDiv .modal-body .form-control:focus{box-shadow:inset 0 2px 2px rgba(0,0,0,.075),0 0 8px #1abc9c;color:#2f4154}.pathwayMapper .pubmedIDList a{cursor:pointer}.pathwayMapper .qtipRemovePmedID{float:right}.pathwayMapper .qtipRemovePmedID:hover{color:#1abc9c;cursor:pointer}.pathwayMapper .inputCol{padding-left:0!important}.pathwayMapper .qtip-tipsy{background:rgba(47,65,84,.92);color:#fff;border:0 solid transparent;font-size:12px;font-family:'Lucida Grande',sans-serif;font-weight:700;line-height:16px}.pathwayMapper .qtip-tipsy .qtip-content{padding:5px 10px}.pathwayMapper .qtip-tipsy .scrollable{max-height:200px;overflow-y:scroll}.pathwayMapper .qtip-tipsy .form-control:focus{border-color:#1abc9c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #1abc9c}.pathwayMapper .qtip-tipsy a{color:#1abc9c}.pathwayMapper .centerText{text-align:center!important}.pathwayMapper .leftText{text-align:left!important}.pathwayMapper .justifyText{text-align:justify!important}.pathwayMapper .popover{max-width:410px}.pathwayMapper .popover span{background-color:#e74c3c}.pathwayMapper .welcomePageContainer{position:fixed;top:0;left:0;background-color:#f6f6f6;z-index:100;height:100%;display:table;width:100%}.pathwayMapper .welcomePageContainer h1,.pathwayMapper .welcomePageContainer h3{color:#2f4154}.pathwayMapper .welcomePageContainer .landingContent{height:100%;position:relative;display:table-cell;vertical-align:middle;padding-top:70px;padding-bottom:70px}.pathwayMapper .welcomePageContainer .welcomePageLoading{display:none;margin-top:20px;margin-bottom:20px}.pathwayMapper .welcomePageContainer .welcomePageLoading i{color:#1abc9c}.pathwayMapper .welcomePageContainer .welPageButtons{margin-top:30px}.pathwayMapper .welcomePageContainer .welcomePageCheckable{display:inline-block;padding:10px;background-color:#fff;border-radius:6px;border:2px solid #979797;color:#606060;font-weight:500;transition:all .2s linear;min-width:180px;cursor:pointer}.pathwayMapper .welcomePageContainer .welcomePageCheckable i{visibility:hidden}.pathwayMapper .welcomePageContainer .active,.pathwayMapper .welcomePageContainer .welcomePageCheckable:hover{color:#2f4154;border-color:#1abc9c}.pathwayMapper .welcomePageContainer .active i,.pathwayMapper .welcomePageContainer .welcomePageCheckable:hover i{visibility:visible;color:#1abc9c}.pathwayMapper .welcomePageContainer .continueRow{margin-top:30px;visibility:hidden;cursor:pointer}.pathwayMapper .welcomePageContainer .continueButton{padding:10px;background-color:#2f4154;border-radius:6px;color:#fff;font-weight:500;transition:all .2s linear;max-width:200px;margin-left:auto;margin-right:auto}.pathwayMapper .welcomePageContainer .continueButton:hover{background-color:#1abc9c}.pathwayMapper .welcomePageContainer .buttonsSeparator{margin-left:10px;margin-right:10px;font-weight:600}.pathwayMapper .welcomePageContainer .creditInformation{font-weight:500;margin-top:25px;color:#1abc9c}.pathwayMapper .welcomePageContainer .creditInformation a{color:#1abc9c}.pathwayMapper .welcomePageContainer .contactInformation{font-weight:500;margin-top:25px;color:#979797}.pathwayMapper .welcomePageContainer .contactInformation a{color:#979797}.pathwayMapper .modal .modal-header{background-color:#ececec;border-top-left-radius:6px;border-top-right-radius:6px}.pathwayMapper .modal .modal-footer{background-color:#ececec;border-bottom-left-radius:6px;border-bottom-right-radius:6px}.pathwayMapper .modal .close{outline:0!important}.pathwayMapper .modal .modal-title{color:#2f4154}.pathwayMapper .modal .close:hover{color:#1abc9c}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicLoadButton{padding:10px;border-radius:6px;outline:0;background-color:#fff;border:2px solid #2f4154;color:#2f4154;transition:all .2s linear}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicLoadButton:hover{border-color:#1abc9c;color:#1abc9c}.pathwayMapper #genomicDataExplorerDiv .modal-body .wrapper{margin-top:20px;margin-bottom:20px}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicChecboxDiv{text-align:left!important;margin-left:50px!important}.pathwayMapper #cbioPortalModal .modal-body,.pathwayMapper .control-label{text-align:left}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicDataContentDiv{margin-bottom:15px}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicDataContentDiv h4{margin-bottom:5px}.pathwayMapper .cy-context-menus-cxt-menu{display:none;z-index:1000;position:absolute;border:1px solid #a0a0a0;padding:0;margin:0;width:auto;border-radius:6px;opacity:.9;outline:0}.pathwayMapper #cy-context-menus-cxt-menu:first-child{border-top-left-radius:6px;border-top-right-radius:6px}.pathwayMapper #cy-context-menus-cxt-menu:last-child{border-bottom-left-radius:6px;border-bottom-right-radius:6px}.pathwayMapper .cy-context-menus-cxt-menuitem{display:block;z-index:1000;width:100%;padding:3px 20px;position:relative;margin:0;background-color:#2f4154;font-weight:400;font-size:12px;white-space:nowrap;border:0;text-align:left}.pathwayMapper .pathwayPanel .fileNameContent,.pathwayMapper body{font:14px helvetica neue,helvetica,arial,sans-serif}.pathwayMapper .cy-context-menus-cxt-menuitem:enabled{color:#fff}.pathwayMapper .cy-context-menus-ctx-operation:focus{outline:0}.pathwayMapper .cy-context-menus-cxt-menuitem:hover{color:#fff;text-decoration:none;background-color:#1abc9c;background-image:none;cursor:pointer}.pathwayMapper .cy-context-menus-cxt-menuitem[content]:before{content:attr(content)}.pathwayMapper .cy-context-menus-divider{border-bottom:1px solid #a0a0a0}.pathwayMapper #cbioPortalModal .modal-body .bootstrap-select>.dropdown-toggle{width:500px}.pathwayMapper #cbioPortalModal .modal-body .section{margin-bottom:20px}.pathwayMapper .animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.pathwayMapper .animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.pathwayMapper .animated.hinge{-webkit-animation-duration:2s;animation-duration:2s}.pathwayMapper .animated.bounceIn,.pathwayMapper .animated.bounceOut,.pathwayMapper .animated.flipOutX,.pathwayMapper .animated.flipOutY{-webkit-animation-duration:.75s;animation-duration:.75s}@-webkit-keyframes bounce{20%,53%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}@keyframes bounce{20%,53%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}.pathwayMapper .bounce{-webkit-animation-name:bounce;animation-name:bounce;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes flash{50%,from,to{opacity:1}25%,75%{opacity:0}}@keyframes flash{50%,from,to{opacity:1}25%,75%{opacity:0}}.pathwayMapper .flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}}@keyframes pulse{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}}.pathwayMapper .pulse{-webkit-animation-name:pulse;animation-name:pulse}@-webkit-keyframes rubberBand{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}}@keyframes rubberBand{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}}.pathwayMapper .rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shake{from,to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@keyframes shake{from,to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}.pathwayMapper .shake{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}.pathwayMapper .headShake{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-name:headShake;animation-name:headShake}@-webkit-keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}to{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}@keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}to{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}.pathwayMapper .swing{-webkit-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}}@keyframes tada{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}}.pathwayMapper .tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{from,to{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}}@keyframes wobble{from,to{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}}.pathwayMapper .wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes jello{11.1%,from,to{-webkit-transform:none;transform:none}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.39062deg) skewY(.39062deg);transform:skewX(.39062deg) skewY(.39062deg)}88.8%{-webkit-transform:skewX(-.19531deg) skewY(-.19531deg);transform:skewX(-.19531deg) skewY(-.19531deg)}}@keyframes jello{11.1%,from,to{-webkit-transform:none;transform:none}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.39062deg) skewY(.39062deg);transform:skewX(.39062deg) skewY(.39062deg)}88.8%{-webkit-transform:skewX(-.19531deg) skewY(-.19531deg);transform:skewX(-.19531deg) skewY(-.19531deg)}}.pathwayMapper .jello{-webkit-animation-name:jello;animation-name:jello;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes bounceIn{20%,40%,60%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes bounceIn{20%,40%,60%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.pathwayMapper .bounceIn{-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceInDown{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInDown{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}.pathwayMapper .bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInLeft{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}.pathwayMapper .bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInRight{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}.pathwayMapper .bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes bounceInUp{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}@keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}.pathwayMapper .bounceOut{-webkit-animation-name:bounceOut;animation-name:bounceOut}@-webkit-keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.pathwayMapper .bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.pathwayMapper .bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.pathwayMapper .bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.pathwayMapper .bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}.pathwayMapper .fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{from{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDownBig{from{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{from{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeft{from{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{from{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeftBig{from{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{from{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRight{from{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{from{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRightBig{from{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{from{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUp{from{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{from{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUpBig{from{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeOut{from{opacity:1}to{opacity:0}}@keyframes fadeOut{from{opacity:1}to{opacity:0}}.pathwayMapper .fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes fadeOutDown{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.pathwayMapper .fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes fadeOutDownBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.pathwayMapper .fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes fadeOutLeft{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.pathwayMapper .fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes fadeOutLeftBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.pathwayMapper .fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes fadeOutRight{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.pathwayMapper .fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes fadeOutRightBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.pathwayMapper .fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes fadeOutUp{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.pathwayMapper .fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes fadeOutUpBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.pathwayMapper .fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes flip{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.pathwayMapper .animated.flip{-webkit-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes flipInX{from{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{from{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.pathwayMapper .flipInX{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInX;animation-name:flipInX}.pathwayMapper .flipInY,.pathwayMapper .flipOutX{-webkit-backface-visibility:visible!important}@-webkit-keyframes flipInY{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.pathwayMapper .flipInY{backface-visibility:visible!important;-webkit-animation-name:flipInY;animation-name:flipInY}@-webkit-keyframes flipOutX{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}@keyframes flipOutX{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}.pathwayMapper .flipOutX{-webkit-animation-name:flipOutX;animation-name:flipOutX;backface-visibility:visible!important}@-webkit-keyframes flipOutY{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}@keyframes flipOutY{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}.pathwayMapper .flipOutY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipOutY;animation-name:flipOutY}@-webkit-keyframes lightSpeedIn{from{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}to{-webkit-transform:none;transform:none;opacity:1}}@keyframes lightSpeedIn{from{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}to{-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .lightSpeedIn{-webkit-animation-name:lightSpeedIn;animation-name:lightSpeedIn;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOut{from{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}@keyframes lightSpeedOut{from{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.pathwayMapper .lightSpeedOut{-webkit-animation-name:lightSpeedOut;animation-name:lightSpeedOut;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{from{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateIn{from{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn}@-webkit-keyframes rotateInDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft}@-webkit-keyframes rotateInDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight}@-webkit-keyframes rotateInUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft}@-webkit-keyframes rotateInUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight}@-webkit-keyframes rotateOut{from{-webkit-transform-origin:center;transform-origin:center;opacity:1}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}@keyframes rotateOut{from{-webkit-transform-origin:center;transform-origin:center;opacity:1}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}.pathwayMapper .rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut}@-webkit-keyframes rotateOutDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}}@keyframes rotateOutDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}}.pathwayMapper .rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft}@-webkit-keyframes rotateOutDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.pathwayMapper .rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight}@-webkit-keyframes rotateOutUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.pathwayMapper .rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft}@-webkit-keyframes rotateOutUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}@keyframes rotateOutUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}.pathwayMapper .rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight}@-webkit-keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}@keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}.pathwayMapper .hinge{-webkit-animation-name:hinge;animation-name:hinge}@-webkit-keyframes rollIn{from{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes rollIn{from{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}@keyframes rollOut{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}.pathwayMapper .rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}.pathwayMapper .zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInDown{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInLeft{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInRight{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInUp{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes zoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}.pathwayMapper .zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown}@-webkit-keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}@keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}.pathwayMapper .zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft}@-webkit-keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}@keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}.pathwayMapper .zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight}@-webkit-keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp}@-webkit-keyframes slideInDown{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInDown{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{from{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInLeft{from{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{from{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInRight{from{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideInUp{from{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInUp{from{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .slideInUp{-webkit-animation-name:slideInUp;animation-name:slideInUp}@-webkit-keyframes slideOutDown{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes slideOutDown{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.pathwayMapper .slideOutDown{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}@-webkit-keyframes slideOutLeft{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes slideOutLeft{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.pathwayMapper .slideOutLeft{-webkit-animation-name:slideOutLeft;animation-name:slideOutLeft}@-webkit-keyframes slideOutRight{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes slideOutRight{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.pathwayMapper .slideOutRight{-webkit-animation-name:slideOutRight;animation-name:slideOutRight}@-webkit-keyframes slideOutUp{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes slideOutUp{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.pathwayMapper .slideOutUp{-webkit-animation-name:slideOutUp;animation-name:slideOutUp}.pathwayMapper [data-notify=container][class*=alert-pathwayMapper-] .close{opacity:1;color:#fff;margin-top:7px;outline:0}.pathwayMapper [data-notify=container][class*=alert-pathwayMapper-] .close:hover{color:#fff}.pathwayMapper [data-notify=container].alert-pathwayMapper-success{background-color:#1abc9c;color:#fff}.pathwayMapper [data-notify=container].alert-pathwayMapper-fail{background-color:#ff2644;color:#fff}.pathwayMapper .toolbar{margin-bottom:5px;padding:5px;background-color:#eff0f2;border-radius:6px}.pathwayMapper .toolbar .toolbar-button{margin-left:-1px;margin-right:-1px;border:2px solid #eff0f2;border-radius:6px;display:inline-block;cursor:pointer}.pathwayMapper .toolbar .toolbar-button:hover{border-color:#1abc9c}.pathwayMapper .toolbar .toolbar-button-focused{border-color:#1abc9c!important}.pathwayMapper .toolbar .btn-group{margin-right:2px;margin-left:2px;border:2px solid #2f4154;padding:1px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.pathwayMapper .toolbar #searchGeneToolbar{float:right;margin-right:0!important;border:none!important}.pathwayMapper .toolbar .input-group.input-group-unstyled input.form-control{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.pathwayMapper .toolbar .input-group-unstyled .input-group-addon{border-radius:4px;border:0;background-color:transparent}.pathwayMapper .toolbar .form-group{margin:0!important}.pathwayMapper .control-label,.pathwayMapper .input-group input[type=checkbox]{margin-top:10px}.pathwayMapper .toolbar img{height:22px;margin-left:2px;margin-right:2px}.pathwayMapper .gridModal{width:350px!important}.pathwayMapper .geneSearchDiv input{border-radius:6px;border:2px solid #2b2b2d;box-shadow:none!important;-webkit-box-shadow:none!important;-moz-box-shadow:none!important;width:100%}.pathwayMapper .geneSearchDiv input:focus{border-color:#1abc9c;outline:0;border-style:solid;box-shadow:none!important;-webkit-box-shadow:none!important;-moz-box-shadow:none!important}.pathwayMapper body{background-color:#fff}.pathwayMapper input[type=color]{padding:2px}.pathwayMapper input[type=color]:hover{cursor:pointer}.pathwayMapper #colorPickerButton{padding-top:10px}.pathwayMapper .form-control:focus{border:2px solid #1abc9c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #1abc9c;color:#2f4154}.pathwayMapper .cy-panzoom{position:absolute}.pathwayMapper .cytoscape-navigatorView{background:#1abc9c}.pathwayMapper .cytoscape-navigator-wrapper{position:absolute;border:2px solid #2f4154;border-radius:6px;background:#fff;z-index:100;width:300px;height:200px;bottom:8.5%;right:3.5%;overflow:hidden}.pathwayMapper .btn:focus{outline:0!important}.pathwayMapper .pathwayPanel .fileNameContent{color:#2f4154;margin-bottom:10px;padding:5px;cursor:pointer;min-width:100px}.pathwayMapper .pathwayPanel div[contenteditable=true]:focus{outline:#1abc9c solid 2px;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #1abc9c;background-color:#fff}.pathwayMapper .pathwayPanel textarea{width:170px;height:50px;margin-bottom:10px;z-index:999999}.pathwayMapper .mainContentWrapper{display:flex}.pathwayMapper .sideBarWrapper{min-width:130px;max-width:130px;font-size:12px}.pathwayMapper .control-label{color:rgba(23,22,22,.78)!important;font-weight:300!important}.pathwayMapper .buttonContainer,.pathwayMapper .edgePaletteWrapper,.pathwayMapper .pnl .pnl-header{text-align:center}.pathwayMapper .input-group{margin-bottom:5px;width:100%}.pathwayMapper .input-group .form-control{border-radius:6px}.pathwayMapper .edgePaletteWrapper .list-group{margin-bottom:0!important}.pathwayMapper .edgePaletteWrapper .list-group .list-group-item{border:none!important}.pathwayMapper .edgePaletteWrapper .edge-palette .list-group-item.active,.pathwayMapper .edgePaletteWrapper .edge-palette .list-group-item.active:focus,.pathwayMapper .edgePaletteWrapper .edge-palette .list-group-item.active:hover{background-color:#1abc9c!important}.pathwayMapper .edgePaletteWrapper .edge-palette .list-group-item{padding:7px 5px}.pathwayMapper .edgePaletteWrapper .edge-palette a{margin-bottom:5px;border-radius:6px;font-size:12px}.pathwayMapper .edgePaletteWrapper .edge-palette a img{width:30px}.pathwayMapper footer{background-color:#eee;color:#393939;height:100%}.pathwayMapper .pageContentWrapper{margin-bottom:70px}.pathwayMapper .navbar-nav>.open>a,.pathwayMapper .navbar-nav>.open>a:focus,.pathwayMapper .navbar-nav>.open>a:hover{color:#fff!important;background-color:#1abc9c!important;border-left-color:transparent}.pathwayMapper .navbar-nav>.open>.dropdown-menu>li>a{color:#fff!important;border-radius:4px!important;font-size:12px!important}.pathwayMapper .navbar-nav>.open>.dropdown-menu{background-color:#2f4154!important}.pathwayMapper .navbar-nav>li>.dropdown-menu,.pathwayMapper .navbar-nav>li>.dropdown-submenu{border-radius:4px!important;border:none}.pathwayMapper .navbar-nav>.open>.dropdown-menu>li>a:focus,.pathwayMapper .navbar-nav>.open>.dropdown-menu>li>a:hover{color:#fff;background-color:#1abc9c}.pathwayMapper .navbar{border-radius:0 0 6px 6px;background-color:#2f4154;border:none!important;margin-bottom:5px!important}.pathwayMapper .navbar-nav a{transition:all .2s linear}.pathwayMapper .navbar-nav>li>a{color:#fff!important;font-weight:500!important;font-size:12px}.pathwayMapper .navbar-nav>li>a:hover{color:#1abc9c!important}.pathwayMapper .navbar-brand{color:#fff!important;font-size:16px;font-weight:700}.pathwayMapper .pnl{margin-bottom:10px;border-radius:6px;box-shadow:0 1px 1px rgba(0,0,0,.15),0 -1px 1px rgba(0,0,0,.15)}.pathwayMapper .pnl .pnl-header{background-color:#1abc9c;border-top-left-radius:6px;border-top-right-radius:6px;padding:8px 5px 5px;color:#fff;font-size:12px;font-weight:900}.pathwayMapper .pnl .pnl-body{background-color:#eff0f2;padding:4px 2px;border-bottom-left-radius:6px;border-bottom-right-radius:6px}.pathwayMapper .pnl .pnl-body .buttonContainer>button{border:none!important}.pathwayMapper .pnl .pnl-body .dragButtonContainer{width:115px;margin-left:auto;margin-right:auto}.pathwayMapper .customMargins{margin-left:3%!important;margin-right:3%!important}.pathwayMapper .leftPanelFix{padding-left:0}.pathwayMapper .hiddenfile{width:0;height:0;overflow:hidden}.pathwayMapper .buttonContainer{margin-bottom:5px}.pathwayMapper .buttonContainer button{font-size:12px;width:85%}.pathwayMapper .cyContainer{border:3px solid #1abc9c;height:780px;border-radius:6px;padding-right:0!important;padding-left:0!important;width:100%;margin-left:10px}.pathwayMapper #cy{height:100%}.pathwayMapper .html5tooltip-box{background-color:rgba(47,65,84,.92);border-radius:8px} +/* * qTip2 - Pretty powerful tooltips - v2.2.0 * http://qtip2.com * @@ -802,4 +623,191 @@ transform: scale(0.86); .qtipmodal-ie6fix{ position: absolute !important; } +.pathwayMapper .list-group { +margin-bottom: 0px; +} +.pathwayMapper .toolbar .toolbar-button { +margin-right: 1px; +margin-left: 1px; +} +.pathwayMapper tbody tr:hover { +background: #97bfdb !important; +} +.pathwayMapper .cBioMode .cytoscape-navigatorView { +background: #4389c0; +} +.pathwayMapper .ui-cytoscape-nodeadd-nodediv { +background: #fbfbfb none repeat scroll 0% 0%; +border: 0px solid white; +border-radius: 5px; +font-size: 1.3em !important; +cursor: pointer; +text-align: center; +} +.pathwayMapper #ranking-bar .info-entry { +margin-bottom: 10px; +} +.pathwayMapper #ranking-bar .info-entry .indent { +margin-left: 20px; +margin-top: 6px; +} +.pathwayMapper #ranking-bar:first-child { +margin-top: 20px; +} +.pathwayMapper #ranking-bar .info-title { +background-color: white; +width: 100%; +color: black; +font-weight: bold; +padding-top: 3px; +padding-bottom: 3px; +border-radius: 4px; +} +.pathwayMapper #cy { +margin-top: 10px; +} +.pathwayMapper #ranking-table { +/*margin-left: 20px; */ +margin-top: 6px; +margin-right: 6px; +} +.pathwayMapper #toolbar { +margin-top: 10px; +margin-left: 13px; +} +.pathwayMapper .ui-cytoscape-nodeadd img { +width: 110px; +height: 28.5px; +} +.pathwayMapper .label:hover { +background-color: #97bfdb !important; +} +.pathwayMapper .label-default { +background-color: #adadad !important; +} +.pathwayMapper .checkbox.disabled { +color: #adadad !important; +} +.pathwayMapper #ranking-bar .table tbody tr td { +padding: 5px !important; +} +.pathwayMapper #ranking-bar .label { +padding-top: 6px; +padding-bottom: 6px; +margin-bottom: 4px; +display: inline-block; +margin-right: 4px; +font-size: 11px; +} +.pathwayMapper .label:hover { +cursor: pointer; +} +.pathwayMapper .dropdown-submenu .caret { +display: none; +} +.pathwayMapper #ranking-bar .fa-question-circle { +cursor: pointer; +} +.pathwayMapper .__react_component_tooltip { +max-width: 350px; +z-index: 1040; +} +.pathwayMapper .__react_component_tooltip.type-light.border { +border: 1px solid #878686; +} +.pathwayMapper .__react_component_tooltip.show { +opacity: 1; +} +.pathwayMapper #ranking-bar thead td { +font-size: 12px; +} +.pathwayMapper #ranking-bar tbody td { +font-size: 11px; +} +.pathwayMapper #about-model-header { +margin-bottom: 15px !important; +} +.pathwayMapper .list-group-item:focus { +background-color: white; +} +.pathwayMapper .qtip-tipsy { +background: rgba(47, 65, 84, 0.92) !important; +} +.pathwayMapper #dropdown-study { +width: 500px; +text-align: left; +} +.pathwayMapper #searchGeneToolbar { +max-width: 200px; +} +.pathwayMapper #compartmentNodeDiv img { +height: 30.26px; +} +.pathwayMapper .pmTip { +background-color: #2f4154 !important; +font-family: arial, sans-serif; +font-size: 12px; +border-radius: 7px; +} +.pathwayMapper .checkbox.layProps { +margin-top: 0; +} +.pathwayMapper .Toastify__toast-container { +width: 420px; +} +.pathwayMapper .Toastify__toast--success { +background-color: #1abc9c; +} +.pathwayMapper #alterationCheckBox { +margin-top: 0; +} +.pathwayMapper #toolbar img { +cursor: pointer; +margin-left: 5px; +} +.pathwayMapper table .radio { +margin-top: 0 !important; +margin-bottom: 0 !important; +} +.pathwayMapper .cBioMode #showMoreButton { +width: 100px !important; +} +#cBioHelpModal table td { +padding: 4px; +} + +#cBioHelpModal .modal-header { + background-color: #ececec; + border-top-left-radius: 6px; + border-top-right-radius: 6px; + text-align: center; +} + +.pathwayMapper .cBioMode .Toastify__toast--default { +background-color: #dff0d8; +color: #333333; +} +.pathwayMapper .cBioMode .Toastify__toast { +min-height: 50px !important; +} +.pathwayMapper .cBioMode .Toastify__toast-container { +width: 550px !important; +} +.pathwayMapper .cytoscape-navigator-wrapper { +transform: scale(0.86); +} + +.pathwayMapper .pathway-toolbar.navbar{ + border-radius: 6px; +} + +.pathwayMapper .smallToast { + width: 325px; +} + +.pathwayMapper #search-gene-input-group-addon:hover { + background-color: #fff; +} + + /*# sourceMappingURL=base.css.map*/ \ No newline at end of file diff --git a/dist/base.css.map b/dist/base.css.map index 280c4330..72576d16 100644 --- a/dist/base.css.map +++ b/dist/base.css.map @@ -1 +1 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"./base.css","sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://react-pathway-mapper/./src/css/pmv1.css","webpack://react-pathway-mapper/./src/css/pmv2.css","webpack://react-pathway-mapper/./src/css/qtip.css","webpack://react-pathway-mapper/./src/css/supp.css"],"names":[],"mappings":"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CA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oHAAoH;AACpH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,wBAAwB,QAAQ,SAAS;;AAEzC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT,aAAa;AACb;;AAEA;AACA,qBAAqB,iBAAiB;;AAEtC;AACA;AACA;AACA,UAAU;AACV,cAAc;;AAEd;;AAEA;AACA;AACA;AACA;;;;AAIA;AACA;AACA,C;AC9mBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA","file":"./base.css","sourcesContent":[".pathwayMapper .modal .modal-body .aboutImageContent,.pathwayMapper .modal .modal-body .adressText{margin-bottom:15px}.pathwayMapper #gridOptionsDiv .modal,.pathwayMapper #gridOptionsDiv .modal-body,.pathwayMapper #layoutPropertiesDiv .modal,.pathwayMapper #layoutPropertiesDiv .modal-body,.pathwayMapper #pathwayDetailsDiv .modal,.pathwayMapper #pathwayDetailsDiv .modal-body{max-height:100%}.pathwayMapper .modal,.pathwayMapper .modal .modal-footer,.pathwayMapper .pubmedIDLabel{text-align:center}.pathwayMapper .modal .modal-body .aboutImageContent label{font-weight:400;font-size:24px;color:#1974b8}.pathwayMapper .modal .modal-body h3,.pathwayMapper .modal .modal-footer a{color:#1abc9c}.pathwayMapper .modal .modal-body .adressText p{margin-bottom:0!important}.pathwayMapper #aboutModal .modal-dialog{width:400px}.pathwayMapper #edge_legend_modal .modal-body img,.pathwayMapper #layoutPropertiesDiv .modal-dialog,.pathwayMapper #node_legend_modal .modal-body img{width:500px}.pathwayMapper #quickHelpModal .modal-body ul li{margin-bottom:15px}.pathwayMapper .ui-cytoscape-nodeadd{z-index:99999;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;margin-bottom:5px}.pathwayMapper #ui-cytoscape-nodeadd-icon{font-size:1.3em!important;cursor:pointer}.pathwayMapper #ui-cytoscape-nodeadd-icon .explanationText{font:14px helvetica neue,helvetica,arial,sans-serif}.pathwayMapper #ui-cytoscape-nodeadd-icon img{width:110px}.pathwayMapper .ui-cytoscape-nodeadd-nodediv{z-index:99999;padding:3px;text-align:center;width:110px;-webkit-backface-visibility:hidden;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.pathwayMapper .dropdown-submenu{position:relative;font-size:12px!important}.pathwayMapper .dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:0;margin-left:0;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;background-color:#34495e!important}.pathwayMapper .dropdown-submenu:hover>.dropdown-menu{display:block}.pathwayMapper .dropdown-submenu>.dropdown-menu>li>a{color:#fff!important;font-size:12px!important}.pathwayMapper .dropdown-submenu>.dropdown-menu>li>a:hover{color:#fff!important;background-color:#1abc9c!important;border-radius:4px!important}.pathwayMapper .dropdown-submenu>a:after{display:block;content:\" \";float:right;width:0;height:0;border-color:transparent transparent transparent #ccc;border-style:solid;border-width:5px 0 5px 5px;margin-top:5px;margin-right:-10px}.pathwayMapper #gridOptionsDiv .modal-footer button,.pathwayMapper #layoutPropertiesDiv .modal-footer button,.pathwayMapper #pathwayDetailsDiv .modal-footer button{border:none!important}.pathwayMapper .geneDetails,.pathwayMapper .qtipLabel{margin-top:10px}.pathwayMapper #pathwayDetailsDiv .modal .form-control:focus,.pathwayMapper #pathwayDetailsDiv .modal-body .form-control:focus{box-shadow:inset 0 2px 2px rgba(0,0,0,.075),0 0 8px #1abc9c;color:#2f4154}.pathwayMapper .form-control:focus,.pathwayMapper .qtip-tipsy .form-control:focus{box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #1abc9c}.pathwayMapper .pubmedIDList a{cursor:pointer}.pathwayMapper .qtipRemovePmedID{float:right}.pathwayMapper .qtipRemovePmedID:hover{color:#1abc9c;cursor:pointer}.pathwayMapper .inputCol{padding-left:0!important}.pathwayMapper .qtip-tipsy{background:rgba(47,65,84,.92);color:#fff;border:0 solid transparent;font-size:12px;font-family:'Lucida Grande',sans-serif;font-weight:700;line-height:16px}.pathwayMapper .qtip-tipsy .qtip-content{padding:5px 10px}.pathwayMapper .qtip-tipsy .scrollable{max-height:200px;overflow-y:scroll}.pathwayMapper .qtip-tipsy .form-control:focus{border-color:#1abc9c}.pathwayMapper .qtip-tipsy a{color:#1abc9c}.pathwayMapper .centerText{text-align:center!important}.pathwayMapper .leftText{text-align:left!important}.pathwayMapper .justifyText{text-align:justify!important}.pathwayMapper .popover{max-width:400px}.pathwayMapper .popover span{background-color:#e74c3c}.pathwayMapper .welcomePageContainer{position:fixed;top:0;left:0;background-color:#f6f6f6;z-index:100;height:100%;display:table;width:100%}.pathwayMapper .welcomePageContainer h1,.pathwayMapper .welcomePageContainer h3{color:#2f4154}.pathwayMapper .welcomePageContainer .landingContent{height:100%;position:relative;display:table-cell;vertical-align:middle;padding-top:70px;padding-bottom:70px}.pathwayMapper .welcomePageContainer .landingContent .creditInformation{font-weight:500;margin-top:25px;color:#1abc9c}.pathwayMapper .welcomePageContainer .landingContent .creditInformation a{color:#1abc9c}.pathwayMapper .welcomePageContainer .landingContent .contactInformation{font-weight:500;margin-top:25px;color:#979797}.pathwayMapper .welcomePageContainer .landingContent .contactInformation a{color:#979797}.pathwayMapper .welcomePageContainer .welcomePageLoading{display:none;margin-top:20px;margin-bottom:20px}.pathwayMapper .welcomePageContainer .welcomePageLoading i{color:#1abc9c}.pathwayMapper .welcomePageContainer .welPageButtons{margin-top:30px}.pathwayMapper .welcomePageContainer .welcomePageCheckable{display:inline-block;padding:10px;background-color:#fff;border-radius:6px;border:2px solid #979797;color:#606060;font-weight:500;transition:all .2s linear;min-width:180px;cursor:pointer}.pathwayMapper .welcomePageContainer .welcomePageCheckable i{visibility:hidden}.pathwayMapper .welcomePageContainer .active,.pathwayMapper .welcomePageContainer .welcomePageCheckable:hover{color:#2f4154;border-color:#1abc9c}.pathwayMapper .welcomePageContainer .active i,.pathwayMapper .welcomePageContainer .welcomePageCheckable:hover i{visibility:visible;color:#1abc9c}.pathwayMapper .welcomePageContainer .continueRow{margin-top:30px;visibility:hidden;cursor:pointer}.pathwayMapper .welcomePageContainer .continueButton{padding:10px;background-color:#2f4154;border-radius:6px;color:#fff;font-weight:500;transition:all .2s linear;max-width:200px;margin-left:auto;margin-right:auto}.pathwayMapper .welcomePageContainer .continueButton:hover{background-color:#1abc9c}.pathwayMapper .welcomePageContainer .buttonsSeparator{margin-left:10px;margin-right:10px;font-weight:600}.pathwayMapper .modal .modal-header{background-color:#ececec;border-top-left-radius:6px;border-top-right-radius:6px}.pathwayMapper .modal .modal-footer{background-color:#ececec;border-bottom-left-radius:6px;border-bottom-right-radius:6px}.pathwayMapper .modal .close{outline:0!important}.pathwayMapper .modal .modal-title{color:#2f4154}.pathwayMapper .modal .close:hover{color:#1abc9c}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicLoadButton{padding:10px;border-radius:6px;outline:0;background-color:#fff;border:2px solid #2f4154;color:#2f4154;transition:all .2s linear}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicLoadButton:hover{border-color:#1abc9c;color:#1abc9c}.pathwayMapper #genomicDataExplorerDiv .modal-body .wrapper{margin-top:20px;margin-bottom:20px}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicChecboxDiv{text-align:left!important;margin-left:50px!important}.pathwayMapper #cbioPortalModal .modal-body,.pathwayMapper .control-label{text-align:left}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicDataContentDiv{margin-bottom:15px}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicDataContentDiv h4{margin-bottom:5px}.pathwayMapper .cy-context-menus-cxt-menu{display:none;z-index:1000;position:absolute;padding:0;margin:0;outline:0;border-radius:6px;border:none;opacity:.9}.pathwayMapper .cy-context-menus-cxt-menu:first-child{border-top-left-radius:6px;border-top-right-radius:6px}.pathwayMapper .cy-context-menus-cxt-menu:last-child{border-bottom-left-radius:6px;border-bottom-right-radius:6px}.pathwayMapper .cy-context-menus-cxt-menuitem{display:block;z-index:1000;width:100%;padding:3px 20px;position:relative;margin:0;background-color:#2f4154;font-weight:400;font-size:13px;white-space:nowrap;border:0;text-align:left;outline:0}.pathwayMapper .pathwayPanel .fileNameContent,.pathwayMapper body{font:14px helvetica neue,helvetica,arial,sans-serif}.pathwayMapper .cy-context-menus-cxt-menuitem:enabled{color:#fff}.pathwayMapper .cy-context-menus-ctx-operation:focus{outline:0}.pathwayMapper .cy-context-menus-cxt-menuitem:hover{color:#fff;text-decoration:none;background-color:#1abc9c;background-image:none;cursor:pointer}.pathwayMapper .cy-context-menus-cxt-menuitem[title]:before{content:attr(title)}.pathwayMapper .cy-context-menus-cxt-menuitem:not([title]):before{content:\"\\2630\"}.pathwayMapper #cbioPortalModal .modal-body .bootstrap-select>.dropdown-toggle{width:500px}.pathwayMapper #cbioPortalModal .modal-body .section{margin-bottom:20px}.pathwayMapper .animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.pathwayMapper .animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.pathwayMapper .animated.hinge{-webkit-animation-duration:2s;animation-duration:2s}.pathwayMapper .animated.bounceIn,.pathwayMapper .animated.bounceOut,.pathwayMapper .animated.flipOutX,.pathwayMapper .animated.flipOutY{-webkit-animation-duration:.75s;animation-duration:.75s}@-webkit-keyframes bounce{20%,53%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}@keyframes bounce{20%,53%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}.pathwayMapper .bounce{-webkit-animation-name:bounce;animation-name:bounce;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes flash{50%,from,to{opacity:1}25%,75%{opacity:0}}@keyframes flash{50%,from,to{opacity:1}25%,75%{opacity:0}}.pathwayMapper .flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}}@keyframes pulse{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}}.pathwayMapper .pulse{-webkit-animation-name:pulse;animation-name:pulse}@-webkit-keyframes rubberBand{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}}@keyframes rubberBand{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}}.pathwayMapper .rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shake{from,to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@keyframes shake{from,to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}.pathwayMapper .shake{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}.pathwayMapper .headShake{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-name:headShake;animation-name:headShake}@-webkit-keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}to{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}@keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}to{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}.pathwayMapper .swing{-webkit-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}}@keyframes tada{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}}.pathwayMapper .tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{from,to{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}}@keyframes wobble{from,to{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}}.pathwayMapper .wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes jello{11.1%,from,to{-webkit-transform:none;transform:none}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.39062deg) skewY(.39062deg);transform:skewX(.39062deg) skewY(.39062deg)}88.8%{-webkit-transform:skewX(-.19531deg) skewY(-.19531deg);transform:skewX(-.19531deg) skewY(-.19531deg)}}@keyframes jello{11.1%,from,to{-webkit-transform:none;transform:none}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.39062deg) skewY(.39062deg);transform:skewX(.39062deg) skewY(.39062deg)}88.8%{-webkit-transform:skewX(-.19531deg) skewY(-.19531deg);transform:skewX(-.19531deg) skewY(-.19531deg)}}.pathwayMapper .jello{-webkit-animation-name:jello;animation-name:jello;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes bounceIn{20%,40%,60%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes bounceIn{20%,40%,60%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.pathwayMapper .bounceIn{-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceInDown{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInDown{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}.pathwayMapper .bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInLeft{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}.pathwayMapper .bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInRight{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}.pathwayMapper .bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes bounceInUp{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}@keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}.pathwayMapper .bounceOut{-webkit-animation-name:bounceOut;animation-name:bounceOut}@-webkit-keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.pathwayMapper .bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.pathwayMapper .bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.pathwayMapper .bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.pathwayMapper .bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}.pathwayMapper .fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{from{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDownBig{from{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{from{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeft{from{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{from{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeftBig{from{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{from{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRight{from{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{from{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRightBig{from{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{from{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUp{from{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{from{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUpBig{from{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeOut{from{opacity:1}to{opacity:0}}@keyframes fadeOut{from{opacity:1}to{opacity:0}}.pathwayMapper .fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes fadeOutDown{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.pathwayMapper .fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes fadeOutDownBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.pathwayMapper .fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes fadeOutLeft{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.pathwayMapper .fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes fadeOutLeftBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.pathwayMapper .fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes fadeOutRight{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.pathwayMapper .fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes fadeOutRightBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.pathwayMapper .fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes fadeOutUp{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.pathwayMapper .fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes fadeOutUpBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.pathwayMapper .fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes flip{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.pathwayMapper .animated.flip{-webkit-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes flipInX{from{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{from{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.pathwayMapper .flipInX{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInX;animation-name:flipInX}.pathwayMapper .flipInY,.pathwayMapper .flipOutX{-webkit-backface-visibility:visible!important}@-webkit-keyframes flipInY{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.pathwayMapper .flipInY{backface-visibility:visible!important;-webkit-animation-name:flipInY;animation-name:flipInY}@-webkit-keyframes flipOutX{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}@keyframes flipOutX{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}.pathwayMapper .flipOutX{-webkit-animation-name:flipOutX;animation-name:flipOutX;backface-visibility:visible!important}@-webkit-keyframes flipOutY{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}@keyframes flipOutY{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}.pathwayMapper .flipOutY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipOutY;animation-name:flipOutY}@-webkit-keyframes lightSpeedIn{from{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}to{-webkit-transform:none;transform:none;opacity:1}}@keyframes lightSpeedIn{from{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}to{-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .lightSpeedIn{-webkit-animation-name:lightSpeedIn;animation-name:lightSpeedIn;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOut{from{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}@keyframes lightSpeedOut{from{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.pathwayMapper .lightSpeedOut{-webkit-animation-name:lightSpeedOut;animation-name:lightSpeedOut;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{from{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateIn{from{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn}@-webkit-keyframes rotateInDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft}@-webkit-keyframes rotateInDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight}@-webkit-keyframes rotateInUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft}@-webkit-keyframes rotateInUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight}@-webkit-keyframes rotateOut{from{-webkit-transform-origin:center;transform-origin:center;opacity:1}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}@keyframes rotateOut{from{-webkit-transform-origin:center;transform-origin:center;opacity:1}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}.pathwayMapper .rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut}@-webkit-keyframes rotateOutDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}}@keyframes rotateOutDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}}.pathwayMapper .rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft}@-webkit-keyframes rotateOutDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.pathwayMapper .rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight}@-webkit-keyframes rotateOutUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.pathwayMapper .rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft}@-webkit-keyframes rotateOutUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}@keyframes rotateOutUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}.pathwayMapper .rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight}@-webkit-keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}@keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}.pathwayMapper .hinge{-webkit-animation-name:hinge;animation-name:hinge}@-webkit-keyframes rollIn{from{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes rollIn{from{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}@keyframes rollOut{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}.pathwayMapper .rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}.pathwayMapper .zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInDown{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInLeft{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInRight{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInUp{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes zoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}.pathwayMapper .zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown}@-webkit-keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}@keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}.pathwayMapper .zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft}@-webkit-keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}@keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}.pathwayMapper .zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight}@-webkit-keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp}@-webkit-keyframes slideInDown{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInDown{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{from{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInLeft{from{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{from{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInRight{from{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideInUp{from{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInUp{from{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .slideInUp{-webkit-animation-name:slideInUp;animation-name:slideInUp}@-webkit-keyframes slideOutDown{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes slideOutDown{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.pathwayMapper .slideOutDown{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}@-webkit-keyframes slideOutLeft{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes slideOutLeft{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.pathwayMapper .slideOutLeft{-webkit-animation-name:slideOutLeft;animation-name:slideOutLeft}@-webkit-keyframes slideOutRight{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes slideOutRight{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.pathwayMapper .slideOutRight{-webkit-animation-name:slideOutRight;animation-name:slideOutRight}@-webkit-keyframes slideOutUp{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes slideOutUp{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.pathwayMapper .slideOutUp{-webkit-animation-name:slideOutUp;animation-name:slideOutUp}.pathwayMapper [data-notify=container][class*=alert-pathwayMapper-] .close{opacity:1;color:#fff;margin-top:7px;outline:0}.pathwayMapper .control-label,.pathwayMapper .input-group input[type=checkbox]{margin-top:10px}.pathwayMapper [data-notify=container][class*=alert-pathwayMapper-] .close:hover{color:#fff}.pathwayMapper [data-notify=container].alert-pathwayMapper-success{background-color:#1abc9c;color:#fff}.pathwayMapper [data-notify=container].alert-pathwayMapper-fail{background-color:#ff2644;color:#fff}.pathwayMapper .gridModal{width:350px!important}.pathwayMapper body{background-color:#fff}.pathwayMapper input[type=color]{padding:2px}.pathwayMapper input[type=color]:hover{cursor:pointer}.pathwayMapper #colorPickerButton{padding-top:10px}.pathwayMapper .form-control:focus{border:2px solid #1abc9c;color:#2f4154}.pathwayMapper .cy-panzoom{right:120px;z-index:100}.pathwayMapper .cytoscape-navigatorView{background:#1abc9c}.pathwayMapper .cytoscape-navigator-wrapper{position:absolute;border:2px solid #2f4154;border-radius:6px;background:#fff;z-index:100;width:300px;height:200px;bottom:8.5%;right:3.5%;overflow:hidden}.pathwayMapper .btn:focus{outline:0!important}.pathwayMapper .pathwayPanel .fileNameContent{color:#2f4154;margin-bottom:10px;padding:5px;cursor:pointer;min-width:100px}.pathwayMapper .pathwayPanel div[contenteditable=true]:focus{outline:#1abc9c solid 2px;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #1abc9c;background-color:#fff}.pathwayMapper .pathwayPanel textarea{width:170px;height:50px;margin-bottom:10px;z-index:999999}.pathwayMapper .mainContentWrapper{display:flex}.pathwayMapper .sideBarWrapper{min-width:130px;max-width:130px;font-size:12px}.pathwayMapper .control-label{color:rgba(23,22,22,.78)!important;font-weight:300!important}.pathwayMapper .buttonContainer,.pathwayMapper .edgePaletteWrapper,.pathwayMapper .pnl .pnl-header{text-align:center}.pathwayMapper .input-group{margin-bottom:5px;width:100%}.pathwayMapper .input-group .form-control{border-radius:6px}.pathwayMapper .edgePaletteWrapper .list-group{margin-bottom:0!important}.pathwayMapper .edgePaletteWrapper .list-group .list-group-item{border:none!important}.pathwayMapper .edgePaletteWrapper .edge-palette .list-group-item.active,.pathwayMapper .edgePaletteWrapper .edge-palette .list-group-item.active:focus,.pathwayMapper .edgePaletteWrapper .edge-palette .list-group-item.active:hover{background-color:#1abc9c!important}.pathwayMapper .edgePaletteWrapper .edge-palette .list-group-item{padding:7px 5px}.pathwayMapper .edgePaletteWrapper .edge-palette a{margin-bottom:5px;border-radius:6px;font-size:12px}.pathwayMapper .edgePaletteWrapper .edge-palette a img{width:30px}.pathwayMapper footer{background-color:#eee;color:#393939;height:100%}.pathwayMapper .pageContentWrapper{margin-bottom:70px}.pathwayMapper .navbar-nav>.open>a,.pathwayMapper .navbar-nav>.open>a:focus,.pathwayMapper .navbar-nav>.open>a:hover{color:#fff!important;background-color:#1abc9c!important;border-left-color:transparent}.pathwayMapper .navbar-nav>.open>.dropdown-menu>li>a{color:#fff!important;border-radius:4px!important;font-size:12px!important}.pathwayMapper .navbar-nav>.open>.dropdown-menu{background-color:#2f4154!important}.pathwayMapper .navbar-nav>li>.dropdown-menu,.pathwayMapper .navbar-nav>li>.dropdown-submenu{border-radius:4px!important;border:none}.pathwayMapper .navbar-nav>.open>.dropdown-menu>li>a:focus,.pathwayMapper .navbar-nav>.open>.dropdown-menu>li>a:hover{color:#fff;background-color:#1abc9c}.pathwayMapper .navbar{border-radius:0 0 6px 6px;background-color:#2f4154;border:none!important;margin-bottom:10px!important}.pathwayMapper .navbar-nav a{transition:all .2s linear}.pathwayMapper .navbar-nav>li>a{color:#fff!important;font-weight:500!important;font-size:12px}.pathwayMapper .navbar-nav>li>a:hover{color:#1abc9c!important}.pathwayMapper .navbar-brand{color:#fff!important;font-size:16px;font-weight:700}.pathwayMapper .pnl{margin-bottom:10px;border-radius:6px;box-shadow:0 1px 1px rgba(0,0,0,.15),0 -1px 1px rgba(0,0,0,.15)}.pathwayMapper .pnl .pnl-header{background-color:#1abc9c;border-top-left-radius:6px;border-top-right-radius:6px;padding:8px 5px 5px;color:#fff;font-size:12px;font-weight:900}.pathwayMapper .pnl .pnl-body{background-color:#eff0f2;padding:4px 2px;border-bottom-left-radius:6px;border-bottom-right-radius:6px}.pathwayMapper .pnl .pnl-body .buttonContainer>button{border:none!important}.pathwayMapper .pnl .pnl-body .dragButtonContainer{width:115px;margin-left:auto;margin-right:auto}.pathwayMapper .customMargins{margin-left:3%!important;margin-right:3%!important}.pathwayMapper .leftPanelFix{padding-left:0}.pathwayMapper .hiddenfile{width:0;height:0;overflow:hidden}.pathwayMapper .buttonContainer{margin-bottom:5px}.pathwayMapper .buttonContainer button{font-size:12px;width:85%}.pathwayMapper .cyContainer{border:3px solid #1abc9c;height:850px;border-radius:6px;padding-right:0!important;padding-left:0!important;width:100%;margin-left:10px}.pathwayMapper #cy{height:100%}",".pathwayMapper .modal .modal-body .aboutImageContent,.pathwayMapper .modal .modal-body .adressText{margin-bottom:15px}.pathwayMapper #gridOptionsDiv .modal,.pathwayMapper #gridOptionsDiv .modal-body,.pathwayMapper #layoutPropertiesDiv .modal,.pathwayMapper #layoutPropertiesDiv .modal-body,.pathwayMapper #pathwayDetailsDiv .modal,.pathwayMapper #pathwayDetailsDiv .modal-body{max-height:100%}.pathwayMapper .modal,.pathwayMapper .modal .modal-footer,.pathwayMapper .pubmedIDLabel{text-align:center}.pathwayMapper .modal .modal-body .aboutImageContent label{font-weight:400;font-size:24px;color:#1974b8}.pathwayMapper .modal .modal-body h3,.pathwayMapper .modal .modal-footer a{color:#1abc9c}.pathwayMapper .modal .modal-body .adressText p{margin-bottom:0!important}.pathwayMapper #aboutModal .modal-dialog{width:400px}.pathwayMapper #edge_legend_modal .modal-body img,.pathwayMapper #layoutPropertiesDiv .modal-dialog,.pathwayMapper #node_legend_modal .modal-body img{width:500px}.pathwayMapper #quickHelpModal .modal-body ul li{margin-bottom:15px}.pathwayMapper .ui-cytoscape-nodeadd{z-index:99999;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;margin-bottom:5px}.pathwayMapper #ui-cytoscape-nodeadd-icon{font-size:1.3em!important;cursor:pointer}.pathwayMapper #ui-cytoscape-nodeadd-icon .explanationText{font:14px helvetica neue,helvetica,arial,sans-serif}.pathwayMapper #ui-cytoscape-nodeadd-icon img{width:110px}.pathwayMapper .ui-cytoscape-nodeadd-nodediv{z-index:99999;padding:3px;text-align:center;width:110px;-webkit-backface-visibility:hidden;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.pathwayMapper .dropdown-submenu{position:relative;font-size:12px!important}.pathwayMapper .dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:0;margin-left:0;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;background-color:#34495e!important}.pathwayMapper .dropdown-submenu:hover>.dropdown-menu{display:block}.pathwayMapper .dropdown-submenu>.dropdown-menu>li>a{color:#fff!important;font-size:12px!important}.pathwayMapper .dropdown-submenu>.dropdown-menu>li>a:hover{color:#fff!important;background-color:#1abc9c!important;border-radius:4px!important}.pathwayMapper .dropdown-submenu>a:after{display:block;content:\" \";float:right;width:0;height:0;border-color:transparent transparent transparent #ccc;border-style:solid;border-width:5px 0 5px 5px;margin-top:5px;margin-right:-10px}.pathwayMapper #gridOptionsDiv .modal-footer button,.pathwayMapper #layoutPropertiesDiv .modal-footer button,.pathwayMapper #pathwayDetailsDiv .modal-footer button{border:none!important}.pathwayMapper .geneDetails,.pathwayMapper .qtipLabel{margin-top:10px}.pathwayMapper #pathwayDetailsDiv .modal .form-control:focus,.pathwayMapper #pathwayDetailsDiv .modal-body .form-control:focus{box-shadow:inset 0 2px 2px rgba(0,0,0,.075),0 0 8px #1abc9c;color:#2f4154}.pathwayMapper .pubmedIDList a{cursor:pointer}.pathwayMapper .qtipRemovePmedID{float:right}.pathwayMapper .qtipRemovePmedID:hover{color:#1abc9c;cursor:pointer}.pathwayMapper .inputCol{padding-left:0!important}.pathwayMapper .qtip-tipsy{background:rgba(47,65,84,.92);color:#fff;border:0 solid transparent;font-size:12px;font-family:'Lucida Grande',sans-serif;font-weight:700;line-height:16px}.pathwayMapper .qtip-tipsy .qtip-content{padding:5px 10px}.pathwayMapper .qtip-tipsy .scrollable{max-height:200px;overflow-y:scroll}.pathwayMapper .qtip-tipsy .form-control:focus{border-color:#1abc9c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #1abc9c}.pathwayMapper .qtip-tipsy a{color:#1abc9c}.pathwayMapper .centerText{text-align:center!important}.pathwayMapper .leftText{text-align:left!important}.pathwayMapper .justifyText{text-align:justify!important}.pathwayMapper .popover{max-width:410px}.pathwayMapper .popover span{background-color:#e74c3c}.pathwayMapper .welcomePageContainer{position:fixed;top:0;left:0;background-color:#f6f6f6;z-index:100;height:100%;display:table;width:100%}.pathwayMapper .welcomePageContainer h1,.pathwayMapper .welcomePageContainer h3{color:#2f4154}.pathwayMapper .welcomePageContainer .landingContent{height:100%;position:relative;display:table-cell;vertical-align:middle;padding-top:70px;padding-bottom:70px}.pathwayMapper .welcomePageContainer .welcomePageLoading{display:none;margin-top:20px;margin-bottom:20px}.pathwayMapper .welcomePageContainer .welcomePageLoading i{color:#1abc9c}.pathwayMapper .welcomePageContainer .welPageButtons{margin-top:30px}.pathwayMapper .welcomePageContainer .welcomePageCheckable{display:inline-block;padding:10px;background-color:#fff;border-radius:6px;border:2px solid #979797;color:#606060;font-weight:500;transition:all .2s linear;min-width:180px;cursor:pointer}.pathwayMapper .welcomePageContainer .welcomePageCheckable i{visibility:hidden}.pathwayMapper .welcomePageContainer .active,.pathwayMapper .welcomePageContainer .welcomePageCheckable:hover{color:#2f4154;border-color:#1abc9c}.pathwayMapper .welcomePageContainer .active i,.pathwayMapper .welcomePageContainer .welcomePageCheckable:hover i{visibility:visible;color:#1abc9c}.pathwayMapper .welcomePageContainer .continueRow{margin-top:30px;visibility:hidden;cursor:pointer}.pathwayMapper .welcomePageContainer .continueButton{padding:10px;background-color:#2f4154;border-radius:6px;color:#fff;font-weight:500;transition:all .2s linear;max-width:200px;margin-left:auto;margin-right:auto}.pathwayMapper .welcomePageContainer .continueButton:hover{background-color:#1abc9c}.pathwayMapper .welcomePageContainer .buttonsSeparator{margin-left:10px;margin-right:10px;font-weight:600}.pathwayMapper .welcomePageContainer .creditInformation{font-weight:500;margin-top:25px;color:#1abc9c}.pathwayMapper .welcomePageContainer .creditInformation a{color:#1abc9c}.pathwayMapper .welcomePageContainer .contactInformation{font-weight:500;margin-top:25px;color:#979797}.pathwayMapper .welcomePageContainer .contactInformation a{color:#979797}.pathwayMapper .modal .modal-header{background-color:#ececec;border-top-left-radius:6px;border-top-right-radius:6px}.pathwayMapper .modal .modal-footer{background-color:#ececec;border-bottom-left-radius:6px;border-bottom-right-radius:6px}.pathwayMapper .modal .close{outline:0!important}.pathwayMapper .modal .modal-title{color:#2f4154}.pathwayMapper .modal .close:hover{color:#1abc9c}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicLoadButton{padding:10px;border-radius:6px;outline:0;background-color:#fff;border:2px solid #2f4154;color:#2f4154;transition:all .2s linear}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicLoadButton:hover{border-color:#1abc9c;color:#1abc9c}.pathwayMapper #genomicDataExplorerDiv .modal-body .wrapper{margin-top:20px;margin-bottom:20px}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicChecboxDiv{text-align:left!important;margin-left:50px!important}.pathwayMapper #cbioPortalModal .modal-body,.pathwayMapper .control-label{text-align:left}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicDataContentDiv{margin-bottom:15px}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicDataContentDiv h4{margin-bottom:5px}.pathwayMapper .cy-context-menus-cxt-menu{display:none;z-index:1000;position:absolute;border:1px solid #a0a0a0;padding:0;margin:0;width:auto;border-radius:6px;opacity:.9;outline:0}.pathwayMapper #cy-context-menus-cxt-menu:first-child{border-top-left-radius:6px;border-top-right-radius:6px}.pathwayMapper #cy-context-menus-cxt-menu:last-child{border-bottom-left-radius:6px;border-bottom-right-radius:6px}.pathwayMapper .cy-context-menus-cxt-menuitem{display:block;z-index:1000;width:100%;padding:3px 20px;position:relative;margin:0;background-color:#2f4154;font-weight:400;font-size:12px;white-space:nowrap;border:0;text-align:left}.pathwayMapper .pathwayPanel .fileNameContent,.pathwayMapper body{font:14px helvetica neue,helvetica,arial,sans-serif}.pathwayMapper .cy-context-menus-cxt-menuitem:enabled{color:#fff}.pathwayMapper .cy-context-menus-ctx-operation:focus{outline:0}.pathwayMapper .cy-context-menus-cxt-menuitem:hover{color:#fff;text-decoration:none;background-color:#1abc9c;background-image:none;cursor:pointer}.pathwayMapper .cy-context-menus-cxt-menuitem[content]:before{content:attr(content)}.pathwayMapper .cy-context-menus-divider{border-bottom:1px solid #a0a0a0}.pathwayMapper #cbioPortalModal .modal-body .bootstrap-select>.dropdown-toggle{width:500px}.pathwayMapper #cbioPortalModal .modal-body .section{margin-bottom:20px}.pathwayMapper .animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.pathwayMapper .animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.pathwayMapper .animated.hinge{-webkit-animation-duration:2s;animation-duration:2s}.pathwayMapper .animated.bounceIn,.pathwayMapper .animated.bounceOut,.pathwayMapper .animated.flipOutX,.pathwayMapper .animated.flipOutY{-webkit-animation-duration:.75s;animation-duration:.75s}@-webkit-keyframes bounce{20%,53%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}@keyframes bounce{20%,53%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}.pathwayMapper .bounce{-webkit-animation-name:bounce;animation-name:bounce;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes flash{50%,from,to{opacity:1}25%,75%{opacity:0}}@keyframes flash{50%,from,to{opacity:1}25%,75%{opacity:0}}.pathwayMapper .flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}}@keyframes pulse{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}}.pathwayMapper .pulse{-webkit-animation-name:pulse;animation-name:pulse}@-webkit-keyframes rubberBand{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}}@keyframes rubberBand{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}}.pathwayMapper .rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shake{from,to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@keyframes shake{from,to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}.pathwayMapper .shake{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}.pathwayMapper .headShake{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-name:headShake;animation-name:headShake}@-webkit-keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}to{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}@keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}to{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}.pathwayMapper .swing{-webkit-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}}@keyframes tada{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}}.pathwayMapper .tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{from,to{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}}@keyframes wobble{from,to{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}}.pathwayMapper .wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes jello{11.1%,from,to{-webkit-transform:none;transform:none}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.39062deg) skewY(.39062deg);transform:skewX(.39062deg) skewY(.39062deg)}88.8%{-webkit-transform:skewX(-.19531deg) skewY(-.19531deg);transform:skewX(-.19531deg) skewY(-.19531deg)}}@keyframes jello{11.1%,from,to{-webkit-transform:none;transform:none}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.39062deg) skewY(.39062deg);transform:skewX(.39062deg) skewY(.39062deg)}88.8%{-webkit-transform:skewX(-.19531deg) skewY(-.19531deg);transform:skewX(-.19531deg) skewY(-.19531deg)}}.pathwayMapper .jello{-webkit-animation-name:jello;animation-name:jello;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes bounceIn{20%,40%,60%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes bounceIn{20%,40%,60%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.pathwayMapper .bounceIn{-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceInDown{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInDown{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}.pathwayMapper .bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInLeft{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}.pathwayMapper .bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInRight{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}.pathwayMapper .bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes bounceInUp{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}@keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}.pathwayMapper .bounceOut{-webkit-animation-name:bounceOut;animation-name:bounceOut}@-webkit-keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.pathwayMapper .bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.pathwayMapper .bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.pathwayMapper .bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.pathwayMapper .bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}.pathwayMapper .fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{from{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDownBig{from{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{from{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeft{from{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{from{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeftBig{from{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{from{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRight{from{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{from{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRightBig{from{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{from{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUp{from{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{from{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUpBig{from{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeOut{from{opacity:1}to{opacity:0}}@keyframes fadeOut{from{opacity:1}to{opacity:0}}.pathwayMapper .fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes fadeOutDown{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.pathwayMapper .fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes fadeOutDownBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.pathwayMapper .fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes fadeOutLeft{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.pathwayMapper .fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes fadeOutLeftBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.pathwayMapper .fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes fadeOutRight{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.pathwayMapper .fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes fadeOutRightBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.pathwayMapper .fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes fadeOutUp{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.pathwayMapper .fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes fadeOutUpBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.pathwayMapper .fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes flip{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.pathwayMapper .animated.flip{-webkit-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes flipInX{from{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{from{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.pathwayMapper .flipInX{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInX;animation-name:flipInX}.pathwayMapper .flipInY,.pathwayMapper .flipOutX{-webkit-backface-visibility:visible!important}@-webkit-keyframes flipInY{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.pathwayMapper .flipInY{backface-visibility:visible!important;-webkit-animation-name:flipInY;animation-name:flipInY}@-webkit-keyframes flipOutX{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}@keyframes flipOutX{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}.pathwayMapper .flipOutX{-webkit-animation-name:flipOutX;animation-name:flipOutX;backface-visibility:visible!important}@-webkit-keyframes flipOutY{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}@keyframes flipOutY{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}.pathwayMapper .flipOutY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipOutY;animation-name:flipOutY}@-webkit-keyframes lightSpeedIn{from{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}to{-webkit-transform:none;transform:none;opacity:1}}@keyframes lightSpeedIn{from{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}to{-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .lightSpeedIn{-webkit-animation-name:lightSpeedIn;animation-name:lightSpeedIn;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOut{from{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}@keyframes lightSpeedOut{from{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.pathwayMapper .lightSpeedOut{-webkit-animation-name:lightSpeedOut;animation-name:lightSpeedOut;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{from{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateIn{from{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn}@-webkit-keyframes rotateInDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft}@-webkit-keyframes rotateInDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight}@-webkit-keyframes rotateInUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft}@-webkit-keyframes rotateInUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight}@-webkit-keyframes rotateOut{from{-webkit-transform-origin:center;transform-origin:center;opacity:1}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}@keyframes rotateOut{from{-webkit-transform-origin:center;transform-origin:center;opacity:1}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}.pathwayMapper .rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut}@-webkit-keyframes rotateOutDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}}@keyframes rotateOutDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}}.pathwayMapper .rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft}@-webkit-keyframes rotateOutDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.pathwayMapper .rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight}@-webkit-keyframes rotateOutUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.pathwayMapper .rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft}@-webkit-keyframes rotateOutUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}@keyframes rotateOutUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}.pathwayMapper .rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight}@-webkit-keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}@keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}.pathwayMapper .hinge{-webkit-animation-name:hinge;animation-name:hinge}@-webkit-keyframes rollIn{from{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes rollIn{from{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}@keyframes rollOut{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}.pathwayMapper .rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}.pathwayMapper .zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInDown{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInLeft{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInRight{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInUp{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes zoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}.pathwayMapper .zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown}@-webkit-keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}@keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}.pathwayMapper .zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft}@-webkit-keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}@keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}.pathwayMapper .zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight}@-webkit-keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp}@-webkit-keyframes slideInDown{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInDown{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{from{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInLeft{from{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{from{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInRight{from{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideInUp{from{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInUp{from{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .slideInUp{-webkit-animation-name:slideInUp;animation-name:slideInUp}@-webkit-keyframes slideOutDown{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes slideOutDown{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.pathwayMapper .slideOutDown{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}@-webkit-keyframes slideOutLeft{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes slideOutLeft{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.pathwayMapper .slideOutLeft{-webkit-animation-name:slideOutLeft;animation-name:slideOutLeft}@-webkit-keyframes slideOutRight{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes slideOutRight{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.pathwayMapper .slideOutRight{-webkit-animation-name:slideOutRight;animation-name:slideOutRight}@-webkit-keyframes slideOutUp{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes slideOutUp{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.pathwayMapper .slideOutUp{-webkit-animation-name:slideOutUp;animation-name:slideOutUp}.pathwayMapper [data-notify=container][class*=alert-pathwayMapper-] .close{opacity:1;color:#fff;margin-top:7px;outline:0}.pathwayMapper [data-notify=container][class*=alert-pathwayMapper-] .close:hover{color:#fff}.pathwayMapper [data-notify=container].alert-pathwayMapper-success{background-color:#1abc9c;color:#fff}.pathwayMapper [data-notify=container].alert-pathwayMapper-fail{background-color:#ff2644;color:#fff}.pathwayMapper .toolbar{margin-bottom:5px;padding:5px;background-color:#eff0f2;border-radius:6px}.pathwayMapper .toolbar .toolbar-button{margin-left:-1px;margin-right:-1px;border:2px solid #eff0f2;border-radius:6px;display:inline-block;cursor:pointer}.pathwayMapper .toolbar .toolbar-button:hover{border-color:#1abc9c}.pathwayMapper .toolbar .toolbar-button-focused{border-color:#1abc9c!important}.pathwayMapper .toolbar .btn-group{margin-right:2px;margin-left:2px;border:2px solid #2f4154;padding:1px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.pathwayMapper .toolbar #searchGeneToolbar{float:right;margin-right:0!important;border:none!important}.pathwayMapper .toolbar .input-group.input-group-unstyled input.form-control{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.pathwayMapper .toolbar .input-group-unstyled .input-group-addon{border-radius:4px;border:0;background-color:transparent}.pathwayMapper .toolbar .form-group{margin:0!important}.pathwayMapper .control-label,.pathwayMapper .input-group input[type=checkbox]{margin-top:10px}.pathwayMapper .toolbar img{height:22px;margin-left:2px;margin-right:2px}.pathwayMapper .gridModal{width:350px!important}.pathwayMapper .geneSearchDiv input{border-radius:6px;border:2px solid #2b2b2d;box-shadow:none!important;-webkit-box-shadow:none!important;-moz-box-shadow:none!important;width:100%}.pathwayMapper .geneSearchDiv input:focus{border-color:#1abc9c;outline:0;border-style:solid;box-shadow:none!important;-webkit-box-shadow:none!important;-moz-box-shadow:none!important}.pathwayMapper body{background-color:#fff}.pathwayMapper input[type=color]{padding:2px}.pathwayMapper input[type=color]:hover{cursor:pointer}.pathwayMapper #colorPickerButton{padding-top:10px}.pathwayMapper .form-control:focus{border:2px solid #1abc9c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #1abc9c;color:#2f4154}.pathwayMapper .cy-panzoom{position:absolute}.pathwayMapper .cytoscape-navigatorView{background:#1abc9c}.pathwayMapper .cytoscape-navigator-wrapper{position:absolute;border:2px solid #2f4154;border-radius:6px;background:#fff;z-index:100;width:300px;height:200px;bottom:8.5%;right:3.5%;overflow:hidden}.pathwayMapper .btn:focus{outline:0!important}.pathwayMapper .pathwayPanel .fileNameContent{color:#2f4154;margin-bottom:10px;padding:5px;cursor:pointer;min-width:100px}.pathwayMapper .pathwayPanel div[contenteditable=true]:focus{outline:#1abc9c solid 2px;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #1abc9c;background-color:#fff}.pathwayMapper .pathwayPanel textarea{width:170px;height:50px;margin-bottom:10px;z-index:999999}.pathwayMapper .mainContentWrapper{display:flex}.pathwayMapper .sideBarWrapper{min-width:130px;max-width:130px;font-size:12px}.pathwayMapper .control-label{color:rgba(23,22,22,.78)!important;font-weight:300!important}.pathwayMapper .buttonContainer,.pathwayMapper .edgePaletteWrapper,.pathwayMapper .pnl .pnl-header{text-align:center}.pathwayMapper .input-group{margin-bottom:5px;width:100%}.pathwayMapper .input-group .form-control{border-radius:6px}.pathwayMapper .edgePaletteWrapper .list-group{margin-bottom:0!important}.pathwayMapper .edgePaletteWrapper .list-group .list-group-item{border:none!important}.pathwayMapper .edgePaletteWrapper .edge-palette .list-group-item.active,.pathwayMapper .edgePaletteWrapper .edge-palette .list-group-item.active:focus,.pathwayMapper .edgePaletteWrapper .edge-palette .list-group-item.active:hover{background-color:#1abc9c!important}.pathwayMapper .edgePaletteWrapper .edge-palette .list-group-item{padding:7px 5px}.pathwayMapper .edgePaletteWrapper .edge-palette a{margin-bottom:5px;border-radius:6px;font-size:12px}.pathwayMapper .edgePaletteWrapper .edge-palette a img{width:30px}.pathwayMapper footer{background-color:#eee;color:#393939;height:100%}.pathwayMapper .pageContentWrapper{margin-bottom:70px}.pathwayMapper .navbar-nav>.open>a,.pathwayMapper .navbar-nav>.open>a:focus,.pathwayMapper .navbar-nav>.open>a:hover{color:#fff!important;background-color:#1abc9c!important;border-left-color:transparent}.pathwayMapper .navbar-nav>.open>.dropdown-menu>li>a{color:#fff!important;border-radius:4px!important;font-size:12px!important}.pathwayMapper .navbar-nav>.open>.dropdown-menu{background-color:#2f4154!important}.pathwayMapper .navbar-nav>li>.dropdown-menu,.pathwayMapper .navbar-nav>li>.dropdown-submenu{border-radius:4px!important;border:none}.pathwayMapper .navbar-nav>.open>.dropdown-menu>li>a:focus,.pathwayMapper .navbar-nav>.open>.dropdown-menu>li>a:hover{color:#fff;background-color:#1abc9c}.pathwayMapper .navbar{border-radius:0 0 6px 6px;background-color:#2f4154;border:none!important;margin-bottom:5px!important}.pathwayMapper .navbar-nav a{transition:all .2s linear}.pathwayMapper .navbar-nav>li>a{color:#fff!important;font-weight:500!important;font-size:12px}.pathwayMapper .navbar-nav>li>a:hover{color:#1abc9c!important}.pathwayMapper .navbar-brand{color:#fff!important;font-size:16px;font-weight:700}.pathwayMapper .pnl{margin-bottom:10px;border-radius:6px;box-shadow:0 1px 1px rgba(0,0,0,.15),0 -1px 1px rgba(0,0,0,.15)}.pathwayMapper .pnl .pnl-header{background-color:#1abc9c;border-top-left-radius:6px;border-top-right-radius:6px;padding:8px 5px 5px;color:#fff;font-size:12px;font-weight:900}.pathwayMapper .pnl .pnl-body{background-color:#eff0f2;padding:4px 2px;border-bottom-left-radius:6px;border-bottom-right-radius:6px}.pathwayMapper .pnl .pnl-body .buttonContainer>button{border:none!important}.pathwayMapper .pnl .pnl-body .dragButtonContainer{width:115px;margin-left:auto;margin-right:auto}.pathwayMapper .customMargins{margin-left:3%!important;margin-right:3%!important}.pathwayMapper .leftPanelFix{padding-left:0}.pathwayMapper .hiddenfile{width:0;height:0;overflow:hidden}.pathwayMapper .buttonContainer{margin-bottom:5px}.pathwayMapper .buttonContainer button{font-size:12px;width:85%}.pathwayMapper .cyContainer{border:3px solid #1abc9c;height:780px;border-radius:6px;padding-right:0!important;padding-left:0!important;width:100%;margin-left:10px}.pathwayMapper #cy{height:100%}.pathwayMapper .html5tooltip-box{background-color:rgba(47,65,84,.92);border-radius:8px}","/*\n * qTip2 - Pretty powerful tooltips - v2.2.0\n * http://qtip2.com\n *\n * Copyright (c) 2013 Craig Michael Thompson\n * Released under the MIT, GPL licenses\n * http://jquery.org/license\n *\n * Date: Thu Nov 21 2013 08:34 GMT+0000\n * Plugins: tips modal viewport svg imagemap ie6\n * Styles: basic css3\n */\n .qtip{\n\tposition: absolute;\n\tleft: -28000px;\n\ttop: -28000px;\n\tdisplay: none;\n\n\tmax-width: 280px;\n\tmin-width: 50px;\n\t\n\tfont-size: 10.5px;\n\tline-height: 12px;\n\n\tdirection: ltr;\n\n\tbox-shadow: none;\n\tpadding: 0;\n}\n\n\t.qtip-content{\n\t\tposition: relative;\n\t\tpadding: 5px 9px;\n\t\toverflow: hidden;\n\n\t\ttext-align: left;\n\t\tword-wrap: break-word;\n\t}\n\n\t.qtip-titlebar{\n\t\tposition: relative;\n\t\tpadding: 5px 35px 5px 10px;\n\t\toverflow: hidden;\n\n\t\tborder-width: 0 0 1px;\n\t\tfont-weight: bold;\n\t}\n\n\t.qtip-titlebar + .qtip-content{ border-top-width: 0 !important; }\n\n\t/* Default close button class */\n\t.qtip-close{\n\t\tposition: absolute;\n\t\tright: -9px; top: -9px;\n\n\t\tcursor: pointer;\n\t\toutline: medium none;\n\n\t\tborder-width: 1px;\n\t\tborder-style: solid;\n\t\tborder-color: transparent;\n\t}\n\n\t\t.qtip-titlebar .qtip-close{\n\t\t\tright: 4px; top: 50%;\n\t\t\tmargin-top: -9px;\n\t\t}\n\t\n\t\t* html .qtip-titlebar .qtip-close{ top: 16px; } /* IE fix */\n\n\t\t.qtip-titlebar .ui-icon,\n\t\t.qtip-icon .ui-icon{\n\t\t\tdisplay: block;\n\t\t\ttext-indent: -1000em;\n\t\t\tdirection: ltr;\n\t\t}\n\n\t\t.qtip-icon, .qtip-icon .ui-icon{\n\t\t\t-moz-border-radius: 3px;\n\t\t\t-webkit-border-radius: 3px;\n\t\t\tborder-radius: 3px;\n\t\t\ttext-decoration: none;\n\t\t}\n\n\t\t\t.qtip-icon .ui-icon{\n\t\t\t\twidth: 18px;\n\t\t\t\theight: 14px;\n\n\t\t\t\tline-height: 14px;\n\t\t\t\ttext-align: center;\n\t\t\t\ttext-indent: 0;\n\t\t\t\tfont: normal bold 10px/13px Tahoma,sans-serif;\n\n\t\t\t\tcolor: inherit;\n\t\t\t\tbackground: transparent none no-repeat -100em -100em;\n\t\t\t}\n\n/* Applied to 'focused' tooltips e.g. most recently displayed/interacted with */\n.qtip-focus{}\n\n/* Applied on hover of tooltips i.e. added/removed on mouseenter/mouseleave respectively */\n.qtip-hover{}\n\n/* Default tooltip style */\n.qtip-default{\n\tborder-width: 1px;\n\tborder-style: solid;\n\tborder-color: #F1D031;\n\n\tbackground-color: #FFFFA3;\n\tcolor: #555;\n}\n\n\t.qtip-default .qtip-titlebar{\n\t\tbackground-color: #FFEF93;\n\t}\n\n\t.qtip-default .qtip-icon{\n\t\tborder-color: #CCC;\n\t\tbackground: #F1F1F1;\n\t\tcolor: #777;\n\t}\n\t\n\t.qtip-default .qtip-titlebar .qtip-close{\n\t\tborder-color: #AAA;\n\t\tcolor: #111;\n\t}\n\n\n\n/*! Light tooltip style */\n.qtip-light{\n\tbackground-color: white;\n\tborder-color: #E2E2E2;\n\tcolor: #454545;\n}\n\n\t.qtip-light .qtip-titlebar{\n\t\tbackground-color: #f1f1f1;\n\t}\n\n\n/*! Dark tooltip style */\n.qtip-dark{\n\tbackground-color: #505050;\n\tborder-color: #303030;\n\tcolor: #f3f3f3;\n}\n\n\t.qtip-dark .qtip-titlebar{\n\t\tbackground-color: #404040;\n\t}\n\n\t.qtip-dark .qtip-icon{\n\t\tborder-color: #444;\n\t}\n\n\t.qtip-dark .qtip-titlebar .ui-state-hover{\n\t\tborder-color: #303030;\n\t}\n\n\n/*! Cream tooltip style */\n.qtip-cream{\n\tbackground-color: #FBF7AA;\n\tborder-color: #F9E98E;\n\tcolor: #A27D35;\n}\n\n\t.qtip-cream .qtip-titlebar{\n\t\tbackground-color: #F0DE7D;\n\t}\n\n\t.qtip-cream .qtip-close .qtip-icon{\n\t\tbackground-position: -82px 0;\n\t}\n\n\n/*! Red tooltip style */\n.qtip-red{\n\tbackground-color: #F78B83;\n\tborder-color: #D95252;\n\tcolor: #912323;\n}\n\n\t.qtip-red .qtip-titlebar{\n\t\tbackground-color: #F06D65;\n\t}\n\n\t.qtip-red .qtip-close .qtip-icon{\n\t\tbackground-position: -102px 0;\n\t}\n\n\t.qtip-red .qtip-icon{\n\t\tborder-color: #D95252;\n\t}\n\n\t.qtip-red .qtip-titlebar .ui-state-hover{\n\t\tborder-color: #D95252;\n\t}\n\n\n/*! Green tooltip style */\n.qtip-green{\n\tbackground-color: #CAED9E;\n\tborder-color: #90D93F;\n\tcolor: #3F6219;\n}\n\n\t.qtip-green .qtip-titlebar{\n\t\tbackground-color: #B0DE78;\n\t}\n\n\t.qtip-green .qtip-close .qtip-icon{\n\t\tbackground-position: -42px 0;\n\t}\n\n\n/*! Blue tooltip style */\n.qtip-blue{\n\tbackground-color: #E5F6FE;\n\tborder-color: #ADD9ED;\n\tcolor: #5E99BD;\n}\n\n\t.qtip-blue .qtip-titlebar{\n\t\tbackground-color: #D0E9F5;\n\t}\n\n\t.qtip-blue .qtip-close .qtip-icon{\n\t\tbackground-position: -2px 0;\n\t}\n\n\n\n.qtip-shadow{\n\t-webkit-box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15);\n\t-moz-box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15);\n\tbox-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15);\n}\n\n/* Add rounded corners to your tooltips in: FF3+, Chrome 2+, Opera 10.6+, IE9+, Safari 2+ */\n.qtip-rounded,\n.qtip-tipsy,\n.qtip-bootstrap{\n\t-moz-border-radius: 5px;\n\t-webkit-border-radius: 5px;\n\tborder-radius: 5px;\n}\n\n.qtip-rounded .qtip-titlebar{\n\t-moz-border-radius: 4px 4px 0 0;\n\t-webkit-border-radius: 4px 4px 0 0;\n\tborder-radius: 4px 4px 0 0;\n}\n\n/* Youtube tooltip style */\n.qtip-youtube{\n\t-moz-border-radius: 2px;\n\t-webkit-border-radius: 2px;\n\tborder-radius: 2px;\n\t\n\t-webkit-box-shadow: 0 0 3px #333;\n\t-moz-box-shadow: 0 0 3px #333;\n\tbox-shadow: 0 0 3px #333;\n\n\tcolor: white;\n\tborder-width: 0;\n\n\tbackground: #4A4A4A;\n\tbackground-image: -webkit-gradient(linear,left top,left bottom,color-stop(0,#4A4A4A),color-stop(100%,black));\n\tbackground-image: -webkit-linear-gradient(top,#4A4A4A 0,black 100%);\n\tbackground-image: -moz-linear-gradient(top,#4A4A4A 0,black 100%);\n\tbackground-image: -ms-linear-gradient(top,#4A4A4A 0,black 100%);\n\tbackground-image: -o-linear-gradient(top,#4A4A4A 0,black 100%);\n}\n\n\t.qtip-youtube .qtip-titlebar{\n\t\tbackground-color: #4A4A4A;\n\t\tbackground-color: rgba(0,0,0,0);\n\t}\n\t\n\t.qtip-youtube .qtip-content{\n\t\tpadding: .75em;\n\t\tfont: 12px arial,sans-serif;\n\t\t\n\t\tfilter: progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000);\n\t\t-ms-filter: \"progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000);\";\n\t}\n\n\t.qtip-youtube .qtip-icon{\n\t\tborder-color: #222;\n\t}\n\n\t.qtip-youtube .qtip-titlebar .ui-state-hover{\n\t\tborder-color: #303030;\n\t}\n\n\n/* jQuery TOOLS Tooltip style */\n.qtip-jtools{\n\tbackground: #232323;\n\tbackground: rgba(0, 0, 0, 0.7);\n\tbackground-image: -webkit-gradient(linear, left top, left bottom, from(#717171), to(#232323));\n\tbackground-image: -moz-linear-gradient(top, #717171, #232323);\n\tbackground-image: -webkit-linear-gradient(top, #717171, #232323);\n\tbackground-image: -ms-linear-gradient(top, #717171, #232323);\n\tbackground-image: -o-linear-gradient(top, #717171, #232323);\n\n\tborder: 2px solid #ddd;\n\tborder: 2px solid rgba(241,241,241,1);\n\n\t-moz-border-radius: 2px;\n\t-webkit-border-radius: 2px;\n\tborder-radius: 2px;\n\n\t-webkit-box-shadow: 0 0 12px #333;\n\t-moz-box-shadow: 0 0 12px #333;\n\tbox-shadow: 0 0 12px #333;\n}\n\n\t/* IE Specific */\n\t.qtip-jtools .qtip-titlebar{\n\t\tbackground-color: transparent;\n\t\tfilter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A);\n\t\t-ms-filter: \"progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A)\";\n\t}\n\t.qtip-jtools .qtip-content{\n\t\tfilter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323);\n\t\t-ms-filter: \"progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323)\";\n\t}\n\n\t.qtip-jtools .qtip-titlebar,\n\t.qtip-jtools .qtip-content{\n\t\tbackground: transparent;\n\t\tcolor: white;\n\t\tborder: 0 dashed transparent;\n\t}\n\n\t.qtip-jtools .qtip-icon{\n\t\tborder-color: #555;\n\t}\n\n\t.qtip-jtools .qtip-titlebar .ui-state-hover{\n\t\tborder-color: #333;\n\t}\n\n\n/* Cluetip style */\n.qtip-cluetip{\n\t-webkit-box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4);\n\t-moz-box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4);\n\tbox-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4);\n\n\tbackground-color: #D9D9C2;\n\tcolor: #111;\n\tborder: 0 dashed transparent;\n}\n\n\t.qtip-cluetip .qtip-titlebar{\n\t\tbackground-color: #87876A;\n\t\tcolor: white;\n\t\tborder: 0 dashed transparent;\n\t}\n\t\n\t.qtip-cluetip .qtip-icon{\n\t\tborder-color: #808064;\n\t}\n\t\n\t.qtip-cluetip .qtip-titlebar .ui-state-hover{\n\t\tborder-color: #696952;\n\t\tcolor: #696952;\n\t}\n\n\n/* Tipsy style */\n.qtip-tipsy{\n\tbackground: black;\n\tbackground: rgba(0, 0, 0, .87);\n\n\tcolor: white;\n\tborder: 0 solid transparent;\n\n\tfont-size: 11px;\n\tfont-family: 'Lucida Grande', sans-serif;\n\tfont-weight: bold;\n\tline-height: 16px;\n\ttext-shadow: 0 1px black;\n}\n\n\t.qtip-tipsy .qtip-titlebar{\n\t\tpadding: 6px 35px 0 10px;\n\t\tbackground-color: transparent;\n\t}\n\n\t.qtip-tipsy .qtip-content{\n\t\tpadding: 6px 10px;\n\t}\n\t\n\t.qtip-tipsy .qtip-icon{\n\t\tborder-color: #222;\n\t\ttext-shadow: none;\n\t}\n\n\t.qtip-tipsy .qtip-titlebar .ui-state-hover{\n\t\tborder-color: #303030;\n\t}\n\n\n/* Tipped style */\n.qtip-tipped{\n\tborder: 3px solid #959FA9;\n\n\t-moz-border-radius: 3px;\n\t-webkit-border-radius: 3px;\n\tborder-radius: 3px;\n\n\tbackground-color: #F9F9F9;\n\tcolor: #454545;\n\n\tfont-weight: normal;\n\tfont-family: serif;\n}\n\n\t.qtip-tipped .qtip-titlebar{\n\t\tborder-bottom-width: 0;\n\n\t\tcolor: white;\n\t\tbackground: #3A79B8;\n\t\tbackground-image: -webkit-gradient(linear, left top, left bottom, from(#3A79B8), to(#2E629D));\n\t\tbackground-image: -webkit-linear-gradient(top, #3A79B8, #2E629D);\n\t\tbackground-image: -moz-linear-gradient(top, #3A79B8, #2E629D);\n\t\tbackground-image: -ms-linear-gradient(top, #3A79B8, #2E629D);\n\t\tbackground-image: -o-linear-gradient(top, #3A79B8, #2E629D);\n\t\tfilter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D);\n\t\t-ms-filter: \"progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D)\";\n\t}\n\n\t.qtip-tipped .qtip-icon{\n\t\tborder: 2px solid #285589;\n\t\tbackground: #285589;\n\t}\n\n\t\t.qtip-tipped .qtip-icon .ui-icon{\n\t\t\tbackground-color: #FBFBFB;\n\t\t\tcolor: #555;\n\t\t}\n\n\n/**\n * Twitter Bootstrap style.\n *\n * Tested with IE 8, IE 9, Chrome 18, Firefox 9, Opera 11.\n * Does not work with IE 7.\n */\n.qtip-bootstrap{\n\t/** Taken from Bootstrap body */\n\tfont-size: 14px;\n\tline-height: 20px;\n\tcolor: #333333;\n\n\t/** Taken from Bootstrap .popover */\n\tpadding: 1px;\n\tbackground-color: #ffffff;\n\tborder: 1px solid #ccc;\n\tborder: 1px solid rgba(0, 0, 0, 0.2);\n\t-webkit-border-radius: 6px;\n\t-moz-border-radius: 6px;\n\tborder-radius: 6px;\n\t-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n\t-moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n\tbox-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n\t-webkit-background-clip: padding-box;\n\t-moz-background-clip: padding;\n\tbackground-clip: padding-box;\n}\n\n\t.qtip-bootstrap .qtip-titlebar{\n\t\t/** Taken from Bootstrap .popover-title */\n\t\tpadding: 8px 14px;\n\t\tmargin: 0;\n\t\tfont-size: 14px;\n\t\tfont-weight: normal;\n\t\tline-height: 18px;\n\t\tbackground-color: #f7f7f7;\n\t\tborder-bottom: 1px solid #ebebeb;\n\t\t-webkit-border-radius: 5px 5px 0 0;\n\t\t-moz-border-radius: 5px 5px 0 0;\n\t\tborder-radius: 5px 5px 0 0;\n\t}\n\n\t\t.qtip-bootstrap .qtip-titlebar .qtip-close{\n\t\t\t/**\n\t\t\t * Overrides qTip2:\n\t\t\t * .qtip-titlebar .qtip-close{\n\t\t\t * [...]\n\t\t\t * right: 4px;\n\t\t\t * top: 50%;\n\t\t\t * [...]\n\t\t\t * border-style: solid;\n\t\t\t * }\n\t\t\t */\n\t\t\tright: 11px;\n\t\t\ttop: 45%;\n\t\t\tborder-style: none;\n\t\t}\n\n\t.qtip-bootstrap .qtip-content{\n\t\t/** Taken from Bootstrap .popover-content */\n\t\tpadding: 9px 14px;\n\t}\n\n\t.qtip-bootstrap .qtip-icon{\n\t\t/**\n\t\t * Overrides qTip2:\n\t\t * .qtip-default .qtip-icon {\n\t\t * border-color: #CCC;\n\t\t * background: #F1F1F1;\n\t\t * color: #777;\n\t\t * }\n\t\t */\n\t\tbackground: transparent;\n\t}\n\n\t\t.qtip-bootstrap .qtip-icon .ui-icon{\n\t\t\t/**\n\t\t\t * Overrides qTip2:\n\t\t\t * .qtip-icon .ui-icon{\n\t\t\t * width: 18px;\n\t\t\t * height: 14px;\n\t\t\t * }\n\t\t\t */\n\t\t\twidth: auto;\n\t\t\theight: auto;\n\n\t\t\t/* Taken from Bootstrap .close */\n\t\t\tfloat: right;\n\t\t\tfont-size: 20px;\n\t\t\tfont-weight: bold;\n\t\t\tline-height: 18px;\n\t\t\tcolor: #000000;\n\t\t\ttext-shadow: 0 1px 0 #ffffff;\n\t\t\topacity: 0.2;\n\t\t\tfilter: alpha(opacity=20);\n\t\t}\n\n\t\t.qtip-bootstrap .qtip-icon .ui-icon:hover{\n\t\t\t/* Taken from Bootstrap .close:hover */\n\t\t\tcolor: #000000;\n\t\t\ttext-decoration: none;\n\t\t\tcursor: pointer;\n\t\t\topacity: 0.4;\n\t\t\tfilter: alpha(opacity=40);\n\t\t}\n\n\n/* IE9 fix - removes all filters */\n.qtip:not(.ie9haxors) div.qtip-content,\n.qtip:not(.ie9haxors) div.qtip-titlebar{\n\tfilter: none;\n\t-ms-filter: none;\n}\n\n\n\n.qtip .qtip-tip{\n\tmargin: 0 auto;\n\toverflow: hidden;\n\tz-index: 10;\n\t\n}\n\n\t/* Opera bug #357 - Incorrect tip position\n\thttps://github.com/Craga89/qTip2/issues/367 */\n\tx:-o-prefocus, .qtip .qtip-tip{\n\t\tvisibility: hidden;\n\t}\n\n\t.qtip .qtip-tip,\n\t.qtip .qtip-tip .qtip-vml,\n\t.qtip .qtip-tip canvas{\n\t\tposition: absolute;\n\n\t\tcolor: #123456;\n\t\tbackground: transparent;\n\t\tborder: 0 dashed transparent;\n\t}\n\t\n\t.qtip .qtip-tip canvas{ top: 0; left: 0; }\n\n\t.qtip .qtip-tip .qtip-vml{\n\t\tbehavior: url(#default#VML);\n\t\tdisplay: inline-block;\n\t\tvisibility: visible;\n\t}\n\n#qtip-overlay{\n\tposition: fixed;\n\tleft: 0; top: 0;\n\twidth: 100%; height: 100%;\n}\n\n\t/* Applied to modals with show.modal.blur set to true */\n\t#qtip-overlay.blurs{ cursor: pointer; }\n\n\t/* Change opacity of overlay here */\n\t#qtip-overlay div{\n\t\tposition: absolute;\n\t\tleft: 0; top: 0;\n\t\twidth: 100%; height: 100%;\n\n\t\tbackground-color: black;\n\n\t\topacity: 0.7;\n\t\tfilter:alpha(opacity=70);\n\t\t-ms-filter:\"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)\";\n\t}\n\n\n\n.qtipmodal-ie6fix{\n\tposition: absolute !important;\n}",".pathwayMapper .list-group {\nmargin-bottom: 0px;\n}\n.pathwayMapper .toolbar .toolbar-button {\nmargin-right: 1px;\nmargin-left: 1px;\n}\n.pathwayMapper tbody tr:hover {\nbackground: #97bfdb !important;\n}\n.pathwayMapper .cBioMode .cytoscape-navigatorView {\nbackground: #4389c0;\n}\n.pathwayMapper .ui-cytoscape-nodeadd-nodediv {\nbackground: #fbfbfb none repeat scroll 0% 0%;\nborder: 0px solid white;\nborder-radius: 5px;\nfont-size: 1.3em !important;\ncursor: pointer;\ntext-align: center;\n}\n.pathwayMapper #ranking-bar .info-entry {\nmargin-bottom: 10px;\n}\n.pathwayMapper #ranking-bar .info-entry .indent {\nmargin-left: 20px;\nmargin-top: 6px;\n}\n.pathwayMapper #ranking-bar:first-child {\nmargin-top: 20px;\n}\n.pathwayMapper #ranking-bar .info-title {\nbackground-color: white;\nwidth: 100%;\ncolor: black;\nfont-weight: bold;\npadding-top: 3px;\npadding-bottom: 3px;\nborder-radius: 4px;\n}\n.pathwayMapper #cy {\nmargin-top: 10px;\n}\n.pathwayMapper #ranking-table {\n/*margin-left: 20px; */\nmargin-top: 6px;\nmargin-right: 6px;\n}\n.pathwayMapper #toolbar {\nmargin-top: 10px;\nmargin-left: 13px;\n}\n.pathwayMapper .ui-cytoscape-nodeadd img {\nwidth: 110px;\nheight: 28.5px;\n}\n.pathwayMapper .label:hover {\nbackground-color: #97bfdb !important;\n}\n.pathwayMapper .label-default {\nbackground-color: #adadad !important;\n}\n.pathwayMapper .checkbox.disabled {\ncolor: #adadad !important;\n}\n.pathwayMapper #ranking-bar .table tbody tr td {\npadding: 5px !important;\n}\n.pathwayMapper #ranking-bar .label {\npadding-top: 6px;\npadding-bottom: 6px;\nmargin-bottom: 4px;\ndisplay: inline-block;\nmargin-right: 4px;\nfont-size: 11px;\n}\n.pathwayMapper .label:hover {\ncursor: pointer;\n}\n.pathwayMapper .dropdown-submenu .caret {\ndisplay: none;\n}\n.pathwayMapper #ranking-bar .fa-question-circle {\ncursor: pointer;\n}\n.pathwayMapper .__react_component_tooltip {\nmax-width: 350px;\nz-index: 1040;\n}\n.pathwayMapper .__react_component_tooltip.type-light.border {\nborder: 1px solid #878686;\n}\n.pathwayMapper .__react_component_tooltip.show {\nopacity: 1;\n}\n.pathwayMapper #ranking-bar thead td {\nfont-size: 12px;\n}\n.pathwayMapper #ranking-bar tbody td {\nfont-size: 11px;\n}\n.pathwayMapper #about-model-header {\nmargin-bottom: 15px !important;\n}\n.pathwayMapper .list-group-item:focus {\nbackground-color: white;\n}\n.pathwayMapper .qtip-tipsy {\nbackground: rgba(47, 65, 84, 0.92) !important;\n}\n.pathwayMapper #dropdown-study {\nwidth: 500px;\ntext-align: left;\n}\n.pathwayMapper #searchGeneToolbar {\nmax-width: 200px;\n}\n.pathwayMapper #compartmentNodeDiv img {\nheight: 30.26px;\n}\n.pathwayMapper .pmTip {\nbackground-color: #2f4154 !important;\nfont-family: arial, sans-serif;\nfont-size: 12px;\nborder-radius: 7px;\n}\n.pathwayMapper .checkbox.layProps {\nmargin-top: 0;\n}\n.pathwayMapper .Toastify__toast-container {\nwidth: 420px;\n}\n.pathwayMapper .Toastify__toast--success {\nbackground-color: #1abc9c;\n}\n.pathwayMapper #alterationCheckBox {\nmargin-top: 0;\n}\n.pathwayMapper #toolbar img {\ncursor: pointer;\nmargin-left: 5px;\n}\n.pathwayMapper table .radio {\nmargin-top: 0 !important;\nmargin-bottom: 0 !important;\n}\n.pathwayMapper .cBioMode #showMoreButton {\nwidth: 100px !important;\n}\n#cBioHelpModal table td {\npadding: 4px;\n}\n\n#cBioHelpModal .modal-header {\n background-color: #ececec;\n border-top-left-radius: 6px;\n border-top-right-radius: 6px;\n text-align: center;\n}\n\n.pathwayMapper .cBioMode .Toastify__toast--default {\nbackground-color: #dff0d8;\ncolor: #333333;\n}\n.pathwayMapper .cBioMode .Toastify__toast {\nmin-height: 50px !important;\n}\n.pathwayMapper .cBioMode .Toastify__toast-container {\nwidth: 550px !important;\n}\n.pathwayMapper .cytoscape-navigator-wrapper {\ntransform: scale(0.86);\n}\n\n.pathwayMapper .pathway-toolbar.navbar{\n border-radius: 6px;\n}\n\n.pathwayMapper .smallToast {\n width: 325px;\n}\n\n.pathwayMapper #search-gene-input-group-addon:hover {\n background-color: #fff;\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/index.html b/dist/index.html index a18730c5..c71dec26 100644 --- a/dist/index.html +++ b/dist/index.html @@ -11,12 +11,12 @@ - +
- + diff --git a/dist/managers/ContextMenuManager.d.ts b/dist/managers/ContextMenuManager.d.ts index e4e39baf..809d73b6 100644 --- a/dist/managers/ContextMenuManager.d.ts +++ b/dist/managers/ContextMenuManager.d.ts @@ -1,13 +1,12 @@ -import EditorActionsManager from "./EditorActionsManager"; import { EModalType } from "../ui/react-pathway-mapper"; +import EditorActionsManager from "./EditorActionsManager"; export default class ContextMenuManager { private cy; private editor; - private isCBioPortal; private handleOpen; private undoRedoManager; private isCollaborative; - constructor(cy: any, editor: EditorActionsManager, isCBioPortal: boolean, handleOpen: (modalId: EModalType) => void, undoRedoManager: any, isCollaborative: boolean); + constructor(cy: any, editor: EditorActionsManager, handleOpen: (modalId: EModalType) => void, undoRedoManager: any, isCollaborative: boolean); init(): void; isChildren(node: any, queryNode: any): boolean; } diff --git a/dist/managers/EditorActionsManager.d.ts b/dist/managers/EditorActionsManager.d.ts index b1071de1..29be828d 100644 --- a/dist/managers/EditorActionsManager.d.ts +++ b/dist/managers/EditorActionsManager.d.ts @@ -1,7 +1,7 @@ +import { ILayoutProperties } from "../modals/LayoutProperties"; +import { IProfileMetaData } from "../ui/react-pathway-mapper"; import CBioPortalAccessor from "../utils/CBioPortalAccessor"; import GenomicDataOverlayManager from "./GenomicDataOverlayManager"; -import { IProfileMetaData } from "../ui/react-pathway-mapper"; -import { ILayoutProperties } from "../modals/LayoutProperties"; export default class EditorActionsManager { static defaultLayoutProperties: ILayoutProperties; cy: any; @@ -18,8 +18,10 @@ export default class EditorActionsManager { private shareDBManager; private portalAccessor; private profiles; - private modifyPathwayGeneMap; constructor(isCollaborative: boolean, shareDBManager: any, cyInst: any, isCBioPortal: boolean, undoRedoManager: any, portalAccessor: CBioPortalAccessor, profiles: IProfileMetaData[]); + setProfile(index: number, profile: IProfileMetaData): void; + addProfile(profile: IProfileMetaData): void; + removeProfiles(): void; handleChangePositionByAlignment(movedNodeArr: any): void; doChangePosition(movedNodes: any): any[]; undoChangePosition(movedNodes: any): any[]; diff --git a/dist/managers/GenomicDataOverlayManager.d.ts b/dist/managers/GenomicDataOverlayManager.d.ts index b300c23b..6e6b4b1e 100644 --- a/dist/managers/GenomicDataOverlayManager.d.ts +++ b/dist/managers/GenomicDataOverlayManager.d.ts @@ -6,7 +6,6 @@ export default class GenomicDataOverlayManager { groupedGenomicDataMap: {}; patientData: any; private DEFAULT_VISIBLE_GENOMIC_DATA_COUNT; - private MAX_VISIBLE_GENOMIC_DATA_COUNT; private observers; private cy; constructor(cy: any); diff --git a/dist/modals/PathwayDetailsModal.d.ts b/dist/modals/PathwayDetailsModal.d.ts index f53a915d..e088b6a8 100644 --- a/dist/modals/PathwayDetailsModal.d.ts +++ b/dist/modals/PathwayDetailsModal.d.ts @@ -1,6 +1,6 @@ import React from 'react'; -import PathwayActions from '../utils/PathwayActions'; import { IPathwayInfo } from '../managers/FileOperationsManager'; +import PathwayActions from '../utils/PathwayActions'; interface IPathwayDetailsModalProps { isModalShown: boolean; handleClose: Function; diff --git a/dist/modals/ProfilesModal.d.ts b/dist/modals/ProfilesModal.d.ts index 6bcec179..148d341a 100644 --- a/dist/modals/ProfilesModal.d.ts +++ b/dist/modals/ProfilesModal.d.ts @@ -1,15 +1,17 @@ import React from "react"; -import { IProfileMetaData } from "../ui/react-pathway-mapper"; import EditorActionsManager from "../managers/EditorActionsManager"; +import { IProfileMetaData } from "../ui/react-pathway-mapper"; interface IProfilesModalProps { profiles: IProfileMetaData[]; editor: EditorActionsManager; isModalShown: boolean; handleClose: Function; + handleProfileLabelClicked: (index: number) => void; } export default class ProfilesModal extends React.Component { constructor(props: IProfilesModalProps); get profileEnabledMap(): {}; + handleProfileLabelClicked(index: number): void; render(): JSX.Element; } export {}; diff --git a/dist/modals/StudyModal.d.ts b/dist/modals/StudyModal.d.ts index 22f30eae..2c17ac3c 100644 --- a/dist/modals/StudyModal.d.ts +++ b/dist/modals/StudyModal.d.ts @@ -14,11 +14,14 @@ export default class StudyModal extends React.Component { selectedStudyData: any[]; portalAccessor: CBioPortalAccessor; constructor(props: IStudyModalProps); + setSelectedStudyData(data: any[]): void; + setDataTypeProperties(dataType: string, properties: IDataTypeMetaData): void; preparePortalAccess(studyId: string): void; disableAllDataTypes(): void; fetchStudy(): void; resetModal(): void; handleCheckboxClick(dataType: any): void; + get selectedStudyDataTitle(): any; render(): JSX.Element; } export {}; diff --git a/dist/react-pathway-mapper.es5.js b/dist/react-pathway-mapper.es5.js index 106d9bc1..8bb5b993 100644 --- a/dist/react-pathway-mapper.es5.js +++ b/dist/react-pathway-mapper.es5.js @@ -82,7 +82,7 @@ module.exports = /******/ /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 74); +/******/ return __webpack_require__(__webpack_require__.s = 77); /******/ }) /************************************************************************/ /******/ ([ @@ -129,21 +129,21 @@ module.exports = require("cytoscape"); /***/ }), /* 7 */ -/***/ (function(module) { +/***/ (function(module, exports) { -module.exports = {"ACC-2016-TP53-RB-pathway":["ACC-2016-TP53-RB-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","CDK4\twyMGXBw8cUj6\tGENE\t-1\t262\t231\t","RB1\tLrJe2ktmcVzK\tGENE\t-1\t262\t340\t","CDKN2A\tN18olkvEcUJu\tGENE\t-1\t387\t127\t","TP53\t-VLZ5keBcXa3\tGENE\t-1\t488\t340\t","MDM2\t79evo3OUcVFA\tGENE\t-1\t488\t231\t","CCNE1\t-le5m2j6cWa2\tGENE\t-1\t80\t340\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","d3auWK_1cit5\t79evo3OUcVFA\t-VLZ5keBcXa3\tINHIBITS","w4Yp60k9chhi\tN18olkvEcUJu\t79evo3OUcVFA\tINHIBITS","XhRgnqAscgwV\tN18olkvEcUJu\twyMGXBw8cUj6\tINHIBITS","0E_Xe1cUckq-\twyMGXBw8cUj6\tLrJe2ktmcVzK\tINHIBITS","K9h1lRMzclc1\t-le5m2j6cWa2\tLrJe2ktmcVzK\tINHIBITS"],"ACC-2016-WNT-signaling-pathway":["ACC-2016-WNT-signaling-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","CTNNB1\taS-MtgKvdBTI\tGENE\t-1\t396\t371\t","MEN1\tWoDJQ15LdCGw\tGENE\t-1\t615\t371\t","APC\tquRewaVqdAAg\tGENE\t-1\t396\t277\t","WNT\tg2oPjTN1c_MF\tFAMILY\t-1\t396\t183\t","ZNRF3\tD1VT3C7Tc9uz\tGENE\t-1\t396\t87\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","mcDc9E8ddKPh\tWoDJQ15LdCGw\taS-MtgKvdBTI\tINHIBITS","xhr-qCdhdMnS\tg2oPjTN1c_MF\tquRewaVqdAAg\tINHIBITS","MRNaHfmqdLIB\tquRewaVqdAAg\taS-MtgKvdBTI\tINHIBITS","V58DLRlddN04\tD1VT3C7Tc9uz\tg2oPjTN1c_MF\tINHIBITS"],"BLCA-2014-Histone-modification-pathway":["BLCA-2014-Histone-modification-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","KDM1A\tibAwJma20izY\tGENE\t-1\t330\t280\t","K9 (Ac, me1-3)\tUdMq7kedz9FO\tPROCESS\t-1\t441\t185\t","K4 (me1-3)\t6Itl25k-0F3S\tPROCESS\t-1\t214\t185\t","KDM6B\tKGmluEtPHXqp\tGENE\t_aOp5kW01GfD\t685\t332\t","KDM4B\t5_51HfxoHY9n\tGENE\tWWAQi_-h1FbJ\t500\t329\t","H3\t_L15u0RJ0Eq5\tPROCESS\t-1\t1128\t185\t","K36 (me1-3)\tyE8mFlUU0AcJ\tPROCESS\t-1\t785\t185\t","KDM1B\tf-uYX8eW0o-j\tGENE\t-1\t330\t338\t","K27 (Ac, me1-3)\tqU2DuUfoz_fU\tPROCESS\t-1\t612\t185\t","K79 (me1-3)\tsGOXj0dB0CoY\tPROCESS\t-1\t945\t185\t","KDM4A\tZN4FWAEl0yGP\tGENE\t-1\t859\t280\t","KDM5B\t2NfOJGRNHYQB\tGENE\tNnEeq-Df1E_j\t151\t333\t","KDM4A\tw2_Nlv2xHY9d\tGENE\tWWAQi_-h1FbJ\t500\t280\t","Demethylases\tHX269Het1CgI\tPROCESS\t-1\t1107\t280\t","KDM4A-KDM4B\tWWAQi_-h1FbJ\tCOMPARTMENT\t-1\t500\t304\t","KDM5A-KDM5B\tNnEeq-Df1E_j\tCOMPARTMENT\t-1\t151\t306\t","KDM6A\ttsbexFtHHXqU\tGENE\t_aOp5kW01GfD\t685\t280\t","KDM5A\tZGtryZF-HYPy\tGENE\tNnEeq-Df1E_j\t151\t280\t","KDM6A-KDM6B\t_aOp5kW01GfD\tCOMPARTMENT\t-1\t685\t306\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","QFzccFLP1rXn\tUdMq7kedz9FO\tqU2DuUfoz_fU\tBINDS","1iLfbX2611ie\tsGOXj0dB0CoY\t_L15u0RJ0Eq5\tBINDS","KtQPDuFH2B4M\tNnEeq-Df1E_j\t6Itl25k-0F3S\tACTIVATES","1ufB4tsp2MbY\tZN4FWAEl0yGP\tyE8mFlUU0AcJ\tACTIVATES","F6Hoq3VR2Fbi\tibAwJma20izY\t6Itl25k-0F3S\tACTIVATES","c5Dw1pvh2GJ7\tibAwJma20izY\tUdMq7kedz9FO\tACTIVATES","B85D8ro61xLn\tyE8mFlUU0AcJ\tsGOXj0dB0CoY\tBINDS","e_aGaIGw1pWA\t6Itl25k-0F3S\tUdMq7kedz9FO\tBINDS","EVjpyavJ2DfI\tf-uYX8eW0o-j\t6Itl25k-0F3S\tACTIVATES","f0P9R0dZ2J5O\t_aOp5kW01GfD\tqU2DuUfoz_fU\tACTIVATES","g_eFQ6zG2Hu-\tWWAQi_-h1FbJ\tUdMq7kedz9FO\tACTIVATES","T1GuzceK1uZK\tqU2DuUfoz_fU\tyE8mFlUU0AcJ\tBINDS"],"BLCA-2014-RTK-RAS-PI(3)K-pathway":["BLCA-2014-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","ERBB2\taqgx5yiY4na1\tGENE\tG_Vyif7SpoW2\t584\t98\t","NRAS\tAbEoLGCY4sp9\tGENE\tydhBmSAbpTKc\t476\t183\t","TSC2\tUD1lE2yO48n8\tGENE\t2_7tyoaRphSY\t503\t496\t","PIK3CA\ts5486n5gpU_K\tGENE\t-1\t658\t184\t","PTEN\ttiSgM3o0pX_z\tGENE\t-1\t860\t184\t","FGFR3\t5yUJdgCL4naU\tGENE\tG_Vyif7SpoW2\t272\t98\t","Survival\tt8b0oOIypis0\tPROCESS\t-1\t791\t584\t","HRAS\tLtxngbVT4spa\tGENE\tydhBmSAbpTKc\t322\t183\t","RAS\tG_Vyif7SpoW2\tFAMILY\t-1\t506\t98\t","STK11\t8wk4zb43pfsu\tGENE\t-1\t317\t469\t","INPP4B\tlGy7ILYwpZag\tGENE\t-1\t804\t266\t","MTOR\tVyT8z_EcpexB\tGENE\t-1\t722\t470\t","TSC\t2_7tyoaRphSY\tFAMILY\t-1\t503\t470\t","Proliferation\t1PYLl_CZpjUH\tPROCESS\t-1\t665\t584\t","EGFR\tMO1TWgRb4nbC\tGENE\tG_Vyif7SpoW2\t429\t98\t","RAS\tydhBmSAbpTKc\tFAMILY\t-1\t399\t183\t","AKT\tEuvUiqD6pbqL\tGENE\t-1\t659\t349\t","TSC1\tlj3YtBzu48oT\tGENE\t2_7tyoaRphSY\t503\t444\t","ERBB3\tSUuAzaJ-4nar\tGENE\tG_Vyif7SpoW2\t739\t98\t","NF1\tevdrZPc3pW-g\tGENE\t-1\t399\t270\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","arJi2bQrqEdS\tevdrZPc3pW-g\tydhBmSAbpTKc\tINHIBITS","F1IgAgZPppxS\tG_Vyif7SpoW2\tydhBmSAbpTKc\tACTIVATES","OqD_HmKHqQIw\tEuvUiqD6pbqL\t2_7tyoaRphSY\tINHIBITS","PY7KfKiCqL9D\tlGy7ILYwpZag\ts5486n5gpU_K\tINHIBITS","0PkuH29SqKeN\ttiSgM3o0pX_z\ts5486n5gpU_K\tINHIBITS","zNMzC5CMqORJ\ts5486n5gpU_K\tEuvUiqD6pbqL\tACTIVATES","UB7BIf_SqRqo\t2_7tyoaRphSY\tVyT8z_EcpexB\tINHIBITS","OQI-iqX2qTLl\t8wk4zb43pfsu\t2_7tyoaRphSY\tACTIVATES","9Vm-zOAgqGbc\tydhBmSAbpTKc\ts5486n5gpU_K\tACTIVATES","uN421vA1qaeA\tVyT8z_EcpexB\tt8b0oOIypis0\tACTIVATES","ZTgU7FgfqZmN\tVyT8z_EcpexB\t1PYLl_CZpjUH\tACTIVATES"],"BLCA-2014-TP53-RB-pathway":["BLCA-2014-TP53-RB-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","Cell cycle progression\tok7nDiB9oQJI\tPROCESS\t-1\t414\t436\t","CCNE1\thm8HJrbqoWfo\tGENE\t-1\t414\t353\t","TP53\tJYRUofjRoSmI\tGENE\t-1\t605\t179\t","MDM2\t2XKi6b0joGD_\tGENE\t-1\t413\t179\t","E2F3\tmz71J5tHoOtX\tGENE\t-1\t219\t436\t","Apoptosis\t4-9gyc8LoX1s\tPROCESS\t-1\t689\t264\t","CDKN2A\t9A-DhP0-oFUi\tGENE\t-1\t219\t179\t","CCND1\tCsMIDjOQoHLw\tGENE\t-1\t219\t264\t","FBXW7\tmULNbFKfoZFg\tGENE\t-1\t625\t353\t","ATM\tjsI1OPG9oTvl\tGENE\t-1\t605\t85\t","CDKN1A\tmBClqwIZoU7d\tGENE\t-1\t526\t264\t","RB1\t-ACCNJRfoNBI\tFAMILY\t-1\t219\t353\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","B1RLlLrEo4cn\tmz71J5tHoOtX\tok7nDiB9oQJI\tACTIVATES","As7hIoBSo17y\tCsMIDjOQoHLw\t-ACCNJRfoNBI\tINHIBITS","mjgKjVX6ow0m\t2XKi6b0joGD_\tJYRUofjRoSmI\tINHIBITS","5BaXTZDuo7H8\tmULNbFKfoZFg\thm8HJrbqoWfo\tINHIBITS","PMdhVppIoyDR\tJYRUofjRoSmI\tmBClqwIZoU7d\tACTIVATES","w2p9WUJxo22X\t-ACCNJRfoNBI\tmz71J5tHoOtX\tINHIBITS","0hmD92TIo0ux\t9A-DhP0-oFUi\tCsMIDjOQoHLw\tINHIBITS","RfMPHF4FouzT\tjsI1OPG9oTvl\tJYRUofjRoSmI\tACTIVATES","toSMm4K7owET\tJYRUofjRoSmI\t2XKi6b0joGD_\tACTIVATES","LPb5J4Quo8EC\tmBClqwIZoU7d\thm8HJrbqoWfo\tINHIBITS","_PGdKZ50o5vL\thm8HJrbqoWfo\t-ACCNJRfoNBI\tINHIBITS","Vcmxazyaoz8N\t9A-DhP0-oFUi\t2XKi6b0joGD_\tINHIBITS","sABkuA1_oywi\tJYRUofjRoSmI\t4-9gyc8LoX1s\tACTIVATES"],"BRCA-2012-Cell-cycle-signaling-pathway":["BRCA-2012-Cell-cycle-signaling-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","BRCA2\tVHmofL2iBtHB\tGENE\t9ZypvHQTebqG\t302\t521\t","p53/p21\tK8vhHZlJewmz\tPROCESS\t-1\t16\t368\t","Cell-cycle arrest\trsfgLtPJBro0\tPROCESS\tPve6lcOCerP2\t518\t505\t","BRCA1\tPqa6yIQ4BtGs\tGENE\t9ZypvHQTebqG\t145\t521\t","ATM\tTQqdq6ZHdybO\tGENE\t-1\t-54\t427\t","S/G2/M checkpoints\teokFGf8gBroW\tPROCESS\tPve6lcOCerP2\t518\t452\t","S-phase entry\tplt5oIp7Broo\tPROCESS\tPve6lcOCerP2\t518\t401\t","Cell cycle\tPve6lcOCerP2\tFAMILY\t-1\t518\t453\t","RB1\tCequZQzRd8SZ\tGENE\t-1\t321\t329\t","BRCA\t9ZypvHQTebqG\tFAMILY\t-1\t223\t521\t","CCNE1\tglg_i-QQdz9z\tGENE\t-1\t133\t329\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","GjwkZT93eu2S\tCequZQzRd8SZ\tPve6lcOCerP2\tACTIVATES","vbkfiLK9etui\t9ZypvHQTebqG\tPve6lcOCerP2\tACTIVATES","dQvMCZFxeWIc\tglg_i-QQdz9z\tCequZQzRd8SZ\tINHIBITS","OyM7Rh_ueTR2\tTQqdq6ZHdybO\tglg_i-QQdz9z\tINHIBITS","fcvz9ztueiRb\tTQqdq6ZHdybO\t9ZypvHQTebqG\tACTIVATES"],"BRCA-2012-RTK-RAS-PI(3)K-pathway":["BRCA-2012-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","PIK3R1\tLTI-_zA12M8_\tGENE\tQl_rV6PWbR4f\t561\t293\t","MAP3K1\tV2U7rAinbMri\tGENE\t-1\t803\t220\t","IKBKB\tv5be8J7cbT7P\tGENE\t-1\t812\t416\t","AKT1\t2eyyNjOs2P7t\tGENE\tb8_iWiV3bSnI\t738\t293\t","PI3K\tQl_rV6PWbR4f\tFAMILY\t-1\t481\t293\t","NF-kB\tf-dza7Cyd34R\tPROCESS\t-1\t940\t406\t","PTEN\tvmp2PR9WbESK\tGENE\t-1\t480\t218\t","Proliferation\tQgBC5rX5baS9\tPROCESS\t-1\t1277\t416\t","MAP2K4\thDh8Gi4cbOJg\tGENE\t-1\t1075\t220\t","ERBB2\tkuccSffw2Nzs\tGENE\tTi_1UFukcA6d\t205\t220\t","PIK3CA\tj3qYklwW2M9a\tGENE\tQl_rV6PWbR4f\t402\t293\t","AKT3\tpH6LKha-2P8C\tGENE\tb8_iWiV3bSnI\t897\t293\t","PAK1\tVjIN5hOKbQmQ\tGENE\t-1\t480\t416\t","AKT\tb8_iWiV3bSnI\tFAMILY\t-1\t818\t293\t","CCND1\tPKgbIo4AbVyY\tGENE\t-1\t1084\t416\t","RTK\tTi_1UFukcA6d\tFAMILY\t-1\t205\t292\t","JNK/JUN Mediated Apoptosis\t-MmWzJ2DbXrO\tPROCESS\t-1\t1300\t211\t","IGF1R\tL4qe8zf82Nz8\tGENE\tTi_1UFukcA6d\t205\t293\t","EGFR\tq9k-_XR32Nze\tGENE\tTi_1UFukcA6d\t205\t364\t","Evading apoptosis\tg1G4oW6RbY6F\tPROCESS\t-1\t1274\t293\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","fhs_9IT6cUqw\tb8_iWiV3bSnI\tg1G4oW6RbY6F\tACTIVATES","teIhB-fucGLJ\tVjIN5hOKbQmQ\tb8_iWiV3bSnI\tACTIVATES","huxShVp3cIQO\tQl_rV6PWbR4f\tb8_iWiV3bSnI\tACTIVATES","WtHX5Q0hcXDM\tPKgbIo4AbVyY\tQgBC5rX5baS9\tACTIVATES","wAq3PQHjcaoH\tb8_iWiV3bSnI\tv5be8J7cbT7P\tACTIVATES","HE2KQFFscPqE\thDh8Gi4cbOJg\tPKgbIo4AbVyY\tACTIVATES","kzZuvBjdcQut\tPKgbIo4AbVyY\thDh8Gi4cbOJg\tINHIBITS","R6qp66fdcDsp\tTi_1UFukcA6d\tQl_rV6PWbR4f\tACTIVATES","8xgflgJ1cSju\tv5be8J7cbT7P\tPKgbIo4AbVyY\tACTIVATES","i-Pphq4BcWBa\tb8_iWiV3bSnI\tQgBC5rX5baS9\tACTIVATES","4s_OHeX4cTjW\thDh8Gi4cbOJg\t-MmWzJ2DbXrO\tACTIVATES","fegnTqNPcJpy\tV2U7rAinbMri\thDh8Gi4cbOJg\tACTIVATES","tj1nKgy9cExZ\tvmp2PR9WbESK\tQl_rV6PWbR4f\tINHIBITS"],"BRCA-2012-TP53-pathway":["BRCA-2012-TP53-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","TP53\tAtC08ZQJc2KU\tGENE\t-1\t491\t349\t","Apoptosis\toHj1iu9Nc3_k\tPROCESS\t-1\t491\t453\t","MDM4\teUAyFKEv_rSt\tGENE\tY4IgKFahc81t\t690\t375\t","MDM2\tEDekyeJO_rSa\tGENE\tY4IgKFahc81t\t690\t319\t","AKT1\tnWtQqBkt_evA\tGENE\t-1\t491\t245\t","CHEK2\tEZw1mFjYc0Pb\tGENE\t-1\t300\t350\t","MDM\tY4IgKFahc81t\tFAMILY\t-1\t690\t347\t","ATM\tDEtr5Wpj_eup\tGENE\t-1\t300\t245\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","EQR_Azwj_evL\tDEtr5Wpj_eup\tEZw1mFjYc0Pb\tACTIVATES","sV9ZEeJ9dMg3\tY4IgKFahc81t\tAtC08ZQJc2KU\tINHIBITS","kudrU-U-_evP\tnWtQqBkt_evA\tAtC08ZQJc2KU\tINHIBITS","hxwMi4kydOBT\tAtC08ZQJc2KU\toHj1iu9Nc3_k\tACTIVATES","uh5qfjUjdKB7\tEZw1mFjYc0Pb\tAtC08ZQJc2KU\tACTIVATES"],"Cell Cycle":["Cell Cycle","","Regulation of mitotic cell cycle progression involving a signaling cascade of cyclins and cyclin-dependent kinases as well as a number of regulatory checkpoints.","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","MDM2\txPwjUPwi3Y86\tGENE\t-1\t413\t179","CDKN1A\tFQbPaPlV3Y9Q\tGENE\t-1\t526\t264","FBXW7\t_Honmyd33Y9K\tGENE\t-1\t625\t353","CCND1\tKf3hsGsT3Y9F\tGENE\t-1\t219\t264","Cell cycle progression\tyazwmMvz3Y8y\tPROCESS\t-1\t414\t436","CCNE1\t4-ZVTw8b3Y81\tGENE\t-1\t414\t353","Apoptosis\tSwnDUEnB3Y8_\tPROCESS\t-1\t689\t264","RB1\tAFGazwPj3Y9U\tFAMILY\t-1\t219\t353","E2F3\tb7YoPaEx3Y88\tGENE\t-1\t219\t436","CDKN2A\tE6EgzvEy3Y9C\tGENE\t-1\t219\t179","TP53\tmIL53nP63Y83\tGENE\t-1\t605\t179","ATM\t4fc8CUod3Y9N\tGENE\t-1\t605\t85","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPEINTERACTION_PUBMED_ID","3H557euy3Y9b\t_Honmyd33Y9K\t4-ZVTw8b3Y81\tINHIBITS\t","rC-lNx0W3Y9d\tAFGazwPj3Y9U\tb7YoPaEx3Y88\tINHIBITS\t","Qm2ZEnCl3Y9Z\tKf3hsGsT3Y9F\tAFGazwPj3Y9U\tINHIBITS\t","pPO3_YVM3Y9e\tE6EgzvEy3Y9C\tKf3hsGsT3Y9F\tINHIBITS\t","pGNnucwd3Y9g\tmIL53nP63Y83\txPwjUPwi3Y86\tACTIVATES\t","ygTYWu2k3Y9k\tE6EgzvEy3Y9C\txPwjUPwi3Y86\tINHIBITS\t","tq-BTuks3Y9i\tFQbPaPlV3Y9Q\t4-ZVTw8b3Y81\tINHIBITS\t","HPSR11Er3Y9b\tmIL53nP63Y83\tFQbPaPlV3Y9Q\tACTIVATES\t","h7AyF28j3Y9n\tmIL53nP63Y83\tSwnDUEnB3Y8_\tACTIVATES\t","vYHEvpqL3Y9f\t4fc8CUod3Y9N\tmIL53nP63Y83\tACTIVATES\t","4ELiZPT23Y9j\t4-ZVTw8b3Y81\tAFGazwPj3Y9U\tINHIBITS\t","jDEpTZhK3Y9X\tb7YoPaEx3Y88\tyazwmMvz3Y8y\tACTIVATES\t","_gVnliZV3Y9a\txPwjUPwi3Y86\tmIL53nP63Y83\tINHIBITS\t"],"COADREAD-2012-RTK-RAS-PI(3)K-pathway":["COADREAD-2012-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","IRS2\tZvdL-fZM3WuZ\tGENE\t-1\t189\t452\t","PIK3CA\tMBUXnNN2z5Dt\tGENE\taDGGPsUl3doC\t189\t525\t","KRAS\trKR_2SY2z0N3\tGENE\tD6EmJIZx6Gzg\t555\t462\t","ERBB2\tStF--npjzyS_\tGENE\tjs1qiakd6GP4\t404\t298\t","IGF2\tWv-EmNFT15yN\tGENE\t-1\t189\t298\t","PI3K\taDGGPsUl3doC\tFAMILY\t-1\t110\t526\t","BRAF\tPUJ8AKki53pG\tGENE\t-1\t479\t549\t","NRAS\t8s1jKwvjz0Nm\tGENE\tD6EmJIZx6Gzg\t406\t462\t","Cell survival\t1UmcnGh24P6f\tPROCESS\t-1\t323\t697\t","ERBB3\tdg3Vl9qGzyTZ\tGENE\tjs1qiakd6GP4\t556\t300\t","IGF1R\tcYzz8jlS2HaK\tGENE\t-1\t189\t380\t","RAS\tD6EmJIZx6Gzg\tFAMILY\t-1\t480\t462\t","PIK3R1\to9hOOpRM0I1T\tGENE\taDGGPsUl3doC\t32\t527\t","RTK\tjs1qiakd6GP4\tFAMILY\t-1\t480\t299\t","Translation\tRmlBMHs64SgD\tPROCESS\t-1\t478\t696\t","Proliferation\trlRx40Am4Oyw\tPROCESS\t-1\t164\t697\t","PTEN\ttSZugv-P3gVw\tGENE\t-1\t29\t452\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","6Shu_O4w4GqO\tcYzz8jlS2HaK\tZvdL-fZM3WuZ\tACTIVATES","kgTzvfUL0djR\tMBUXnNN2z5Dt\tRmlBMHs64SgD\tNONE","LrWZyqWL6OUk\tD6EmJIZx6Gzg\tPUJ8AKki53pG\tACTIVATES","MIyPv49C6PmS\tPUJ8AKki53pG\trlRx40Am4Oyw\tACTIVATES","6nSDsRMc6QPJ\tPUJ8AKki53pG\t1UmcnGh24P6f\tACTIVATES","AQSQDQcZ0XWo\tZvdL-fZM3WuZ\tMBUXnNN2z5Dt\tACTIVATES","ZfrWje290c1T\tMBUXnNN2z5Dt\t1UmcnGh24P6f\tACTIVATES","_hzFGzTL6RE2\tPUJ8AKki53pG\tRmlBMHs64SgD\tACTIVATES","bp_I0EHv0cD4\tMBUXnNN2z5Dt\trlRx40Am4Oyw\tACTIVATES","PQG4E-ga6Mza\tjs1qiakd6GP4\tD6EmJIZx6Gzg\tACTIVATES","NKPl8Kdr0I1e\to9hOOpRM0I1T\tMBUXnNN2z5Dt\tINHIBITS","OoqtDBRI0V5J\ttSZugv-P3gVw\tMBUXnNN2z5Dt\tINHIBITS","Vqm7Wl0M4AE0\tWv-EmNFT15yN\tcYzz8jlS2HaK\tACTIVATES","09Csuz540e3h\tMBUXnNN2z5Dt\tRmlBMHs64SgD\tACTIVATES"],"COADREAD-2012-TGF-B-signaling-pathway":["COADREAD-2012-TGF-B-signaling-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","TGF-B\tnTPdmpNKy_zW\tGENE\t-1\t-38\t-358\t","ACVR2A\t4qJ5NXmkEupe\tGENE\tRckLIrYUzEOc\t278\t-262\t","TGFBR2\t7GmKbJadEtyf\tGENE\t5i_MJPAPzCI1\t44\t-262\t","ACTIVIN\tZc2sWHBVzArX\tGENE\t-1\t360\t-358\t","ACVR2A-ACVR1B\tRckLIrYUzEOc\tCOMPARTMENT\t-1\t360\t-262\t","SMAD\t7j1T7wlqzcoy\tFAMILY\t-1\t158\t-86\t","SMAD2\tEgBC5uQzE1qC\tGENE\t7j1T7wlqzcoy\t82\t-117\t","SMAD4\tQuKCy3EaE1pk\tGENE\t7j1T7wlqzcoy\t160\t-55\t","MYC\tBIYl4Hkdzdoj\tGENE\t-1\t-65\t74\t","TGFBR1-TGFBR2\t5i_MJPAPzCI1\tCOMPARTMENT\t-1\t-38\t-262\t","TGFBR1\tjQFRXXNIEtyK\tGENE\t5i_MJPAPzCI1\t-121\t-262\t","ACVR1B\tRSw1VMOMEupS\tGENE\tRckLIrYUzEOc\t443\t-262\t","SMAD3\tx-JW3Hq6E1qN\tGENE\t7j1T7wlqzcoy\t235\t-117\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","2jvzewjJ0UDH\t5i_MJPAPzCI1\t7j1T7wlqzcoy\tACTIVATES","X5m06a6REtyq\tjQFRXXNIEtyK\t7GmKbJadEtyf\tBINDS","76dv_Epi0O5A\tnTPdmpNKy_zW\t5i_MJPAPzCI1\tACTIVATES","RBUTTCdV0RK3\tZc2sWHBVzArX\tRckLIrYUzEOc\tACTIVATES","4m5j1DYC0VIG\tRckLIrYUzEOc\t7j1T7wlqzcoy\tACTIVATES","aVez8qmz0X7C\t7j1T7wlqzcoy\tBIYl4Hkdzdoj\tINHIBITS","dMNeGuPcEupl\t4qJ5NXmkEupe\tRSw1VMOMEupS\tBINDS"],"COADREAD-2012-TP53-pathway":["COADREAD-2012-TP53-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","Proliferation\tFD2DCZc_8Eck\tPROCESS\t-1\t569\t199\t","TP53\t2LzUgOci77hf\tGENE\t-1\t386\t239\t","DNA replication stress\teArivqeT78y7\tPROCESS\t-1\t204\t145\t","ATM\tB4xPctkP764L\tGENE\t-1\t386\t145\t","Oncogenic stress\tR-scgH-q793l\tPROCESS\t-1\t204\t239\t","Cell survival\tltgdAJkI8Hs-\tPROCESS\t-1\t569\t266\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","igOuMrr-QXvV\tR-scgH-q793l\t2LzUgOci77hf\tACTIVATES","WlE3wQIvQdms\t2LzUgOci77hf\tltgdAJkI8Hs-\tINHIBITS","nfX2BMaKQcgf\t2LzUgOci77hf\tFD2DCZc_8Eck\tINHIBITS","gVpKeF6ZQW1o\teArivqeT78y7\tB4xPctkP764L\tACTIVATES","KXWREHzWQaXR\tB4xPctkP764L\t2LzUgOci77hf\tACTIVATES"],"COADREAD-2012-WNT-signaling-pathway":["COADREAD-2012-WNT-signaling-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","Proliferation, stem/progenitor phenotype\tbl6HjsSUV6cV\tPROCESS\t-1\t1030\t629\t","DKK3\tGFrq4NgHEGRM\tGENE\tg331vTgZWK6e\t255\t154\t","TCF7L2\tfah7MVZYUjS9\tGENE\t-1\t462\t456\t","DKK\tg331vTgZWK6e\tFAMILY\t-1\t333\t125\t","TCF7\t6tzFiifNEEEJ\tGENE\t61GfHXD5WEXh\t682\t571\t","DKK4\tRAXuusnwEGQo\tGENE\tg331vTgZWK6e\t411\t154\t","CTNNB1\tEmU8OBXdUMCO\tGENE\t-1\t682\t392\t","DKK1\tUE5vCnmWEGQ6\tGENE\tg331vTgZWK6e\t255\t96\t","CTNNB1-TCF7\t61GfHXD5WEXh\tCOMPARTMENT\t-1\t682\t539\t","AXIN2\tH8L_66uLUHPT\tGENE\t-1\t682\t312\t","FAM123B\tXwg-_Y4_UGRt\tGENE\t-1\t525\t312\t","APC\txIqHk3KBUIjc\tGENE\t-1\t838\t312\t","ARID1A\th0U_424iUWu5\tGENE\t-1\t1030\t456\t","CTNNB1\tKZpYtS9vEEEm\tGENE\t61GfHXD5WEXh\t682\t507\t","FZD10\tP1FIiIlqEFL_\tGENE\tT5QZmrnYWA-N\t762\t199\t","LRP5\twGjsVLW4EFLn\tGENE\tT5QZmrnYWA-N\t600\t199\t","WNT\tcFdN3nQcTwwO\tGENE\t-1\t682\t47\t","MYC\t4hScAPjlUSym\tGENE\t-1\t1030\t535\t","DKK2\tzOVzq_6jEGRb\tGENE\tg331vTgZWK6e\t411\t96\t","LRP5-FZD10\tT5QZmrnYWA-N\tCOMPARTMENT\t-1\t681\t199\t","FBXW7\tbXlgw4GKUVh3\tGENE\t-1\t862\t456\t","SOX9\tPOzVx5kyURM7\tGENE\t-1\t459\t550\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","j9mmGRLjHKlo\tEmU8OBXdUMCO\t61GfHXD5WEXh\tACTIVATES","f_sY8_lUHUPL\t61GfHXD5WEXh\t4hScAPjlUSym\tINDUCES","esOZ1gJeWfDK\tT5QZmrnYWA-N\txIqHk3KBUIjc\tINHIBITS","ADfnqwAaHX4H\t4hScAPjlUSym\tbl6HjsSUV6cV\tACTIVATES","42Liap6TWjUw\txIqHk3KBUIjc\tEmU8OBXdUMCO\tINHIBITS","Gi2m7VhSWdIe\tT5QZmrnYWA-N\tXwg-_Y4_UGRt\tINHIBITS","hDuqU9RREFMQ\twGjsVLW4EFLn\tP1FIiIlqEFL_\tBINDS","6Rn05rJaWhts\tXwg-_Y4_UGRt\tEmU8OBXdUMCO\tINHIBITS","Rmg0swQ7HQ4z\t61GfHXD5WEXh\tPOzVx5kyURM7\tREPRESSES","dYBVjbKCWM3N\tg331vTgZWK6e\tT5QZmrnYWA-N\tINHIBITS","Z4VdiqohHMM_\tfah7MVZYUjS9\t61GfHXD5WEXh\tINHIBITS","p11d6T2rHOIN\tbXlgw4GKUVh3\t61GfHXD5WEXh\tINHIBITS","l1NcyeMdWigH\tH8L_66uLUHPT\tEmU8OBXdUMCO\tINHIBITS","cdUCacfNHR1f\tPOzVx5kyURM7\t61GfHXD5WEXh\tINHIBITS","IlOH9qIEHVc_\tbXlgw4GKUVh3\t4hScAPjlUSym\tINHIBITS","kvbDlRZ2EEEx\tKZpYtS9vEEEm\t6tzFiifNEEEJ\tBINDS","MUhUjbP3Wa2w\tg331vTgZWK6e\tcFdN3nQcTwwO\tINHIBITS","2OZGWP_oWeBV\tT5QZmrnYWA-N\tH8L_66uLUHPT\tINHIBITS","_xkBTQ9sHWYw\th0U_424iUWu5\t4hScAPjlUSym\tREPRESSES","Af3sU0_EWJva\tcFdN3nQcTwwO\tT5QZmrnYWA-N\tACTIVATES"],"ESAD-2017-Cell-cycle-pathway":["ESAD-2017-Cell-cycle-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","CDKN2A\t0b0592b4-4330-47c9-9a88-7d8c7940a680\tGENE\t-1\t219\t205\t","CYCLINS\tbfd14661-8f74-45d0-aec4-eff4de124c14\tFAMILY\t-1\t612\t205\t","RB1\t362e59dd-fb26-4d70-8a5e-357b38ed5e4b\tGENE\t-1\t986\t205\t","CCNE1\t65337ed5-11c6-4a91-a177-14c9c0fb42df\tGENE\tbfd14661-8f74-45d0-aec4-eff4de124c14\t454\t205\t","CCND1\ta3661efd-abce-474e-ab02-f2eb355d2487\tGENE\tbfd14661-8f74-45d0-aec4-eff4de124c14\t613\t205\t","CDK6\t4ad57397-dfc1-4efc-91fa-be799f5b885d\tGENE\tbfd14661-8f74-45d0-aec4-eff4de124c14\t770\t205\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","2c47aaf9-8ddc-4097-bc51-716d7dce4cb9\tbfd14661-8f74-45d0-aec4-eff4de124c14\t362e59dd-fb26-4d70-8a5e-357b38ed5e4b\tINHIBITS","67638113-dece-48c9-8982-3e420e681508\t0b0592b4-4330-47c9-9a88-7d8c7940a680\tbfd14661-8f74-45d0-aec4-eff4de124c14\tINHIBITS"],"ESAD-2017-RTK-RAS-PI(3)K-pathway":["ESAD-2017-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","PIK3R1\t51f0d970-2e2b-47e2-90bd-0d0d881d70ed\tGENE\t-1\t1056\t335\t","PTEN\t8214d1b9-75ba-4fbb-86d2-fe45dd392767\tGENE\t-1\t778\t335\t","PIK3CA\t49a250be-042c-4910-9774-802dfb0e08f3\tGENE\t-1\t918\t227\t","KRAS\tbea46283-55f2-4650-acee-58d23d8c11fc\tGENE\t-1\t358\t227\t","MYC\tb33f6617-57e5-4e3a-bd28-6ff114d96321\tGENE\t-1\t1256\t227\t","RTK\td76b7fd4-b8f5-4e92-b2ce-b783fe58b9f2\tFAMILY\t-1\t673\t130\t","MET\t82180331-e6f8-4487-9c6c-1c898cb05cf1\tGENE\td76b7fd4-b8f5-4e92-b2ce-b783fe58b9f2\t595\t130\t","IGF1R\te7741571-a281-4b1d-ab5f-1e6d22cd3cf7\tGENE\td76b7fd4-b8f5-4e92-b2ce-b783fe58b9f2\t754\t130\t","RTK\t230ace17-b770-4cc8-8d00-55c2a2075c3e\tFAMILY\td76b7fd4-b8f5-4e92-b2ce-b783fe58b9f2\t1075\t130\t","FGFR1\tfb4252b0-5bfd-495d-99bc-c7143789403c\tGENE\td76b7fd4-b8f5-4e92-b2ce-b783fe58b9f2\t914\t130\t","ERBB2\t0c2d7f5d-9da8-4a3c-bf55-53976781fa86\tGENE\td76b7fd4-b8f5-4e92-b2ce-b783fe58b9f2\t271\t130\t","EGFR\t34b79c41-bc49-4c8e-b5f7-ddad188915bb\tGENE\td76b7fd4-b8f5-4e92-b2ce-b783fe58b9f2\t434\t130\t","FGFR2\t91dd9bca-e153-4016-8c4a-0dbb7e12d024\tGENE\td76b7fd4-b8f5-4e92-b2ce-b783fe58b9f2\t1075\t130\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","0738d86a-d46d-4a8f-b3f4-b96baba1bfa1\t49a250be-042c-4910-9774-802dfb0e08f3\tb33f6617-57e5-4e3a-bd28-6ff114d96321\tACTIVATES","625b533f-ac20-4dbf-abdc-2c9fe3cafe97\t51f0d970-2e2b-47e2-90bd-0d0d881d70ed\t49a250be-042c-4910-9774-802dfb0e08f3\tINHIBITS","f687da01-5f2a-4168-b41f-04f0014ab954\t8214d1b9-75ba-4fbb-86d2-fe45dd392767\t49a250be-042c-4910-9774-802dfb0e08f3\tINHIBITS","49ee44ff-b6ff-47f0-81bf-effa2cf34191\t49a250be-042c-4910-9774-802dfb0e08f3\tbea46283-55f2-4650-acee-58d23d8c11fc\tACTIVATES","d1a956b7-db6a-4653-9da4-d0b26357fb5a\tbea46283-55f2-4650-acee-58d23d8c11fc\t49a250be-042c-4910-9774-802dfb0e08f3\tACTIVATES","73b63049-5e6c-4793-8536-86b4ec006b2d\td76b7fd4-b8f5-4e92-b2ce-b783fe58b9f2\t49a250be-042c-4910-9774-802dfb0e08f3\tACTIVATES","49655771-0e8d-42ce-a71e-76d3bc8c742c\td76b7fd4-b8f5-4e92-b2ce-b783fe58b9f2\tbea46283-55f2-4650-acee-58d23d8c11fc\tACTIVATES"],"ESAD-2017-WNT-CTNNB1-pathway":["ESAD-2017-WNT-CTNNB1-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","PTCH1\t623d9d6b-6d32-4a0a-a826-df9b880ca03a\tGENE\t-1\t212\t126\t","APC\t792b8fd9-ae87-4972-8da4-1140378b63e5\tGENE\t-1\t382\t126\t","FBXW7\tfaa556d4-6e8d-456d-b9d0-a4c35873f9a8\tGENE\t-1\t553\t126\t","ARID1A\t1cdc0d84-e27f-44ed-981e-12994fed8711\tGENE\t-1\t731\t126\t","CTNNB1\td6eb299d-a7c3-4c78-b9e7-4808773bb690\tGENE\t-1\t446\t214\t","MYC\tdd894023-67b6-4bcc-baad-a441556f4168\tGENE\t-1\t793\t214\t","PIK3CA\t8009d529-453b-4c3e-b694-7e0070b7f0a5\tGENE\t-1\t793\t303\t","Cell proliferation\td80f3360-7aa0-442a-ae2a-59f0e8379f86\tPROCESS\t-1\t999\t214\t","Embryonic development\t2e65076c-a0ae-47d9-8860-4ba6c1c89e1c\tPROCESS\t-1\t210\t214\t","SMAD\t08936961-1fad-4b39-ada5-839a1864de96\tFAMILY\t-1\t985\t126\t","SMAD2\t0235338c-0433-48b9-87e3-e50923aed67c\tGENE\t08936961-1fad-4b39-ada5-839a1864de96\t901\t126\t","SMAD4\t1b3e587e-ec76-417a-92ef-34976b0f46bd\tGENE\t08936961-1fad-4b39-ada5-839a1864de96\t1070\t126\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","a1155daf-ac03-4bbd-9ae0-0a738ec73d95\t8009d529-453b-4c3e-b694-7e0070b7f0a5\tdd894023-67b6-4bcc-baad-a441556f4168\tACTIVATES","0562cbe7-7462-45c1-bd49-109e7ef97f74\tdd894023-67b6-4bcc-baad-a441556f4168\td80f3360-7aa0-442a-ae2a-59f0e8379f86\tACTIVATES","b7fe88fe-76f0-4f45-b80c-eb9937d3fed0\t623d9d6b-6d32-4a0a-a826-df9b880ca03a\t2e65076c-a0ae-47d9-8860-4ba6c1c89e1c\tINHIBITS","d1682a0d-a521-4f33-8097-a57b695d6fe4\t792b8fd9-ae87-4972-8da4-1140378b63e5\td6eb299d-a7c3-4c78-b9e7-4808773bb690\tINHIBITS","0e07ea0f-7144-42b7-831d-11a660f45ddb\tfaa556d4-6e8d-456d-b9d0-a4c35873f9a8\td6eb299d-a7c3-4c78-b9e7-4808773bb690\tINHIBITS","91b66dea-a6b4-4991-8ac2-184904f361b0\tfaa556d4-6e8d-456d-b9d0-a4c35873f9a8\tdd894023-67b6-4bcc-baad-a441556f4168\tINHIBITS","ba347f10-d89d-47ed-97fc-8eed4454b4ba\td6eb299d-a7c3-4c78-b9e7-4808773bb690\tdd894023-67b6-4bcc-baad-a441556f4168\tACTIVATES","b8423ddf-8f5c-4718-81b4-132ae25ed3e5\t1cdc0d84-e27f-44ed-981e-12994fed8711\tdd894023-67b6-4bcc-baad-a441556f4168\tINHIBITS","a7180fc6-8113-47eb-b090-39d1cc8c5825\t08936961-1fad-4b39-ada5-839a1864de96\tdd894023-67b6-4bcc-baad-a441556f4168\tINHIBITS"],"GBM-2008-Cell-cycle-signaling-pathway":["GBM-2008-Cell-cycle-signaling-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","RB1\t0cQitpJLOoEG\tFAMILY\t-1\t472\t279\t","CYCLINS\tSBGkYw2NOhMr\tFAMILY\t-1\t472\t168\t","G1/S Progression\t0kD7D3DGOtD1\tPROCESS\t-1\t472\t374\t","CCND2\tGrNFDrs1AoNL\tGENE\tSBGkYw2NOhMr\t472\t168\t","CDKN2B\tTbTnj_R5ONS9\tGENE\t-1\t444\t87\t","CDK4\tPs45UaX4AoNo\tGENE\tSBGkYw2NOhMr\t317\t168\t","CDK6\tVnEu6OlPAoNe\tGENE\tSBGkYw2NOhMr\t627\t168\t","CDKN2C\tr8WJLoQLOONy\tGENE\t-1\t625\t87\t","CDKN2A\tcnleYFDsOMzx\tGENE\t-1\t294\t87\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","Rpso-cKyOzoj\tTbTnj_R5ONS9\tSBGkYw2NOhMr\tINHIBITS","3InwuSCoO0br\tr8WJLoQLOONy\tSBGkYw2NOhMr\tINHIBITS","-zXgQSv4Oy04\tcnleYFDsOMzx\tSBGkYw2NOhMr\tINHIBITS","6NO_fL3nO3r4\tSBGkYw2NOhMr\t0cQitpJLOoEG\tINHIBITS","1pimX-ZiO6F6\t0cQitpJLOoEG\t0kD7D3DGOtD1\tINHIBITS"],"GBM-2008-RTK-RAS-PI(3)K-pathway":["GBM-2008-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","PDGFRA\tiD415efHLG3J\tGENE\tIdrkrh8-K31j\t441\t-61\t","RAS\t8XXLbCwXLtrQ\tFAMILY\t-1\t246\t53\t","NF1\tKe7_FRmuLw42\tGENE\t-1\t21\t54\t","RTK\tIdrkrh8-K31j\tFAMILY\t-1\t365\t-61\t","PI(3)K\tuWMSz1XlL2nL\tFAMILY\t-1\t529\t50\t","PTEN\tLOErZTMUL6hc\tGENE\t-1\t721\t50\t","AKT\tsgb8KI1XMIrn\tFAMILY\t-1\t529\t129\t","EGFR\t7T8gHIR6LG2s\tGENE\tIdrkrh8-K31j\t134\t-61\t","FOXO\t1cIfqNkTMN--\tGENE\t-1\t529\t205\t","MET\tXcKqo6xILG3V\tGENE\tIdrkrh8-K31j\t597\t-61\t","ERBB2\tvJOD-MZOLG2-\tGENE\tIdrkrh8-K31j\t287\t-61\t","Proliferation, survival, translation\tk9I_xTrbMS6S\tPROCESS\t-1\t247\t206\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","ApGQ0rEtL1TV\tKe7_FRmuLw42\t8XXLbCwXLtrQ\tINHIBITS","s5CFkxUKL0kl\tIdrkrh8-K31j\t8XXLbCwXLtrQ\tACTIVATES","jrs5QL8rMbv3\t8XXLbCwXLtrQ\tk9I_xTrbMS6S\tACTIVATES","WEpyeQmyMeC8\tsgb8KI1XMIrn\t1cIfqNkTMN--\tINHIBITS","ytXepIulMGGL\tIdrkrh8-K31j\tuWMSz1XlL2nL\tACTIVATES","_g47pqc4MGwz\tLOErZTMUL6hc\tuWMSz1XlL2nL\tINHIBITS","u1UwLh90MdLo\tuWMSz1XlL2nL\tsgb8KI1XMIrn\tACTIVATES"],"GBM-2008-TP53-pathway":["GBM-2008-TP53-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","Activated oncogenes\tx-laQtq0NSZI\tPROCESS\t-1\t724\t57\t","MDM2\tVIrh6R4jNYOQ\tGENE\t-1\t724\t208\t","Apoptosis\tLxZckK4_NmKp\tPROCESS\t-1\t886\t297\t","MDM4\t0z81KeWTNfOj\tGENE\t-1\t886\t234\t","Senescence\tX0XgoUzfNjH-\tPROCESS\t-1\t546\t297\t","CDKN2A\tIXX8d7kuNVHa\tGENE\t-1\t724\t135\t","TP53\t6RLrPg8rNa4o\tGENE\t-1\t724\t297\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","4PNvvSvKNtxu\tIXX8d7kuNVHa\tVIrh6R4jNYOQ\tINHIBITS","gX_WY_rANxtC\tVIrh6R4jNYOQ\t6RLrPg8rNa4o\tINHIBITS","EznJNkeAN1al\t6RLrPg8rNa4o\tX0XgoUzfNjH-\tACTIVATES","kaHvTklZNzas\t0z81KeWTNfOj\t6RLrPg8rNa4o\tINHIBITS","wTOjoJHdNq6N\tx-laQtq0NSZI\tIXX8d7kuNVHa\tACTIVATES","5-9bxAL_N0gO\t6RLrPg8rNa4o\tLxZckK4_NmKp\tACTIVATES"],"GBM-2013-Cell-cycle-signaling-pathway":["GBM-2013-Cell-cycle-signaling-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","CDKN2C\tnFMLgWuEmv0Q\tGENE\t-1\t667\t136\t","CDK4\tszeVZ7Elmxvu\tGENE\t-1\t386\t249\t","CDK6\tWvJWw5HPm0Ab\tGENE\t-1\t694\t249\t","Cyclins\tAvEeR8GgnDvF\tFAMILY\t-1\t541\t249\t","CDKN2A\tWHDg2nj1B2yR\tGENE\t-1\t320\t136\t","Cell cycle control\tKJEq6EA_m3Cj\tPROCESS\t-1\t793\t383\t","CDKN2B\tv1zGJhukB2ym\tGENE\t-1\t470\t136\t","RB1\tNc0stK1rm13Y\tFAMILY\t-1\t541\t383\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","4yIGldfunbSO\tNc0stK1rm13Y\tKJEq6EA_m3Cj\tACTIVATES","aqdBLSknB2zK\tv1zGJhukB2ym\tszeVZ7Elmxvu\tINHIBITS","bxdBRxkfnYu4\tszeVZ7Elmxvu\tNc0stK1rm13Y\tINHIBITS","AQXakgefnZf1\tAvEeR8GgnDvF\tNc0stK1rm13Y\tINHIBITS","bdgYHwINnW4B\tnFMLgWuEmv0Q\tAvEeR8GgnDvF\tINHIBITS","Xslj1XfeB2yz\tWHDg2nj1B2yR\tszeVZ7Elmxvu\tINHIBITS","ve_EiwTjnXrI\tnFMLgWuEmv0Q\tWvJWw5HPm0Ab\tINHIBITS","Q7Uq8jBIB2y5\tWHDg2nj1B2yR\tAvEeR8GgnDvF\tINHIBITS","IL38zL5VB2yv\tWHDg2nj1B2yR\tWvJWw5HPm0Ab\tINHIBITS","6jn1TNkoB2zN\tv1zGJhukB2ym\tAvEeR8GgnDvF\tINHIBITS","BSaYCBi7naes\tWvJWw5HPm0Ab\tNc0stK1rm13Y\tINHIBITS","JZERPNMdnWL9\tnFMLgWuEmv0Q\tszeVZ7Elmxvu\tINHIBITS","n7Nithx-B2zB\tv1zGJhukB2ym\tWvJWw5HPm0Ab\tINHIBITS"],"GBM-2013-RTK-RAS-PI(3)K-pathway":["GBM-2013-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","NF1\tpQ2sq0Chk7o8\tGENE\t-1\t843\t223\t","RAS\tXfDonLT2k9rr\tFAMILY\t-1\t674\t223\t","BRAF\tJKmqofwVk_cd\tGENE\t-1\t674\t334\t","EGFR\tHG7A5p2q4D3f\tGENE\tZvpmFM7llCzi\t331\t113\t","PI3K(3)K\tE0625yTsk46l\tGENE\t-1\t428\t225\t","AKT Pathway\tTTwvf1BelBTM\tPROCESS\t-1\t428\t338\t","MET\tsZJ7Kmrg4D35\tGENE\tZvpmFM7llCzi\t643\t113\t","MAPK Pathway\tdAkBkKN-lAKT\tPROCESS\t-1\t862\t335\t","PTEN\t8kyYeHGHk4NK\tGENE\t-1\t255\t225\t","RTK\tZvpmFM7llCzi\tFAMILY\t-1\t565\t113\t","FGFR\t8z2n3qaU4D3L\tGENE\tZvpmFM7llCzi\t800\t113\t","PDGFRA\t-jXEzRew4D3r\tGENE\tZvpmFM7llCzi\t487\t113\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","f9EmKbzjlk77\tJKmqofwVk_cd\tdAkBkKN-lAKT\tACTIVATES","qj0ZCvR8le5E\t8kyYeHGHk4NK\tE0625yTsk46l\tINHIBITS","4DrueUbLljf-\tE0625yTsk46l\tTTwvf1BelBTM\tACTIVATES","c4Kpa4R5lgcQ\tZvpmFM7llCzi\tXfDonLT2k9rr\tACTIVATES","CEeo6oGYlifg\tXfDonLT2k9rr\tJKmqofwVk_cd\tACTIVATES","zingzci6lhXA\tpQ2sq0Chk7o8\tXfDonLT2k9rr\tINHIBITS","LTVgdZNOld9G\tZvpmFM7llCzi\tE0625yTsk46l\tACTIVATES"],"GBM-2013-TP53-pathway":["GBM-2013-TP53-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","TP53\tux4NOBO4mBSe\tGENE\t-1\t416\t243\t","MDM4\tO3CQIh-OmCOD\tGENE\t-1\t222\t243\t","Senescence/Apoptosis\tTIZhBhfymDVV\tPROCESS\t-1\t416\t355\t","MDM2\tdNRsoLpZmAuu\tGENE\t-1\t416\t133\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","BrX7DMKemS8w\tdNRsoLpZmAuu\tux4NOBO4mBSe\tINHIBITS","jHRb2o3YmTqF\tO3CQIh-OmCOD\tux4NOBO4mBSe\tINHIBITS","MnYnmX_dmV0E\tux4NOBO4mBSe\tTIZhBhfymDVV\tACTIVATES"],"HIPPO":["HIPPO","","Involved in the control of organ size. Central to this pathway is the regulation of the transcription co-activators YAP/TAZ that promote the transcription of genes involved in cell proliferation.","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","HRAS\t7o723KjtxLw3\tGENE\tm8n8vtNexLwr\t322\t183","NF1\tCoRREfZLxLxE\tGENE\t-1\t399\t270","Survival\tPwPgvbNpxLvq\tPROCESS\t-1\t791\t584","RAS\tzoIJL9SXxLvs\tFAMILY\t-1\t505\t98","FGFR3\txdJHuZOJxLvx\tGENE\tzoIJL9SXxLvs\t272\t98","ERBB2\t2TufgUnDxLvu\tGENE\tzoIJL9SXxLvs\t584\t98","TSC2\tPrCzkSRAxLwV\tGENE\tNIuPl9Z4xLwO\t503\t496","PTEN\tsYk-4hLPxLvn\tGENE\t-1\t860\t184","STK11\tlFDvCMmBxLv9\tGENE\t-1\t317\t469","INPP4B\tGLEvKwzFxLwB\tGENE\t-1\t804\t266","MTOR\tICScCD_7xLwH\tGENE\t-1\t722\t470","Proliferation\tuwFqE9I9xLwk\tPROCESS\t-1\t665\t584","RAS\tm8n8vtNexLwr\tFAMILY\t-1\t399\t183","NRAS\tgJxmCdGKxLwx\tGENE\tm8n8vtNexLwr\t476\t183","ERBB3\tMzpcdmxYxLv6\tGENE\tzoIJL9SXxLvs\t739\t98","TSC1\tRWyL5pe9xLwd\tGENE\tNIuPl9Z4xLwO\t503\t444","TSC\tNIuPl9Z4xLwO\tFAMILY\t-1\t503\t470","PIK3CA\tiq8nE1OMxLvj\tGENE\t-1\t658\t184","AKT\tTiUbnalZxLw_\tGENE\t-1\t659\t349","EGFR\t5XuhH2Y3xLv2\tGENE\tzoIJL9SXxLvs\t429\t98","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPEINTERACTION_PUBMED_ID","sFy4CeNZxLxT\tsYk-4hLPxLvn\tiq8nE1OMxLvj\tINHIBITS\t","YpeP_yDkxLxQ\tTiUbnalZxLw_\tNIuPl9Z4xLwO\tINHIBITS\t","t2QHaOQlxLxX\tNIuPl9Z4xLwO\tICScCD_7xLwH\tINHIBITS\t","--0Bl7NmxLxb\tm8n8vtNexLwr\tiq8nE1OMxLvj\tACTIVATES\t","TihuxwDexLxR\tGLEvKwzFxLwB\tiq8nE1OMxLvj\tINHIBITS\t","M4uM8zkMxLxZ\tlFDvCMmBxLv9\tNIuPl9Z4xLwO\tACTIVATES\t","JGhy8m8UxLxN\tzoIJL9SXxLvs\tm8n8vtNexLwr\tACTIVATES\t","rQyUZobSxLxf\tICScCD_7xLwH\tuwFqE9I9xLwk\tACTIVATES\t","t_83aGiOxLxc\tICScCD_7xLwH\tPwPgvbNpxLvq\tACTIVATES\t","1Jm9fDfkxLxV\tiq8nE1OMxLvj\tTiUbnalZxLw_\tACTIVATES\t","J7C0UYeQxLxK\tCoRREfZLxLxE\tm8n8vtNexLwr\tINHIBITS\t"],"HNSC-2015-Apoptosis-pathway":["HNSC-2015-Apoptosis-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","Cell cycle and survival\temPjU9d6DgGP\tPROCESS\t-1\t348\t484\t","TRAF3\tIBsoHlQJDZF8\tGENE\t-1\t530\t285\t","FADD\tDLlGnDdfDTRw\tGENE\t-1\t373\t199\t","TNFR-LTBR\ts0lGLs3rDXus\tCOMPARTMENT\t-1\t452\t106\t","LTBR\tM8fueNVgIWYI\tGENE\ts0lGLs3rDXus\t530\t106\t","Inflammation angiogenesis migration\tyeoJnxV0DfTf\tPROCESS\t-1\t581\t484\t","BIRC2\t54AiNjv7DUd9\tGENE\t-1\t530\t199\t","NF-kB\tVeOlULKnDabs\tGENE\t-1\t455\t382\t","CASP8\tkpwET4bNDYMG\tGENE\t-1\t373\t285\t","TNFR\t1f2UD5ctIWYb\tGENE\ts0lGLs3rDXus\t373\t106\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","lvrnvkjrD9P-\ts0lGLs3rDXus\t54AiNjv7DUd9\tACTIVATES","N_skSg-mECnc\tkpwET4bNDYMG\tVeOlULKnDabs\tINHIBITS","OMDbwzxED_x2\t54AiNjv7DUd9\tkpwET4bNDYMG\tINHIBITS","HH4ug7YuD7Fv\ts0lGLs3rDXus\tDLlGnDdfDTRw\tACTIVATES","f-O5DenwEBjr\t54AiNjv7DUd9\tIBsoHlQJDZF8\tINHIBITS","U1LEKmYqIWYs\t1f2UD5ctIWYb\tM8fueNVgIWYI\tBINDS","hhJPfTk9EHgb\tVeOlULKnDabs\temPjU9d6DgGP\tACTIVATES","h3Fekoz9EAiL\tDLlGnDdfDTRw\tkpwET4bNDYMG\tACTIVATES","Acyl78aaEDXf\tIBsoHlQJDZF8\tVeOlULKnDabs\tINHIBITS","O9oIu8SeEIN_\tVeOlULKnDabs\tyeoJnxV0DfTf\tACTIVATES"],"HNSC-2015-Cell-cycle-signaling-pathway":["HNSC-2015-Cell-cycle-signaling-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","CDKN2A\tprbNZ7N4F2yz\tGENE\t-1\t346\t201\t","Cell cycle and survival\tUF0yWD0cGVp6\tPROCESS\t-1\t859\t466\t","let-7c\t1Fbfq0EnF4FD\tGENE\t-1\t761\t201\t","HRAS\ttR7G7jSMFyKn\tGENE\t-1\t456\t71\t","HPVE\tOUtOuzrFGWsp\tFAMILY\t-1\t347\t333\t","RB1\tKkBOpjMSGBEp\tFAMILY\t-1\t570\t334\t","TP53\tm6QJybSmGSEj\tGENE\t-1\t531\t466\t","MYC\tPu1nPMkoGUcO\tGENE\t-1\t931\t334\t","PIK3CA\tz2FkIMy8FypC\tGENE\t-1\t678\t71\t","CCND1\tS0n0th2eCfb9\tGENE\t-swYow3RF5GO\t570\t171\t","CYCLINS\t-swYow3RF5GO\tFAMILY\t-1\t570\t197\t","E2F1\tBNAC4UcvF_fD\tGENE\t-1\t764\t334\t","HPVE7\t6jlQIfmICrjy\tGENE\tOUtOuzrFGWsp\t347\t360\t","CDK6\tPPI7pGMpCfcQ\tGENE\t-swYow3RF5GO\t570\t224\t","HPVE6\t4bkc06NyCrjd\tGENE\tOUtOuzrFGWsp\t347\t307\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","idn2SG2QHMC0\tBNAC4UcvF_fD\tUF0yWD0cGVp6\tACTIVATES","njhnQe9vCfci\tz2FkIMy8FypC\tS0n0th2eCfb9\tACTIVATES","5CzfV-h-HQkB\tOUtOuzrFGWsp\tm6QJybSmGSEj\tINHIBITS","UpECTCkVHGkl\t1Fbfq0EnF4FD\t-swYow3RF5GO\tINHIBITS","wnpqGTZ4HNFG\tPu1nPMkoGUcO\tUF0yWD0cGVp6\tACTIVATES","WfTDsR48HJ8K\t-swYow3RF5GO\tKkBOpjMSGBEp\tINHIBITS","mHie46k1HIGn\tprbNZ7N4F2yz\t-swYow3RF5GO\tINHIBITS","EJXQGmWDCfcZ\ttR7G7jSMFyKn\tS0n0th2eCfb9\tACTIVATES","naU-KiGLHOkS\tOUtOuzrFGWsp\tKkBOpjMSGBEp\tINHIBITS","lU11XAdWHRyG\tm6QJybSmGSEj\tUF0yWD0cGVp6\tINHIBITS","hgYpZiWwHLEw\tKkBOpjMSGBEp\tBNAC4UcvF_fD\tINHIBITS"],"HNSC-2015-Notch-signaling-pathway":["HNSC-2015-Notch-signaling-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","TP63\t0_tmgKZGEdGo\tGENE\t-1\t290\t306\t","Differentiation\teeVhg40NEiK2\tPROCESS\t-1\t553\t481\t","CTNNB1\tB311fstqEcj1\tGENE\t-1\t485\t306\t","FAT1\tKm28lPDkEe1-\tGENE\t-1\t676\t253\t","AJUBA\txmIHMSMOEfhM\tGENE\t-1\t676\t350\t","NFE2L2\tuBK84iGaEx2k\tGENE\t-1\t835\t108\t","Inflammation angiogenesis migration\tcVmq2gc7EhfK\tPROCESS\t-1\t290\t480\t","NOTCH\tM36IzzXCEbYd\tFAMILY\t-1\t485\t108\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","ICbcotEzE6EA\tKm28lPDkEe1-\tB311fstqEcj1\tINHIBITS","wuF8plb4E1Me\tuBK84iGaEx2k\tM36IzzXCEbYd\tACTIVATES","aGzvs7zSE3y2\t0_tmgKZGEdGo\tM36IzzXCEbYd\tINHIBITS","3EBZZzaxE5Fm\tM36IzzXCEbYd\tB311fstqEcj1\tINHIBITS","_u545Mo9E_ul\t0_tmgKZGEdGo\teeVhg40NEiK2\tINHIBITS","n1ZzhYJJE6z0\txmIHMSMOEfhM\tB311fstqEcj1\tINHIBITS","qJsbtzEME7xA\tB311fstqEcj1\teeVhg40NEiK2\tINHIBITS","qbufdsXRFBiJ\t0_tmgKZGEdGo\tcVmq2gc7EhfK\tACTIVATES","XfMK86WqE21I\tM36IzzXCEbYd\t0_tmgKZGEdGo\tINHIBITS"],"HNSC-2015-Oxidative-stress-response-pathway":["HNSC-2015-Oxidative-stress-response-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","NFE2L2\tgt4I0Om0FTv6\tGENE\t-1\t436\t285\t","KEAP1\tZsX3OXk3FSsm\tGENE\t-1\t529\t167\t","NOTCH\tBvJxfxK3FnBO\tGENE\t-1\t169\t285\t","CUL3\tIcPGDcXRFSKm\tGENE\t-1\t339\t167\t","Oxidative damage\tfVzq-7uHFVEN\tPROCESS\t-1\t436\t413\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","EnpWtdTqFdCy\tIcPGDcXRFSKm\tgt4I0Om0FTv6\tINHIBITS","evdmv52VFpzm\tgt4I0Om0FTv6\tBvJxfxK3FnBO\tACTIVATES","cPEAdB0SFfMR\tgt4I0Om0FTv6\tfVzq-7uHFVEN\tACTIVATES","H-KG07b7Fd8r\tZsX3OXk3FSsm\tgt4I0Om0FTv6\tINHIBITS"],"HNSC-2015-RTK-RAS-PI(3)K-pathway":["HNSC-2015-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","PIK3CA\txi9Q36e2CS_G\tGENE\t-1\t540\t244\t","NF-kB\tOOiOvVaWCyaI\tGENE\t-1\t878\t459\t","HRAS\tCh4RV-nlCR-8\tGENE\t-1\t320\t244\t","IGF1R\tYDvyAEat8pkt\tGENE\tYgFgrMTKCakc\t850\t145\t","ERBB2\to8fELaID8pjp\tGENE\tYgFgrMTKCakc\t385\t145\t","EGFR\tmYeWqovL8pkK\tGENE\tYgFgrMTKCakc\t227\t145\t","RTK\tYgFgrMTKCakc\tFAMILY\t-1\t538\t145\t","FGFR1\ts8sttQyx8pj-\tGENE\tYgFgrMTKCakc\t541\t145\t","PTEN\tWh8DCYlCCT_j\tGENE\t-1\t722\t244\t","CCND1\ts_2ubRksCYIg\tGENE\t-1\t403\t337\t","MYC\tM33a4yWMGH-j\tGENE\t-1\t540\t459\t","FGFR3\t-jbsv2rK8pkb\tGENE\tYgFgrMTKCakc\t696\t145\t","Cell cycle and survival\tNZQP-jwUGJDJ\tPROCESS\t-1\t540\t568\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","Vp8BMTADCsgK\tYgFgrMTKCakc\txi9Q36e2CS_G\tACTIVATES","zMOtnYBFCu5s\txi9Q36e2CS_G\ts_2ubRksCYIg\tACTIVATES","P2bwQGViCuNZ\tCh4RV-nlCR-8\ts_2ubRksCYIg\tACTIVATES","9-cqR59DCtQQ\tWh8DCYlCCT_j\txi9Q36e2CS_G\tINHIBITS","kFlNIRpWC2i-\txi9Q36e2CS_G\tOOiOvVaWCyaI\tACTIVATES","S3jvgVzsGPMY\txi9Q36e2CS_G\tM33a4yWMGH-j\tACTIVATES","GnyxNL7aCqke\tYgFgrMTKCakc\tCh4RV-nlCR-8\tACTIVATES","rrzkeHNUGQDo\tM33a4yWMGH-j\tNZQP-jwUGJDJ\tACTIVATES"],"KIRC-2013-RTK-RAS-PI(3)K-pathway":["KIRC-2013-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","TSC1\tuggsxb8--Aro\tGENE\txqEGjsx0iLFB\t702\t215\t","RHEB\tB86G1W3Bjaf-\tGENE\t-1\t653\t670\t","TSC2\tYkjc8ADw-rzF\tGENE\tkKqxit2Aj0o5\t727\t575\t","4E-BP1\tunH_CS0VjeEN\tGENE\t-1\t755\t833\t","TSC\tkKqxit2Aj0o5\tFAMILY\t-1\t647\t575\t","RHEB\t2laMuTAjiL1w\tGENE\t-1\t891\t255\t","HIF1a\taDLkX3Z9j92r\tGENE\t-1\t755\t918\t","GRB10\tx5Guo0spjf2e\tGENE\t-1\t839\t414\t","MTOR\tMC8l6rXMiOdd\tGENE\t-1\t1074\t255\t","TSC\txqEGjsx0iLFB\tFAMILY\t-1\t702\t249\t","SQSTM1\txQtLvkz9iNc7\tGENE\t-1\t943\t153\t","TSC1\tJ-ydcJGW-rzg\tGENE\tkKqxit2Aj0o5\t568\t575\t","EGFR\tQFhgkr8diB8z\tGENE\t-1\t164\t312\t","PI3K\tbHiksp77jREY\tFAMILY\t-1\t560\t414\t","AKT\t-Wom9AxOiG4E\tGENE\t-1\t528\t255\t","mTORC2\tdbgxtYHIjWfx\tGENE\t-1\t478\t493\t","MiR21\tGmrxvGcKjTyz\tGENE\t-1\t332\t533\t","PIK3CA\tGBWHCv3viEa6\tGENE\t-1\t354\t255\t","IGF1R\tozct1VALiSY1\tGENE\t-1\t165\t216\t","VHL\t0_wT5Rrrj_Rx\tGENE\t-1\t935\t919\t","mTORC1\tcYFqGJE4jcVJ\tGENE\t-1\t653\t750\t","TSC2\tj9ld37Vz-AsM\tGENE\txqEGjsx0iLFB\t702\t283\t","PTEN\tW2_xSgDziDku\tGENE\t-1\t354\t174\t","AKT\t7HbV79PdjsOU\tFAMILY\t-1\t653\t494\t","GNB2L1\tSfiCTcbNiA5M\tGENE\t-1\t88\t112\t","PTEN\twRO7VWWjjSA-\tGENE\t-1\t332\t414\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","OpzjVyUGkJHV\tGmrxvGcKjTyz\twRO7VWWjjSA-\tINHIBITS","18MKxE0wiw13\txqEGjsx0iLFB\t2laMuTAjiL1w\tINHIBITS","G-HTkvEckQ4C\tB86G1W3Bjaf-\tcYFqGJE4jcVJ\tACTIVATES","04k9T_t2itkQ\tW2_xSgDziDku\tGBWHCv3viEa6\tINHIBITS","TqPzh3WykXc5\tunH_CS0VjeEN\tx5Guo0spjf2e\tACTIVATES","S7T11oBFisjk\tQFhgkr8diB8z\tGBWHCv3viEa6\tACTIVATES","ahebq1NykUH5\tunH_CS0VjeEN\taDLkX3Z9j92r\tACTIVATES","6najj9ABkSVJ\tcYFqGJE4jcVJ\tunH_CS0VjeEN\tACTIVATES","qPyUZvk3kMq-\tdbgxtYHIjWfx\t7HbV79PdjsOU\tACTIVATES","qHd1pkOTiy5k\t2laMuTAjiL1w\tMC8l6rXMiOdd\tACTIVATES","aPTPKe-XkVXQ\t0_wT5Rrrj_Rx\taDLkX3Z9j92r\tINHIBITS","8vMP0eF_kPj5\tkKqxit2Aj0o5\tB86G1W3Bjaf-\tINHIBITS","NZt5xBGSkYb0\tx5Guo0spjf2e\tbHiksp77jREY\tINHIBITS","3fJZoOEQkKNq\tbHiksp77jREY\tdbgxtYHIjWfx\tACTIVATES","rAhe36tpix6d\txQtLvkz9iNc7\tMC8l6rXMiOdd\tINDUCES","CAu1f-WdkHx4\twRO7VWWjjSA-\tbHiksp77jREY\tINHIBITS","4vMHKnyOkLIf\tbHiksp77jREY\t7HbV79PdjsOU\tACTIVATES","J7kaij8Aivlh\t-Wom9AxOiG4E\txqEGjsx0iLFB\tINHIBITS","fT5lfcHziqX2\tSfiCTcbNiA5M\tozct1VALiSY1\tINDUCES","_2k1_2B-iri2\tozct1VALiSY1\tGBWHCv3viEa6\tACTIVATES","kxVoCQxViupL\tGBWHCv3viEa6\t-Wom9AxOiG4E\tACTIVATES","7jMvZJMZkN4v\t7HbV79PdjsOU\tkKqxit2Aj0o5\tINHIBITS"],"LUAD-2014-Cell-cycle-signaling-pathway":["LUAD-2014-Cell-cycle-signaling-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","CCND1\tYWcsnrJvCMfJ\tGENE\tEaAZ2J517xuW\t365\t177\t","RB1\t-65hVCUu7wNj\tGENE\t-1\t521\t303\t","CDKN2A\tyiKTF0xl7qs-\tGENE\t-1\t521\t88\t","CYCLINS\tEaAZ2J517xuW\tFAMILY\t-1\t521\t177\t","CDK4\tpYVVzOz7CMfp\tGENE\tEaAZ2J517xuW\t521\t177\t","Cell cycle progression\tSBA7nphX7zI1\tPROCESS\t-1\t521\t400\t","CCNE1\t0FQDESQiCMfb\tGENE\tEaAZ2J517xuW\t676\t177\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","EbOzzWJa8KyF\tEaAZ2J517xuW\t-65hVCUu7wNj\tINHIBITS","eB12pAOW8MCi\t-65hVCUu7wNj\tSBA7nphX7zI1\tACTIVATES","u6mSj8wD8Jp9\tyiKTF0xl7qs-\tEaAZ2J517xuW\tINHIBITS"],"LUAD-2014-Histone-modification-pathway":["LUAD-2014-Histone-modification-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","SETD2\tTEmP07vg8mqu\tGENE\t-1\t678\t182\t","ARID1B\tZC3AHrzf8h-f\tGENE\t-1\t379\t168\t","Histone methylation\toQNlmw1I8ng2\tPROCESS\t-1\t678\t333\t","ARID2\tUWhx7SxC8jmN\tGENE\t-1\t226\t244\t","ARID1A\t0ddAggf58hhA\tGENE\t-1\t226\t168\t","Nucleosome remodeling\tkv9VBnuH8l5E\tPROCESS\t-1\t306\t341\t","SMARCA4\t6xqXYMOE8kSp\tGENE\t-1\t379\t244\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","7D5lYDIi83WM\tZC3AHrzf8h-f\tkv9VBnuH8l5E\tACTIVATES","C0gJJbpq84Fz\t6xqXYMOE8kSp\tkv9VBnuH8l5E\tACTIVATES","_MCNndis82m-\tUWhx7SxC8jmN\tkv9VBnuH8l5E\tACTIVATES","fc6_K-lT85Yv\tTEmP07vg8mqu\toQNlmw1I8ng2\tACTIVATES","PkwUIXyU81xJ\t0ddAggf58hhA\tkv9VBnuH8l5E\tACTIVATES"],"LUAD-2014-Oxidative-stress-response-pathway":["LUAD-2014-Oxidative-stress-response-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","KEAP1\tx6qal2M_6fp6\tGENE\t-1\t292\t147\t","NFE2L2\t3OAnmFLj6kBV\tGENE\t-1\t381\t244\t","CUL3\tax7M8UNp6gH0\tGENE\t-1\t460\t147\t","Oxidative stress response\tqQRuLibB6k26\tPROCESS\t-1\t381\t345\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","puzswCQS65LP\tx6qal2M_6fp6\t3OAnmFLj6kBV\tINHIBITS","ASasYVxW65_T\tax7M8UNp6gH0\t3OAnmFLj6kBV\tINHIBITS","5XC9ZlAR67EJ\t3OAnmFLj6kBV\tqQRuLibB6k26\tINHIBITS"],"LUAD-2014-RTK-RAS-PI(3)K-pathway":["LUAD-2014-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","KRAS\thCWC-xR96DqX\tGENE\t0aa7a88C5GOW\t612\t170\t","EGFR\tR5V3H_6E6eEo\tGENE\tmFXQLvHD4isJ\t304\t68\t","RAS\t0aa7a88C5GOW\tFAMILY\t-1\t690\t202\t","MAP2K1\tcwgYdqrk4hBA\tGENE\t-1\t690\t439\t","PIK3R1\tbqBJhHco4YrE\tGENE\t-1\t149\t251\t","TSC2\tY9HFp8YO-n8e\tGENE\tEXtYcXdy4Qsz\t470\t384\t","Translation\t9M7XTM_-4WR7\tPROCESS\t-1\t781\t637\t","AKT1\t25v4OB1H4IlR\tGENE\t-1\t393\t279\t","STK11\ts7zEz-oY4ag8\tGENE\t-1\t149\t322\t","ALK\tpjtEjnD36eE_\tGENE\tmFXQLvHD4isJ\t773\t68\t","AMPK\tFyui5tkl4cr5\tGENE\t-1\t149\t390\t","NRAS\tnKsKU-PQ6DrJ\tGENE\t0aa7a88C5GOW\t768\t170\t","Proliferation\tecQpjv9Q4Urm\tPROCESS\t-1\t465\t637\t","HRAS\tup6fI0q16Dq0\tGENE\t0aa7a88C5GOW\t612\t233\t","NF1\tQkA8DtgZ4Feb\tGENE\t-1\t988\t207\t","ERBB2\tEXN40CQ46eDV\tGENE\tmFXQLvHD4isJ\t458\t68\t","ROS1\twLhuE7H66eEA\tGENE\tmFXQLvHD4isJ\t1076\t68\t","TSC1\tj4o-n6HA-n8F\tGENE\tEXtYcXdy4Qsz\t316\t384\t","RIT1\ttYpKvL066Dru\tGENE\t0aa7a88C5GOW\t768\t233\t","RET\tds40mB756eC4\tGENE\tmFXQLvHD4isJ\t925\t68\t","PTEN\tua2-F70X4XuC\tGENE\t-1\t149\t178\t","Cell survival\tNmj0_LZZ4VXj\tPROCESS\t-1\t622\t637\t","MTOR\tNCFq_dYD4Py9\tGENE\t-1\t393\t542\t","TSC\tEXtYcXdy4Qsz\tFAMILY\t-1\t393\t384\t","MET\tTXeWKOZB6eDs\tGENE\tmFXQLvHD4isJ\t609\t68\t","BRAF\t8-YqWx2X4f5G\tGENE\t-1\t690\t365\t","PIK3CA\t8Qu-Lwni4HZ-\tGENE\t-1\t393\t178\t","RTK\tmFXQLvHD4isJ\tFAMILY\t-1\t690\t68\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","IBP-n3fS5SVk\tcwgYdqrk4hBA\t9M7XTM_-4WR7\tACTIVATES","gUN_eI4KYtT7\tNCFq_dYD4Py9\tecQpjv9Q4Urm\tACTIVATES","m9Gf2Xzf5WX3\tEXtYcXdy4Qsz\tNCFq_dYD4Py9\tACTIVATES","yqPnLI4M5aT7\tFyui5tkl4cr5\tNCFq_dYD4Py9\tACTIVATES","lIoLBw5O5RdC\tcwgYdqrk4hBA\tNmj0_LZZ4VXj\tACTIVATES","qg8iuvID5Mhz\t0aa7a88C5GOW\t8-YqWx2X4f5G\tACTIVATES","o72iUn2l5c3a\tua2-F70X4XuC\t8Qu-Lwni4HZ-\tINHIBITS","j1x2CWxh5Iy4\tmFXQLvHD4isJ\t0aa7a88C5GOW\tACTIVATES","EuuexlE5Y05b\tNCFq_dYD4Py9\t9M7XTM_-4WR7\tACTIVATES","8Uu5IYEq5KQg\tQkA8DtgZ4Feb\t0aa7a88C5GOW\tINHIBITS","2pXFnqhL5OzR\tcwgYdqrk4hBA\tecQpjv9Q4Urm\tACTIVATES","gE5bPX0c5VDK\t25v4OB1H4IlR\tEXtYcXdy4Qsz\tINHIBITS","HshnmzcdYu-I\tNCFq_dYD4Py9\tNmj0_LZZ4VXj\tACTIVATES","UuK2Sd1m5T5a\t8Qu-Lwni4HZ-\t25v4OB1H4IlR\tACTIVATES","pSaMDCCD5eRf\tbqBJhHco4YrE\t8Qu-Lwni4HZ-\tINHIBITS","6eV4lZbQYv3r\tNCFq_dYD4Py9\tNmj0_LZZ4VXj\tACTIVATES","VFskMcwI5bY7\ts7zEz-oY4ag8\tFyui5tkl4cr5\tACTIVATES","zPkLVdf35NoU\t8-YqWx2X4f5G\tcwgYdqrk4hBA\tACTIVATES"],"LUAD-2014-TP53-pathway":["LUAD-2014-TP53-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","TP53\tCQjbRdgs7ItD\tGENE\t-1\t436\t249\t","Cell survival\tSVkWhzV37N80\tPROCESS\t-1\t510\t348\t","Proliferation\tfz0X8H7D7J7L\tPROCESS\t-1\t342\t347\t","ATM\tgjYBW9Ea7HZc\tGENE\t-1\t510\t151\t","MDM2\tSdbPatXY7HDu\tGENE\t-1\t342\t151\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","npAcARys7a_k\tCQjbRdgs7ItD\tSVkWhzV37N80\tINHIBITS","VGJAIfU07X_O\tSdbPatXY7HDu\tCQjbRdgs7ItD\tINHIBITS","yaRRpgbw7aKj\tCQjbRdgs7ItD\tfz0X8H7D7J7L\tINHIBITS","6yEDoser7Y_S\tgjYBW9Ea7HZc\tCQjbRdgs7ItD\tACTIVATES"],"LUSC-2012-Notch-signaling-pathway":["LUSC-2012-Notch-signaling-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","TP63\tjwpnNGJWSGmo\tGENE\t-1\t665\t118\t","NOTCH1\tuCLr0FZ-DVjI\tGENE\tqDU9qUkVWgQy\t307\t245\t","NOTCH\tqDU9qUkVWgQy\tFAMILY\t-1\t385\t245\t","FOXP1\tOQXnexCbWaQC\tGENE\t-1\t781\t245\t","NOTCH2\t8xqf1lEoDVjf\tGENE\tqDU9qUkVWgQy\t462\t245\t","SOX2\tz9OhKjOpSGPy\tGENE\t-1\t392\t118\t","ASCL4\tB7vcA7ATWYcn\tGENE\t-1\t624\t245\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","PLEAy9rIWrEw\tz9OhKjOpSGPy\tqDU9qUkVWgQy\tINHIBITS","JC1sUBM-WtKp\tz9OhKjOpSGPy\tB7vcA7ATWYcn\tINHIBITS","lP_hmn57Wt5k\tz9OhKjOpSGPy\tOQXnexCbWaQC\tINHIBITS","NJbf1vyhWr_5\tjwpnNGJWSGmo\tqDU9qUkVWgQy\tINHIBITS"],"LUSC-2012-Oxidative-stress-response-pathway":["LUSC-2012-Oxidative-stress-response-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","CUL3\tlReeCCfNRhiB\tGENE\t-1\t567\t154\t","NFE2L2\tb31Gx6nxRij2\tGENE\t-1\t480\t256\t","KEAP1\t74W2ldwARhHq\tGENE\t-1\t381\t154\t","Oxidative stress response\tHZ9RxRrPRkFz\tPROCESS\t-1\t480\t363\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","RQOk_9p-Rv2F\tb31Gx6nxRij2\tHZ9RxRrPRkFz\tACTIVATES","CT9Gtmm5Rqtm\t74W2ldwARhHq\tb31Gx6nxRij2\tINHIBITS","HHBAbZS1Rto5\tlReeCCfNRhiB\tb31Gx6nxRij2\tINHIBITS"],"LUSC-2012-RTK-RAS-PI(3)K-pathway":["LUSC-2012-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","FGFR1\tMvptxoO61bRr\tGENE\tyiHWlSi0ZceY\t1097\t185\t","KRAS\tsWfNqwir1dxE\tGENE\twfQD-GssZd01\t894\t292\t","PTEN\tZymRaEU8XIRY\tGENE\t-1\t188\t185\t","ERBB3\tRm4wq0_z1bQa\tGENE\tyiHWlSi0ZceY\t936\t185\t","Proliferation\tP8EboRv6ZME9\tPROCESS\t-1\t494\t543\t","AMPK\t02umJdNsXOpl\tGENE\t-1\t42\t405\t","RTK\tyiHWlSi0ZceY\tFAMILY\t-1\t1023\t185\t","AKT\toxyofYva1T05\tFAMILY\t-1\t389\t292\t","AKT2\tlarrnE_S1WJv\tGENE\toxyofYva1T05\t389\t292\t","RAS\twfQD-GssZd01\tFAMILY\t-1\t894\t292\t","Translation\tHR4vBeq2ZNsn\tPROCESS\t-1\t798\t543\t","NF1\tiabVj2PwYZp2\tGENE\t-1\t1250\t339\t","FGFR3\t2C2nCxu91bRd\tGENE\tyiHWlSi0ZceY\t1424\t185\t","STK11\tO4y17G4EXLUD\tGENE\t-1\t-49\t300\t","EGFR\tAx89UA0r1bQ9\tGENE\tyiHWlSi0ZceY\t622\t185\t","TSC2\tzY7tgwSJ1XbR\tGENE\tqLC0RZ4XXsZX\t403\t380\t","TSC\tqLC0RZ4XXsZX\tFAMILY\t-1\t324\t380\t","MTOR\t9xgTtYW2XQeX\tGENE\t-1\t147\t480\t","RASA1\tDvdwOn2xYWd3\tGENE\t-1\t1250\t270\t","AKT3\tzzXDUqB91WKC\tGENE\toxyofYva1T05\t546\t292\t","FGFR2\tXUUZCJbJ1bRO\tGENE\tyiHWlSi0ZceY\t1259\t185\t","PI3K\tFq9ew-K6XKj-\tFAMILY\t-1\t383\t185\t","NRAS\tW0krGYlI1dxY\tGENE\twfQD-GssZd01\t1054\t292\t","ERBB2\ttKS__G_N1bQt\tGENE\tyiHWlSi0ZceY\t780\t185\t","AKT1\tO_LJqz4I1WJd\tGENE\toxyofYva1T05\t232\t292\t","HRAS\tXIj4ze_l1dxl\tGENE\twfQD-GssZd01\t734\t292\t","Cell survival\tnNugUqXiZNB6\tPROCESS\t-1\t644\t543\t","BRAF\tT1CL0I79YgGR\tGENE\t-1\t894\t405\t","PIK3CA\tcykG-Tsv1fu4\tGENE\tFq9ew-K6XKj-\t383\t185\t","TSC1\t1paUtI_G1Xbd\tGENE\tqLC0RZ4XXsZX\t245\t380\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","QLi86o6iaTAU\tT1CL0I79YgGR\tnNugUqXiZNB6\tACTIVATES","gB5T8yfp3IU3\t9xgTtYW2XQeX\tHR4vBeq2ZNsn\tACTIVATES","sXH_uS-e1T1m\toxyofYva1T05\tHR4vBeq2ZNsn\tACTIVATES","WUv8Ij4AaR-n\tT1CL0I79YgGR\tP8EboRv6ZME9\tACTIVATES","RCM2k2xJ1T1r\toxyofYva1T05\tqLC0RZ4XXsZX\tINHIBITS","4bGJbkzlaO_3\tDvdwOn2xYWd3\twfQD-GssZd01\tINHIBITS","awuopxpi1T1c\toxyofYva1T05\tP8EboRv6ZME9\tACTIVATES","WURhbp8YX5ol\tO4y17G4EXLUD\t02umJdNsXOpl\tACTIVATES","fTcRATeQaEYa\twfQD-GssZd01\tT1CL0I79YgGR\tACTIVATES","-RCFsGxvaQmo\tiabVj2PwYZp2\twfQD-GssZd01\tINHIBITS","9dW1i3sN3Gtu\t9xgTtYW2XQeX\tP8EboRv6ZME9\tACTIVATES","Uc5AjjxV3HcN\t9xgTtYW2XQeX\tnNugUqXiZNB6\tACTIVATES","vYmJjY8pX14b\tZymRaEU8XIRY\tFq9ew-K6XKj-\tINHIBITS","pzSfIS3bX6g_\t02umJdNsXOpl\t9xgTtYW2XQeX\tACTIVATES","3eElg70UaNdN\tyiHWlSi0ZceY\twfQD-GssZd01\tACTIVATES","-GLnxzAk1T1w\toxyofYva1T05\tnNugUqXiZNB6\tACTIVATES","eDF8oz7ZaT8J\tT1CL0I79YgGR\tHR4vBeq2ZNsn\tACTIVATES","vecmsBiI1T1S\tFq9ew-K6XKj-\toxyofYva1T05\tACTIVATES"],"MYC":["MYC","","Involves a number of transcription regulation complexes: MYC-MAX, MAX-MXD, MAX-MGA, and the energy sensing, MondoA-Mlx complex in the regulation of apoptotic response and cell differentiation.","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","MXD1\tYd6m7-sCeh37\tGENE\tTrTubnzSeh3h\t151\t436","MXD4\tplDFXS0peh30\tGENE\tTrTubnzSeh3h\t488\t436","MXI1\tdNmw_8oVeh3k\tGENE\tTrTubnzSeh3h\t651\t436","MGA\tGt92f6Iyeh3a\tGENE\tLwRHv9NUeh3R\t580\t310","MYC/MAX Complex\tOCJ3wBBPeh4J\tCOMPLEX\t-1\t479\t172","MYC\tKDr5caJdeh4X\tGENE\tOCJ3wBBPeh4J\t313\t172","MYCL\tm1nG2P8zeh4p\tGENE\tOCJ3wBBPeh4J\t645\t173","MLXIPL\t6ZvsmDKBeh3H\tGENE\tIuhA7dyleh3B\t571\t658","MAX/MXD Complex\tTrTubnzSeh3h\tCOMPLEX\t-1\t483\t436","MAX\tyGKkO3Ajeh3V\tGENE\tLwRHv9NUeh3R\t344\t310","MXD3\ta19O0LiCeh3p\tGENE\tTrTubnzSeh3h\t323\t436","MLXIP\tO9V1RuKxeh3K\tGENE\tIuhA7dyleh3B\t395\t656","MLX\teH1TNcCVeh3F\tGENE\tIuhA7dyleh3B\t490\t550","MYCN\tMn3yUjZveh4v\tGENE\tOCJ3wBBPeh4J\t478\t173","MLX/MONDO Complex\tIuhA7dyleh3B\tCOMPLEX\t-1\t483\t604","MNT\tmfvZ3Tqreh3u\tGENE\tTrTubnzSeh3h\t815\t436","MAX/MGA Complex\tLwRHv9NUeh3R\tCOMPLEX\t-1\t462\t310","Cell growth, proliferation, apoptosis\trU4TiKfKeh43\tPROCESS\t-1\t-237\t433","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPEINTERACTION_PUBMED_ID","w4MBdulYeh48\tOCJ3wBBPeh4J\tyGKkO3Ajeh3V\tBINDS\t","kmXInTa9eh5O\t6ZvsmDKBeh3H\teH1TNcCVeh3F\tBINDS\t","Hv8GfgZPeh5T\tyGKkO3Ajeh3V\tGt92f6Iyeh3a\tNONE\t","9h-taWpfeh5Z\tLwRHv9NUeh3R\trU4TiKfKeh43\tINHIBITS\t","eTpDGcg6eh5B\tOCJ3wBBPeh4J\trU4TiKfKeh43\tACTIVATES\t","mfpvepQNeh5c\tTrTubnzSeh3h\tIuhA7dyleh3B\tBINDS\t","QJOD8bddeh5I\tIuhA7dyleh3B\trU4TiKfKeh43\tACTIVATES\t","9ShDYkfTeh5Q\tO9V1RuKxeh3K\teH1TNcCVeh3F\tBINDS\t","Vfrm_1Ezeh5E\tTrTubnzSeh3h\trU4TiKfKeh43\tINHIBITS\t","nrV2aZn8eh5L\tyGKkO3Ajeh3V\tTrTubnzSeh3h\tBINDS\t"],"NOTCH":["NOTCH","","Pathway involved in cell-cell communication, cell fate. Cleavage of Notch receptors leads to the displacement of a transcription repressor complex on RBPJ (a transcription factor also known as CSL) accompanied by recruitment of an activation complex (including MAMLs) leads to transcription of Notch target genes.","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","NRARP\tIyt-kiQdVYR4\tGENE\t-1\t1392\t357","CUL1\tORzx_8_5UAjR\tGENE\t-1\t861\t171","CREBBP\thrOQVgOCWtHH\tGENE\tamGWWOzfWrg1\t1006\t344","NCOR2\ttRKlqV2HWQET\tGENE\t1WQdsd0RVSHH\t919\t500","SPEN\tt3mLgYfBWQD4\tGENE\t1WQdsd0RVSHH\t1078\t439","NOTCH3\t2YXLvEuJWVnS\tGENE\tfLn2ytnZVU-1\t386\t344"," \tamGWWOzfWrg1\tCOMPLEX\t-1\t1089\t309","CNTN6\t8xDiqqMtUlgK\tGENE\t-1\t153\t344","HES-X\tCCp9TqYNVWpA\tGENE\t-1\t1392\t221","KAT2B\tW6JlNq1wWtHA\tGENE\tamGWWOzfWrg1\t1171\t274","KDM5A\tTHgZUx73WQED\tGENE\t1WQdsd0RVSHH\t1240\t439","DNER\t8lwlJT8zUt7J\tGENE\t-1\t386\t439","NCOR1\tVh9n-uUkWQDu\tGENE\t1WQdsd0RVSHH\t917\t440","CLEAVED NOTCH\tH-nBa6GpUrhI\tCOMPLEX\t-1\t781\t316","FBXW7\t5nfQJAxjT_z9\tGENE\t-1\t630\t171"," \t1WQdsd0RVSHH\tFAMILY\t-1\t1079\t469","NOTCH1\tVG_45lkLWVm6\tGENE\tfLn2ytnZVU-1\t386\t274","MALM3\tdAIql3LLWtG5\tGENE\tamGWWOzfWrg1\t1007\t274","NOV\tfhalsWFrUkbl\tGENE\t-1\t153\t274","JAG2\tEjlh1U2VT-P2\tGENE\t-1\t285\t171"," \tfLn2ytnZVU-1\tCOMPLEX\t-1\t472\t309","HEY-X\t0mJB_ECxVXFr\tGENE\t-1\t1392\t288","PSEN2\tXzuk75kgUufI\tGENE\t-1\t558\t439","EP300\tq34LVe78WtHT\tGENE\tamGWWOzfWrg1\t1170\t344","NOTCH2\tYBZcjlo4WVnH\tGENE\tfLn2ytnZVU-1\t558\t274","ARRDC1\tQj8O9GJNT_AD\tGENE\t-1\t454\t171","NOTCH4\tQf89YkiEWVne\tGENE\tfLn2ytnZVU-1\t558\t344","Cell growth, apoptosis\tNvu3J1djU_IC\tPROCESS\t-1\t1562\t439","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPEINTERACTION_PUBMED_ID","3ZGBwutXWvCf\t1WQdsd0RVSHH\tamGWWOzfWrg1\tINHIBITS\t","ojk1D4nOWbct\tEjlh1U2VT-P2\tfLn2ytnZVU-1\tACTIVATES\t","U40tVKQcWjcm\tXzuk75kgUufI\tfLn2ytnZVU-1\tACTIVATES\t","qgZ5w26hWm8v\t8xDiqqMtUlgK\tfLn2ytnZVU-1\tINHIBITS\t","xzRJacuuWiP-\t5nfQJAxjT_z9\tH-nBa6GpUrhI\tINHIBITS\t","_RaZlGxreARX\tIyt-kiQdVYR4\tNvu3J1djU_IC\tINHIBITS\t","6YudlCKlWygq\tamGWWOzfWrg1\tCCp9TqYNVWpA\tACTIVATES\t","6YYOMrO7W1Lu\tamGWWOzfWrg1\tIyt-kiQdVYR4\tACTIVATES\t","y9nj-EHqWlEU\tfhalsWFrUkbl\tfLn2ytnZVU-1\tINHIBITS\t","QgTnL-0zWfX-\t8lwlJT8zUt7J\tfLn2ytnZVU-1\tACTIVATES\t","YvuJzpCJWoS3\tORzx_8_5UAjR\t5nfQJAxjT_z9\tACTIVATES\t","QWoJOCVzW3SR\t0mJB_ECxVXFr\tNvu3J1djU_IC\tACTIVATES\t","9I6RH1JoWwwW\tH-nBa6GpUrhI\tamGWWOzfWrg1\tACTIVATES\t","4oG8A9OTWz_Z\tamGWWOzfWrg1\t0mJB_ECxVXFr\tACTIVATES\t","WZmI2ceJWg0e\tQj8O9GJNT_AD\tfLn2ytnZVU-1\tINHIBITS\t","U1KCxbf0W2Wy\tCCp9TqYNVWpA\tNvu3J1djU_IC\tACTIVATES\t"],"NRF2":["NRF2","","Involves the regulation of the transcription factor NFE2L2 by KEAP1. NFE2L2 regulates genes with the antioxidant response elements (ARE) that aid in cellular response against oxidative stress thought to aid in cancer chemoresistance.","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","KEAP1\tOkLgTv_3eszi\tGENE\t-1\t294\t147","CUL3\tpxCvh_ojeszm\tGENE\t-1\t469\t147","Oxidative Stress Response\tE9bpVpoWeszr\tPROCESS\t-1\t598\t240","NFE2L2\tsKw8nuDgeszp\tGENE\t-1\t385\t240","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPEINTERACTION_PUBMED_ID","wIxLZx13eszt\tOkLgTv_3eszi\tsKw8nuDgeszp\tINHIBITS\t","aWKwI8rJesz1\tsKw8nuDgeszp\tE9bpVpoWeszr\tACTIVATES\t","Ng79Bysjeszx\tpxCvh_ojeszm\tsKw8nuDgeszp\tINHIBITS\t"],"OV-2011-Cell-cycle-signaling-pathway":["OV-2011-Cell-cycle-signaling-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","CDKN2A\toN50crvCRjmK\tGENE\t-1\t635\t68\t","RB1\ttJj5RrqJRq1h\tGENE\t-1\t635\t299\t","CCNE1\tSx3IX8ExBTXu\tGENE\tFY8bF0WdRsru\t639\t148\t","CCND1\tBIDGlk8LBTX9\tGENE\tFY8bF0WdRsru\t550\t207\t","CYCLINS\tFY8bF0WdRsru\tFAMILY\t-1\t634\t177\t","Cell cycle progression\tnnswnmMyRv3y\tPROCESS\t-1\t635\t373\t","CCND2\tIxg8lLJLBTXd\tGENE\tFY8bF0WdRsru\t719\t207\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","duEMY1UXR86v\tFY8bF0WdRsru\ttJj5RrqJRq1h\tINHIBITS","__OC9xbiR-Fr\ttJj5RrqJRq1h\tnnswnmMyRv3y\tACTIVATES","VqDZTZnER7cZ\toN50crvCRjmK\tFY8bF0WdRsru\tINHIBITS"],"OV-2011-Notch-signaling-pathway":["OV-2011-Notch-signaling-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","MAML3\twTL7UE_SDIWe\tGENE\tZ64sAxBCSrsH\t800\t380\t","JAG1\tEy82kzAQDKzS\tGENE\tHPXERf3USgjx\t462\t280\t","MAML1\tICfP9aB2DIWS\tGENE\tZ64sAxBCSrsH\t800\t247\t","JAG2\tFvIadI1RDKzA\tGENE\tHPXERf3USgjx\t462\t351\t","JAG\tHPXERf3USgjx\tFAMILY\t-1\t462\t315\t","NOTCH3\txiGB_3VdSfd3\tGENE\t-1\t632\t316\t","MAML2\t9xWqi9JKDIWF\tGENE\tZ64sAxBCSrsH\t800\t314\t","MAML\tZ64sAxBCSrsH\tFAMILY\t-1\t800\t314\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","osh5OcaxTA2q\tHPXERf3USgjx\txiGB_3VdSfd3\tINHIBITS","AivX6u8YTCYD\tZ64sAxBCSrsH\txiGB_3VdSfd3\tINHIBITS"],"OV-2011-RTK-RAS-PI(3)K-pathway":["OV-2011-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","KRAS\t4SZmwk65Q2AX\tGENE\t-1\t529\t119\t","AKT\tJXx22AmtmHua\tFAMILY\t-1\t263\t234\t","AKT2\t1QP6Io9jmSsb\tGENE\tJXx22AmtmHua\t263\t203\t","NF1\tbKlDARX_QzeJ\tGENE\t-1\t529\t41\t","Proliferation/survival\teyOUahBEQth7\tPROCESS\t-1\t413\t402\t","AKT1\tpw2OFJfHmSsq\tGENE\tJXx22AmtmHua\t263\t265\t","PTEN\tqx1xPdYgQgUA\tGENE\t-1\t263\t41\t","BRAF\tXLdjd_rNQ5TF\tGENE\t-1\t529\t239\t","PIK3CA\t9WGkKXm-QhuR\tGENE\t-1\t263\t119\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","lwcl1MvdmPEO\tJXx22AmtmHua\teyOUahBEQth7\tACTIVATES","6CO_N8liRIA4\tbKlDARX_QzeJ\t4SZmwk65Q2AX\tINHIBITS","TDBL0RUZRJb3\t4SZmwk65Q2AX\tXLdjd_rNQ5TF\tACTIVATES","uXgITAznRMO2\tXLdjd_rNQ5TF\teyOUahBEQth7\tACTIVATES","vkkqRMcgQ90m\t4SZmwk65Q2AX\t9WGkKXm-QhuR\tACTIVATES","oxMyRc9ImLT_\t9WGkKXm-QhuR\tJXx22AmtmHua\tACTIVATES","_9kjQAkpdEP0\tqx1xPdYgQgUA\t9WGkKXm-QhuR\tINHIBITS"],"PI3K":["PI3K","","A signaling cascade involving PI3K phosphorylation of AKT leading to the activation of the mTORC1 complex. The mTORC1 functions as a metabolic sensor and controls protein abundance by affecting processes involved in protein production and RNA translation leading to changes in cell growth and survival.","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","AKT3\teWz9lexke0kY\tGENE\tyEOAK96Ye0j-\t752\t327","RPTOR\tKHzd_YdNe0jd\tGENE\tJKE-mm1le0jZ\t759\t730","PIK3CA\tBpH76ff7e0iw\tGENE\t-1\t595\t176","PIK3R2\t5lBs8QfFe0i_\tGENE\tiK4blWyDe0i1\t804\t167","RHEB\t8eeCwYTqe0jC\tGENE\t-1\t599\t619","PIK3R\tiK4blWyDe0i1\tFAMILY\t-1\t804\t166","AKT\tyEOAK96Ye0j-\tFAMILY\t-1\t594\t327","mTORC2\tMMeMHe4ze0kj\tFAMILY\t-1\t421\t730","TSC\t3b8rKMrke0jF\tFAMILY\t-1\t596\t486","AKT2\t9o76blkNe0kR\tGENE\tyEOAK96Ye0j-\t594\t327","mTORC1\tJKE-mm1le0jZ\tFAMILY\t-1\t678\t730","PPP2R1A\tHY1OO1uEe0jv\tGENE\t-1\t971\t326","PIK3R3\tGy1IflZce0i5\tGENE\tiK4blWyDe0i1\t804\t227","PTEN\tHL_nLOSce0jV\tGENE\t-1\t594\t91","MTOR\t_WbyV7oYe0jj\tGENE\tJKE-mm1le0jZ\t597\t730","PIK3R1\tj_DI0z3Xe0i8\tGENE\tiK4blWyDe0i1\t804\t106","Cell growth\t_wytH85He0jQ\tPROCESS\t-1\t601\t860","INPP4B\t2ZOWMzsce0j4\tGENE\t-1\t372\t178","TSC1\tx2juQzTie0jM\tGENE\t3b8rKMrke0jF\t596\t459","TSC2\tzs4f_I93e0jJ\tGENE\t3b8rKMrke0jF\t596\t513","RICTOR\tDg3B9H1Me0ks\tGENE\tMMeMHe4ze0kj\t421\t730","AKT1\tTDuOMRUee0kH\tGENE\tyEOAK96Ye0j-\t437\t327","STK11\tURGrIXe2e0kd\tGENE\t-1\t336\t483","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPEINTERACTION_PUBMED_ID","an7n5soQe0k8\tyEOAK96Ye0j-\t3b8rKMrke0jF\tINHIBITS\t","YeQpbZw0e0lG\t3b8rKMrke0jF\t8eeCwYTqe0jC\tINHIBITS\t","wjtVfwEee0lB\tJKE-mm1le0jZ\t_wytH85He0jQ\tACTIVATES\t","6Mr0F0gAe0lD\tURGrIXe2e0kd\t3b8rKMrke0jF\tACTIVATES\t","EigHAJh7e0lI\tHL_nLOSce0jV\tBpH76ff7e0iw\tINHIBITS\t","s7B8LZsde0k-\tBpH76ff7e0iw\tyEOAK96Ye0j-\tACTIVATES\t","1T4VmG08e0lL\tiK4blWyDe0i1\tBpH76ff7e0iw\tINHIBITS\t","3yNlj0Tge0k2\t8eeCwYTqe0jC\tJKE-mm1le0jZ\tACTIVATES\t","NuGuIugXe0k6\t2ZOWMzsce0j4\tBpH76ff7e0iw\tINHIBITS\t","pYhyONrDe0lP\tDg3B9H1Me0ks\tURGrIXe2e0kd\tACTIVATES\t","h-JnEMgBe0lN\tHY1OO1uEe0jv\tyEOAK96Ye0j-\tINHIBITS\t"],"RTK-RAS":["RTK-RAS","","A signaling cascade pathway initiated by activation of RTKs followed signal transduction through Ras then Raf and then MEK family members. This cascade leads to the activation of several transcription factors that regulate processes involving cell proliferation and survival.","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","NRAS\tQHZo7kkDfrMO\tGENE\tb8V1sXZDfrL1\t1142\t348","ROS1\ttNj2tohofrKR\tGENE\t8tMooF5vfrKJ\t664\t166","KIT\tgWlRUSfzfrKt\tGENE\t8tMooF5vfrKJ\t1142\t104","Translation\t7CK2REgNfrKF\tPROCESS\t-1\t881\t625","PTPN11\tjTtQAhJrfrJx\tGENE\t-1\t504\t348","RAS\tb8V1sXZDfrL1\tFAMILY\t-1\t1063\t348","RET\tyjRzsMVifrKy\tGENE\t8tMooF5vfrKJ\t504\t166","CBL\t0a_o8sXafrJh\tGENE\t-1\t504\t262","Proliferation\t3VFXQGLzfrJ-\tPROCESS\t-1\t559\t626","FLT3\tIpmlW5vMfrLc\tGENE\t8tMooF5vfrKJ\t982\t166","NF1\t59lXGxKMfrJn\tGENE\t-1\t1142\t262","NTRK2\t5SlBGbo1frLr\tGENE\t8tMooF5vfrKJ\t1302\t166","ERRFI1\t-V-9_6fAfrJj\tGENE\t-1\t664\t262","ARAF\tcBahXkGvfrMn\tGENE\tsApg3-IVfrMe\t982\t429","FGFR3\t1EucZO9pfrLJ\tGENE\t8tMooF5vfrKJ\t824\t104","HRAS\tBB8hBTZ4frME\tGENE\tb8V1sXZDfrL1\t982\t348","MET\t_yKldPkzfrKZ\tGENE\t8tMooF5vfrKJ\t1142\t41","RAF1\tLk9sb9wzfrM5\tGENE\tsApg3-IVfrMe\t1302\t429","RAC1\tzDRSUmjffrJ7\tGENE\t-1\t614\t511","FGFR1\tRFZ2wD4YfrKf\tGENE\t8tMooF5vfrKJ\t504\t104","MEK\t3psJQJmGfrJV\tFAMILY\t-1\t1062\t511","FGFR2\tnTecsKLYfrKj\tGENE\t8tMooF5vfrKJ\t664\t104","KRAS\te8tWMLoVfrL9\tGENE\tb8V1sXZDfrL1\t824\t348","BRAF\tNM12nD_nfrMx\tGENE\tsApg3-IVfrMe\t1142\t429","ERBB2\tC45Adl13frKV\tGENE\t8tMooF5vfrKJ\t664\t41","ERBB4\tZ-e0kCBwfrKN\tGENE\t8tMooF5vfrKJ\t982\t41","MAPK1\tR9ZNAxVRfrJ3\tGENE\t-1\t783\t511","RAF\tsApg3-IVfrMe\tFAMILY\t-1\t1142\t429","EGFR\t9Psi8emvfrK3\tGENE\t8tMooF5vfrKJ\t504\t41","RASA1\tZSZjKexZfrJ0\tGENE\t-1\t1301\t262","FGFR4\tMfs6mvKHfrKo\tGENE\t8tMooF5vfrKJ\t982\t104","IGF1R\tCvsyhyzdfrLQ\tGENE\t8tMooF5vfrKJ\t1302\t104","ERBB3\trORV55VHfrK9\tGENE\t8tMooF5vfrKJ\t824\t41","Cell survival\tvmWLLGP3frKC\tPROCESS\t-1\t718\t626","SOS1\tbdPjTyaDfrJu\tGENE\t-1\t982\t262","RIT1\tpTVg5xU2frMW\tGENE\tb8V1sXZDfrL1\t1302\t348","MAP2K2\tgqrpYTM0frJa\tGENE\t3psJQJmGfrJV\t1142\t511","ALK\t1o_9LYSFfrLV\tGENE\t8tMooF5vfrKJ\t824\t166","NTRK1\tT6ceghhpfrLj\tGENE\t8tMooF5vfrKJ\t1142\t166","RTKs\t8tMooF5vfrKJ\tFAMILY\t-1\t903\t103","PDGFRA\ty8PZ8iiyfrLD\tGENE\t8tMooF5vfrKJ\t1302\t41","MAP2K1\tQ2i0HY0HfrJe\tGENE\t3psJQJmGfrJV\t982\t511","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPEINTERACTION_PUBMED_ID","Rokn-zgqfrNN\t-V-9_6fAfrJj\t8tMooF5vfrKJ\tINHIBITS\t","BvZejKrrfrNX\t59lXGxKMfrJn\tb8V1sXZDfrL1\tINHIBITS\t","CEWkH2kYfrNa\tZSZjKexZfrJ0\tb8V1sXZDfrL1\tINHIBITS\t","In_EmpIgfrNv\tR9ZNAxVRfrJ3\t7CK2REgNfrKF\tACTIVATES\t","NYpLslu-frNh\tsApg3-IVfrMe\t3psJQJmGfrJV\tACTIVATES\t","8OWp0SRTfrNm\tzDRSUmjffrJ7\tR9ZNAxVRfrJ3\tACTIVATES\t","OnjXx-jmfrNk\t3psJQJmGfrJV\tR9ZNAxVRfrJ3\tACTIVATES\t","HPbM8huafrNU\tbdPjTyaDfrJu\tb8V1sXZDfrL1\tACTIVATES\t","qtmobl6_frNF\t0a_o8sXafrJh\t8tMooF5vfrKJ\tINHIBITS\t","8EmU4xtSfrNo\tR9ZNAxVRfrJ3\t3VFXQGLzfrJ-\tACTIVATES\t","n_C1QGZ2frNr\tR9ZNAxVRfrJ3\tvmWLLGP3frKC\tACTIVATES\t","vQrHXLexfrNR\t8tMooF5vfrKJ\tbdPjTyaDfrJu\tACTIVATES\t","gs6EgVUcfrNd\tb8V1sXZDfrL1\tsApg3-IVfrMe\tACTIVATES\t"],"SKCM-2015-Cell-cycle-signaling-pathway":["SKCM-2015-Cell-cycle-signaling-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","CDKN2A\tnpKTJggFJS4I\tGENE\t-1\t442\t89\t","CYCLINS\tIba11JzIJVxh\tFAMILY\t-1\t520\t175\t","CDK4\tWcN_CcOrC9iS\tGENE\tIba11JzIJVxh\t442\t175\t","E2F\tXI_rBXYxJXPk\tGENE\t-1\t520\t372\t","CCND1\tv_gEFTZBC9il\tGENE\tIba11JzIJVxh\t599\t175\t","Cell cycle progression\te_ZEQUYtJz1B\tPROCESS\t-1\t520\t484\t","RB1\t4vxRSXTEJWO8\tGENE\t-1\t520\t276\t","CDKN2B\tuK5CVzIeJayA\tGENE\t-1\t599\t89\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","vJf6xitbJwIp\tnpKTJggFJS4I\tIba11JzIJVxh\tINHIBITS","MrgZ3psqKpK7\tXI_rBXYxJXPk\te_ZEQUYtJz1B\tACTIVATES","fQLLdtj0JzEP\t4vxRSXTEJWO8\tXI_rBXYxJXPk\tINHIBITS","Msdh3q6kJxC4\tuK5CVzIeJayA\tIba11JzIJVxh\tINHIBITS","vjchZOt9JyOV\tIba11JzIJVxh\t4vxRSXTEJWO8\tINHIBITS"],"SKCM-2015-Histone-modification-pathway":["SKCM-2015-Histone-modification-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","AURKA\tUUHLK2LeLlq4\tGENE\t-1\t425\t166\t","PPP6C\tyZeIXzgALlHL\tGENE\t-1\t231\t166\t","ARID2\t4dCj0PbWLn10\tGENE\t-1\t425\t308\t","Genetic stability\txWY6P0idNRza\tPROCESS\t-1\t624\t195\t","Chromatin remodeling\t-c29Xam0NfMu\tPROCESS\t-1\t231\t263\t","Chromatid segregation\tCl7g3xLYLmwQ\tPROCESS\t-1\t624\t133\t","Transcriptional control\tX7mpJiW8Lodu\tPROCESS\t-1\t231\t342\t","Epigenetic regulation\t8D0fnb8SLrSQ\tPROCESS\t-1\t231\t437\t","IDH1\tuHqIeo66Lqq9\tGENE\t-1\t425\t435\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","9WzDoyMZNXKq\tUUHLK2LeLlq4\tCl7g3xLYLmwQ\tACTIVATES","nh2AMryLNpj_\tuHqIeo66Lqq9\t8D0fnb8SLrSQ\tACTIVATES","3ixp2EynNWMa\tyZeIXzgALlHL\tUUHLK2LeLlq4\tACTIVATES","-scKWlPDNX6-\tUUHLK2LeLlq4\txWY6P0idNRza\tACTIVATES","8YJTZK-INn2c\t4dCj0PbWLn10\t-c29Xam0NfMu\tACTIVATES","MdvHv-NFNoui\t4dCj0PbWLn10\tX7mpJiW8Lodu\tACTIVATES"],"SKCM-2015-RTK-RAS-PI(3)K-pathway":["SKCM-2015-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","Proliferation\tOpbQ5N5BIR7T\tPROCESS\t-1\t528\t524\t","NF1\tz9P8VET8IH-v\tGENE\t-1\t256\t147\t","NRAS\tstZUUqWp9HOb\tGENE\tdQrC9TeNIX-m\t374\t236\t","Survival\tDXOfiysJIUYY\tPROCESS\t-1\t1107\t329\t","RAS\tdQrC9TeNIX-m\tFAMILY\t-1\t529\t236\t","RAC1\t8CZU3OY7IlD5\tGENE\t-1\t880\t364\t","KIT\tyhNL3UBnIL-5\tGENE\t-1\t880\t120\t","AKT Pathway\t5m3zxs1KINf7\tPROCESS\t-1\t880\t241\t","MAP2K1\teNN9GlQaIQwL\tGENE\t-1\t528\t435\t","PTEN\tRtyOk-X-ITE3\tGENE\t-1\t1106\t241\t","BRAF\t4dRiJZfvIPWm\tGENE\t-1\t528\t338\t","KRAS\thksSbzGD9HOJ\tGENE\tdQrC9TeNIX-m\t685\t236\t","HRAS\tNNEMBzDV9HNw\tGENE\tdQrC9TeNIX-m\t530\t236\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","soPzg51UIxxj\t8CZU3OY7IlD5\t5m3zxs1KINf7\tACTIVATES","Cf02-ifyItuD\tdQrC9TeNIX-m\t4dRiJZfvIPWm\tACTIVATES","BqXWl69hI1zW\tyhNL3UBnIL-5\t5m3zxs1KINf7\tACTIVATES","1Aepvid-IqoA\tz9P8VET8IH-v\tdQrC9TeNIX-m\tINHIBITS","J01_493NIzbP\t4dRiJZfvIPWm\t5m3zxs1KINf7\tACTIVATES","PCKlXBgfIu2g\t4dRiJZfvIPWm\teNN9GlQaIQwL\tACTIVATES","q7PHpnTgIwuD\t8CZU3OY7IlD5\teNN9GlQaIQwL\tACTIVATES","FxAnigvrI2_i\t5m3zxs1KINf7\tDXOfiysJIUYY\tACTIVATES","uglecyI1IsGD\tyhNL3UBnIL-5\tdQrC9TeNIX-m\tACTIVATES","iCnUjDjmIvi5\teNN9GlQaIQwL\tOpbQ5N5BIR7T\tACTIVATES","HEzFrHkCI0l-\tRtyOk-X-ITE3\t5m3zxs1KINf7\tINHIBITS"],"SKCM-2015-TP53-pathway":["SKCM-2015-TP53-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","Apoptosis\tTc8UdIhSLCIT\tPROCESS\t-1\t289\t372\t","TP53\tGBRktWHeLBFQ\tGENE\t-1\t381\t273\t","MDM2\t-VggHhz9K-1w\tGENE\t-1\t381\t193\t","CDKN2B\tB3XBHs3yK9o7\tGENE\t-1\t456\t108\t","Senescence\tcLoUlZOZLD0x\tPROCESS\t-1\t456\t372\t","CDKN2A\thml0YQ9_K8tc\tGENE\t-1\t289\t108\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","gBzu2KRcLSuV\tB3XBHs3yK9o7\t-VggHhz9K-1w\tINHIBITS","XenUWWntLTzX\t-VggHhz9K-1w\tGBRktWHeLBFQ\tINHIBITS","WNkolmuaLVxV\tGBRktWHeLBFQ\tcLoUlZOZLD0x\tACTIVATES","N3sY9gBuLVHA\tGBRktWHeLBFQ\tTc8UdIhSLCIT\tACTIVATES","2r21RRvbLR21\thml0YQ9_K8tc\t-VggHhz9K-1w\tINHIBITS"],"STAD-2014-RTK-RAS-PI(3)K-pathway":["STAD-2014-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","PTEN\t6OFxgP6h9_xG\tGENE\t-1\t341\t496\t","RASA1\tY6PU3f3t93HB\tGENE\t-1\t419\t172\t","KRAS\txCs5lqYG7Z1Z\tGENE\t7oEmRnmC-RqY\t341\t265\t","JAK2\tL1LDTgi27i0r\tGENE\tuCiynVqo-CBg\t167\t366\t","PIK3R1\tij4dXcH1-Ah1\tGENE\t-1\t516\t496\t","RAS\t7oEmRnmC-RqY\tFAMILY\t-1\t420\t265\t","NRAS\tdwqmccUP7Z1E\tGENE\t7oEmRnmC-RqY\t499\t265\t","ERBB2\tL6F3ltyJ7i1T\tGENE\tuCiynVqo-CBg\t167\t233\t","EGFR\tOrbXhKLA7i1D\tGENE\tuCiynVqo-CBg\t167\t164\t","FGFR2\tGc4Ktrgt7i1M\tGENE\tuCiynVqo-CBg\t167\t430\t","PIK3CA\tWBOfcnh9993x\tGENE\t-1\t419\t394\t","MET\tgbmLOkrS7i1x\tGENE\tuCiynVqo-CBg\t167\t496\t","RTK\tuCiynVqo-CBg\tFAMILY\t-1\t167\t330\t","ERBB3\t6Uq7nWdq7i1f\tGENE\tuCiynVqo-CBg\t167\t299\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","20X5Aj7K-bWX\t6OFxgP6h9_xG\tWBOfcnh9993x\tINHIBITS","VZzlIbfS-edr\tuCiynVqo-CBg\t7oEmRnmC-RqY\tACTIVATES","KrNMU6gX-f84\tuCiynVqo-CBg\tWBOfcnh9993x\tACTIVATES","1JHahVpJ-cGV\tij4dXcH1-Ah1\tWBOfcnh9993x\tINHIBITS","IyUACdpr-YSa\t7oEmRnmC-RqY\tWBOfcnh9993x\tACTIVATES","OPPikJRZ-XUc\tY6PU3f3t93HB\t7oEmRnmC-RqY\tINHIBITS","vbNOH609-aVf\tWBOfcnh9993x\t7oEmRnmC-RqY\tACTIVATES"],"TGF-Beta":["TGF-Beta","","A signaling network involved in growth, proliferation, apoptosis, and differentiation involving the activation of TGFβ receptors by the cytokine TGFβ that leads to the activation of gene transcription by SMADs.","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","SMAD2\t0qBZliXOfmft\tGENE\tXkk8SKlafmfn\t335\t410","SMAD\tXkk8SKlafmfn\tFAMILY\t-1\t424\t446","Activin ligands\tt_Q1Nr-BfmfR\tGENE\t-1\t509\t146","ACVR2B\t9Ev1i-2HfmfX\tGENE\tboabbY81fmfT\t508\t307","TGFBR\tfXKkJObYfmfb\tFAMILY\t-1\t329\t277","ACVR2A\t_sm7432ofmfV\tGENE\tboabbY81fmfT\t509\t244","SMAD3\tgepyfePvfmfz\tGENE\tXkk8SKlafmfn\t514\t410","TGFBR2\tDOJnFoHNfmfi\tGENE\tfXKkJObYfmfb\t329\t311","TGFB ligands\tgOOpkueqfmfM\tGENE\t-1\t329\t146","ACVR2\tboabbY81fmfT\tFAMILY\t-1\t508\t275","TGFBR1\tSb4zGrL3fmfe\tGENE\tfXKkJObYfmfb\t329\t244","Proliferation, stem/progenitor phenotype\tA7jMDR2Mfmf-\tPROCESS\t-1\t427\t588","SMAD4\tOKApI7Qwfmf4\tGENE\tXkk8SKlafmfn\t428\t483","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPEINTERACTION_PUBMED_ID","7FzJ455ZfmgP\tboabbY81fmfT\tXkk8SKlafmfn\tACTIVATES\t","WEH0_CRqfmgL\tfXKkJObYfmfb\tXkk8SKlafmfn\tACTIVATES\t","hnOBi-Z1fmgI\tt_Q1Nr-BfmfR\tboabbY81fmfT\tACTIVATES\t","Ax3S1Kd8fmgE\tgOOpkueqfmfM\tfXKkJObYfmfb\tACTIVATES\t"],"THCA-2014-RTK-RAS-PI(3)K-pathway":["THCA-2014-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","MTOR\tG9y6ZBee_nmX\tGENE\t-1\t649\t417\t","NRAS\tOjQjq-cc7_5M\tGENE\tEOfQTOkE_iLF\t646\t25\t","AKT\tfi2ldWMn_lnk\tGENE\t-1\t647\t265\t","BCL2\tjwugB2iP_y0Y\tGENE\t-1\t841\t559\t","NTR1\turLIUCXQ70w-\tGENE\tKen9wGw8AKU3\t293\t-7\t","RAS\t1TJ8hV1I_ZR5\tFAMILY\t-1\t374\t186\t","RAF\txSi1Do6v_sYj\tGENE\t-1\t841\t186\t","DUSPs\t7C2rFt7t_fdn\tGENE\t-1\t298\t524\t","BRAF\tpq87LogY_1LI\tGENE\t-1\t1024\t186\t","pERK\tF4o-nfWI_urx\tGENE\t-1\t841\t344\t","Apoptosis\tAoCFeVPVAu6s\tPROCESS\t-1\t841\t636\t","BRAF\tPAsWh9Rz_dco\tGENE\t-1\t167\t276\t","HRAS\tLPvNA7nc7_57\tGENE\tEOfQTOkE_iLF\t804\t25\t","NTR\tKen9wGw8AKU3\tFAMILY\t-1\t371\t22\t","BAD\tUiVUw9Es_x5s\tGENE\t-1\t841\t489\t","Cell proliferation/Growth\ttGen8Qvz_qez\tPROCESS\t-1\t298\t628\t","KRAS\tr0hPxhCH7_5n\tGENE\tEOfQTOkE_iLF\t961\t25\t","PI3K\tK3RfoHn2_kQ2\tGENE\t-1\t647\t186\t","pMEK\tlMJhnvzk_tYZ\tGENE\t-1\t841\t264\t","pMEK\teM1eNr4K_cOi\tGENE\t-1\t298\t346\t","p90\t-6lLHt7R_v9K\tGENE\t-1\t841\t419\t","NTR3\tJtRMUb9N70xa\tGENE\tKen9wGw8AKU3\t378\t51\t","Protein synthesis\tWQ8orp6Y_ouv\tPROCESS\t-1\t649\t627\t","RAS\tEOfQTOkE_iLF\tFAMILY\t-1\t804\t25\t","NTR2\tWK-XNi2970xq\tGENE\tKen9wGw8AKU3\t450\t-7\t","RET\tCDUJn7rL_YRR\tGENE\t-1\t167\t186\t","pERK\tGyr_vYK7_eUm\tGENE\t-1\t298\t434\t","RAF\tEJdSJtPH_amI\tGENE\t-1\t374\t276\t","TSC2\tEhaBKk9-_mvL\tGENE\t-1\t647\t345\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","HComBP3QBFSr\txSi1Do6v_sYj\tlMJhnvzk_tYZ\tACTIVATES","5ow_H43KBLyc\tjwugB2iP_y0Y\tAoCFeVPVAu6s\tINHIBITS","lafIlqasBaaQ\tEJdSJtPH_amI\teM1eNr4K_cOi\tACTIVATES","pCtfuSydBdaS\t7C2rFt7t_fdn\tGyr_vYK7_eUm\tINHIBITS","YyPlgJXcA__s\tEhaBKk9-_mvL\tG9y6ZBee_nmX\tINHIBITS","iA_J_DZbBefG\t7C2rFt7t_fdn\ttGen8Qvz_qez\tACTIVATES","sJ4XKEpFA6LY\tKen9wGw8AKU3\tEOfQTOkE_iLF\tACTIVATES","8BieawZKA3u7\tCDUJn7rL_YRR\t1TJ8hV1I_ZR5\tACTIVATES","r79uM2_gBZKl\t1TJ8hV1I_ZR5\tEJdSJtPH_amI\tACTIVATES","ACvH-CYzA8yR\tEOfQTOkE_iLF\tK3RfoHn2_kQ2\tACTIVATES","TmRxcbx_Bbb7\teM1eNr4K_cOi\tGyr_vYK7_eUm\tACTIVATES","teHhboSJBVGJ\tpq87LogY_1LI\txSi1Do6v_sYj\tINHIBITS","XmrMteXSBBt-\tG9y6ZBee_nmX\tWQ8orp6Y_ouv\tACTIVATES","hU00JaNWBYJR\tPAsWh9Rz_dco\teM1eNr4K_cOi\tACTIVATES","FXb60wuvBcMi\tGyr_vYK7_eUm\t7C2rFt7t_fdn\tACTIVATES","-iHJfCCVA_Hh\tfi2ldWMn_lnk\tEhaBKk9-_mvL\tACTIVATES","aW6elpjvBKyK\tUiVUw9Es_x5s\tjwugB2iP_y0Y\tINHIBITS","LlJV17wNBHMh\tlMJhnvzk_tYZ\tF4o-nfWI_urx\tACTIVATES","z-CbE5XoBJ5o\t-6lLHt7R_v9K\tUiVUw9Es_x5s\tINHIBITS","F9EcWkHvBUJ2\tpq87LogY_1LI\txSi1Do6v_sYj\tACTIVATES","GqN5v_YIBEbi\tEOfQTOkE_iLF\txSi1Do6v_sYj\tACTIVATES","FWnfRc3YBC44\t-6lLHt7R_v9K\tG9y6ZBee_nmX\tINHIBITS","AV9s-fteA9y7\tK3RfoHn2_kQ2\tfi2ldWMn_lnk\tACTIVATES","3BgREqkhA22-\tKen9wGw8AKU3\t1TJ8hV1I_ZR5\tACTIVATES","r31OK-oJBIby\tF4o-nfWI_urx\t-6lLHt7R_v9K\tACTIVATES"],"TP53":["TP53","","Pathway centered around the regulation of the tumor suppressor TP53, a gene that regulates apoptosis, cell cycle arrest, senescence, and DNA repair.","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","Cell survival, proliferation\txDGjGXGMfyG3\tPROCESS\t-1\t133\t449","CDKN2A\tgx_YWb90fyGp\tGENE\t-1\t-23\t235","MDM4\tsT2W03HDfyGe\tGENE\tlK7pvMYZfyGU\t319\t127","DNA replication stress\tYvaYsZcufyHH\tPROCESS\t-1\t597\t51","RPS6KA3\tIu0kJKKGfyGM\tGENE\t-1\t597\t328","MDM2\tqv-3H9tXfyGZ\tGENE\tlK7pvMYZfyGU\t149\t127","Senescence, apoptosis\tIkv91AlOfyG-\tPROCESS\t-1\t325\t448","\tlK7pvMYZfyGU\tFAMILY\t-1\t234\t127","TP53\tES5FXiJLfyGu\tGENE\t-1\t233\t328","Oncogenic stress\tHZxSxJBmfyHE\tPROCESS\t-1\t333\t222","ATM\tc4Ad6ZYBfyGx\tGENE\t-1\t597\t130","CHEK2\tJvx4WzdtfyGk\tGENE\t-1\t597\t225","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPEINTERACTION_PUBMED_ID","8KZq5XsifyHL\tES5FXiJLfyGu\txDGjGXGMfyG3\tINHIBITS\t","5e5CkdqDfyHg\tgx_YWb90fyGp\tES5FXiJLfyGu\tINHIBITS\t","WAvkWWubfyHO\tJvx4WzdtfyGk\tIu0kJKKGfyGM\tACTIVATES\t","wMOYIFFAfyHS\tgx_YWb90fyGp\tlK7pvMYZfyGU\tINHIBITS\t","Zd519CgjfyHd\tHZxSxJBmfyHE\tES5FXiJLfyGu\tACTIVATES\t","lFKJrXsmfyHb\tES5FXiJLfyGu\tIkv91AlOfyG-\tACTIVATES\t","geyskuwAfyHV\tlK7pvMYZfyGU\tES5FXiJLfyGu\tINHIBITS\t","t-G0U6EJfyHR\tIu0kJKKGfyGM\tES5FXiJLfyGu\tACTIVATES\t","vNvONKmFfyHj\tYvaYsZcufyHH\tc4Ad6ZYBfyGx\tACTIVATES\t","25K5WaLwfyHX\tc4Ad6ZYBfyGx\tJvx4WzdtfyGk\tACTIVATES\t"],"UCEC-2013-RTK-RAS-PI(3)K-pathway":["UCEC-2013-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","RTK\tZAPqdjSDgCgU\tFAMILY\t-1\t391\t148\t","SOX17\tBXxulVFjgHIs\tGENE\t-1\t227\t344\t","KRAS\t76Wg78V_gDdz\tGENE\t-1\t391\t260\t","Proliferation\tsoh0TxsPgq1P\tPROCESS\t-1\t803\t409\t","PTEN\tQha2pMPigm3R\tGENE\t-1\t1085\t215\t","Translation\t0L6ulMimgteS\tPROCESS\t-1\t1056\t409\t","Proliferation\tMsHCffb6gNY_\tPROCESS\t-1\t391\t515\t","CTNNB1\ti1tsajIagMAh\tGENE\t-1\t391\t430\t","PIK3R1\tOJ-s2c_vgnZa\tGENE\t-1\t1085\t295\t","GSK3B\twXwgUTNkgFnQ\tGENE\t-1\t391\t344\t","FBXW7\t57SvZmLzgKXg\tGENE\t-1\t557\t344\t","Cell survival\tNI-5QJa7gr4W\tPROCESS\t-1\t935\t409\t","ERBB2\tY1idRwsY3N1k\tGENE\tZAPqdjSDgCgU\t469\t148\t","PIK3CA\tsJDwUf9sgpI_\tGENE\t-1\t915\t256\t","FGFR2\tM56YC0J03N1R\tGENE\tZAPqdjSDgCgU\t313\t148\t","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE","pauS7C64g9TO\tOJ-s2c_vgnZa\tsJDwUf9sgpI_\tINHIBITS","9ZMCIs5Ygf4j\twXwgUTNkgFnQ\ti1tsajIagMAh\tINHIBITS","BXhEIXgdhBkV\tsJDwUf9sgpI_\t0L6ulMimgteS\tACTIVATES","DLrHfIVSgegJ\t76Wg78V_gDdz\twXwgUTNkgFnQ\tINHIBITS","y_ifcFbCgcdH\tZAPqdjSDgCgU\t76Wg78V_gDdz\tACTIVATES","F5LjanELggnD\tBXxulVFjgHIs\ti1tsajIagMAh\tINHIBITS","2-tF8Ncmgiab\ti1tsajIagMAh\tMsHCffb6gNY_\tACTIVATES","tJv0DWt8g-nF\tsJDwUf9sgpI_\tsoh0TxsPgq1P\tACTIVATES","rps45EGCg_aW\tsJDwUf9sgpI_\tNI-5QJa7gr4W\tACTIVATES","w8Id1r73g8Xz\tQha2pMPigm3R\tsJDwUf9sgpI_\tINHIBITS","daN2ajyqghSz\t57SvZmLzgKXg\ti1tsajIagMAh\tINHIBITS"],"WNT":["WNT","","Involved in both development and tissue homeostasis. The canonical Wnt pathway involves signal transduction initiated by Wnt ligand binding to Frizzled family receptors leading to the dysregulation of beta-catenin degradation and ultimately, the induction of transcription via TCF/LEF transcription factors by beta-catenin.","","--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY--","SFRP3\tEiQGCkYbf2Ue\tGENE\taqCo94T-f2UY\t214\t113","DKK\tRpK5JOBLf2U5\tFAMILY\t-1\t819\t306","TLE1\toLjLH1mCf2T6\tGENE\tz1BS71lif2T2\t702\t625","TLE4\tUjSaC5Phf2T3\tGENE\tz1BS71lif2T2\t858\t685","SFRP1\tLgjBpjM-f2Ux\tGENE\taqCo94T-f2UY\t63\t147","Groucho\tz1BS71lif2T2\tFAMILY\t-1\t780\t655","APC\tKzWeNNlbf2UJ\tGENE\t-1\t228\t521","TCF7L1\tletl9duUf2WR\tGENE\tabIO9oDkf2WA\t341\t691","WIF1\t5iL99X9Jf2Tw\tGENE\t-1\t452\t61","TLE2\tR0vKN1sif2T9\tGENE\tz1BS71lif2T2\t858\t625","DKK1\tDRSXFgEQf2U9\tGENE\tRpK5JOBLf2U5\t739\t275","TCF7L2\tRPLZ4osLf2Wb\tGENE\tabIO9oDkf2WA\t499\t690","AXIN1\tKq4oChNGf2Vz\tGENE\tkoQkppv4f2Vq\t599\t443","WNT Dual Receptor Complex\tqRabkjW8f2VS\tCOMPLEX\t-1\t458\t304","SFRP2\thqXcbX1yf2U1\tGENE\taqCo94T-f2UY\t63\t203","LRP5\tDK7CkEYCf2Vi\tGENE\tqRabkjW8f2VS\t536\t276","TCF7\tpK9uMdhUf2WH\tGENE\tabIO9oDkf2WA\t422\t632","TLE3\tmA6zfzOUf2UA\tGENE\tz1BS71lif2T2\t702\t685","Cell proliferation\thFWwt8jrf2UV\tPROCESS\t-1\t135\t667","TCF/LEF\tabIO9oDkf2WA\tCOMPLEX\t-1\t420\t661","AXIN\tkoQkppv4f2Vq\tFAMILY\t-1\t678\t443","RNF43\telbyeD9tf2UD\tGENE\t-1\t144\t303","CTNNB1\t3GRyWPj8f2UM\tGENE\t-1\t417\t485","DKK2\tyYuxYP9Qf2VC\tGENE\tRpK5JOBLf2U5\t899\t275","FZDs\tjR_K-66Df2VX\tGENE\tqRabkjW8f2VS\t381\t301","DKK4\tlRy7Jj0Nf2VN\tGENE\tRpK5JOBLf2U5\t899\t337","SFRP\taqCo94T-f2UY\tFAMILY\t-1\t138\t169","WNT ligands\twCThVVjSf2Tz\tGENE\t-1\t452\t168","LRP6\tnr8aMEmUf2Vd\tGENE\tqRabkjW8f2VS\t536\t332","GSK3B\tmuxig_C-f2UG\tGENE\t-1\t228\t446","SFRP5\tB0f2GOAff2Us\tGENE\taqCo94T-f2UY\t214\t226","AMER1\tpAChF0thf2US\tGENE\t-1\t599\t519","SFRP4\tQMwh9gC-f2Ul\tGENE\taqCo94T-f2UY\t214\t170","AXIN2\tpD0TMIi_f2V5\tGENE\tkoQkppv4f2Vq\t758\t443","DKK3\twStErGAEf2VH\tGENE\tRpK5JOBLf2U5\t739\t337","","--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPEINTERACTION_PUBMED_ID","XWIzsv56f2Wm\taqCo94T-f2UY\twCThVVjSf2Tz\tINHIBITS\t","Bps0rTlOf2W1\tpAChF0thf2US\t3GRyWPj8f2UM\tINHIBITS\t","Bt39Pfi9f2W-\tqRabkjW8f2VS\tmuxig_C-f2UG\tACTIVATES\t","x3LsoTaTf2Ww\telbyeD9tf2UD\tqRabkjW8f2VS\tINHIBITS\t","PgNv7XZif2XA\tmuxig_C-f2UG\t3GRyWPj8f2UM\tINHIBITS\t","-u2h2V6ef2XK\tabIO9oDkf2WA\thFWwt8jrf2UV\tACTIVATES\t","an6n-VWDf2Wt\twCThVVjSf2Tz\tqRabkjW8f2VS\tACTIVATES\t","h4-_HrCRf2W4\tqRabkjW8f2VS\tkoQkppv4f2Vq\tACTIVATES\t","3NL_goRgf2W6\tkoQkppv4f2Vq\t3GRyWPj8f2UM\tINHIBITS\t","-q76c9PDf2Wy\tRpK5JOBLf2U5\tqRabkjW8f2VS\tINHIBITS\t","h9BN2IKjf2Wr\t5iL99X9Jf2Tw\twCThVVjSf2Tz\tINHIBITS\t","rRLoK5NMf2XD\tKzWeNNlbf2UJ\t3GRyWPj8f2UM\tINHIBITS\t","l7-kESH_f2XH\tz1BS71lif2T2\tabIO9oDkf2WA\tINHIBITS\t"]}; +module.exports = require("lodash"); /***/ }), /* 8 */ -/***/ (function(module, exports) { +/***/ (function(module) { -module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iNDdweCIgaGVpZ2h0PSI0N3B4IiB2aWV3Qm94PSIwIDAgNDcgNDciIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQ3IDQ3OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxnPgoJPGcgaWQ9IkxheWVyXzFfMTEwXyI+CgkJPGc+CgkJCTxwYXRoIGQ9Ik0xNy41NjcsMTUuOTM4bC0yLjg1OS0yLjcwMmMwLjMzMy0wLjYwNSwwLjUzOS0xLjI5LDAuNTM5LTIuMDI5YzAtMi4zNDItMS44OTctNC4yMzktNC4yNC00LjIzOQoJCQkJYy0yLjM0MywwLTQuMjQzLDEuODk2LTQuMjQzLDQuMjM5YzAsMi4zNDMsMS45LDQuMjQxLDQuMjQzLDQuMjQxYzAuODI2LDAsMS41OS0wLjI0NiwyLjI0Mi0wLjY1NGwyLjg1NSwyLjY5OQoJCQkJQzE2LjUzNiwxNi45MjIsMTcuMDIzLDE2LjM5OSwxNy41NjcsMTUuOTM4eiIvPgoJCQk8cGF0aCBkPSJNMjkuNjYsMTUuNmwzLjc5OS02LjM5M2MwLjM3NCwwLjEwNywwLjc2MiwwLjE4NCwxLjE2OSwwLjE4NGMyLjM0NywwLDQuMjQ0LTEuODk4LDQuMjQ0LTQuMjQxCgkJCQljMC0yLjM0Mi0xLjg5Ny00LjIzOS00LjI0NC00LjIzOWMtMi4zNDMsMC00LjIzOSwxLjg5Ni00LjIzOSw0LjIzOWMwLDEuMTYzLDAuNDY5LDIuMjE0LDEuMjI3LDIuOTgxbC0zLjc4Nyw2LjM3NQoJCQkJQzI4LjQ4LDE0LjgwMSwyOS4wOTQsMTUuMTY5LDI5LjY2LDE1LjZ6Ii8+CgkJCTxwYXRoIGQ9Ik00Mi43NjIsMjAuOTUyYy0xLjgyNCwwLTMuMzY5LDEuMTU5LTMuOTY4LDIuNzc1bC01LjI3OC0wLjUyMWMwLDAuMDQsMC4wMDYsMC4wNzgsMC4wMDYsMC4xMTcKCQkJCWMwLDAuNjg4LTAuMDc2LDEuMzYtMC4yMTMsMi4wMDlsNS4yNzYsMC41MjFjMC4zMTksMi4wMjQsMi4wNjIsMy41NzYsNC4xNzcsMy41NzZjMi4zNDIsMCw0LjIzOC0xLjg5Niw0LjIzOC00LjIzOAoJCQkJQzQ3LDIyLjg1LDQ1LjEwNCwyMC45NTIsNDIuNzYyLDIwLjk1MnoiLz4KCQkJPHBhdGggZD0iTTI4LjE5NywzNy42MjRsLTEuMTgtNS4xNTZjLTAuNjY2LDAuMjMyLTEuMzU5LDAuMzk4LTIuMDgyLDAuNDgxbDEuMTgyLDUuMTU3Yy0xLjM1NSwwLjcwOS0yLjI5LDIuMTEtMi4yOSwzLjc0NgoJCQkJYzAsMi4zNDIsMS44OTYsNC4yMzcsNC4yNDMsNC4yMzdjMi4zNDIsMCw0LjIzOC0xLjg5Niw0LjIzOC00LjIzN0MzMi4zMTEsMzkuNTUzLDMwLjQ3OSwzNy42OTIsMjguMTk3LDM3LjYyNHoiLz4KCQkJPHBhdGggZD0iTTE0LjM1NywyNS4zN2wtNi41NywyLjIwMWMtMC43NTgtMS4xNTgtMi4wNjMtMS45MjYtMy41NDgtMS45MjZDMS44OTYsMjUuNjQ1LDAsMjcuNTQyLDAsMjkuODg0CgkJCQljMCwyLjM0NSwxLjg5Niw0LjI0Miw0LjIzOSw0LjI0MmMyLjM0MSwwLDQuMjQyLTEuODk3LDQuMjQyLTQuMjQyYzAtMC4wOTgtMC4wMjEtMC4xODgtMC4wMjktMC4yODRsNi41OTEtMi4yMDcKCQkJCUMxNC43NDYsMjYuNzUyLDE0LjUxLDI2LjA3NywxNC4zNTcsMjUuMzd6Ii8+CgkJCTxjaXJjbGUgY3g9IjIzLjgzIiBjeT0iMjMuMzIzIiByPSI3LjI3MSIvPgoJCTwvZz4KCTwvZz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K" +module.exports = JSON.parse("{\"ACC-2016-TP53-RB-pathway\":[\"ACC-2016-TP53-RB-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"CDK4\\twyMGXBw8cUj6\\tGENE\\t-1\\t262\\t231\\t\",\"RB1\\tLrJe2ktmcVzK\\tGENE\\t-1\\t262\\t340\\t\",\"CDKN2A\\tN18olkvEcUJu\\tGENE\\t-1\\t387\\t127\\t\",\"TP53\\t-VLZ5keBcXa3\\tGENE\\t-1\\t488\\t340\\t\",\"MDM2\\t79evo3OUcVFA\\tGENE\\t-1\\t488\\t231\\t\",\"CCNE1\\t-le5m2j6cWa2\\tGENE\\t-1\\t80\\t340\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"d3auWK_1cit5\\t79evo3OUcVFA\\t-VLZ5keBcXa3\\tINHIBITS\",\"w4Yp60k9chhi\\tN18olkvEcUJu\\t79evo3OUcVFA\\tINHIBITS\",\"XhRgnqAscgwV\\tN18olkvEcUJu\\twyMGXBw8cUj6\\tINHIBITS\",\"0E_Xe1cUckq-\\twyMGXBw8cUj6\\tLrJe2ktmcVzK\\tINHIBITS\",\"K9h1lRMzclc1\\t-le5m2j6cWa2\\tLrJe2ktmcVzK\\tINHIBITS\"],\"ACC-2016-WNT-signaling-pathway\":[\"ACC-2016-WNT-signaling-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"CTNNB1\\taS-MtgKvdBTI\\tGENE\\t-1\\t396\\t371\\t\",\"MEN1\\tWoDJQ15LdCGw\\tGENE\\t-1\\t615\\t371\\t\",\"APC\\tquRewaVqdAAg\\tGENE\\t-1\\t396\\t277\\t\",\"WNT\\tg2oPjTN1c_MF\\tFAMILY\\t-1\\t396\\t183\\t\",\"ZNRF3\\tD1VT3C7Tc9uz\\tGENE\\t-1\\t396\\t87\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"mcDc9E8ddKPh\\tWoDJQ15LdCGw\\taS-MtgKvdBTI\\tINHIBITS\",\"xhr-qCdhdMnS\\tg2oPjTN1c_MF\\tquRewaVqdAAg\\tINHIBITS\",\"MRNaHfmqdLIB\\tquRewaVqdAAg\\taS-MtgKvdBTI\\tINHIBITS\",\"V58DLRlddN04\\tD1VT3C7Tc9uz\\tg2oPjTN1c_MF\\tINHIBITS\"],\"BLCA-2014-Histone-modification-pathway\":[\"BLCA-2014-Histone-modification-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"KDM1A\\tibAwJma20izY\\tGENE\\t-1\\t330\\t280\\t\",\"K9 (Ac, me1-3)\\tUdMq7kedz9FO\\tPROCESS\\t-1\\t441\\t185\\t\",\"K4 (me1-3)\\t6Itl25k-0F3S\\tPROCESS\\t-1\\t214\\t185\\t\",\"KDM6B\\tKGmluEtPHXqp\\tGENE\\t_aOp5kW01GfD\\t685\\t332\\t\",\"KDM4B\\t5_51HfxoHY9n\\tGENE\\tWWAQi_-h1FbJ\\t500\\t329\\t\",\"H3\\t_L15u0RJ0Eq5\\tPROCESS\\t-1\\t1128\\t185\\t\",\"K36 (me1-3)\\tyE8mFlUU0AcJ\\tPROCESS\\t-1\\t785\\t185\\t\",\"KDM1B\\tf-uYX8eW0o-j\\tGENE\\t-1\\t330\\t338\\t\",\"K27 (Ac, me1-3)\\tqU2DuUfoz_fU\\tPROCESS\\t-1\\t612\\t185\\t\",\"K79 (me1-3)\\tsGOXj0dB0CoY\\tPROCESS\\t-1\\t945\\t185\\t\",\"KDM4A\\tZN4FWAEl0yGP\\tGENE\\t-1\\t859\\t280\\t\",\"KDM5B\\t2NfOJGRNHYQB\\tGENE\\tNnEeq-Df1E_j\\t151\\t333\\t\",\"KDM4A\\tw2_Nlv2xHY9d\\tGENE\\tWWAQi_-h1FbJ\\t500\\t280\\t\",\"Demethylases\\tHX269Het1CgI\\tPROCESS\\t-1\\t1107\\t280\\t\",\"KDM4A-KDM4B\\tWWAQi_-h1FbJ\\tCOMPARTMENT\\t-1\\t500\\t304\\t\",\"KDM5A-KDM5B\\tNnEeq-Df1E_j\\tCOMPARTMENT\\t-1\\t151\\t306\\t\",\"KDM6A\\ttsbexFtHHXqU\\tGENE\\t_aOp5kW01GfD\\t685\\t280\\t\",\"KDM5A\\tZGtryZF-HYPy\\tGENE\\tNnEeq-Df1E_j\\t151\\t280\\t\",\"KDM6A-KDM6B\\t_aOp5kW01GfD\\tCOMPARTMENT\\t-1\\t685\\t306\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"QFzccFLP1rXn\\tUdMq7kedz9FO\\tqU2DuUfoz_fU\\tBINDS\",\"1iLfbX2611ie\\tsGOXj0dB0CoY\\t_L15u0RJ0Eq5\\tBINDS\",\"KtQPDuFH2B4M\\tNnEeq-Df1E_j\\t6Itl25k-0F3S\\tACTIVATES\",\"1ufB4tsp2MbY\\tZN4FWAEl0yGP\\tyE8mFlUU0AcJ\\tACTIVATES\",\"F6Hoq3VR2Fbi\\tibAwJma20izY\\t6Itl25k-0F3S\\tACTIVATES\",\"c5Dw1pvh2GJ7\\tibAwJma20izY\\tUdMq7kedz9FO\\tACTIVATES\",\"B85D8ro61xLn\\tyE8mFlUU0AcJ\\tsGOXj0dB0CoY\\tBINDS\",\"e_aGaIGw1pWA\\t6Itl25k-0F3S\\tUdMq7kedz9FO\\tBINDS\",\"EVjpyavJ2DfI\\tf-uYX8eW0o-j\\t6Itl25k-0F3S\\tACTIVATES\",\"f0P9R0dZ2J5O\\t_aOp5kW01GfD\\tqU2DuUfoz_fU\\tACTIVATES\",\"g_eFQ6zG2Hu-\\tWWAQi_-h1FbJ\\tUdMq7kedz9FO\\tACTIVATES\",\"T1GuzceK1uZK\\tqU2DuUfoz_fU\\tyE8mFlUU0AcJ\\tBINDS\"],\"BLCA-2014-RTK-RAS-PI(3)K-pathway\":[\"BLCA-2014-RTK-RAS-PI(3)K-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"ERBB2\\taqgx5yiY4na1\\tGENE\\tG_Vyif7SpoW2\\t584\\t98\\t\",\"NRAS\\tAbEoLGCY4sp9\\tGENE\\tydhBmSAbpTKc\\t476\\t183\\t\",\"TSC2\\tUD1lE2yO48n8\\tGENE\\t2_7tyoaRphSY\\t503\\t496\\t\",\"PIK3CA\\ts5486n5gpU_K\\tGENE\\t-1\\t658\\t184\\t\",\"PTEN\\ttiSgM3o0pX_z\\tGENE\\t-1\\t860\\t184\\t\",\"FGFR3\\t5yUJdgCL4naU\\tGENE\\tG_Vyif7SpoW2\\t272\\t98\\t\",\"Survival\\tt8b0oOIypis0\\tPROCESS\\t-1\\t791\\t584\\t\",\"HRAS\\tLtxngbVT4spa\\tGENE\\tydhBmSAbpTKc\\t322\\t183\\t\",\"RAS\\tG_Vyif7SpoW2\\tFAMILY\\t-1\\t506\\t98\\t\",\"STK11\\t8wk4zb43pfsu\\tGENE\\t-1\\t317\\t469\\t\",\"INPP4B\\tlGy7ILYwpZag\\tGENE\\t-1\\t804\\t266\\t\",\"MTOR\\tVyT8z_EcpexB\\tGENE\\t-1\\t722\\t470\\t\",\"TSC\\t2_7tyoaRphSY\\tFAMILY\\t-1\\t503\\t470\\t\",\"Proliferation\\t1PYLl_CZpjUH\\tPROCESS\\t-1\\t665\\t584\\t\",\"EGFR\\tMO1TWgRb4nbC\\tGENE\\tG_Vyif7SpoW2\\t429\\t98\\t\",\"RAS\\tydhBmSAbpTKc\\tFAMILY\\t-1\\t399\\t183\\t\",\"AKT\\tEuvUiqD6pbqL\\tGENE\\t-1\\t659\\t349\\t\",\"TSC1\\tlj3YtBzu48oT\\tGENE\\t2_7tyoaRphSY\\t503\\t444\\t\",\"ERBB3\\tSUuAzaJ-4nar\\tGENE\\tG_Vyif7SpoW2\\t739\\t98\\t\",\"NF1\\tevdrZPc3pW-g\\tGENE\\t-1\\t399\\t270\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"arJi2bQrqEdS\\tevdrZPc3pW-g\\tydhBmSAbpTKc\\tINHIBITS\",\"F1IgAgZPppxS\\tG_Vyif7SpoW2\\tydhBmSAbpTKc\\tACTIVATES\",\"OqD_HmKHqQIw\\tEuvUiqD6pbqL\\t2_7tyoaRphSY\\tINHIBITS\",\"PY7KfKiCqL9D\\tlGy7ILYwpZag\\ts5486n5gpU_K\\tINHIBITS\",\"0PkuH29SqKeN\\ttiSgM3o0pX_z\\ts5486n5gpU_K\\tINHIBITS\",\"zNMzC5CMqORJ\\ts5486n5gpU_K\\tEuvUiqD6pbqL\\tACTIVATES\",\"UB7BIf_SqRqo\\t2_7tyoaRphSY\\tVyT8z_EcpexB\\tINHIBITS\",\"OQI-iqX2qTLl\\t8wk4zb43pfsu\\t2_7tyoaRphSY\\tACTIVATES\",\"9Vm-zOAgqGbc\\tydhBmSAbpTKc\\ts5486n5gpU_K\\tACTIVATES\",\"uN421vA1qaeA\\tVyT8z_EcpexB\\tt8b0oOIypis0\\tACTIVATES\",\"ZTgU7FgfqZmN\\tVyT8z_EcpexB\\t1PYLl_CZpjUH\\tACTIVATES\"],\"BLCA-2014-TP53-RB-pathway\":[\"BLCA-2014-TP53-RB-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"Cell cycle progression\\tok7nDiB9oQJI\\tPROCESS\\t-1\\t414\\t436\\t\",\"CCNE1\\thm8HJrbqoWfo\\tGENE\\t-1\\t414\\t353\\t\",\"TP53\\tJYRUofjRoSmI\\tGENE\\t-1\\t605\\t179\\t\",\"MDM2\\t2XKi6b0joGD_\\tGENE\\t-1\\t413\\t179\\t\",\"E2F3\\tmz71J5tHoOtX\\tGENE\\t-1\\t219\\t436\\t\",\"Apoptosis\\t4-9gyc8LoX1s\\tPROCESS\\t-1\\t689\\t264\\t\",\"CDKN2A\\t9A-DhP0-oFUi\\tGENE\\t-1\\t219\\t179\\t\",\"CCND1\\tCsMIDjOQoHLw\\tGENE\\t-1\\t219\\t264\\t\",\"FBXW7\\tmULNbFKfoZFg\\tGENE\\t-1\\t625\\t353\\t\",\"ATM\\tjsI1OPG9oTvl\\tGENE\\t-1\\t605\\t85\\t\",\"CDKN1A\\tmBClqwIZoU7d\\tGENE\\t-1\\t526\\t264\\t\",\"RB1\\t-ACCNJRfoNBI\\tFAMILY\\t-1\\t219\\t353\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"B1RLlLrEo4cn\\tmz71J5tHoOtX\\tok7nDiB9oQJI\\tACTIVATES\",\"As7hIoBSo17y\\tCsMIDjOQoHLw\\t-ACCNJRfoNBI\\tINHIBITS\",\"mjgKjVX6ow0m\\t2XKi6b0joGD_\\tJYRUofjRoSmI\\tINHIBITS\",\"5BaXTZDuo7H8\\tmULNbFKfoZFg\\thm8HJrbqoWfo\\tINHIBITS\",\"PMdhVppIoyDR\\tJYRUofjRoSmI\\tmBClqwIZoU7d\\tACTIVATES\",\"w2p9WUJxo22X\\t-ACCNJRfoNBI\\tmz71J5tHoOtX\\tINHIBITS\",\"0hmD92TIo0ux\\t9A-DhP0-oFUi\\tCsMIDjOQoHLw\\tINHIBITS\",\"RfMPHF4FouzT\\tjsI1OPG9oTvl\\tJYRUofjRoSmI\\tACTIVATES\",\"toSMm4K7owET\\tJYRUofjRoSmI\\t2XKi6b0joGD_\\tACTIVATES\",\"LPb5J4Quo8EC\\tmBClqwIZoU7d\\thm8HJrbqoWfo\\tINHIBITS\",\"_PGdKZ50o5vL\\thm8HJrbqoWfo\\t-ACCNJRfoNBI\\tINHIBITS\",\"Vcmxazyaoz8N\\t9A-DhP0-oFUi\\t2XKi6b0joGD_\\tINHIBITS\",\"sABkuA1_oywi\\tJYRUofjRoSmI\\t4-9gyc8LoX1s\\tACTIVATES\"],\"BRCA-2012-Cell-cycle-signaling-pathway\":[\"BRCA-2012-Cell-cycle-signaling-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"BRCA2\\tVHmofL2iBtHB\\tGENE\\t9ZypvHQTebqG\\t302\\t521\\t\",\"p53/p21\\tK8vhHZlJewmz\\tPROCESS\\t-1\\t16\\t368\\t\",\"Cell-cycle arrest\\trsfgLtPJBro0\\tPROCESS\\tPve6lcOCerP2\\t518\\t505\\t\",\"BRCA1\\tPqa6yIQ4BtGs\\tGENE\\t9ZypvHQTebqG\\t145\\t521\\t\",\"ATM\\tTQqdq6ZHdybO\\tGENE\\t-1\\t-54\\t427\\t\",\"S/G2/M checkpoints\\teokFGf8gBroW\\tPROCESS\\tPve6lcOCerP2\\t518\\t452\\t\",\"S-phase entry\\tplt5oIp7Broo\\tPROCESS\\tPve6lcOCerP2\\t518\\t401\\t\",\"Cell cycle\\tPve6lcOCerP2\\tFAMILY\\t-1\\t518\\t453\\t\",\"RB1\\tCequZQzRd8SZ\\tGENE\\t-1\\t321\\t329\\t\",\"BRCA\\t9ZypvHQTebqG\\tFAMILY\\t-1\\t223\\t521\\t\",\"CCNE1\\tglg_i-QQdz9z\\tGENE\\t-1\\t133\\t329\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"GjwkZT93eu2S\\tCequZQzRd8SZ\\tPve6lcOCerP2\\tACTIVATES\",\"vbkfiLK9etui\\t9ZypvHQTebqG\\tPve6lcOCerP2\\tACTIVATES\",\"dQvMCZFxeWIc\\tglg_i-QQdz9z\\tCequZQzRd8SZ\\tINHIBITS\",\"OyM7Rh_ueTR2\\tTQqdq6ZHdybO\\tglg_i-QQdz9z\\tINHIBITS\",\"fcvz9ztueiRb\\tTQqdq6ZHdybO\\t9ZypvHQTebqG\\tACTIVATES\"],\"BRCA-2012-RTK-RAS-PI(3)K-pathway\":[\"BRCA-2012-RTK-RAS-PI(3)K-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"PIK3R1\\tLTI-_zA12M8_\\tGENE\\tQl_rV6PWbR4f\\t561\\t293\\t\",\"MAP3K1\\tV2U7rAinbMri\\tGENE\\t-1\\t803\\t220\\t\",\"IKBKB\\tv5be8J7cbT7P\\tGENE\\t-1\\t812\\t416\\t\",\"AKT1\\t2eyyNjOs2P7t\\tGENE\\tb8_iWiV3bSnI\\t738\\t293\\t\",\"PI3K\\tQl_rV6PWbR4f\\tFAMILY\\t-1\\t481\\t293\\t\",\"NF-kB\\tf-dza7Cyd34R\\tPROCESS\\t-1\\t940\\t406\\t\",\"PTEN\\tvmp2PR9WbESK\\tGENE\\t-1\\t480\\t218\\t\",\"Proliferation\\tQgBC5rX5baS9\\tPROCESS\\t-1\\t1277\\t416\\t\",\"MAP2K4\\thDh8Gi4cbOJg\\tGENE\\t-1\\t1075\\t220\\t\",\"ERBB2\\tkuccSffw2Nzs\\tGENE\\tTi_1UFukcA6d\\t205\\t220\\t\",\"PIK3CA\\tj3qYklwW2M9a\\tGENE\\tQl_rV6PWbR4f\\t402\\t293\\t\",\"AKT3\\tpH6LKha-2P8C\\tGENE\\tb8_iWiV3bSnI\\t897\\t293\\t\",\"PAK1\\tVjIN5hOKbQmQ\\tGENE\\t-1\\t480\\t416\\t\",\"AKT\\tb8_iWiV3bSnI\\tFAMILY\\t-1\\t818\\t293\\t\",\"CCND1\\tPKgbIo4AbVyY\\tGENE\\t-1\\t1084\\t416\\t\",\"RTK\\tTi_1UFukcA6d\\tFAMILY\\t-1\\t205\\t292\\t\",\"JNK/JUN Mediated Apoptosis\\t-MmWzJ2DbXrO\\tPROCESS\\t-1\\t1300\\t211\\t\",\"IGF1R\\tL4qe8zf82Nz8\\tGENE\\tTi_1UFukcA6d\\t205\\t293\\t\",\"EGFR\\tq9k-_XR32Nze\\tGENE\\tTi_1UFukcA6d\\t205\\t364\\t\",\"Evading apoptosis\\tg1G4oW6RbY6F\\tPROCESS\\t-1\\t1274\\t293\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"fhs_9IT6cUqw\\tb8_iWiV3bSnI\\tg1G4oW6RbY6F\\tACTIVATES\",\"teIhB-fucGLJ\\tVjIN5hOKbQmQ\\tb8_iWiV3bSnI\\tACTIVATES\",\"huxShVp3cIQO\\tQl_rV6PWbR4f\\tb8_iWiV3bSnI\\tACTIVATES\",\"WtHX5Q0hcXDM\\tPKgbIo4AbVyY\\tQgBC5rX5baS9\\tACTIVATES\",\"wAq3PQHjcaoH\\tb8_iWiV3bSnI\\tv5be8J7cbT7P\\tACTIVATES\",\"HE2KQFFscPqE\\thDh8Gi4cbOJg\\tPKgbIo4AbVyY\\tACTIVATES\",\"kzZuvBjdcQut\\tPKgbIo4AbVyY\\thDh8Gi4cbOJg\\tINHIBITS\",\"R6qp66fdcDsp\\tTi_1UFukcA6d\\tQl_rV6PWbR4f\\tACTIVATES\",\"8xgflgJ1cSju\\tv5be8J7cbT7P\\tPKgbIo4AbVyY\\tACTIVATES\",\"i-Pphq4BcWBa\\tb8_iWiV3bSnI\\tQgBC5rX5baS9\\tACTIVATES\",\"4s_OHeX4cTjW\\thDh8Gi4cbOJg\\t-MmWzJ2DbXrO\\tACTIVATES\",\"fegnTqNPcJpy\\tV2U7rAinbMri\\thDh8Gi4cbOJg\\tACTIVATES\",\"tj1nKgy9cExZ\\tvmp2PR9WbESK\\tQl_rV6PWbR4f\\tINHIBITS\"],\"BRCA-2012-TP53-pathway\":[\"BRCA-2012-TP53-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"TP53\\tAtC08ZQJc2KU\\tGENE\\t-1\\t491\\t349\\t\",\"Apoptosis\\toHj1iu9Nc3_k\\tPROCESS\\t-1\\t491\\t453\\t\",\"MDM4\\teUAyFKEv_rSt\\tGENE\\tY4IgKFahc81t\\t690\\t375\\t\",\"MDM2\\tEDekyeJO_rSa\\tGENE\\tY4IgKFahc81t\\t690\\t319\\t\",\"AKT1\\tnWtQqBkt_evA\\tGENE\\t-1\\t491\\t245\\t\",\"CHEK2\\tEZw1mFjYc0Pb\\tGENE\\t-1\\t300\\t350\\t\",\"MDM\\tY4IgKFahc81t\\tFAMILY\\t-1\\t690\\t347\\t\",\"ATM\\tDEtr5Wpj_eup\\tGENE\\t-1\\t300\\t245\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"EQR_Azwj_evL\\tDEtr5Wpj_eup\\tEZw1mFjYc0Pb\\tACTIVATES\",\"sV9ZEeJ9dMg3\\tY4IgKFahc81t\\tAtC08ZQJc2KU\\tINHIBITS\",\"kudrU-U-_evP\\tnWtQqBkt_evA\\tAtC08ZQJc2KU\\tINHIBITS\",\"hxwMi4kydOBT\\tAtC08ZQJc2KU\\toHj1iu9Nc3_k\\tACTIVATES\",\"uh5qfjUjdKB7\\tEZw1mFjYc0Pb\\tAtC08ZQJc2KU\\tACTIVATES\"],\"Cell Cycle\":[\"Cell Cycle\",\"\",\"Regulation of mitotic cell cycle progression involving a signaling cascade of cyclins and cyclin-dependent kinases as well as a number of regulatory checkpoints.\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"MDM2\\txPwjUPwi3Y86\\tGENE\\t-1\\t413\\t179\",\"CDKN1A\\tFQbPaPlV3Y9Q\\tGENE\\t-1\\t526\\t264\",\"FBXW7\\t_Honmyd33Y9K\\tGENE\\t-1\\t625\\t353\",\"CCND1\\tKf3hsGsT3Y9F\\tGENE\\t-1\\t219\\t264\",\"Cell cycle progression\\tyazwmMvz3Y8y\\tPROCESS\\t-1\\t414\\t436\",\"CCNE1\\t4-ZVTw8b3Y81\\tGENE\\t-1\\t414\\t353\",\"Apoptosis\\tSwnDUEnB3Y8_\\tPROCESS\\t-1\\t689\\t264\",\"RB1\\tAFGazwPj3Y9U\\tFAMILY\\t-1\\t219\\t353\",\"E2F3\\tb7YoPaEx3Y88\\tGENE\\t-1\\t219\\t436\",\"CDKN2A\\tE6EgzvEy3Y9C\\tGENE\\t-1\\t219\\t179\",\"TP53\\tmIL53nP63Y83\\tGENE\\t-1\\t605\\t179\",\"ATM\\t4fc8CUod3Y9N\\tGENE\\t-1\\t605\\t85\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPEINTERACTION_PUBMED_ID\",\"3H557euy3Y9b\\t_Honmyd33Y9K\\t4-ZVTw8b3Y81\\tINHIBITS\\t\",\"rC-lNx0W3Y9d\\tAFGazwPj3Y9U\\tb7YoPaEx3Y88\\tINHIBITS\\t\",\"Qm2ZEnCl3Y9Z\\tKf3hsGsT3Y9F\\tAFGazwPj3Y9U\\tINHIBITS\\t\",\"pPO3_YVM3Y9e\\tE6EgzvEy3Y9C\\tKf3hsGsT3Y9F\\tINHIBITS\\t\",\"pGNnucwd3Y9g\\tmIL53nP63Y83\\txPwjUPwi3Y86\\tACTIVATES\\t\",\"ygTYWu2k3Y9k\\tE6EgzvEy3Y9C\\txPwjUPwi3Y86\\tINHIBITS\\t\",\"tq-BTuks3Y9i\\tFQbPaPlV3Y9Q\\t4-ZVTw8b3Y81\\tINHIBITS\\t\",\"HPSR11Er3Y9b\\tmIL53nP63Y83\\tFQbPaPlV3Y9Q\\tACTIVATES\\t\",\"h7AyF28j3Y9n\\tmIL53nP63Y83\\tSwnDUEnB3Y8_\\tACTIVATES\\t\",\"vYHEvpqL3Y9f\\t4fc8CUod3Y9N\\tmIL53nP63Y83\\tACTIVATES\\t\",\"4ELiZPT23Y9j\\t4-ZVTw8b3Y81\\tAFGazwPj3Y9U\\tINHIBITS\\t\",\"jDEpTZhK3Y9X\\tb7YoPaEx3Y88\\tyazwmMvz3Y8y\\tACTIVATES\\t\",\"_gVnliZV3Y9a\\txPwjUPwi3Y86\\tmIL53nP63Y83\\tINHIBITS\\t\"],\"COADREAD-2012-RTK-RAS-PI(3)K-pathway\":[\"COADREAD-2012-RTK-RAS-PI(3)K-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"IRS2\\tZvdL-fZM3WuZ\\tGENE\\t-1\\t189\\t452\\t\",\"PIK3CA\\tMBUXnNN2z5Dt\\tGENE\\taDGGPsUl3doC\\t189\\t525\\t\",\"KRAS\\trKR_2SY2z0N3\\tGENE\\tD6EmJIZx6Gzg\\t555\\t462\\t\",\"ERBB2\\tStF--npjzyS_\\tGENE\\tjs1qiakd6GP4\\t404\\t298\\t\",\"IGF2\\tWv-EmNFT15yN\\tGENE\\t-1\\t189\\t298\\t\",\"PI3K\\taDGGPsUl3doC\\tFAMILY\\t-1\\t110\\t526\\t\",\"BRAF\\tPUJ8AKki53pG\\tGENE\\t-1\\t479\\t549\\t\",\"NRAS\\t8s1jKwvjz0Nm\\tGENE\\tD6EmJIZx6Gzg\\t406\\t462\\t\",\"Cell survival\\t1UmcnGh24P6f\\tPROCESS\\t-1\\t323\\t697\\t\",\"ERBB3\\tdg3Vl9qGzyTZ\\tGENE\\tjs1qiakd6GP4\\t556\\t300\\t\",\"IGF1R\\tcYzz8jlS2HaK\\tGENE\\t-1\\t189\\t380\\t\",\"RAS\\tD6EmJIZx6Gzg\\tFAMILY\\t-1\\t480\\t462\\t\",\"PIK3R1\\to9hOOpRM0I1T\\tGENE\\taDGGPsUl3doC\\t32\\t527\\t\",\"RTK\\tjs1qiakd6GP4\\tFAMILY\\t-1\\t480\\t299\\t\",\"Translation\\tRmlBMHs64SgD\\tPROCESS\\t-1\\t478\\t696\\t\",\"Proliferation\\trlRx40Am4Oyw\\tPROCESS\\t-1\\t164\\t697\\t\",\"PTEN\\ttSZugv-P3gVw\\tGENE\\t-1\\t29\\t452\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"6Shu_O4w4GqO\\tcYzz8jlS2HaK\\tZvdL-fZM3WuZ\\tACTIVATES\",\"kgTzvfUL0djR\\tMBUXnNN2z5Dt\\tRmlBMHs64SgD\\tNONE\",\"LrWZyqWL6OUk\\tD6EmJIZx6Gzg\\tPUJ8AKki53pG\\tACTIVATES\",\"MIyPv49C6PmS\\tPUJ8AKki53pG\\trlRx40Am4Oyw\\tACTIVATES\",\"6nSDsRMc6QPJ\\tPUJ8AKki53pG\\t1UmcnGh24P6f\\tACTIVATES\",\"AQSQDQcZ0XWo\\tZvdL-fZM3WuZ\\tMBUXnNN2z5Dt\\tACTIVATES\",\"ZfrWje290c1T\\tMBUXnNN2z5Dt\\t1UmcnGh24P6f\\tACTIVATES\",\"_hzFGzTL6RE2\\tPUJ8AKki53pG\\tRmlBMHs64SgD\\tACTIVATES\",\"bp_I0EHv0cD4\\tMBUXnNN2z5Dt\\trlRx40Am4Oyw\\tACTIVATES\",\"PQG4E-ga6Mza\\tjs1qiakd6GP4\\tD6EmJIZx6Gzg\\tACTIVATES\",\"NKPl8Kdr0I1e\\to9hOOpRM0I1T\\tMBUXnNN2z5Dt\\tINHIBITS\",\"OoqtDBRI0V5J\\ttSZugv-P3gVw\\tMBUXnNN2z5Dt\\tINHIBITS\",\"Vqm7Wl0M4AE0\\tWv-EmNFT15yN\\tcYzz8jlS2HaK\\tACTIVATES\",\"09Csuz540e3h\\tMBUXnNN2z5Dt\\tRmlBMHs64SgD\\tACTIVATES\"],\"COADREAD-2012-TGF-B-signaling-pathway\":[\"COADREAD-2012-TGF-B-signaling-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"TGF-B\\tnTPdmpNKy_zW\\tGENE\\t-1\\t-38\\t-358\\t\",\"ACVR2A\\t4qJ5NXmkEupe\\tGENE\\tRckLIrYUzEOc\\t278\\t-262\\t\",\"TGFBR2\\t7GmKbJadEtyf\\tGENE\\t5i_MJPAPzCI1\\t44\\t-262\\t\",\"ACTIVIN\\tZc2sWHBVzArX\\tGENE\\t-1\\t360\\t-358\\t\",\"ACVR2A-ACVR1B\\tRckLIrYUzEOc\\tCOMPARTMENT\\t-1\\t360\\t-262\\t\",\"SMAD\\t7j1T7wlqzcoy\\tFAMILY\\t-1\\t158\\t-86\\t\",\"SMAD2\\tEgBC5uQzE1qC\\tGENE\\t7j1T7wlqzcoy\\t82\\t-117\\t\",\"SMAD4\\tQuKCy3EaE1pk\\tGENE\\t7j1T7wlqzcoy\\t160\\t-55\\t\",\"MYC\\tBIYl4Hkdzdoj\\tGENE\\t-1\\t-65\\t74\\t\",\"TGFBR1-TGFBR2\\t5i_MJPAPzCI1\\tCOMPARTMENT\\t-1\\t-38\\t-262\\t\",\"TGFBR1\\tjQFRXXNIEtyK\\tGENE\\t5i_MJPAPzCI1\\t-121\\t-262\\t\",\"ACVR1B\\tRSw1VMOMEupS\\tGENE\\tRckLIrYUzEOc\\t443\\t-262\\t\",\"SMAD3\\tx-JW3Hq6E1qN\\tGENE\\t7j1T7wlqzcoy\\t235\\t-117\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"2jvzewjJ0UDH\\t5i_MJPAPzCI1\\t7j1T7wlqzcoy\\tACTIVATES\",\"X5m06a6REtyq\\tjQFRXXNIEtyK\\t7GmKbJadEtyf\\tBINDS\",\"76dv_Epi0O5A\\tnTPdmpNKy_zW\\t5i_MJPAPzCI1\\tACTIVATES\",\"RBUTTCdV0RK3\\tZc2sWHBVzArX\\tRckLIrYUzEOc\\tACTIVATES\",\"4m5j1DYC0VIG\\tRckLIrYUzEOc\\t7j1T7wlqzcoy\\tACTIVATES\",\"aVez8qmz0X7C\\t7j1T7wlqzcoy\\tBIYl4Hkdzdoj\\tINHIBITS\",\"dMNeGuPcEupl\\t4qJ5NXmkEupe\\tRSw1VMOMEupS\\tBINDS\"],\"COADREAD-2012-TP53-pathway\":[\"COADREAD-2012-TP53-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"Proliferation\\tFD2DCZc_8Eck\\tPROCESS\\t-1\\t569\\t199\\t\",\"TP53\\t2LzUgOci77hf\\tGENE\\t-1\\t386\\t239\\t\",\"DNA replication stress\\teArivqeT78y7\\tPROCESS\\t-1\\t204\\t145\\t\",\"ATM\\tB4xPctkP764L\\tGENE\\t-1\\t386\\t145\\t\",\"Oncogenic stress\\tR-scgH-q793l\\tPROCESS\\t-1\\t204\\t239\\t\",\"Cell survival\\tltgdAJkI8Hs-\\tPROCESS\\t-1\\t569\\t266\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"igOuMrr-QXvV\\tR-scgH-q793l\\t2LzUgOci77hf\\tACTIVATES\",\"WlE3wQIvQdms\\t2LzUgOci77hf\\tltgdAJkI8Hs-\\tINHIBITS\",\"nfX2BMaKQcgf\\t2LzUgOci77hf\\tFD2DCZc_8Eck\\tINHIBITS\",\"gVpKeF6ZQW1o\\teArivqeT78y7\\tB4xPctkP764L\\tACTIVATES\",\"KXWREHzWQaXR\\tB4xPctkP764L\\t2LzUgOci77hf\\tACTIVATES\"],\"COADREAD-2012-WNT-signaling-pathway\":[\"COADREAD-2012-WNT-signaling-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"Proliferation, stem/progenitor phenotype\\tbl6HjsSUV6cV\\tPROCESS\\t-1\\t1030\\t629\\t\",\"DKK3\\tGFrq4NgHEGRM\\tGENE\\tg331vTgZWK6e\\t255\\t154\\t\",\"TCF7L2\\tfah7MVZYUjS9\\tGENE\\t-1\\t462\\t456\\t\",\"DKK\\tg331vTgZWK6e\\tFAMILY\\t-1\\t333\\t125\\t\",\"TCF7\\t6tzFiifNEEEJ\\tGENE\\t61GfHXD5WEXh\\t682\\t571\\t\",\"DKK4\\tRAXuusnwEGQo\\tGENE\\tg331vTgZWK6e\\t411\\t154\\t\",\"CTNNB1\\tEmU8OBXdUMCO\\tGENE\\t-1\\t682\\t392\\t\",\"DKK1\\tUE5vCnmWEGQ6\\tGENE\\tg331vTgZWK6e\\t255\\t96\\t\",\"CTNNB1-TCF7\\t61GfHXD5WEXh\\tCOMPARTMENT\\t-1\\t682\\t539\\t\",\"AXIN2\\tH8L_66uLUHPT\\tGENE\\t-1\\t682\\t312\\t\",\"FAM123B\\tXwg-_Y4_UGRt\\tGENE\\t-1\\t525\\t312\\t\",\"APC\\txIqHk3KBUIjc\\tGENE\\t-1\\t838\\t312\\t\",\"ARID1A\\th0U_424iUWu5\\tGENE\\t-1\\t1030\\t456\\t\",\"CTNNB1\\tKZpYtS9vEEEm\\tGENE\\t61GfHXD5WEXh\\t682\\t507\\t\",\"FZD10\\tP1FIiIlqEFL_\\tGENE\\tT5QZmrnYWA-N\\t762\\t199\\t\",\"LRP5\\twGjsVLW4EFLn\\tGENE\\tT5QZmrnYWA-N\\t600\\t199\\t\",\"WNT\\tcFdN3nQcTwwO\\tGENE\\t-1\\t682\\t47\\t\",\"MYC\\t4hScAPjlUSym\\tGENE\\t-1\\t1030\\t535\\t\",\"DKK2\\tzOVzq_6jEGRb\\tGENE\\tg331vTgZWK6e\\t411\\t96\\t\",\"LRP5-FZD10\\tT5QZmrnYWA-N\\tCOMPARTMENT\\t-1\\t681\\t199\\t\",\"FBXW7\\tbXlgw4GKUVh3\\tGENE\\t-1\\t862\\t456\\t\",\"SOX9\\tPOzVx5kyURM7\\tGENE\\t-1\\t459\\t550\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"j9mmGRLjHKlo\\tEmU8OBXdUMCO\\t61GfHXD5WEXh\\tACTIVATES\",\"f_sY8_lUHUPL\\t61GfHXD5WEXh\\t4hScAPjlUSym\\tINDUCES\",\"esOZ1gJeWfDK\\tT5QZmrnYWA-N\\txIqHk3KBUIjc\\tINHIBITS\",\"ADfnqwAaHX4H\\t4hScAPjlUSym\\tbl6HjsSUV6cV\\tACTIVATES\",\"42Liap6TWjUw\\txIqHk3KBUIjc\\tEmU8OBXdUMCO\\tINHIBITS\",\"Gi2m7VhSWdIe\\tT5QZmrnYWA-N\\tXwg-_Y4_UGRt\\tINHIBITS\",\"hDuqU9RREFMQ\\twGjsVLW4EFLn\\tP1FIiIlqEFL_\\tBINDS\",\"6Rn05rJaWhts\\tXwg-_Y4_UGRt\\tEmU8OBXdUMCO\\tINHIBITS\",\"Rmg0swQ7HQ4z\\t61GfHXD5WEXh\\tPOzVx5kyURM7\\tREPRESSES\",\"dYBVjbKCWM3N\\tg331vTgZWK6e\\tT5QZmrnYWA-N\\tINHIBITS\",\"Z4VdiqohHMM_\\tfah7MVZYUjS9\\t61GfHXD5WEXh\\tINHIBITS\",\"p11d6T2rHOIN\\tbXlgw4GKUVh3\\t61GfHXD5WEXh\\tINHIBITS\",\"l1NcyeMdWigH\\tH8L_66uLUHPT\\tEmU8OBXdUMCO\\tINHIBITS\",\"cdUCacfNHR1f\\tPOzVx5kyURM7\\t61GfHXD5WEXh\\tINHIBITS\",\"IlOH9qIEHVc_\\tbXlgw4GKUVh3\\t4hScAPjlUSym\\tINHIBITS\",\"kvbDlRZ2EEEx\\tKZpYtS9vEEEm\\t6tzFiifNEEEJ\\tBINDS\",\"MUhUjbP3Wa2w\\tg331vTgZWK6e\\tcFdN3nQcTwwO\\tINHIBITS\",\"2OZGWP_oWeBV\\tT5QZmrnYWA-N\\tH8L_66uLUHPT\\tINHIBITS\",\"_xkBTQ9sHWYw\\th0U_424iUWu5\\t4hScAPjlUSym\\tREPRESSES\",\"Af3sU0_EWJva\\tcFdN3nQcTwwO\\tT5QZmrnYWA-N\\tACTIVATES\"],\"ESAD-2017-Cell-cycle-pathway\":[\"ESAD-2017-Cell-cycle-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"CDKN2A\\t0b0592b4-4330-47c9-9a88-7d8c7940a680\\tGENE\\t-1\\t219\\t205\\t\",\"CYCLINS\\tbfd14661-8f74-45d0-aec4-eff4de124c14\\tFAMILY\\t-1\\t612\\t205\\t\",\"RB1\\t362e59dd-fb26-4d70-8a5e-357b38ed5e4b\\tGENE\\t-1\\t986\\t205\\t\",\"CCNE1\\t65337ed5-11c6-4a91-a177-14c9c0fb42df\\tGENE\\tbfd14661-8f74-45d0-aec4-eff4de124c14\\t454\\t205\\t\",\"CCND1\\ta3661efd-abce-474e-ab02-f2eb355d2487\\tGENE\\tbfd14661-8f74-45d0-aec4-eff4de124c14\\t613\\t205\\t\",\"CDK6\\t4ad57397-dfc1-4efc-91fa-be799f5b885d\\tGENE\\tbfd14661-8f74-45d0-aec4-eff4de124c14\\t770\\t205\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"2c47aaf9-8ddc-4097-bc51-716d7dce4cb9\\tbfd14661-8f74-45d0-aec4-eff4de124c14\\t362e59dd-fb26-4d70-8a5e-357b38ed5e4b\\tINHIBITS\",\"67638113-dece-48c9-8982-3e420e681508\\t0b0592b4-4330-47c9-9a88-7d8c7940a680\\tbfd14661-8f74-45d0-aec4-eff4de124c14\\tINHIBITS\"],\"ESAD-2017-RTK-RAS-PI(3)K-pathway\":[\"ESAD-2017-RTK-RAS-PI(3)K-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"PIK3R1\\t51f0d970-2e2b-47e2-90bd-0d0d881d70ed\\tGENE\\t-1\\t1056\\t335\\t\",\"PTEN\\t8214d1b9-75ba-4fbb-86d2-fe45dd392767\\tGENE\\t-1\\t778\\t335\\t\",\"PIK3CA\\t49a250be-042c-4910-9774-802dfb0e08f3\\tGENE\\t-1\\t918\\t227\\t\",\"KRAS\\tbea46283-55f2-4650-acee-58d23d8c11fc\\tGENE\\t-1\\t358\\t227\\t\",\"MYC\\tb33f6617-57e5-4e3a-bd28-6ff114d96321\\tGENE\\t-1\\t1256\\t227\\t\",\"RTK\\td76b7fd4-b8f5-4e92-b2ce-b783fe58b9f2\\tFAMILY\\t-1\\t673\\t130\\t\",\"MET\\t82180331-e6f8-4487-9c6c-1c898cb05cf1\\tGENE\\td76b7fd4-b8f5-4e92-b2ce-b783fe58b9f2\\t595\\t130\\t\",\"IGF1R\\te7741571-a281-4b1d-ab5f-1e6d22cd3cf7\\tGENE\\td76b7fd4-b8f5-4e92-b2ce-b783fe58b9f2\\t754\\t130\\t\",\"RTK\\t230ace17-b770-4cc8-8d00-55c2a2075c3e\\tFAMILY\\td76b7fd4-b8f5-4e92-b2ce-b783fe58b9f2\\t1075\\t130\\t\",\"FGFR1\\tfb4252b0-5bfd-495d-99bc-c7143789403c\\tGENE\\td76b7fd4-b8f5-4e92-b2ce-b783fe58b9f2\\t914\\t130\\t\",\"ERBB2\\t0c2d7f5d-9da8-4a3c-bf55-53976781fa86\\tGENE\\td76b7fd4-b8f5-4e92-b2ce-b783fe58b9f2\\t271\\t130\\t\",\"EGFR\\t34b79c41-bc49-4c8e-b5f7-ddad188915bb\\tGENE\\td76b7fd4-b8f5-4e92-b2ce-b783fe58b9f2\\t434\\t130\\t\",\"FGFR2\\t91dd9bca-e153-4016-8c4a-0dbb7e12d024\\tGENE\\td76b7fd4-b8f5-4e92-b2ce-b783fe58b9f2\\t1075\\t130\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"0738d86a-d46d-4a8f-b3f4-b96baba1bfa1\\t49a250be-042c-4910-9774-802dfb0e08f3\\tb33f6617-57e5-4e3a-bd28-6ff114d96321\\tACTIVATES\",\"625b533f-ac20-4dbf-abdc-2c9fe3cafe97\\t51f0d970-2e2b-47e2-90bd-0d0d881d70ed\\t49a250be-042c-4910-9774-802dfb0e08f3\\tINHIBITS\",\"f687da01-5f2a-4168-b41f-04f0014ab954\\t8214d1b9-75ba-4fbb-86d2-fe45dd392767\\t49a250be-042c-4910-9774-802dfb0e08f3\\tINHIBITS\",\"49ee44ff-b6ff-47f0-81bf-effa2cf34191\\t49a250be-042c-4910-9774-802dfb0e08f3\\tbea46283-55f2-4650-acee-58d23d8c11fc\\tACTIVATES\",\"d1a956b7-db6a-4653-9da4-d0b26357fb5a\\tbea46283-55f2-4650-acee-58d23d8c11fc\\t49a250be-042c-4910-9774-802dfb0e08f3\\tACTIVATES\",\"73b63049-5e6c-4793-8536-86b4ec006b2d\\td76b7fd4-b8f5-4e92-b2ce-b783fe58b9f2\\t49a250be-042c-4910-9774-802dfb0e08f3\\tACTIVATES\",\"49655771-0e8d-42ce-a71e-76d3bc8c742c\\td76b7fd4-b8f5-4e92-b2ce-b783fe58b9f2\\tbea46283-55f2-4650-acee-58d23d8c11fc\\tACTIVATES\"],\"ESAD-2017-WNT-CTNNB1-pathway\":[\"ESAD-2017-WNT-CTNNB1-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"PTCH1\\t623d9d6b-6d32-4a0a-a826-df9b880ca03a\\tGENE\\t-1\\t212\\t126\\t\",\"APC\\t792b8fd9-ae87-4972-8da4-1140378b63e5\\tGENE\\t-1\\t382\\t126\\t\",\"FBXW7\\tfaa556d4-6e8d-456d-b9d0-a4c35873f9a8\\tGENE\\t-1\\t553\\t126\\t\",\"ARID1A\\t1cdc0d84-e27f-44ed-981e-12994fed8711\\tGENE\\t-1\\t731\\t126\\t\",\"CTNNB1\\td6eb299d-a7c3-4c78-b9e7-4808773bb690\\tGENE\\t-1\\t446\\t214\\t\",\"MYC\\tdd894023-67b6-4bcc-baad-a441556f4168\\tGENE\\t-1\\t793\\t214\\t\",\"PIK3CA\\t8009d529-453b-4c3e-b694-7e0070b7f0a5\\tGENE\\t-1\\t793\\t303\\t\",\"Cell proliferation\\td80f3360-7aa0-442a-ae2a-59f0e8379f86\\tPROCESS\\t-1\\t999\\t214\\t\",\"Embryonic development\\t2e65076c-a0ae-47d9-8860-4ba6c1c89e1c\\tPROCESS\\t-1\\t210\\t214\\t\",\"SMAD\\t08936961-1fad-4b39-ada5-839a1864de96\\tFAMILY\\t-1\\t985\\t126\\t\",\"SMAD2\\t0235338c-0433-48b9-87e3-e50923aed67c\\tGENE\\t08936961-1fad-4b39-ada5-839a1864de96\\t901\\t126\\t\",\"SMAD4\\t1b3e587e-ec76-417a-92ef-34976b0f46bd\\tGENE\\t08936961-1fad-4b39-ada5-839a1864de96\\t1070\\t126\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"a1155daf-ac03-4bbd-9ae0-0a738ec73d95\\t8009d529-453b-4c3e-b694-7e0070b7f0a5\\tdd894023-67b6-4bcc-baad-a441556f4168\\tACTIVATES\",\"0562cbe7-7462-45c1-bd49-109e7ef97f74\\tdd894023-67b6-4bcc-baad-a441556f4168\\td80f3360-7aa0-442a-ae2a-59f0e8379f86\\tACTIVATES\",\"b7fe88fe-76f0-4f45-b80c-eb9937d3fed0\\t623d9d6b-6d32-4a0a-a826-df9b880ca03a\\t2e65076c-a0ae-47d9-8860-4ba6c1c89e1c\\tINHIBITS\",\"d1682a0d-a521-4f33-8097-a57b695d6fe4\\t792b8fd9-ae87-4972-8da4-1140378b63e5\\td6eb299d-a7c3-4c78-b9e7-4808773bb690\\tINHIBITS\",\"0e07ea0f-7144-42b7-831d-11a660f45ddb\\tfaa556d4-6e8d-456d-b9d0-a4c35873f9a8\\td6eb299d-a7c3-4c78-b9e7-4808773bb690\\tINHIBITS\",\"91b66dea-a6b4-4991-8ac2-184904f361b0\\tfaa556d4-6e8d-456d-b9d0-a4c35873f9a8\\tdd894023-67b6-4bcc-baad-a441556f4168\\tINHIBITS\",\"ba347f10-d89d-47ed-97fc-8eed4454b4ba\\td6eb299d-a7c3-4c78-b9e7-4808773bb690\\tdd894023-67b6-4bcc-baad-a441556f4168\\tACTIVATES\",\"b8423ddf-8f5c-4718-81b4-132ae25ed3e5\\t1cdc0d84-e27f-44ed-981e-12994fed8711\\tdd894023-67b6-4bcc-baad-a441556f4168\\tINHIBITS\",\"a7180fc6-8113-47eb-b090-39d1cc8c5825\\t08936961-1fad-4b39-ada5-839a1864de96\\tdd894023-67b6-4bcc-baad-a441556f4168\\tINHIBITS\"],\"GBM-2008-Cell-cycle-signaling-pathway\":[\"GBM-2008-Cell-cycle-signaling-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"RB1\\t0cQitpJLOoEG\\tFAMILY\\t-1\\t472\\t279\\t\",\"CYCLINS\\tSBGkYw2NOhMr\\tFAMILY\\t-1\\t472\\t168\\t\",\"G1/S Progression\\t0kD7D3DGOtD1\\tPROCESS\\t-1\\t472\\t374\\t\",\"CCND2\\tGrNFDrs1AoNL\\tGENE\\tSBGkYw2NOhMr\\t472\\t168\\t\",\"CDKN2B\\tTbTnj_R5ONS9\\tGENE\\t-1\\t444\\t87\\t\",\"CDK4\\tPs45UaX4AoNo\\tGENE\\tSBGkYw2NOhMr\\t317\\t168\\t\",\"CDK6\\tVnEu6OlPAoNe\\tGENE\\tSBGkYw2NOhMr\\t627\\t168\\t\",\"CDKN2C\\tr8WJLoQLOONy\\tGENE\\t-1\\t625\\t87\\t\",\"CDKN2A\\tcnleYFDsOMzx\\tGENE\\t-1\\t294\\t87\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"Rpso-cKyOzoj\\tTbTnj_R5ONS9\\tSBGkYw2NOhMr\\tINHIBITS\",\"3InwuSCoO0br\\tr8WJLoQLOONy\\tSBGkYw2NOhMr\\tINHIBITS\",\"-zXgQSv4Oy04\\tcnleYFDsOMzx\\tSBGkYw2NOhMr\\tINHIBITS\",\"6NO_fL3nO3r4\\tSBGkYw2NOhMr\\t0cQitpJLOoEG\\tINHIBITS\",\"1pimX-ZiO6F6\\t0cQitpJLOoEG\\t0kD7D3DGOtD1\\tINHIBITS\"],\"GBM-2008-RTK-RAS-PI(3)K-pathway\":[\"GBM-2008-RTK-RAS-PI(3)K-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"PDGFRA\\tiD415efHLG3J\\tGENE\\tIdrkrh8-K31j\\t441\\t-61\\t\",\"RAS\\t8XXLbCwXLtrQ\\tFAMILY\\t-1\\t246\\t53\\t\",\"NF1\\tKe7_FRmuLw42\\tGENE\\t-1\\t21\\t54\\t\",\"RTK\\tIdrkrh8-K31j\\tFAMILY\\t-1\\t365\\t-61\\t\",\"PI(3)K\\tuWMSz1XlL2nL\\tFAMILY\\t-1\\t529\\t50\\t\",\"PTEN\\tLOErZTMUL6hc\\tGENE\\t-1\\t721\\t50\\t\",\"AKT\\tsgb8KI1XMIrn\\tFAMILY\\t-1\\t529\\t129\\t\",\"EGFR\\t7T8gHIR6LG2s\\tGENE\\tIdrkrh8-K31j\\t134\\t-61\\t\",\"FOXO\\t1cIfqNkTMN--\\tGENE\\t-1\\t529\\t205\\t\",\"MET\\tXcKqo6xILG3V\\tGENE\\tIdrkrh8-K31j\\t597\\t-61\\t\",\"ERBB2\\tvJOD-MZOLG2-\\tGENE\\tIdrkrh8-K31j\\t287\\t-61\\t\",\"Proliferation, survival, translation\\tk9I_xTrbMS6S\\tPROCESS\\t-1\\t247\\t206\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"ApGQ0rEtL1TV\\tKe7_FRmuLw42\\t8XXLbCwXLtrQ\\tINHIBITS\",\"s5CFkxUKL0kl\\tIdrkrh8-K31j\\t8XXLbCwXLtrQ\\tACTIVATES\",\"jrs5QL8rMbv3\\t8XXLbCwXLtrQ\\tk9I_xTrbMS6S\\tACTIVATES\",\"WEpyeQmyMeC8\\tsgb8KI1XMIrn\\t1cIfqNkTMN--\\tINHIBITS\",\"ytXepIulMGGL\\tIdrkrh8-K31j\\tuWMSz1XlL2nL\\tACTIVATES\",\"_g47pqc4MGwz\\tLOErZTMUL6hc\\tuWMSz1XlL2nL\\tINHIBITS\",\"u1UwLh90MdLo\\tuWMSz1XlL2nL\\tsgb8KI1XMIrn\\tACTIVATES\"],\"GBM-2008-TP53-pathway\":[\"GBM-2008-TP53-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"Activated oncogenes\\tx-laQtq0NSZI\\tPROCESS\\t-1\\t724\\t57\\t\",\"MDM2\\tVIrh6R4jNYOQ\\tGENE\\t-1\\t724\\t208\\t\",\"Apoptosis\\tLxZckK4_NmKp\\tPROCESS\\t-1\\t886\\t297\\t\",\"MDM4\\t0z81KeWTNfOj\\tGENE\\t-1\\t886\\t234\\t\",\"Senescence\\tX0XgoUzfNjH-\\tPROCESS\\t-1\\t546\\t297\\t\",\"CDKN2A\\tIXX8d7kuNVHa\\tGENE\\t-1\\t724\\t135\\t\",\"TP53\\t6RLrPg8rNa4o\\tGENE\\t-1\\t724\\t297\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"4PNvvSvKNtxu\\tIXX8d7kuNVHa\\tVIrh6R4jNYOQ\\tINHIBITS\",\"gX_WY_rANxtC\\tVIrh6R4jNYOQ\\t6RLrPg8rNa4o\\tINHIBITS\",\"EznJNkeAN1al\\t6RLrPg8rNa4o\\tX0XgoUzfNjH-\\tACTIVATES\",\"kaHvTklZNzas\\t0z81KeWTNfOj\\t6RLrPg8rNa4o\\tINHIBITS\",\"wTOjoJHdNq6N\\tx-laQtq0NSZI\\tIXX8d7kuNVHa\\tACTIVATES\",\"5-9bxAL_N0gO\\t6RLrPg8rNa4o\\tLxZckK4_NmKp\\tACTIVATES\"],\"GBM-2013-Cell-cycle-signaling-pathway\":[\"GBM-2013-Cell-cycle-signaling-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"CDKN2C\\tnFMLgWuEmv0Q\\tGENE\\t-1\\t667\\t136\\t\",\"CDK4\\tszeVZ7Elmxvu\\tGENE\\t-1\\t386\\t249\\t\",\"CDK6\\tWvJWw5HPm0Ab\\tGENE\\t-1\\t694\\t249\\t\",\"Cyclins\\tAvEeR8GgnDvF\\tFAMILY\\t-1\\t541\\t249\\t\",\"CDKN2A\\tWHDg2nj1B2yR\\tGENE\\t-1\\t320\\t136\\t\",\"Cell cycle control\\tKJEq6EA_m3Cj\\tPROCESS\\t-1\\t793\\t383\\t\",\"CDKN2B\\tv1zGJhukB2ym\\tGENE\\t-1\\t470\\t136\\t\",\"RB1\\tNc0stK1rm13Y\\tFAMILY\\t-1\\t541\\t383\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"4yIGldfunbSO\\tNc0stK1rm13Y\\tKJEq6EA_m3Cj\\tACTIVATES\",\"aqdBLSknB2zK\\tv1zGJhukB2ym\\tszeVZ7Elmxvu\\tINHIBITS\",\"bxdBRxkfnYu4\\tszeVZ7Elmxvu\\tNc0stK1rm13Y\\tINHIBITS\",\"AQXakgefnZf1\\tAvEeR8GgnDvF\\tNc0stK1rm13Y\\tINHIBITS\",\"bdgYHwINnW4B\\tnFMLgWuEmv0Q\\tAvEeR8GgnDvF\\tINHIBITS\",\"Xslj1XfeB2yz\\tWHDg2nj1B2yR\\tszeVZ7Elmxvu\\tINHIBITS\",\"ve_EiwTjnXrI\\tnFMLgWuEmv0Q\\tWvJWw5HPm0Ab\\tINHIBITS\",\"Q7Uq8jBIB2y5\\tWHDg2nj1B2yR\\tAvEeR8GgnDvF\\tINHIBITS\",\"IL38zL5VB2yv\\tWHDg2nj1B2yR\\tWvJWw5HPm0Ab\\tINHIBITS\",\"6jn1TNkoB2zN\\tv1zGJhukB2ym\\tAvEeR8GgnDvF\\tINHIBITS\",\"BSaYCBi7naes\\tWvJWw5HPm0Ab\\tNc0stK1rm13Y\\tINHIBITS\",\"JZERPNMdnWL9\\tnFMLgWuEmv0Q\\tszeVZ7Elmxvu\\tINHIBITS\",\"n7Nithx-B2zB\\tv1zGJhukB2ym\\tWvJWw5HPm0Ab\\tINHIBITS\"],\"GBM-2013-RTK-RAS-PI(3)K-pathway\":[\"GBM-2013-RTK-RAS-PI(3)K-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"NF1\\tpQ2sq0Chk7o8\\tGENE\\t-1\\t843\\t223\\t\",\"RAS\\tXfDonLT2k9rr\\tFAMILY\\t-1\\t674\\t223\\t\",\"BRAF\\tJKmqofwVk_cd\\tGENE\\t-1\\t674\\t334\\t\",\"EGFR\\tHG7A5p2q4D3f\\tGENE\\tZvpmFM7llCzi\\t331\\t113\\t\",\"PI3K(3)K\\tE0625yTsk46l\\tGENE\\t-1\\t428\\t225\\t\",\"AKT Pathway\\tTTwvf1BelBTM\\tPROCESS\\t-1\\t428\\t338\\t\",\"MET\\tsZJ7Kmrg4D35\\tGENE\\tZvpmFM7llCzi\\t643\\t113\\t\",\"MAPK Pathway\\tdAkBkKN-lAKT\\tPROCESS\\t-1\\t862\\t335\\t\",\"PTEN\\t8kyYeHGHk4NK\\tGENE\\t-1\\t255\\t225\\t\",\"RTK\\tZvpmFM7llCzi\\tFAMILY\\t-1\\t565\\t113\\t\",\"FGFR\\t8z2n3qaU4D3L\\tGENE\\tZvpmFM7llCzi\\t800\\t113\\t\",\"PDGFRA\\t-jXEzRew4D3r\\tGENE\\tZvpmFM7llCzi\\t487\\t113\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"f9EmKbzjlk77\\tJKmqofwVk_cd\\tdAkBkKN-lAKT\\tACTIVATES\",\"qj0ZCvR8le5E\\t8kyYeHGHk4NK\\tE0625yTsk46l\\tINHIBITS\",\"4DrueUbLljf-\\tE0625yTsk46l\\tTTwvf1BelBTM\\tACTIVATES\",\"c4Kpa4R5lgcQ\\tZvpmFM7llCzi\\tXfDonLT2k9rr\\tACTIVATES\",\"CEeo6oGYlifg\\tXfDonLT2k9rr\\tJKmqofwVk_cd\\tACTIVATES\",\"zingzci6lhXA\\tpQ2sq0Chk7o8\\tXfDonLT2k9rr\\tINHIBITS\",\"LTVgdZNOld9G\\tZvpmFM7llCzi\\tE0625yTsk46l\\tACTIVATES\"],\"GBM-2013-TP53-pathway\":[\"GBM-2013-TP53-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"TP53\\tux4NOBO4mBSe\\tGENE\\t-1\\t416\\t243\\t\",\"MDM4\\tO3CQIh-OmCOD\\tGENE\\t-1\\t222\\t243\\t\",\"Senescence/Apoptosis\\tTIZhBhfymDVV\\tPROCESS\\t-1\\t416\\t355\\t\",\"MDM2\\tdNRsoLpZmAuu\\tGENE\\t-1\\t416\\t133\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"BrX7DMKemS8w\\tdNRsoLpZmAuu\\tux4NOBO4mBSe\\tINHIBITS\",\"jHRb2o3YmTqF\\tO3CQIh-OmCOD\\tux4NOBO4mBSe\\tINHIBITS\",\"MnYnmX_dmV0E\\tux4NOBO4mBSe\\tTIZhBhfymDVV\\tACTIVATES\"],\"HIPPO\":[\"HIPPO\",\"\",\"Involved in the control of organ size. Central to this pathway is the regulation of the transcription co-activators YAP/TAZ that promote the transcription of genes involved in cell proliferation.\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"HRAS\\t7o723KjtxLw3\\tGENE\\tm8n8vtNexLwr\\t322\\t183\",\"NF1\\tCoRREfZLxLxE\\tGENE\\t-1\\t399\\t270\",\"Survival\\tPwPgvbNpxLvq\\tPROCESS\\t-1\\t791\\t584\",\"RAS\\tzoIJL9SXxLvs\\tFAMILY\\t-1\\t505\\t98\",\"FGFR3\\txdJHuZOJxLvx\\tGENE\\tzoIJL9SXxLvs\\t272\\t98\",\"ERBB2\\t2TufgUnDxLvu\\tGENE\\tzoIJL9SXxLvs\\t584\\t98\",\"TSC2\\tPrCzkSRAxLwV\\tGENE\\tNIuPl9Z4xLwO\\t503\\t496\",\"PTEN\\tsYk-4hLPxLvn\\tGENE\\t-1\\t860\\t184\",\"STK11\\tlFDvCMmBxLv9\\tGENE\\t-1\\t317\\t469\",\"INPP4B\\tGLEvKwzFxLwB\\tGENE\\t-1\\t804\\t266\",\"MTOR\\tICScCD_7xLwH\\tGENE\\t-1\\t722\\t470\",\"Proliferation\\tuwFqE9I9xLwk\\tPROCESS\\t-1\\t665\\t584\",\"RAS\\tm8n8vtNexLwr\\tFAMILY\\t-1\\t399\\t183\",\"NRAS\\tgJxmCdGKxLwx\\tGENE\\tm8n8vtNexLwr\\t476\\t183\",\"ERBB3\\tMzpcdmxYxLv6\\tGENE\\tzoIJL9SXxLvs\\t739\\t98\",\"TSC1\\tRWyL5pe9xLwd\\tGENE\\tNIuPl9Z4xLwO\\t503\\t444\",\"TSC\\tNIuPl9Z4xLwO\\tFAMILY\\t-1\\t503\\t470\",\"PIK3CA\\tiq8nE1OMxLvj\\tGENE\\t-1\\t658\\t184\",\"AKT\\tTiUbnalZxLw_\\tGENE\\t-1\\t659\\t349\",\"EGFR\\t5XuhH2Y3xLv2\\tGENE\\tzoIJL9SXxLvs\\t429\\t98\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPEINTERACTION_PUBMED_ID\",\"sFy4CeNZxLxT\\tsYk-4hLPxLvn\\tiq8nE1OMxLvj\\tINHIBITS\\t\",\"YpeP_yDkxLxQ\\tTiUbnalZxLw_\\tNIuPl9Z4xLwO\\tINHIBITS\\t\",\"t2QHaOQlxLxX\\tNIuPl9Z4xLwO\\tICScCD_7xLwH\\tINHIBITS\\t\",\"--0Bl7NmxLxb\\tm8n8vtNexLwr\\tiq8nE1OMxLvj\\tACTIVATES\\t\",\"TihuxwDexLxR\\tGLEvKwzFxLwB\\tiq8nE1OMxLvj\\tINHIBITS\\t\",\"M4uM8zkMxLxZ\\tlFDvCMmBxLv9\\tNIuPl9Z4xLwO\\tACTIVATES\\t\",\"JGhy8m8UxLxN\\tzoIJL9SXxLvs\\tm8n8vtNexLwr\\tACTIVATES\\t\",\"rQyUZobSxLxf\\tICScCD_7xLwH\\tuwFqE9I9xLwk\\tACTIVATES\\t\",\"t_83aGiOxLxc\\tICScCD_7xLwH\\tPwPgvbNpxLvq\\tACTIVATES\\t\",\"1Jm9fDfkxLxV\\tiq8nE1OMxLvj\\tTiUbnalZxLw_\\tACTIVATES\\t\",\"J7C0UYeQxLxK\\tCoRREfZLxLxE\\tm8n8vtNexLwr\\tINHIBITS\\t\"],\"HNSC-2015-Apoptosis-pathway\":[\"HNSC-2015-Apoptosis-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"Cell cycle and survival\\temPjU9d6DgGP\\tPROCESS\\t-1\\t348\\t484\\t\",\"TRAF3\\tIBsoHlQJDZF8\\tGENE\\t-1\\t530\\t285\\t\",\"FADD\\tDLlGnDdfDTRw\\tGENE\\t-1\\t373\\t199\\t\",\"TNFR-LTBR\\ts0lGLs3rDXus\\tCOMPARTMENT\\t-1\\t452\\t106\\t\",\"LTBR\\tM8fueNVgIWYI\\tGENE\\ts0lGLs3rDXus\\t530\\t106\\t\",\"Inflammation angiogenesis migration\\tyeoJnxV0DfTf\\tPROCESS\\t-1\\t581\\t484\\t\",\"BIRC2\\t54AiNjv7DUd9\\tGENE\\t-1\\t530\\t199\\t\",\"NF-kB\\tVeOlULKnDabs\\tGENE\\t-1\\t455\\t382\\t\",\"CASP8\\tkpwET4bNDYMG\\tGENE\\t-1\\t373\\t285\\t\",\"TNFR\\t1f2UD5ctIWYb\\tGENE\\ts0lGLs3rDXus\\t373\\t106\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"lvrnvkjrD9P-\\ts0lGLs3rDXus\\t54AiNjv7DUd9\\tACTIVATES\",\"N_skSg-mECnc\\tkpwET4bNDYMG\\tVeOlULKnDabs\\tINHIBITS\",\"OMDbwzxED_x2\\t54AiNjv7DUd9\\tkpwET4bNDYMG\\tINHIBITS\",\"HH4ug7YuD7Fv\\ts0lGLs3rDXus\\tDLlGnDdfDTRw\\tACTIVATES\",\"f-O5DenwEBjr\\t54AiNjv7DUd9\\tIBsoHlQJDZF8\\tINHIBITS\",\"U1LEKmYqIWYs\\t1f2UD5ctIWYb\\tM8fueNVgIWYI\\tBINDS\",\"hhJPfTk9EHgb\\tVeOlULKnDabs\\temPjU9d6DgGP\\tACTIVATES\",\"h3Fekoz9EAiL\\tDLlGnDdfDTRw\\tkpwET4bNDYMG\\tACTIVATES\",\"Acyl78aaEDXf\\tIBsoHlQJDZF8\\tVeOlULKnDabs\\tINHIBITS\",\"O9oIu8SeEIN_\\tVeOlULKnDabs\\tyeoJnxV0DfTf\\tACTIVATES\"],\"HNSC-2015-Cell-cycle-signaling-pathway\":[\"HNSC-2015-Cell-cycle-signaling-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"CDKN2A\\tprbNZ7N4F2yz\\tGENE\\t-1\\t346\\t201\\t\",\"Cell cycle and survival\\tUF0yWD0cGVp6\\tPROCESS\\t-1\\t859\\t466\\t\",\"let-7c\\t1Fbfq0EnF4FD\\tGENE\\t-1\\t761\\t201\\t\",\"HRAS\\ttR7G7jSMFyKn\\tGENE\\t-1\\t456\\t71\\t\",\"HPVE\\tOUtOuzrFGWsp\\tFAMILY\\t-1\\t347\\t333\\t\",\"RB1\\tKkBOpjMSGBEp\\tFAMILY\\t-1\\t570\\t334\\t\",\"TP53\\tm6QJybSmGSEj\\tGENE\\t-1\\t531\\t466\\t\",\"MYC\\tPu1nPMkoGUcO\\tGENE\\t-1\\t931\\t334\\t\",\"PIK3CA\\tz2FkIMy8FypC\\tGENE\\t-1\\t678\\t71\\t\",\"CCND1\\tS0n0th2eCfb9\\tGENE\\t-swYow3RF5GO\\t570\\t171\\t\",\"CYCLINS\\t-swYow3RF5GO\\tFAMILY\\t-1\\t570\\t197\\t\",\"E2F1\\tBNAC4UcvF_fD\\tGENE\\t-1\\t764\\t334\\t\",\"HPVE7\\t6jlQIfmICrjy\\tGENE\\tOUtOuzrFGWsp\\t347\\t360\\t\",\"CDK6\\tPPI7pGMpCfcQ\\tGENE\\t-swYow3RF5GO\\t570\\t224\\t\",\"HPVE6\\t4bkc06NyCrjd\\tGENE\\tOUtOuzrFGWsp\\t347\\t307\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"idn2SG2QHMC0\\tBNAC4UcvF_fD\\tUF0yWD0cGVp6\\tACTIVATES\",\"njhnQe9vCfci\\tz2FkIMy8FypC\\tS0n0th2eCfb9\\tACTIVATES\",\"5CzfV-h-HQkB\\tOUtOuzrFGWsp\\tm6QJybSmGSEj\\tINHIBITS\",\"UpECTCkVHGkl\\t1Fbfq0EnF4FD\\t-swYow3RF5GO\\tINHIBITS\",\"wnpqGTZ4HNFG\\tPu1nPMkoGUcO\\tUF0yWD0cGVp6\\tACTIVATES\",\"WfTDsR48HJ8K\\t-swYow3RF5GO\\tKkBOpjMSGBEp\\tINHIBITS\",\"mHie46k1HIGn\\tprbNZ7N4F2yz\\t-swYow3RF5GO\\tINHIBITS\",\"EJXQGmWDCfcZ\\ttR7G7jSMFyKn\\tS0n0th2eCfb9\\tACTIVATES\",\"naU-KiGLHOkS\\tOUtOuzrFGWsp\\tKkBOpjMSGBEp\\tINHIBITS\",\"lU11XAdWHRyG\\tm6QJybSmGSEj\\tUF0yWD0cGVp6\\tINHIBITS\",\"hgYpZiWwHLEw\\tKkBOpjMSGBEp\\tBNAC4UcvF_fD\\tINHIBITS\"],\"HNSC-2015-Notch-signaling-pathway\":[\"HNSC-2015-Notch-signaling-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"TP63\\t0_tmgKZGEdGo\\tGENE\\t-1\\t290\\t306\\t\",\"Differentiation\\teeVhg40NEiK2\\tPROCESS\\t-1\\t553\\t481\\t\",\"CTNNB1\\tB311fstqEcj1\\tGENE\\t-1\\t485\\t306\\t\",\"FAT1\\tKm28lPDkEe1-\\tGENE\\t-1\\t676\\t253\\t\",\"AJUBA\\txmIHMSMOEfhM\\tGENE\\t-1\\t676\\t350\\t\",\"NFE2L2\\tuBK84iGaEx2k\\tGENE\\t-1\\t835\\t108\\t\",\"Inflammation angiogenesis migration\\tcVmq2gc7EhfK\\tPROCESS\\t-1\\t290\\t480\\t\",\"NOTCH\\tM36IzzXCEbYd\\tFAMILY\\t-1\\t485\\t108\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"ICbcotEzE6EA\\tKm28lPDkEe1-\\tB311fstqEcj1\\tINHIBITS\",\"wuF8plb4E1Me\\tuBK84iGaEx2k\\tM36IzzXCEbYd\\tACTIVATES\",\"aGzvs7zSE3y2\\t0_tmgKZGEdGo\\tM36IzzXCEbYd\\tINHIBITS\",\"3EBZZzaxE5Fm\\tM36IzzXCEbYd\\tB311fstqEcj1\\tINHIBITS\",\"_u545Mo9E_ul\\t0_tmgKZGEdGo\\teeVhg40NEiK2\\tINHIBITS\",\"n1ZzhYJJE6z0\\txmIHMSMOEfhM\\tB311fstqEcj1\\tINHIBITS\",\"qJsbtzEME7xA\\tB311fstqEcj1\\teeVhg40NEiK2\\tINHIBITS\",\"qbufdsXRFBiJ\\t0_tmgKZGEdGo\\tcVmq2gc7EhfK\\tACTIVATES\",\"XfMK86WqE21I\\tM36IzzXCEbYd\\t0_tmgKZGEdGo\\tINHIBITS\"],\"HNSC-2015-Oxidative-stress-response-pathway\":[\"HNSC-2015-Oxidative-stress-response-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"NFE2L2\\tgt4I0Om0FTv6\\tGENE\\t-1\\t436\\t285\\t\",\"KEAP1\\tZsX3OXk3FSsm\\tGENE\\t-1\\t529\\t167\\t\",\"NOTCH\\tBvJxfxK3FnBO\\tGENE\\t-1\\t169\\t285\\t\",\"CUL3\\tIcPGDcXRFSKm\\tGENE\\t-1\\t339\\t167\\t\",\"Oxidative damage\\tfVzq-7uHFVEN\\tPROCESS\\t-1\\t436\\t413\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"EnpWtdTqFdCy\\tIcPGDcXRFSKm\\tgt4I0Om0FTv6\\tINHIBITS\",\"evdmv52VFpzm\\tgt4I0Om0FTv6\\tBvJxfxK3FnBO\\tACTIVATES\",\"cPEAdB0SFfMR\\tgt4I0Om0FTv6\\tfVzq-7uHFVEN\\tACTIVATES\",\"H-KG07b7Fd8r\\tZsX3OXk3FSsm\\tgt4I0Om0FTv6\\tINHIBITS\"],\"HNSC-2015-RTK-RAS-PI(3)K-pathway\":[\"HNSC-2015-RTK-RAS-PI(3)K-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"PIK3CA\\txi9Q36e2CS_G\\tGENE\\t-1\\t540\\t244\\t\",\"NF-kB\\tOOiOvVaWCyaI\\tGENE\\t-1\\t878\\t459\\t\",\"HRAS\\tCh4RV-nlCR-8\\tGENE\\t-1\\t320\\t244\\t\",\"IGF1R\\tYDvyAEat8pkt\\tGENE\\tYgFgrMTKCakc\\t850\\t145\\t\",\"ERBB2\\to8fELaID8pjp\\tGENE\\tYgFgrMTKCakc\\t385\\t145\\t\",\"EGFR\\tmYeWqovL8pkK\\tGENE\\tYgFgrMTKCakc\\t227\\t145\\t\",\"RTK\\tYgFgrMTKCakc\\tFAMILY\\t-1\\t538\\t145\\t\",\"FGFR1\\ts8sttQyx8pj-\\tGENE\\tYgFgrMTKCakc\\t541\\t145\\t\",\"PTEN\\tWh8DCYlCCT_j\\tGENE\\t-1\\t722\\t244\\t\",\"CCND1\\ts_2ubRksCYIg\\tGENE\\t-1\\t403\\t337\\t\",\"MYC\\tM33a4yWMGH-j\\tGENE\\t-1\\t540\\t459\\t\",\"FGFR3\\t-jbsv2rK8pkb\\tGENE\\tYgFgrMTKCakc\\t696\\t145\\t\",\"Cell cycle and survival\\tNZQP-jwUGJDJ\\tPROCESS\\t-1\\t540\\t568\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"Vp8BMTADCsgK\\tYgFgrMTKCakc\\txi9Q36e2CS_G\\tACTIVATES\",\"zMOtnYBFCu5s\\txi9Q36e2CS_G\\ts_2ubRksCYIg\\tACTIVATES\",\"P2bwQGViCuNZ\\tCh4RV-nlCR-8\\ts_2ubRksCYIg\\tACTIVATES\",\"9-cqR59DCtQQ\\tWh8DCYlCCT_j\\txi9Q36e2CS_G\\tINHIBITS\",\"kFlNIRpWC2i-\\txi9Q36e2CS_G\\tOOiOvVaWCyaI\\tACTIVATES\",\"S3jvgVzsGPMY\\txi9Q36e2CS_G\\tM33a4yWMGH-j\\tACTIVATES\",\"GnyxNL7aCqke\\tYgFgrMTKCakc\\tCh4RV-nlCR-8\\tACTIVATES\",\"rrzkeHNUGQDo\\tM33a4yWMGH-j\\tNZQP-jwUGJDJ\\tACTIVATES\"],\"KIRC-2013-RTK-RAS-PI(3)K-pathway\":[\"KIRC-2013-RTK-RAS-PI(3)K-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"TSC1\\tuggsxb8--Aro\\tGENE\\txqEGjsx0iLFB\\t702\\t215\\t\",\"RHEB\\tB86G1W3Bjaf-\\tGENE\\t-1\\t653\\t670\\t\",\"TSC2\\tYkjc8ADw-rzF\\tGENE\\tkKqxit2Aj0o5\\t727\\t575\\t\",\"4E-BP1\\tunH_CS0VjeEN\\tGENE\\t-1\\t755\\t833\\t\",\"TSC\\tkKqxit2Aj0o5\\tFAMILY\\t-1\\t647\\t575\\t\",\"RHEB\\t2laMuTAjiL1w\\tGENE\\t-1\\t891\\t255\\t\",\"HIF1a\\taDLkX3Z9j92r\\tGENE\\t-1\\t755\\t918\\t\",\"GRB10\\tx5Guo0spjf2e\\tGENE\\t-1\\t839\\t414\\t\",\"MTOR\\tMC8l6rXMiOdd\\tGENE\\t-1\\t1074\\t255\\t\",\"TSC\\txqEGjsx0iLFB\\tFAMILY\\t-1\\t702\\t249\\t\",\"SQSTM1\\txQtLvkz9iNc7\\tGENE\\t-1\\t943\\t153\\t\",\"TSC1\\tJ-ydcJGW-rzg\\tGENE\\tkKqxit2Aj0o5\\t568\\t575\\t\",\"EGFR\\tQFhgkr8diB8z\\tGENE\\t-1\\t164\\t312\\t\",\"PI3K\\tbHiksp77jREY\\tFAMILY\\t-1\\t560\\t414\\t\",\"AKT\\t-Wom9AxOiG4E\\tGENE\\t-1\\t528\\t255\\t\",\"mTORC2\\tdbgxtYHIjWfx\\tGENE\\t-1\\t478\\t493\\t\",\"MiR21\\tGmrxvGcKjTyz\\tGENE\\t-1\\t332\\t533\\t\",\"PIK3CA\\tGBWHCv3viEa6\\tGENE\\t-1\\t354\\t255\\t\",\"IGF1R\\tozct1VALiSY1\\tGENE\\t-1\\t165\\t216\\t\",\"VHL\\t0_wT5Rrrj_Rx\\tGENE\\t-1\\t935\\t919\\t\",\"mTORC1\\tcYFqGJE4jcVJ\\tGENE\\t-1\\t653\\t750\\t\",\"TSC2\\tj9ld37Vz-AsM\\tGENE\\txqEGjsx0iLFB\\t702\\t283\\t\",\"PTEN\\tW2_xSgDziDku\\tGENE\\t-1\\t354\\t174\\t\",\"AKT\\t7HbV79PdjsOU\\tFAMILY\\t-1\\t653\\t494\\t\",\"GNB2L1\\tSfiCTcbNiA5M\\tGENE\\t-1\\t88\\t112\\t\",\"PTEN\\twRO7VWWjjSA-\\tGENE\\t-1\\t332\\t414\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"OpzjVyUGkJHV\\tGmrxvGcKjTyz\\twRO7VWWjjSA-\\tINHIBITS\",\"18MKxE0wiw13\\txqEGjsx0iLFB\\t2laMuTAjiL1w\\tINHIBITS\",\"G-HTkvEckQ4C\\tB86G1W3Bjaf-\\tcYFqGJE4jcVJ\\tACTIVATES\",\"04k9T_t2itkQ\\tW2_xSgDziDku\\tGBWHCv3viEa6\\tINHIBITS\",\"TqPzh3WykXc5\\tunH_CS0VjeEN\\tx5Guo0spjf2e\\tACTIVATES\",\"S7T11oBFisjk\\tQFhgkr8diB8z\\tGBWHCv3viEa6\\tACTIVATES\",\"ahebq1NykUH5\\tunH_CS0VjeEN\\taDLkX3Z9j92r\\tACTIVATES\",\"6najj9ABkSVJ\\tcYFqGJE4jcVJ\\tunH_CS0VjeEN\\tACTIVATES\",\"qPyUZvk3kMq-\\tdbgxtYHIjWfx\\t7HbV79PdjsOU\\tACTIVATES\",\"qHd1pkOTiy5k\\t2laMuTAjiL1w\\tMC8l6rXMiOdd\\tACTIVATES\",\"aPTPKe-XkVXQ\\t0_wT5Rrrj_Rx\\taDLkX3Z9j92r\\tINHIBITS\",\"8vMP0eF_kPj5\\tkKqxit2Aj0o5\\tB86G1W3Bjaf-\\tINHIBITS\",\"NZt5xBGSkYb0\\tx5Guo0spjf2e\\tbHiksp77jREY\\tINHIBITS\",\"3fJZoOEQkKNq\\tbHiksp77jREY\\tdbgxtYHIjWfx\\tACTIVATES\",\"rAhe36tpix6d\\txQtLvkz9iNc7\\tMC8l6rXMiOdd\\tINDUCES\",\"CAu1f-WdkHx4\\twRO7VWWjjSA-\\tbHiksp77jREY\\tINHIBITS\",\"4vMHKnyOkLIf\\tbHiksp77jREY\\t7HbV79PdjsOU\\tACTIVATES\",\"J7kaij8Aivlh\\t-Wom9AxOiG4E\\txqEGjsx0iLFB\\tINHIBITS\",\"fT5lfcHziqX2\\tSfiCTcbNiA5M\\tozct1VALiSY1\\tINDUCES\",\"_2k1_2B-iri2\\tozct1VALiSY1\\tGBWHCv3viEa6\\tACTIVATES\",\"kxVoCQxViupL\\tGBWHCv3viEa6\\t-Wom9AxOiG4E\\tACTIVATES\",\"7jMvZJMZkN4v\\t7HbV79PdjsOU\\tkKqxit2Aj0o5\\tINHIBITS\"],\"LUAD-2014-Cell-cycle-signaling-pathway\":[\"LUAD-2014-Cell-cycle-signaling-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"CCND1\\tYWcsnrJvCMfJ\\tGENE\\tEaAZ2J517xuW\\t365\\t177\\t\",\"RB1\\t-65hVCUu7wNj\\tGENE\\t-1\\t521\\t303\\t\",\"CDKN2A\\tyiKTF0xl7qs-\\tGENE\\t-1\\t521\\t88\\t\",\"CYCLINS\\tEaAZ2J517xuW\\tFAMILY\\t-1\\t521\\t177\\t\",\"CDK4\\tpYVVzOz7CMfp\\tGENE\\tEaAZ2J517xuW\\t521\\t177\\t\",\"Cell cycle progression\\tSBA7nphX7zI1\\tPROCESS\\t-1\\t521\\t400\\t\",\"CCNE1\\t0FQDESQiCMfb\\tGENE\\tEaAZ2J517xuW\\t676\\t177\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"EbOzzWJa8KyF\\tEaAZ2J517xuW\\t-65hVCUu7wNj\\tINHIBITS\",\"eB12pAOW8MCi\\t-65hVCUu7wNj\\tSBA7nphX7zI1\\tACTIVATES\",\"u6mSj8wD8Jp9\\tyiKTF0xl7qs-\\tEaAZ2J517xuW\\tINHIBITS\"],\"LUAD-2014-Histone-modification-pathway\":[\"LUAD-2014-Histone-modification-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"SETD2\\tTEmP07vg8mqu\\tGENE\\t-1\\t678\\t182\\t\",\"ARID1B\\tZC3AHrzf8h-f\\tGENE\\t-1\\t379\\t168\\t\",\"Histone methylation\\toQNlmw1I8ng2\\tPROCESS\\t-1\\t678\\t333\\t\",\"ARID2\\tUWhx7SxC8jmN\\tGENE\\t-1\\t226\\t244\\t\",\"ARID1A\\t0ddAggf58hhA\\tGENE\\t-1\\t226\\t168\\t\",\"Nucleosome remodeling\\tkv9VBnuH8l5E\\tPROCESS\\t-1\\t306\\t341\\t\",\"SMARCA4\\t6xqXYMOE8kSp\\tGENE\\t-1\\t379\\t244\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"7D5lYDIi83WM\\tZC3AHrzf8h-f\\tkv9VBnuH8l5E\\tACTIVATES\",\"C0gJJbpq84Fz\\t6xqXYMOE8kSp\\tkv9VBnuH8l5E\\tACTIVATES\",\"_MCNndis82m-\\tUWhx7SxC8jmN\\tkv9VBnuH8l5E\\tACTIVATES\",\"fc6_K-lT85Yv\\tTEmP07vg8mqu\\toQNlmw1I8ng2\\tACTIVATES\",\"PkwUIXyU81xJ\\t0ddAggf58hhA\\tkv9VBnuH8l5E\\tACTIVATES\"],\"LUAD-2014-Oxidative-stress-response-pathway\":[\"LUAD-2014-Oxidative-stress-response-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"KEAP1\\tx6qal2M_6fp6\\tGENE\\t-1\\t292\\t147\\t\",\"NFE2L2\\t3OAnmFLj6kBV\\tGENE\\t-1\\t381\\t244\\t\",\"CUL3\\tax7M8UNp6gH0\\tGENE\\t-1\\t460\\t147\\t\",\"Oxidative stress response\\tqQRuLibB6k26\\tPROCESS\\t-1\\t381\\t345\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"puzswCQS65LP\\tx6qal2M_6fp6\\t3OAnmFLj6kBV\\tINHIBITS\",\"ASasYVxW65_T\\tax7M8UNp6gH0\\t3OAnmFLj6kBV\\tINHIBITS\",\"5XC9ZlAR67EJ\\t3OAnmFLj6kBV\\tqQRuLibB6k26\\tINHIBITS\"],\"LUAD-2014-RTK-RAS-PI(3)K-pathway\":[\"LUAD-2014-RTK-RAS-PI(3)K-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"KRAS\\thCWC-xR96DqX\\tGENE\\t0aa7a88C5GOW\\t612\\t170\\t\",\"EGFR\\tR5V3H_6E6eEo\\tGENE\\tmFXQLvHD4isJ\\t304\\t68\\t\",\"RAS\\t0aa7a88C5GOW\\tFAMILY\\t-1\\t690\\t202\\t\",\"MAP2K1\\tcwgYdqrk4hBA\\tGENE\\t-1\\t690\\t439\\t\",\"PIK3R1\\tbqBJhHco4YrE\\tGENE\\t-1\\t149\\t251\\t\",\"TSC2\\tY9HFp8YO-n8e\\tGENE\\tEXtYcXdy4Qsz\\t470\\t384\\t\",\"Translation\\t9M7XTM_-4WR7\\tPROCESS\\t-1\\t781\\t637\\t\",\"AKT1\\t25v4OB1H4IlR\\tGENE\\t-1\\t393\\t279\\t\",\"STK11\\ts7zEz-oY4ag8\\tGENE\\t-1\\t149\\t322\\t\",\"ALK\\tpjtEjnD36eE_\\tGENE\\tmFXQLvHD4isJ\\t773\\t68\\t\",\"AMPK\\tFyui5tkl4cr5\\tGENE\\t-1\\t149\\t390\\t\",\"NRAS\\tnKsKU-PQ6DrJ\\tGENE\\t0aa7a88C5GOW\\t768\\t170\\t\",\"Proliferation\\tecQpjv9Q4Urm\\tPROCESS\\t-1\\t465\\t637\\t\",\"HRAS\\tup6fI0q16Dq0\\tGENE\\t0aa7a88C5GOW\\t612\\t233\\t\",\"NF1\\tQkA8DtgZ4Feb\\tGENE\\t-1\\t988\\t207\\t\",\"ERBB2\\tEXN40CQ46eDV\\tGENE\\tmFXQLvHD4isJ\\t458\\t68\\t\",\"ROS1\\twLhuE7H66eEA\\tGENE\\tmFXQLvHD4isJ\\t1076\\t68\\t\",\"TSC1\\tj4o-n6HA-n8F\\tGENE\\tEXtYcXdy4Qsz\\t316\\t384\\t\",\"RIT1\\ttYpKvL066Dru\\tGENE\\t0aa7a88C5GOW\\t768\\t233\\t\",\"RET\\tds40mB756eC4\\tGENE\\tmFXQLvHD4isJ\\t925\\t68\\t\",\"PTEN\\tua2-F70X4XuC\\tGENE\\t-1\\t149\\t178\\t\",\"Cell survival\\tNmj0_LZZ4VXj\\tPROCESS\\t-1\\t622\\t637\\t\",\"MTOR\\tNCFq_dYD4Py9\\tGENE\\t-1\\t393\\t542\\t\",\"TSC\\tEXtYcXdy4Qsz\\tFAMILY\\t-1\\t393\\t384\\t\",\"MET\\tTXeWKOZB6eDs\\tGENE\\tmFXQLvHD4isJ\\t609\\t68\\t\",\"BRAF\\t8-YqWx2X4f5G\\tGENE\\t-1\\t690\\t365\\t\",\"PIK3CA\\t8Qu-Lwni4HZ-\\tGENE\\t-1\\t393\\t178\\t\",\"RTK\\tmFXQLvHD4isJ\\tFAMILY\\t-1\\t690\\t68\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"IBP-n3fS5SVk\\tcwgYdqrk4hBA\\t9M7XTM_-4WR7\\tACTIVATES\",\"gUN_eI4KYtT7\\tNCFq_dYD4Py9\\tecQpjv9Q4Urm\\tACTIVATES\",\"m9Gf2Xzf5WX3\\tEXtYcXdy4Qsz\\tNCFq_dYD4Py9\\tACTIVATES\",\"yqPnLI4M5aT7\\tFyui5tkl4cr5\\tNCFq_dYD4Py9\\tACTIVATES\",\"lIoLBw5O5RdC\\tcwgYdqrk4hBA\\tNmj0_LZZ4VXj\\tACTIVATES\",\"qg8iuvID5Mhz\\t0aa7a88C5GOW\\t8-YqWx2X4f5G\\tACTIVATES\",\"o72iUn2l5c3a\\tua2-F70X4XuC\\t8Qu-Lwni4HZ-\\tINHIBITS\",\"j1x2CWxh5Iy4\\tmFXQLvHD4isJ\\t0aa7a88C5GOW\\tACTIVATES\",\"EuuexlE5Y05b\\tNCFq_dYD4Py9\\t9M7XTM_-4WR7\\tACTIVATES\",\"8Uu5IYEq5KQg\\tQkA8DtgZ4Feb\\t0aa7a88C5GOW\\tINHIBITS\",\"2pXFnqhL5OzR\\tcwgYdqrk4hBA\\tecQpjv9Q4Urm\\tACTIVATES\",\"gE5bPX0c5VDK\\t25v4OB1H4IlR\\tEXtYcXdy4Qsz\\tINHIBITS\",\"HshnmzcdYu-I\\tNCFq_dYD4Py9\\tNmj0_LZZ4VXj\\tACTIVATES\",\"UuK2Sd1m5T5a\\t8Qu-Lwni4HZ-\\t25v4OB1H4IlR\\tACTIVATES\",\"pSaMDCCD5eRf\\tbqBJhHco4YrE\\t8Qu-Lwni4HZ-\\tINHIBITS\",\"6eV4lZbQYv3r\\tNCFq_dYD4Py9\\tNmj0_LZZ4VXj\\tACTIVATES\",\"VFskMcwI5bY7\\ts7zEz-oY4ag8\\tFyui5tkl4cr5\\tACTIVATES\",\"zPkLVdf35NoU\\t8-YqWx2X4f5G\\tcwgYdqrk4hBA\\tACTIVATES\"],\"LUAD-2014-TP53-pathway\":[\"LUAD-2014-TP53-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"TP53\\tCQjbRdgs7ItD\\tGENE\\t-1\\t436\\t249\\t\",\"Cell survival\\tSVkWhzV37N80\\tPROCESS\\t-1\\t510\\t348\\t\",\"Proliferation\\tfz0X8H7D7J7L\\tPROCESS\\t-1\\t342\\t347\\t\",\"ATM\\tgjYBW9Ea7HZc\\tGENE\\t-1\\t510\\t151\\t\",\"MDM2\\tSdbPatXY7HDu\\tGENE\\t-1\\t342\\t151\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"npAcARys7a_k\\tCQjbRdgs7ItD\\tSVkWhzV37N80\\tINHIBITS\",\"VGJAIfU07X_O\\tSdbPatXY7HDu\\tCQjbRdgs7ItD\\tINHIBITS\",\"yaRRpgbw7aKj\\tCQjbRdgs7ItD\\tfz0X8H7D7J7L\\tINHIBITS\",\"6yEDoser7Y_S\\tgjYBW9Ea7HZc\\tCQjbRdgs7ItD\\tACTIVATES\"],\"LUSC-2012-Notch-signaling-pathway\":[\"LUSC-2012-Notch-signaling-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"TP63\\tjwpnNGJWSGmo\\tGENE\\t-1\\t665\\t118\\t\",\"NOTCH1\\tuCLr0FZ-DVjI\\tGENE\\tqDU9qUkVWgQy\\t307\\t245\\t\",\"NOTCH\\tqDU9qUkVWgQy\\tFAMILY\\t-1\\t385\\t245\\t\",\"FOXP1\\tOQXnexCbWaQC\\tGENE\\t-1\\t781\\t245\\t\",\"NOTCH2\\t8xqf1lEoDVjf\\tGENE\\tqDU9qUkVWgQy\\t462\\t245\\t\",\"SOX2\\tz9OhKjOpSGPy\\tGENE\\t-1\\t392\\t118\\t\",\"ASCL4\\tB7vcA7ATWYcn\\tGENE\\t-1\\t624\\t245\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"PLEAy9rIWrEw\\tz9OhKjOpSGPy\\tqDU9qUkVWgQy\\tINHIBITS\",\"JC1sUBM-WtKp\\tz9OhKjOpSGPy\\tB7vcA7ATWYcn\\tINHIBITS\",\"lP_hmn57Wt5k\\tz9OhKjOpSGPy\\tOQXnexCbWaQC\\tINHIBITS\",\"NJbf1vyhWr_5\\tjwpnNGJWSGmo\\tqDU9qUkVWgQy\\tINHIBITS\"],\"LUSC-2012-Oxidative-stress-response-pathway\":[\"LUSC-2012-Oxidative-stress-response-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"CUL3\\tlReeCCfNRhiB\\tGENE\\t-1\\t567\\t154\\t\",\"NFE2L2\\tb31Gx6nxRij2\\tGENE\\t-1\\t480\\t256\\t\",\"KEAP1\\t74W2ldwARhHq\\tGENE\\t-1\\t381\\t154\\t\",\"Oxidative stress response\\tHZ9RxRrPRkFz\\tPROCESS\\t-1\\t480\\t363\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"RQOk_9p-Rv2F\\tb31Gx6nxRij2\\tHZ9RxRrPRkFz\\tACTIVATES\",\"CT9Gtmm5Rqtm\\t74W2ldwARhHq\\tb31Gx6nxRij2\\tINHIBITS\",\"HHBAbZS1Rto5\\tlReeCCfNRhiB\\tb31Gx6nxRij2\\tINHIBITS\"],\"LUSC-2012-RTK-RAS-PI(3)K-pathway\":[\"LUSC-2012-RTK-RAS-PI(3)K-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"FGFR1\\tMvptxoO61bRr\\tGENE\\tyiHWlSi0ZceY\\t1097\\t185\\t\",\"KRAS\\tsWfNqwir1dxE\\tGENE\\twfQD-GssZd01\\t894\\t292\\t\",\"PTEN\\tZymRaEU8XIRY\\tGENE\\t-1\\t188\\t185\\t\",\"ERBB3\\tRm4wq0_z1bQa\\tGENE\\tyiHWlSi0ZceY\\t936\\t185\\t\",\"Proliferation\\tP8EboRv6ZME9\\tPROCESS\\t-1\\t494\\t543\\t\",\"AMPK\\t02umJdNsXOpl\\tGENE\\t-1\\t42\\t405\\t\",\"RTK\\tyiHWlSi0ZceY\\tFAMILY\\t-1\\t1023\\t185\\t\",\"AKT\\toxyofYva1T05\\tFAMILY\\t-1\\t389\\t292\\t\",\"AKT2\\tlarrnE_S1WJv\\tGENE\\toxyofYva1T05\\t389\\t292\\t\",\"RAS\\twfQD-GssZd01\\tFAMILY\\t-1\\t894\\t292\\t\",\"Translation\\tHR4vBeq2ZNsn\\tPROCESS\\t-1\\t798\\t543\\t\",\"NF1\\tiabVj2PwYZp2\\tGENE\\t-1\\t1250\\t339\\t\",\"FGFR3\\t2C2nCxu91bRd\\tGENE\\tyiHWlSi0ZceY\\t1424\\t185\\t\",\"STK11\\tO4y17G4EXLUD\\tGENE\\t-1\\t-49\\t300\\t\",\"EGFR\\tAx89UA0r1bQ9\\tGENE\\tyiHWlSi0ZceY\\t622\\t185\\t\",\"TSC2\\tzY7tgwSJ1XbR\\tGENE\\tqLC0RZ4XXsZX\\t403\\t380\\t\",\"TSC\\tqLC0RZ4XXsZX\\tFAMILY\\t-1\\t324\\t380\\t\",\"MTOR\\t9xgTtYW2XQeX\\tGENE\\t-1\\t147\\t480\\t\",\"RASA1\\tDvdwOn2xYWd3\\tGENE\\t-1\\t1250\\t270\\t\",\"AKT3\\tzzXDUqB91WKC\\tGENE\\toxyofYva1T05\\t546\\t292\\t\",\"FGFR2\\tXUUZCJbJ1bRO\\tGENE\\tyiHWlSi0ZceY\\t1259\\t185\\t\",\"PI3K\\tFq9ew-K6XKj-\\tFAMILY\\t-1\\t383\\t185\\t\",\"NRAS\\tW0krGYlI1dxY\\tGENE\\twfQD-GssZd01\\t1054\\t292\\t\",\"ERBB2\\ttKS__G_N1bQt\\tGENE\\tyiHWlSi0ZceY\\t780\\t185\\t\",\"AKT1\\tO_LJqz4I1WJd\\tGENE\\toxyofYva1T05\\t232\\t292\\t\",\"HRAS\\tXIj4ze_l1dxl\\tGENE\\twfQD-GssZd01\\t734\\t292\\t\",\"Cell survival\\tnNugUqXiZNB6\\tPROCESS\\t-1\\t644\\t543\\t\",\"BRAF\\tT1CL0I79YgGR\\tGENE\\t-1\\t894\\t405\\t\",\"PIK3CA\\tcykG-Tsv1fu4\\tGENE\\tFq9ew-K6XKj-\\t383\\t185\\t\",\"TSC1\\t1paUtI_G1Xbd\\tGENE\\tqLC0RZ4XXsZX\\t245\\t380\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"QLi86o6iaTAU\\tT1CL0I79YgGR\\tnNugUqXiZNB6\\tACTIVATES\",\"gB5T8yfp3IU3\\t9xgTtYW2XQeX\\tHR4vBeq2ZNsn\\tACTIVATES\",\"sXH_uS-e1T1m\\toxyofYva1T05\\tHR4vBeq2ZNsn\\tACTIVATES\",\"WUv8Ij4AaR-n\\tT1CL0I79YgGR\\tP8EboRv6ZME9\\tACTIVATES\",\"RCM2k2xJ1T1r\\toxyofYva1T05\\tqLC0RZ4XXsZX\\tINHIBITS\",\"4bGJbkzlaO_3\\tDvdwOn2xYWd3\\twfQD-GssZd01\\tINHIBITS\",\"awuopxpi1T1c\\toxyofYva1T05\\tP8EboRv6ZME9\\tACTIVATES\",\"WURhbp8YX5ol\\tO4y17G4EXLUD\\t02umJdNsXOpl\\tACTIVATES\",\"fTcRATeQaEYa\\twfQD-GssZd01\\tT1CL0I79YgGR\\tACTIVATES\",\"-RCFsGxvaQmo\\tiabVj2PwYZp2\\twfQD-GssZd01\\tINHIBITS\",\"9dW1i3sN3Gtu\\t9xgTtYW2XQeX\\tP8EboRv6ZME9\\tACTIVATES\",\"Uc5AjjxV3HcN\\t9xgTtYW2XQeX\\tnNugUqXiZNB6\\tACTIVATES\",\"vYmJjY8pX14b\\tZymRaEU8XIRY\\tFq9ew-K6XKj-\\tINHIBITS\",\"pzSfIS3bX6g_\\t02umJdNsXOpl\\t9xgTtYW2XQeX\\tACTIVATES\",\"3eElg70UaNdN\\tyiHWlSi0ZceY\\twfQD-GssZd01\\tACTIVATES\",\"-GLnxzAk1T1w\\toxyofYva1T05\\tnNugUqXiZNB6\\tACTIVATES\",\"eDF8oz7ZaT8J\\tT1CL0I79YgGR\\tHR4vBeq2ZNsn\\tACTIVATES\",\"vecmsBiI1T1S\\tFq9ew-K6XKj-\\toxyofYva1T05\\tACTIVATES\"],\"MYC\":[\"MYC\",\"\",\"Involves a number of transcription regulation complexes: MYC-MAX, MAX-MXD, MAX-MGA, and the energy sensing, MondoA-Mlx complex in the regulation of apoptotic response and cell differentiation.\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"MXD1\\tYd6m7-sCeh37\\tGENE\\tTrTubnzSeh3h\\t151\\t436\",\"MXD4\\tplDFXS0peh30\\tGENE\\tTrTubnzSeh3h\\t488\\t436\",\"MXI1\\tdNmw_8oVeh3k\\tGENE\\tTrTubnzSeh3h\\t651\\t436\",\"MGA\\tGt92f6Iyeh3a\\tGENE\\tLwRHv9NUeh3R\\t580\\t310\",\"MYC/MAX Complex\\tOCJ3wBBPeh4J\\tCOMPLEX\\t-1\\t479\\t172\",\"MYC\\tKDr5caJdeh4X\\tGENE\\tOCJ3wBBPeh4J\\t313\\t172\",\"MYCL\\tm1nG2P8zeh4p\\tGENE\\tOCJ3wBBPeh4J\\t645\\t173\",\"MLXIPL\\t6ZvsmDKBeh3H\\tGENE\\tIuhA7dyleh3B\\t571\\t658\",\"MAX/MXD Complex\\tTrTubnzSeh3h\\tCOMPLEX\\t-1\\t483\\t436\",\"MAX\\tyGKkO3Ajeh3V\\tGENE\\tLwRHv9NUeh3R\\t344\\t310\",\"MXD3\\ta19O0LiCeh3p\\tGENE\\tTrTubnzSeh3h\\t323\\t436\",\"MLXIP\\tO9V1RuKxeh3K\\tGENE\\tIuhA7dyleh3B\\t395\\t656\",\"MLX\\teH1TNcCVeh3F\\tGENE\\tIuhA7dyleh3B\\t490\\t550\",\"MYCN\\tMn3yUjZveh4v\\tGENE\\tOCJ3wBBPeh4J\\t478\\t173\",\"MLX/MONDO Complex\\tIuhA7dyleh3B\\tCOMPLEX\\t-1\\t483\\t604\",\"MNT\\tmfvZ3Tqreh3u\\tGENE\\tTrTubnzSeh3h\\t815\\t436\",\"MAX/MGA Complex\\tLwRHv9NUeh3R\\tCOMPLEX\\t-1\\t462\\t310\",\"Cell growth, proliferation, apoptosis\\trU4TiKfKeh43\\tPROCESS\\t-1\\t-237\\t433\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPEINTERACTION_PUBMED_ID\",\"w4MBdulYeh48\\tOCJ3wBBPeh4J\\tyGKkO3Ajeh3V\\tBINDS\\t\",\"kmXInTa9eh5O\\t6ZvsmDKBeh3H\\teH1TNcCVeh3F\\tBINDS\\t\",\"Hv8GfgZPeh5T\\tyGKkO3Ajeh3V\\tGt92f6Iyeh3a\\tNONE\\t\",\"9h-taWpfeh5Z\\tLwRHv9NUeh3R\\trU4TiKfKeh43\\tINHIBITS\\t\",\"eTpDGcg6eh5B\\tOCJ3wBBPeh4J\\trU4TiKfKeh43\\tACTIVATES\\t\",\"mfpvepQNeh5c\\tTrTubnzSeh3h\\tIuhA7dyleh3B\\tBINDS\\t\",\"QJOD8bddeh5I\\tIuhA7dyleh3B\\trU4TiKfKeh43\\tACTIVATES\\t\",\"9ShDYkfTeh5Q\\tO9V1RuKxeh3K\\teH1TNcCVeh3F\\tBINDS\\t\",\"Vfrm_1Ezeh5E\\tTrTubnzSeh3h\\trU4TiKfKeh43\\tINHIBITS\\t\",\"nrV2aZn8eh5L\\tyGKkO3Ajeh3V\\tTrTubnzSeh3h\\tBINDS\\t\"],\"NOTCH\":[\"NOTCH\",\"\",\"Pathway involved in cell-cell communication, cell fate. Cleavage of Notch receptors leads to the displacement of a transcription repressor complex on RBPJ (a transcription factor also known as CSL) accompanied by recruitment of an activation complex (including MAMLs) leads to transcription of Notch target genes.\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"NRARP\\tIyt-kiQdVYR4\\tGENE\\t-1\\t1392\\t357\",\"CUL1\\tORzx_8_5UAjR\\tGENE\\t-1\\t861\\t171\",\"CREBBP\\thrOQVgOCWtHH\\tGENE\\tamGWWOzfWrg1\\t1006\\t344\",\"NCOR2\\ttRKlqV2HWQET\\tGENE\\t1WQdsd0RVSHH\\t919\\t500\",\"SPEN\\tt3mLgYfBWQD4\\tGENE\\t1WQdsd0RVSHH\\t1078\\t439\",\"NOTCH3\\t2YXLvEuJWVnS\\tGENE\\tfLn2ytnZVU-1\\t386\\t344\",\" \\tamGWWOzfWrg1\\tCOMPLEX\\t-1\\t1089\\t309\",\"CNTN6\\t8xDiqqMtUlgK\\tGENE\\t-1\\t153\\t344\",\"HES-X\\tCCp9TqYNVWpA\\tGENE\\t-1\\t1392\\t221\",\"KAT2B\\tW6JlNq1wWtHA\\tGENE\\tamGWWOzfWrg1\\t1171\\t274\",\"KDM5A\\tTHgZUx73WQED\\tGENE\\t1WQdsd0RVSHH\\t1240\\t439\",\"DNER\\t8lwlJT8zUt7J\\tGENE\\t-1\\t386\\t439\",\"NCOR1\\tVh9n-uUkWQDu\\tGENE\\t1WQdsd0RVSHH\\t917\\t440\",\"CLEAVED NOTCH\\tH-nBa6GpUrhI\\tCOMPLEX\\t-1\\t781\\t316\",\"FBXW7\\t5nfQJAxjT_z9\\tGENE\\t-1\\t630\\t171\",\" \\t1WQdsd0RVSHH\\tFAMILY\\t-1\\t1079\\t469\",\"NOTCH1\\tVG_45lkLWVm6\\tGENE\\tfLn2ytnZVU-1\\t386\\t274\",\"MALM3\\tdAIql3LLWtG5\\tGENE\\tamGWWOzfWrg1\\t1007\\t274\",\"NOV\\tfhalsWFrUkbl\\tGENE\\t-1\\t153\\t274\",\"JAG2\\tEjlh1U2VT-P2\\tGENE\\t-1\\t285\\t171\",\" \\tfLn2ytnZVU-1\\tCOMPLEX\\t-1\\t472\\t309\",\"HEY-X\\t0mJB_ECxVXFr\\tGENE\\t-1\\t1392\\t288\",\"PSEN2\\tXzuk75kgUufI\\tGENE\\t-1\\t558\\t439\",\"EP300\\tq34LVe78WtHT\\tGENE\\tamGWWOzfWrg1\\t1170\\t344\",\"NOTCH2\\tYBZcjlo4WVnH\\tGENE\\tfLn2ytnZVU-1\\t558\\t274\",\"ARRDC1\\tQj8O9GJNT_AD\\tGENE\\t-1\\t454\\t171\",\"NOTCH4\\tQf89YkiEWVne\\tGENE\\tfLn2ytnZVU-1\\t558\\t344\",\"Cell growth, apoptosis\\tNvu3J1djU_IC\\tPROCESS\\t-1\\t1562\\t439\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPEINTERACTION_PUBMED_ID\",\"3ZGBwutXWvCf\\t1WQdsd0RVSHH\\tamGWWOzfWrg1\\tINHIBITS\\t\",\"ojk1D4nOWbct\\tEjlh1U2VT-P2\\tfLn2ytnZVU-1\\tACTIVATES\\t\",\"U40tVKQcWjcm\\tXzuk75kgUufI\\tfLn2ytnZVU-1\\tACTIVATES\\t\",\"qgZ5w26hWm8v\\t8xDiqqMtUlgK\\tfLn2ytnZVU-1\\tINHIBITS\\t\",\"xzRJacuuWiP-\\t5nfQJAxjT_z9\\tH-nBa6GpUrhI\\tINHIBITS\\t\",\"_RaZlGxreARX\\tIyt-kiQdVYR4\\tNvu3J1djU_IC\\tINHIBITS\\t\",\"6YudlCKlWygq\\tamGWWOzfWrg1\\tCCp9TqYNVWpA\\tACTIVATES\\t\",\"6YYOMrO7W1Lu\\tamGWWOzfWrg1\\tIyt-kiQdVYR4\\tACTIVATES\\t\",\"y9nj-EHqWlEU\\tfhalsWFrUkbl\\tfLn2ytnZVU-1\\tINHIBITS\\t\",\"QgTnL-0zWfX-\\t8lwlJT8zUt7J\\tfLn2ytnZVU-1\\tACTIVATES\\t\",\"YvuJzpCJWoS3\\tORzx_8_5UAjR\\t5nfQJAxjT_z9\\tACTIVATES\\t\",\"QWoJOCVzW3SR\\t0mJB_ECxVXFr\\tNvu3J1djU_IC\\tACTIVATES\\t\",\"9I6RH1JoWwwW\\tH-nBa6GpUrhI\\tamGWWOzfWrg1\\tACTIVATES\\t\",\"4oG8A9OTWz_Z\\tamGWWOzfWrg1\\t0mJB_ECxVXFr\\tACTIVATES\\t\",\"WZmI2ceJWg0e\\tQj8O9GJNT_AD\\tfLn2ytnZVU-1\\tINHIBITS\\t\",\"U1KCxbf0W2Wy\\tCCp9TqYNVWpA\\tNvu3J1djU_IC\\tACTIVATES\\t\"],\"NRF2\":[\"NRF2\",\"\",\"Involves the regulation of the transcription factor NFE2L2 by KEAP1. NFE2L2 regulates genes with the antioxidant response elements (ARE) that aid in cellular response against oxidative stress thought to aid in cancer chemoresistance.\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"KEAP1\\tOkLgTv_3eszi\\tGENE\\t-1\\t294\\t147\",\"CUL3\\tpxCvh_ojeszm\\tGENE\\t-1\\t469\\t147\",\"Oxidative Stress Response\\tE9bpVpoWeszr\\tPROCESS\\t-1\\t598\\t240\",\"NFE2L2\\tsKw8nuDgeszp\\tGENE\\t-1\\t385\\t240\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPEINTERACTION_PUBMED_ID\",\"wIxLZx13eszt\\tOkLgTv_3eszi\\tsKw8nuDgeszp\\tINHIBITS\\t\",\"aWKwI8rJesz1\\tsKw8nuDgeszp\\tE9bpVpoWeszr\\tACTIVATES\\t\",\"Ng79Bysjeszx\\tpxCvh_ojeszm\\tsKw8nuDgeszp\\tINHIBITS\\t\"],\"OV-2011-Cell-cycle-signaling-pathway\":[\"OV-2011-Cell-cycle-signaling-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"CDKN2A\\toN50crvCRjmK\\tGENE\\t-1\\t635\\t68\\t\",\"RB1\\ttJj5RrqJRq1h\\tGENE\\t-1\\t635\\t299\\t\",\"CCNE1\\tSx3IX8ExBTXu\\tGENE\\tFY8bF0WdRsru\\t639\\t148\\t\",\"CCND1\\tBIDGlk8LBTX9\\tGENE\\tFY8bF0WdRsru\\t550\\t207\\t\",\"CYCLINS\\tFY8bF0WdRsru\\tFAMILY\\t-1\\t634\\t177\\t\",\"Cell cycle progression\\tnnswnmMyRv3y\\tPROCESS\\t-1\\t635\\t373\\t\",\"CCND2\\tIxg8lLJLBTXd\\tGENE\\tFY8bF0WdRsru\\t719\\t207\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"duEMY1UXR86v\\tFY8bF0WdRsru\\ttJj5RrqJRq1h\\tINHIBITS\",\"__OC9xbiR-Fr\\ttJj5RrqJRq1h\\tnnswnmMyRv3y\\tACTIVATES\",\"VqDZTZnER7cZ\\toN50crvCRjmK\\tFY8bF0WdRsru\\tINHIBITS\"],\"OV-2011-Notch-signaling-pathway\":[\"OV-2011-Notch-signaling-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"MAML3\\twTL7UE_SDIWe\\tGENE\\tZ64sAxBCSrsH\\t800\\t380\\t\",\"JAG1\\tEy82kzAQDKzS\\tGENE\\tHPXERf3USgjx\\t462\\t280\\t\",\"MAML1\\tICfP9aB2DIWS\\tGENE\\tZ64sAxBCSrsH\\t800\\t247\\t\",\"JAG2\\tFvIadI1RDKzA\\tGENE\\tHPXERf3USgjx\\t462\\t351\\t\",\"JAG\\tHPXERf3USgjx\\tFAMILY\\t-1\\t462\\t315\\t\",\"NOTCH3\\txiGB_3VdSfd3\\tGENE\\t-1\\t632\\t316\\t\",\"MAML2\\t9xWqi9JKDIWF\\tGENE\\tZ64sAxBCSrsH\\t800\\t314\\t\",\"MAML\\tZ64sAxBCSrsH\\tFAMILY\\t-1\\t800\\t314\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"osh5OcaxTA2q\\tHPXERf3USgjx\\txiGB_3VdSfd3\\tINHIBITS\",\"AivX6u8YTCYD\\tZ64sAxBCSrsH\\txiGB_3VdSfd3\\tINHIBITS\"],\"OV-2011-RTK-RAS-PI(3)K-pathway\":[\"OV-2011-RTK-RAS-PI(3)K-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"KRAS\\t4SZmwk65Q2AX\\tGENE\\t-1\\t529\\t119\\t\",\"AKT\\tJXx22AmtmHua\\tFAMILY\\t-1\\t263\\t234\\t\",\"AKT2\\t1QP6Io9jmSsb\\tGENE\\tJXx22AmtmHua\\t263\\t203\\t\",\"NF1\\tbKlDARX_QzeJ\\tGENE\\t-1\\t529\\t41\\t\",\"Proliferation/survival\\teyOUahBEQth7\\tPROCESS\\t-1\\t413\\t402\\t\",\"AKT1\\tpw2OFJfHmSsq\\tGENE\\tJXx22AmtmHua\\t263\\t265\\t\",\"PTEN\\tqx1xPdYgQgUA\\tGENE\\t-1\\t263\\t41\\t\",\"BRAF\\tXLdjd_rNQ5TF\\tGENE\\t-1\\t529\\t239\\t\",\"PIK3CA\\t9WGkKXm-QhuR\\tGENE\\t-1\\t263\\t119\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"lwcl1MvdmPEO\\tJXx22AmtmHua\\teyOUahBEQth7\\tACTIVATES\",\"6CO_N8liRIA4\\tbKlDARX_QzeJ\\t4SZmwk65Q2AX\\tINHIBITS\",\"TDBL0RUZRJb3\\t4SZmwk65Q2AX\\tXLdjd_rNQ5TF\\tACTIVATES\",\"uXgITAznRMO2\\tXLdjd_rNQ5TF\\teyOUahBEQth7\\tACTIVATES\",\"vkkqRMcgQ90m\\t4SZmwk65Q2AX\\t9WGkKXm-QhuR\\tACTIVATES\",\"oxMyRc9ImLT_\\t9WGkKXm-QhuR\\tJXx22AmtmHua\\tACTIVATES\",\"_9kjQAkpdEP0\\tqx1xPdYgQgUA\\t9WGkKXm-QhuR\\tINHIBITS\"],\"PI3K\":[\"PI3K\",\"\",\"A signaling cascade involving PI3K phosphorylation of AKT leading to the activation of the mTORC1 complex. The mTORC1 functions as a metabolic sensor and controls protein abundance by affecting processes involved in protein production and RNA translation leading to changes in cell growth and survival.\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"AKT3\\teWz9lexke0kY\\tGENE\\tyEOAK96Ye0j-\\t752\\t327\",\"RPTOR\\tKHzd_YdNe0jd\\tGENE\\tJKE-mm1le0jZ\\t759\\t730\",\"PIK3CA\\tBpH76ff7e0iw\\tGENE\\t-1\\t595\\t176\",\"PIK3R2\\t5lBs8QfFe0i_\\tGENE\\tiK4blWyDe0i1\\t804\\t167\",\"RHEB\\t8eeCwYTqe0jC\\tGENE\\t-1\\t599\\t619\",\"PIK3R\\tiK4blWyDe0i1\\tFAMILY\\t-1\\t804\\t166\",\"AKT\\tyEOAK96Ye0j-\\tFAMILY\\t-1\\t594\\t327\",\"mTORC2\\tMMeMHe4ze0kj\\tFAMILY\\t-1\\t421\\t730\",\"TSC\\t3b8rKMrke0jF\\tFAMILY\\t-1\\t596\\t486\",\"AKT2\\t9o76blkNe0kR\\tGENE\\tyEOAK96Ye0j-\\t594\\t327\",\"mTORC1\\tJKE-mm1le0jZ\\tFAMILY\\t-1\\t678\\t730\",\"PPP2R1A\\tHY1OO1uEe0jv\\tGENE\\t-1\\t971\\t326\",\"PIK3R3\\tGy1IflZce0i5\\tGENE\\tiK4blWyDe0i1\\t804\\t227\",\"PTEN\\tHL_nLOSce0jV\\tGENE\\t-1\\t594\\t91\",\"MTOR\\t_WbyV7oYe0jj\\tGENE\\tJKE-mm1le0jZ\\t597\\t730\",\"PIK3R1\\tj_DI0z3Xe0i8\\tGENE\\tiK4blWyDe0i1\\t804\\t106\",\"Cell growth\\t_wytH85He0jQ\\tPROCESS\\t-1\\t601\\t860\",\"INPP4B\\t2ZOWMzsce0j4\\tGENE\\t-1\\t372\\t178\",\"TSC1\\tx2juQzTie0jM\\tGENE\\t3b8rKMrke0jF\\t596\\t459\",\"TSC2\\tzs4f_I93e0jJ\\tGENE\\t3b8rKMrke0jF\\t596\\t513\",\"RICTOR\\tDg3B9H1Me0ks\\tGENE\\tMMeMHe4ze0kj\\t421\\t730\",\"AKT1\\tTDuOMRUee0kH\\tGENE\\tyEOAK96Ye0j-\\t437\\t327\",\"STK11\\tURGrIXe2e0kd\\tGENE\\t-1\\t336\\t483\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPEINTERACTION_PUBMED_ID\",\"an7n5soQe0k8\\tyEOAK96Ye0j-\\t3b8rKMrke0jF\\tINHIBITS\\t\",\"YeQpbZw0e0lG\\t3b8rKMrke0jF\\t8eeCwYTqe0jC\\tINHIBITS\\t\",\"wjtVfwEee0lB\\tJKE-mm1le0jZ\\t_wytH85He0jQ\\tACTIVATES\\t\",\"6Mr0F0gAe0lD\\tURGrIXe2e0kd\\t3b8rKMrke0jF\\tACTIVATES\\t\",\"EigHAJh7e0lI\\tHL_nLOSce0jV\\tBpH76ff7e0iw\\tINHIBITS\\t\",\"s7B8LZsde0k-\\tBpH76ff7e0iw\\tyEOAK96Ye0j-\\tACTIVATES\\t\",\"1T4VmG08e0lL\\tiK4blWyDe0i1\\tBpH76ff7e0iw\\tINHIBITS\\t\",\"3yNlj0Tge0k2\\t8eeCwYTqe0jC\\tJKE-mm1le0jZ\\tACTIVATES\\t\",\"NuGuIugXe0k6\\t2ZOWMzsce0j4\\tBpH76ff7e0iw\\tINHIBITS\\t\",\"pYhyONrDe0lP\\tDg3B9H1Me0ks\\tURGrIXe2e0kd\\tACTIVATES\\t\",\"h-JnEMgBe0lN\\tHY1OO1uEe0jv\\tyEOAK96Ye0j-\\tINHIBITS\\t\"],\"RTK-RAS\":[\"RTK-RAS\",\"\",\"A signaling cascade pathway initiated by activation of RTKs followed signal transduction through Ras then Raf and then MEK family members. This cascade leads to the activation of several transcription factors that regulate processes involving cell proliferation and survival.\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"NRAS\\tQHZo7kkDfrMO\\tGENE\\tb8V1sXZDfrL1\\t1142\\t348\",\"ROS1\\ttNj2tohofrKR\\tGENE\\t8tMooF5vfrKJ\\t664\\t166\",\"KIT\\tgWlRUSfzfrKt\\tGENE\\t8tMooF5vfrKJ\\t1142\\t104\",\"Translation\\t7CK2REgNfrKF\\tPROCESS\\t-1\\t881\\t625\",\"PTPN11\\tjTtQAhJrfrJx\\tGENE\\t-1\\t504\\t348\",\"RAS\\tb8V1sXZDfrL1\\tFAMILY\\t-1\\t1063\\t348\",\"RET\\tyjRzsMVifrKy\\tGENE\\t8tMooF5vfrKJ\\t504\\t166\",\"CBL\\t0a_o8sXafrJh\\tGENE\\t-1\\t504\\t262\",\"Proliferation\\t3VFXQGLzfrJ-\\tPROCESS\\t-1\\t559\\t626\",\"FLT3\\tIpmlW5vMfrLc\\tGENE\\t8tMooF5vfrKJ\\t982\\t166\",\"NF1\\t59lXGxKMfrJn\\tGENE\\t-1\\t1142\\t262\",\"NTRK2\\t5SlBGbo1frLr\\tGENE\\t8tMooF5vfrKJ\\t1302\\t166\",\"ERRFI1\\t-V-9_6fAfrJj\\tGENE\\t-1\\t664\\t262\",\"ARAF\\tcBahXkGvfrMn\\tGENE\\tsApg3-IVfrMe\\t982\\t429\",\"FGFR3\\t1EucZO9pfrLJ\\tGENE\\t8tMooF5vfrKJ\\t824\\t104\",\"HRAS\\tBB8hBTZ4frME\\tGENE\\tb8V1sXZDfrL1\\t982\\t348\",\"MET\\t_yKldPkzfrKZ\\tGENE\\t8tMooF5vfrKJ\\t1142\\t41\",\"RAF1\\tLk9sb9wzfrM5\\tGENE\\tsApg3-IVfrMe\\t1302\\t429\",\"RAC1\\tzDRSUmjffrJ7\\tGENE\\t-1\\t614\\t511\",\"FGFR1\\tRFZ2wD4YfrKf\\tGENE\\t8tMooF5vfrKJ\\t504\\t104\",\"MEK\\t3psJQJmGfrJV\\tFAMILY\\t-1\\t1062\\t511\",\"FGFR2\\tnTecsKLYfrKj\\tGENE\\t8tMooF5vfrKJ\\t664\\t104\",\"KRAS\\te8tWMLoVfrL9\\tGENE\\tb8V1sXZDfrL1\\t824\\t348\",\"BRAF\\tNM12nD_nfrMx\\tGENE\\tsApg3-IVfrMe\\t1142\\t429\",\"ERBB2\\tC45Adl13frKV\\tGENE\\t8tMooF5vfrKJ\\t664\\t41\",\"ERBB4\\tZ-e0kCBwfrKN\\tGENE\\t8tMooF5vfrKJ\\t982\\t41\",\"MAPK1\\tR9ZNAxVRfrJ3\\tGENE\\t-1\\t783\\t511\",\"RAF\\tsApg3-IVfrMe\\tFAMILY\\t-1\\t1142\\t429\",\"EGFR\\t9Psi8emvfrK3\\tGENE\\t8tMooF5vfrKJ\\t504\\t41\",\"RASA1\\tZSZjKexZfrJ0\\tGENE\\t-1\\t1301\\t262\",\"FGFR4\\tMfs6mvKHfrKo\\tGENE\\t8tMooF5vfrKJ\\t982\\t104\",\"IGF1R\\tCvsyhyzdfrLQ\\tGENE\\t8tMooF5vfrKJ\\t1302\\t104\",\"ERBB3\\trORV55VHfrK9\\tGENE\\t8tMooF5vfrKJ\\t824\\t41\",\"Cell survival\\tvmWLLGP3frKC\\tPROCESS\\t-1\\t718\\t626\",\"SOS1\\tbdPjTyaDfrJu\\tGENE\\t-1\\t982\\t262\",\"RIT1\\tpTVg5xU2frMW\\tGENE\\tb8V1sXZDfrL1\\t1302\\t348\",\"MAP2K2\\tgqrpYTM0frJa\\tGENE\\t3psJQJmGfrJV\\t1142\\t511\",\"ALK\\t1o_9LYSFfrLV\\tGENE\\t8tMooF5vfrKJ\\t824\\t166\",\"NTRK1\\tT6ceghhpfrLj\\tGENE\\t8tMooF5vfrKJ\\t1142\\t166\",\"RTKs\\t8tMooF5vfrKJ\\tFAMILY\\t-1\\t903\\t103\",\"PDGFRA\\ty8PZ8iiyfrLD\\tGENE\\t8tMooF5vfrKJ\\t1302\\t41\",\"MAP2K1\\tQ2i0HY0HfrJe\\tGENE\\t3psJQJmGfrJV\\t982\\t511\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPEINTERACTION_PUBMED_ID\",\"Rokn-zgqfrNN\\t-V-9_6fAfrJj\\t8tMooF5vfrKJ\\tINHIBITS\\t\",\"BvZejKrrfrNX\\t59lXGxKMfrJn\\tb8V1sXZDfrL1\\tINHIBITS\\t\",\"CEWkH2kYfrNa\\tZSZjKexZfrJ0\\tb8V1sXZDfrL1\\tINHIBITS\\t\",\"In_EmpIgfrNv\\tR9ZNAxVRfrJ3\\t7CK2REgNfrKF\\tACTIVATES\\t\",\"NYpLslu-frNh\\tsApg3-IVfrMe\\t3psJQJmGfrJV\\tACTIVATES\\t\",\"8OWp0SRTfrNm\\tzDRSUmjffrJ7\\tR9ZNAxVRfrJ3\\tACTIVATES\\t\",\"OnjXx-jmfrNk\\t3psJQJmGfrJV\\tR9ZNAxVRfrJ3\\tACTIVATES\\t\",\"HPbM8huafrNU\\tbdPjTyaDfrJu\\tb8V1sXZDfrL1\\tACTIVATES\\t\",\"qtmobl6_frNF\\t0a_o8sXafrJh\\t8tMooF5vfrKJ\\tINHIBITS\\t\",\"8EmU4xtSfrNo\\tR9ZNAxVRfrJ3\\t3VFXQGLzfrJ-\\tACTIVATES\\t\",\"n_C1QGZ2frNr\\tR9ZNAxVRfrJ3\\tvmWLLGP3frKC\\tACTIVATES\\t\",\"vQrHXLexfrNR\\t8tMooF5vfrKJ\\tbdPjTyaDfrJu\\tACTIVATES\\t\",\"gs6EgVUcfrNd\\tb8V1sXZDfrL1\\tsApg3-IVfrMe\\tACTIVATES\\t\"],\"SKCM-2015-Cell-cycle-signaling-pathway\":[\"SKCM-2015-Cell-cycle-signaling-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"CDKN2A\\tnpKTJggFJS4I\\tGENE\\t-1\\t442\\t89\\t\",\"CYCLINS\\tIba11JzIJVxh\\tFAMILY\\t-1\\t520\\t175\\t\",\"CDK4\\tWcN_CcOrC9iS\\tGENE\\tIba11JzIJVxh\\t442\\t175\\t\",\"E2F\\tXI_rBXYxJXPk\\tGENE\\t-1\\t520\\t372\\t\",\"CCND1\\tv_gEFTZBC9il\\tGENE\\tIba11JzIJVxh\\t599\\t175\\t\",\"Cell cycle progression\\te_ZEQUYtJz1B\\tPROCESS\\t-1\\t520\\t484\\t\",\"RB1\\t4vxRSXTEJWO8\\tGENE\\t-1\\t520\\t276\\t\",\"CDKN2B\\tuK5CVzIeJayA\\tGENE\\t-1\\t599\\t89\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"vJf6xitbJwIp\\tnpKTJggFJS4I\\tIba11JzIJVxh\\tINHIBITS\",\"MrgZ3psqKpK7\\tXI_rBXYxJXPk\\te_ZEQUYtJz1B\\tACTIVATES\",\"fQLLdtj0JzEP\\t4vxRSXTEJWO8\\tXI_rBXYxJXPk\\tINHIBITS\",\"Msdh3q6kJxC4\\tuK5CVzIeJayA\\tIba11JzIJVxh\\tINHIBITS\",\"vjchZOt9JyOV\\tIba11JzIJVxh\\t4vxRSXTEJWO8\\tINHIBITS\"],\"SKCM-2015-Histone-modification-pathway\":[\"SKCM-2015-Histone-modification-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"AURKA\\tUUHLK2LeLlq4\\tGENE\\t-1\\t425\\t166\\t\",\"PPP6C\\tyZeIXzgALlHL\\tGENE\\t-1\\t231\\t166\\t\",\"ARID2\\t4dCj0PbWLn10\\tGENE\\t-1\\t425\\t308\\t\",\"Genetic stability\\txWY6P0idNRza\\tPROCESS\\t-1\\t624\\t195\\t\",\"Chromatin remodeling\\t-c29Xam0NfMu\\tPROCESS\\t-1\\t231\\t263\\t\",\"Chromatid segregation\\tCl7g3xLYLmwQ\\tPROCESS\\t-1\\t624\\t133\\t\",\"Transcriptional control\\tX7mpJiW8Lodu\\tPROCESS\\t-1\\t231\\t342\\t\",\"Epigenetic regulation\\t8D0fnb8SLrSQ\\tPROCESS\\t-1\\t231\\t437\\t\",\"IDH1\\tuHqIeo66Lqq9\\tGENE\\t-1\\t425\\t435\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"9WzDoyMZNXKq\\tUUHLK2LeLlq4\\tCl7g3xLYLmwQ\\tACTIVATES\",\"nh2AMryLNpj_\\tuHqIeo66Lqq9\\t8D0fnb8SLrSQ\\tACTIVATES\",\"3ixp2EynNWMa\\tyZeIXzgALlHL\\tUUHLK2LeLlq4\\tACTIVATES\",\"-scKWlPDNX6-\\tUUHLK2LeLlq4\\txWY6P0idNRza\\tACTIVATES\",\"8YJTZK-INn2c\\t4dCj0PbWLn10\\t-c29Xam0NfMu\\tACTIVATES\",\"MdvHv-NFNoui\\t4dCj0PbWLn10\\tX7mpJiW8Lodu\\tACTIVATES\"],\"SKCM-2015-RTK-RAS-PI(3)K-pathway\":[\"SKCM-2015-RTK-RAS-PI(3)K-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"Proliferation\\tOpbQ5N5BIR7T\\tPROCESS\\t-1\\t528\\t524\\t\",\"NF1\\tz9P8VET8IH-v\\tGENE\\t-1\\t256\\t147\\t\",\"NRAS\\tstZUUqWp9HOb\\tGENE\\tdQrC9TeNIX-m\\t374\\t236\\t\",\"Survival\\tDXOfiysJIUYY\\tPROCESS\\t-1\\t1107\\t329\\t\",\"RAS\\tdQrC9TeNIX-m\\tFAMILY\\t-1\\t529\\t236\\t\",\"RAC1\\t8CZU3OY7IlD5\\tGENE\\t-1\\t880\\t364\\t\",\"KIT\\tyhNL3UBnIL-5\\tGENE\\t-1\\t880\\t120\\t\",\"AKT Pathway\\t5m3zxs1KINf7\\tPROCESS\\t-1\\t880\\t241\\t\",\"MAP2K1\\teNN9GlQaIQwL\\tGENE\\t-1\\t528\\t435\\t\",\"PTEN\\tRtyOk-X-ITE3\\tGENE\\t-1\\t1106\\t241\\t\",\"BRAF\\t4dRiJZfvIPWm\\tGENE\\t-1\\t528\\t338\\t\",\"KRAS\\thksSbzGD9HOJ\\tGENE\\tdQrC9TeNIX-m\\t685\\t236\\t\",\"HRAS\\tNNEMBzDV9HNw\\tGENE\\tdQrC9TeNIX-m\\t530\\t236\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"soPzg51UIxxj\\t8CZU3OY7IlD5\\t5m3zxs1KINf7\\tACTIVATES\",\"Cf02-ifyItuD\\tdQrC9TeNIX-m\\t4dRiJZfvIPWm\\tACTIVATES\",\"BqXWl69hI1zW\\tyhNL3UBnIL-5\\t5m3zxs1KINf7\\tACTIVATES\",\"1Aepvid-IqoA\\tz9P8VET8IH-v\\tdQrC9TeNIX-m\\tINHIBITS\",\"J01_493NIzbP\\t4dRiJZfvIPWm\\t5m3zxs1KINf7\\tACTIVATES\",\"PCKlXBgfIu2g\\t4dRiJZfvIPWm\\teNN9GlQaIQwL\\tACTIVATES\",\"q7PHpnTgIwuD\\t8CZU3OY7IlD5\\teNN9GlQaIQwL\\tACTIVATES\",\"FxAnigvrI2_i\\t5m3zxs1KINf7\\tDXOfiysJIUYY\\tACTIVATES\",\"uglecyI1IsGD\\tyhNL3UBnIL-5\\tdQrC9TeNIX-m\\tACTIVATES\",\"iCnUjDjmIvi5\\teNN9GlQaIQwL\\tOpbQ5N5BIR7T\\tACTIVATES\",\"HEzFrHkCI0l-\\tRtyOk-X-ITE3\\t5m3zxs1KINf7\\tINHIBITS\"],\"SKCM-2015-TP53-pathway\":[\"SKCM-2015-TP53-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"Apoptosis\\tTc8UdIhSLCIT\\tPROCESS\\t-1\\t289\\t372\\t\",\"TP53\\tGBRktWHeLBFQ\\tGENE\\t-1\\t381\\t273\\t\",\"MDM2\\t-VggHhz9K-1w\\tGENE\\t-1\\t381\\t193\\t\",\"CDKN2B\\tB3XBHs3yK9o7\\tGENE\\t-1\\t456\\t108\\t\",\"Senescence\\tcLoUlZOZLD0x\\tPROCESS\\t-1\\t456\\t372\\t\",\"CDKN2A\\thml0YQ9_K8tc\\tGENE\\t-1\\t289\\t108\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"gBzu2KRcLSuV\\tB3XBHs3yK9o7\\t-VggHhz9K-1w\\tINHIBITS\",\"XenUWWntLTzX\\t-VggHhz9K-1w\\tGBRktWHeLBFQ\\tINHIBITS\",\"WNkolmuaLVxV\\tGBRktWHeLBFQ\\tcLoUlZOZLD0x\\tACTIVATES\",\"N3sY9gBuLVHA\\tGBRktWHeLBFQ\\tTc8UdIhSLCIT\\tACTIVATES\",\"2r21RRvbLR21\\thml0YQ9_K8tc\\t-VggHhz9K-1w\\tINHIBITS\"],\"STAD-2014-RTK-RAS-PI(3)K-pathway\":[\"STAD-2014-RTK-RAS-PI(3)K-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"PTEN\\t6OFxgP6h9_xG\\tGENE\\t-1\\t341\\t496\\t\",\"RASA1\\tY6PU3f3t93HB\\tGENE\\t-1\\t419\\t172\\t\",\"KRAS\\txCs5lqYG7Z1Z\\tGENE\\t7oEmRnmC-RqY\\t341\\t265\\t\",\"JAK2\\tL1LDTgi27i0r\\tGENE\\tuCiynVqo-CBg\\t167\\t366\\t\",\"PIK3R1\\tij4dXcH1-Ah1\\tGENE\\t-1\\t516\\t496\\t\",\"RAS\\t7oEmRnmC-RqY\\tFAMILY\\t-1\\t420\\t265\\t\",\"NRAS\\tdwqmccUP7Z1E\\tGENE\\t7oEmRnmC-RqY\\t499\\t265\\t\",\"ERBB2\\tL6F3ltyJ7i1T\\tGENE\\tuCiynVqo-CBg\\t167\\t233\\t\",\"EGFR\\tOrbXhKLA7i1D\\tGENE\\tuCiynVqo-CBg\\t167\\t164\\t\",\"FGFR2\\tGc4Ktrgt7i1M\\tGENE\\tuCiynVqo-CBg\\t167\\t430\\t\",\"PIK3CA\\tWBOfcnh9993x\\tGENE\\t-1\\t419\\t394\\t\",\"MET\\tgbmLOkrS7i1x\\tGENE\\tuCiynVqo-CBg\\t167\\t496\\t\",\"RTK\\tuCiynVqo-CBg\\tFAMILY\\t-1\\t167\\t330\\t\",\"ERBB3\\t6Uq7nWdq7i1f\\tGENE\\tuCiynVqo-CBg\\t167\\t299\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"20X5Aj7K-bWX\\t6OFxgP6h9_xG\\tWBOfcnh9993x\\tINHIBITS\",\"VZzlIbfS-edr\\tuCiynVqo-CBg\\t7oEmRnmC-RqY\\tACTIVATES\",\"KrNMU6gX-f84\\tuCiynVqo-CBg\\tWBOfcnh9993x\\tACTIVATES\",\"1JHahVpJ-cGV\\tij4dXcH1-Ah1\\tWBOfcnh9993x\\tINHIBITS\",\"IyUACdpr-YSa\\t7oEmRnmC-RqY\\tWBOfcnh9993x\\tACTIVATES\",\"OPPikJRZ-XUc\\tY6PU3f3t93HB\\t7oEmRnmC-RqY\\tINHIBITS\",\"vbNOH609-aVf\\tWBOfcnh9993x\\t7oEmRnmC-RqY\\tACTIVATES\"],\"TGF-Beta\":[\"TGF-Beta\",\"\",\"A signaling network involved in growth, proliferation, apoptosis, and differentiation involving the activation of TGFβ receptors by the cytokine TGFβ that leads to the activation of gene transcription by SMADs.\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"SMAD2\\t0qBZliXOfmft\\tGENE\\tXkk8SKlafmfn\\t335\\t410\",\"SMAD\\tXkk8SKlafmfn\\tFAMILY\\t-1\\t424\\t446\",\"Activin ligands\\tt_Q1Nr-BfmfR\\tGENE\\t-1\\t509\\t146\",\"ACVR2B\\t9Ev1i-2HfmfX\\tGENE\\tboabbY81fmfT\\t508\\t307\",\"TGFBR\\tfXKkJObYfmfb\\tFAMILY\\t-1\\t329\\t277\",\"ACVR2A\\t_sm7432ofmfV\\tGENE\\tboabbY81fmfT\\t509\\t244\",\"SMAD3\\tgepyfePvfmfz\\tGENE\\tXkk8SKlafmfn\\t514\\t410\",\"TGFBR2\\tDOJnFoHNfmfi\\tGENE\\tfXKkJObYfmfb\\t329\\t311\",\"TGFB ligands\\tgOOpkueqfmfM\\tGENE\\t-1\\t329\\t146\",\"ACVR2\\tboabbY81fmfT\\tFAMILY\\t-1\\t508\\t275\",\"TGFBR1\\tSb4zGrL3fmfe\\tGENE\\tfXKkJObYfmfb\\t329\\t244\",\"Proliferation, stem/progenitor phenotype\\tA7jMDR2Mfmf-\\tPROCESS\\t-1\\t427\\t588\",\"SMAD4\\tOKApI7Qwfmf4\\tGENE\\tXkk8SKlafmfn\\t428\\t483\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPEINTERACTION_PUBMED_ID\",\"7FzJ455ZfmgP\\tboabbY81fmfT\\tXkk8SKlafmfn\\tACTIVATES\\t\",\"WEH0_CRqfmgL\\tfXKkJObYfmfb\\tXkk8SKlafmfn\\tACTIVATES\\t\",\"hnOBi-Z1fmgI\\tt_Q1Nr-BfmfR\\tboabbY81fmfT\\tACTIVATES\\t\",\"Ax3S1Kd8fmgE\\tgOOpkueqfmfM\\tfXKkJObYfmfb\\tACTIVATES\\t\"],\"THCA-2014-RTK-RAS-PI(3)K-pathway\":[\"THCA-2014-RTK-RAS-PI(3)K-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"MTOR\\tG9y6ZBee_nmX\\tGENE\\t-1\\t649\\t417\\t\",\"NRAS\\tOjQjq-cc7_5M\\tGENE\\tEOfQTOkE_iLF\\t646\\t25\\t\",\"AKT\\tfi2ldWMn_lnk\\tGENE\\t-1\\t647\\t265\\t\",\"BCL2\\tjwugB2iP_y0Y\\tGENE\\t-1\\t841\\t559\\t\",\"NTR1\\turLIUCXQ70w-\\tGENE\\tKen9wGw8AKU3\\t293\\t-7\\t\",\"RAS\\t1TJ8hV1I_ZR5\\tFAMILY\\t-1\\t374\\t186\\t\",\"RAF\\txSi1Do6v_sYj\\tGENE\\t-1\\t841\\t186\\t\",\"DUSPs\\t7C2rFt7t_fdn\\tGENE\\t-1\\t298\\t524\\t\",\"BRAF\\tpq87LogY_1LI\\tGENE\\t-1\\t1024\\t186\\t\",\"pERK\\tF4o-nfWI_urx\\tGENE\\t-1\\t841\\t344\\t\",\"Apoptosis\\tAoCFeVPVAu6s\\tPROCESS\\t-1\\t841\\t636\\t\",\"BRAF\\tPAsWh9Rz_dco\\tGENE\\t-1\\t167\\t276\\t\",\"HRAS\\tLPvNA7nc7_57\\tGENE\\tEOfQTOkE_iLF\\t804\\t25\\t\",\"NTR\\tKen9wGw8AKU3\\tFAMILY\\t-1\\t371\\t22\\t\",\"BAD\\tUiVUw9Es_x5s\\tGENE\\t-1\\t841\\t489\\t\",\"Cell proliferation/Growth\\ttGen8Qvz_qez\\tPROCESS\\t-1\\t298\\t628\\t\",\"KRAS\\tr0hPxhCH7_5n\\tGENE\\tEOfQTOkE_iLF\\t961\\t25\\t\",\"PI3K\\tK3RfoHn2_kQ2\\tGENE\\t-1\\t647\\t186\\t\",\"pMEK\\tlMJhnvzk_tYZ\\tGENE\\t-1\\t841\\t264\\t\",\"pMEK\\teM1eNr4K_cOi\\tGENE\\t-1\\t298\\t346\\t\",\"p90\\t-6lLHt7R_v9K\\tGENE\\t-1\\t841\\t419\\t\",\"NTR3\\tJtRMUb9N70xa\\tGENE\\tKen9wGw8AKU3\\t378\\t51\\t\",\"Protein synthesis\\tWQ8orp6Y_ouv\\tPROCESS\\t-1\\t649\\t627\\t\",\"RAS\\tEOfQTOkE_iLF\\tFAMILY\\t-1\\t804\\t25\\t\",\"NTR2\\tWK-XNi2970xq\\tGENE\\tKen9wGw8AKU3\\t450\\t-7\\t\",\"RET\\tCDUJn7rL_YRR\\tGENE\\t-1\\t167\\t186\\t\",\"pERK\\tGyr_vYK7_eUm\\tGENE\\t-1\\t298\\t434\\t\",\"RAF\\tEJdSJtPH_amI\\tGENE\\t-1\\t374\\t276\\t\",\"TSC2\\tEhaBKk9-_mvL\\tGENE\\t-1\\t647\\t345\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"HComBP3QBFSr\\txSi1Do6v_sYj\\tlMJhnvzk_tYZ\\tACTIVATES\",\"5ow_H43KBLyc\\tjwugB2iP_y0Y\\tAoCFeVPVAu6s\\tINHIBITS\",\"lafIlqasBaaQ\\tEJdSJtPH_amI\\teM1eNr4K_cOi\\tACTIVATES\",\"pCtfuSydBdaS\\t7C2rFt7t_fdn\\tGyr_vYK7_eUm\\tINHIBITS\",\"YyPlgJXcA__s\\tEhaBKk9-_mvL\\tG9y6ZBee_nmX\\tINHIBITS\",\"iA_J_DZbBefG\\t7C2rFt7t_fdn\\ttGen8Qvz_qez\\tACTIVATES\",\"sJ4XKEpFA6LY\\tKen9wGw8AKU3\\tEOfQTOkE_iLF\\tACTIVATES\",\"8BieawZKA3u7\\tCDUJn7rL_YRR\\t1TJ8hV1I_ZR5\\tACTIVATES\",\"r79uM2_gBZKl\\t1TJ8hV1I_ZR5\\tEJdSJtPH_amI\\tACTIVATES\",\"ACvH-CYzA8yR\\tEOfQTOkE_iLF\\tK3RfoHn2_kQ2\\tACTIVATES\",\"TmRxcbx_Bbb7\\teM1eNr4K_cOi\\tGyr_vYK7_eUm\\tACTIVATES\",\"teHhboSJBVGJ\\tpq87LogY_1LI\\txSi1Do6v_sYj\\tINHIBITS\",\"XmrMteXSBBt-\\tG9y6ZBee_nmX\\tWQ8orp6Y_ouv\\tACTIVATES\",\"hU00JaNWBYJR\\tPAsWh9Rz_dco\\teM1eNr4K_cOi\\tACTIVATES\",\"FXb60wuvBcMi\\tGyr_vYK7_eUm\\t7C2rFt7t_fdn\\tACTIVATES\",\"-iHJfCCVA_Hh\\tfi2ldWMn_lnk\\tEhaBKk9-_mvL\\tACTIVATES\",\"aW6elpjvBKyK\\tUiVUw9Es_x5s\\tjwugB2iP_y0Y\\tINHIBITS\",\"LlJV17wNBHMh\\tlMJhnvzk_tYZ\\tF4o-nfWI_urx\\tACTIVATES\",\"z-CbE5XoBJ5o\\t-6lLHt7R_v9K\\tUiVUw9Es_x5s\\tINHIBITS\",\"F9EcWkHvBUJ2\\tpq87LogY_1LI\\txSi1Do6v_sYj\\tACTIVATES\",\"GqN5v_YIBEbi\\tEOfQTOkE_iLF\\txSi1Do6v_sYj\\tACTIVATES\",\"FWnfRc3YBC44\\t-6lLHt7R_v9K\\tG9y6ZBee_nmX\\tINHIBITS\",\"AV9s-fteA9y7\\tK3RfoHn2_kQ2\\tfi2ldWMn_lnk\\tACTIVATES\",\"3BgREqkhA22-\\tKen9wGw8AKU3\\t1TJ8hV1I_ZR5\\tACTIVATES\",\"r31OK-oJBIby\\tF4o-nfWI_urx\\t-6lLHt7R_v9K\\tACTIVATES\"],\"TP53\":[\"TP53\",\"\",\"Pathway centered around the regulation of the tumor suppressor TP53, a gene that regulates apoptosis, cell cycle arrest, senescence, and DNA repair.\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"Cell survival, proliferation\\txDGjGXGMfyG3\\tPROCESS\\t-1\\t133\\t449\",\"CDKN2A\\tgx_YWb90fyGp\\tGENE\\t-1\\t-23\\t235\",\"MDM4\\tsT2W03HDfyGe\\tGENE\\tlK7pvMYZfyGU\\t319\\t127\",\"DNA replication stress\\tYvaYsZcufyHH\\tPROCESS\\t-1\\t597\\t51\",\"RPS6KA3\\tIu0kJKKGfyGM\\tGENE\\t-1\\t597\\t328\",\"MDM2\\tqv-3H9tXfyGZ\\tGENE\\tlK7pvMYZfyGU\\t149\\t127\",\"Senescence, apoptosis\\tIkv91AlOfyG-\\tPROCESS\\t-1\\t325\\t448\",\"\\tlK7pvMYZfyGU\\tFAMILY\\t-1\\t234\\t127\",\"TP53\\tES5FXiJLfyGu\\tGENE\\t-1\\t233\\t328\",\"Oncogenic stress\\tHZxSxJBmfyHE\\tPROCESS\\t-1\\t333\\t222\",\"ATM\\tc4Ad6ZYBfyGx\\tGENE\\t-1\\t597\\t130\",\"CHEK2\\tJvx4WzdtfyGk\\tGENE\\t-1\\t597\\t225\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPEINTERACTION_PUBMED_ID\",\"8KZq5XsifyHL\\tES5FXiJLfyGu\\txDGjGXGMfyG3\\tINHIBITS\\t\",\"5e5CkdqDfyHg\\tgx_YWb90fyGp\\tES5FXiJLfyGu\\tINHIBITS\\t\",\"WAvkWWubfyHO\\tJvx4WzdtfyGk\\tIu0kJKKGfyGM\\tACTIVATES\\t\",\"wMOYIFFAfyHS\\tgx_YWb90fyGp\\tlK7pvMYZfyGU\\tINHIBITS\\t\",\"Zd519CgjfyHd\\tHZxSxJBmfyHE\\tES5FXiJLfyGu\\tACTIVATES\\t\",\"lFKJrXsmfyHb\\tES5FXiJLfyGu\\tIkv91AlOfyG-\\tACTIVATES\\t\",\"geyskuwAfyHV\\tlK7pvMYZfyGU\\tES5FXiJLfyGu\\tINHIBITS\\t\",\"t-G0U6EJfyHR\\tIu0kJKKGfyGM\\tES5FXiJLfyGu\\tACTIVATES\\t\",\"vNvONKmFfyHj\\tYvaYsZcufyHH\\tc4Ad6ZYBfyGx\\tACTIVATES\\t\",\"25K5WaLwfyHX\\tc4Ad6ZYBfyGx\\tJvx4WzdtfyGk\\tACTIVATES\\t\"],\"UCEC-2013-RTK-RAS-PI(3)K-pathway\":[\"UCEC-2013-RTK-RAS-PI(3)K-pathway\",\"\",\"\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"RTK\\tZAPqdjSDgCgU\\tFAMILY\\t-1\\t391\\t148\\t\",\"SOX17\\tBXxulVFjgHIs\\tGENE\\t-1\\t227\\t344\\t\",\"KRAS\\t76Wg78V_gDdz\\tGENE\\t-1\\t391\\t260\\t\",\"Proliferation\\tsoh0TxsPgq1P\\tPROCESS\\t-1\\t803\\t409\\t\",\"PTEN\\tQha2pMPigm3R\\tGENE\\t-1\\t1085\\t215\\t\",\"Translation\\t0L6ulMimgteS\\tPROCESS\\t-1\\t1056\\t409\\t\",\"Proliferation\\tMsHCffb6gNY_\\tPROCESS\\t-1\\t391\\t515\\t\",\"CTNNB1\\ti1tsajIagMAh\\tGENE\\t-1\\t391\\t430\\t\",\"PIK3R1\\tOJ-s2c_vgnZa\\tGENE\\t-1\\t1085\\t295\\t\",\"GSK3B\\twXwgUTNkgFnQ\\tGENE\\t-1\\t391\\t344\\t\",\"FBXW7\\t57SvZmLzgKXg\\tGENE\\t-1\\t557\\t344\\t\",\"Cell survival\\tNI-5QJa7gr4W\\tPROCESS\\t-1\\t935\\t409\\t\",\"ERBB2\\tY1idRwsY3N1k\\tGENE\\tZAPqdjSDgCgU\\t469\\t148\\t\",\"PIK3CA\\tsJDwUf9sgpI_\\tGENE\\t-1\\t915\\t256\\t\",\"FGFR2\\tM56YC0J03N1R\\tGENE\\tZAPqdjSDgCgU\\t313\\t148\\t\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\",\"pauS7C64g9TO\\tOJ-s2c_vgnZa\\tsJDwUf9sgpI_\\tINHIBITS\",\"9ZMCIs5Ygf4j\\twXwgUTNkgFnQ\\ti1tsajIagMAh\\tINHIBITS\",\"BXhEIXgdhBkV\\tsJDwUf9sgpI_\\t0L6ulMimgteS\\tACTIVATES\",\"DLrHfIVSgegJ\\t76Wg78V_gDdz\\twXwgUTNkgFnQ\\tINHIBITS\",\"y_ifcFbCgcdH\\tZAPqdjSDgCgU\\t76Wg78V_gDdz\\tACTIVATES\",\"F5LjanELggnD\\tBXxulVFjgHIs\\ti1tsajIagMAh\\tINHIBITS\",\"2-tF8Ncmgiab\\ti1tsajIagMAh\\tMsHCffb6gNY_\\tACTIVATES\",\"tJv0DWt8g-nF\\tsJDwUf9sgpI_\\tsoh0TxsPgq1P\\tACTIVATES\",\"rps45EGCg_aW\\tsJDwUf9sgpI_\\tNI-5QJa7gr4W\\tACTIVATES\",\"w8Id1r73g8Xz\\tQha2pMPigm3R\\tsJDwUf9sgpI_\\tINHIBITS\",\"daN2ajyqghSz\\t57SvZmLzgKXg\\ti1tsajIagMAh\\tINHIBITS\"],\"WNT\":[\"WNT\",\"\",\"Involved in both development and tissue homeostasis. The canonical Wnt pathway involves signal transduction initiated by Wnt ligand binding to Frizzled family receptors leading to the dysregulation of beta-catenin degradation and ultimately, the induction of transcription via TCF/LEF transcription factors by beta-catenin.\",\"\",\"--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--\",\"SFRP3\\tEiQGCkYbf2Ue\\tGENE\\taqCo94T-f2UY\\t214\\t113\",\"DKK\\tRpK5JOBLf2U5\\tFAMILY\\t-1\\t819\\t306\",\"TLE1\\toLjLH1mCf2T6\\tGENE\\tz1BS71lif2T2\\t702\\t625\",\"TLE4\\tUjSaC5Phf2T3\\tGENE\\tz1BS71lif2T2\\t858\\t685\",\"SFRP1\\tLgjBpjM-f2Ux\\tGENE\\taqCo94T-f2UY\\t63\\t147\",\"Groucho\\tz1BS71lif2T2\\tFAMILY\\t-1\\t780\\t655\",\"APC\\tKzWeNNlbf2UJ\\tGENE\\t-1\\t228\\t521\",\"TCF7L1\\tletl9duUf2WR\\tGENE\\tabIO9oDkf2WA\\t341\\t691\",\"WIF1\\t5iL99X9Jf2Tw\\tGENE\\t-1\\t452\\t61\",\"TLE2\\tR0vKN1sif2T9\\tGENE\\tz1BS71lif2T2\\t858\\t625\",\"DKK1\\tDRSXFgEQf2U9\\tGENE\\tRpK5JOBLf2U5\\t739\\t275\",\"TCF7L2\\tRPLZ4osLf2Wb\\tGENE\\tabIO9oDkf2WA\\t499\\t690\",\"AXIN1\\tKq4oChNGf2Vz\\tGENE\\tkoQkppv4f2Vq\\t599\\t443\",\"WNT Dual Receptor Complex\\tqRabkjW8f2VS\\tCOMPLEX\\t-1\\t458\\t304\",\"SFRP2\\thqXcbX1yf2U1\\tGENE\\taqCo94T-f2UY\\t63\\t203\",\"LRP5\\tDK7CkEYCf2Vi\\tGENE\\tqRabkjW8f2VS\\t536\\t276\",\"TCF7\\tpK9uMdhUf2WH\\tGENE\\tabIO9oDkf2WA\\t422\\t632\",\"TLE3\\tmA6zfzOUf2UA\\tGENE\\tz1BS71lif2T2\\t702\\t685\",\"Cell proliferation\\thFWwt8jrf2UV\\tPROCESS\\t-1\\t135\\t667\",\"TCF/LEF\\tabIO9oDkf2WA\\tCOMPLEX\\t-1\\t420\\t661\",\"AXIN\\tkoQkppv4f2Vq\\tFAMILY\\t-1\\t678\\t443\",\"RNF43\\telbyeD9tf2UD\\tGENE\\t-1\\t144\\t303\",\"CTNNB1\\t3GRyWPj8f2UM\\tGENE\\t-1\\t417\\t485\",\"DKK2\\tyYuxYP9Qf2VC\\tGENE\\tRpK5JOBLf2U5\\t899\\t275\",\"FZDs\\tjR_K-66Df2VX\\tGENE\\tqRabkjW8f2VS\\t381\\t301\",\"DKK4\\tlRy7Jj0Nf2VN\\tGENE\\tRpK5JOBLf2U5\\t899\\t337\",\"SFRP\\taqCo94T-f2UY\\tFAMILY\\t-1\\t138\\t169\",\"WNT ligands\\twCThVVjSf2Tz\\tGENE\\t-1\\t452\\t168\",\"LRP6\\tnr8aMEmUf2Vd\\tGENE\\tqRabkjW8f2VS\\t536\\t332\",\"GSK3B\\tmuxig_C-f2UG\\tGENE\\t-1\\t228\\t446\",\"SFRP5\\tB0f2GOAff2Us\\tGENE\\taqCo94T-f2UY\\t214\\t226\",\"AMER1\\tpAChF0thf2US\\tGENE\\t-1\\t599\\t519\",\"SFRP4\\tQMwh9gC-f2Ul\\tGENE\\taqCo94T-f2UY\\t214\\t170\",\"AXIN2\\tpD0TMIi_f2V5\\tGENE\\tkoQkppv4f2Vq\\t758\\t443\",\"DKK3\\twStErGAEf2VH\\tGENE\\tRpK5JOBLf2U5\\t739\\t337\",\"\",\"--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPEINTERACTION_PUBMED_ID\",\"XWIzsv56f2Wm\\taqCo94T-f2UY\\twCThVVjSf2Tz\\tINHIBITS\\t\",\"Bps0rTlOf2W1\\tpAChF0thf2US\\t3GRyWPj8f2UM\\tINHIBITS\\t\",\"Bt39Pfi9f2W-\\tqRabkjW8f2VS\\tmuxig_C-f2UG\\tACTIVATES\\t\",\"x3LsoTaTf2Ww\\telbyeD9tf2UD\\tqRabkjW8f2VS\\tINHIBITS\\t\",\"PgNv7XZif2XA\\tmuxig_C-f2UG\\t3GRyWPj8f2UM\\tINHIBITS\\t\",\"-u2h2V6ef2XK\\tabIO9oDkf2WA\\thFWwt8jrf2UV\\tACTIVATES\\t\",\"an6n-VWDf2Wt\\twCThVVjSf2Tz\\tqRabkjW8f2VS\\tACTIVATES\\t\",\"h4-_HrCRf2W4\\tqRabkjW8f2VS\\tkoQkppv4f2Vq\\tACTIVATES\\t\",\"3NL_goRgf2W6\\tkoQkppv4f2Vq\\t3GRyWPj8f2UM\\tINHIBITS\\t\",\"-q76c9PDf2Wy\\tRpK5JOBLf2U5\\tqRabkjW8f2VS\\tINHIBITS\\t\",\"h9BN2IKjf2Wr\\t5iL99X9Jf2Tw\\twCThVVjSf2Tz\\tINHIBITS\\t\",\"rRLoK5NMf2XD\\tKzWeNNlbf2UJ\\t3GRyWPj8f2UM\\tINHIBITS\\t\",\"l7-kESH_f2XH\\tz1BS71lif2T2\\tabIO9oDkf2WA\\tINHIBITS\\t\"]}"); /***/ }), /* 9 */ /***/ (function(module, exports) { -module.exports = require("underscore"); +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iNDdweCIgaGVpZ2h0PSI0N3B4IiB2aWV3Qm94PSIwIDAgNDcgNDciIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQ3IDQ3OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxnPgoJPGcgaWQ9IkxheWVyXzFfMTEwXyI+CgkJPGc+CgkJCTxwYXRoIGQ9Ik0xNy41NjcsMTUuOTM4bC0yLjg1OS0yLjcwMmMwLjMzMy0wLjYwNSwwLjUzOS0xLjI5LDAuNTM5LTIuMDI5YzAtMi4zNDItMS44OTctNC4yMzktNC4yNC00LjIzOQoJCQkJYy0yLjM0MywwLTQuMjQzLDEuODk2LTQuMjQzLDQuMjM5YzAsMi4zNDMsMS45LDQuMjQxLDQuMjQzLDQuMjQxYzAuODI2LDAsMS41OS0wLjI0NiwyLjI0Mi0wLjY1NGwyLjg1NSwyLjY5OQoJCQkJQzE2LjUzNiwxNi45MjIsMTcuMDIzLDE2LjM5OSwxNy41NjcsMTUuOTM4eiIvPgoJCQk8cGF0aCBkPSJNMjkuNjYsMTUuNmwzLjc5OS02LjM5M2MwLjM3NCwwLjEwNywwLjc2MiwwLjE4NCwxLjE2OSwwLjE4NGMyLjM0NywwLDQuMjQ0LTEuODk4LDQuMjQ0LTQuMjQxCgkJCQljMC0yLjM0Mi0xLjg5Ny00LjIzOS00LjI0NC00LjIzOWMtMi4zNDMsMC00LjIzOSwxLjg5Ni00LjIzOSw0LjIzOWMwLDEuMTYzLDAuNDY5LDIuMjE0LDEuMjI3LDIuOTgxbC0zLjc4Nyw2LjM3NQoJCQkJQzI4LjQ4LDE0LjgwMSwyOS4wOTQsMTUuMTY5LDI5LjY2LDE1LjZ6Ii8+CgkJCTxwYXRoIGQ9Ik00Mi43NjIsMjAuOTUyYy0xLjgyNCwwLTMuMzY5LDEuMTU5LTMuOTY4LDIuNzc1bC01LjI3OC0wLjUyMWMwLDAuMDQsMC4wMDYsMC4wNzgsMC4wMDYsMC4xMTcKCQkJCWMwLDAuNjg4LTAuMDc2LDEuMzYtMC4yMTMsMi4wMDlsNS4yNzYsMC41MjFjMC4zMTksMi4wMjQsMi4wNjIsMy41NzYsNC4xNzcsMy41NzZjMi4zNDIsMCw0LjIzOC0xLjg5Niw0LjIzOC00LjIzOAoJCQkJQzQ3LDIyLjg1LDQ1LjEwNCwyMC45NTIsNDIuNzYyLDIwLjk1MnoiLz4KCQkJPHBhdGggZD0iTTI4LjE5NywzNy42MjRsLTEuMTgtNS4xNTZjLTAuNjY2LDAuMjMyLTEuMzU5LDAuMzk4LTIuMDgyLDAuNDgxbDEuMTgyLDUuMTU3Yy0xLjM1NSwwLjcwOS0yLjI5LDIuMTEtMi4yOSwzLjc0NgoJCQkJYzAsMi4zNDIsMS44OTYsNC4yMzcsNC4yNDMsNC4yMzdjMi4zNDIsMCw0LjIzOC0xLjg5Niw0LjIzOC00LjIzN0MzMi4zMTEsMzkuNTUzLDMwLjQ3OSwzNy42OTIsMjguMTk3LDM3LjYyNHoiLz4KCQkJPHBhdGggZD0iTTE0LjM1NywyNS4zN2wtNi41NywyLjIwMWMtMC43NTgtMS4xNTgtMi4wNjMtMS45MjYtMy41NDgtMS45MjZDMS44OTYsMjUuNjQ1LDAsMjcuNTQyLDAsMjkuODg0CgkJCQljMCwyLjM0NSwxLjg5Niw0LjI0Miw0LjIzOSw0LjI0MmMyLjM0MSwwLDQuMjQyLTEuODk3LDQuMjQyLTQuMjQyYzAtMC4wOTgtMC4wMjEtMC4xODgtMC4wMjktMC4yODRsNi41OTEtMi4yMDcKCQkJCUMxNC43NDYsMjYuNzUyLDE0LjUxLDI2LjA3NywxNC4zNTcsMjUuMzd6Ii8+CgkJCTxjaXJjbGUgY3g9IjIzLjgzIiBjeT0iMjMuMzIzIiByPSI3LjI3MSIvPgoJCTwvZz4KCTwvZz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K" /***/ }), /* 10 */ @@ -173,109 +173,109 @@ module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGlu /* 14 */ /***/ (function(module, exports) { -module.exports = require("lodash"); +module.exports = require("file-saver"); /***/ }), /* 15 */ /***/ (function(module, exports) { -module.exports = require("file-saver"); +module.exports = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItZWRpdCI+PHBhdGggZD0iTTExIDRINGEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoMTRhMiAyIDAgMCAwIDItMnYtNyI+PC9wYXRoPjxwYXRoIGQ9Ik0xOC41IDIuNWEyLjEyMSAyLjEyMSAwIDAgMSAzIDNMMTIgMTVsLTQgMSAxLTQgOS41LTkuNXoiPjwvcGF0aD48L3N2Zz4=" /***/ }), /* 16 */ /***/ (function(module, exports) { -module.exports = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItZWRpdCI+PHBhdGggZD0iTTExIDRINGEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoMTRhMiAyIDAgMCAwIDItMnYtNyI+PC9wYXRoPjxwYXRoIGQ9Ik0xOC41IDIuNWEyLjEyMSAyLjEyMSAwIDAgMSAzIDNMMTIgMTVsLTQgMSAxLTQgOS41LTkuNXoiPjwvcGF0aD48L3N2Zz4=" +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE4LjEuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMjMuNjI1IDIzLjYyNSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMjMuNjI1IDIzLjYyNTsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggc3R5bGU9ImZpbGw6IzAzMDEwNDsiIGQ9Ik0xMS44MTIsMEM1LjI4OSwwLDAsNS4yODksMCwxMS44MTJzNS4yODksMTEuODEzLDExLjgxMiwxMS44MTNzMTEuODEzLTUuMjksMTEuODEzLTExLjgxMw0KCQlTMTguMzM1LDAsMTEuODEyLDB6IE0xNC4yNzEsMTguMzA3Yy0wLjYwOCwwLjI0LTEuMDkyLDAuNDIyLTEuNDU1LDAuNTQ4Yy0wLjM2MiwwLjEyNi0wLjc4MywwLjE4OS0xLjI2MiwwLjE4OQ0KCQljLTAuNzM2LDAtMS4zMDktMC4xOC0xLjcxNy0wLjUzOXMtMC42MTEtMC44MTQtMC42MTEtMS4zNjdjMC0wLjIxNSwwLjAxNS0wLjQzNSwwLjA0NS0wLjY1OWMwLjAzMS0wLjIyNCwwLjA4LTAuNDc2LDAuMTQ3LTAuNzU5DQoJCWwwLjc2MS0yLjY4OGMwLjA2Ny0wLjI1OCwwLjEyNS0wLjUwMywwLjE3MS0wLjczMWMwLjA0Ni0wLjIzLDAuMDY4LTAuNDQxLDAuMDY4LTAuNjMzYzAtMC4zNDItMC4wNzEtMC41ODItMC4yMTItMC43MTcNCgkJYy0wLjE0My0wLjEzNS0wLjQxMi0wLjIwMS0wLjgxMy0wLjIwMWMtMC4xOTYsMC0wLjM5OCwwLjAyOS0wLjYwNSwwLjA5Yy0wLjIwNSwwLjA2My0wLjM4MywwLjEyLTAuNTI5LDAuMTc2bDAuMjAxLTAuODI4DQoJCWMwLjQ5OC0wLjIwMywwLjk3NS0wLjM3NywxLjQzLTAuNTIxYzAuNDU1LTAuMTQ2LDAuODg1LTAuMjE4LDEuMjktMC4yMThjMC43MzEsMCwxLjI5NSwwLjE3OCwxLjY5MiwwLjUzDQoJCWMwLjM5NSwwLjM1MywwLjU5NCwwLjgxMiwwLjU5NCwxLjM3NmMwLDAuMTE3LTAuMDE0LDAuMzIzLTAuMDQxLDAuNjE3Yy0wLjAyNywwLjI5NS0wLjA3OCwwLjU2NC0wLjE1MiwwLjgxMWwtMC43NTcsMi42OA0KCQljLTAuMDYyLDAuMjE1LTAuMTE3LDAuNDYxLTAuMTY3LDAuNzM2Yy0wLjA0OSwwLjI3NS0wLjA3MywwLjQ4NS0wLjA3MywwLjYyNmMwLDAuMzU2LDAuMDc5LDAuNTk5LDAuMjM5LDAuNzI4DQoJCWMwLjE1OCwwLjEyOSwwLjQzNSwwLjE5NCwwLjgyNywwLjE5NGMwLjE4NSwwLDAuMzkyLTAuMDMzLDAuNjI2LTAuMDk3YzAuMjMyLTAuMDY0LDAuNC0wLjEyMSwwLjUwNi0wLjE3TDE0LjI3MSwxOC4zMDd6DQoJCSBNMTQuMTM3LDcuNDI5Yy0wLjM1MywwLjMyOC0wLjc3OCwwLjQ5Mi0xLjI3NSwwLjQ5MmMtMC40OTYsMC0wLjkyNC0wLjE2NC0xLjI4LTAuNDkyYy0wLjM1NC0wLjMyOC0wLjUzMy0wLjcyNy0wLjUzMy0xLjE5Mw0KCQljMC0wLjQ2NSwwLjE4LTAuODY1LDAuNTMzLTEuMTk2YzAuMzU2LTAuMzMyLDAuNzg0LTAuNDk3LDEuMjgtMC40OTdjMC40OTcsMCwwLjkyMywwLjE2NSwxLjI3NSwwLjQ5Nw0KCQljMC4zNTMsMC4zMzEsMC41MywwLjczMSwwLjUzLDEuMTk2QzE0LjY2Nyw2LjcwMywxNC40OSw3LjEwMSwxNC4xMzcsNy40Mjl6Ii8+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==" /***/ }), /* 17 */ /***/ (function(module, exports) { -module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iMTc0IgogICBoZWlnaHQ9IjQ0LjQ0MjgyMiIKICAgdmlld0JveD0iMCAwIDE2My4xMjUgNDEuNjY1MTQ2IgogICBpZD0ic3ZnNDM5OSIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIgogICBzb2RpcG9kaTpkb2NuYW1lPSJnZW5lLnN2ZyI+CiAgPGRlZnMKICAgICBpZD0iZGVmczQ0MDEiIC8+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjEuNCIKICAgICBpbmtzY2FwZTpjeD0iNTUuODIzMzUzIgogICAgIGlua3NjYXBlOmN5PSI5My41MTExNjYiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB4IgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgZml0LW1hcmdpbi10b3A9IjAiCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIgogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiCiAgICAgZml0LW1hcmdpbi1ib3R0b209IjAiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciCiAgICAgaW5rc2NhcGU6d2luZG93LXg9Ii04IgogICAgIGlua3NjYXBlOndpbmRvdy15PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIHVuaXRzPSJweCIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE0NDA0Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjc2LjA2NDk3LC0zMTcuNjY4OTcpIj4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozLjIzMTI2OTg0O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGlkPSJyZWN0Mjk4NSIKICAgICAgIHdpZHRoPSIxNTkuODkzNzQiCiAgICAgICBoZWlnaHQ9IjM4LjQzMzg3NiIKICAgICAgIHg9IjI3Ny42ODA2IgogICAgICAgeT0iMzE5LjI4NDYxIgogICAgICAgcnk9IjkuOTE4NDAzNiIKICAgICAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSI1My45NTk5OTkiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iNTMuOTU5OTk5IgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LWZpbGVuYW1lPSJDOlxVc2Vyc1x1Z3VyXEdvb2dsZSBEcml2ZVx0b29sYmFyXG1hY3JvbW9sZWN1bGUucG5nIiAvPgogICAgPHRleHQKICAgICAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgICAgICBzdHlsZT0iZm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc2l6ZToyOC4xMjVweDtsaW5lLWhlaWdodDoxMjUlO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6MHB4O3dvcmQtc3BhY2luZzowcHg7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjkzNzVweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgeD0iMzM4LjA3NTQ3IgogICAgICAgeT0iMzQzLjk0NzExIgogICAgICAgaWQ9InRleHQ4MTgiPjx0c3BhbgogICAgICAgICBzb2RpcG9kaTpyb2xlPSJsaW5lIgogICAgICAgICBpZD0idHNwYW44MTYiCiAgICAgICAgIHg9IjMzOC4wNzU0NyIKICAgICAgICAgeT0iMzQzLjk0NzExIgogICAgICAgICBzdHlsZT0iZm9udC1zaXplOjE1cHg7c3Ryb2tlLXdpZHRoOjAuOTM3NXB4Ij5HZW5lPC90c3Bhbj48L3RleHQ+CiAgPC9nPgo8L3N2Zz4K" +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxOS4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4KCjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0iQ2FwYV8xIgogICB4PSIwcHgiCiAgIHk9IjBweCIKICAgdmlld0JveD0iMCAwIDU3IDU3IgogICBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1NyA1NzsiCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgIHNvZGlwb2RpOmRvY25hbWU9ImFkZC1zZWxlY3RlZC1uZXcuc3ZnIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjQgKDVkYTY4OWMzMTMsIDIwMTktMDEtMTQpIj48bWV0YWRhdGEKICAgaWQ9Im1ldGFkYXRhNDciPjxyZGY6UkRGPjxjYzpXb3JrCiAgICAgICByZGY6YWJvdXQ9IiI+PGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+PGRjOnR5cGUKICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48ZGM6dGl0bGU+PC9kYzp0aXRsZT48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMKICAgaWQ9ImRlZnM0NSI+CgkKCQoJCgkKPC9kZWZzPjxzb2RpcG9kaTpuYW1lZHZpZXcKICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgYm9yZGVyb3BhY2l0eT0iMSIKICAgb2JqZWN0dG9sZXJhbmNlPSIxMCIKICAgZ3JpZHRvbGVyYW5jZT0iMTAiCiAgIGd1aWRldG9sZXJhbmNlPSIxMCIKICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAiCiAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTA5NyIKICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iNzE5IgogICBpZD0ibmFtZWR2aWV3NDMiCiAgIHNob3dncmlkPSJmYWxzZSIKICAgaW5rc2NhcGU6em9vbT0iNC4xNDAzNTA5IgogICBpbmtzY2FwZTpjeD0iLTEwLjc0Nzg4MSIKICAgaW5rc2NhcGU6Y3k9IjI4LjUiCiAgIGlua3NjYXBlOndpbmRvdy14PSIwIgogICBpbmtzY2FwZTp3aW5kb3cteT0iMCIKICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMCIKICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0iQ2FwYV8xIiAvPgo8cGF0aAogICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICBpZD0icGF0aDIiCiAgIGQ9Ik0gMjguNjYsNiBIIDkuMzQgQyA3LjQ5OCw2IDYsNy40OTggNiw5LjM0IFYgMjguNjYgQyA2LDMwLjUwMiA3LjQ5OCwzMiA5LjM0LDMyIEggMjguNjYgQyAzMC41MDIsMzIgMzIsMzAuNTAyIDMyLDI4LjY2IFYgOS4zNCBDIDMyLDcuNDk4IDMwLjUwMiw2IDI4LjY2LDYgWiIgLz48cGF0aAogICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICBpZD0icGF0aDgiCiAgIGQ9Ik0gNTEsMzcgSCA0MSBWIDI3IGMgMCwtMS4xMDQgLTAuODk2LC0yIC0yLC0yIC0xLjEwNCwwIC0yLDAuODk2IC0yLDIgViAzNyBIIDI3IGMgLTEuMTA0LDAgLTIsMC44OTYgLTIsMiAwLDEuMTA0IDAuODk2LDIgMiwyIGggMTAgdiAxMCBjIDAsMS4xMDQgMC44OTYsMiAyLDIgMS4xMDQsMCAyLC0wLjg5NiAyLC0yIFYgNDEgaCAxMCBjIDEuMTA0LDAgMiwtMC44OTYgMiwtMiAwLC0xLjEwNCAtMC44OTYsLTIgLTIsLTIgeiIgLz4KPGcKICAgaWQ9ImcxMiI+CjwvZz4KPGcKICAgaWQ9ImcxNCI+CjwvZz4KPGcKICAgaWQ9ImcxNiI+CjwvZz4KPGcKICAgaWQ9ImcxOCI+CjwvZz4KPGcKICAgaWQ9ImcyMCI+CjwvZz4KPGcKICAgaWQ9ImcyMiI+CjwvZz4KPGcKICAgaWQ9ImcyNCI+CjwvZz4KPGcKICAgaWQ9ImcyNiI+CjwvZz4KPGcKICAgaWQ9ImcyOCI+CjwvZz4KPGcKICAgaWQ9ImczMCI+CjwvZz4KPGcKICAgaWQ9ImczMiI+CjwvZz4KPGcKICAgaWQ9ImczNCI+CjwvZz4KPGcKICAgaWQ9ImczNiI+CjwvZz4KPGcKICAgaWQ9ImczOCI+CjwvZz4KPGcKICAgaWQ9Imc0MCI+CjwvZz4KPC9zdmc+" /***/ }), /* 18 */ /***/ (function(module, exports) { -module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iMTczLjk5OTM3IgogICBoZWlnaHQ9IjQ1LjA4MjAwMSIKICAgdmlld0JveD0iMCAwIDE2My4xMjQ0MiA0Mi4yNjQzNzYiCiAgIGlkPSJzdmc0Mzk5IgogICB2ZXJzaW9uPSIxLjEiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTIuMSByMTUzNzEiCiAgIHNvZGlwb2RpOmRvY25hbWU9ImZhbWlseS5zdmciPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0NDAxIiAvPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSIxLjQiCiAgICAgaW5rc2NhcGU6Y3g9IjE3MS44OTQ3NyIKICAgICBpbmtzY2FwZTpjeT0iOTMuNTExMTkyIgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGZpdC1tYXJnaW4tdG9wPSIwIgogICAgIGZpdC1tYXJnaW4tbGVmdD0iMCIKICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIwIgogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDE3IgogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIKICAgICB1bml0cz0icHgiIC8+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNDQwNCI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGU+PC9kYzp0aXRsZT4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTI3Ni4wNjQ5OCwtMzE3LjA2OTc3KSI+CiAgICA8cmVjdAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzkzOTM5MztzdHJva2Utd2lkdGg6My4yNTUxMTgzNztzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBpZD0icmVjdDI5ODUiCiAgICAgICB3aWR0aD0iMTU5Ljg2OTI5IgogICAgICAgaGVpZ2h0PSIzOS4wMDkyNTgiCiAgICAgICB4PSIyNzcuNjkyNTQiCiAgICAgICB5PSIzMTguNjk3MzMiCiAgICAgICByeT0iMCIKICAgICAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSI1My45NTk5OTkiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iNTMuOTU5OTk5IgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LWZpbGVuYW1lPSJDOlxVc2Vyc1x1Z3VyXEdvb2dsZSBEcml2ZVx0b29sYmFyXG1hY3JvbW9sZWN1bGUucG5nIiAvPgogICAgPHRleHQKICAgICAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgICAgICBzdHlsZT0iZm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc2l6ZToyOC4xMjVweDtsaW5lLWhlaWdodDoxMjUlO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6MHB4O3dvcmQtc3BhY2luZzowcHg7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjkzNzVweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgeD0iMzMyLjg2MDMyIgogICAgICAgeT0iMzQyLjM5MTQyIgogICAgICAgaWQ9InRleHQ4MTgiPjx0c3BhbgogICAgICAgICBzb2RpcG9kaTpyb2xlPSJsaW5lIgogICAgICAgICBpZD0idHNwYW44MTYiCiAgICAgICAgIHg9IjMzMi44NjAzMiIKICAgICAgICAgeT0iMzQyLjM5MTQyIgogICAgICAgICBzdHlsZT0iZm9udC1zaXplOjE1cHg7c3Ryb2tlLXdpZHRoOjAuOTM3NXB4Ij5GYW1pbHk8L3RzcGFuPjwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo=" +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTcgNTciIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDU3IDU3OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8Zz4NCgk8cGF0aCBkPSJNMjIuNjYsMEgzLjM0QzEuNDk4LDAsMCwxLjQ5OCwwLDMuMzR2MTkuMzJDMCwyNC41MDIsMS40OTgsMjYsMy4zNCwyNmgxOS4zMmMxLjg0MiwwLDMuMzQtMS40OTgsMy4zNC0zLjM0VjMuMzQNCgkJQzI2LDEuNDk4LDI0LjUwMiwwLDIyLjY2LDB6Ii8+DQoJPHBhdGggZD0iTTMzLjM0LDI2aDE5LjMyYzEuODQyLDAsMy4zNC0xLjQ5OCwzLjM0LTMuMzRWMy4zNEM1NiwxLjQ5OCw1NC41MDIsMCw1Mi42NiwwSDMzLjM0QzMxLjQ5OCwwLDMwLDEuNDk4LDMwLDMuMzR2MTkuMzINCgkJQzMwLDI0LjUwMiwzMS40OTgsMjYsMzMuMzQsMjZ6Ii8+DQoJPHBhdGggZD0iTTIyLjY2LDMwSDMuMzRDMS40OTgsMzAsMCwzMS40OTgsMCwzMy4zNHYxOS4zMkMwLDU0LjUwMiwxLjQ5OCw1NiwzLjM0LDU2aDE5LjMyYzEuODQyLDAsMy4zNC0xLjQ5OCwzLjM0LTMuMzRWMzMuMzQNCgkJQzI2LDMxLjQ5OCwyNC41MDIsMzAsMjIuNjYsMzB6Ii8+DQoJPHBhdGggZD0iTTU1LDQxSDQ1VjMxYzAtMS4xMDQtMC44OTYtMi0yLTJzLTIsMC44OTYtMiwydjEwSDMxYy0xLjEwNCwwLTIsMC44OTYtMiwyczAuODk2LDIsMiwyaDEwdjEwYzAsMS4xMDQsMC44OTYsMiwyLDINCgkJczItMC44OTYsMi0yVjQ1aDEwYzEuMTA0LDAsMi0wLjg5NiwyLTJTNTYuMTA0LDQxLDU1LDQxeiIvPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPC9zdmc+DQo=" /***/ }), /* 19 */ /***/ (function(module, exports) { -module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iMTc0IgogICBoZWlnaHQ9IjQ0LjQ0MjgyMiIKICAgdmlld0JveD0iMCAwIDE2My4xMjUgNDEuNjY1MTQ2IgogICBpZD0ic3ZnNDM5OSIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIgogICBzb2RpcG9kaTpkb2NuYW1lPSJjb21wbGV4LnN2ZyI+CiAgPGRlZnMKICAgICBpZD0iZGVmczQ0MDEiIC8+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjEuNCIKICAgICBpbmtzY2FwZTpjeD0iNTUuODIzMzUzIgogICAgIGlua3NjYXBlOmN5PSI5My41MTExNjYiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB4IgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgZml0LW1hcmdpbi10b3A9IjAiCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIgogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiCiAgICAgZml0LW1hcmdpbi1ib3R0b209IjAiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciCiAgICAgaW5rc2NhcGU6d2luZG93LXg9Ii04IgogICAgIGlua3NjYXBlOndpbmRvdy15PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIHVuaXRzPSJweCIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE0NDA0Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjc2LjA2NDk3LC0zMTcuNjY4OTcpIj4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozLjIzMTI2OTg0O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGlkPSJyZWN0Mjk4NSIKICAgICAgIHdpZHRoPSIxNTkuODkzNzQiCiAgICAgICBoZWlnaHQ9IjM4LjQzMzg3NiIKICAgICAgIHg9IjI3Ny42ODA2IgogICAgICAgeT0iMzE5LjI4NDYxIgogICAgICAgcnk9IjAiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iNTMuOTU5OTk5IgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjUzLjk1OTk5OSIKICAgICAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iQzpcVXNlcnNcdWd1clxHb29nbGUgRHJpdmVcdG9vbGJhclxtYWNyb21vbGVjdWxlLnBuZyIgLz4KICAgIDx0ZXh0CiAgICAgICB4bWw6c3BhY2U9InByZXNlcnZlIgogICAgICAgc3R5bGU9ImZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXNpemU6MjguMTI1cHg7bGluZS1oZWlnaHQ6MTI1JTtmb250LWZhbWlseTpzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC45Mzc1cHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIHg9IjMyNC43MTYwOSIKICAgICAgIHk9IjM0Mi42OTEwMSIKICAgICAgIGlkPSJ0ZXh0ODE4Ij48dHNwYW4KICAgICAgICAgc29kaXBvZGk6cm9sZT0ibGluZSIKICAgICAgICAgaWQ9InRzcGFuODE2IgogICAgICAgICB4PSIzMjQuNzE2MDkiCiAgICAgICAgIHk9IjM0Mi42OTEwMSIKICAgICAgICAgc3R5bGU9ImZvbnQtc2l6ZToxNXB4O3N0cm9rZS13aWR0aDowLjkzNzVweCI+Q29tcGxleDwvdHNwYW4+PC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==" +module.exports = require("mousetrap"); /***/ }), /* 20 */ /***/ (function(module, exports) { -module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iMTc0IgogICBoZWlnaHQ9IjQ3Ljg4NzMxIgogICB2aWV3Qm94PSIwIDAgMTYzLjEyNSA0NC44OTQzNTQiCiAgIGlkPSJzdmc0Mzk5IgogICB2ZXJzaW9uPSIxLjEiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTIuMSByMTUzNzEiCiAgIHNvZGlwb2RpOmRvY25hbWU9ImNvbXBhcnRtZW50LnN2ZyI+CiAgPGRlZnMKICAgICBpZD0iZGVmczQ0MDEiIC8+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjEuNCIKICAgICBpbmtzY2FwZTpjeD0iNTcuNTQ1NjA4IgogICAgIGlua3NjYXBlOmN5PSI5NS4yMzMzOTkiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB4IgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgZml0LW1hcmdpbi10b3A9IjAiCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIgogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiCiAgICAgZml0LW1hcmdpbi1ib3R0b209IjAiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciCiAgICAgaW5rc2NhcGU6d2luZG93LXg9Ii04IgogICAgIGlua3NjYXBlOndpbmRvdy15PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIHVuaXRzPSJweCIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE0NDA0Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjc0LjQ1MDM1LC0zMTYuMDU0MzYpIj4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDo2LjgyOTY5OTA0O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGlkPSJyZWN0Mjk4NSIKICAgICAgIHdpZHRoPSIxNTYuMjk1MyIKICAgICAgIGhlaWdodD0iMzguMDY0NjU1IgogICAgICAgeD0iMjc3Ljg2NTIiCiAgICAgICB5PSIzMTkuNDY5MjEiCiAgICAgICByeT0iOS44MjMxMjExIgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjUzLjk1OTk5OSIKICAgICAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSI1My45NTk5OTkiCiAgICAgICBpbmtzY2FwZTpleHBvcnQtZmlsZW5hbWU9IkM6XFVzZXJzXHVndXJcR29vZ2xlIERyaXZlXHRvb2xiYXJcbWFjcm9tb2xlY3VsZS5wbmciIC8+CiAgICA8dGV4dAogICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIKICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjI4LjEyNXB4O2xpbmUtaGVpZ2h0OjEyNSU7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuOTM3NXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICB4PSIzMDMuODM1MTEiCiAgICAgICB5PSIzNDIuNTQ0NDkiCiAgICAgICBpZD0idGV4dDgxOCI+PHRzcGFuCiAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiCiAgICAgICAgIGlkPSJ0c3BhbjgxNiIKICAgICAgICAgeD0iMzAzLjgzNTExIgogICAgICAgICB5PSIzNDIuNTQ0NDkiCiAgICAgICAgIHN0eWxlPSJmb250LXNpemU6MTVweDtzdHJva2Utd2lkdGg6MC45Mzc1cHgiPkNvbXBhcnRtZW50PC90c3Bhbj48L3RleHQ+CiAgPC9nPgo8L3N2Zz4K" +module.exports = require("react-tooltip"); /***/ }), /* 21 */ /***/ (function(module, exports) { -module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iMTc0IgogICBoZWlnaHQ9IjQ0LjQ0MjgyMiIKICAgdmlld0JveD0iMCAwIDE2My4xMjUgNDEuNjY1MTQ2IgogICBpZD0ic3ZnNDM5OSIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIgogICBzb2RpcG9kaTpkb2NuYW1lPSJwcm9jZXNzLnN2ZyI+CiAgPGRlZnMKICAgICBpZD0iZGVmczQ0MDEiIC8+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjEuNCIKICAgICBpbmtzY2FwZTpjeD0iLTYwLjI0ODA3NiIKICAgICBpbmtzY2FwZTpjeT0iOTMuNTExMTY2IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGZpdC1tYXJnaW4tdG9wPSIwIgogICAgIGZpdC1tYXJnaW4tbGVmdD0iMCIKICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIwIgogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDE3IgogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIKICAgICB1bml0cz0icHgiIC8+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNDQwNCI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGU+PC9kYzp0aXRsZT4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTI3Ni4wNjQ5NywtMzE3LjY2ODk3KSI+CiAgICA8dGV4dAogICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIKICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjI4LjEyNXB4O2xpbmUtaGVpZ2h0OjEyNSU7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuOTM3NXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICB4PSIzMjguNzE1MTIiCiAgICAgICB5PSIzNDMuODQwOTEiCiAgICAgICBpZD0idGV4dDgxOCI+PHRzcGFuCiAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiCiAgICAgICAgIGlkPSJ0c3BhbjgxNiIKICAgICAgICAgeD0iMzI4LjcxNTEyIgogICAgICAgICB5PSIzNDMuODQwOTEiCiAgICAgICAgIHN0eWxlPSJmb250LXNpemU6MTVweDtzdHJva2Utd2lkdGg6MC45Mzc1cHgiPlByb2Nlc3M8L3RzcGFuPjwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo=" +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iNzUuNDA2cHgiIGhlaWdodD0iNzUuNDA2cHgiIHZpZXdCb3g9IjAgMCA3NS40MDYgNzUuNDA2IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA3NS40MDYgNzUuNDA2OyIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8cGF0aCBkPSJNMzUuNDM2LDBINy43NTV2NjMuOTUyaDI3LjY4MkwzNS40MzYsMEwzNS40MzYsMHogTTMyLjU3Myw2MS4wODlIMTAuNjE4VjIuODYzaDIxLjk1NVY2MS4wODl6IE03MC4yNzQsMjYuNDg4aC0yNy42OAoJCXYzNy40NjRoMjcuNjgyVjI2LjQ4OEg3MC4yNzR6IE02Ny40MTIsNjEuMDg5SDQ1LjQ1N1YyOS4zNTFoMjEuOTU1VjYxLjA4OXogTTc0LjU3MSw3MC4zOTV2NS4wMTJIMC44MzV2LTUuMDEySDc0LjU3MXoiLz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K" /***/ }), /* 22 */ /***/ (function(module, exports) { -module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE4LjEuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMjMuNjI1IDIzLjYyNSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMjMuNjI1IDIzLjYyNTsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggc3R5bGU9ImZpbGw6IzAzMDEwNDsiIGQ9Ik0xMS44MTIsMEM1LjI4OSwwLDAsNS4yODksMCwxMS44MTJzNS4yODksMTEuODEzLDExLjgxMiwxMS44MTNzMTEuODEzLTUuMjksMTEuODEzLTExLjgxMw0KCQlTMTguMzM1LDAsMTEuODEyLDB6IE0xNC4yNzEsMTguMzA3Yy0wLjYwOCwwLjI0LTEuMDkyLDAuNDIyLTEuNDU1LDAuNTQ4Yy0wLjM2MiwwLjEyNi0wLjc4MywwLjE4OS0xLjI2MiwwLjE4OQ0KCQljLTAuNzM2LDAtMS4zMDktMC4xOC0xLjcxNy0wLjUzOXMtMC42MTEtMC44MTQtMC42MTEtMS4zNjdjMC0wLjIxNSwwLjAxNS0wLjQzNSwwLjA0NS0wLjY1OWMwLjAzMS0wLjIyNCwwLjA4LTAuNDc2LDAuMTQ3LTAuNzU5DQoJCWwwLjc2MS0yLjY4OGMwLjA2Ny0wLjI1OCwwLjEyNS0wLjUwMywwLjE3MS0wLjczMWMwLjA0Ni0wLjIzLDAuMDY4LTAuNDQxLDAuMDY4LTAuNjMzYzAtMC4zNDItMC4wNzEtMC41ODItMC4yMTItMC43MTcNCgkJYy0wLjE0My0wLjEzNS0wLjQxMi0wLjIwMS0wLjgxMy0wLjIwMWMtMC4xOTYsMC0wLjM5OCwwLjAyOS0wLjYwNSwwLjA5Yy0wLjIwNSwwLjA2My0wLjM4MywwLjEyLTAuNTI5LDAuMTc2bDAuMjAxLTAuODI4DQoJCWMwLjQ5OC0wLjIwMywwLjk3NS0wLjM3NywxLjQzLTAuNTIxYzAuNDU1LTAuMTQ2LDAuODg1LTAuMjE4LDEuMjktMC4yMThjMC43MzEsMCwxLjI5NSwwLjE3OCwxLjY5MiwwLjUzDQoJCWMwLjM5NSwwLjM1MywwLjU5NCwwLjgxMiwwLjU5NCwxLjM3NmMwLDAuMTE3LTAuMDE0LDAuMzIzLTAuMDQxLDAuNjE3Yy0wLjAyNywwLjI5NS0wLjA3OCwwLjU2NC0wLjE1MiwwLjgxMWwtMC43NTcsMi42OA0KCQljLTAuMDYyLDAuMjE1LTAuMTE3LDAuNDYxLTAuMTY3LDAuNzM2Yy0wLjA0OSwwLjI3NS0wLjA3MywwLjQ4NS0wLjA3MywwLjYyNmMwLDAuMzU2LDAuMDc5LDAuNTk5LDAuMjM5LDAuNzI4DQoJCWMwLjE1OCwwLjEyOSwwLjQzNSwwLjE5NCwwLjgyNywwLjE5NGMwLjE4NSwwLDAuMzkyLTAuMDMzLDAuNjI2LTAuMDk3YzAuMjMyLTAuMDY0LDAuNC0wLjEyMSwwLjUwNi0wLjE3TDE0LjI3MSwxOC4zMDd6DQoJCSBNMTQuMTM3LDcuNDI5Yy0wLjM1MywwLjMyOC0wLjc3OCwwLjQ5Mi0xLjI3NSwwLjQ5MmMtMC40OTYsMC0wLjkyNC0wLjE2NC0xLjI4LTAuNDkyYy0wLjM1NC0wLjMyOC0wLjUzMy0wLjcyNy0wLjUzMy0xLjE5Mw0KCQljMC0wLjQ2NSwwLjE4LTAuODY1LDAuNTMzLTEuMTk2YzAuMzU2LTAuMzMyLDAuNzg0LTAuNDk3LDEuMjgtMC40OTdjMC40OTcsMCwwLjkyMywwLjE2NSwxLjI3NSwwLjQ5Nw0KCQljMC4zNTMsMC4zMzEsMC41MywwLjczMSwwLjUzLDEuMTk2QzE0LjY2Nyw2LjcwMywxNC40OSw3LjEwMSwxNC4xMzcsNy40Mjl6Ii8+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==" +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iOTAuOTU2cHgiIGhlaWdodD0iOTAuOTU3cHgiIHZpZXdCb3g9IjAgMCA5MC45NTYgOTAuOTU3IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA5MC45NTYgOTAuOTU3OyIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8cGF0aCBkPSJNNDEuNjYxLDEzLjUwMUgxMy45Nzl2NjMuOTUzaDI3LjY4MlYxMy41MDF6IE0zOC43OTcsNzQuNTkxSDE2Ljg0MlYxNi4zNjZoMjEuOTU1Vjc0LjU5MXogTTc2LjQ5OSwyNi43NDdINDguODE4djM3LjQ2NQoJCUg3Ni41TDc2LjQ5OSwyNi43NDdMNzYuNDk5LDI2Ljc0N3ogTTczLjYzNyw2MS4zNDdINTEuNjgyVjI5LjYwOWgyMS45NTVWNjEuMzQ3eiBNMTAuOTc4LDQyLjk3M3Y1LjAxMUgwdi01LjAxMUgxMC45Nzh6CgkJIE05MC45NTYsNDIuOTczdjUuMDExSDc5Ljk3OXYtNS4wMTFIOTAuOTU2eiIvPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+Cjwvc3ZnPgo=" /***/ }), /* 23 */ /***/ (function(module, exports) { -module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxOS4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4KCjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0iQ2FwYV8xIgogICB4PSIwcHgiCiAgIHk9IjBweCIKICAgdmlld0JveD0iMCAwIDU3IDU3IgogICBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1NyA1NzsiCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgIHNvZGlwb2RpOmRvY25hbWU9ImFkZC1zZWxlY3RlZC1uZXcuc3ZnIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjQgKDVkYTY4OWMzMTMsIDIwMTktMDEtMTQpIj48bWV0YWRhdGEKICAgaWQ9Im1ldGFkYXRhNDciPjxyZGY6UkRGPjxjYzpXb3JrCiAgICAgICByZGY6YWJvdXQ9IiI+PGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+PGRjOnR5cGUKICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48ZGM6dGl0bGU+PC9kYzp0aXRsZT48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMKICAgaWQ9ImRlZnM0NSI+CgkKCQoJCgkKPC9kZWZzPjxzb2RpcG9kaTpuYW1lZHZpZXcKICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgYm9yZGVyb3BhY2l0eT0iMSIKICAgb2JqZWN0dG9sZXJhbmNlPSIxMCIKICAgZ3JpZHRvbGVyYW5jZT0iMTAiCiAgIGd1aWRldG9sZXJhbmNlPSIxMCIKICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAiCiAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTA5NyIKICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iNzE5IgogICBpZD0ibmFtZWR2aWV3NDMiCiAgIHNob3dncmlkPSJmYWxzZSIKICAgaW5rc2NhcGU6em9vbT0iNC4xNDAzNTA5IgogICBpbmtzY2FwZTpjeD0iLTEwLjc0Nzg4MSIKICAgaW5rc2NhcGU6Y3k9IjI4LjUiCiAgIGlua3NjYXBlOndpbmRvdy14PSIwIgogICBpbmtzY2FwZTp3aW5kb3cteT0iMCIKICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMCIKICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0iQ2FwYV8xIiAvPgo8cGF0aAogICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICBpZD0icGF0aDIiCiAgIGQ9Ik0gMjguNjYsNiBIIDkuMzQgQyA3LjQ5OCw2IDYsNy40OTggNiw5LjM0IFYgMjguNjYgQyA2LDMwLjUwMiA3LjQ5OCwzMiA5LjM0LDMyIEggMjguNjYgQyAzMC41MDIsMzIgMzIsMzAuNTAyIDMyLDI4LjY2IFYgOS4zNCBDIDMyLDcuNDk4IDMwLjUwMiw2IDI4LjY2LDYgWiIgLz48cGF0aAogICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICBpZD0icGF0aDgiCiAgIGQ9Ik0gNTEsMzcgSCA0MSBWIDI3IGMgMCwtMS4xMDQgLTAuODk2LC0yIC0yLC0yIC0xLjEwNCwwIC0yLDAuODk2IC0yLDIgViAzNyBIIDI3IGMgLTEuMTA0LDAgLTIsMC44OTYgLTIsMiAwLDEuMTA0IDAuODk2LDIgMiwyIGggMTAgdiAxMCBjIDAsMS4xMDQgMC44OTYsMiAyLDIgMS4xMDQsMCAyLC0wLjg5NiAyLC0yIFYgNDEgaCAxMCBjIDEuMTA0LDAgMiwtMC44OTYgMiwtMiAwLC0xLjEwNCAtMC44OTYsLTIgLTIsLTIgeiIgLz4KPGcKICAgaWQ9ImcxMiI+CjwvZz4KPGcKICAgaWQ9ImcxNCI+CjwvZz4KPGcKICAgaWQ9ImcxNiI+CjwvZz4KPGcKICAgaWQ9ImcxOCI+CjwvZz4KPGcKICAgaWQ9ImcyMCI+CjwvZz4KPGcKICAgaWQ9ImcyMiI+CjwvZz4KPGcKICAgaWQ9ImcyNCI+CjwvZz4KPGcKICAgaWQ9ImcyNiI+CjwvZz4KPGcKICAgaWQ9ImcyOCI+CjwvZz4KPGcKICAgaWQ9ImczMCI+CjwvZz4KPGcKICAgaWQ9ImczMiI+CjwvZz4KPGcKICAgaWQ9ImczNCI+CjwvZz4KPGcKICAgaWQ9ImczNiI+CjwvZz4KPGcKICAgaWQ9ImczOCI+CjwvZz4KPGcKICAgaWQ9Imc0MCI+CjwvZz4KPC9zdmc+" +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iNzUuNDA2cHgiIGhlaWdodD0iNzUuNDA2cHgiIHZpZXdCb3g9IjAgMCA3NS40MDYgNzUuNDA2IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA3NS40MDYgNzUuNDA2OyIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8cGF0aCBkPSJNMzUuNDM2LDExLjQ1NEg3Ljc1NXY2My45NTJoMjcuNjgyTDM1LjQzNiwxMS40NTRMMzUuNDM2LDExLjQ1NHogTTMyLjU3Myw3Mi41NDNIMTAuNjE4VjE0LjMxN2gyMS45NTVWNzIuNTQzegoJCSBNNzAuMjc0LDExLjQ1NGgtMjcuNjh2MzcuNDY0aDI3LjY4MlYxMS40NTRINzAuMjc0eiBNNjcuNDEyLDQ2LjA1NUg0NS40NTdWMTQuMzE3aDIxLjk1NVY0Ni4wNTV6IE0wLjgzNSw1LjAxMVYwaDczLjczNnY1LjAxMQoJCUgwLjgzNXoiLz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K" /***/ }), /* 24 */ /***/ (function(module, exports) { -module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTcgNTciIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDU3IDU3OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8Zz4NCgk8cGF0aCBkPSJNMjIuNjYsMEgzLjM0QzEuNDk4LDAsMCwxLjQ5OCwwLDMuMzR2MTkuMzJDMCwyNC41MDIsMS40OTgsMjYsMy4zNCwyNmgxOS4zMmMxLjg0MiwwLDMuMzQtMS40OTgsMy4zNC0zLjM0VjMuMzQNCgkJQzI2LDEuNDk4LDI0LjUwMiwwLDIyLjY2LDB6Ii8+DQoJPHBhdGggZD0iTTMzLjM0LDI2aDE5LjMyYzEuODQyLDAsMy4zNC0xLjQ5OCwzLjM0LTMuMzRWMy4zNEM1NiwxLjQ5OCw1NC41MDIsMCw1Mi42NiwwSDMzLjM0QzMxLjQ5OCwwLDMwLDEuNDk4LDMwLDMuMzR2MTkuMzINCgkJQzMwLDI0LjUwMiwzMS40OTgsMjYsMzMuMzQsMjZ6Ii8+DQoJPHBhdGggZD0iTTIyLjY2LDMwSDMuMzRDMS40OTgsMzAsMCwzMS40OTgsMCwzMy4zNHYxOS4zMkMwLDU0LjUwMiwxLjQ5OCw1NiwzLjM0LDU2aDE5LjMyYzEuODQyLDAsMy4zNC0xLjQ5OCwzLjM0LTMuMzRWMzMuMzQNCgkJQzI2LDMxLjQ5OCwyNC41MDIsMzAsMjIuNjYsMzB6Ii8+DQoJPHBhdGggZD0iTTU1LDQxSDQ1VjMxYzAtMS4xMDQtMC44OTYtMi0yLTJzLTIsMC44OTYtMiwydjEwSDMxYy0xLjEwNCwwLTIsMC44OTYtMiwyczAuODk2LDIsMiwyaDEwdjEwYzAsMS4xMDQsMC44OTYsMiwyLDINCgkJczItMC44OTYsMi0yVjQ1aDEwYzEuMTA0LDAsMi0wLjg5NiwyLTJTNTYuMTA0LDQxLDU1LDQxeiIvPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPC9zdmc+DQo=" +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iOTAuOTU2cHgiIGhlaWdodD0iOTAuOTU2cHgiIHZpZXdCb3g9IjAgMCA5MC45NTYgOTAuOTU2IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA5MC45NTYgOTAuOTU2OyIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8cGF0aCBkPSJNNzcuNDU0LDQxLjY2MVYxMy45NzlIMTMuNTAydjI3LjY4Mkg3Ny40NTR6IE0xNi4zNjUsMzguNzk3VjE2Ljg0Mmg1OC4yMjZ2MjEuOTU1SDE2LjM2NXogTTY0LjIxLDc2LjQ5OVY0OC44MThIMjYuNzQ2CgkJVjc2LjVMNjQuMjEsNzYuNDk5TDY0LjIxLDc2LjQ5OXogTTI5LjYwOSw3My42MzdWNTEuNjgyaDMxLjczN3YyMS45NTVIMjkuNjA5eiBNNDcuOTgyLDEwLjk3OGgtNS4wMVYwaDUuMDFWMTAuOTc4egoJCSBNNDcuOTgyLDkwLjk1NmgtNS4wMVY3OS45NzloNS4wMVY5MC45NTZ6Ii8+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPC9zdmc+Cg==" /***/ }), /* 25 */ /***/ (function(module, exports) { -module.exports = require("mousetrap"); +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iNzUuNDA2cHgiIGhlaWdodD0iNzUuNDA2cHgiIHZpZXdCb3g9IjAgMCA3NS40MDYgNzUuNDA2IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA3NS40MDYgNzUuNDA2OyIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8cGF0aCBkPSJNNzUuNDA2LDM1LjQzNlY3Ljc1NUgxMS40NTR2MjcuNjgyTDc1LjQwNiwzNS40MzZMNzUuNDA2LDM1LjQzNnogTTE0LjMxNywzMi41NzNWMTAuNjE4aDU4LjIyNnYyMS45NTVIMTQuMzE3egoJCSBNNDguOTE4LDcwLjI3NVY0Mi41OTVIMTEuNDU0djI3LjY4Mkw0OC45MTgsNzAuMjc1TDQ4LjkxOCw3MC4yNzV6IE0xNC4zMTcsNjcuNDEyVjQ1LjQ1N2gzMS43Mzh2MjEuOTU1SDE0LjMxN3ogTTUuMDExLDc0LjU3MUgwCgkJVjAuODM1aDUuMDExVjc0LjU3MXoiLz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K" /***/ }), /* 26 */ /***/ (function(module, exports) { -module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0naXNvLTg4NTktMSc/Pgo8c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0gIjQ0IiBoZWlnaHQ9ICI0NCIgdmlld0JveD0iMCAwIDQ0IDQ0IiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgNDQgNDQiPgogIDxjaXJjbGUgY3g9IjIyIiBjeT0iMjIiIHI9IjIyIiBmaWxsPSIjZmZmIi8+CiAgPHBhdGggZD0ibTIyLDBjLTEyLjIsMC0yMiw5LjgtMjIsMjJzOS44LDIyIDIyLDIyIDIyLTkuOCAyMi0yMi05LjgtMjItMjItMjJ6bS0xLjMsMTkuM2wtMS40LDEuNGMtMC40LDAuNC0xLDAuNC0xLjQsMGwtNC00Yy0wLjMtMC4zLTAuOS0wLjEtMC45LDAuNHYxYzAsMC42LTAuNCwxLTEsMWgtMmMtMC42LDAtMS0wLjQtMS0xdi04YzAtMC42IDAuNC0xIDEtMWg4YzAuNiwwIDEsMC40IDEsMXYyYzAsMC42LTAuNCwxLTEsMWgtMWMtMC40LDAtMC43LDAuNS0wLjQsMC45bDQsNGMwLjUsMC4zIDAuNSwwLjkgMC4xLDEuM3ptMTQuMywxNC43YzAsMC42LTAuNCwxLTEsMWgtOGMtMC42LDAtMS0wLjQtMS0xdi0yYzAtMC42IDAuNC0xIDEtMWgxYzAuNCwwIDAuNy0wLjUgMC40LTAuOWwtNC00Yy0wLjQtMC40LTAuNC0xIDAtMS40bDEuNC0xLjRjMC40LTAuNCAxLTAuNCAxLjQsMGw0LDRjMC4zLDAuMyAwLjksMC4xIDAuOS0wLjR2LTFjMC0wLjYgMC40LTEgMS0xaDJjMC42LDAgMSwwLjQgMSwxdjguMWgtMC4xeiIvPgo8L3N2Zz4K" +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iNzUuNDA2cHgiIGhlaWdodD0iNzUuNDA2cHgiIHZpZXdCb3g9IjAgMCA3NS40MDYgNzUuNDA2IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA3NS40MDYgNzUuNDA2OyIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8cGF0aCBkPSJNNjMuOTUyLDM1LjQzNlY3Ljc1NUgwdjI3LjY4Mkw2My45NTIsMzUuNDM2TDYzLjk1MiwzNS40MzZ6IE0yLjg2MywzMi41NzNWMTAuNjE4SDYxLjA5djIxLjk1NUgyLjg2M3ogTTYzLjk1Miw3MC4yNzUKCQlWNDIuNTk1SDI2LjQ4OHYyNy42ODJMNjMuOTUyLDcwLjI3NUw2My45NTIsNzAuMjc1eiBNMjkuMzUxLDY3LjQxMlY0NS40NTdoMzEuNzM3djIxLjk1NUgyOS4zNTF6IE03MC4zOTUsMC44MzVoNS4wMTJ2NzMuNzM2CgkJaC01LjAxMlYwLjgzNXoiLz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K" /***/ }), /* 27 */ /***/ (function(module, exports) { -module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iNjUiCiAgIGhlaWdodD0iMTkuNzg3MjE4IgogICBpZD0ic3ZnMiIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIgogICBzb2RpcG9kaTpkb2NuYW1lPSJhY3RpdmF0ZXMuc3ZnIgogICBpbmtzY2FwZTpleHBvcnQtZmlsZW5hbWU9IkM6XFVzZXJzXHVndXJcRGVza3RvcFxpbnRlcmFjdGlvbi1sZWdlbmQuMjAxNi4wNC4wMS5wbmciCiAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSIzMDAiCiAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSIzMDAiCiAgIHZpZXdCb3g9IjAgMCA2MC45Mzc1MDEgMTguNTUwNTE2Ij4KICA8ZGVmcwogICAgIGlkPSJkZWZzNCI+CiAgICA8bWFya2VyCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJUcmlhbmdsZU91dEwiCiAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgICByZWZZPSIwIgogICAgICAgcmVmWD0iMCIKICAgICAgIGlkPSJtYXJrZXIxMjAyIgogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiCiAgICAgICBpbmtzY2FwZTppc3N0b2NrPSJ0cnVlIj4KICAgICAgPHBhdGgKICAgICAgICAgaWQ9InBhdGgxMjAwIgogICAgICAgICBkPSJNIDUuNzcsMCAtMi44OCw1IFYgLTUgWiIKICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS4wMDAwMDAwM3B0O3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMC44KSIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgIDwvbWFya2VyPgogICAgPG1hcmtlcgogICAgICAgaW5rc2NhcGU6c3RvY2tpZD0iVHJpYW5nbGVPdXRMIgogICAgICAgb3JpZW50PSJhdXRvIgogICAgICAgcmVmWT0iMCIKICAgICAgIHJlZlg9IjAiCiAgICAgICBpZD0iVHJpYW5nbGVPdXRMIgogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiCiAgICAgICBpbmtzY2FwZTppc3N0b2NrPSJ0cnVlIj4KICAgICAgPHBhdGgKICAgICAgICAgaWQ9InBhdGg5NTkiCiAgICAgICAgIGQ9Ik0gNS43NywwIC0yLjg4LDUgViAtNSBaIgogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjAwMDAwMDAzcHQ7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgwLjgpIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPC9tYXJrZXI+CiAgPC9kZWZzPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSI3LjkxOTU5NTkiCiAgICAgaW5rc2NhcGU6Y3g9Ii00LjgxMTAzNTciCiAgICAgaW5rc2NhcGU6Y3k9IjE4LjQ2ODYyMSIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTAxNyIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04IgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiCiAgICAgZml0LW1hcmdpbi10b3A9IjAiCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIgogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiCiAgICAgZml0LW1hcmdpbi1ib3R0b209IjAiIC8+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNyI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGUgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTI3NS42NDI0NywtMjgxLjI5NjQ5KSI+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6My43NDk5OTk5MztzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJtIDI3NS42NDI0NywyOTAuNTcxNzUgaCA0Ny4zNTA4OSIKICAgICAgIGlkPSJwYXRoNDk0OSIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgPHBhdGgKICAgICAgIHNvZGlwb2RpOnR5cGU9InN0YXIiCiAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6My43NTtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTtwYWludC1vcmRlcjpmaWxsIG1hcmtlcnMgc3Ryb2tlIgogICAgICAgaWQ9InBhdGg0OTUzIgogICAgICAgc29kaXBvZGk6c2lkZXM9IjMiCiAgICAgICBzb2RpcG9kaTpjeD0iMjEyLjQyOTAyIgogICAgICAgc29kaXBvZGk6Y3k9IjI1My43OTgyNiIKICAgICAgIHNvZGlwb2RpOnIxPSIxMS4wNTczNDciCiAgICAgICBzb2RpcG9kaTpyMj0iNS41Mjg2NzM2IgogICAgICAgc29kaXBvZGk6YXJnMT0iMC45MTQ0NDc5NiIKICAgICAgIHNvZGlwb2RpOmFyZzI9IjEuOTYxNjQ1NSIKICAgICAgIGlua3NjYXBlOmZsYXRzaWRlZD0idHJ1ZSIKICAgICAgIGlua3NjYXBlOnJvdW5kZWQ9IjAiCiAgICAgICBpbmtzY2FwZTpyYW5kb21pemVkPSIwIgogICAgICAgZD0ibSAyMTkuMTc2NTIsMjYyLjU1ODE4IC0xNy43MDc1NywtNy4yOTYzNyAxNS4xNzI2MiwtMTEuNjg3MDEgeiIKICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteD0iLTIuNjk0NjIxOSIKICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteT0iMC4wNzg0ODk2NTMiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjM5NDM0MDk4LDAuODk5Nzc1MDQsLTAuOTE4OTY0MTksMC4zODYxMDY2Myw0NzQuOTg1ODMsMS4zNjE3MzI5KSIgLz4KICA8L2c+Cjwvc3ZnPgo=" +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxOC4xLjEsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4KCjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0iQ2FwYV8xIgogICB4PSIwcHgiCiAgIHk9IjBweCIKICAgdmlld0JveD0iMCAwIDYxMiA2MTIiCiAgIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDYxMiA2MTI7IgogICB4bWw6c3BhY2U9InByZXNlcnZlIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkxIHIxMzcyNSIKICAgc29kaXBvZGk6ZG9jbmFtZT0iZGVsZXRlLXNpbXBsZS5zdmciPjxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTQzIj48cmRmOlJERj48Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+PGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+PGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPjwvY2M6V29yaz48L3JkZjpSREY+PC9tZXRhZGF0YT48ZGVmcwogICAgIGlkPSJkZWZzNDEiIC8+PHNvZGlwb2RpOm5hbWVkdmlldwogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxIgogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiCiAgICAgZ3JpZHRvbGVyYW5jZT0iMTAiCiAgICAgZ3VpZGV0b2xlcmFuY2U9IjEwIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciCiAgICAgaWQ9Im5hbWVkdmlldzM5IgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTp6b29tPSIxLjA5MDcwMDciCiAgICAgaW5rc2NhcGU6Y3g9IjI5NS4wMzQwOCIKICAgICBpbmtzY2FwZTpjeT0iMzMwLjg1NDQ4IgogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJDYXBhXzEiIC8+PGcKICAgICBpZD0iZzUiCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC45OTc4ODEzNSwwLDAsMC45OTc4ODEzNSwxLjczMDQwMTIsMC45MjM3Mjg0NykiPjxwYXRoCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgaWQ9InBhdGg3IgogICAgICAgZD0iTSA1ODcuODI2LDE4Ni45NjYgQyA1NzEuNzEsMTQ5LjYzNCA1NDkuODgyLDExNy4xOTggNTIyLjM0Miw4OS42NTggNDk0LjgwMiw2Mi4xMTggNDYyLjM2Niw0MC4yOSA0MjUuMDM0LDI0LjE3NCAzODcuNzAyLDguMDU4IDM0OC4wMjQsMCAzMDYsMCAyNzcuODQ4LDAgMjUwLjcxNiwzLjY3MiAyMjQuNjA0LDExLjAxNiAxOTguNDkyLDE4LjM2IDE3NC4xMTQsMjguNjYyIDE1MS40Nyw0MS45MjIgMTI4LjgyNiw1NS4xODIgMTA4LjIyMiw3MS4wOTQgODkuNjU4LDg5LjY1OCA3MS4wOTQsMTA4LjIyMiA1NS4xODIsMTI4LjgyNiA0MS45MjIsMTUxLjQ3IDI4LjY2MiwxNzQuMTE2IDE4LjM2LDE5OC40OTIgMTEuMDE2LDIyNC42MDQgMy42NzIsMjUwLjcxNiAwLDI3Ny44NDggMCwzMDYgYyAwLDI4LjE1MiAzLjY3Miw1NS4yODQgMTEuMDE2LDgxLjM5NiA3LjM0NCwyNi4xMSAxNy42NDYsNTAuNDg3IDMwLjkwNiw3My4xMzQgMTMuMjYsMjIuNjQ0IDI5LjE3Miw0My4yNDkgNDcuNzM2LDYxLjgxMiAxOC41NjQsMTguNTY0IDM5LjE2OCwzNC40NzggNjEuODEyLDQ3LjczNiAyMi42NDQsMTMuMjYgNDcuMDIyLDIzLjU2MSA3My4xMzQsMzAuOTA2IEMgMjUwLjcxNiw2MDguMzI4IDI3Ny44NDgsNjEyIDMwNiw2MTIgYyAyOC4xNTIsMCA1NS4yODQsLTMuNjcyIDgxLjM5NiwtMTEuMDE2IDI2LjExMSwtNy4zNDYgNTAuNDg4LC0xNy42NDYgNzMuMTM1LC0zMC45MDYgMjIuNjQ0LC0xMy4yNTkgNDMuMjQ5LC0yOS4xNzIgNjEuODEyLC00Ny43MzYgMTguNTY0LC0xOC41NjMgMzQuNDc4LC0zOS4xNjggNDcuNzM2LC02MS44MTIgMTMuMjYsLTIyLjY0NiAyMy41NjEsLTQ3LjAyMyAzMC45MDYsLTczLjEzNSBDIDYwOC4zMjgsMzYxLjI4NCA2MTIsMzM0LjE1MiA2MTIsMzA2IDYxMiwyNjMuOTc2IDYwMy45NDIsMjI0LjI5OCA1ODcuODI2LDE4Ni45NjYgWiBNIDQ2OC4xOCwzOTEuNjggYyAyLjA0LDIuMDQgMy4wNjMsNC4yODQgMy4wNjMsNi43MzIgMCwyLjQ0OCAtMS4wMjEsNC40ODggLTMuMDYzLDYuMTIgbCAtNTkuOTc2LDYwLjU4OCBjIC0xLjYzMSwxLjYzMiAtMy44NzYsMi40NDggLTYuNzMyLDIuNDQ4IC0yLjg1NCwwIC00Ljg5NSwtMC44MTYgLTYuMTIsLTIuNDQ4IEwgMzA5LjA2LDM3OC44MjggMjIzLjM4LDQ2NS4xMiBjIC0yLjQ0OCwxLjYzMiAtNC42OTIsMi40NDggLTYuNzMyLDIuNDQ4IC0xLjYzMiwwIC0zLjY3MiwtMC44MTYgLTYuMTIsLTIuNDQ4IGwgLTU5Ljk3NiwtNjAuNTg4IGMgLTIuMDQsLTEuMjI2IC0zLjA2LC0zLjI2NyAtMy4wNiwtNi4xMiAwLC0yLjQ0OCAxLjAyLC00LjY5MiAzLjA2LC02LjczMiBsIDg1LjY4LC04NS42OCAtODUuNjgsLTg1LjY4IGMgLTIuMDQsLTIuMDQgLTMuMDYsLTQuMjg0IC0zLjA2LC02LjczMiAwLC0yLjg1NiAxLjAyLC00Ljg5NiAzLjA2LC02LjEyIGwgNTkuOTc2LC02MC41ODggYyAxLjYzMiwtMS42MzIgMy42NzIsLTIuNDQ4IDYuMTIsLTIuNDQ4IDIuNDQ4LDAgNC42OTIsMC44MTYgNi43MzIsMi40NDggbCA4NS42OCw4Ni4yOTIgODYuMjkyLC04Ni4yOTIgYyAxLjYzNSwtMS42MzIgMy42NzUsLTIuNDQ4IDYuMTIsLTIuNDQ4IDIuNDQ4LDAgNC42OTIsMC44MTYgNi43MzIsMi40NDggbCA1OS45NzYsNjAuNTg4IGMgMi4wNCwxLjYzMiAzLjA2MywzLjY3MiAzLjA2Myw2LjEyIDAsMi40NDggLTEuMDIxLDQuNjkyIC0zLjA2Myw2LjczMiBMIDM4Mi41LDMwNiBsIDg1LjY4LDg1LjY4IHoiCiAgICAgICBzdHlsZT0iZmlsbDojMDEwMDAyIiAvPjwvZz48ZwogICAgIGlkPSJnOSIgLz48ZwogICAgIGlkPSJnMTEiIC8+PGcKICAgICBpZD0iZzEzIiAvPjxnCiAgICAgaWQ9ImcxNSIgLz48ZwogICAgIGlkPSJnMTciIC8+PGcKICAgICBpZD0iZzE5IiAvPjxnCiAgICAgaWQ9ImcyMSIgLz48ZwogICAgIGlkPSJnMjMiIC8+PGcKICAgICBpZD0iZzI1IiAvPjxnCiAgICAgaWQ9ImcyNyIgLz48ZwogICAgIGlkPSJnMjkiIC8+PGcKICAgICBpZD0iZzMxIiAvPjxnCiAgICAgaWQ9ImczMyIgLz48ZwogICAgIGlkPSJnMzUiIC8+PGcKICAgICBpZD0iZzM3IiAvPjwvc3ZnPg==" /***/ }), /* 28 */ /***/ (function(module, exports) { -module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iNjUiCiAgIGhlaWdodD0iMTkuNzg3MjE4IgogICBpZD0ic3ZnMiIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIgogICBzb2RpcG9kaTpkb2NuYW1lPSJpbmhpYml0cy5zdmciCiAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iQzpcVXNlcnNcdWd1clxEZXNrdG9wXGludGVyYWN0aW9uLWxlZ2VuZC4yMDE2LjA0LjAxLnBuZyIKICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjMwMCIKICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjMwMCIKICAgdmlld0JveD0iMCAwIDYwLjkzNzUwMSAxOC41NTA1MTYiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0Ij4KICAgIDxtYXJrZXIKICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IlN0b3BMIgogICAgICAgb3JpZW50PSJhdXRvIgogICAgICAgcmVmWT0iMC4wIgogICAgICAgcmVmWD0iMC4wIgogICAgICAgaWQ9IlN0b3BMIgogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiCiAgICAgICBpbmtzY2FwZTppc3N0b2NrPSJ0cnVlIj4KICAgICAgPHBhdGgKICAgICAgICAgaWQ9InBhdGg5ODYiCiAgICAgICAgIGQ9Ik0gMC4wLDUuNjUgTCAwLjAsLTUuNjUiCiAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjAuNzU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjFwdDtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuOCkiIC8+CiAgICA8L21hcmtlcj4KICAgIDxtYXJrZXIKICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IlRyaWFuZ2xlT3V0TCIKICAgICAgIG9yaWVudD0iYXV0byIKICAgICAgIHJlZlk9IjAiCiAgICAgICByZWZYPSIwIgogICAgICAgaWQ9Im1hcmtlcjEyMDIiCiAgICAgICBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZSIKICAgICAgIGlua3NjYXBlOmlzc3RvY2s9InRydWUiPgogICAgICA8cGF0aAogICAgICAgICBpZD0icGF0aDEyMDAiCiAgICAgICAgIGQ9Ik0gNS43NywwIC0yLjg4LDUgViAtNSBaIgogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjAwMDAwMDAzcHQ7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgwLjgpIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPC9tYXJrZXI+CiAgICA8bWFya2VyCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJUcmlhbmdsZU91dEwiCiAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgICByZWZZPSIwIgogICAgICAgcmVmWD0iMCIKICAgICAgIGlkPSJUcmlhbmdsZU91dEwiCiAgICAgICBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZSIKICAgICAgIGlua3NjYXBlOmlzc3RvY2s9InRydWUiPgogICAgICA8cGF0aAogICAgICAgICBpZD0icGF0aDk1OSIKICAgICAgICAgZD0iTSA1Ljc3LDAgLTIuODgsNSBWIC01IFoiCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuMDAwMDAwMDNwdDtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuOCkiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8L21hcmtlcj4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjcuOTE5NTk1OSIKICAgICBpbmtzY2FwZTpjeD0iLTQuODExMDM1NyIKICAgICBpbmtzY2FwZTpjeT0iMTMuOTIyOTM0IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDE3IgogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIKICAgICBmaXQtbWFyZ2luLXRvcD0iMCIKICAgICBmaXQtbWFyZ2luLWxlZnQ9IjAiCiAgICAgZml0LW1hcmdpbi1yaWdodD0iMCIKICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMCIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE3Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZSAvPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjc1LjY0MjQ3LC0yODEuMjk2NDkpIj4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozLjc0OTk5OTkzO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Im0gMjc1LjY0MjQ3LDI5MC41NzE3NSBoIDU5Ljc4MDUiCiAgICAgICBpZD0icGF0aDQ5NDkiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC43NDUwOTgwNDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6Mi43NzU5Mzc1NjtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTo4LjMyNzgxMjQ2LCAyLjc3NTkzNzQ5O3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTtwYWludC1vcmRlcjpmaWxsIG1hcmtlcnMgc3Ryb2tlIgogICAgICAgaWQ9InJlY3Q0OTgxIgogICAgICAgd2lkdGg9IjAuOTc0MTY5NTUiCiAgICAgICBoZWlnaHQ9IjE1Ljg4OTcwMyIKICAgICAgIHg9IjMzNC4yMTc4MyIKICAgICAgIHk9IjI4Mi42MjY4OSIgLz4KICA8L2c+Cjwvc3ZnPgo=" +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iNTQxLjkxMXB4IiBoZWlnaHQ9IjU0MS45MTFweCIgdmlld0JveD0iMCAwIDU0MS45MTEgNTQxLjkxMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTQxLjkxMSA1NDEuOTExOyIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8cGF0aCBkPSJNNDY3LjgyNiw4Ljc4MXY0Ny40NTFINzQuMDkxVjguNzgxYzAtNC42MDgtMy43MjktOC4zMzQtOC4zMzQtOC4zMzRjLTQuNjA3LDAtOC4zMzQsMy43MjctOC4zMzQsOC4zMzR2NDkuMDY4SDguMzM0CgkJQzMuNzMsNTcuODQ5LDAsNjEuNTg0LDAsNjYuMTgzYzAsNC42MDcsMy43Myw4LjMzNCw4LjMzNCw4LjMzNGg0OS4wODN2MzkyLjg2OEg4LjMzNGMtNC42MDQsMC04LjMzNCwzLjcyOS04LjMzNCw4LjMzNAoJCWMwLDQuNjEsMy43Myw4LjMzNCw4LjMzNCw4LjMzNGg0OS4wODN2NDkuMDc3YzAsNC42MDQsMy43MjcsOC4zMzQsOC4zMzQsOC4zMzRjNC42MDQsMCw4LjMzNC0zLjcyOSw4LjMzNC04LjMzNHYtNDkuMDc3aDM5My43NAoJCXY0OS4wNzdjMCw0LjYwNCwzLjcyOSw4LjMzNCw4LjMzNCw4LjMzNGM0LjYxLDAsOC4zMzQtMy43MjksOC4zMzQtOC4zMzR2LTQ5LjA3N2g0OS4wODNjNC42MDQsMCw4LjMzNC0zLjcyNCw4LjMzNC04LjMzNAoJCWMwLTQuNjA0LTMuNzI5LTguMzM0LTguMzM0LTguMzM0aC00OC4zMzJWNzQuNTE3aDQ4LjMzMmM0LjYwNCwwLDguMzM0LTMuNzI3LDguMzM0LTguMzM0YzAtNC41OTktMy43MjktOC4zMzQtOC4zMzQtOC4zMzRoLTQ5LjA4MwoJCVY4Ljc4MWMwLTQuNjA4LTMuNzI0LTguMzM0LTguMzM0LTguMzM0QzQ3MS41NTUsMC40NDYsNDY3LjgyNiw0LjE3Myw0NjcuODI2LDguNzgxeiBNNDY4LjIwNCwzNDAuNTI4djEyNi44NTdIMzQwLjQxM1YzNDAuNTI4CgkJSDQ2OC4yMDR6IE0zMzQuODU3LDM0MC41Mjh2MTI2Ljg1N0gyMDcuNDM2VjM0MC41MjhIMzM0Ljg1N3ogTTIwMS41MDQsMzQwLjUyOHYxMjYuODU3SDc0LjA5MVYzNDAuNTI4SDIwMS41MDR6IE00NjguMjA0LDIwNy4xNzIKCQl2MTI3LjhIMzQwLjQxM3YtMTI3LjhINDY4LjIwNHogTTMzNC44NTcsMjA3LjE3MnYxMjcuOEgyMDcuNDM2di0xMjcuOEgzMzQuODU3eiBNMjAxLjUwNCwyMDcuMTcydjEyNy44SDc0LjA5MXYtMTI3LjhIMjAxLjUwNHoKCQkgTTQ2OC4yMDQsNzMuODI5djEyNy43ODhIMzQwLjQxM1Y3My44MjlINDY4LjIwNHogTTMzNC44NTcsNzMuODI5djEyNy43ODhIMjA3LjQzNlY3My44MjlIMzM0Ljg1N3ogTTIwMS41MDQsNzMuODI5djEyNy43ODgKCQlINzQuMDkxVjczLjgyOUgyMDEuNTA0eiBNMzIzLjQxNCw4My44ODVWMTg4Ljc5SDIxOC41MDZWODMuODg1SDMyMy40MTR6Ii8+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPC9zdmc+Cg==" /***/ }), /* 29 */ /***/ (function(module, exports) { -module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iNjUiCiAgIGhlaWdodD0iMTkuNzg3MjE4IgogICBpZD0ic3ZnMiIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIgogICBzb2RpcG9kaTpkb2NuYW1lPSJpbmR1Y2VzLnN2ZyIKICAgaW5rc2NhcGU6ZXhwb3J0LWZpbGVuYW1lPSJDOlxVc2Vyc1x1Z3VyXERlc2t0b3BcaW50ZXJhY3Rpb24tbGVnZW5kLjIwMTYuMDQuMDEucG5nIgogICBpbmtzY2FwZTpleHBvcnQteGRwaT0iMzAwIgogICBpbmtzY2FwZTpleHBvcnQteWRwaT0iMzAwIgogICB2aWV3Qm94PSIwIDAgNjAuOTM3NTAxIDE4LjU1MDUxNiI+CiAgPGRlZnMKICAgICBpZD0iZGVmczQiPgogICAgPG1hcmtlcgogICAgICAgaW5rc2NhcGU6c3RvY2tpZD0iVHJpYW5nbGVPdXRMIgogICAgICAgb3JpZW50PSJhdXRvIgogICAgICAgcmVmWT0iMCIKICAgICAgIHJlZlg9IjAiCiAgICAgICBpZD0ibWFya2VyMTIwMiIKICAgICAgIHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlIgogICAgICAgaW5rc2NhcGU6aXNzdG9jaz0idHJ1ZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIGlkPSJwYXRoMTIwMCIKICAgICAgICAgZD0iTSA1Ljc3LDAgLTIuODgsNSBWIC01IFoiCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuMDAwMDAwMDNwdDtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuOCkiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8L21hcmtlcj4KICAgIDxtYXJrZXIKICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IlRyaWFuZ2xlT3V0TCIKICAgICAgIG9yaWVudD0iYXV0byIKICAgICAgIHJlZlk9IjAiCiAgICAgICByZWZYPSIwIgogICAgICAgaWQ9IlRyaWFuZ2xlT3V0TCIKICAgICAgIHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlIgogICAgICAgaW5rc2NhcGU6aXNzdG9jaz0idHJ1ZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIGlkPSJwYXRoOTU5IgogICAgICAgICBkPSJNIDUuNzcsMCAtMi44OCw1IFYgLTUgWiIKICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS4wMDAwMDAwM3B0O3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMC44KSIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgIDwvbWFya2VyPgogIDwvZGVmcz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iNy45MTk1OTU5IgogICAgIGlua3NjYXBlOmN4PSItNC44MTEwMzU3IgogICAgIGlua3NjYXBlOmN5PSIxOC40Njg2MjEiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB4IgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciCiAgICAgaW5rc2NhcGU6d2luZG93LXg9Ii04IgogICAgIGlua3NjYXBlOndpbmRvdy15PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIGZpdC1tYXJnaW4tdG9wPSIwIgogICAgIGZpdC1tYXJnaW4tbGVmdD0iMCIKICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIwIgogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIiAvPgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTciPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgICAgPGRjOnRpdGxlPjwvZGM6dGl0bGU+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIgogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yNzUuNjQyNDcsLTI4MS4yOTY0OSkiPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjMuNzQ5OTk5OTM7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5OjcuNDk5OTk5ODcsNy40OTk5OTk4NztzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNob2Zmc2V0OjAiCiAgICAgICBkPSJtIDI3NS42NDI0NywyOTAuNTcxNzUgaCA0Ny4zNTA4OSIKICAgICAgIGlkPSJwYXRoNDk0OSIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgPHBhdGgKICAgICAgIHNvZGlwb2RpOnR5cGU9InN0YXIiCiAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6My43NTtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTtwYWludC1vcmRlcjpmaWxsIG1hcmtlcnMgc3Ryb2tlIgogICAgICAgaWQ9InBhdGg0OTUzIgogICAgICAgc29kaXBvZGk6c2lkZXM9IjMiCiAgICAgICBzb2RpcG9kaTpjeD0iMjEyLjQyOTAyIgogICAgICAgc29kaXBvZGk6Y3k9IjI1My43OTgyNiIKICAgICAgIHNvZGlwb2RpOnIxPSIxMS4wNTczNDciCiAgICAgICBzb2RpcG9kaTpyMj0iNS41Mjg2NzM2IgogICAgICAgc29kaXBvZGk6YXJnMT0iMC45MTQ0NDc5NiIKICAgICAgIHNvZGlwb2RpOmFyZzI9IjEuOTYxNjQ1NSIKICAgICAgIGlua3NjYXBlOmZsYXRzaWRlZD0idHJ1ZSIKICAgICAgIGlua3NjYXBlOnJvdW5kZWQ9IjAiCiAgICAgICBpbmtzY2FwZTpyYW5kb21pemVkPSIwIgogICAgICAgZD0ibSAyMTkuMTc2NTIsMjYyLjU1ODE4IC0xNy43MDc1NywtNy4yOTYzNyAxNS4xNzI2MiwtMTEuNjg3MDEgeiIKICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteD0iLTIuNjk0NjIxOSIKICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteT0iMC4wNzg0ODk2NTMiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjM5NDM0MDk4LDAuODk5Nzc1MDQsLTAuOTE4OTY0MTksMC4zODYxMDY2Myw0NzQuOTg1ODMsMS4zNjE3MzI5KSIgLz4KICA8L2c+Cjwvc3ZnPgo=" +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iNDE4cHgiIGhlaWdodD0iNDE4cHgiIHZpZXdCb3g9IjAgMCA0MTggNDE4IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA0MTggNDE4OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxnPgoJPGc+CgkJPGc+CgkJCTxwYXRoIGQ9Ik05MS42MDYsMTQzLjcwM2MtMy4xNDYtMy4xNDYtNy44NzctNC4wODctMTEuOTg4LTIuMzg1Yy00LjExLDEuNzAzLTYuNzksNS43MTQtNi43OSwxMC4xNjN2MTE1LjAzNwoJCQkJYzAsNC40NDksMi42OCw4LjQ2MSw2Ljc5LDEwLjE2NGMxLjM2MSwwLjU2MywyLjc5LDAuODM2LDQuMjA4LDAuODM2YzIuODYyLDAsNS42NzYtMS4xMTYsNy43OC0zLjIyMmw1Ny41Mi01Ny41MTkKCQkJCWMyLjA2My0yLjA2MywzLjIyMi00Ljg2MSwzLjIyMi03Ljc3OHMtMS4xNTktNS43MTYtMy4yMjItNy43NzhMOTEuNjA2LDE0My43MDN6Ii8+CgkJCTxwYXRoIGQ9Ik0zMzguMzgyLDE0MS4zMThjLTQuMTA3LTEuNy04Ljg0MS0wLjc2My0xMS45ODcsMi4zODVsLTU3LjUyMSw1Ny41MTljLTIuMDYyLDIuMDYzLTMuMjIyLDQuODYxLTMuMjIyLDcuNzc4CgkJCQlzMS4xNTgsNS43MTYsMy4yMjIsNy43NzdsNTcuNTIxLDU3LjUyYzIuMTA0LDIuMTA0LDQuOTE4LDMuMjIzLDcuNzc5LDMuMjIzYzEuNDE3LDAsMi44NDgtMC4yNzIsNC4yMDgtMC44MzgKCQkJCWM0LjExLTEuNzAzLDYuNzktNS43MTQsNi43OS0xMC4xNjJWMTUxLjQ4MUMzNDUuMTcyLDE0Ny4wMzIsMzQyLjQ5MiwxNDMuMDIxLDMzOC4zODIsMTQxLjMxOHoiLz4KCQkJPHBhdGggZD0iTTIxMiwwaC02Yy02LjA3NSwwLTExLDQuOTI1LTExLDExdjM1YzAsNi4wNzUsNC45MjUsMTEsMTEsMTFoNmM2LjA3NSwwLDExLTQuOTI1LDExLTExVjExQzIyMyw0LjkyNSwyMTguMDc1LDAsMjEyLDB6IgoJCQkJLz4KCQkJPHBhdGggZD0iTTIxMiw5NS4zNTJoLTZjLTYuMDc1LDAtMTEsNC45MjUtMTEsMTF2NzIuNDczYzAsNi4wNzUsNC45MjUsMTEsMTEsMTFoNmM2LjA3NSwwLDExLTQuOTI1LDExLTExdi03Mi40NzMKCQkJCUMyMjMsMTAwLjI3NiwyMTguMDc1LDk1LjM1MiwyMTIsOTUuMzUyeiIvPgoJCQk8cGF0aCBkPSJNMjEyLDIyOC4xNzZoLTZjLTYuMDc1LDAtMTEsNC45MjYtMTEsMTF2NzIuNDc0YzAsNi4wNzUsNC45MjUsMTEsMTEsMTFoNmM2LjA3NSwwLDExLTQuOTI1LDExLTExdi03Mi40NzQKCQkJCUMyMjMsMjMzLjEwMiwyMTguMDc1LDIyOC4xNzYsMjEyLDIyOC4xNzZ6Ii8+CgkJCTxwYXRoIGQ9Ik0yMTIsMzYxaC02Yy02LjA3NSwwLTExLDQuOTI1LTExLDExdjM1YzAsNi4wNzUsNC45MjUsMTEsMTEsMTFoNmM2LjA3NSwwLDExLTQuOTI1LDExLTExdi0zNQoJCQkJQzIyMywzNjUuOTI1LDIxOC4wNzUsMzYxLDIxMiwzNjF6Ii8+CgkJPC9nPgoJPC9nPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+Cjwvc3ZnPgo=" /***/ }), /* 30 */ /***/ (function(module, exports) { -module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iNjUiCiAgIGhlaWdodD0iMTkuNzg3MjE4IgogICBpZD0ic3ZnMiIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIgogICBzb2RpcG9kaTpkb2NuYW1lPSJyZXByZXNzZXMuc3ZnIgogICBpbmtzY2FwZTpleHBvcnQtZmlsZW5hbWU9IkM6XFVzZXJzXHVndXJcRGVza3RvcFxpbnRlcmFjdGlvbi1sZWdlbmQuMjAxNi4wNC4wMS5wbmciCiAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSIzMDAiCiAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSIzMDAiCiAgIHZpZXdCb3g9IjAgMCA2MC45Mzc1MDEgMTguNTUwNTE2Ij4KICA8ZGVmcwogICAgIGlkPSJkZWZzNCI+CiAgICA8bWFya2VyCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJTdG9wTCIKICAgICAgIG9yaWVudD0iYXV0byIKICAgICAgIHJlZlk9IjAuMCIKICAgICAgIHJlZlg9IjAuMCIKICAgICAgIGlkPSJTdG9wTCIKICAgICAgIHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlIgogICAgICAgaW5rc2NhcGU6aXNzdG9jaz0idHJ1ZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIGlkPSJwYXRoOTg2IgogICAgICAgICBkPSJNIDAuMCw1LjY1IEwgMC4wLC01LjY1IgogICAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtb3BhY2l0eTowLjc1O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxcHQ7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgwLjgpIiAvPgogICAgPC9tYXJrZXI+CiAgICA8bWFya2VyCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJUcmlhbmdsZU91dEwiCiAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgICByZWZZPSIwIgogICAgICAgcmVmWD0iMCIKICAgICAgIGlkPSJtYXJrZXIxMjAyIgogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiCiAgICAgICBpbmtzY2FwZTppc3N0b2NrPSJ0cnVlIj4KICAgICAgPHBhdGgKICAgICAgICAgaWQ9InBhdGgxMjAwIgogICAgICAgICBkPSJNIDUuNzcsMCAtMi44OCw1IFYgLTUgWiIKICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS4wMDAwMDAwM3B0O3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMC44KSIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgIDwvbWFya2VyPgogICAgPG1hcmtlcgogICAgICAgaW5rc2NhcGU6c3RvY2tpZD0iVHJpYW5nbGVPdXRMIgogICAgICAgb3JpZW50PSJhdXRvIgogICAgICAgcmVmWT0iMCIKICAgICAgIHJlZlg9IjAiCiAgICAgICBpZD0iVHJpYW5nbGVPdXRMIgogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiCiAgICAgICBpbmtzY2FwZTppc3N0b2NrPSJ0cnVlIj4KICAgICAgPHBhdGgKICAgICAgICAgaWQ9InBhdGg5NTkiCiAgICAgICAgIGQ9Ik0gNS43NywwIC0yLjg4LDUgViAtNSBaIgogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjAwMDAwMDAzcHQ7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgwLjgpIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPC9tYXJrZXI+CiAgPC9kZWZzPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSI3LjkxOTU5NTkiCiAgICAgaW5rc2NhcGU6Y3g9Ii0yNS4zMjk3NTkiCiAgICAgaW5rc2NhcGU6Y3k9IjEzLjkyMjkzNCIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTAxNyIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04IgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiCiAgICAgZml0LW1hcmdpbi10b3A9IjAiCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIgogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiCiAgICAgZml0LW1hcmdpbi1ib3R0b209IjAiIC8+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNyI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGUgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTI3NS42NDI0NywtMjgxLjI5NjQ5KSI+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6My43NTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6Ny40OTk5OTk4NywgNy40OTk5OTk4NztzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJtIDI3NS42NDI0NywyOTAuNTcxNzUgaCA1OS43ODA1IgogICAgICAgaWQ9InBhdGg0OTQ5IgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICA8cmVjdAogICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNzQ1MDk4MDQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjIuNzc1OTM3NTY7c3Ryb2tlLWxpbmVjYXA6c3F1YXJlO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6OC4zMjc4MTIzNSwgMi43NzU5Mzc0NTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7cGFpbnQtb3JkZXI6ZmlsbCBtYXJrZXJzIHN0cm9rZSIKICAgICAgIGlkPSJyZWN0NDk4MSIKICAgICAgIHdpZHRoPSIwLjk3NDE2OTU1IgogICAgICAgaGVpZ2h0PSIxNS44ODk3MDMiCiAgICAgICB4PSIzMzIuMzQyODMiCiAgICAgICB5PSIyODIuNjI2ODkiIC8+CiAgPC9nPgo8L3N2Zz4K" +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iNDk3LjE5OXB4IiBoZWlnaHQ9IjQ5Ny4xOTlweCIgdmlld0JveD0iMCAwIDQ5Ny4xOTkgNDk3LjE5OSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDk3LjE5OSA0OTcuMTk5OyIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8cGF0aCBkPSJNMTkxLjIsMjQ4LjZjMC0xNS4zLDUuNy0yOC43LDE3LjItNDAuMnMyNC45LTE3LjIsNDAuMi0xNy4yTDE5MS4yLDI0OC42eiBNMTc0LDI2NS44Yy0xLjktNS43LTEuOS0xMS41LTEuOS0xNy4yCgkJYzAtNDIuMSwzNC40LTc2LjUsNzYuNS03Ni41YzUuNzAxLDAsMTEuNSwwLDE3LjIwMSwxLjlsNTEuNi01MS42Yy0yMS01LjctNDQtNy43LTY4LjktNy43Qzc2LjUsMTE0LjcsMCwyNDguNiwwLDI0OC42CgkJczMwLjYsNTMuNSw5Ny41LDkzLjdMMTc0LDI2NS44eiBNMzA2LDI0OC42TDI0OC42LDMwNmMxNS4zLDAsMjguNzAxLTUuNyw0MC4yMDEtMTcuMkMzMDAuMTk5LDI3Ny4zLDMwNiwyNjMuODk5LDMwNiwyNDguNnoKCQkgTTM5OS42OTksMTU0Ljg5OWwtNzYuNSw3Ni41YzEuOSw1LjcsMS45LDExLjUsMS45LDE3LjJjMCw0Mi4xLTM0LjQsNzYuNS03Ni41LDc2LjVjLTUuNywwLTExLjUsMC0xNy4yLTEuOUwxNzkuOCwzNzQuOAoJCWMyMSw1LjcsNDQsNy42LDY4LjgsNy42YzE3Mi4wOTksMCwyNDguNTk5LTEzMy45LDI0OC41OTktMTMzLjlTNDY2LjYsMTk1LjEsMzk5LjY5OSwxNTQuODk5eiBNNDAxLjQsNzYuODk5bC0zMjQuNSwzMjQuNQoJCWwxOC45LDE4LjlMNDIwLjQsOTUuN0w0MDEuNCw3Ni44OTl6Ii8+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPC9zdmc+Cg==" /***/ }), /* 31 */ /***/ (function(module, exports) { -module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iNjUiCiAgIGhlaWdodD0iMTkuNzg3MjE4IgogICBpZD0ic3ZnMiIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIgogICBzb2RpcG9kaTpkb2NuYW1lPSJiaW5kcy5zdmciCiAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iQzpcVXNlcnNcdWd1clxEZXNrdG9wXGludGVyYWN0aW9uLWxlZ2VuZC4yMDE2LjA0LjAxLnBuZyIKICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjMwMCIKICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjMwMCIKICAgdmlld0JveD0iMCAwIDYwLjkzNzUwMSAxOC41NTA1MTYiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0Ij4KICAgIDxtYXJrZXIKICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IlRyaWFuZ2xlT3V0TCIKICAgICAgIG9yaWVudD0iYXV0byIKICAgICAgIHJlZlk9IjAiCiAgICAgICByZWZYPSIwIgogICAgICAgaWQ9Im1hcmtlcjEyMDIiCiAgICAgICBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZSIKICAgICAgIGlua3NjYXBlOmlzc3RvY2s9InRydWUiPgogICAgICA8cGF0aAogICAgICAgICBpZD0icGF0aDEyMDAiCiAgICAgICAgIGQ9Ik0gNS43NywwIC0yLjg4LDUgViAtNSBaIgogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjAwMDAwMDAzcHQ7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgwLjgpIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPC9tYXJrZXI+CiAgICA8bWFya2VyCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJUcmlhbmdsZU91dEwiCiAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgICByZWZZPSIwIgogICAgICAgcmVmWD0iMCIKICAgICAgIGlkPSJUcmlhbmdsZU91dEwiCiAgICAgICBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZSIKICAgICAgIGlua3NjYXBlOmlzc3RvY2s9InRydWUiPgogICAgICA8cGF0aAogICAgICAgICBpZD0icGF0aDk1OSIKICAgICAgICAgZD0iTSA1Ljc3LDAgLTIuODgsNSBWIC01IFoiCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuMDAwMDAwMDNwdDtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuOCkiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8L21hcmtlcj4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjcuOTE5NTk1OSIKICAgICBpbmtzY2FwZTpjeD0iLTQuODExMDM1NyIKICAgICBpbmtzY2FwZTpjeT0iMTguNDY4NjIxIgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDE3IgogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIKICAgICBmaXQtbWFyZ2luLXRvcD0iMCIKICAgICBmaXQtbWFyZ2luLWxlZnQ9IjAiCiAgICAgZml0LW1hcmdpbi1yaWdodD0iMCIKICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMCIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE3Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjc1LjY0MjQ3LC0yODEuMjk2NDkpIj4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozLjc1O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Im0gMjc1LjY0MjQ3LDI5MC41NzE3NSBoIDYwLjkzNzUiCiAgICAgICBpZD0icGF0aDQ5NDkiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICA8L2c+Cjwvc3ZnPgo=" +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4KCjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0iQ2FwYV8xIgogICB4PSIwcHgiCiAgIHk9IjBweCIKICAgd2lkdGg9IjQ4NS4yMTVweCIKICAgaGVpZ2h0PSI0ODUuMjE1cHgiCiAgIHZpZXdCb3g9IjAgMCA0ODUuMjE1IDQ4NS4yMTUiCiAgIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQ4NS4yMTUgNDg1LjIxNTsiCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTEgcjEzNzI1IgogICBzb2RpcG9kaTpkb2NuYW1lPSJfbGF5b3V0LXByb3BlcnRpZXMuc3ZnIj48bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE0MSI+PHJkZjpSREY+PGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PjxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48ZGM6dGl0bGUgLz48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMKICAgICBpZD0iZGVmczM5IiAvPjxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMSIKICAgICBvYmplY3R0b2xlcmFuY2U9IjEwIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwIgogICAgIGd1aWRldG9sZXJhbmNlPSIxMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTA4OSIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI2NjYiCiAgICAgaWQ9Im5hbWVkdmlldzM3IgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTp6b29tPSIwLjQ4NjM4MjMzIgogICAgIGlua3NjYXBlOmN4PSItNzYuMzQ1OTcyIgogICAgIGlua3NjYXBlOmN5PSI0MDcuMDg3MTYiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjY0OSIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iNTAiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJDYXBhXzEiIC8+PGcKICAgICBpZD0iZzEwMzQ5IgogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwzMy42MTk5MTksMjAuMDQ5NjkzKSI+PGcKICAgICAgIGlkPSJMYXllcl8xXzExMF8iPjxnCiAgICAgICAgIGlkPSJnMTAzNTIiPjxwYXRoCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICBkPSJtIDE3LjU2NywxNS45MzggLTIuODU5LC0yLjcwMiBjIDAuMzMzLC0wLjYwNSAwLjUzOSwtMS4yOSAwLjUzOSwtMi4wMjkgMCwtMi4zNDIgLTEuODk3LC00LjIzOSAtNC4yNCwtNC4yMzkgLTIuMzQzLDAgLTQuMjQzLDEuODk2IC00LjI0Myw0LjIzOSAwLDIuMzQzIDEuOSw0LjI0MSA0LjI0Myw0LjI0MSAwLjgyNiwwIDEuNTksLTAuMjQ2IDIuMjQyLC0wLjY1NCBsIDIuODU1LDIuNjk5IGMgMC40MzIsLTAuNTcxIDAuOTE5LC0xLjA5NCAxLjQ2MywtMS41NTUgeiIKICAgICAgICAgICBpZD0icGF0aDEwMzU0IiAvPjxwYXRoCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICBkPSJtIDI5LjY2LDE1LjYgMy43OTksLTYuMzkzIGMgMC4zNzQsMC4xMDcgMC43NjIsMC4xODQgMS4xNjksMC4xODQgMi4zNDcsMCA0LjI0NCwtMS44OTggNC4yNDQsLTQuMjQxIDAsLTIuMzQyIC0xLjg5NywtNC4yMzkgLTQuMjQ0LC00LjIzOSAtMi4zNDMsMCAtNC4yMzksMS44OTYgLTQuMjM5LDQuMjM5IDAsMS4xNjMgMC40NjksMi4yMTQgMS4yMjcsMi45ODEgbCAtMy43ODcsNi4zNzUgYyAwLjY1MSwwLjI5NSAxLjI2NSwwLjY2MyAxLjgzMSwxLjA5NCB6IgogICAgICAgICAgIGlkPSJwYXRoMTAzNTYiIC8+PHBhdGgKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgIGQ9Im0gNDIuNzYyLDIwLjk1MiBjIC0xLjgyNCwwIC0zLjM2OSwxLjE1OSAtMy45NjgsMi43NzUgbCAtNS4yNzgsLTAuNTIxIGMgMCwwLjA0IDAuMDA2LDAuMDc4IDAuMDA2LDAuMTE3IDAsMC42ODggLTAuMDc2LDEuMzYgLTAuMjEzLDIuMDA5IGwgNS4yNzYsMC41MjEgYyAwLjMxOSwyLjAyNCAyLjA2MiwzLjU3NiA0LjE3NywzLjU3NiAyLjM0MiwwIDQuMjM4LC0xLjg5NiA0LjIzOCwtNC4yMzggMCwtMi4zNDEgLTEuODk2LC00LjIzOSAtNC4yMzgsLTQuMjM5IHoiCiAgICAgICAgICAgaWQ9InBhdGgxMDM1OCIgLz48cGF0aAogICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgZD0ibSAyOC4xOTcsMzcuNjI0IC0xLjE4LC01LjE1NiBjIC0wLjY2NiwwLjIzMiAtMS4zNTksMC4zOTggLTIuMDgyLDAuNDgxIGwgMS4xODIsNS4xNTcgYyAtMS4zNTUsMC43MDkgLTIuMjksMi4xMSAtMi4yOSwzLjc0NiAwLDIuMzQyIDEuODk2LDQuMjM3IDQuMjQzLDQuMjM3IDIuMzQyLDAgNC4yMzgsLTEuODk2IDQuMjM4LC00LjIzNyAwLjAwMywtMi4yOTkgLTEuODI5LC00LjE2IC00LjExMSwtNC4yMjggeiIKICAgICAgICAgICBpZD0icGF0aDEwMzYwIiAvPjxjaXJjbGUKICAgICAgICAgICBjeD0iMjMuODMiCiAgICAgICAgICAgY3k9IjIzLjMyMyIKICAgICAgICAgICByPSI3LjI3MDk5OTkiCiAgICAgICAgICAgaWQ9ImNpcmNsZTEwMzY0IiAvPjwvZz48L2c+PC9nPjxnCiAgICAgaWQ9ImcxMDM2NiIKICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMTcuNjE5OTE5LDE4LjA0OTY5MykiIC8+PGcKICAgICBpZD0iZzEwMzY4IgogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwxNy42MTk5MTksMTguMDQ5NjkzKSIgLz48ZwogICAgIGlkPSJnMTAzNzAiCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoOS41NTU2NTEsMCwwLDkuNTU1NjUxLDE3LjYxOTkxOSwxOC4wNDk2OTMpIiAvPjxnCiAgICAgaWQ9ImcxMDM3MiIKICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMTcuNjE5OTE5LDE4LjA0OTY5MykiIC8+PGcKICAgICBpZD0iZzEwMzc0IgogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwxNy42MTk5MTksMTguMDQ5NjkzKSIgLz48ZwogICAgIGlkPSJnMTAzNzYiCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoOS41NTU2NTEsMCwwLDkuNTU1NjUxLDE3LjYxOTkxOSwxOC4wNDk2OTMpIiAvPjxnCiAgICAgaWQ9ImcxMDM3OCIKICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMTcuNjE5OTE5LDE4LjA0OTY5MykiIC8+PGcKICAgICBpZD0iZzEwMzgwIgogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwxNy42MTk5MTksMTguMDQ5NjkzKSIgLz48ZwogICAgIGlkPSJnMTAzODIiCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoOS41NTU2NTEsMCwwLDkuNTU1NjUxLDE3LjYxOTkxOSwxOC4wNDk2OTMpIiAvPjxnCiAgICAgaWQ9ImcxMDM4NCIKICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMTcuNjE5OTE5LDE4LjA0OTY5MykiIC8+PGcKICAgICBpZD0iZzEwMzg2IgogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwxNy42MTk5MTksMTguMDQ5NjkzKSIgLz48ZwogICAgIGlkPSJnMTAzODgiCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoOS41NTU2NTEsMCwwLDkuNTU1NjUxLDE3LjYxOTkxOSwxOC4wNDk2OTMpIiAvPjxnCiAgICAgaWQ9ImcxMDM5MCIKICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMTcuNjE5OTE5LDE4LjA0OTY5MykiIC8+PGcKICAgICBpZD0iZzEwMzkyIgogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwxNy42MTk5MTksMTguMDQ5NjkzKSIgLz48ZwogICAgIGlkPSJnMTAzOTQiCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoOS41NTU2NTEsMCwwLDkuNTU1NjUxLDE3LjYxOTkxOSwxOC4wNDk2OTMpIiAvPjxnCiAgICAgaWQ9Imc0MzIwIgogICAgIHRyYW5zZm9ybT0ibWF0cml4KDQuNzU0NDI3MSwwLDAsNC43NTQ0MjcxLDcuODM5OTM2MSwyNjAuNzI3NDEpIj48ZwogICAgICAgaWQ9Imc0MjgwIj48cGF0aAogICAgICAgICBpZD0icGF0aDQyODIiCiAgICAgICAgIGQ9Im0gNDEuNTM0LDI4LjY2IDEuOTU3LDAgQyA0NC44NzcsMjguNjYgNDYsMjcuNTM2IDQ2LDI2LjE1IGwgMCwtNi4zIGMgMCwtMS4zODUgLTEuMTI0LC0yLjUwOSAtMi41MDksLTIuNTA5IGwgLTEuOTUxLDAgMCwwLjAwNiBDIDQxLjE0OCwxNi4xNCA0MC42ODcsMTQuOTgzIDQwLjEwMywxMy44ODkgbCAxLjM4MSwtMS4zODEgYyAwLjk3OSwtMC45OCAwLjk3OSwtMi41NjkgMCwtMy41NDkgTCAzNy4wNCw0LjUxNyBjIC0wLjk3OSwtMC45NzkgLTIuNTY3LC0wLjk3OSAtMy41NDcsMCBsIC0xLjM4MiwxLjM4IEMgMzEuMDE3LDUuMzEzIDI5Ljg2MSw0Ljg1MiAyOC42NTQsNC40NjEgbCAwLjAwNiwwIDAsLTEuOTUxIEMgMjguNjYsMS4xMjQgMjcuNTM3LDAgMjYuMTUsMCBsIC02LjMsMCBjIC0xLjM4NiwwIC0yLjUwOSwxLjEyNCAtMi41MDksMi41MSBsIDAsMS45NTUgMC4wMTQsLTEwZS00IGMgLTEuMjA3LDAuMzY3IC0yLjM2MywwLjg1IC0zLjQ1OCwxLjQzNSBMIDEyLjUxNiw0LjUxOCBjIC0wLjk4LC0wLjk3OSAtMi41NjgsLTAuOTc5IC0zLjU0OCwwIEwgNC41MjUsOC45NjEgQyAzLjU0Niw5Ljk0IDMuNTQ1LDExLjUyNyA0LjUyMywxMi41MDcgTCA1LjksMTMuODg5IEMgNS4zMTYsMTQuOTgzIDQuODUxLDE2LjE0IDQuNDYsMTcuMzQ2IGwgMCwtMC4wMDUgLTEuOTUxLDAgQyAxLjEyNCwxNy4zNDEgMCwxOC40NjUgMCwxOS44NSBsIDAsNi4zMDEgYyAwLDEuMzg3IDEuMTI0LDIuNTExIDIuNTA5LDIuNTExIGwgMS45NjQsMCAtMC4wMDYsLTAuMDE1IGMgMC4zNjcsMS4yMDcgMC44NTMsMi4zNjIgMS40MzYsMy40NTcgbCAtMS4zOCwxLjM4MSBjIC0wLjk4LDAuOTc5IC0wLjk3OSwyLjU2NyAwLDMuNTQ3IGwgNC40NDMsNC40NDIgYyAwLjk3OSwwLjk3OSAyLjU2OCwwLjk3OSAzLjU0OCwwIGwgMS4zODEsLTEuMzgxIGMgMS4wOTQsMC41ODQgMi4yNTEsMS4wNzIgMy40NTgsMS40MzggbCAtMC4wMTQsLTAuMDA2IDAsMS45NjUgYyAwLDEuMzg3IDEuMTIzLDIuNTEgMi41MDksMi41MSBsIDYuMywwIGMgMS4zODcsMCAyLjUxLC0xLjEyMyAyLjUxLC0yLjUxIGwgMCwtMS45NSAtMC4wMDYsMCBjIDEuMjA3LC0wLjM5MiAyLjM2MywtMC44NTYgMy40NTcsLTEuNDQgbCAxLjM4MSwxLjM3OSBjIDAuOTgsMC45NzkgMi41NjgsMC45NzkgMy41NDcsMCBsIDQuNDQzLC00LjQ0NSBjIDAuOTc5LC0wLjk3OSAwLjk3OSwtMi41NjYgMCwtMy41NDcgbCAtMS4zODMsLTEuMzgzIGMgMC41ODQsLTEuMDk0IDEuMDY4LC0yLjI1IDEuNDM2LC0zLjQ1NyBsIDEwZS00LDAuMDEzIHogTSAyMy4wMjEsMzYuNzE0IEMgMTUuNDQ0LDM2LjcyMyA5LjI3OCwzMC41NTcgOS4yODcsMjIuOTggOS4yOTYsMTUuNDQxIDE1LjQ1LDkuMjg3IDIyLjk4OSw5LjI3OCBjIDcuNTc4LC0wLjAwOSAxMy43NDQsNi4xNTcgMTMuNzM0LDEzLjczNCAtMC4wMSw3LjUzOSAtNi4xNjIsMTMuNjkzIC0xMy43MDIsMTMuNzAyIHoiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PC9nPjxnCiAgICAgICBpZD0iZzQyODQiIC8+PGcKICAgICAgIGlkPSJnNDI4NiIgLz48ZwogICAgICAgaWQ9Imc0Mjg4IiAvPjxnCiAgICAgICBpZD0iZzQyOTAiIC8+PGcKICAgICAgIGlkPSJnNDI5MiIgLz48ZwogICAgICAgaWQ9Imc0Mjk0IiAvPjxnCiAgICAgICBpZD0iZzQyOTYiIC8+PGcKICAgICAgIGlkPSJnNDI5OCIgLz48ZwogICAgICAgaWQ9Imc0MzAwIiAvPjxnCiAgICAgICBpZD0iZzQzMDIiIC8+PGcKICAgICAgIGlkPSJnNDMwNCIgLz48ZwogICAgICAgaWQ9Imc0MzA2IiAvPjxnCiAgICAgICBpZD0iZzQzMDgiIC8+PGcKICAgICAgIGlkPSJnNDMxMCIgLz48ZwogICAgICAgaWQ9Imc0MzEyIiAvPjwvZz48L3N2Zz4=" /***/ }), /* 32 */ @@ -293,136 +293,160 @@ module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGlu /* 34 */ /***/ (function(module, exports) { -module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE4LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgdmlld0JveD0iMCAwIDM5Mi42MiAzOTIuNjIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDM5Mi42MiAzOTIuNjI7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxyZWN0IHg9IjE0NC44NjYiIHk9IjMyMC44OTciIHdpZHRoPSIyMy41MDUiIGhlaWdodD0iMjUiLz4NCgk8cGF0aCBkPSJNMzA5Ljc5NSwwSDI2Ni40OUgxMjYuMTMxSDgyLjgyNUMzNy42NjcsMCwwLjkyOSwzNi43MzgsMC45MjksODEuODk2djIyOC44MjhjMCw0NS4xNTgsMzYuNzM4LDgxLjg5Niw4MS44OTYsODEuODk2aDU4LjMyDQoJCWgxMTMuNDQzaDU1LjIwNmM0NS4xNTcsMCw4MS44OTYtMzYuNzM4LDgxLjg5Ni04MS44OTZWODEuODk2QzM5MS42OTEsMzYuNzM4LDM1NC45NTIsMCwzMDkuNzk1LDB6IE0yNjYuNDksMzANCgkJYzE0LjM1NCwwLDI2LjAzLDkuNTQyLDI2LjAzLDIxLjI3VjE3NC4zM2MwLDExLjcyOS0xMS42NzcsMjEuMjcxLTI2LjAzLDIxLjI3MUgxMjYuMTMxYy0xNC4zNTQsMC0yNi4wMzEtOS41NDItMjYuMDMxLTIxLjI3MQ0KCQlWNTEuMjdjMC0xMS43MjgsMTEuNjc4LTIxLjI3LDI2LjAzMS0yMS4yN0gyNjYuNDl6IE0xNDEuMTQ2LDM2Mi42MmMtNi4yNTksMC0xMS4zNTItNS4wOTItMTEuMzUyLTExLjM1MXYtMzAuMDY2DQoJCWMwLTYuMjU5LDUuMDkzLTExLjM1MSwxMS4zNTItMTEuMzUxaDExMy40NDNjNi4yNTksMCwxMS4zNTEsNS4wOTIsMTEuMzUxLDExLjM1MXYzMC4wNjZjMCw2LjI1OS01LjA5MiwxMS4zNTEtMTEuMzUxLDExLjM1MQ0KCQlIMTQxLjE0NnogTTM2MS42OTEsMzEwLjcyNGMwLDI4LjYxNi0yMy4yOCw1MS44OTYtNTEuODk2LDUxLjg5NmgtMTUuNDUyYzEuMDMyLTMuNjEsMS41OTctNy40MTQsMS41OTctMTEuMzUxdi0zMC4wNjYNCgkJYzAtMjIuODAxLTE4LjU1LTQxLjM1MS00MS4zNTEtNDEuMzUxSDE0MS4xNDZjLTIyLjgwMiwwLTQxLjM1MiwxOC41NS00MS4zNTIsNDEuMzUxdjMwLjA2NmMwLDMuOTM3LDAuNTY1LDcuNzQyLDEuNTk3LDExLjM1MQ0KCQlIODIuODI1Yy0yOC42MTYsMC01MS44OTYtMjMuMjgtNTEuODk2LTUxLjg5NlY4MS44OTZjMC0yNS45MSwxOS4wODctNDcuNDQ0LDQzLjkzOC01MS4yODVDNzEuODExLDM2LjkzNSw3MC4xLDQzLjkyMSw3MC4xLDUxLjI3DQoJCVYxNzQuMzNjMCwyOC4yNzEsMjUuMTM2LDUxLjI3MSw1Ni4wMzEsNTEuMjcxSDI2Ni40OWMzMC44OTYsMCw1Ni4wMy0yMyw1Ni4wMy01MS4yNzFWNTEuMjdjMC03LjM0OC0xLjcxMS0xNC4zMzQtNC43NjctMjAuNjU5DQoJCWMyNC44NTEsMy44NDEsNDMuOTM4LDI1LjM3NSw0My45MzgsNTEuMjg1VjMxMC43MjR6Ii8+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==" +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iMjYuNjMzOTQybW0iCiAgIGhlaWdodD0iMjYuNjIyNzY1bW0iCiAgIHZpZXdCb3g9IjAgMCAyNi42MzM5NDIgMjYuNjIyNzY1IgogICB2ZXJzaW9uPSIxLjEiCiAgIGlkPSJzdmc4IgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIgogICBzb2RpcG9kaTpkb2NuYW1lPSJwb3J0YWwuc3ZnIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzMiI+CiAgICA8Y2xpcFBhdGgKICAgICAgIGlkPSJjbGlwUGF0aDUwMDgiCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNTAwNiIKICAgICAgICAgZD0iTSAwLDAgSCAzMTIuMDQzIFYgNzQuNDQ4MiBIIDAgWiIgLz4KICAgIDwvY2xpcFBhdGg+CiAgICA8Y2xpcFBhdGgKICAgICAgIGlkPSJjbGlwUGF0aDUwMTYiCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNTAxNCIKICAgICAgICAgZD0iTSAwLDc0LjQ0OCBIIDMxMi4wNDMgViAwIEggMCBaIiAvPgogICAgPC9jbGlwUGF0aD4KICAgIDxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoNTExMiIKICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg1MTEwIgogICAgICAgICBkPSJNIDAsMCBIIDMxMi4wNDMgViA3NC40NDgyIEggMCBaIiAvPgogICAgPC9jbGlwUGF0aD4KICAgIDxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoNTEyMCIKICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg1MTE4IgogICAgICAgICBkPSJNIDAsNzQuNDQ4IEggMzEyLjA0MyBWIDAgSCAwIFoiIC8+CiAgICA8L2NsaXBQYXRoPgogICAgPGNsaXBQYXRoCiAgICAgICBpZD0iY2xpcFBhdGg1MzMyIgogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDUzMzAiCiAgICAgICAgIGQ9Ik0gMCw3NC40NDggSCAzMTIuMDQzIFYgMCBIIDAgWiIgLz4KICAgIDwvY2xpcFBhdGg+CiAgPC9kZWZzPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSIxLjk3OTg5OSIKICAgICBpbmtzY2FwZTpjeD0iNTUuNTM1Njg4IgogICAgIGlua3NjYXBlOmN5PSItNTEuMDYwODE5IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJtbSIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDE3IgogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIKICAgICBmaXQtbWFyZ2luLXRvcD0iMCIKICAgICBmaXQtbWFyZ2luLWxlZnQ9IjAiCiAgICAgZml0LW1hcmdpbi1yaWdodD0iMCIKICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMCIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE1Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNDcuNDExNjExLC04OS4yODgwNCkiPgogICAgPHJlY3QKICAgICAgIHJ5PSIwIgogICAgICAgeT0iOTYuMTU3Mzc5IgogICAgICAgeD0iNjEuMTYxNDcyIgogICAgICAgaGVpZ2h0PSI1Ljk5OTk5OTUiCiAgICAgICB3aWR0aD0iNS45OTk5OTk1IgogICAgICAgaWQ9InJlY3Q1NTA0IgogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNzQ1MDk4MDU7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuNTU0MDg2MzM7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4KICAgIDxyZWN0CiAgICAgICByeT0iMCIKICAgICAgIHk9IjEwMy4wMjY3MyIKICAgICAgIHg9IjU0LjI5MjEyMiIKICAgICAgIGhlaWdodD0iNS45OTk5OTk1IgogICAgICAgd2lkdGg9IjUuOTk5OTk5NSIKICAgICAgIGlkPSJyZWN0NTUwNC0zIgogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNzQ1MDk4MDU7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuNTU0MDg2MzM7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4KICAgIDxyZWN0CiAgICAgICByeT0iMCIKICAgICAgIHk9Ijg5LjI4ODA0IgogICAgICAgeD0iNjguMDMwODIzIgogICAgICAgaGVpZ2h0PSI1Ljk5OTk5OTUiCiAgICAgICB3aWR0aD0iNS45OTk5OTk1IgogICAgICAgaWQ9InJlY3Q1NTA0LTMtNSIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuOTg5OTk5OTk7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjU4ODIzNTMyO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjU1NDA4NjMzO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjAiIC8+CiAgICA8cmVjdAogICAgICAgcnk9IjAiCiAgICAgICB5PSIxMDkuODk2MDciCiAgICAgICB4PSI0Ny40MjI3NzkiCiAgICAgICBoZWlnaHQ9IjUuOTk5OTk5NSIKICAgICAgIHdpZHRoPSI1Ljk5OTk5OTUiCiAgICAgICBpZD0icmVjdDU1MDQtMy01LTkiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC41ODgyMzUzMjtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC41NTQwODYzMztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPgogICAgPHBhdGgKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDU1NTEtNyIKICAgICAgIGQ9Im0gNjguMzg0OTY3LDEwMi4xMjA4OSBhIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgNS42MDkzNTQsLTUuNzIxOTI4IDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgLTAuMDA5OSwtMC4yMDUwODcgaCAtNS45MTcwNTMgdiA1LjkxMDcwNSBhIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgMC4zMTc2MzQsMC4wMTYzIHoiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC41ODgyMzUzMjtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC44MDg2MTU1NztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPgogICAgPHBhdGgKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDU2NjMiCiAgICAgICBkPSJtIDQ4LjI3MzAxMSwxMDEuMTk2NDggdiAtNy41ODIwNTMgYyAwLC0xLjkxNDE0NCAxLjQxOTUxMSwtMy40NTUxMzQgMy4xODI3NjEsLTMuNDU1MTM0IHYgMCBoIDE0Ljc2NzI3MSIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojOTg5NDk0O3N0cm9rZS13aWR0aDoxLjcyMjc5OTY2O3N0cm9rZS1saW5lY2FwOnNxdWFyZTtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3BhaW50LW9yZGVyOmZpbGwgbWFya2VycyBzdHJva2UiIC8+CiAgICA8cGF0aAogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIGlkPSJyZWN0NTYxNyIKICAgICAgIGQ9Im0gNzMuMjM3ODEzLDEwMi44MzA0MyA0ZS02LDkuMTU0OTggYyAwLDEuNzI3MTggLTEuMzgzMjYzLDMuMTE3NjYgLTMuMTAxNDg1LDMuMTE3NjYgSCA1NS44NDYwNzciCiAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6bm9uZTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6Izk4OTQ5NDtzdHJva2Utd2lkdGg6MS42MTU0NzExMjtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTtwYWludC1vcmRlcjpmaWxsIG1hcmtlcnMgc3Ryb2tlIiAvPgogICAgPHBhdGgKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDU1NTEtNy00IgogICAgICAgZD0ibSA2MS41MTU2MTgsMTA4Ljk5MDIzIGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCA1LjYwOTM1NCwtNS43MjE5MiA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIC0wLjAwOTksLTAuMjA1MDkgSCA2MS4xOTc5NyB2IDUuOTEwNzEgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIDAuMzE3NjM0LDAuMDE2MyB6IgogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNzQ1MDk4MDU7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuODA4NjE1NTc7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4KICAgIDxwYXRoCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgaWQ9InBhdGg1NTUxLTctNC0zIgogICAgICAgZD0ibSA1OS45Mzc5NzUsOTYuMTkzODc0IGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAtNS42MDkzNTQsNS43MjE5MjYgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAwLjAwOTksMC4yMDUwOSBoIDUuOTE3MDUzIHYgLTUuOTEwNzExIGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAtMC4zMTc2MzQsLTAuMDE2MyB6IgogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuODA4NjE1NTc7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4KICAgIDxwYXRoCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgaWQ9InBhdGg1NTUxLTctNC0zLTAiCiAgICAgICBkPSJtIDUzLjA2ODYzMywxMDMuMDYzMjIgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIC01LjYwOTM1Myw1LjcyMTkzIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgMC4wMDk5LDAuMjA1MDggaCA1LjkxNzA1MyB2IC01LjkxMDcxIGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAtMC4zMTc2MzQsLTAuMDE2MyB6IgogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNTg4MjM1MzI7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuODA4NjE1NTc7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4KICA8L2c+Cjwvc3ZnPgo=" /***/ }), /* 35 */ /***/ (function(module, exports) { -module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxOC4xLjEsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4KCjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0iQ2FwYV8xIgogICB4PSIwcHgiCiAgIHk9IjBweCIKICAgdmlld0JveD0iMCAwIDYxMiA2MTIiCiAgIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDYxMiA2MTI7IgogICB4bWw6c3BhY2U9InByZXNlcnZlIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkxIHIxMzcyNSIKICAgc29kaXBvZGk6ZG9jbmFtZT0iZGVsZXRlLXNpbXBsZS5zdmciPjxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTQzIj48cmRmOlJERj48Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+PGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+PGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPjwvY2M6V29yaz48L3JkZjpSREY+PC9tZXRhZGF0YT48ZGVmcwogICAgIGlkPSJkZWZzNDEiIC8+PHNvZGlwb2RpOm5hbWVkdmlldwogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxIgogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiCiAgICAgZ3JpZHRvbGVyYW5jZT0iMTAiCiAgICAgZ3VpZGV0b2xlcmFuY2U9IjEwIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciCiAgICAgaWQ9Im5hbWVkdmlldzM5IgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTp6b29tPSIxLjA5MDcwMDciCiAgICAgaW5rc2NhcGU6Y3g9IjI5NS4wMzQwOCIKICAgICBpbmtzY2FwZTpjeT0iMzMwLjg1NDQ4IgogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJDYXBhXzEiIC8+PGcKICAgICBpZD0iZzUiCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC45OTc4ODEzNSwwLDAsMC45OTc4ODEzNSwxLjczMDQwMTIsMC45MjM3Mjg0NykiPjxwYXRoCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgaWQ9InBhdGg3IgogICAgICAgZD0iTSA1ODcuODI2LDE4Ni45NjYgQyA1NzEuNzEsMTQ5LjYzNCA1NDkuODgyLDExNy4xOTggNTIyLjM0Miw4OS42NTggNDk0LjgwMiw2Mi4xMTggNDYyLjM2Niw0MC4yOSA0MjUuMDM0LDI0LjE3NCAzODcuNzAyLDguMDU4IDM0OC4wMjQsMCAzMDYsMCAyNzcuODQ4LDAgMjUwLjcxNiwzLjY3MiAyMjQuNjA0LDExLjAxNiAxOTguNDkyLDE4LjM2IDE3NC4xMTQsMjguNjYyIDE1MS40Nyw0MS45MjIgMTI4LjgyNiw1NS4xODIgMTA4LjIyMiw3MS4wOTQgODkuNjU4LDg5LjY1OCA3MS4wOTQsMTA4LjIyMiA1NS4xODIsMTI4LjgyNiA0MS45MjIsMTUxLjQ3IDI4LjY2MiwxNzQuMTE2IDE4LjM2LDE5OC40OTIgMTEuMDE2LDIyNC42MDQgMy42NzIsMjUwLjcxNiAwLDI3Ny44NDggMCwzMDYgYyAwLDI4LjE1MiAzLjY3Miw1NS4yODQgMTEuMDE2LDgxLjM5NiA3LjM0NCwyNi4xMSAxNy42NDYsNTAuNDg3IDMwLjkwNiw3My4xMzQgMTMuMjYsMjIuNjQ0IDI5LjE3Miw0My4yNDkgNDcuNzM2LDYxLjgxMiAxOC41NjQsMTguNTY0IDM5LjE2OCwzNC40NzggNjEuODEyLDQ3LjczNiAyMi42NDQsMTMuMjYgNDcuMDIyLDIzLjU2MSA3My4xMzQsMzAuOTA2IEMgMjUwLjcxNiw2MDguMzI4IDI3Ny44NDgsNjEyIDMwNiw2MTIgYyAyOC4xNTIsMCA1NS4yODQsLTMuNjcyIDgxLjM5NiwtMTEuMDE2IDI2LjExMSwtNy4zNDYgNTAuNDg4LC0xNy42NDYgNzMuMTM1LC0zMC45MDYgMjIuNjQ0LC0xMy4yNTkgNDMuMjQ5LC0yOS4xNzIgNjEuODEyLC00Ny43MzYgMTguNTY0LC0xOC41NjMgMzQuNDc4LC0zOS4xNjggNDcuNzM2LC02MS44MTIgMTMuMjYsLTIyLjY0NiAyMy41NjEsLTQ3LjAyMyAzMC45MDYsLTczLjEzNSBDIDYwOC4zMjgsMzYxLjI4NCA2MTIsMzM0LjE1MiA2MTIsMzA2IDYxMiwyNjMuOTc2IDYwMy45NDIsMjI0LjI5OCA1ODcuODI2LDE4Ni45NjYgWiBNIDQ2OC4xOCwzOTEuNjggYyAyLjA0LDIuMDQgMy4wNjMsNC4yODQgMy4wNjMsNi43MzIgMCwyLjQ0OCAtMS4wMjEsNC40ODggLTMuMDYzLDYuMTIgbCAtNTkuOTc2LDYwLjU4OCBjIC0xLjYzMSwxLjYzMiAtMy44NzYsMi40NDggLTYuNzMyLDIuNDQ4IC0yLjg1NCwwIC00Ljg5NSwtMC44MTYgLTYuMTIsLTIuNDQ4IEwgMzA5LjA2LDM3OC44MjggMjIzLjM4LDQ2NS4xMiBjIC0yLjQ0OCwxLjYzMiAtNC42OTIsMi40NDggLTYuNzMyLDIuNDQ4IC0xLjYzMiwwIC0zLjY3MiwtMC44MTYgLTYuMTIsLTIuNDQ4IGwgLTU5Ljk3NiwtNjAuNTg4IGMgLTIuMDQsLTEuMjI2IC0zLjA2LC0zLjI2NyAtMy4wNiwtNi4xMiAwLC0yLjQ0OCAxLjAyLC00LjY5MiAzLjA2LC02LjczMiBsIDg1LjY4LC04NS42OCAtODUuNjgsLTg1LjY4IGMgLTIuMDQsLTIuMDQgLTMuMDYsLTQuMjg0IC0zLjA2LC02LjczMiAwLC0yLjg1NiAxLjAyLC00Ljg5NiAzLjA2LC02LjEyIGwgNTkuOTc2LC02MC41ODggYyAxLjYzMiwtMS42MzIgMy42NzIsLTIuNDQ4IDYuMTIsLTIuNDQ4IDIuNDQ4LDAgNC42OTIsMC44MTYgNi43MzIsMi40NDggbCA4NS42OCw4Ni4yOTIgODYuMjkyLC04Ni4yOTIgYyAxLjYzNSwtMS42MzIgMy42NzUsLTIuNDQ4IDYuMTIsLTIuNDQ4IDIuNDQ4LDAgNC42OTIsMC44MTYgNi43MzIsMi40NDggbCA1OS45NzYsNjAuNTg4IGMgMi4wNCwxLjYzMiAzLjA2MywzLjY3MiAzLjA2Myw2LjEyIDAsMi40NDggLTEuMDIxLDQuNjkyIC0zLjA2Myw2LjczMiBMIDM4Mi41LDMwNiBsIDg1LjY4LDg1LjY4IHoiCiAgICAgICBzdHlsZT0iZmlsbDojMDEwMDAyIiAvPjwvZz48ZwogICAgIGlkPSJnOSIgLz48ZwogICAgIGlkPSJnMTEiIC8+PGcKICAgICBpZD0iZzEzIiAvPjxnCiAgICAgaWQ9ImcxNSIgLz48ZwogICAgIGlkPSJnMTciIC8+PGcKICAgICBpZD0iZzE5IiAvPjxnCiAgICAgaWQ9ImcyMSIgLz48ZwogICAgIGlkPSJnMjMiIC8+PGcKICAgICBpZD0iZzI1IiAvPjxnCiAgICAgaWQ9ImcyNyIgLz48ZwogICAgIGlkPSJnMjkiIC8+PGcKICAgICBpZD0iZzMxIiAvPjxnCiAgICAgaWQ9ImczMyIgLz48ZwogICAgIGlkPSJnMzUiIC8+PGcKICAgICBpZD0iZzM3IiAvPjwvc3ZnPg==" +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjQ1LjY3OHB4IiBoZWlnaHQ9IjQ1LjY3OHB4IiB2aWV3Qm94PSIwIDAgNDUuNjc4IDQ1LjY3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDUuNjc4IDQ1LjY3ODsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxwYXRoIGQ9Ik0zOC45ODgsNi42ODljLTguOTE5LTguOTE4LTIzLjM4LTguOTE5LTMyLjMsMGMtOC45MTgsOC45MTktOC45MTcsMjMuMzgsMCwzMi4yOTljOC45Miw4LjkxOSwyMy4zODEsOC45MTksMzIuMywwDQoJCQlDNDcuOTA4LDMwLjA2OSw0Ny45MDYsMTUuNjA4LDM4Ljk4OCw2LjY4OXogTTIxLjg5MywzNi4wMTZjLTEuNzMsMC0yLjkwNi0xLjI3Mi0yLjkwNi0yLjk3MWMwLTEuNzMsMS4yMDktMi45NzIsMi45MDYtMi45NzINCgkJCWMxLjc2NCwwLDIuOTA2LDEuMjQxLDIuOTM4LDIuOTcyQzI0LjgzMSwzNC43NDIsMjMuNjU2LDM2LjAxNiwyMS44OTMsMzYuMDE2eiBNMjYuMjE1LDIxLjk4MWMtMS4zMiwxLjQ2Ni0xLjg1NiwyLjg2MS0xLjgyLDQuNDY4DQoJCQljMCwxLjE5My0wLjk2OSwyLjE2Mi0yLjE2MywyLjE2MkgyMS43N2MtMS4xODIsMC0yLjE0NS0wLjk0OS0yLjE2MS0yLjEzMWwtMC4wMDUtMC4zMTdjLTAuMTA3LTEuODIzLDAuNTAxLTMuNjgxLDIuMTA5LTUuNjExDQoJCQljMS4xNDUtMS4zNTksMi4wNzItMi41MDIsMi4wNzItMy43MThjMC0xLjI1LTAuODIyLTIuMDczLTIuNjA3LTIuMTQ2Yy0wLjU0OSwwLTEuMTUsMC4wOTMtMS43MzEsMC4yNTYNCgkJCWMtMS4wNTYsMC4yOTctMi4xNTYtMC4yOTgtMi40ODItMS4zNDVsLTAuMDA2LTAuMDJjLTAuMzI5LTEuMDU0LDAuMjQ3LTIuMTc1LDEuMjk0LTIuNTIzYzEuMTU3LTAuMzg1LDIuNTc0LTAuNjU3LDQuMTQtMC42NTcNCgkJCWM0LjcyLDAsNi44NjQsMi42MDksNi44NjQsNS41NzZDMjkuMjU2LDE4LjY5MiwyNy41NzUsMjAuNDc5LDI2LjIxNSwyMS45ODF6Ii8+DQoJPC9nPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPC9zdmc+DQo=" /***/ }), /* 36 */ /***/ (function(module, exports) { -module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4KCjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0iQ2FwYV8xIgogICB4PSIwcHgiCiAgIHk9IjBweCIKICAgd2lkdGg9IjQ3MS42MDhweCIKICAgaGVpZ2h0PSI0NzEuNjA4cHgiCiAgIHZpZXdCb3g9IjAgMCA0NzEuNjA4IDQ3MS42MDgiCiAgIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQ3MS42MDggNDcxLjYwODsiCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTEgcjEzNzI1IgogICBzb2RpcG9kaTpkb2NuYW1lPSJ1bmRvLnN2ZyI+PG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNDEiPjxyZGY6UkRGPjxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj48ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD48ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+PC9jYzpXb3JrPjwvcmRmOlJERj48L21ldGFkYXRhPjxkZWZzCiAgICAgaWQ9ImRlZnMzOSIgLz48c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEiCiAgICAgb2JqZWN0dG9sZXJhbmNlPSIxMCIKICAgICBncmlkdG9sZXJhbmNlPSIxMCIKICAgICBndWlkZXRvbGVyYW5jZT0iMTAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjEyMjkiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iODE2IgogICAgIGlkPSJuYW1lZHZpZXczNyIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgaW5rc2NhcGU6em9vbT0iMC41MDA0MTU2IgogICAgIGlua3NjYXBlOmN4PSIyMzUuODA0IgogICAgIGlua3NjYXBlOmN5PSIyMzUuODA0IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjAiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0iQ2FwYV8xIiAvPjxnCiAgICAgaWQ9ImczIj48cGF0aAogICAgICAgZD0ibSAzODQuNTM1MTksOTEuMDY3NzQ0IGMgLTgxLjQ1OTU0LC04MS40NTY4NzkxIC0yMTQuMDA4MDcsLTgxLjQ1Njg3OTEgLTI5NS40NjU4MjgsMCAtODEuNDU3NzY0MSw4MS40NTY4NzYgLTgxLjQ1Njg3ODEsMjE0LjAxMTYwNiAwLDI5NS40NjU4MjYgODEuNDU2ODY4LDgxLjQ1OTUzIDIxNC4wMDU0MDgsODEuNDU5NTMgMjk1LjQ2NTgyOCwwIDgxLjQ1OTUzLC04MS40NTMzNCA4MS40NTk1MywtMjE0LjAwMjc1IDAsLTI5NS40NjU4MjYgeiBNIDM2OC4zMjg4MywzNzAuMzM4NzIgYyAtNzIuNTE4NTksNzIuNTE4NTkgLTE5MC41MzYzLDcyLjUxODU5IC0yNjMuMDY2MzksMCAtNzIuNTE2ODE3LC03Mi41MzAwOSAtNzIuNTE2ODE3LC0xOTAuNTQyNSAwLC0yNjMuMDY3MjcgNzIuNTI5MiwtNzIuNTI2NTU5IDE5MC41MzYyOSwtNzIuNTI2NTU5IDI2My4wNjYzOSwwIDcyLjUyNTY3LDcyLjUyNDc3IDcyLjUyNTY3LDE5MC41MzcxOCAwLDI2My4wNjcyNyB6IG0gMTIuNDQzNDcsLTE5OC4xMjc2IC0xMS42MjA3Niw1Mi4zMjk3MSBjIC0wLjMxMzUsMS40NDcwNiAtMS43NDM3MywyLjM0NjgyIC0zLjE4MjgyLDIuMDM1OTggLTAuNDQwMTQsLTAuMDkzOSAtMTAuOTUwMzYsLTIuMzU4MzQgLTI2LjI5ODU4LC0yLjM1ODM0IC0yNS44ODk0NCwwIC03MS42MjQxMyw2Ljg1MTg0IC0xMDEuODMxNzIsNDkuNTUzMzggbCA2LjI5NjU2LDYuMjk2NTcgNzAuNTAzODYsMzAuNTU5MTcgYyAyLjM2NTQyLDEuMDM3MDMgMy43NTc1OCwzLjUwNjk1IDMuMzkxODMsNi4wNjcyIC0wLjM1MDcsMi41NDk2MiAtMi4zNjEsNC41NTQ2MSAtNC45MzA5OSw0Ljg3MzQyIGwgLTE3NS42MDUxOSwyMi45NTkwMSBjIC0xLjc1ODc5LDAuMjMwMjUgLTMuNTM4ODMsLTAuMzc3MjYgLTQuNzk3MjYsLTEuNjI3NzIgLTEuMjY2NCwtMS4yNjE5NyAtMS44NTUzMiwtMy4wMzY3IC0xLjYzNTY5LC00LjgwNjEyIGwgMjIuOTU5LC0xNzUuNjA3ODUgYyAwLjE2NDczLC0xLjI4NSAwLjc1MzY0LC0yLjQzNjI3IDEuNjIzMywtMy4zMDUwMyAwLjg1ODE0LC0wLjg1OTAzIDEuOTg5MDQsLTEuNDQ3OTUgMy4yNjM0MSwtMS42MzEyNyAyLjU0Njk3LC0wLjM1Nzc4IDUuMDE3NzcsMS4wMzcwMyA2LjA1MzkyLDMuMzk0NDggbCAzMC41NjcxNCw3MC41MDY1MiAwLjE1NzYzLDAuMTU3NjMgYyA0Ny4xNDE5MSwtNTkuNDAxMTcgMTE1LjQxNTg0LC02Ni40ODk0NiAxNDUuMDI4MzEsLTY2LjQ4OTQ2IDEzLjU0NjkzLDAgMjYuNjk2MjIsMS4zNDUyMiAzOC4wMjM4NCwzLjg4Njg3IDEuNDUzMjYsMC4zMzIxIDIuMzYzNjUsMS43NjMyMiAyLjAzNDIxLDMuMjA1ODUgeiIKICAgICAgIGlkPSJwYXRoNSIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PC9nPjxnCiAgICAgaWQ9Imc3IiAvPjxnCiAgICAgaWQ9Imc5IiAvPjxnCiAgICAgaWQ9ImcxMSIgLz48ZwogICAgIGlkPSJnMTMiIC8+PGcKICAgICBpZD0iZzE1IiAvPjxnCiAgICAgaWQ9ImcxNyIgLz48ZwogICAgIGlkPSJnMTkiIC8+PGcKICAgICBpZD0iZzIxIiAvPjxnCiAgICAgaWQ9ImcyMyIgLz48ZwogICAgIGlkPSJnMjUiIC8+PGcKICAgICBpZD0iZzI3IiAvPjxnCiAgICAgaWQ9ImcyOSIgLz48ZwogICAgIGlkPSJnMzEiIC8+PGcKICAgICBpZD0iZzMzIiAvPjxnCiAgICAgaWQ9ImczNSIgLz48L3N2Zz4=" +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4KCjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0iQ2FwYV8xIgogICB4PSIwcHgiCiAgIHk9IjBweCIKICAgd2lkdGg9IjQ3MS42MDhweCIKICAgaGVpZ2h0PSI0NzEuNjA4cHgiCiAgIHZpZXdCb3g9IjAgMCA0NzEuNjA4IDQ3MS42MDgiCiAgIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQ3MS42MDggNDcxLjYwODsiCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTEgcjEzNzI1IgogICBzb2RpcG9kaTpkb2NuYW1lPSJyZWRvLnN2ZyI+PG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNDEiPjxyZGY6UkRGPjxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj48ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD48ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+PGRjOnRpdGxlPjwvZGM6dGl0bGU+PC9jYzpXb3JrPjwvcmRmOlJERj48L21ldGFkYXRhPjxkZWZzCiAgICAgaWQ9ImRlZnMzOSIgLz48c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEiCiAgICAgb2JqZWN0dG9sZXJhbmNlPSIxMCIKICAgICBncmlkdG9sZXJhbmNlPSIxMCIKICAgICBndWlkZXRvbGVyYW5jZT0iMTAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjEyMjkiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iODE2IgogICAgIGlkPSJuYW1lZHZpZXczNyIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgaW5rc2NhcGU6em9vbT0iMC41MDA0MTU2IgogICAgIGlua3NjYXBlOmN4PSIyMzUuODA0IgogICAgIGlua3NjYXBlOmN5PSIyMzUuODA0IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjAiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0iQ2FwYV8xIiAvPjxnCiAgICAgaWQ9ImczIgogICAgIHRyYW5zZm9ybT0ibWF0cml4KC0xLDAsMCwxLDQ3My42MDYyMSwwKSI+PHBhdGgKICAgICAgIGQ9Im0gMzg0LjUzNTE5LDkxLjA2Nzc0NCBjIC04MS40NTk1NCwtODEuNDU2ODc5MSAtMjE0LjAwODA3LC04MS40NTY4NzkxIC0yOTUuNDY1ODI4LDAgLTgxLjQ1Nzc2NDEsODEuNDU2ODc2IC04MS40NTY4NzgxLDIxNC4wMTE2MDYgMCwyOTUuNDY1ODI2IDgxLjQ1Njg2OCw4MS40NTk1MyAyMTQuMDA1NDA4LDgxLjQ1OTUzIDI5NS40NjU4MjgsMCA4MS40NTk1MywtODEuNDUzMzQgODEuNDU5NTMsLTIxNC4wMDI3NSAwLC0yOTUuNDY1ODI2IHogTSAzNjguMzI4ODMsMzcwLjMzODcyIGMgLTcyLjUxODU5LDcyLjUxODU5IC0xOTAuNTM2Myw3Mi41MTg1OSAtMjYzLjA2NjM5LDAgLTcyLjUxNjgxNywtNzIuNTMwMDkgLTcyLjUxNjgxNywtMTkwLjU0MjUgMCwtMjYzLjA2NzI3IDcyLjUyOTIsLTcyLjUyNjU1OSAxOTAuNTM2MjksLTcyLjUyNjU1OSAyNjMuMDY2MzksMCA3Mi41MjU2Nyw3Mi41MjQ3NyA3Mi41MjU2NywxOTAuNTM3MTggMCwyNjMuMDY3MjcgeiBtIDEyLjQ0MzQ3LC0xOTguMTI3NiAtMTEuNjIwNzYsNTIuMzI5NzEgYyAtMC4zMTM1LDEuNDQ3MDYgLTEuNzQzNzMsMi4zNDY4MiAtMy4xODI4MiwyLjAzNTk4IC0wLjQ0MDE0LC0wLjA5MzkgLTEwLjk1MDM2LC0yLjM1ODM0IC0yNi4yOTg1OCwtMi4zNTgzNCAtMjUuODg5NDQsMCAtNzEuNjI0MTMsNi44NTE4NCAtMTAxLjgzMTcyLDQ5LjU1MzM4IGwgNi4yOTY1Niw2LjI5NjU3IDcwLjUwMzg2LDMwLjU1OTE3IGMgMi4zNjU0MiwxLjAzNzAzIDMuNzU3NTgsMy41MDY5NSAzLjM5MTgzLDYuMDY3MiAtMC4zNTA3LDIuNTQ5NjIgLTIuMzYxLDQuNTU0NjEgLTQuOTMwOTksNC44NzM0MiBsIC0xNzUuNjA1MTksMjIuOTU5MDEgYyAtMS43NTg3OSwwLjIzMDI1IC0zLjUzODgzLC0wLjM3NzI2IC00Ljc5NzI2LC0xLjYyNzcyIC0xLjI2NjQsLTEuMjYxOTcgLTEuODU1MzIsLTMuMDM2NyAtMS42MzU2OSwtNC44MDYxMiBsIDIyLjk1OSwtMTc1LjYwNzg1IGMgMC4xNjQ3MywtMS4yODUgMC43NTM2NCwtMi40MzYyNyAxLjYyMzMsLTMuMzA1MDMgMC44NTgxNCwtMC44NTkwMyAxLjk4OTA0LC0xLjQ0Nzk1IDMuMjYzNDEsLTEuNjMxMjcgMi41NDY5NywtMC4zNTc3OCA1LjAxNzc3LDEuMDM3MDMgNi4wNTM5MiwzLjM5NDQ4IGwgMzAuNTY3MTQsNzAuNTA2NTIgMC4xNTc2MywwLjE1NzYzIGMgNDcuMTQxOTEsLTU5LjQwMTE3IDExNS40MTU4NCwtNjYuNDg5NDYgMTQ1LjAyODMxLC02Ni40ODk0NiAxMy41NDY5MywwIDI2LjY5NjIyLDEuMzQ1MjIgMzguMDIzODQsMy44ODY4NyAxLjQ1MzI2LDAuMzMyMSAyLjM2MzY1LDEuNzYzMjIgMi4wMzQyMSwzLjIwNTg1IHoiCiAgICAgICBpZD0icGF0aDUiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPjwvZz48ZwogICAgIGlkPSJnNyIgLz48ZwogICAgIGlkPSJnOSIgLz48ZwogICAgIGlkPSJnMTEiIC8+PGcKICAgICBpZD0iZzEzIiAvPjxnCiAgICAgaWQ9ImcxNSIgLz48ZwogICAgIGlkPSJnMTciIC8+PGcKICAgICBpZD0iZzE5IiAvPjxnCiAgICAgaWQ9ImcyMSIgLz48ZwogICAgIGlkPSJnMjMiIC8+PGcKICAgICBpZD0iZzI1IiAvPjxnCiAgICAgaWQ9ImcyNyIgLz48ZwogICAgIGlkPSJnMjkiIC8+PGcKICAgICBpZD0iZzMxIiAvPjxnCiAgICAgaWQ9ImczMyIgLz48ZwogICAgIGlkPSJnMzUiIC8+PC9zdmc+" /***/ }), /* 37 */ /***/ (function(module, exports) { -module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4KCjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0iQ2FwYV8xIgogICB4PSIwcHgiCiAgIHk9IjBweCIKICAgd2lkdGg9IjQ3MS42MDhweCIKICAgaGVpZ2h0PSI0NzEuNjA4cHgiCiAgIHZpZXdCb3g9IjAgMCA0NzEuNjA4IDQ3MS42MDgiCiAgIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQ3MS42MDggNDcxLjYwODsiCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTEgcjEzNzI1IgogICBzb2RpcG9kaTpkb2NuYW1lPSJyZWRvLnN2ZyI+PG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNDEiPjxyZGY6UkRGPjxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj48ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD48ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+PGRjOnRpdGxlPjwvZGM6dGl0bGU+PC9jYzpXb3JrPjwvcmRmOlJERj48L21ldGFkYXRhPjxkZWZzCiAgICAgaWQ9ImRlZnMzOSIgLz48c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEiCiAgICAgb2JqZWN0dG9sZXJhbmNlPSIxMCIKICAgICBncmlkdG9sZXJhbmNlPSIxMCIKICAgICBndWlkZXRvbGVyYW5jZT0iMTAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjEyMjkiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iODE2IgogICAgIGlkPSJuYW1lZHZpZXczNyIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgaW5rc2NhcGU6em9vbT0iMC41MDA0MTU2IgogICAgIGlua3NjYXBlOmN4PSIyMzUuODA0IgogICAgIGlua3NjYXBlOmN5PSIyMzUuODA0IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjAiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0iQ2FwYV8xIiAvPjxnCiAgICAgaWQ9ImczIgogICAgIHRyYW5zZm9ybT0ibWF0cml4KC0xLDAsMCwxLDQ3My42MDYyMSwwKSI+PHBhdGgKICAgICAgIGQ9Im0gMzg0LjUzNTE5LDkxLjA2Nzc0NCBjIC04MS40NTk1NCwtODEuNDU2ODc5MSAtMjE0LjAwODA3LC04MS40NTY4NzkxIC0yOTUuNDY1ODI4LDAgLTgxLjQ1Nzc2NDEsODEuNDU2ODc2IC04MS40NTY4NzgxLDIxNC4wMTE2MDYgMCwyOTUuNDY1ODI2IDgxLjQ1Njg2OCw4MS40NTk1MyAyMTQuMDA1NDA4LDgxLjQ1OTUzIDI5NS40NjU4MjgsMCA4MS40NTk1MywtODEuNDUzMzQgODEuNDU5NTMsLTIxNC4wMDI3NSAwLC0yOTUuNDY1ODI2IHogTSAzNjguMzI4ODMsMzcwLjMzODcyIGMgLTcyLjUxODU5LDcyLjUxODU5IC0xOTAuNTM2Myw3Mi41MTg1OSAtMjYzLjA2NjM5LDAgLTcyLjUxNjgxNywtNzIuNTMwMDkgLTcyLjUxNjgxNywtMTkwLjU0MjUgMCwtMjYzLjA2NzI3IDcyLjUyOTIsLTcyLjUyNjU1OSAxOTAuNTM2MjksLTcyLjUyNjU1OSAyNjMuMDY2MzksMCA3Mi41MjU2Nyw3Mi41MjQ3NyA3Mi41MjU2NywxOTAuNTM3MTggMCwyNjMuMDY3MjcgeiBtIDEyLjQ0MzQ3LC0xOTguMTI3NiAtMTEuNjIwNzYsNTIuMzI5NzEgYyAtMC4zMTM1LDEuNDQ3MDYgLTEuNzQzNzMsMi4zNDY4MiAtMy4xODI4MiwyLjAzNTk4IC0wLjQ0MDE0LC0wLjA5MzkgLTEwLjk1MDM2LC0yLjM1ODM0IC0yNi4yOTg1OCwtMi4zNTgzNCAtMjUuODg5NDQsMCAtNzEuNjI0MTMsNi44NTE4NCAtMTAxLjgzMTcyLDQ5LjU1MzM4IGwgNi4yOTY1Niw2LjI5NjU3IDcwLjUwMzg2LDMwLjU1OTE3IGMgMi4zNjU0MiwxLjAzNzAzIDMuNzU3NTgsMy41MDY5NSAzLjM5MTgzLDYuMDY3MiAtMC4zNTA3LDIuNTQ5NjIgLTIuMzYxLDQuNTU0NjEgLTQuOTMwOTksNC44NzM0MiBsIC0xNzUuNjA1MTksMjIuOTU5MDEgYyAtMS43NTg3OSwwLjIzMDI1IC0zLjUzODgzLC0wLjM3NzI2IC00Ljc5NzI2LC0xLjYyNzcyIC0xLjI2NjQsLTEuMjYxOTcgLTEuODU1MzIsLTMuMDM2NyAtMS42MzU2OSwtNC44MDYxMiBsIDIyLjk1OSwtMTc1LjYwNzg1IGMgMC4xNjQ3MywtMS4yODUgMC43NTM2NCwtMi40MzYyNyAxLjYyMzMsLTMuMzA1MDMgMC44NTgxNCwtMC44NTkwMyAxLjk4OTA0LC0xLjQ0Nzk1IDMuMjYzNDEsLTEuNjMxMjcgMi41NDY5NywtMC4zNTc3OCA1LjAxNzc3LDEuMDM3MDMgNi4wNTM5MiwzLjM5NDQ4IGwgMzAuNTY3MTQsNzAuNTA2NTIgMC4xNTc2MywwLjE1NzYzIGMgNDcuMTQxOTEsLTU5LjQwMTE3IDExNS40MTU4NCwtNjYuNDg5NDYgMTQ1LjAyODMxLC02Ni40ODk0NiAxMy41NDY5MywwIDI2LjY5NjIyLDEuMzQ1MjIgMzguMDIzODQsMy44ODY4NyAxLjQ1MzI2LDAuMzMyMSAyLjM2MzY1LDEuNzYzMjIgMi4wMzQyMSwzLjIwNTg1IHoiCiAgICAgICBpZD0icGF0aDUiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPjwvZz48ZwogICAgIGlkPSJnNyIgLz48ZwogICAgIGlkPSJnOSIgLz48ZwogICAgIGlkPSJnMTEiIC8+PGcKICAgICBpZD0iZzEzIiAvPjxnCiAgICAgaWQ9ImcxNSIgLz48ZwogICAgIGlkPSJnMTciIC8+PGcKICAgICBpZD0iZzE5IiAvPjxnCiAgICAgaWQ9ImcyMSIgLz48ZwogICAgIGlkPSJnMjMiIC8+PGcKICAgICBpZD0iZzI1IiAvPjxnCiAgICAgaWQ9ImcyNyIgLz48ZwogICAgIGlkPSJnMjkiIC8+PGcKICAgICBpZD0iZzMxIiAvPjxnCiAgICAgaWQ9ImczMyIgLz48ZwogICAgIGlkPSJnMzUiIC8+PC9zdmc+" +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE4LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgdmlld0JveD0iMCAwIDM5Mi42MiAzOTIuNjIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDM5Mi42MiAzOTIuNjI7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxyZWN0IHg9IjE0NC44NjYiIHk9IjMyMC44OTciIHdpZHRoPSIyMy41MDUiIGhlaWdodD0iMjUiLz4NCgk8cGF0aCBkPSJNMzA5Ljc5NSwwSDI2Ni40OUgxMjYuMTMxSDgyLjgyNUMzNy42NjcsMCwwLjkyOSwzNi43MzgsMC45MjksODEuODk2djIyOC44MjhjMCw0NS4xNTgsMzYuNzM4LDgxLjg5Niw4MS44OTYsODEuODk2aDU4LjMyDQoJCWgxMTMuNDQzaDU1LjIwNmM0NS4xNTcsMCw4MS44OTYtMzYuNzM4LDgxLjg5Ni04MS44OTZWODEuODk2QzM5MS42OTEsMzYuNzM4LDM1NC45NTIsMCwzMDkuNzk1LDB6IE0yNjYuNDksMzANCgkJYzE0LjM1NCwwLDI2LjAzLDkuNTQyLDI2LjAzLDIxLjI3VjE3NC4zM2MwLDExLjcyOS0xMS42NzcsMjEuMjcxLTI2LjAzLDIxLjI3MUgxMjYuMTMxYy0xNC4zNTQsMC0yNi4wMzEtOS41NDItMjYuMDMxLTIxLjI3MQ0KCQlWNTEuMjdjMC0xMS43MjgsMTEuNjc4LTIxLjI3LDI2LjAzMS0yMS4yN0gyNjYuNDl6IE0xNDEuMTQ2LDM2Mi42MmMtNi4yNTksMC0xMS4zNTItNS4wOTItMTEuMzUyLTExLjM1MXYtMzAuMDY2DQoJCWMwLTYuMjU5LDUuMDkzLTExLjM1MSwxMS4zNTItMTEuMzUxaDExMy40NDNjNi4yNTksMCwxMS4zNTEsNS4wOTIsMTEuMzUxLDExLjM1MXYzMC4wNjZjMCw2LjI1OS01LjA5MiwxMS4zNTEtMTEuMzUxLDExLjM1MQ0KCQlIMTQxLjE0NnogTTM2MS42OTEsMzEwLjcyNGMwLDI4LjYxNi0yMy4yOCw1MS44OTYtNTEuODk2LDUxLjg5NmgtMTUuNDUyYzEuMDMyLTMuNjEsMS41OTctNy40MTQsMS41OTctMTEuMzUxdi0zMC4wNjYNCgkJYzAtMjIuODAxLTE4LjU1LTQxLjM1MS00MS4zNTEtNDEuMzUxSDE0MS4xNDZjLTIyLjgwMiwwLTQxLjM1MiwxOC41NS00MS4zNTIsNDEuMzUxdjMwLjA2NmMwLDMuOTM3LDAuNTY1LDcuNzQyLDEuNTk3LDExLjM1MQ0KCQlIODIuODI1Yy0yOC42MTYsMC01MS44OTYtMjMuMjgtNTEuODk2LTUxLjg5NlY4MS44OTZjMC0yNS45MSwxOS4wODctNDcuNDQ0LDQzLjkzOC01MS4yODVDNzEuODExLDM2LjkzNSw3MC4xLDQzLjkyMSw3MC4xLDUxLjI3DQoJCVYxNzQuMzNjMCwyOC4yNzEsMjUuMTM2LDUxLjI3MSw1Ni4wMzEsNTEuMjcxSDI2Ni40OWMzMC44OTYsMCw1Ni4wMy0yMyw1Ni4wMy01MS4yNzFWNTEuMjdjMC03LjM0OC0xLjcxMS0xNC4zMzQtNC43NjctMjAuNjU5DQoJCWMyNC44NTEsMy44NDEsNDMuOTM4LDI1LjM3NSw0My45MzgsNTEuMjg1VjMxMC43MjR6Ii8+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==" /***/ }), /* 38 */ /***/ (function(module, exports) { -module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iNzUuNDA2cHgiIGhlaWdodD0iNzUuNDA2cHgiIHZpZXdCb3g9IjAgMCA3NS40MDYgNzUuNDA2IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA3NS40MDYgNzUuNDA2OyIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8cGF0aCBkPSJNMzUuNDM2LDExLjQ1NEg3Ljc1NXY2My45NTJoMjcuNjgyTDM1LjQzNiwxMS40NTRMMzUuNDM2LDExLjQ1NHogTTMyLjU3Myw3Mi41NDNIMTAuNjE4VjE0LjMxN2gyMS45NTVWNzIuNTQzegoJCSBNNzAuMjc0LDExLjQ1NGgtMjcuNjh2MzcuNDY0aDI3LjY4MlYxMS40NTRINzAuMjc0eiBNNjcuNDEyLDQ2LjA1NUg0NS40NTdWMTQuMzE3aDIxLjk1NVY0Ni4wNTV6IE0wLjgzNSw1LjAxMVYwaDczLjczNnY1LjAxMQoJCUgwLjgzNXoiLz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K" +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iMjYuNjMzOTQybW0iCiAgIGhlaWdodD0iMjYuNjIyNzY1bW0iCiAgIHZpZXdCb3g9IjAgMCAyNi42MzM5NDIgMjYuNjIyNzY1IgogICB2ZXJzaW9uPSIxLjEiCiAgIGlkPSJzdmc4IgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIgogICBzb2RpcG9kaTpkb2NuYW1lPSJzZXR0aW5ncy5zdmciPgogIDxkZWZzCiAgICAgaWQ9ImRlZnMyIj4KICAgIDxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoNTAwOCIKICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg1MDA2IgogICAgICAgICBkPSJNIDAsMCBIIDMxMi4wNDMgViA3NC40NDgyIEggMCBaIiAvPgogICAgPC9jbGlwUGF0aD4KICAgIDxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoNTAxNiIKICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg1MDE0IgogICAgICAgICBkPSJNIDAsNzQuNDQ4IEggMzEyLjA0MyBWIDAgSCAwIFoiIC8+CiAgICA8L2NsaXBQYXRoPgogICAgPGNsaXBQYXRoCiAgICAgICBpZD0iY2xpcFBhdGg1MTEyIgogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDUxMTAiCiAgICAgICAgIGQ9Ik0gMCwwIEggMzEyLjA0MyBWIDc0LjQ0ODIgSCAwIFoiIC8+CiAgICA8L2NsaXBQYXRoPgogICAgPGNsaXBQYXRoCiAgICAgICBpZD0iY2xpcFBhdGg1MTIwIgogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDUxMTgiCiAgICAgICAgIGQ9Ik0gMCw3NC40NDggSCAzMTIuMDQzIFYgMCBIIDAgWiIgLz4KICAgIDwvY2xpcFBhdGg+CiAgICA8Y2xpcFBhdGgKICAgICAgIGlkPSJjbGlwUGF0aDUzMzIiCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNTMzMCIKICAgICAgICAgZD0iTSAwLDc0LjQ0OCBIIDMxMi4wNDMgViAwIEggMCBaIiAvPgogICAgPC9jbGlwUGF0aD4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjEuOTc5ODk5IgogICAgIGlua3NjYXBlOmN4PSI1NS41MzU2ODgiCiAgICAgaW5rc2NhcGU6Y3k9Ii01MS4wNjA4MTkiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9Im1tIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciCiAgICAgaW5rc2NhcGU6d2luZG93LXg9Ii04IgogICAgIGlua3NjYXBlOndpbmRvdy15PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIGZpdC1tYXJnaW4tdG9wPSIwIgogICAgIGZpdC1tYXJnaW4tbGVmdD0iMCIKICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIwIgogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIiAvPgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTUiPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgICAgPGRjOnRpdGxlPjwvZGM6dGl0bGU+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIgogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC00Ny40MTE2MTEsLTg5LjI4ODA0KSI+CiAgICA8cmVjdAogICAgICAgcnk9IjAiCiAgICAgICB5PSI5Ni4xNTczNzkiCiAgICAgICB4PSI2MS4xNjE0NzIiCiAgICAgICBoZWlnaHQ9IjUuOTk5OTk5NSIKICAgICAgIHdpZHRoPSI1Ljk5OTk5OTUiCiAgICAgICBpZD0icmVjdDU1MDQiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC43NDUwOTgwNTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC41NTQwODYzMztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPgogICAgPHJlY3QKICAgICAgIHJ5PSIwIgogICAgICAgeT0iMTAzLjAyNjczIgogICAgICAgeD0iNTQuMjkyMTIyIgogICAgICAgaGVpZ2h0PSI1Ljk5OTk5OTUiCiAgICAgICB3aWR0aD0iNS45OTk5OTk1IgogICAgICAgaWQ9InJlY3Q1NTA0LTMiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC43NDUwOTgwNTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC41NTQwODYzMztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPgogICAgPHJlY3QKICAgICAgIHJ5PSIwIgogICAgICAgeT0iODkuMjg4MDQiCiAgICAgICB4PSI2OC4wMzA4MjMiCiAgICAgICBoZWlnaHQ9IjUuOTk5OTk5NSIKICAgICAgIHdpZHRoPSI1Ljk5OTk5OTUiCiAgICAgICBpZD0icmVjdDU1MDQtMy01IgogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNTg4MjM1MzI7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuNTU0MDg2MzM7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4KICAgIDxyZWN0CiAgICAgICByeT0iMCIKICAgICAgIHk9IjEwOS44OTYwNyIKICAgICAgIHg9IjQ3LjQyMjc3OSIKICAgICAgIGhlaWdodD0iNS45OTk5OTk1IgogICAgICAgd2lkdGg9IjUuOTk5OTk5NSIKICAgICAgIGlkPSJyZWN0NTUwNC0zLTUtOSIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuOTg5OTk5OTk7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjU4ODIzNTMyO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjU1NDA4NjMzO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjAiIC8+CiAgICA8cGF0aAogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIGlkPSJwYXRoNTU1MS03IgogICAgICAgZD0ibSA2OC4zODQ5NjcsMTAyLjEyMDg5IGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCA1LjYwOTM1NCwtNS43MjE5MjggNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAtMC4wMDk5LC0wLjIwNTA4NyBoIC01LjkxNzA1MyB2IDUuOTEwNzA1IGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAwLjMxNzYzNCwwLjAxNjMgeiIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuOTg5OTk5OTk7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjU4ODIzNTMyO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjgwODYxNTU3O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjAiIC8+CiAgICA8cGF0aAogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIGlkPSJwYXRoNTY2MyIKICAgICAgIGQ9Im0gNDguMjczMDExLDEwMS4xOTY0OCB2IC03LjU4MjA1MyBjIDAsLTEuOTE0MTQ0IDEuNDE5NTExLC0zLjQ1NTEzNCAzLjE4Mjc2MSwtMy40NTUxMzQgdiAwIGggMTQuNzY3MjcxIgogICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiM5ODk0OTQ7c3Ryb2tlLXdpZHRoOjEuNzIyNzk5NjY7c3Ryb2tlLWxpbmVjYXA6c3F1YXJlO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7cGFpbnQtb3JkZXI6ZmlsbCBtYXJrZXJzIHN0cm9rZSIgLz4KICAgIDxwYXRoCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgaWQ9InJlY3Q1NjE3IgogICAgICAgZD0ibSA3My4yMzc4MTMsMTAyLjgzMDQzIDRlLTYsOS4xNTQ5OCBjIDAsMS43MjcxOCAtMS4zODMyNjMsMy4xMTc2NiAtMy4xMDE0ODUsMy4xMTc2NiBIIDU1Ljg0NjA3NyIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojOTg5NDk0O3N0cm9rZS13aWR0aDoxLjYxNTQ3MTEyO3N0cm9rZS1saW5lY2FwOnNxdWFyZTtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3BhaW50LW9yZGVyOmZpbGwgbWFya2VycyBzdHJva2UiIC8+CiAgICA8cGF0aAogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIGlkPSJwYXRoNTU1MS03LTQiCiAgICAgICBkPSJtIDYxLjUxNTYxOCwxMDguOTkwMjMgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIDUuNjA5MzU0LC01LjcyMTkyIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgLTAuMDA5OSwtMC4yMDUwOSBIIDYxLjE5Nzk3IHYgNS45MTA3MSBhIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgMC4zMTc2MzQsMC4wMTYzIHoiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC43NDUwOTgwNTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC44MDg2MTU1NztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPgogICAgPHBhdGgKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDU1NTEtNy00LTMiCiAgICAgICBkPSJtIDU5LjkzNzk3NSw5Ni4xOTM4NzQgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIC01LjYwOTM1NCw1LjcyMTkyNiA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIDAuMDA5OSwwLjIwNTA5IGggNS45MTcwNTMgdiAtNS45MTA3MTEgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIC0wLjMxNzYzNCwtMC4wMTYzIHoiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC44MDg2MTU1NztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPgogICAgPHBhdGgKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDU1NTEtNy00LTMtMCIKICAgICAgIGQ9Im0gNTMuMDY4NjMzLDEwMy4wNjMyMiBhIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgLTUuNjA5MzUzLDUuNzIxOTMgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAwLjAwOTksMC4yMDUwOCBoIDUuOTE3MDUzIHYgLTUuOTEwNzEgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIC0wLjMxNzYzNCwtMC4wMTYzIHoiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC41ODgyMzUzMjtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC44MDg2MTU1NztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPgogICAgPGcKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuMjkzMzQyMzksMCwwLDAuMjkzMzQyMzksNjAuNTUxODAzLDEwMi40MTcwNSkiCiAgICAgICBpZD0iZzU0ODYiPgogICAgICA8ZwogICAgICAgICBpZD0iZzMiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICBkPSJtIDQxLjUzNCwyOC42NiBoIDEuOTU3IEMgNDQuODc3LDI4LjY2IDQ2LDI3LjUzNiA0NiwyNi4xNSB2IC02LjMgYyAwLC0xLjM4NSAtMS4xMjQsLTIuNTA5IC0yLjUwOSwtMi41MDkgSCA0MS41NCB2IDAuMDA2IEMgNDEuMTQ4LDE2LjE0IDQwLjY4NywxNC45ODMgNDAuMTAzLDEzLjg4OSBsIDEuMzgxLC0xLjM4MSBjIDAuOTc5LC0wLjk4IDAuOTc5LC0yLjU2OSAwLC0zLjU0OSBMIDM3LjA0LDQuNTE3IGMgLTAuOTc5LC0wLjk3OSAtMi41NjcsLTAuOTc5IC0zLjU0NywwIGwgLTEuMzgyLDEuMzggQyAzMS4wMTcsNS4zMTMgMjkuODYxLDQuODUyIDI4LjY1NCw0LjQ2MSBIIDI4LjY2IFYgMi41MSBDIDI4LjY2LDEuMTI0IDI3LjUzNywwIDI2LjE1LDAgaCAtNi4zIGMgLTEuMzg2LDAgLTIuNTA5LDEuMTI0IC0yLjUwOSwyLjUxIHYgMS45NTUgbCAwLjAxNCwtMTBlLTQgYyAtMS4yMDcsMC4zNjcgLTIuMzYzLDAuODUgLTMuNDU4LDEuNDM1IEwgMTIuNTE2LDQuNTE4IGMgLTAuOTgsLTAuOTc5IC0yLjU2OCwtMC45NzkgLTMuNTQ4LDAgTCA0LjUyNSw4Ljk2MSBDIDMuNTQ2LDkuOTQgMy41NDUsMTEuNTI3IDQuNTIzLDEyLjUwNyBMIDUuOSwxMy44ODkgQyA1LjMxNiwxNC45ODMgNC44NTEsMTYuMTQgNC40NiwxNy4zNDYgViAxNy4zNDEgSCAyLjUwOSBDIDEuMTI0LDE3LjM0MSAwLDE4LjQ2NSAwLDE5Ljg1IHYgNi4zMDEgYyAwLDEuMzg3IDEuMTI0LDIuNTExIDIuNTA5LDIuNTExIEggNC40NzMgTCA0LjQ2NywyOC42NDcgYyAwLjM2NywxLjIwNyAwLjg1MywyLjM2MiAxLjQzNiwzLjQ1NyBsIC0xLjM4LDEuMzgxIGMgLTAuOTgsMC45NzkgLTAuOTc5LDIuNTY3IDAsMy41NDcgbCA0LjQ0Myw0LjQ0MiBjIDAuOTc5LDAuOTc5IDIuNTY4LDAuOTc5IDMuNTQ4LDAgbCAxLjM4MSwtMS4zODEgYyAxLjA5NCwwLjU4NCAyLjI1MSwxLjA3MiAzLjQ1OCwxLjQzOCBsIC0wLjAxNCwtMC4wMDYgdiAxLjk2NSBjIDAsMS4zODcgMS4xMjMsMi41MSAyLjUwOSwyLjUxIGggNi4zIGMgMS4zODcsMCAyLjUxLC0xLjEyMyAyLjUxLC0yLjUxIHYgLTEuOTUgaCAtMC4wMDYgYyAxLjIwNywtMC4zOTIgMi4zNjMsLTAuODU2IDMuNDU3LC0xLjQ0IGwgMS4zODEsMS4zNzkgYyAwLjk4LDAuOTc5IDIuNTY4LDAuOTc5IDMuNTQ3LDAgbCA0LjQ0MywtNC40NDUgYyAwLjk3OSwtMC45NzkgMC45NzksLTIuNTY2IDAsLTMuNTQ3IGwgLTEuMzgzLC0xLjM4MyBjIDAuNTg0LC0xLjA5NCAxLjA2OCwtMi4yNSAxLjQzNiwtMy40NTcgeiBNIDIzLjAyMSwzNi43MTQgQyAxNS40NDQsMzYuNzIzIDkuMjc4LDMwLjU1NyA5LjI4NywyMi45OCA5LjI5NiwxNS40NDEgMTUuNDUsOS4yODcgMjIuOTg5LDkuMjc4IGMgNy41NzgsLTAuMDA5IDEzLjc0NCw2LjE1NyAxMy43MzQsMTMuNzM0IC0wLjAxLDcuNTM5IC02LjE2MiwxMy42OTMgLTEzLjcwMiwxMy43MDIgeiIKICAgICAgICAgICBpZD0icGF0aDUiIC8+CiAgICAgIDwvZz4KICAgICAgPGcKICAgICAgICAgaWQ9Imc3IiAvPgogICAgICA8ZwogICAgICAgICBpZD0iZzkiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMTEiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMTMiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMTUiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMTciIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMTkiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMjEiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMjMiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMjUiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMjciIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMjkiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMzEiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMzMiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMzUiIC8+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4K" /***/ }), /* 39 */ /***/ (function(module, exports) { -module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iOTAuOTU2cHgiIGhlaWdodD0iOTAuOTU3cHgiIHZpZXdCb3g9IjAgMCA5MC45NTYgOTAuOTU3IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA5MC45NTYgOTAuOTU3OyIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8cGF0aCBkPSJNNDEuNjYxLDEzLjUwMUgxMy45Nzl2NjMuOTUzaDI3LjY4MlYxMy41MDF6IE0zOC43OTcsNzQuNTkxSDE2Ljg0MlYxNi4zNjZoMjEuOTU1Vjc0LjU5MXogTTc2LjQ5OSwyNi43NDdINDguODE4djM3LjQ2NQoJCUg3Ni41TDc2LjQ5OSwyNi43NDdMNzYuNDk5LDI2Ljc0N3ogTTczLjYzNyw2MS4zNDdINTEuNjgyVjI5LjYwOWgyMS45NTVWNjEuMzQ3eiBNMTAuOTc4LDQyLjk3M3Y1LjAxMUgwdi01LjAxMUgxMC45Nzh6CgkJIE05MC45NTYsNDIuOTczdjUuMDExSDc5Ljk3OXYtNS4wMTFIOTAuOTU2eiIvPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+Cjwvc3ZnPgo=" +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iNzMuMDU4cHgiIGhlaWdodD0iNzMuMDU4cHgiIHZpZXdCb3g9IjAgMCA3My4wNTggNzMuMDU4IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA3My4wNTggNzMuMDU4OyIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8ZyBpZD0iRXllIj4KCQk8Zz4KCQkJPHBhdGggZD0iTTcyLjg5MywzNS45NjVjLTAuNTgtMC45MjUtMTQuNDMyLTIyLjU0MS0zNS4xNi0yMi41NDFoLTIuNDA2Yy0yMC43MjksMC0zNC41OCwyMS42MTYtMzUuMTU5LDIyLjU0MQoJCQkJYy0wLjIyMywwLjM0Ny0wLjIyMywwLjc5LDAsMS4xMzdjMC41NzksMC45MTcsMTQuNDMyLDIyLjUzMiwzNS4xNTksMjIuNTMyaDIuNDA2YzIwLjcyOSwwLDM0LjU4LTIxLjYxNSwzNS4xNTktMjIuNTMyCgkJCQlDNzMuMTEzLDM2Ljc1NSw3My4xMTMsMzYuMzEyLDcyLjg5MywzNS45NjV6IE00NS4yNjcsMzYuNTI5YzAsNC42OS0zLjkyLDguNTA2LTguNzM2LDguNTA2Yy00LjgxNywwLTguNzM1LTMuODEyLTguNzM1LTguNTA2CgkJCQljMC00LjY4NywzLjkxOC04LjUwOCw4LjczNS04LjUwOEM0MS4zNDcsMjguMDIyLDQ1LjI2NywzMS44NDQsNDUuMjY3LDM2LjUyOXoiLz4KCQk8L2c+Cgk8L2c+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPC9zdmc+Cg==" /***/ }), /* 40 */ /***/ (function(module, exports) { -module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iNzUuNDA2cHgiIGhlaWdodD0iNzUuNDA2cHgiIHZpZXdCb3g9IjAgMCA3NS40MDYgNzUuNDA2IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA3NS40MDYgNzUuNDA2OyIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8cGF0aCBkPSJNMzUuNDM2LDBINy43NTV2NjMuOTUyaDI3LjY4MkwzNS40MzYsMEwzNS40MzYsMHogTTMyLjU3Myw2MS4wODlIMTAuNjE4VjIuODYzaDIxLjk1NVY2MS4wODl6IE03MC4yNzQsMjYuNDg4aC0yNy42OAoJCXYzNy40NjRoMjcuNjgyVjI2LjQ4OEg3MC4yNzR6IE02Ny40MTIsNjEuMDg5SDQ1LjQ1N1YyOS4zNTFoMjEuOTU1VjYxLjA4OXogTTc0LjU3MSw3MC4zOTV2NS4wMTJIMC44MzV2LTUuMDEySDc0LjU3MXoiLz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K" +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4KCjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0iQ2FwYV8xIgogICB4PSIwcHgiCiAgIHk9IjBweCIKICAgd2lkdGg9IjQ3MS42MDhweCIKICAgaGVpZ2h0PSI0NzEuNjA4cHgiCiAgIHZpZXdCb3g9IjAgMCA0NzEuNjA4IDQ3MS42MDgiCiAgIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQ3MS42MDggNDcxLjYwODsiCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTEgcjEzNzI1IgogICBzb2RpcG9kaTpkb2NuYW1lPSJ1bmRvLnN2ZyI+PG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNDEiPjxyZGY6UkRGPjxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj48ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD48ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+PC9jYzpXb3JrPjwvcmRmOlJERj48L21ldGFkYXRhPjxkZWZzCiAgICAgaWQ9ImRlZnMzOSIgLz48c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEiCiAgICAgb2JqZWN0dG9sZXJhbmNlPSIxMCIKICAgICBncmlkdG9sZXJhbmNlPSIxMCIKICAgICBndWlkZXRvbGVyYW5jZT0iMTAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjEyMjkiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iODE2IgogICAgIGlkPSJuYW1lZHZpZXczNyIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgaW5rc2NhcGU6em9vbT0iMC41MDA0MTU2IgogICAgIGlua3NjYXBlOmN4PSIyMzUuODA0IgogICAgIGlua3NjYXBlOmN5PSIyMzUuODA0IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjAiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0iQ2FwYV8xIiAvPjxnCiAgICAgaWQ9ImczIj48cGF0aAogICAgICAgZD0ibSAzODQuNTM1MTksOTEuMDY3NzQ0IGMgLTgxLjQ1OTU0LC04MS40NTY4NzkxIC0yMTQuMDA4MDcsLTgxLjQ1Njg3OTEgLTI5NS40NjU4MjgsMCAtODEuNDU3NzY0MSw4MS40NTY4NzYgLTgxLjQ1Njg3ODEsMjE0LjAxMTYwNiAwLDI5NS40NjU4MjYgODEuNDU2ODY4LDgxLjQ1OTUzIDIxNC4wMDU0MDgsODEuNDU5NTMgMjk1LjQ2NTgyOCwwIDgxLjQ1OTUzLC04MS40NTMzNCA4MS40NTk1MywtMjE0LjAwMjc1IDAsLTI5NS40NjU4MjYgeiBNIDM2OC4zMjg4MywzNzAuMzM4NzIgYyAtNzIuNTE4NTksNzIuNTE4NTkgLTE5MC41MzYzLDcyLjUxODU5IC0yNjMuMDY2MzksMCAtNzIuNTE2ODE3LC03Mi41MzAwOSAtNzIuNTE2ODE3LC0xOTAuNTQyNSAwLC0yNjMuMDY3MjcgNzIuNTI5MiwtNzIuNTI2NTU5IDE5MC41MzYyOSwtNzIuNTI2NTU5IDI2My4wNjYzOSwwIDcyLjUyNTY3LDcyLjUyNDc3IDcyLjUyNTY3LDE5MC41MzcxOCAwLDI2My4wNjcyNyB6IG0gMTIuNDQzNDcsLTE5OC4xMjc2IC0xMS42MjA3Niw1Mi4zMjk3MSBjIC0wLjMxMzUsMS40NDcwNiAtMS43NDM3MywyLjM0NjgyIC0zLjE4MjgyLDIuMDM1OTggLTAuNDQwMTQsLTAuMDkzOSAtMTAuOTUwMzYsLTIuMzU4MzQgLTI2LjI5ODU4LC0yLjM1ODM0IC0yNS44ODk0NCwwIC03MS42MjQxMyw2Ljg1MTg0IC0xMDEuODMxNzIsNDkuNTUzMzggbCA2LjI5NjU2LDYuMjk2NTcgNzAuNTAzODYsMzAuNTU5MTcgYyAyLjM2NTQyLDEuMDM3MDMgMy43NTc1OCwzLjUwNjk1IDMuMzkxODMsNi4wNjcyIC0wLjM1MDcsMi41NDk2MiAtMi4zNjEsNC41NTQ2MSAtNC45MzA5OSw0Ljg3MzQyIGwgLTE3NS42MDUxOSwyMi45NTkwMSBjIC0xLjc1ODc5LDAuMjMwMjUgLTMuNTM4ODMsLTAuMzc3MjYgLTQuNzk3MjYsLTEuNjI3NzIgLTEuMjY2NCwtMS4yNjE5NyAtMS44NTUzMiwtMy4wMzY3IC0xLjYzNTY5LC00LjgwNjEyIGwgMjIuOTU5LC0xNzUuNjA3ODUgYyAwLjE2NDczLC0xLjI4NSAwLjc1MzY0LC0yLjQzNjI3IDEuNjIzMywtMy4zMDUwMyAwLjg1ODE0LC0wLjg1OTAzIDEuOTg5MDQsLTEuNDQ3OTUgMy4yNjM0MSwtMS42MzEyNyAyLjU0Njk3LC0wLjM1Nzc4IDUuMDE3NzcsMS4wMzcwMyA2LjA1MzkyLDMuMzk0NDggbCAzMC41NjcxNCw3MC41MDY1MiAwLjE1NzYzLDAuMTU3NjMgYyA0Ny4xNDE5MSwtNTkuNDAxMTcgMTE1LjQxNTg0LC02Ni40ODk0NiAxNDUuMDI4MzEsLTY2LjQ4OTQ2IDEzLjU0NjkzLDAgMjYuNjk2MjIsMS4zNDUyMiAzOC4wMjM4NCwzLjg4Njg3IDEuNDUzMjYsMC4zMzIxIDIuMzYzNjUsMS43NjMyMiAyLjAzNDIxLDMuMjA1ODUgeiIKICAgICAgIGlkPSJwYXRoNSIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PC9nPjxnCiAgICAgaWQ9Imc3IiAvPjxnCiAgICAgaWQ9Imc5IiAvPjxnCiAgICAgaWQ9ImcxMSIgLz48ZwogICAgIGlkPSJnMTMiIC8+PGcKICAgICBpZD0iZzE1IiAvPjxnCiAgICAgaWQ9ImcxNyIgLz48ZwogICAgIGlkPSJnMTkiIC8+PGcKICAgICBpZD0iZzIxIiAvPjxnCiAgICAgaWQ9ImcyMyIgLz48ZwogICAgIGlkPSJnMjUiIC8+PGcKICAgICBpZD0iZzI3IiAvPjxnCiAgICAgaWQ9ImcyOSIgLz48ZwogICAgIGlkPSJnMzEiIC8+PGcKICAgICBpZD0iZzMzIiAvPjxnCiAgICAgaWQ9ImczNSIgLz48L3N2Zz4=" /***/ }), /* 41 */ /***/ (function(module, exports) { -module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iNzUuNDA2cHgiIGhlaWdodD0iNzUuNDA2cHgiIHZpZXdCb3g9IjAgMCA3NS40MDYgNzUuNDA2IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA3NS40MDYgNzUuNDA2OyIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8cGF0aCBkPSJNNzUuNDA2LDM1LjQzNlY3Ljc1NUgxMS40NTR2MjcuNjgyTDc1LjQwNiwzNS40MzZMNzUuNDA2LDM1LjQzNnogTTE0LjMxNywzMi41NzNWMTAuNjE4aDU4LjIyNnYyMS45NTVIMTQuMzE3egoJCSBNNDguOTE4LDcwLjI3NVY0Mi41OTVIMTEuNDU0djI3LjY4Mkw0OC45MTgsNzAuMjc1TDQ4LjkxOCw3MC4yNzV6IE0xNC4zMTcsNjcuNDEyVjQ1LjQ1N2gzMS43Mzh2MjEuOTU1SDE0LjMxN3ogTTUuMDExLDc0LjU3MUgwCgkJVjAuODM1aDUuMDExVjc0LjU3MXoiLz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K" +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0naXNvLTg4NTktMSc/Pgo8c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0gIjQ0IiBoZWlnaHQ9ICI0NCIgdmlld0JveD0iMCAwIDQ0IDQ0IiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgNDQgNDQiPgogIDxjaXJjbGUgY3g9IjIyIiBjeT0iMjIiIHI9IjIyIiBmaWxsPSIjZmZmIi8+CiAgPHBhdGggZD0ibTIyLDBjLTEyLjIsMC0yMiw5LjgtMjIsMjJzOS44LDIyIDIyLDIyIDIyLTkuOCAyMi0yMi05LjgtMjItMjItMjJ6bS0xLjMsMTkuM2wtMS40LDEuNGMtMC40LDAuNC0xLDAuNC0xLjQsMGwtNC00Yy0wLjMtMC4zLTAuOS0wLjEtMC45LDAuNHYxYzAsMC42LTAuNCwxLTEsMWgtMmMtMC42LDAtMS0wLjQtMS0xdi04YzAtMC42IDAuNC0xIDEtMWg4YzAuNiwwIDEsMC40IDEsMXYyYzAsMC42LTAuNCwxLTEsMWgtMWMtMC40LDAtMC43LDAuNS0wLjQsMC45bDQsNGMwLjUsMC4zIDAuNSwwLjkgMC4xLDEuM3ptMTQuMywxNC43YzAsMC42LTAuNCwxLTEsMWgtOGMtMC42LDAtMS0wLjQtMS0xdi0yYzAtMC42IDAuNC0xIDEtMWgxYzAuNCwwIDAuNy0wLjUgMC40LTAuOWwtNC00Yy0wLjQtMC40LTAuNC0xIDAtMS40bDEuNC0xLjRjMC40LTAuNCAxLTAuNCAxLjQsMGw0LDRjMC4zLDAuMyAwLjksMC4xIDAuOS0wLjR2LTFjMC0wLjYgMC40LTEgMS0xaDJjMC42LDAgMSwwLjQgMSwxdjguMWgtMC4xeiIvPgo8L3N2Zz4K" /***/ }), /* 42 */ /***/ (function(module, exports) { -module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iOTAuOTU2cHgiIGhlaWdodD0iOTAuOTU2cHgiIHZpZXdCb3g9IjAgMCA5MC45NTYgOTAuOTU2IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA5MC45NTYgOTAuOTU2OyIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8cGF0aCBkPSJNNzcuNDU0LDQxLjY2MVYxMy45NzlIMTMuNTAydjI3LjY4Mkg3Ny40NTR6IE0xNi4zNjUsMzguNzk3VjE2Ljg0Mmg1OC4yMjZ2MjEuOTU1SDE2LjM2NXogTTY0LjIxLDc2LjQ5OVY0OC44MThIMjYuNzQ2CgkJVjc2LjVMNjQuMjEsNzYuNDk5TDY0LjIxLDc2LjQ5OXogTTI5LjYwOSw3My42MzdWNTEuNjgyaDMxLjczN3YyMS45NTVIMjkuNjA5eiBNNDcuOTgyLDEwLjk3OGgtNS4wMVYwaDUuMDFWMTAuOTc4egoJCSBNNDcuOTgyLDkwLjk1NmgtNS4wMVY3OS45NzloNS4wMVY5MC45NTZ6Ii8+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPC9zdmc+Cg==" +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iMTc0IgogICBoZWlnaHQ9IjQ3Ljg4NzMxIgogICB2aWV3Qm94PSIwIDAgMTYzLjEyNSA0NC44OTQzNTQiCiAgIGlkPSJzdmc0Mzk5IgogICB2ZXJzaW9uPSIxLjEiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTIuMSByMTUzNzEiCiAgIHNvZGlwb2RpOmRvY25hbWU9ImNvbXBhcnRtZW50LnN2ZyI+CiAgPGRlZnMKICAgICBpZD0iZGVmczQ0MDEiIC8+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjEuNCIKICAgICBpbmtzY2FwZTpjeD0iNTcuNTQ1NjA4IgogICAgIGlua3NjYXBlOmN5PSI5NS4yMzMzOTkiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB4IgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgZml0LW1hcmdpbi10b3A9IjAiCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIgogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiCiAgICAgZml0LW1hcmdpbi1ib3R0b209IjAiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciCiAgICAgaW5rc2NhcGU6d2luZG93LXg9Ii04IgogICAgIGlua3NjYXBlOndpbmRvdy15PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIHVuaXRzPSJweCIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE0NDA0Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjc0LjQ1MDM1LC0zMTYuMDU0MzYpIj4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDo2LjgyOTY5OTA0O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGlkPSJyZWN0Mjk4NSIKICAgICAgIHdpZHRoPSIxNTYuMjk1MyIKICAgICAgIGhlaWdodD0iMzguMDY0NjU1IgogICAgICAgeD0iMjc3Ljg2NTIiCiAgICAgICB5PSIzMTkuNDY5MjEiCiAgICAgICByeT0iOS44MjMxMjExIgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjUzLjk1OTk5OSIKICAgICAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSI1My45NTk5OTkiCiAgICAgICBpbmtzY2FwZTpleHBvcnQtZmlsZW5hbWU9IkM6XFVzZXJzXHVndXJcR29vZ2xlIERyaXZlXHRvb2xiYXJcbWFjcm9tb2xlY3VsZS5wbmciIC8+CiAgICA8dGV4dAogICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIKICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjI4LjEyNXB4O2xpbmUtaGVpZ2h0OjEyNSU7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuOTM3NXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICB4PSIzMDMuODM1MTEiCiAgICAgICB5PSIzNDIuNTQ0NDkiCiAgICAgICBpZD0idGV4dDgxOCI+PHRzcGFuCiAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiCiAgICAgICAgIGlkPSJ0c3BhbjgxNiIKICAgICAgICAgeD0iMzAzLjgzNTExIgogICAgICAgICB5PSIzNDIuNTQ0NDkiCiAgICAgICAgIHN0eWxlPSJmb250LXNpemU6MTVweDtzdHJva2Utd2lkdGg6MC45Mzc1cHgiPkNvbXBhcnRtZW50PC90c3Bhbj48L3RleHQ+CiAgPC9nPgo8L3N2Zz4K" /***/ }), /* 43 */ /***/ (function(module, exports) { -module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iNzUuNDA2cHgiIGhlaWdodD0iNzUuNDA2cHgiIHZpZXdCb3g9IjAgMCA3NS40MDYgNzUuNDA2IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA3NS40MDYgNzUuNDA2OyIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8cGF0aCBkPSJNNjMuOTUyLDM1LjQzNlY3Ljc1NUgwdjI3LjY4Mkw2My45NTIsMzUuNDM2TDYzLjk1MiwzNS40MzZ6IE0yLjg2MywzMi41NzNWMTAuNjE4SDYxLjA5djIxLjk1NUgyLjg2M3ogTTYzLjk1Miw3MC4yNzUKCQlWNDIuNTk1SDI2LjQ4OHYyNy42ODJMNjMuOTUyLDcwLjI3NUw2My45NTIsNzAuMjc1eiBNMjkuMzUxLDY3LjQxMlY0NS40NTdoMzEuNzM3djIxLjk1NUgyOS4zNTF6IE03MC4zOTUsMC44MzVoNS4wMTJ2NzMuNzM2CgkJaC01LjAxMlYwLjgzNXoiLz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K" +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iMTc0IgogICBoZWlnaHQ9IjQ0LjQ0MjgyMiIKICAgdmlld0JveD0iMCAwIDE2My4xMjUgNDEuNjY1MTQ2IgogICBpZD0ic3ZnNDM5OSIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIgogICBzb2RpcG9kaTpkb2NuYW1lPSJjb21wbGV4LnN2ZyI+CiAgPGRlZnMKICAgICBpZD0iZGVmczQ0MDEiIC8+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjEuNCIKICAgICBpbmtzY2FwZTpjeD0iNTUuODIzMzUzIgogICAgIGlua3NjYXBlOmN5PSI5My41MTExNjYiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB4IgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgZml0LW1hcmdpbi10b3A9IjAiCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIgogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiCiAgICAgZml0LW1hcmdpbi1ib3R0b209IjAiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciCiAgICAgaW5rc2NhcGU6d2luZG93LXg9Ii04IgogICAgIGlua3NjYXBlOndpbmRvdy15PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIHVuaXRzPSJweCIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE0NDA0Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjc2LjA2NDk3LC0zMTcuNjY4OTcpIj4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozLjIzMTI2OTg0O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGlkPSJyZWN0Mjk4NSIKICAgICAgIHdpZHRoPSIxNTkuODkzNzQiCiAgICAgICBoZWlnaHQ9IjM4LjQzMzg3NiIKICAgICAgIHg9IjI3Ny42ODA2IgogICAgICAgeT0iMzE5LjI4NDYxIgogICAgICAgcnk9IjAiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iNTMuOTU5OTk5IgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjUzLjk1OTk5OSIKICAgICAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iQzpcVXNlcnNcdWd1clxHb29nbGUgRHJpdmVcdG9vbGJhclxtYWNyb21vbGVjdWxlLnBuZyIgLz4KICAgIDx0ZXh0CiAgICAgICB4bWw6c3BhY2U9InByZXNlcnZlIgogICAgICAgc3R5bGU9ImZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXNpemU6MjguMTI1cHg7bGluZS1oZWlnaHQ6MTI1JTtmb250LWZhbWlseTpzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC45Mzc1cHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIHg9IjMyNC43MTYwOSIKICAgICAgIHk9IjM0Mi42OTEwMSIKICAgICAgIGlkPSJ0ZXh0ODE4Ij48dHNwYW4KICAgICAgICAgc29kaXBvZGk6cm9sZT0ibGluZSIKICAgICAgICAgaWQ9InRzcGFuODE2IgogICAgICAgICB4PSIzMjQuNzE2MDkiCiAgICAgICAgIHk9IjM0Mi42OTEwMSIKICAgICAgICAgc3R5bGU9ImZvbnQtc2l6ZToxNXB4O3N0cm9rZS13aWR0aDowLjkzNzVweCI+Q29tcGxleDwvdHNwYW4+PC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==" /***/ }), /* 44 */ /***/ (function(module, exports) { -module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iNTQxLjkxMXB4IiBoZWlnaHQ9IjU0MS45MTFweCIgdmlld0JveD0iMCAwIDU0MS45MTEgNTQxLjkxMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTQxLjkxMSA1NDEuOTExOyIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8cGF0aCBkPSJNNDY3LjgyNiw4Ljc4MXY0Ny40NTFINzQuMDkxVjguNzgxYzAtNC42MDgtMy43MjktOC4zMzQtOC4zMzQtOC4zMzRjLTQuNjA3LDAtOC4zMzQsMy43MjctOC4zMzQsOC4zMzR2NDkuMDY4SDguMzM0CgkJQzMuNzMsNTcuODQ5LDAsNjEuNTg0LDAsNjYuMTgzYzAsNC42MDcsMy43Myw4LjMzNCw4LjMzNCw4LjMzNGg0OS4wODN2MzkyLjg2OEg4LjMzNGMtNC42MDQsMC04LjMzNCwzLjcyOS04LjMzNCw4LjMzNAoJCWMwLDQuNjEsMy43Myw4LjMzNCw4LjMzNCw4LjMzNGg0OS4wODN2NDkuMDc3YzAsNC42MDQsMy43MjcsOC4zMzQsOC4zMzQsOC4zMzRjNC42MDQsMCw4LjMzNC0zLjcyOSw4LjMzNC04LjMzNHYtNDkuMDc3aDM5My43NAoJCXY0OS4wNzdjMCw0LjYwNCwzLjcyOSw4LjMzNCw4LjMzNCw4LjMzNGM0LjYxLDAsOC4zMzQtMy43MjksOC4zMzQtOC4zMzR2LTQ5LjA3N2g0OS4wODNjNC42MDQsMCw4LjMzNC0zLjcyNCw4LjMzNC04LjMzNAoJCWMwLTQuNjA0LTMuNzI5LTguMzM0LTguMzM0LTguMzM0aC00OC4zMzJWNzQuNTE3aDQ4LjMzMmM0LjYwNCwwLDguMzM0LTMuNzI3LDguMzM0LTguMzM0YzAtNC41OTktMy43MjktOC4zMzQtOC4zMzQtOC4zMzRoLTQ5LjA4MwoJCVY4Ljc4MWMwLTQuNjA4LTMuNzI0LTguMzM0LTguMzM0LTguMzM0QzQ3MS41NTUsMC40NDYsNDY3LjgyNiw0LjE3Myw0NjcuODI2LDguNzgxeiBNNDY4LjIwNCwzNDAuNTI4djEyNi44NTdIMzQwLjQxM1YzNDAuNTI4CgkJSDQ2OC4yMDR6IE0zMzQuODU3LDM0MC41Mjh2MTI2Ljg1N0gyMDcuNDM2VjM0MC41MjhIMzM0Ljg1N3ogTTIwMS41MDQsMzQwLjUyOHYxMjYuODU3SDc0LjA5MVYzNDAuNTI4SDIwMS41MDR6IE00NjguMjA0LDIwNy4xNzIKCQl2MTI3LjhIMzQwLjQxM3YtMTI3LjhINDY4LjIwNHogTTMzNC44NTcsMjA3LjE3MnYxMjcuOEgyMDcuNDM2di0xMjcuOEgzMzQuODU3eiBNMjAxLjUwNCwyMDcuMTcydjEyNy44SDc0LjA5MXYtMTI3LjhIMjAxLjUwNHoKCQkgTTQ2OC4yMDQsNzMuODI5djEyNy43ODhIMzQwLjQxM1Y3My44MjlINDY4LjIwNHogTTMzNC44NTcsNzMuODI5djEyNy43ODhIMjA3LjQzNlY3My44MjlIMzM0Ljg1N3ogTTIwMS41MDQsNzMuODI5djEyNy43ODgKCQlINzQuMDkxVjczLjgyOUgyMDEuNTA0eiBNMzIzLjQxNCw4My44ODVWMTg4Ljc5SDIxOC41MDZWODMuODg1SDMyMy40MTR6Ii8+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPC9zdmc+Cg==" +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iMTczLjk5OTM3IgogICBoZWlnaHQ9IjQ1LjA4MjAwMSIKICAgdmlld0JveD0iMCAwIDE2My4xMjQ0MiA0Mi4yNjQzNzYiCiAgIGlkPSJzdmc0Mzk5IgogICB2ZXJzaW9uPSIxLjEiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTIuMSByMTUzNzEiCiAgIHNvZGlwb2RpOmRvY25hbWU9ImZhbWlseS5zdmciPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0NDAxIiAvPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSIxLjQiCiAgICAgaW5rc2NhcGU6Y3g9IjE3MS44OTQ3NyIKICAgICBpbmtzY2FwZTpjeT0iOTMuNTExMTkyIgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGZpdC1tYXJnaW4tdG9wPSIwIgogICAgIGZpdC1tYXJnaW4tbGVmdD0iMCIKICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIwIgogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDE3IgogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIKICAgICB1bml0cz0icHgiIC8+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNDQwNCI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGU+PC9kYzp0aXRsZT4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTI3Ni4wNjQ5OCwtMzE3LjA2OTc3KSI+CiAgICA8cmVjdAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzkzOTM5MztzdHJva2Utd2lkdGg6My4yNTUxMTgzNztzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBpZD0icmVjdDI5ODUiCiAgICAgICB3aWR0aD0iMTU5Ljg2OTI5IgogICAgICAgaGVpZ2h0PSIzOS4wMDkyNTgiCiAgICAgICB4PSIyNzcuNjkyNTQiCiAgICAgICB5PSIzMTguNjk3MzMiCiAgICAgICByeT0iMCIKICAgICAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSI1My45NTk5OTkiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iNTMuOTU5OTk5IgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LWZpbGVuYW1lPSJDOlxVc2Vyc1x1Z3VyXEdvb2dsZSBEcml2ZVx0b29sYmFyXG1hY3JvbW9sZWN1bGUucG5nIiAvPgogICAgPHRleHQKICAgICAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgICAgICBzdHlsZT0iZm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc2l6ZToyOC4xMjVweDtsaW5lLWhlaWdodDoxMjUlO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6MHB4O3dvcmQtc3BhY2luZzowcHg7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjkzNzVweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgeD0iMzMyLjg2MDMyIgogICAgICAgeT0iMzQyLjM5MTQyIgogICAgICAgaWQ9InRleHQ4MTgiPjx0c3BhbgogICAgICAgICBzb2RpcG9kaTpyb2xlPSJsaW5lIgogICAgICAgICBpZD0idHNwYW44MTYiCiAgICAgICAgIHg9IjMzMi44NjAzMiIKICAgICAgICAgeT0iMzQyLjM5MTQyIgogICAgICAgICBzdHlsZT0iZm9udC1zaXplOjE1cHg7c3Ryb2tlLXdpZHRoOjAuOTM3NXB4Ij5GYW1pbHk8L3RzcGFuPjwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo=" /***/ }), /* 45 */ /***/ (function(module, exports) { -module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iNDE4cHgiIGhlaWdodD0iNDE4cHgiIHZpZXdCb3g9IjAgMCA0MTggNDE4IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA0MTggNDE4OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxnPgoJPGc+CgkJPGc+CgkJCTxwYXRoIGQ9Ik05MS42MDYsMTQzLjcwM2MtMy4xNDYtMy4xNDYtNy44NzctNC4wODctMTEuOTg4LTIuMzg1Yy00LjExLDEuNzAzLTYuNzksNS43MTQtNi43OSwxMC4xNjN2MTE1LjAzNwoJCQkJYzAsNC40NDksMi42OCw4LjQ2MSw2Ljc5LDEwLjE2NGMxLjM2MSwwLjU2MywyLjc5LDAuODM2LDQuMjA4LDAuODM2YzIuODYyLDAsNS42NzYtMS4xMTYsNy43OC0zLjIyMmw1Ny41Mi01Ny41MTkKCQkJCWMyLjA2My0yLjA2MywzLjIyMi00Ljg2MSwzLjIyMi03Ljc3OHMtMS4xNTktNS43MTYtMy4yMjItNy43NzhMOTEuNjA2LDE0My43MDN6Ii8+CgkJCTxwYXRoIGQ9Ik0zMzguMzgyLDE0MS4zMThjLTQuMTA3LTEuNy04Ljg0MS0wLjc2My0xMS45ODcsMi4zODVsLTU3LjUyMSw1Ny41MTljLTIuMDYyLDIuMDYzLTMuMjIyLDQuODYxLTMuMjIyLDcuNzc4CgkJCQlzMS4xNTgsNS43MTYsMy4yMjIsNy43NzdsNTcuNTIxLDU3LjUyYzIuMTA0LDIuMTA0LDQuOTE4LDMuMjIzLDcuNzc5LDMuMjIzYzEuNDE3LDAsMi44NDgtMC4yNzIsNC4yMDgtMC44MzgKCQkJCWM0LjExLTEuNzAzLDYuNzktNS43MTQsNi43OS0xMC4xNjJWMTUxLjQ4MUMzNDUuMTcyLDE0Ny4wMzIsMzQyLjQ5MiwxNDMuMDIxLDMzOC4zODIsMTQxLjMxOHoiLz4KCQkJPHBhdGggZD0iTTIxMiwwaC02Yy02LjA3NSwwLTExLDQuOTI1LTExLDExdjM1YzAsNi4wNzUsNC45MjUsMTEsMTEsMTFoNmM2LjA3NSwwLDExLTQuOTI1LDExLTExVjExQzIyMyw0LjkyNSwyMTguMDc1LDAsMjEyLDB6IgoJCQkJLz4KCQkJPHBhdGggZD0iTTIxMiw5NS4zNTJoLTZjLTYuMDc1LDAtMTEsNC45MjUtMTEsMTF2NzIuNDczYzAsNi4wNzUsNC45MjUsMTEsMTEsMTFoNmM2LjA3NSwwLDExLTQuOTI1LDExLTExdi03Mi40NzMKCQkJCUMyMjMsMTAwLjI3NiwyMTguMDc1LDk1LjM1MiwyMTIsOTUuMzUyeiIvPgoJCQk8cGF0aCBkPSJNMjEyLDIyOC4xNzZoLTZjLTYuMDc1LDAtMTEsNC45MjYtMTEsMTF2NzIuNDc0YzAsNi4wNzUsNC45MjUsMTEsMTEsMTFoNmM2LjA3NSwwLDExLTQuOTI1LDExLTExdi03Mi40NzQKCQkJCUMyMjMsMjMzLjEwMiwyMTguMDc1LDIyOC4xNzYsMjEyLDIyOC4xNzZ6Ii8+CgkJCTxwYXRoIGQ9Ik0yMTIsMzYxaC02Yy02LjA3NSwwLTExLDQuOTI1LTExLDExdjM1YzAsNi4wNzUsNC45MjUsMTEsMTEsMTFoNmM2LjA3NSwwLDExLTQuOTI1LDExLTExdi0zNQoJCQkJQzIyMywzNjUuOTI1LDIxOC4wNzUsMzYxLDIxMiwzNjF6Ii8+CgkJPC9nPgoJPC9nPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+Cjwvc3ZnPgo=" +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iMTc0IgogICBoZWlnaHQ9IjQ0LjQ0MjgyMiIKICAgdmlld0JveD0iMCAwIDE2My4xMjUgNDEuNjY1MTQ2IgogICBpZD0ic3ZnNDM5OSIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIgogICBzb2RpcG9kaTpkb2NuYW1lPSJnZW5lLnN2ZyI+CiAgPGRlZnMKICAgICBpZD0iZGVmczQ0MDEiIC8+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjEuNCIKICAgICBpbmtzY2FwZTpjeD0iNTUuODIzMzUzIgogICAgIGlua3NjYXBlOmN5PSI5My41MTExNjYiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB4IgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgZml0LW1hcmdpbi10b3A9IjAiCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIgogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiCiAgICAgZml0LW1hcmdpbi1ib3R0b209IjAiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciCiAgICAgaW5rc2NhcGU6d2luZG93LXg9Ii04IgogICAgIGlua3NjYXBlOndpbmRvdy15PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIHVuaXRzPSJweCIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE0NDA0Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjc2LjA2NDk3LC0zMTcuNjY4OTcpIj4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozLjIzMTI2OTg0O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGlkPSJyZWN0Mjk4NSIKICAgICAgIHdpZHRoPSIxNTkuODkzNzQiCiAgICAgICBoZWlnaHQ9IjM4LjQzMzg3NiIKICAgICAgIHg9IjI3Ny42ODA2IgogICAgICAgeT0iMzE5LjI4NDYxIgogICAgICAgcnk9IjkuOTE4NDAzNiIKICAgICAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSI1My45NTk5OTkiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iNTMuOTU5OTk5IgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LWZpbGVuYW1lPSJDOlxVc2Vyc1x1Z3VyXEdvb2dsZSBEcml2ZVx0b29sYmFyXG1hY3JvbW9sZWN1bGUucG5nIiAvPgogICAgPHRleHQKICAgICAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgICAgICBzdHlsZT0iZm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc2l6ZToyOC4xMjVweDtsaW5lLWhlaWdodDoxMjUlO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6MHB4O3dvcmQtc3BhY2luZzowcHg7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjkzNzVweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgeD0iMzM4LjA3NTQ3IgogICAgICAgeT0iMzQzLjk0NzExIgogICAgICAgaWQ9InRleHQ4MTgiPjx0c3BhbgogICAgICAgICBzb2RpcG9kaTpyb2xlPSJsaW5lIgogICAgICAgICBpZD0idHNwYW44MTYiCiAgICAgICAgIHg9IjMzOC4wNzU0NyIKICAgICAgICAgeT0iMzQzLjk0NzExIgogICAgICAgICBzdHlsZT0iZm9udC1zaXplOjE1cHg7c3Ryb2tlLXdpZHRoOjAuOTM3NXB4Ij5HZW5lPC90c3Bhbj48L3RleHQ+CiAgPC9nPgo8L3N2Zz4K" /***/ }), /* 46 */ /***/ (function(module, exports) { -module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iNDk3LjE5OXB4IiBoZWlnaHQ9IjQ5Ny4xOTlweCIgdmlld0JveD0iMCAwIDQ5Ny4xOTkgNDk3LjE5OSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDk3LjE5OSA0OTcuMTk5OyIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8cGF0aCBkPSJNMTkxLjIsMjQ4LjZjMC0xNS4zLDUuNy0yOC43LDE3LjItNDAuMnMyNC45LTE3LjIsNDAuMi0xNy4yTDE5MS4yLDI0OC42eiBNMTc0LDI2NS44Yy0xLjktNS43LTEuOS0xMS41LTEuOS0xNy4yCgkJYzAtNDIuMSwzNC40LTc2LjUsNzYuNS03Ni41YzUuNzAxLDAsMTEuNSwwLDE3LjIwMSwxLjlsNTEuNi01MS42Yy0yMS01LjctNDQtNy43LTY4LjktNy43Qzc2LjUsMTE0LjcsMCwyNDguNiwwLDI0OC42CgkJczMwLjYsNTMuNSw5Ny41LDkzLjdMMTc0LDI2NS44eiBNMzA2LDI0OC42TDI0OC42LDMwNmMxNS4zLDAsMjguNzAxLTUuNyw0MC4yMDEtMTcuMkMzMDAuMTk5LDI3Ny4zLDMwNiwyNjMuODk5LDMwNiwyNDguNnoKCQkgTTM5OS42OTksMTU0Ljg5OWwtNzYuNSw3Ni41YzEuOSw1LjcsMS45LDExLjUsMS45LDE3LjJjMCw0Mi4xLTM0LjQsNzYuNS03Ni41LDc2LjVjLTUuNywwLTExLjUsMC0xNy4yLTEuOUwxNzkuOCwzNzQuOAoJCWMyMSw1LjcsNDQsNy42LDY4LjgsNy42YzE3Mi4wOTksMCwyNDguNTk5LTEzMy45LDI0OC41OTktMTMzLjlTNDY2LjYsMTk1LjEsMzk5LjY5OSwxNTQuODk5eiBNNDAxLjQsNzYuODk5bC0zMjQuNSwzMjQuNQoJCWwxOC45LDE4LjlMNDIwLjQsOTUuN0w0MDEuNCw3Ni44OTl6Ii8+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPC9zdmc+Cg==" +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iMTc0IgogICBoZWlnaHQ9IjQ0LjQ0MjgyMiIKICAgdmlld0JveD0iMCAwIDE2My4xMjUgNDEuNjY1MTQ2IgogICBpZD0ic3ZnNDM5OSIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIgogICBzb2RpcG9kaTpkb2NuYW1lPSJwcm9jZXNzLnN2ZyI+CiAgPGRlZnMKICAgICBpZD0iZGVmczQ0MDEiIC8+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjEuNCIKICAgICBpbmtzY2FwZTpjeD0iLTYwLjI0ODA3NiIKICAgICBpbmtzY2FwZTpjeT0iOTMuNTExMTY2IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGZpdC1tYXJnaW4tdG9wPSIwIgogICAgIGZpdC1tYXJnaW4tbGVmdD0iMCIKICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIwIgogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDE3IgogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIKICAgICB1bml0cz0icHgiIC8+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNDQwNCI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGU+PC9kYzp0aXRsZT4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTI3Ni4wNjQ5NywtMzE3LjY2ODk3KSI+CiAgICA8dGV4dAogICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIKICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjI4LjEyNXB4O2xpbmUtaGVpZ2h0OjEyNSU7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuOTM3NXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICB4PSIzMjguNzE1MTIiCiAgICAgICB5PSIzNDMuODQwOTEiCiAgICAgICBpZD0idGV4dDgxOCI+PHRzcGFuCiAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiCiAgICAgICAgIGlkPSJ0c3BhbjgxNiIKICAgICAgICAgeD0iMzI4LjcxNTEyIgogICAgICAgICB5PSIzNDMuODQwOTEiCiAgICAgICAgIHN0eWxlPSJmb250LXNpemU6MTVweDtzdHJva2Utd2lkdGg6MC45Mzc1cHgiPlByb2Nlc3M8L3RzcGFuPjwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo=" /***/ }), /* 47 */ /***/ (function(module, exports) { -module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iNzMuMDU4cHgiIGhlaWdodD0iNzMuMDU4cHgiIHZpZXdCb3g9IjAgMCA3My4wNTggNzMuMDU4IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA3My4wNTggNzMuMDU4OyIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8ZyBpZD0iRXllIj4KCQk8Zz4KCQkJPHBhdGggZD0iTTcyLjg5MywzNS45NjVjLTAuNTgtMC45MjUtMTQuNDMyLTIyLjU0MS0zNS4xNi0yMi41NDFoLTIuNDA2Yy0yMC43MjksMC0zNC41OCwyMS42MTYtMzUuMTU5LDIyLjU0MQoJCQkJYy0wLjIyMywwLjM0Ny0wLjIyMywwLjc5LDAsMS4xMzdjMC41NzksMC45MTcsMTQuNDMyLDIyLjUzMiwzNS4xNTksMjIuNTMyaDIuNDA2YzIwLjcyOSwwLDM0LjU4LTIxLjYxNSwzNS4xNTktMjIuNTMyCgkJCQlDNzMuMTEzLDM2Ljc1NSw3My4xMTMsMzYuMzEyLDcyLjg5MywzNS45NjV6IE00NS4yNjcsMzYuNTI5YzAsNC42OS0zLjkyLDguNTA2LTguNzM2LDguNTA2Yy00LjgxNywwLTguNzM1LTMuODEyLTguNzM1LTguNTA2CgkJCQljMC00LjY4NywzLjkxOC04LjUwOCw4LjczNS04LjUwOEM0MS4zNDcsMjguMDIyLDQ1LjI2NywzMS44NDQsNDUuMjY3LDM2LjUyOXoiLz4KCQk8L2c+Cgk8L2c+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPC9zdmc+Cg==" +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iNjUiCiAgIGhlaWdodD0iMTkuNzg3MjE4IgogICBpZD0ic3ZnMiIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIgogICBzb2RpcG9kaTpkb2NuYW1lPSJhY3RpdmF0ZXMuc3ZnIgogICBpbmtzY2FwZTpleHBvcnQtZmlsZW5hbWU9IkM6XFVzZXJzXHVndXJcRGVza3RvcFxpbnRlcmFjdGlvbi1sZWdlbmQuMjAxNi4wNC4wMS5wbmciCiAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSIzMDAiCiAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSIzMDAiCiAgIHZpZXdCb3g9IjAgMCA2MC45Mzc1MDEgMTguNTUwNTE2Ij4KICA8ZGVmcwogICAgIGlkPSJkZWZzNCI+CiAgICA8bWFya2VyCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJUcmlhbmdsZU91dEwiCiAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgICByZWZZPSIwIgogICAgICAgcmVmWD0iMCIKICAgICAgIGlkPSJtYXJrZXIxMjAyIgogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiCiAgICAgICBpbmtzY2FwZTppc3N0b2NrPSJ0cnVlIj4KICAgICAgPHBhdGgKICAgICAgICAgaWQ9InBhdGgxMjAwIgogICAgICAgICBkPSJNIDUuNzcsMCAtMi44OCw1IFYgLTUgWiIKICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS4wMDAwMDAwM3B0O3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMC44KSIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgIDwvbWFya2VyPgogICAgPG1hcmtlcgogICAgICAgaW5rc2NhcGU6c3RvY2tpZD0iVHJpYW5nbGVPdXRMIgogICAgICAgb3JpZW50PSJhdXRvIgogICAgICAgcmVmWT0iMCIKICAgICAgIHJlZlg9IjAiCiAgICAgICBpZD0iVHJpYW5nbGVPdXRMIgogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiCiAgICAgICBpbmtzY2FwZTppc3N0b2NrPSJ0cnVlIj4KICAgICAgPHBhdGgKICAgICAgICAgaWQ9InBhdGg5NTkiCiAgICAgICAgIGQ9Ik0gNS43NywwIC0yLjg4LDUgViAtNSBaIgogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjAwMDAwMDAzcHQ7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgwLjgpIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPC9tYXJrZXI+CiAgPC9kZWZzPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSI3LjkxOTU5NTkiCiAgICAgaW5rc2NhcGU6Y3g9Ii00LjgxMTAzNTciCiAgICAgaW5rc2NhcGU6Y3k9IjE4LjQ2ODYyMSIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTAxNyIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04IgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiCiAgICAgZml0LW1hcmdpbi10b3A9IjAiCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIgogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiCiAgICAgZml0LW1hcmdpbi1ib3R0b209IjAiIC8+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNyI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGUgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTI3NS42NDI0NywtMjgxLjI5NjQ5KSI+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6My43NDk5OTk5MztzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJtIDI3NS42NDI0NywyOTAuNTcxNzUgaCA0Ny4zNTA4OSIKICAgICAgIGlkPSJwYXRoNDk0OSIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgPHBhdGgKICAgICAgIHNvZGlwb2RpOnR5cGU9InN0YXIiCiAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6My43NTtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTtwYWludC1vcmRlcjpmaWxsIG1hcmtlcnMgc3Ryb2tlIgogICAgICAgaWQ9InBhdGg0OTUzIgogICAgICAgc29kaXBvZGk6c2lkZXM9IjMiCiAgICAgICBzb2RpcG9kaTpjeD0iMjEyLjQyOTAyIgogICAgICAgc29kaXBvZGk6Y3k9IjI1My43OTgyNiIKICAgICAgIHNvZGlwb2RpOnIxPSIxMS4wNTczNDciCiAgICAgICBzb2RpcG9kaTpyMj0iNS41Mjg2NzM2IgogICAgICAgc29kaXBvZGk6YXJnMT0iMC45MTQ0NDc5NiIKICAgICAgIHNvZGlwb2RpOmFyZzI9IjEuOTYxNjQ1NSIKICAgICAgIGlua3NjYXBlOmZsYXRzaWRlZD0idHJ1ZSIKICAgICAgIGlua3NjYXBlOnJvdW5kZWQ9IjAiCiAgICAgICBpbmtzY2FwZTpyYW5kb21pemVkPSIwIgogICAgICAgZD0ibSAyMTkuMTc2NTIsMjYyLjU1ODE4IC0xNy43MDc1NywtNy4yOTYzNyAxNS4xNzI2MiwtMTEuNjg3MDEgeiIKICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteD0iLTIuNjk0NjIxOSIKICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteT0iMC4wNzg0ODk2NTMiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjM5NDM0MDk4LDAuODk5Nzc1MDQsLTAuOTE4OTY0MTksMC4zODYxMDY2Myw0NzQuOTg1ODMsMS4zNjE3MzI5KSIgLz4KICA8L2c+Cjwvc3ZnPgo=" /***/ }), /* 48 */ /***/ (function(module, exports) { -module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iMjYuNjMzOTQybW0iCiAgIGhlaWdodD0iMjYuNjIyNzY1bW0iCiAgIHZpZXdCb3g9IjAgMCAyNi42MzM5NDIgMjYuNjIyNzY1IgogICB2ZXJzaW9uPSIxLjEiCiAgIGlkPSJzdmc4IgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIgogICBzb2RpcG9kaTpkb2NuYW1lPSJwb3J0YWwuc3ZnIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzMiI+CiAgICA8Y2xpcFBhdGgKICAgICAgIGlkPSJjbGlwUGF0aDUwMDgiCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNTAwNiIKICAgICAgICAgZD0iTSAwLDAgSCAzMTIuMDQzIFYgNzQuNDQ4MiBIIDAgWiIgLz4KICAgIDwvY2xpcFBhdGg+CiAgICA8Y2xpcFBhdGgKICAgICAgIGlkPSJjbGlwUGF0aDUwMTYiCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNTAxNCIKICAgICAgICAgZD0iTSAwLDc0LjQ0OCBIIDMxMi4wNDMgViAwIEggMCBaIiAvPgogICAgPC9jbGlwUGF0aD4KICAgIDxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoNTExMiIKICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg1MTEwIgogICAgICAgICBkPSJNIDAsMCBIIDMxMi4wNDMgViA3NC40NDgyIEggMCBaIiAvPgogICAgPC9jbGlwUGF0aD4KICAgIDxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoNTEyMCIKICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg1MTE4IgogICAgICAgICBkPSJNIDAsNzQuNDQ4IEggMzEyLjA0MyBWIDAgSCAwIFoiIC8+CiAgICA8L2NsaXBQYXRoPgogICAgPGNsaXBQYXRoCiAgICAgICBpZD0iY2xpcFBhdGg1MzMyIgogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDUzMzAiCiAgICAgICAgIGQ9Ik0gMCw3NC40NDggSCAzMTIuMDQzIFYgMCBIIDAgWiIgLz4KICAgIDwvY2xpcFBhdGg+CiAgPC9kZWZzPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSIxLjk3OTg5OSIKICAgICBpbmtzY2FwZTpjeD0iNTUuNTM1Njg4IgogICAgIGlua3NjYXBlOmN5PSItNTEuMDYwODE5IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJtbSIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDE3IgogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIKICAgICBmaXQtbWFyZ2luLXRvcD0iMCIKICAgICBmaXQtbWFyZ2luLWxlZnQ9IjAiCiAgICAgZml0LW1hcmdpbi1yaWdodD0iMCIKICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMCIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE1Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNDcuNDExNjExLC04OS4yODgwNCkiPgogICAgPHJlY3QKICAgICAgIHJ5PSIwIgogICAgICAgeT0iOTYuMTU3Mzc5IgogICAgICAgeD0iNjEuMTYxNDcyIgogICAgICAgaGVpZ2h0PSI1Ljk5OTk5OTUiCiAgICAgICB3aWR0aD0iNS45OTk5OTk1IgogICAgICAgaWQ9InJlY3Q1NTA0IgogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNzQ1MDk4MDU7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuNTU0MDg2MzM7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4KICAgIDxyZWN0CiAgICAgICByeT0iMCIKICAgICAgIHk9IjEwMy4wMjY3MyIKICAgICAgIHg9IjU0LjI5MjEyMiIKICAgICAgIGhlaWdodD0iNS45OTk5OTk1IgogICAgICAgd2lkdGg9IjUuOTk5OTk5NSIKICAgICAgIGlkPSJyZWN0NTUwNC0zIgogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNzQ1MDk4MDU7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuNTU0MDg2MzM7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4KICAgIDxyZWN0CiAgICAgICByeT0iMCIKICAgICAgIHk9Ijg5LjI4ODA0IgogICAgICAgeD0iNjguMDMwODIzIgogICAgICAgaGVpZ2h0PSI1Ljk5OTk5OTUiCiAgICAgICB3aWR0aD0iNS45OTk5OTk1IgogICAgICAgaWQ9InJlY3Q1NTA0LTMtNSIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuOTg5OTk5OTk7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjU4ODIzNTMyO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjU1NDA4NjMzO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjAiIC8+CiAgICA8cmVjdAogICAgICAgcnk9IjAiCiAgICAgICB5PSIxMDkuODk2MDciCiAgICAgICB4PSI0Ny40MjI3NzkiCiAgICAgICBoZWlnaHQ9IjUuOTk5OTk5NSIKICAgICAgIHdpZHRoPSI1Ljk5OTk5OTUiCiAgICAgICBpZD0icmVjdDU1MDQtMy01LTkiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC41ODgyMzUzMjtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC41NTQwODYzMztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPgogICAgPHBhdGgKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDU1NTEtNyIKICAgICAgIGQ9Im0gNjguMzg0OTY3LDEwMi4xMjA4OSBhIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgNS42MDkzNTQsLTUuNzIxOTI4IDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgLTAuMDA5OSwtMC4yMDUwODcgaCAtNS45MTcwNTMgdiA1LjkxMDcwNSBhIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgMC4zMTc2MzQsMC4wMTYzIHoiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC41ODgyMzUzMjtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC44MDg2MTU1NztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPgogICAgPHBhdGgKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDU2NjMiCiAgICAgICBkPSJtIDQ4LjI3MzAxMSwxMDEuMTk2NDggdiAtNy41ODIwNTMgYyAwLC0xLjkxNDE0NCAxLjQxOTUxMSwtMy40NTUxMzQgMy4xODI3NjEsLTMuNDU1MTM0IHYgMCBoIDE0Ljc2NzI3MSIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojOTg5NDk0O3N0cm9rZS13aWR0aDoxLjcyMjc5OTY2O3N0cm9rZS1saW5lY2FwOnNxdWFyZTtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3BhaW50LW9yZGVyOmZpbGwgbWFya2VycyBzdHJva2UiIC8+CiAgICA8cGF0aAogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIGlkPSJyZWN0NTYxNyIKICAgICAgIGQ9Im0gNzMuMjM3ODEzLDEwMi44MzA0MyA0ZS02LDkuMTU0OTggYyAwLDEuNzI3MTggLTEuMzgzMjYzLDMuMTE3NjYgLTMuMTAxNDg1LDMuMTE3NjYgSCA1NS44NDYwNzciCiAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6bm9uZTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6Izk4OTQ5NDtzdHJva2Utd2lkdGg6MS42MTU0NzExMjtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTtwYWludC1vcmRlcjpmaWxsIG1hcmtlcnMgc3Ryb2tlIiAvPgogICAgPHBhdGgKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDU1NTEtNy00IgogICAgICAgZD0ibSA2MS41MTU2MTgsMTA4Ljk5MDIzIGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCA1LjYwOTM1NCwtNS43MjE5MiA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIC0wLjAwOTksLTAuMjA1MDkgSCA2MS4xOTc5NyB2IDUuOTEwNzEgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIDAuMzE3NjM0LDAuMDE2MyB6IgogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNzQ1MDk4MDU7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuODA4NjE1NTc7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4KICAgIDxwYXRoCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgaWQ9InBhdGg1NTUxLTctNC0zIgogICAgICAgZD0ibSA1OS45Mzc5NzUsOTYuMTkzODc0IGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAtNS42MDkzNTQsNS43MjE5MjYgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAwLjAwOTksMC4yMDUwOSBoIDUuOTE3MDUzIHYgLTUuOTEwNzExIGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAtMC4zMTc2MzQsLTAuMDE2MyB6IgogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuODA4NjE1NTc7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4KICAgIDxwYXRoCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgaWQ9InBhdGg1NTUxLTctNC0zLTAiCiAgICAgICBkPSJtIDUzLjA2ODYzMywxMDMuMDYzMjIgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIC01LjYwOTM1Myw1LjcyMTkzIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgMC4wMDk5LDAuMjA1MDggaCA1LjkxNzA1MyB2IC01LjkxMDcxIGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAtMC4zMTc2MzQsLTAuMDE2MyB6IgogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNTg4MjM1MzI7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuODA4NjE1NTc7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4KICA8L2c+Cjwvc3ZnPgo=" +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iNjUiCiAgIGhlaWdodD0iMTkuNzg3MjE4IgogICBpZD0ic3ZnMiIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIgogICBzb2RpcG9kaTpkb2NuYW1lPSJiaW5kcy5zdmciCiAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iQzpcVXNlcnNcdWd1clxEZXNrdG9wXGludGVyYWN0aW9uLWxlZ2VuZC4yMDE2LjA0LjAxLnBuZyIKICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjMwMCIKICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjMwMCIKICAgdmlld0JveD0iMCAwIDYwLjkzNzUwMSAxOC41NTA1MTYiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0Ij4KICAgIDxtYXJrZXIKICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IlRyaWFuZ2xlT3V0TCIKICAgICAgIG9yaWVudD0iYXV0byIKICAgICAgIHJlZlk9IjAiCiAgICAgICByZWZYPSIwIgogICAgICAgaWQ9Im1hcmtlcjEyMDIiCiAgICAgICBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZSIKICAgICAgIGlua3NjYXBlOmlzc3RvY2s9InRydWUiPgogICAgICA8cGF0aAogICAgICAgICBpZD0icGF0aDEyMDAiCiAgICAgICAgIGQ9Ik0gNS43NywwIC0yLjg4LDUgViAtNSBaIgogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjAwMDAwMDAzcHQ7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgwLjgpIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPC9tYXJrZXI+CiAgICA8bWFya2VyCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJUcmlhbmdsZU91dEwiCiAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgICByZWZZPSIwIgogICAgICAgcmVmWD0iMCIKICAgICAgIGlkPSJUcmlhbmdsZU91dEwiCiAgICAgICBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZSIKICAgICAgIGlua3NjYXBlOmlzc3RvY2s9InRydWUiPgogICAgICA8cGF0aAogICAgICAgICBpZD0icGF0aDk1OSIKICAgICAgICAgZD0iTSA1Ljc3LDAgLTIuODgsNSBWIC01IFoiCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuMDAwMDAwMDNwdDtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuOCkiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8L21hcmtlcj4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjcuOTE5NTk1OSIKICAgICBpbmtzY2FwZTpjeD0iLTQuODExMDM1NyIKICAgICBpbmtzY2FwZTpjeT0iMTguNDY4NjIxIgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDE3IgogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIKICAgICBmaXQtbWFyZ2luLXRvcD0iMCIKICAgICBmaXQtbWFyZ2luLWxlZnQ9IjAiCiAgICAgZml0LW1hcmdpbi1yaWdodD0iMCIKICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMCIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE3Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjc1LjY0MjQ3LC0yODEuMjk2NDkpIj4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozLjc1O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Im0gMjc1LjY0MjQ3LDI5MC41NzE3NSBoIDYwLjkzNzUiCiAgICAgICBpZD0icGF0aDQ5NDkiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICA8L2c+Cjwvc3ZnPgo=" /***/ }), /* 49 */ /***/ (function(module, exports) { -module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iMjYuNjMzOTQybW0iCiAgIGhlaWdodD0iMjYuNjIyNzY1bW0iCiAgIHZpZXdCb3g9IjAgMCAyNi42MzM5NDIgMjYuNjIyNzY1IgogICB2ZXJzaW9uPSIxLjEiCiAgIGlkPSJzdmc4IgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIgogICBzb2RpcG9kaTpkb2NuYW1lPSJzZXR0aW5ncy5zdmciPgogIDxkZWZzCiAgICAgaWQ9ImRlZnMyIj4KICAgIDxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoNTAwOCIKICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg1MDA2IgogICAgICAgICBkPSJNIDAsMCBIIDMxMi4wNDMgViA3NC40NDgyIEggMCBaIiAvPgogICAgPC9jbGlwUGF0aD4KICAgIDxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoNTAxNiIKICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg1MDE0IgogICAgICAgICBkPSJNIDAsNzQuNDQ4IEggMzEyLjA0MyBWIDAgSCAwIFoiIC8+CiAgICA8L2NsaXBQYXRoPgogICAgPGNsaXBQYXRoCiAgICAgICBpZD0iY2xpcFBhdGg1MTEyIgogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDUxMTAiCiAgICAgICAgIGQ9Ik0gMCwwIEggMzEyLjA0MyBWIDc0LjQ0ODIgSCAwIFoiIC8+CiAgICA8L2NsaXBQYXRoPgogICAgPGNsaXBQYXRoCiAgICAgICBpZD0iY2xpcFBhdGg1MTIwIgogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDUxMTgiCiAgICAgICAgIGQ9Ik0gMCw3NC40NDggSCAzMTIuMDQzIFYgMCBIIDAgWiIgLz4KICAgIDwvY2xpcFBhdGg+CiAgICA8Y2xpcFBhdGgKICAgICAgIGlkPSJjbGlwUGF0aDUzMzIiCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNTMzMCIKICAgICAgICAgZD0iTSAwLDc0LjQ0OCBIIDMxMi4wNDMgViAwIEggMCBaIiAvPgogICAgPC9jbGlwUGF0aD4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjEuOTc5ODk5IgogICAgIGlua3NjYXBlOmN4PSI1NS41MzU2ODgiCiAgICAgaW5rc2NhcGU6Y3k9Ii01MS4wNjA4MTkiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9Im1tIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciCiAgICAgaW5rc2NhcGU6d2luZG93LXg9Ii04IgogICAgIGlua3NjYXBlOndpbmRvdy15PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIGZpdC1tYXJnaW4tdG9wPSIwIgogICAgIGZpdC1tYXJnaW4tbGVmdD0iMCIKICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIwIgogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIiAvPgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTUiPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgICAgPGRjOnRpdGxlPjwvZGM6dGl0bGU+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIgogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC00Ny40MTE2MTEsLTg5LjI4ODA0KSI+CiAgICA8cmVjdAogICAgICAgcnk9IjAiCiAgICAgICB5PSI5Ni4xNTczNzkiCiAgICAgICB4PSI2MS4xNjE0NzIiCiAgICAgICBoZWlnaHQ9IjUuOTk5OTk5NSIKICAgICAgIHdpZHRoPSI1Ljk5OTk5OTUiCiAgICAgICBpZD0icmVjdDU1MDQiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC43NDUwOTgwNTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC41NTQwODYzMztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPgogICAgPHJlY3QKICAgICAgIHJ5PSIwIgogICAgICAgeT0iMTAzLjAyNjczIgogICAgICAgeD0iNTQuMjkyMTIyIgogICAgICAgaGVpZ2h0PSI1Ljk5OTk5OTUiCiAgICAgICB3aWR0aD0iNS45OTk5OTk1IgogICAgICAgaWQ9InJlY3Q1NTA0LTMiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC43NDUwOTgwNTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC41NTQwODYzMztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPgogICAgPHJlY3QKICAgICAgIHJ5PSIwIgogICAgICAgeT0iODkuMjg4MDQiCiAgICAgICB4PSI2OC4wMzA4MjMiCiAgICAgICBoZWlnaHQ9IjUuOTk5OTk5NSIKICAgICAgIHdpZHRoPSI1Ljk5OTk5OTUiCiAgICAgICBpZD0icmVjdDU1MDQtMy01IgogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNTg4MjM1MzI7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuNTU0MDg2MzM7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4KICAgIDxyZWN0CiAgICAgICByeT0iMCIKICAgICAgIHk9IjEwOS44OTYwNyIKICAgICAgIHg9IjQ3LjQyMjc3OSIKICAgICAgIGhlaWdodD0iNS45OTk5OTk1IgogICAgICAgd2lkdGg9IjUuOTk5OTk5NSIKICAgICAgIGlkPSJyZWN0NTUwNC0zLTUtOSIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuOTg5OTk5OTk7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjU4ODIzNTMyO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjU1NDA4NjMzO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjAiIC8+CiAgICA8cGF0aAogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIGlkPSJwYXRoNTU1MS03IgogICAgICAgZD0ibSA2OC4zODQ5NjcsMTAyLjEyMDg5IGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCA1LjYwOTM1NCwtNS43MjE5MjggNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAtMC4wMDk5LC0wLjIwNTA4NyBoIC01LjkxNzA1MyB2IDUuOTEwNzA1IGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAwLjMxNzYzNCwwLjAxNjMgeiIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuOTg5OTk5OTk7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjU4ODIzNTMyO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjgwODYxNTU3O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjAiIC8+CiAgICA8cGF0aAogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIGlkPSJwYXRoNTY2MyIKICAgICAgIGQ9Im0gNDguMjczMDExLDEwMS4xOTY0OCB2IC03LjU4MjA1MyBjIDAsLTEuOTE0MTQ0IDEuNDE5NTExLC0zLjQ1NTEzNCAzLjE4Mjc2MSwtMy40NTUxMzQgdiAwIGggMTQuNzY3MjcxIgogICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiM5ODk0OTQ7c3Ryb2tlLXdpZHRoOjEuNzIyNzk5NjY7c3Ryb2tlLWxpbmVjYXA6c3F1YXJlO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7cGFpbnQtb3JkZXI6ZmlsbCBtYXJrZXJzIHN0cm9rZSIgLz4KICAgIDxwYXRoCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgaWQ9InJlY3Q1NjE3IgogICAgICAgZD0ibSA3My4yMzc4MTMsMTAyLjgzMDQzIDRlLTYsOS4xNTQ5OCBjIDAsMS43MjcxOCAtMS4zODMyNjMsMy4xMTc2NiAtMy4xMDE0ODUsMy4xMTc2NiBIIDU1Ljg0NjA3NyIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojOTg5NDk0O3N0cm9rZS13aWR0aDoxLjYxNTQ3MTEyO3N0cm9rZS1saW5lY2FwOnNxdWFyZTtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3BhaW50LW9yZGVyOmZpbGwgbWFya2VycyBzdHJva2UiIC8+CiAgICA8cGF0aAogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIGlkPSJwYXRoNTU1MS03LTQiCiAgICAgICBkPSJtIDYxLjUxNTYxOCwxMDguOTkwMjMgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIDUuNjA5MzU0LC01LjcyMTkyIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgLTAuMDA5OSwtMC4yMDUwOSBIIDYxLjE5Nzk3IHYgNS45MTA3MSBhIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgMC4zMTc2MzQsMC4wMTYzIHoiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC43NDUwOTgwNTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC44MDg2MTU1NztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPgogICAgPHBhdGgKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDU1NTEtNy00LTMiCiAgICAgICBkPSJtIDU5LjkzNzk3NSw5Ni4xOTM4NzQgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIC01LjYwOTM1NCw1LjcyMTkyNiA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIDAuMDA5OSwwLjIwNTA5IGggNS45MTcwNTMgdiAtNS45MTA3MTEgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIC0wLjMxNzYzNCwtMC4wMTYzIHoiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC44MDg2MTU1NztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPgogICAgPHBhdGgKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDU1NTEtNy00LTMtMCIKICAgICAgIGQ9Im0gNTMuMDY4NjMzLDEwMy4wNjMyMiBhIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgLTUuNjA5MzUzLDUuNzIxOTMgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAwLjAwOTksMC4yMDUwOCBoIDUuOTE3MDUzIHYgLTUuOTEwNzEgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIC0wLjMxNzYzNCwtMC4wMTYzIHoiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC41ODgyMzUzMjtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC44MDg2MTU1NztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPgogICAgPGcKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuMjkzMzQyMzksMCwwLDAuMjkzMzQyMzksNjAuNTUxODAzLDEwMi40MTcwNSkiCiAgICAgICBpZD0iZzU0ODYiPgogICAgICA8ZwogICAgICAgICBpZD0iZzMiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICBkPSJtIDQxLjUzNCwyOC42NiBoIDEuOTU3IEMgNDQuODc3LDI4LjY2IDQ2LDI3LjUzNiA0NiwyNi4xNSB2IC02LjMgYyAwLC0xLjM4NSAtMS4xMjQsLTIuNTA5IC0yLjUwOSwtMi41MDkgSCA0MS41NCB2IDAuMDA2IEMgNDEuMTQ4LDE2LjE0IDQwLjY4NywxNC45ODMgNDAuMTAzLDEzLjg4OSBsIDEuMzgxLC0xLjM4MSBjIDAuOTc5LC0wLjk4IDAuOTc5LC0yLjU2OSAwLC0zLjU0OSBMIDM3LjA0LDQuNTE3IGMgLTAuOTc5LC0wLjk3OSAtMi41NjcsLTAuOTc5IC0zLjU0NywwIGwgLTEuMzgyLDEuMzggQyAzMS4wMTcsNS4zMTMgMjkuODYxLDQuODUyIDI4LjY1NCw0LjQ2MSBIIDI4LjY2IFYgMi41MSBDIDI4LjY2LDEuMTI0IDI3LjUzNywwIDI2LjE1LDAgaCAtNi4zIGMgLTEuMzg2LDAgLTIuNTA5LDEuMTI0IC0yLjUwOSwyLjUxIHYgMS45NTUgbCAwLjAxNCwtMTBlLTQgYyAtMS4yMDcsMC4zNjcgLTIuMzYzLDAuODUgLTMuNDU4LDEuNDM1IEwgMTIuNTE2LDQuNTE4IGMgLTAuOTgsLTAuOTc5IC0yLjU2OCwtMC45NzkgLTMuNTQ4LDAgTCA0LjUyNSw4Ljk2MSBDIDMuNTQ2LDkuOTQgMy41NDUsMTEuNTI3IDQuNTIzLDEyLjUwNyBMIDUuOSwxMy44ODkgQyA1LjMxNiwxNC45ODMgNC44NTEsMTYuMTQgNC40NiwxNy4zNDYgViAxNy4zNDEgSCAyLjUwOSBDIDEuMTI0LDE3LjM0MSAwLDE4LjQ2NSAwLDE5Ljg1IHYgNi4zMDEgYyAwLDEuMzg3IDEuMTI0LDIuNTExIDIuNTA5LDIuNTExIEggNC40NzMgTCA0LjQ2NywyOC42NDcgYyAwLjM2NywxLjIwNyAwLjg1MywyLjM2MiAxLjQzNiwzLjQ1NyBsIC0xLjM4LDEuMzgxIGMgLTAuOTgsMC45NzkgLTAuOTc5LDIuNTY3IDAsMy41NDcgbCA0LjQ0Myw0LjQ0MiBjIDAuOTc5LDAuOTc5IDIuNTY4LDAuOTc5IDMuNTQ4LDAgbCAxLjM4MSwtMS4zODEgYyAxLjA5NCwwLjU4NCAyLjI1MSwxLjA3MiAzLjQ1OCwxLjQzOCBsIC0wLjAxNCwtMC4wMDYgdiAxLjk2NSBjIDAsMS4zODcgMS4xMjMsMi41MSAyLjUwOSwyLjUxIGggNi4zIGMgMS4zODcsMCAyLjUxLC0xLjEyMyAyLjUxLC0yLjUxIHYgLTEuOTUgaCAtMC4wMDYgYyAxLjIwNywtMC4zOTIgMi4zNjMsLTAuODU2IDMuNDU3LC0xLjQ0IGwgMS4zODEsMS4zNzkgYyAwLjk4LDAuOTc5IDIuNTY4LDAuOTc5IDMuNTQ3LDAgbCA0LjQ0MywtNC40NDUgYyAwLjk3OSwtMC45NzkgMC45NzksLTIuNTY2IDAsLTMuNTQ3IGwgLTEuMzgzLC0xLjM4MyBjIDAuNTg0LC0xLjA5NCAxLjA2OCwtMi4yNSAxLjQzNiwtMy40NTcgeiBNIDIzLjAyMSwzNi43MTQgQyAxNS40NDQsMzYuNzIzIDkuMjc4LDMwLjU1NyA5LjI4NywyMi45OCA5LjI5NiwxNS40NDEgMTUuNDUsOS4yODcgMjIuOTg5LDkuMjc4IGMgNy41NzgsLTAuMDA5IDEzLjc0NCw2LjE1NyAxMy43MzQsMTMuNzM0IC0wLjAxLDcuNTM5IC02LjE2MiwxMy42OTMgLTEzLjcwMiwxMy43MDIgeiIKICAgICAgICAgICBpZD0icGF0aDUiIC8+CiAgICAgIDwvZz4KICAgICAgPGcKICAgICAgICAgaWQ9Imc3IiAvPgogICAgICA8ZwogICAgICAgICBpZD0iZzkiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMTEiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMTMiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMTUiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMTciIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMTkiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMjEiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMjMiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMjUiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMjciIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMjkiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMzEiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMzMiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMzUiIC8+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4K" +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iNjUiCiAgIGhlaWdodD0iMTkuNzg3MjE4IgogICBpZD0ic3ZnMiIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIgogICBzb2RpcG9kaTpkb2NuYW1lPSJpbmR1Y2VzLnN2ZyIKICAgaW5rc2NhcGU6ZXhwb3J0LWZpbGVuYW1lPSJDOlxVc2Vyc1x1Z3VyXERlc2t0b3BcaW50ZXJhY3Rpb24tbGVnZW5kLjIwMTYuMDQuMDEucG5nIgogICBpbmtzY2FwZTpleHBvcnQteGRwaT0iMzAwIgogICBpbmtzY2FwZTpleHBvcnQteWRwaT0iMzAwIgogICB2aWV3Qm94PSIwIDAgNjAuOTM3NTAxIDE4LjU1MDUxNiI+CiAgPGRlZnMKICAgICBpZD0iZGVmczQiPgogICAgPG1hcmtlcgogICAgICAgaW5rc2NhcGU6c3RvY2tpZD0iVHJpYW5nbGVPdXRMIgogICAgICAgb3JpZW50PSJhdXRvIgogICAgICAgcmVmWT0iMCIKICAgICAgIHJlZlg9IjAiCiAgICAgICBpZD0ibWFya2VyMTIwMiIKICAgICAgIHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlIgogICAgICAgaW5rc2NhcGU6aXNzdG9jaz0idHJ1ZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIGlkPSJwYXRoMTIwMCIKICAgICAgICAgZD0iTSA1Ljc3LDAgLTIuODgsNSBWIC01IFoiCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuMDAwMDAwMDNwdDtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuOCkiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8L21hcmtlcj4KICAgIDxtYXJrZXIKICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IlRyaWFuZ2xlT3V0TCIKICAgICAgIG9yaWVudD0iYXV0byIKICAgICAgIHJlZlk9IjAiCiAgICAgICByZWZYPSIwIgogICAgICAgaWQ9IlRyaWFuZ2xlT3V0TCIKICAgICAgIHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlIgogICAgICAgaW5rc2NhcGU6aXNzdG9jaz0idHJ1ZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIGlkPSJwYXRoOTU5IgogICAgICAgICBkPSJNIDUuNzcsMCAtMi44OCw1IFYgLTUgWiIKICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS4wMDAwMDAwM3B0O3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMC44KSIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgIDwvbWFya2VyPgogIDwvZGVmcz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iNy45MTk1OTU5IgogICAgIGlua3NjYXBlOmN4PSItNC44MTEwMzU3IgogICAgIGlua3NjYXBlOmN5PSIxOC40Njg2MjEiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB4IgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciCiAgICAgaW5rc2NhcGU6d2luZG93LXg9Ii04IgogICAgIGlua3NjYXBlOndpbmRvdy15PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIGZpdC1tYXJnaW4tdG9wPSIwIgogICAgIGZpdC1tYXJnaW4tbGVmdD0iMCIKICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIwIgogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIiAvPgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTciPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgICAgPGRjOnRpdGxlPjwvZGM6dGl0bGU+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIgogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yNzUuNjQyNDcsLTI4MS4yOTY0OSkiPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjMuNzQ5OTk5OTM7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5OjcuNDk5OTk5ODcsNy40OTk5OTk4NztzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNob2Zmc2V0OjAiCiAgICAgICBkPSJtIDI3NS42NDI0NywyOTAuNTcxNzUgaCA0Ny4zNTA4OSIKICAgICAgIGlkPSJwYXRoNDk0OSIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgPHBhdGgKICAgICAgIHNvZGlwb2RpOnR5cGU9InN0YXIiCiAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6My43NTtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTtwYWludC1vcmRlcjpmaWxsIG1hcmtlcnMgc3Ryb2tlIgogICAgICAgaWQ9InBhdGg0OTUzIgogICAgICAgc29kaXBvZGk6c2lkZXM9IjMiCiAgICAgICBzb2RpcG9kaTpjeD0iMjEyLjQyOTAyIgogICAgICAgc29kaXBvZGk6Y3k9IjI1My43OTgyNiIKICAgICAgIHNvZGlwb2RpOnIxPSIxMS4wNTczNDciCiAgICAgICBzb2RpcG9kaTpyMj0iNS41Mjg2NzM2IgogICAgICAgc29kaXBvZGk6YXJnMT0iMC45MTQ0NDc5NiIKICAgICAgIHNvZGlwb2RpOmFyZzI9IjEuOTYxNjQ1NSIKICAgICAgIGlua3NjYXBlOmZsYXRzaWRlZD0idHJ1ZSIKICAgICAgIGlua3NjYXBlOnJvdW5kZWQ9IjAiCiAgICAgICBpbmtzY2FwZTpyYW5kb21pemVkPSIwIgogICAgICAgZD0ibSAyMTkuMTc2NTIsMjYyLjU1ODE4IC0xNy43MDc1NywtNy4yOTYzNyAxNS4xNzI2MiwtMTEuNjg3MDEgeiIKICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteD0iLTIuNjk0NjIxOSIKICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteT0iMC4wNzg0ODk2NTMiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjM5NDM0MDk4LDAuODk5Nzc1MDQsLTAuOTE4OTY0MTksMC4zODYxMDY2Myw0NzQuOTg1ODMsMS4zNjE3MzI5KSIgLz4KICA8L2c+Cjwvc3ZnPgo=" /***/ }), /* 50 */ /***/ (function(module, exports) { -module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4KCjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0iQ2FwYV8xIgogICB4PSIwcHgiCiAgIHk9IjBweCIKICAgd2lkdGg9IjQ4NS4yMTVweCIKICAgaGVpZ2h0PSI0ODUuMjE1cHgiCiAgIHZpZXdCb3g9IjAgMCA0ODUuMjE1IDQ4NS4yMTUiCiAgIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQ4NS4yMTUgNDg1LjIxNTsiCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTEgcjEzNzI1IgogICBzb2RpcG9kaTpkb2NuYW1lPSJfbGF5b3V0LXByb3BlcnRpZXMuc3ZnIj48bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE0MSI+PHJkZjpSREY+PGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PjxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48ZGM6dGl0bGUgLz48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMKICAgICBpZD0iZGVmczM5IiAvPjxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMSIKICAgICBvYmplY3R0b2xlcmFuY2U9IjEwIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwIgogICAgIGd1aWRldG9sZXJhbmNlPSIxMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTA4OSIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI2NjYiCiAgICAgaWQ9Im5hbWVkdmlldzM3IgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTp6b29tPSIwLjQ4NjM4MjMzIgogICAgIGlua3NjYXBlOmN4PSItNzYuMzQ1OTcyIgogICAgIGlua3NjYXBlOmN5PSI0MDcuMDg3MTYiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjY0OSIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iNTAiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJDYXBhXzEiIC8+PGcKICAgICBpZD0iZzEwMzQ5IgogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwzMy42MTk5MTksMjAuMDQ5NjkzKSI+PGcKICAgICAgIGlkPSJMYXllcl8xXzExMF8iPjxnCiAgICAgICAgIGlkPSJnMTAzNTIiPjxwYXRoCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICBkPSJtIDE3LjU2NywxNS45MzggLTIuODU5LC0yLjcwMiBjIDAuMzMzLC0wLjYwNSAwLjUzOSwtMS4yOSAwLjUzOSwtMi4wMjkgMCwtMi4zNDIgLTEuODk3LC00LjIzOSAtNC4yNCwtNC4yMzkgLTIuMzQzLDAgLTQuMjQzLDEuODk2IC00LjI0Myw0LjIzOSAwLDIuMzQzIDEuOSw0LjI0MSA0LjI0Myw0LjI0MSAwLjgyNiwwIDEuNTksLTAuMjQ2IDIuMjQyLC0wLjY1NCBsIDIuODU1LDIuNjk5IGMgMC40MzIsLTAuNTcxIDAuOTE5LC0xLjA5NCAxLjQ2MywtMS41NTUgeiIKICAgICAgICAgICBpZD0icGF0aDEwMzU0IiAvPjxwYXRoCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICBkPSJtIDI5LjY2LDE1LjYgMy43OTksLTYuMzkzIGMgMC4zNzQsMC4xMDcgMC43NjIsMC4xODQgMS4xNjksMC4xODQgMi4zNDcsMCA0LjI0NCwtMS44OTggNC4yNDQsLTQuMjQxIDAsLTIuMzQyIC0xLjg5NywtNC4yMzkgLTQuMjQ0LC00LjIzOSAtMi4zNDMsMCAtNC4yMzksMS44OTYgLTQuMjM5LDQuMjM5IDAsMS4xNjMgMC40NjksMi4yMTQgMS4yMjcsMi45ODEgbCAtMy43ODcsNi4zNzUgYyAwLjY1MSwwLjI5NSAxLjI2NSwwLjY2MyAxLjgzMSwxLjA5NCB6IgogICAgICAgICAgIGlkPSJwYXRoMTAzNTYiIC8+PHBhdGgKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgIGQ9Im0gNDIuNzYyLDIwLjk1MiBjIC0xLjgyNCwwIC0zLjM2OSwxLjE1OSAtMy45NjgsMi43NzUgbCAtNS4yNzgsLTAuNTIxIGMgMCwwLjA0IDAuMDA2LDAuMDc4IDAuMDA2LDAuMTE3IDAsMC42ODggLTAuMDc2LDEuMzYgLTAuMjEzLDIuMDA5IGwgNS4yNzYsMC41MjEgYyAwLjMxOSwyLjAyNCAyLjA2MiwzLjU3NiA0LjE3NywzLjU3NiAyLjM0MiwwIDQuMjM4LC0xLjg5NiA0LjIzOCwtNC4yMzggMCwtMi4zNDEgLTEuODk2LC00LjIzOSAtNC4yMzgsLTQuMjM5IHoiCiAgICAgICAgICAgaWQ9InBhdGgxMDM1OCIgLz48cGF0aAogICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgZD0ibSAyOC4xOTcsMzcuNjI0IC0xLjE4LC01LjE1NiBjIC0wLjY2NiwwLjIzMiAtMS4zNTksMC4zOTggLTIuMDgyLDAuNDgxIGwgMS4xODIsNS4xNTcgYyAtMS4zNTUsMC43MDkgLTIuMjksMi4xMSAtMi4yOSwzLjc0NiAwLDIuMzQyIDEuODk2LDQuMjM3IDQuMjQzLDQuMjM3IDIuMzQyLDAgNC4yMzgsLTEuODk2IDQuMjM4LC00LjIzNyAwLjAwMywtMi4yOTkgLTEuODI5LC00LjE2IC00LjExMSwtNC4yMjggeiIKICAgICAgICAgICBpZD0icGF0aDEwMzYwIiAvPjxjaXJjbGUKICAgICAgICAgICBjeD0iMjMuODMiCiAgICAgICAgICAgY3k9IjIzLjMyMyIKICAgICAgICAgICByPSI3LjI3MDk5OTkiCiAgICAgICAgICAgaWQ9ImNpcmNsZTEwMzY0IiAvPjwvZz48L2c+PC9nPjxnCiAgICAgaWQ9ImcxMDM2NiIKICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMTcuNjE5OTE5LDE4LjA0OTY5MykiIC8+PGcKICAgICBpZD0iZzEwMzY4IgogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwxNy42MTk5MTksMTguMDQ5NjkzKSIgLz48ZwogICAgIGlkPSJnMTAzNzAiCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoOS41NTU2NTEsMCwwLDkuNTU1NjUxLDE3LjYxOTkxOSwxOC4wNDk2OTMpIiAvPjxnCiAgICAgaWQ9ImcxMDM3MiIKICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMTcuNjE5OTE5LDE4LjA0OTY5MykiIC8+PGcKICAgICBpZD0iZzEwMzc0IgogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwxNy42MTk5MTksMTguMDQ5NjkzKSIgLz48ZwogICAgIGlkPSJnMTAzNzYiCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoOS41NTU2NTEsMCwwLDkuNTU1NjUxLDE3LjYxOTkxOSwxOC4wNDk2OTMpIiAvPjxnCiAgICAgaWQ9ImcxMDM3OCIKICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMTcuNjE5OTE5LDE4LjA0OTY5MykiIC8+PGcKICAgICBpZD0iZzEwMzgwIgogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwxNy42MTk5MTksMTguMDQ5NjkzKSIgLz48ZwogICAgIGlkPSJnMTAzODIiCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoOS41NTU2NTEsMCwwLDkuNTU1NjUxLDE3LjYxOTkxOSwxOC4wNDk2OTMpIiAvPjxnCiAgICAgaWQ9ImcxMDM4NCIKICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMTcuNjE5OTE5LDE4LjA0OTY5MykiIC8+PGcKICAgICBpZD0iZzEwMzg2IgogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwxNy42MTk5MTksMTguMDQ5NjkzKSIgLz48ZwogICAgIGlkPSJnMTAzODgiCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoOS41NTU2NTEsMCwwLDkuNTU1NjUxLDE3LjYxOTkxOSwxOC4wNDk2OTMpIiAvPjxnCiAgICAgaWQ9ImcxMDM5MCIKICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMTcuNjE5OTE5LDE4LjA0OTY5MykiIC8+PGcKICAgICBpZD0iZzEwMzkyIgogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwxNy42MTk5MTksMTguMDQ5NjkzKSIgLz48ZwogICAgIGlkPSJnMTAzOTQiCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoOS41NTU2NTEsMCwwLDkuNTU1NjUxLDE3LjYxOTkxOSwxOC4wNDk2OTMpIiAvPjxnCiAgICAgaWQ9Imc0MzIwIgogICAgIHRyYW5zZm9ybT0ibWF0cml4KDQuNzU0NDI3MSwwLDAsNC43NTQ0MjcxLDcuODM5OTM2MSwyNjAuNzI3NDEpIj48ZwogICAgICAgaWQ9Imc0MjgwIj48cGF0aAogICAgICAgICBpZD0icGF0aDQyODIiCiAgICAgICAgIGQ9Im0gNDEuNTM0LDI4LjY2IDEuOTU3LDAgQyA0NC44NzcsMjguNjYgNDYsMjcuNTM2IDQ2LDI2LjE1IGwgMCwtNi4zIGMgMCwtMS4zODUgLTEuMTI0LC0yLjUwOSAtMi41MDksLTIuNTA5IGwgLTEuOTUxLDAgMCwwLjAwNiBDIDQxLjE0OCwxNi4xNCA0MC42ODcsMTQuOTgzIDQwLjEwMywxMy44ODkgbCAxLjM4MSwtMS4zODEgYyAwLjk3OSwtMC45OCAwLjk3OSwtMi41NjkgMCwtMy41NDkgTCAzNy4wNCw0LjUxNyBjIC0wLjk3OSwtMC45NzkgLTIuNTY3LC0wLjk3OSAtMy41NDcsMCBsIC0xLjM4MiwxLjM4IEMgMzEuMDE3LDUuMzEzIDI5Ljg2MSw0Ljg1MiAyOC42NTQsNC40NjEgbCAwLjAwNiwwIDAsLTEuOTUxIEMgMjguNjYsMS4xMjQgMjcuNTM3LDAgMjYuMTUsMCBsIC02LjMsMCBjIC0xLjM4NiwwIC0yLjUwOSwxLjEyNCAtMi41MDksMi41MSBsIDAsMS45NTUgMC4wMTQsLTEwZS00IGMgLTEuMjA3LDAuMzY3IC0yLjM2MywwLjg1IC0zLjQ1OCwxLjQzNSBMIDEyLjUxNiw0LjUxOCBjIC0wLjk4LC0wLjk3OSAtMi41NjgsLTAuOTc5IC0zLjU0OCwwIEwgNC41MjUsOC45NjEgQyAzLjU0Niw5Ljk0IDMuNTQ1LDExLjUyNyA0LjUyMywxMi41MDcgTCA1LjksMTMuODg5IEMgNS4zMTYsMTQuOTgzIDQuODUxLDE2LjE0IDQuNDYsMTcuMzQ2IGwgMCwtMC4wMDUgLTEuOTUxLDAgQyAxLjEyNCwxNy4zNDEgMCwxOC40NjUgMCwxOS44NSBsIDAsNi4zMDEgYyAwLDEuMzg3IDEuMTI0LDIuNTExIDIuNTA5LDIuNTExIGwgMS45NjQsMCAtMC4wMDYsLTAuMDE1IGMgMC4zNjcsMS4yMDcgMC44NTMsMi4zNjIgMS40MzYsMy40NTcgbCAtMS4zOCwxLjM4MSBjIC0wLjk4LDAuOTc5IC0wLjk3OSwyLjU2NyAwLDMuNTQ3IGwgNC40NDMsNC40NDIgYyAwLjk3OSwwLjk3OSAyLjU2OCwwLjk3OSAzLjU0OCwwIGwgMS4zODEsLTEuMzgxIGMgMS4wOTQsMC41ODQgMi4yNTEsMS4wNzIgMy40NTgsMS40MzggbCAtMC4wMTQsLTAuMDA2IDAsMS45NjUgYyAwLDEuMzg3IDEuMTIzLDIuNTEgMi41MDksMi41MSBsIDYuMywwIGMgMS4zODcsMCAyLjUxLC0xLjEyMyAyLjUxLC0yLjUxIGwgMCwtMS45NSAtMC4wMDYsMCBjIDEuMjA3LC0wLjM5MiAyLjM2MywtMC44NTYgMy40NTcsLTEuNDQgbCAxLjM4MSwxLjM3OSBjIDAuOTgsMC45NzkgMi41NjgsMC45NzkgMy41NDcsMCBsIDQuNDQzLC00LjQ0NSBjIDAuOTc5LC0wLjk3OSAwLjk3OSwtMi41NjYgMCwtMy41NDcgbCAtMS4zODMsLTEuMzgzIGMgMC41ODQsLTEuMDk0IDEuMDY4LC0yLjI1IDEuNDM2LC0zLjQ1NyBsIDEwZS00LDAuMDEzIHogTSAyMy4wMjEsMzYuNzE0IEMgMTUuNDQ0LDM2LjcyMyA5LjI3OCwzMC41NTcgOS4yODcsMjIuOTggOS4yOTYsMTUuNDQxIDE1LjQ1LDkuMjg3IDIyLjk4OSw5LjI3OCBjIDcuNTc4LC0wLjAwOSAxMy43NDQsNi4xNTcgMTMuNzM0LDEzLjczNCAtMC4wMSw3LjUzOSAtNi4xNjIsMTMuNjkzIC0xMy43MDIsMTMuNzAyIHoiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PC9nPjxnCiAgICAgICBpZD0iZzQyODQiIC8+PGcKICAgICAgIGlkPSJnNDI4NiIgLz48ZwogICAgICAgaWQ9Imc0Mjg4IiAvPjxnCiAgICAgICBpZD0iZzQyOTAiIC8+PGcKICAgICAgIGlkPSJnNDI5MiIgLz48ZwogICAgICAgaWQ9Imc0Mjk0IiAvPjxnCiAgICAgICBpZD0iZzQyOTYiIC8+PGcKICAgICAgIGlkPSJnNDI5OCIgLz48ZwogICAgICAgaWQ9Imc0MzAwIiAvPjxnCiAgICAgICBpZD0iZzQzMDIiIC8+PGcKICAgICAgIGlkPSJnNDMwNCIgLz48ZwogICAgICAgaWQ9Imc0MzA2IiAvPjxnCiAgICAgICBpZD0iZzQzMDgiIC8+PGcKICAgICAgIGlkPSJnNDMxMCIgLz48ZwogICAgICAgaWQ9Imc0MzEyIiAvPjwvZz48L3N2Zz4=" +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iNjUiCiAgIGhlaWdodD0iMTkuNzg3MjE4IgogICBpZD0ic3ZnMiIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIgogICBzb2RpcG9kaTpkb2NuYW1lPSJpbmhpYml0cy5zdmciCiAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iQzpcVXNlcnNcdWd1clxEZXNrdG9wXGludGVyYWN0aW9uLWxlZ2VuZC4yMDE2LjA0LjAxLnBuZyIKICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjMwMCIKICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjMwMCIKICAgdmlld0JveD0iMCAwIDYwLjkzNzUwMSAxOC41NTA1MTYiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0Ij4KICAgIDxtYXJrZXIKICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IlN0b3BMIgogICAgICAgb3JpZW50PSJhdXRvIgogICAgICAgcmVmWT0iMC4wIgogICAgICAgcmVmWD0iMC4wIgogICAgICAgaWQ9IlN0b3BMIgogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiCiAgICAgICBpbmtzY2FwZTppc3N0b2NrPSJ0cnVlIj4KICAgICAgPHBhdGgKICAgICAgICAgaWQ9InBhdGg5ODYiCiAgICAgICAgIGQ9Ik0gMC4wLDUuNjUgTCAwLjAsLTUuNjUiCiAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjAuNzU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjFwdDtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuOCkiIC8+CiAgICA8L21hcmtlcj4KICAgIDxtYXJrZXIKICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IlRyaWFuZ2xlT3V0TCIKICAgICAgIG9yaWVudD0iYXV0byIKICAgICAgIHJlZlk9IjAiCiAgICAgICByZWZYPSIwIgogICAgICAgaWQ9Im1hcmtlcjEyMDIiCiAgICAgICBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZSIKICAgICAgIGlua3NjYXBlOmlzc3RvY2s9InRydWUiPgogICAgICA8cGF0aAogICAgICAgICBpZD0icGF0aDEyMDAiCiAgICAgICAgIGQ9Ik0gNS43NywwIC0yLjg4LDUgViAtNSBaIgogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjAwMDAwMDAzcHQ7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgwLjgpIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPC9tYXJrZXI+CiAgICA8bWFya2VyCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJUcmlhbmdsZU91dEwiCiAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgICByZWZZPSIwIgogICAgICAgcmVmWD0iMCIKICAgICAgIGlkPSJUcmlhbmdsZU91dEwiCiAgICAgICBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZSIKICAgICAgIGlua3NjYXBlOmlzc3RvY2s9InRydWUiPgogICAgICA8cGF0aAogICAgICAgICBpZD0icGF0aDk1OSIKICAgICAgICAgZD0iTSA1Ljc3LDAgLTIuODgsNSBWIC01IFoiCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuMDAwMDAwMDNwdDtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuOCkiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8L21hcmtlcj4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjcuOTE5NTk1OSIKICAgICBpbmtzY2FwZTpjeD0iLTQuODExMDM1NyIKICAgICBpbmtzY2FwZTpjeT0iMTMuOTIyOTM0IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDE3IgogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIKICAgICBmaXQtbWFyZ2luLXRvcD0iMCIKICAgICBmaXQtbWFyZ2luLWxlZnQ9IjAiCiAgICAgZml0LW1hcmdpbi1yaWdodD0iMCIKICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMCIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE3Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZSAvPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjc1LjY0MjQ3LC0yODEuMjk2NDkpIj4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozLjc0OTk5OTkzO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Im0gMjc1LjY0MjQ3LDI5MC41NzE3NSBoIDU5Ljc4MDUiCiAgICAgICBpZD0icGF0aDQ5NDkiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC43NDUwOTgwNDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6Mi43NzU5Mzc1NjtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTo4LjMyNzgxMjQ2LCAyLjc3NTkzNzQ5O3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTtwYWludC1vcmRlcjpmaWxsIG1hcmtlcnMgc3Ryb2tlIgogICAgICAgaWQ9InJlY3Q0OTgxIgogICAgICAgd2lkdGg9IjAuOTc0MTY5NTUiCiAgICAgICBoZWlnaHQ9IjE1Ljg4OTcwMyIKICAgICAgIHg9IjMzNC4yMTc4MyIKICAgICAgIHk9IjI4Mi42MjY4OSIgLz4KICA8L2c+Cjwvc3ZnPgo=" /***/ }), /* 51 */ /***/ (function(module, exports) { -module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjQ1LjY3OHB4IiBoZWlnaHQ9IjQ1LjY3OHB4IiB2aWV3Qm94PSIwIDAgNDUuNjc4IDQ1LjY3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDUuNjc4IDQ1LjY3ODsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxwYXRoIGQ9Ik0zOC45ODgsNi42ODljLTguOTE5LTguOTE4LTIzLjM4LTguOTE5LTMyLjMsMGMtOC45MTgsOC45MTktOC45MTcsMjMuMzgsMCwzMi4yOTljOC45Miw4LjkxOSwyMy4zODEsOC45MTksMzIuMywwDQoJCQlDNDcuOTA4LDMwLjA2OSw0Ny45MDYsMTUuNjA4LDM4Ljk4OCw2LjY4OXogTTIxLjg5MywzNi4wMTZjLTEuNzMsMC0yLjkwNi0xLjI3Mi0yLjkwNi0yLjk3MWMwLTEuNzMsMS4yMDktMi45NzIsMi45MDYtMi45NzINCgkJCWMxLjc2NCwwLDIuOTA2LDEuMjQxLDIuOTM4LDIuOTcyQzI0LjgzMSwzNC43NDIsMjMuNjU2LDM2LjAxNiwyMS44OTMsMzYuMDE2eiBNMjYuMjE1LDIxLjk4MWMtMS4zMiwxLjQ2Ni0xLjg1NiwyLjg2MS0xLjgyLDQuNDY4DQoJCQljMCwxLjE5My0wLjk2OSwyLjE2Mi0yLjE2MywyLjE2MkgyMS43N2MtMS4xODIsMC0yLjE0NS0wLjk0OS0yLjE2MS0yLjEzMWwtMC4wMDUtMC4zMTdjLTAuMTA3LTEuODIzLDAuNTAxLTMuNjgxLDIuMTA5LTUuNjExDQoJCQljMS4xNDUtMS4zNTksMi4wNzItMi41MDIsMi4wNzItMy43MThjMC0xLjI1LTAuODIyLTIuMDczLTIuNjA3LTIuMTQ2Yy0wLjU0OSwwLTEuMTUsMC4wOTMtMS43MzEsMC4yNTYNCgkJCWMtMS4wNTYsMC4yOTctMi4xNTYtMC4yOTgtMi40ODItMS4zNDVsLTAuMDA2LTAuMDJjLTAuMzI5LTEuMDU0LDAuMjQ3LTIuMTc1LDEuMjk0LTIuNTIzYzEuMTU3LTAuMzg1LDIuNTc0LTAuNjU3LDQuMTQtMC42NTcNCgkJCWM0LjcyLDAsNi44NjQsMi42MDksNi44NjQsNS41NzZDMjkuMjU2LDE4LjY5MiwyNy41NzUsMjAuNDc5LDI2LjIxNSwyMS45ODF6Ii8+DQoJPC9nPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPC9zdmc+DQo=" +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iNjUiCiAgIGhlaWdodD0iMTkuNzg3MjE4IgogICBpZD0ic3ZnMiIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIgogICBzb2RpcG9kaTpkb2NuYW1lPSJyZXByZXNzZXMuc3ZnIgogICBpbmtzY2FwZTpleHBvcnQtZmlsZW5hbWU9IkM6XFVzZXJzXHVndXJcRGVza3RvcFxpbnRlcmFjdGlvbi1sZWdlbmQuMjAxNi4wNC4wMS5wbmciCiAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSIzMDAiCiAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSIzMDAiCiAgIHZpZXdCb3g9IjAgMCA2MC45Mzc1MDEgMTguNTUwNTE2Ij4KICA8ZGVmcwogICAgIGlkPSJkZWZzNCI+CiAgICA8bWFya2VyCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJTdG9wTCIKICAgICAgIG9yaWVudD0iYXV0byIKICAgICAgIHJlZlk9IjAuMCIKICAgICAgIHJlZlg9IjAuMCIKICAgICAgIGlkPSJTdG9wTCIKICAgICAgIHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlIgogICAgICAgaW5rc2NhcGU6aXNzdG9jaz0idHJ1ZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIGlkPSJwYXRoOTg2IgogICAgICAgICBkPSJNIDAuMCw1LjY1IEwgMC4wLC01LjY1IgogICAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtb3BhY2l0eTowLjc1O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxcHQ7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgwLjgpIiAvPgogICAgPC9tYXJrZXI+CiAgICA8bWFya2VyCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJUcmlhbmdsZU91dEwiCiAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgICByZWZZPSIwIgogICAgICAgcmVmWD0iMCIKICAgICAgIGlkPSJtYXJrZXIxMjAyIgogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiCiAgICAgICBpbmtzY2FwZTppc3N0b2NrPSJ0cnVlIj4KICAgICAgPHBhdGgKICAgICAgICAgaWQ9InBhdGgxMjAwIgogICAgICAgICBkPSJNIDUuNzcsMCAtMi44OCw1IFYgLTUgWiIKICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS4wMDAwMDAwM3B0O3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMC44KSIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgIDwvbWFya2VyPgogICAgPG1hcmtlcgogICAgICAgaW5rc2NhcGU6c3RvY2tpZD0iVHJpYW5nbGVPdXRMIgogICAgICAgb3JpZW50PSJhdXRvIgogICAgICAgcmVmWT0iMCIKICAgICAgIHJlZlg9IjAiCiAgICAgICBpZD0iVHJpYW5nbGVPdXRMIgogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiCiAgICAgICBpbmtzY2FwZTppc3N0b2NrPSJ0cnVlIj4KICAgICAgPHBhdGgKICAgICAgICAgaWQ9InBhdGg5NTkiCiAgICAgICAgIGQ9Ik0gNS43NywwIC0yLjg4LDUgViAtNSBaIgogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjAwMDAwMDAzcHQ7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgwLjgpIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPC9tYXJrZXI+CiAgPC9kZWZzPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSI3LjkxOTU5NTkiCiAgICAgaW5rc2NhcGU6Y3g9Ii0yNS4zMjk3NTkiCiAgICAgaW5rc2NhcGU6Y3k9IjEzLjkyMjkzNCIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTAxNyIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04IgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiCiAgICAgZml0LW1hcmdpbi10b3A9IjAiCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIgogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiCiAgICAgZml0LW1hcmdpbi1ib3R0b209IjAiIC8+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNyI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGUgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTI3NS42NDI0NywtMjgxLjI5NjQ5KSI+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6My43NTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6Ny40OTk5OTk4NywgNy40OTk5OTk4NztzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJtIDI3NS42NDI0NywyOTAuNTcxNzUgaCA1OS43ODA1IgogICAgICAgaWQ9InBhdGg0OTQ5IgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICA8cmVjdAogICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNzQ1MDk4MDQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjIuNzc1OTM3NTY7c3Ryb2tlLWxpbmVjYXA6c3F1YXJlO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6OC4zMjc4MTIzNSwgMi43NzU5Mzc0NTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7cGFpbnQtb3JkZXI6ZmlsbCBtYXJrZXJzIHN0cm9rZSIKICAgICAgIGlkPSJyZWN0NDk4MSIKICAgICAgIHdpZHRoPSIwLjk3NDE2OTU1IgogICAgICAgaGVpZ2h0PSIxNS44ODk3MDMiCiAgICAgICB4PSIzMzIuMzQyODMiCiAgICAgICB5PSIyODIuNjI2ODkiIC8+CiAgPC9nPgo8L3N2Zz4K" /***/ }), /* 52 */ -/***/ (function(module, exports) { +/***/ (function(module, exports, __webpack_require__) { -module.exports = require("react-tooltip"); +// extracted by mini-css-extract-plugin /***/ }), /* 53 */ -/***/ (function(module, exports) { +/***/ (function(module, exports, __webpack_require__) { -module.exports = require("jquery-ui-dist/jquery-ui"); +// extracted by mini-css-extract-plugin /***/ }), /* 54 */ +/***/ (function(module, exports, __webpack_require__) { + +// extracted by mini-css-extract-plugin + +/***/ }), +/* 55 */ +/***/ (function(module, exports) { + +module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABKoAAAC8CAYAAABYIEaGAAAgAElEQVR4Xux9CZgdVZX/PfW6k3RDIIDSrBJiSNetbkLy6iWRRQluiLIICoq44IIwo7iD62jcdXTGdVz+7o64gQubOq5siiGvukOSrludRAwiS1DWQDrpfq/O//tlqplO59WtW/Xqve4kdb6vv4jvLuee2u49y+9HopDCAg0scO6555Y2bdpkM7MrhDiRmU9i5rcPDAz8qjBYYYHCAoUFCgsUFigsUFigsEB+FsC+a+3ata8goguFEIuFEDOFEJuEEFdu377903fccccj+c1WjFRYYOos0Nvbe5hlWZcLIU4XQhwhhNgmhKgy82eDILhu6jQrZt6TLLBw4cJ9RkdH30RE5wkhFkRr84UQ3+rv7//qlVdeWd+T1rsnroX2xEUVa0ptAVqyZMnR9Xp9EREtEkI8TQixTAix36SRvuZ53utTj150KCxQWKCwQGGBwgKFBQoLFBZoaIHe3t7ZlmVdJYR4boyJVGdn5/I1a9bcX5iwsMDubIG+vr5nhmH4EyHEnEbrIKIP+r6/YndeY6H71Fugv7//qfV6/RcTHFQ7KUVE1x588MHn3HDDDbWp17bQIM4ChaNqL7s3XNftZmZpWdYiZj5OCAHH1EIhxP4Gpth8xhlnHLZixYrQoG3RJIMF4P1n5hnd3d31lStXPpphiKJLYYHCAgYWwMGwVCrND8MQ0dxD4Jgnog4hBP5qRDQShiGivFuY+W/MvGn9+vX3CiGK95+BfYsmhQX2RAvMmzdv/87OzgMtyzpACHHgxDWGYYj/7wkhImRAjdbr9c2dnZ13+b7/WJxNpJQ/F0KclWCzq5VSL9wT7Vqsae+wQF9fnxOG4Z+FELM1K2YhxKlKqd/sHVYpVpm3BSLHvyeEOEY3NhG91/f9j+U9fzFefhYoHFX52XI6jUSLFy9+SqlUQppjrxACJXzj//tIIUQz1/3pnufdMp0WuzvpsmTJkkOYeSlKKpn5aCI6WggxVwiBDe4+DdayVQhxpxDi70IIRUR48a6sVqvDU7Fux3HgROsTQsxj5gOICIf2R4noYSHEI6Ojo/fcfvvtd0+FbsWchQWSLGDbNkqZX0lEpwghHCFEKanPpN9HhRBrhRC3WJZ1y+OPP/7bTZs24d4vpLBAYQFDC0gpj7Isa0m9Xj+KiI4koi5mnkNEtTAM/0lE/xRC/JOZNwshHiCiB/BvR0fHtrGxMateryOwNtOyrH0sy+oOw3Dzvvvue5fnefhe5iqO4yCodzoRAf7ghIQDtnZuIrpDCPFnZr6KiK73fR/vE9HX1/e8MAx/aaA4l0qlY9atW/cXg7ZFk8IC084CUspro3K/JN1+oZR6QVKj4vfCAo0sYNv2+5GZl2QdZr4/CIJDiwBkkqWm7vdmHBZTp3Uxs1i0aNGczs7OufV6/WjLsuYy81w4PeD8EEI8VQjR1SIzfcjzvA+0aOw9btjjjz++a2xs7DlhGJ5FRM8WQjwlp0Viw3sdEV1RrVZvy2nMhsO4rtsphDhXCHG+EOJZBvcWShMGhRADQohfeJ73RyEEImSFFBaYEgscc8wx8zo7O7/EzKfmrMA2IvopEX1jaGjo9zmPXQxXWGCPsQDKMGq12iVE9BIhBAJmuQsz325Z1sd83/9xs4Pbto091Vc1pXjNTrGRmS8KguAGKeV34EA3HPCVSqn/NmxbNCssMG0sMHfu3DldXV3/iLKWk/R6RCnVsDQwqWPxe2EBKSVwqKSJJcIwtIeHh6ck+G+i397epnBUTcM7oK+v78Curq7DwjA8XAhxKCKOKE1h5iOICI4OZOBM1Qv8es/zAH5YiMYCixcvfoZlWZcIIc6MyZTK036DRPTZo48++oo8gQFXrFhhXXvtta8RQgArAPdiVvmrEOKKer3+jdWrVwMYtpDCAm2zQF9fH8r7bo7K+1o5729qtdqbN2zYoFo5STF2YYHdyQLLly/vuP/++z/BzG8SQiDo0Q55g1LqS1knWrhw4RFjY2MIACHS3kqBo3s5AKQjbFCTud6mlPqMScOiTWGB6WQBZDQTUdVUJyKaOZ51aNqnaFdYQAhhSSm3GzpEBRE93ff9olJomt46haOqTRdm6dKlB9VqtYOFEE8SQjyZiOB4ejL+m4h6og0RNkVwCMxqk1ppp3mAmW8YGBh4cdqOe0N7ZB4x84VEhA15/xSs2Seiy6rVKsADm5JFixYdY1nWFUS0pKmBdu48SkRfq9Vq71u9enVRLpWjYYuh4i0gpcTzcFqbbLQdGSO+71/dpvn2qGn6+/t7xsbGllmWVYmCMygv3hGUYeatRITNJ8rAUAr9F8uy/rLffvutu/XWW0f2KEPsQYtxHOerzNxuEpYHe3p6erKC5Eopvy6EeG2bLsP1QoiDTB1VRHSJ7/vI9CqksEBbLBA5bufVarV/bNiwIciaIZ/SUTWmlALrZZGN35arvEdNkspRJYRwlVKoAClkGlqgcFSlvCjHHnvsAbNmzTqgVqsdWCqVDgB4JhEBUBP/HsDMB0b/AnMImw84o/AHgN7pLA8KIYAtBNDgvxMR/v4WhuHfLcu6u7Oz82/FYaDx5UPm0TXXXHN+VA+NssspFSL63sjIyJuHhoZwTVNLpVJ5ETN/Wwixb+rOZh3uJaJXVavVAijTzF5Fq4wWiEoNHsrYPWs3ALE/z/f932UdYG/qN3/+/CfPmDHjVXAMMLOdYe0AvAfuzx/CMPzx+vXrcZAqZBpYYP78+ft1dnYiKNH2vaZlWccMDQ1tzGIGKSX6tetbfpcQ4n+EEK8z0dWyrGcVZcYmliraNGsBYJIy8zeEEBdMeIaHmfmCIAiAl5pKIoBr4M/NMOjoK6WAh1pIYYHUFpBS3h4RhSX1Dbdv337gHXfcAeKLQqahBdq+eZhONnBd91BmPiNyLM0moh1/YRjuF7Hg7Y//jsAz8S/+/91RcFBDBHrcCbXDITXuhML/bgUI6e5oqLQ6VyqVxcyM6Gs5bd8Wt99kWdbZq1atWp1mHtd13yaE+BRSZ9P0y9C2zszvGBgYQMlDIYUFWmIBx3H6mHldSwbXD+r39PQclzWjYwr0bfuUOLQQ0UeI6GIAY+eowE1CiC8ppYBTVETjczRs2qGklMgSvydtvzzaA68zCIJMpeZSSpSrA2Kh5cLMq4QQbyEiYDkmyQNz5sw5sggaJpmp+D0PC0gpsT97c4Ox7g3DsHd4eHhL2nkcx7mCmV9m0O9TSqnLDdoVTQoL7GIBKSXuW5PzxY1KqeWFCaevBfZqR9WyZcuOqNVqiGbt7gIn1O1EdDczwwl1J7Kg4IgqnFCtubQASR8dHQWo/Nuncbbc40R0QbVaNSpDqlQqlzPzJ1tjsdhR3+V5XrvnbPMSi+mmygKgkp85c+aUlJkWuAfxV91xnNOYGeVLLQHVjma+zbKsNw4NDcERUMgUWcBxnFuY+cQ2T3+nUgrEMpkclY7jfAtl/G3S+SNKqX+zbftzEWxA7LT43ff9L7RJr2KavdgCCxYseFKpVMIZomEQgZlfHQQBMu9TSeS8xjtZh3u6mYgW+b5/n+ng/f39RwJexbKsg+v1+o5qACICBtyOsvCobHwLMz8UhuGDWZxsproU7abeAoBi2bp162+FEM/QaAOW2eXDw8MmQYKpX9ReqsFe7ajCNXddF9G+VgNmtvr2usXzvKe3epJi/P+1wNKlSxfU6/WfTBEOVdrLUMOGe2Bg4ApdR9d1Afz+5bSD59CeI2faD3IYqxiisMAuFpBS3piwWQmFECgX6xVClPIyIRG93Pd97XOX11y70zi2bb+eiAB0nZutNesfRUlVwZI2dXdIb28vmIn/IIQ4qk1aACfubN/3f5l1PsdxgCEK7KhmM6VRTgLM0biMwY1EtNj3/ceQxWzb9r8R0bsa4JQ+xswrgiD4z6zOt6y2KPrtnRawbfscIsI+N06QtfqGLNaJGDXxbTyhQf/V0bdzKGls13W7t27d+m4hxKszEP7UhBCoNnmQiO4B5Akz3xUF/O8qlUp/22+//dYX2YtJV2H6/u44zr5hGH6FiJDBN9nfgWt+cRAE103fFRSawQJ7vaOqXC5fTURgZtuthYieX61WM2/MduvFt1H5crl8NhEhipSmDBQfRESmAEb/GBEhqrMDMJ+IMA7A9PHXKhD9kJlfPDAw8LNGpnJd97lCCGzK0+CojQkhwIoEnAJgFgDg+B/4l4g6SqXSvsz8JGbuI6LjmPlZUTltIxUer9fri1evXr2hjZeymGovsYDjOIuYGZE1YAaOCzao12EjXq/Xf4/oqpQSUbVGG+fxPnBoXSOEOEVzLz8xAd7JzRyW98TLI6VEKccn2rz3gDP8BcW1mLo7KjowwEF5HL4PYRjie4FvBQJs+DYkCVg7AaoPQhpgfjYqTccz/SvLsj45NDQEfJKm5Nxzzy2tXbsWuh0L5mUigmMV3+5HiOgRZj5VCPFC3STjeFIR8+gJRLSQmY+NgqO3dHZ2rlizZs39E8eAkywifziKmZENsn5kZOQPmzZtmpLM0KaMWHTebS0gpfx3IcRlmgVcqZQ6r5kF2rZ9vBDieMuy9o9IMlb6vo99ZWImJKoaHn74YZR5g3ijVQI97sQzyMwBEeEPUAKDkXO5VfMW4+Zogd7e3l7Lsp5NRAeHYfgoEa0hohsLRskcjdzCofZ6R5Xruu8TQnw4RxsjVfWeca88PPVCiLvCMEQqKyIIEw9LOU4rBjzPwws78QWf56R701jlcvkDRIRyv6TnBg6ba4nod2EYDm3fvl2ZvBCBmRaGoWNZFpw7JzAzNvGH5WTjrcz8jIGBgZ0AMBcvXnyYZVnY1IONMlGICBuDr5RKpetXrlz5aGKHqAHScKMD/qVCiBc0sOHNnuedXNy/phYt2qWxALI6iGgcrPjGffbZ5w+e58HZ+oRIKd8rhPhIwrjH9vT0BPfeey+Y6U5l5ucSEd67k7ODHhkZGZlbHC7/z5q2bQMPEmXISe/PNJfWtO1flFLzTRsX7dpjgQULFhxeKpWQzZhE3IGsOIA6CziQgiDYb9u2bQd0dnZ21Wq1ekdHx8NpyoTyWJ2U8lohxOmasRCUOsjk25+HPnvKGLgngK9pWdZhYRgOW5b1k8Ip0P6rK6X8uRDiLM3MP1BKmWBNtUR5KSW+519ryeDJg45nYf8xDMPfdHR0/C4reVHyVEWLwgJ7twWmYsM4rSxeLpdPJaJfGSiFQ81946mhEx1RSBmt1+t/Hx0dvUe3KXFdFyndHzeYK1MTIjq3Wq1elalz0SnWAsuXL+/YsmXLVxLoqkMi+nm9Xv/c/Pnz/3jllVfW8zCp67qIviJqi8hVf5NjbhwbG1u0Zs2ax8fHcV0X9z4iwzoBi9k3mfmLnuetbVIHUS6XF6LMEM64SWOd53nelc2OX/QvLJDFAlJKlPkkMRm9USn1XxPH7+vrO7Ber+M78vyoVOiBMAw/MDw8jHInY8EB3Pf954RheDgRrfd9Hxle2BDv9iKlRNkX6J/BkJtGEHhBJgmyUrsMHBqxY9fr9SPWr18PDMdMAor20dHRpUQEJqqnRKUmCDyVIkIWlHkhAwbBKmSHonTlJqUUIvKFxFjAtu13E9HHEgy0Vil13HQJZOBZXbduHbLCkAkSJ9cppc7Y3S88mK7DMKShoSFkrLU0EGrb9suICM6H7gl2+0u9Xj+9YPNs751kgC33NaXU69ur1f/N5jjOF5j5jVM1/6R5cT78tRDiez09PVcVJCqNr0pvb++JRHQevpdCiJXd3d3/b3LAcJpcz5aogb0i0GPCMMQZCHsI7IuwhwALJqprsH8AizGybFEWjiDOLb7v+61+944vGCQ3HR0dp9br9X2IyFNKTQUZ0U723+sdVUuXLj2oXq//LSrNQs3qjhrlKCvqb8iIAij5GWecsXnFihVNHRqQ/t7V1XVHlLreigdhjed5i9p1Q7diAdNtzAg0Hc4/HELj5Cpmfv/AwIBqpf6LFy9GijSwpM4XQiBDKYt83vO8HSwulUrlxcysdQwR0a1hGF4yMDCwJstkcX1WrFhhXXfdde9gZjhux8s41nqeN20OI3mutxhrt7AASSmRAYvSmzhputyh0cBz586dM2vWrF8R0bIJv99ar9fPbca5Ml2s7jjOr6JSKROVUPrx/TAM/4Bsm4nBH2Rmbtu27RghhAMQVCEEypbx30nCHR0dB61duxaHbSOJnBHPFEKcHbEDH2HUcddGG5gZ2dTfycpCl3He3aLb/PnzZ3Z2dmIznJTx9hylFEp4p1z6+vqWhGGI+zRWmPnSIAi+OOXKGiqwcOHCfWq12guY+dnMDIcs4AiQaT0REuBBIYRPRCvDMLxhn332+Z+8DppSyqcJIVDi2QiCYEAptWRPcdwbXpIpbeY4jmJmW6PEZ5RSYImeEpFSohIGFTHTSojojjAM3xcEQYG7Gl0ZBPvvu+++L0YMvxOv103d3d3PzusdMq1uhEiZ3t7eSqlUehEzA2LIyajjZmb+ERF9RymFgF9LxLZtlLkjeWFiJc/3iOi1U5kZvNc7qlpytTWDuq77DiHEp1o1L7A4qtXqL1o1/t40LjbQc+bM+TkzPy9m3SjnfEO1WtUBTuZuskWLFs3t6Oh4NzO/JiWuFHSplUqlvnq9DvrtYSEEmJEaCcoW3nH66ad/rVkHrc4AlUrlTGb+YZQtIcIwfPbg4ODvcjdaMWBhAQMLSClxL75E03SzUgrkG7lmFkgpf4yqpgbz3qqU0uFmGaxqapv09fU9MwxDk2f6TiL6l7RYUpHT4KLIgd+whIyI/uD7PpxOiTJ//vz9ZsyY8XpmBlDw3MQO5g2QFXZFqVT68Lp16/5i3m3Pb+k4zgXM/L2ElV6vlNKV2rXNUFJKYPcAwydWLMs6ZmhoaGPblMo4UVRq904iAiB1Ugnm5FnuZeZvCSH+MwgCZJhlFiklnFQnxQ1Qq9WcDRs2tDQYmFn5PbCjlBKZoXBWxskOtsqpWnpfXx+CFYNRNspUqaGbF46FV07lAX+6GEVKibJtnFcayS5Z6tNF76x6IKD2+OOPIzv0TTkQckxWA5l7H1BK/Tmrfo36RQEjvF93ORMyM97vYLifEikcVW02O1gqhBDIqtJ9ADJrxcw3DgwMINJcSBMWcBxnRldXFxxQcRvj28bGxs6YDITaxJSpu6IskJm/QETAdkojPwCjERHFHQzWh2F49uDgINJNWy6VSuUsZoatUULz/6rV6sUtn7SYoLBAAwtIKf9FCAFGuljJ+8AkpURJLzIWG36Pmy1Zm+ILTbZtryQiZEPo5NaRkZHnN4PpNW/evP1nzpyJw/a/TsyyQml+qVQ6JclpEIFnvxaYlQBdbaHdkN6/oqen5z+LEpH/tTIi7ps3b0a5pM4xGIZhOH94eBhBlikVKSXIR2KzrJFV4fv+U6dUyeTJkUH6FiHEhzI4qCaP/k8iutz3fRDNpHbiRyxw2utKRM/2fd/E4Z288gYt+vv7j6zX64DnKBPRSBiGPwiC4OtZ1mOqgG3bbkQoAIgHZC/Nxh8RgQAH74mHiGhjGIbrLcuCI++2djk+pJTAIIU+cfIupdQnTdfaina2bZ9ORIDlOLwV4+cw5jeVUvimZBVyHAelYicREe6RBdE12Te6R7aCtRBlYhGp0c2HHHLIqun0XXEc5+XM/N8aA/xQKYUqkT1CpJTPJ6L/SMhGbHateMd+JQzDd4IIqNnB0N+27Ytw/ooZ606lVJ5Bu1QqF46qVObKp3GlUnkrPJT5jLbrKMx8/MDAQK7e1lbpOk3HpXK5/H0iemkj/Zj5l7Va7dyJWE9TuA5yXReH60+PZyUZ6IJ6ekT0G6V1I630VM/z/mkwTm5NXNdF5OFzqM2eN2/eYXlhfOWmYDHQXmGBKEqrpcWOsn6wOc5FpJQAcAeQe0MZGxs7eOPGjf/QTIbN7BJmPpmIwHAI7ANg58wES5kQAmnjgWVZK2u12u/Xr1/ftmdbSvkMIcSNCYYaHhsbW7px40ZjcoaE8ay+vr7nMvMrmPluZv5kUrZHdEj9vi6jI5eLvfMgN4CNNUm3Fsw7LYd0HOdSZv58gnIfVkq9fyoXEDnVcDjUHeK/pJRCRl5q6evre3G9Xn8fEcnIeX0jEb3F933teynNRFGZHwJWuWJoMfNVBxxwwCtvvfVWOFmMxQQYm5kXBkHQNEZmI6WklMcw8y2THdREdJnv+9hb5Sa2bR+E6ymEeEWEUZNmbLzPr8SB0vf9lWk6pm0rpRxNgJhoKhMGWDiWZX2cmc+F3Zn5fsuyvtnV1fX+NKVgCCrj2yeEAHYgyvbxNxHjbMfSiWgWMwPnEKWlKGkFNtA4PlBa85i2ZzgsgiBYb9oB7fr7+3vq9TrKKi/I4IQDI+kPcY+0skzMZD2ANOjq6sJZQ4dNiXK2C03Gy9jGijJgEQAHJhSIpa4Ow/Atee6FovsZ+KV4rtslG+r1+pl54Pc5jvN7ZgajdSPZqJTSQizgOSSiZzLz0/CujphtsQ/FMwBcZGTMgyH+5n322QfkWXCyGknhqDIyU76NItwjPLwoIWmF/MzzvHNaMfDeMGa5XP4IETU8OILJj5lPS/MhbYfNlixZ0heG4TVCiHlNzDe8bdu2E6aIvQTOQWR5nUZEp1Sr1RuaWEfRtbBAVgsgywBOIR07a64RQCklANwB5N5IHlFKzWn0QwTifikRIaUezikTQfnZ9cz8mSAIkhxIJuNp2ySk/KNvHayJvu+vbnqyjANEpYnA6ksL9J5xxp26/SUMw+dMhyyhPBbTzBjINt+6dSuA53UMtHf19/cfPZWBjAhL6VbdWsMwPGt4eBjf41QipUTZMbBtJu/NN3d0dMg0GGtxE8NJNTY2hvKRVpUU/5mInpOGqU9KiTU3DAyOr8PAYZ/K1hMbSynxLoRTfbI80NPTc0geGSpwcN5///2XMzOytnROTtN1XF+r1S5rRTlk5IzdiRV3slLMfGEQBN8xVXZSO3xnscdrZPO2Yl9F4NFwDB1BROMA1+P/4nAO50YzZ+WXKqV+ZGKnyOmGcko4qXZxtpmMMaENE9FPiehdSdnEKcc1bi6lRLZmUnnoG5RS2ix24wkbNLRt+z+IqBGW2i1KKTCrNy1wdAshrosy3poeL+UAcEye1cx+DvjZzIzgSxz28S+VUg0ziPv6+uYz82XMDMKvhnvVBuvZwswIDKKkMNGJ28zDl9KWRfOJFpiQQdIKw4TAR1i1ahVKDAtJYYFyuXwhEQFzoZEMj46OHp/HZjGFSsZNFy5cePCMGTNwCK0Yd/q/ho+XSqXybbfdlvjSyDC2URccvPfZZ58ndXd335HHxtBo0qJRYYFJFjAA/t6klIrDdktlT2AZbN26FVFyZD81kmoEIvzEb9Eh4q3RBjDzgYeZryGiS5RS96ZS2rBx5HjA2GCziZNvKKVAMz4lIqUEoypwyeLs3w69NqF82/d9kLrs1WLb9geIaIXOCJZlnTY0NGTC1NwSWxrouK2zs/NJGTKuEflH+VtDpzOeVd/3v9rkojAHHGgvaHKcpO4/UkppHU8TB5BSAkwfGTFxMqqUQjZMU4RGjQZPYnvNA2vMcZxDEEg0KIFOsuvk38EQ9o7ooJ+65DJusujgqi0psizr3KGhoUws49F792cx828FK1y7ShyTDI7EgkceeaQXTghmdmHvCQRASd2Bu3rS8PAwGHy14jjOU5j5WiEEslHyFODNvsn3/bhzTZ5zPTFW9P3/uxACDH9xEnZ2dh61Zs0atMtdIrZhlEU2ImhAll3Z933gnGWWvr6+48Iw/J9WwfkYKvZYGIbPM7nPYt6BILKIDb4g0zkIgh0kXOOCbLnu7u5PMjNKW0uGek5uNgb4mm3btr1306ZNeJc1lMJRldG6zXZbvnz5rC1btuABalVt9ac9zwPgZyGGFli8ePFxlmWhZHJWgy5bS6XS4ql05JgsA1TSM2bMAJaBbtO3y1CIOFSr1c+YzDHeBo6lWbNmYTP6nCiSgEg40sXhmccBFaxIK2fMmPH7tKUAafQo2hYWyNMCtm1/lIjeoxmTwzDcPw9sgGOOOUZ2dHTEYsER0fd930f6/w455phj5nV0dAB4HRvmpgXlFkKI85qJxsUp4TgOsOd+rlMyDMPjhoeHc2UUNTWKbdunEhGioA03sbrrH73fwBD5cNQO3wzgTgLHIQsjqwrDcFke95Tp+qdjOwB7l0olZFXFbnxRXhYEQSPigbYsSUqJDT029nHyC6VUakeQbdvHE9GfNON+VikFB3VmcRwHTLstI/OZpNg5Sqk4Z8QTTSN2zcdi9l3j7RJLT7IaxbbtdxPRxzT9T1ZK3ZR1/Ag7D9c1K+OXydRfVkq9MS9H3vz585/c2dmJb0OsNOMwtm0bTGJPfNcmT1IqleZPN8IJKSUqYOBISvPtBQEEymu1TkTYe8aMGX9m5mYqIpLuk39XSiGbLzeHpm7CBMyj8a6/VUrh/NASiTD4Ys81zPyyZtgZo0wqPNu6LOC4tf0T0ARCiAeANxbtQ54cVcXAKZ9WsBdZqpQC1mMqkVLC2QQ8voYymcE2ykIHxnEuVWHMfDsRnaWUwrd/FykcVakuZ76NXdcF6CtqWlshD86YMeOIwkFgZlpEkLq6ulCCA7DCRnKZ53m5YhWYaZa+1ZIlS44MwxBYU6YvzztHRkYWmEawkNGxZcsWHOQRWTLJ6NhRM8/MXx4cHLw9/YqKHoUF2mcBKeXZQoifJsx4fB6sK1LKZwshfqOZ69+UUsCwAtglMKgQwTZ9rk2NNkJEL0rLtpc0uIHDb0gpBSD5tktvb+/CCJxYl+01US9soH4UhuGvSqXSqriypojtp4IS5girIg0A6c+UUi9q10Gi7UY3nFBKCeehztEz2tHRcchUZDZH+EKbdY60rBh2juO8iZmB0xgnVyqlUF6RSSIctsCwpAjZNDcyM0C8H2BmvHMQVMWhUpchMVG3m5VSjUq7dvrYpbgAACAASURBVNK/t7f3aMuykrL/f6OUem6mhSd0sm37d8BWiWvGzKcGQYBSyUwipQTg+OWZOqfr9DWl1OvTdWncOnLKwBEfKwCB933/lizzSSnBOB2318aQTTkHs+ik6xMRnoBAwbTEHsN9s7u7+1ITLB4p5ZeFEJfkrffk8QDy7fs+9u0tFyklHDjHJ9xDL/d9/4pWKZPkEG0Gg27BggVPKpVKCFrMN9T/QezfwjC8tlarrdTgjqIsto+Zn0tELxdCLDYcH82GOjs7l6XN5rVt+/1E9MG4eSYSWTiOc0mEJZklIKdbyt8sy3pWozLVwlGV4g7IuynoIPfff394P4/Me2yMR0Svq1aroAUtJMEC5XL5u0QUB4I3MHv27GW7UzlauVw+h4jApGciAK/8sEnDpUuXHhSG4U+ZefIGFFTGVnSIxr+NBFGD79ZqtffdfvvtiCQUUlhg2lnAhIFKCPE6pVTT71bHcS5g5jj2TZQNnDc8PHyl4zjPisoCskTaTGz8OBGdlCdWlJQShztdtDQz4LTJguLaRKUcA4asPMCSfG9/f/9VaXGRokyRlwkhPiGEOMxEZ+CNtbtEw0SvdrYxdBTn8vylXZdt2+cjy1HTjzs7O5+SpZRFSvlFIUQsAHuzmWS2bX+FiJIYdbeD+ry7u/sLjQ7YwNARQrwwIgNKqgaoEdE+SQGwKLMxqZQzNyfM5GsnpcTeJZaFm4ie1gxwuZQSGbMAxm+HvFUp9dlmJ4oyG7XlWFnLpqLSdZT56LIml7ciyzeLXWzbPoGI4KQywt+JQOFf7/v+1abzSSlh66TnyXQ4bTsieq3v+9/MZbCYQaKSO5Qx63wMI5ZlVSzLunft2rXIBso908u27dsSym0vV0plyjCVUiKYiaBmksBB9cGurq6vmzgtG7yfEMyEjouSJsLvKKULggDkVMYipUTCDBJnGkpnZ+eR+KbZtv12Implwsb6jo6Op00OQhWOKuNL2ZqGlUrlYmbOjUFqkpaDnufFgfS2ZkG74ajlcvkMItIBnz7d87xMkaO05oiylVBWAC86opj4s5j5AVDQMvMfBgcHG6ZHTp7LdV2kKZ9uoMNCz/MS2XRc1wWDw+8nAD+D2QcR4M97nrcD5wYlrY8++uhy4GkIIc6KmfthInpZtVr9pYFuRZPCAu22AHBcwEC3j2bipstwMLZt228koi/EzROxsIwSEbKumgVXTbLjpjAMF+ZVfialBLtgLCh9k2C8SWuJ/V1KCcZdkxKqL82ZM+cdzWYlR1gOX2dmZEslyYOlUslZt24dsnb2Solw2+5KwPxoaclInOGllACPfqXmwgwqpTLtuZKi/8joS4P7NFHHqPwMGTK6d8hohHPyh6QbD+PNmjXrR8g20rWt1WpP3bBhgzZbyoTtkZnfEwTBx5P0Svs7nNYPP/wwGKliz0L1el02w6plgL81UW0QedxHRJ3MDMeFScb6xP5jYRhWmi2njvCStPvMMAzt4eFhZEalEsBT1Go1wEPEChE9w/d9QFhMqUgpEWhB+apuL/CEjkR0rWVZF6V9f0spgU9omrCAbwP+UG6OAMi+KY0EB9HCvADWkXAxY8YMycxHExGqOY4komVCiLRA5Y8IIe4ior+GYfhXy7JuZ+bblFJw9GbCppNSAnM3lq2Omd8eBAH2A6lESomkhu8adPp1qVR6Zdr7YfK4+CaOjIx8iJnfaQDsD1udmCbjX0qJ4Mv5cesZGRnp6u7uvpCZAXrfUr8RniHf98+cqEtLJzS4iHt9E0Sourq68LJPUyJgbDfLsk5ctWqVDvfAeKw9sWHkfAHtc8NoBlj+qtUqPNotlcWLFzuWZaGcDo4lOITiBFGHq8fGxi5es2aNFkOgUqksZmaUM+qe863z5s3bzyRboFwufyNiGINu+Hic6XkeMg4aSqVSeTEzI60XUdjJUgezied5SXTkLbV7MXhhgUYWkFJWE7Aocjko27b9NqTjxz7szGeCZjqi3E66WAChRXbAvcyM5ws03dj8psnC+opS6l+SJkr6HZvXzs7OWHDMqH8u5ZNJukz8fcGCBXapVIJTXotLlXUDq9GFbNv+LEBtDfT9nFIK9PV7rdi2/Ski0pWogC3yCN/3cb+3S+DAhrMnNvtGCPFhpdT7syhk2/bVRLTTBn3SOD9QSiFDL7UYHqyeKDM2mSACS0YmVOyBtFQqHZJ0SHMc59N43nRzNoslEzc2GKvCMEzCdDmsGcIJDevYuFrYS309DMOfT2b/hENwxowZzyciYLIB68gETw+He5RcZTrcQymTrOLxLAuTe2Vim6gEVUscwcwnBkEwpeeWCGMRbH0mRBvAZn2nUgqB29SZQVLKryFLW2PL1cz8DcuyrplMuhE5/hBsx34bzGwmwNa/U0plOddYvb29ZZwr4QyJAuogljGZM+2tMt7+YWb+GTJZlVK/S2Pf6H2tw1FKnYEYsaYCXxr7K518p7+//7UmZytTw0RYUrhXknw3NymlTjYd13GcqzSBtO3M/LwoWGry/oHDEd9JnE9RHnhEhGWVplTwlUqp/x7XP2mxpuss2jVhAdd18YLCzdcK+bbnea9uxcB7wpiu62prw1HiNjAw0LLIzoknnjh727ZtcNYgShtXMreLqYmoevTRRz8t6SXoui7A4RHdiJNNnuclMphFjjQw8+CdUUfU3wRYvlwuv5yInnjhTFIC9LlnV6tV4xTpPeGeK9Yw/S0gpcQ9C3yAOLlPKdU0kKQBkC8yFXXzINPyh2EY/mThwoU3TX4fzJ07d9bMmTOxib1Eh8MyYZFwABzn+z6c95ll4cKFR4yNjSErJlZaSTcfN2nChmxHNyL6hO/77868+PiOwJ5ARk5cifl4T2SqPrWZw3ELdG/rkH19fU4Yhtp7MGKyis1GzFth27ZdfHd141qWtXRoaGhVlrmTsJKEEN9TSiXdOw2nNsjWenxsbOywjRs3IpPUWKLMGzhaGmWcbFBK6XCIdszjOM4VcEQlTNoSp3Zvby9Kj7TXq7u7e58sJTvj64kY9LAPm0xwg7Kkj/m+j8z3RKdSb29vr2VZADw+KekCjZeMJ7WL+z0i7YgNQqJfR0fHgVlw4kyebWAbpckIybrOuH62beObCegMk8M1WFtf2kx5KIiJwjAE+dBTJ+l0MxF93Pd9OIQTHWC2bR9LRCjrS2T+hvMhCAKw1SUKAjyWZf0LsCzbVaIYo9RtzPxWUyemlBJYe7EZZ0T0Zt/3UwXLpZTvFULswA3VyC/6+/vPTDqfJRq+QYOk4OZ4lwjvCRUwieI4zjXMDEd4I6kJIR4SQgDovaEQ0R1ISrAs6ydDQ0O74BBH9zcytlDablIGfc+cOXPmj2ezF46qxEvY+gZI6xNCAOSyFYwPj3d0dBy2cuXKVBuQ1q966mdwXfdYIQSoSRtGA4jo1mq1ekKrNHVdFx8lOGlSMfSN68PM5wwMDGhZdSqVylsjPIm4ZQx7nmcnrdF13Q8JIf4tavcXz/NMAQRFpVL5LTM/K2aO+8bGxuanBf9L0rf4vbBAMxaQUr4P2RG6MQAwHAQBHEWZxXGc9zDzRzMMEBLRZ0ZHRz9keLiEkwQYBMAXaMRqOlGFpkCbMVAS5Tuc3UopZFomHtAy2KZhF9u2FxARvrO6fc+fenp6Tm4VHmFUaoRDq5aCHJgWvu+vyGvtu+M4UkqwQeIbHSe3KqVa9n2ePKmUcuI3cBedmPnvQRAAbDnxQNloQQZ4Kt9VSr0qy7WUUuK+79X0/blSygRvZZchpJQoo51cPlPD/iQIAjhhtGLgoEP/prKa4hSIsP9+q1FwLHpPJS1D+zucVUKIFcz8dGYesizrCt/3kR2SSiJ8J2T5nJPQca1S6ris96JJptnY2NisjRs3AtMslTiOs4yZ8Q6MlWYcvqmUadA4uidA6JD0nUTvm5n57Gb3ARgoyp77cFQ2Bxa072YBq49K8a5OKssVQvxJKYWsqFhB2fqsWbO+SERwMhgH0pu9Bgn94Th5zcSMm5j2yIBFW933/o1KKWNCMwT+urq6gCcWC2mAjPZ6vb5w/fr1gD5oiUgp8Q7QEmsw8zVBEMTBr+yklwGBSdw6kMX/0dHR0f8weRdE9kMFQSwe1oSJnsh2KxxVLbmN0g9aLpcvJKJvpe+Z3IOZLx4YGED5SCETLOC6LqIJsUwyRPSqarVqUoec2q6LFi2aWyqV8LGeWEZQBwYVEcEjjRTLOcApICLgVTV6MX7F8zxtmU6lUlnKzCs1Ct7teR5SM7VSLpeviqIpaPeY53lgyzLakFcqlSSa+jd4nofa50IKC0wLCziO83JmjssE3KEjNpS+7yMKmlky0sVvY+ZzgyDAZjqVREDViBTrvv21MAyPGh4e1rI+6Sbu6+t7XhiGOgy6fyilDk6lfJONDUqMkE1WyRNQvpHK0UENZS26jf+dSikErtrmyGvSvLl3N3AWZwYuz6KslBIlo7EslWBCCoLgzVnGRh8pJb77sQ5MZv5WEASvyTK+lPKxBJyd9ymlsjjMd6gjpURVAGAL4Hwejg7ZCAImigHYOJxFcBrk/iwYAPc/oJTKm2U10Sa6BlFZNRyAOqIKDJGZOS9y6uvwp2pKKZNso12WIqUEEc+NujUycyUIAsBWtFUi4HSQgCRiUqEUbXR09DUmB/S2LgKYBa7bvXXrVuBaah35OFvEfe96e3tnl0olZDAlBrLbvT4EuizLchtl74zrEjlFkJ2sk39VSqGqxkiSyG+iQV6llGrJuXFcyfnz5z+5s7MTwYcDNYrDSfcUk8zsFMDwT0yHwAwzPzsLTp2U8t+FEJclGB0ZuQiucOGoMro9W98oAtFGCnUs8FsTWtzmeZ6u/KuJoXfPruVy+VQi0jHNPDhjxowjmgXSbWSdZcuW7Ver1XBQmZhJdX0YhpcPDg7iHthFXNd9CijPozri5VFK8i2e52kBCwFuvmXLFmxS42rIx/BR9jwP/8bKZKceEZ1VrVZ3AaBHKePIyMiZAwMDT1DORjhsiC7EAYP+wfO8WHro3fMOK7TenS3gOA4i3zclrOFspdTPm1mnASX95OEB/PtCpZQuC0Crkm3bHyUi4OHFChG91/f9j2Vdm5TypUKIH8T1R6q47/uTyxyyTpfYL2LgQxllbPq6EKLpTLJERaIGUkrYBjbSXYNpAShsuqa820WlTtiMxwozXxoEAdjyWipSSuzLAMyrk8yOAQxqgIv3DaWUDsemoW5RFt/WBDteGAQBylLbLlJKlJXoGNXuUkohUy13McDu2qSUSoRGyF2xhAH7+/t76vU6HEmxeKZE9G3f9zPBfkRYfkqjxiNKKSMWvMlj2LZ9PBFp8ad0DpRW2TrKAkaWm8m6PqqUQoWBUbC2VTrrxo2Y93ANYzEqdc51x3GQAfiBqdDdcE4tZl/0zYezRvf9uDgIAuMkDikl9l1x1SGYZ71SCqVtuTvVJy9CSnm5EOKTuvWZljaa7EcmzQPA+2dNxtQzvG4iujZIFNHZEgyGpwRBcEPhqDK1bBvaJeD5NKuBEbNbs5PsLv0rlcqfmBmAk3ECJrvM0VGdHSqVyheZ+QkaamZ+78DAgPGhcPHixYdZlgVQ3pM8z0vEK3BdF+VJsZ53ZnYGBgZ0mxJEaAASOREIGBvfLyG9NAzD+0ql0oER4N4bhRA/9jxvJ5rtcrn8RyKKi+486nkeNgfT9qO/u9zXhZ75WMCE9Qjpy2micY00cxwnFesrEb3c9/0nnMBZVhsdXEEdHQsKzcyrgiBYmmV89JFSAnNPd/D1lVKZSp6z6BRFyv+YsKlrm2PIcRwQXQwkbKI/FgQB8DD2WrFtezUw0zQGyAoKnMqmBoeCzf39/Yc3g0kipbxVCAHG34YCUgXf9y9Opfj/YkA9hZmTmILPUUppYQTSzmvS3jDr4c8ROLjJkKnaOI7zamYGpk+crFNK6cpPU82XZ2MDrJpHuru7n5wUhIz5LvUxMzBJ4+RepRQY51KLCS5YGIbHNctcmEaxCDfrhoRABoZkZn5HFqa4NPrk1dbA2YTrCCKpXfbeWbJs8tLbZByU8fu+r8U7klKCVEaXuXyRUgq4b4kyf/78/To7OxFwj80kNHUMJU5m0CDSB2WIOmbQXyqlALCvFQM224n9t0XZbA2TKpLmGv89wlNDFnGsH2rckVo4qkyt2oZ28DLecccduHCt2MC3zPHSBtPkOoXruqcIIbQgc2EYnjA4OIiNY66yZMmSeWEYwik0zoS30fM8AI6mdtIgBdwk7dh1XRxKY1klAbRcrVa/qluo67rIyNPiCoz3J6JTqtUqPvpPiOu6iFpcpJljjud5YIsopLDAlFsgivgAf0PHZvORKKqaWV/bttOUfP9YKfWSzJNN6Ghw8AbRwWFZWdVs274oYiuMU3dQKVXOYy0mY0gpAX4a6/RpFl/IRIfJbZKcMM06C7PoNN36GADXAgvpkDwwYnRrT3IiCSGaZsuUUiKDU5chnWkOk2wwInqJ7/s/bvf1dxznEGZGpmOsANTa9/0Xt0I3g/dUy5xkza4H2LaPP/7434lIV0KdKcsvOkQCIy5OMmea9fb2LrQsaxfA5YkTEVF/s4Qepvbt7+9/ar1ex7OX5HhDlgwwjYxLxUx1aFW7iKEOJfyA6mgocdlrUkrgzgF/Lm/5FGABSqXSw9G5Z996vX6oZVko8wIIPN6BupK2cX0S9xBSSjAPx7I2gsXc930jyJ2+vr4Xh2F4pcYYwA09POueKYuRHcf5FjNfqOkLDKkDfN8HK2WsSCmTzmcT+74lYrfMovJOfaSUCI68UHNv7si8LxxVTZs63wHK5fLZRPTTfEfdMdo/wNaQJbrSAl2mdEjXdVGDrqvvv8vzvKOyOI+SFlapVD7DzBOpx9d6nqcF1k0aM+l313UBpB/rdUcJZLVaPc1gHGDivCChHdazC4in67ofF0K8S9MXkb+WgQ8mra34vbDAZAvYtr054RCQqRRn4jy2bZ8TsQslXYAtzHx0XgfyCOPgPl20EWXGQRBk+hbZtv1GItIxsrX1ACilBCYKsFHi5GtKqdcnXYQ8f7dt+wNEpANM305E+yVtMvPUabqNZYCVgxSHlpat9fb2IoMZkWvdfvm5SilgwmQWA1DxLymldspUNpksKhPDs66T3A4fJjqNtzG8vl8IgmBiNneaKbRtpZTA+NThY/5WKZWEBZWbPmkHklJ+Vgihy/xHiRqIQVJJX1/fcWEYrtZ02qiUygRTcswxx8iOjg5tNkatVnM2bNigzfJPtaCYxlJKMOqiDDE2kBt1BX7hRaZOjTx0y2sM27a/SUS6EtB3KqWAGbSTRKWDwLeNzbyOOjzEzIOWZQ0ysyuEADRJrFiW1Tc0NKS7/pbjOCcwMwDcARjeECOOmRMzjpOw+dJ8OwyetapSakle181knN7e3jMty9KyppuU0dq2/SkieofBnLcppZD1mzqxotHYtm2fTkRJhBuHFY4qgyvT5iZULpdXElHuNzwzAzso6aZo83LbO12lUulnZoCixgoRfbZarbYikoASOuAKTKRsfnzGjBlPbgUWFhYYgbYjo2qiYGOGD9d47XpYKpXm33bbbZPb7dRpyZIli8IwxIdrPBtssg1Dy7JOXbVq1S74OeVy+T1gh4gxem327NldrWLaau8dVsy2p1ggCTxZCGGUVq2zhwHr1I7uzJz7Yc2AZexTSingIKQW27bfTkRgGIyTG5VS2g1t6kk1r3QpJaK3uqjyJb7va7NKc9Rnx1AmOGgmm8y89Zpu4yWBjIM5VykVG5Vtdj0RW6aOGeqBnp6eQ5r9fkkptQG0rO8AYEQyM7DtQNASJ/+tlEK5blvFpAwMAS6llBaLJavSjuNcivISTf/MbIhZdUrTz7Ztl4iqmj6/UUrFEgbF9UsqTTYpu4ob28Q5GYahnQWkOY3tUAL/0EMP3Whw1kK532uCIPh2mvGnS9ve3t5TLMvSVZD8VCn1okb6wsldq9UuIaJFzHwoESHL/G4iQlnoEDOvVko9UVYspcT5EqQKcbIlwjYzwnCK3l0oXUPWEILp42ePm4no+b7vA383VqLvvg7H7RW+73/P5FolBbuY+atBEFxiMlZebcAUOXPmTEC7xGb+m2SNSSmBtwZW2yQ5Xyn1w6RGpr9HGX/QPzbrTQhxduGoMrVoG9tVKpXnMDM2LXnLlZ7naSkt855wuo3XAGtpFxXDMDx5cHAwCUg59dJinEZgD0ssvUs9WdTBdd0PCiHeP6H/2kceeWTJnDlzPs/MEzMIvut5XiL1daVSeS0zI010ct03POyXe57X8HDqui50gC6NpOVZZVntV/Tbey1gkOGATRoYOTOL4UEtZGYZBEESmHMqPaSU2JhggxIn1yuldJvO2I62bb+biHS4e79WSp2aSuGMjaPSjo267nkwOKZVL9qkIds1FkNjqkqy0q6lle2llJ8QQrxTM8dId3f3kzzP0wKGZ9VRSoky9pM1/b+ulNKVtRtNbdv2L4noeZrGn1FKvc1osEmNDJzuD8+ZM+ewVgXM4nTu6+t7ZhiGALCOFSIyPkymtY2UEgFJlDjFSW7l1ml1M20vpUS2XFzWy4MRa2GqDAgDB9iQUiqWAVOnu8n7uFarPXXDhg13mNogQzuSUv5ICHFuUl8iepPv+7rs4KQhpvT3CMYAgZp9YxT5m1IKFSRNi5RygxBivmagm5RSundpbFdgMs2YMeOUer3+6KGHHnqzSWBASqnF5xVCGDtepJSAJplWwS4Yy3EcpWNmJKJP+L7/bt3FNST1ubu7u/vovKuykgI0IPYpHFVNP5qtGcB13T8kpVBmmHkbaoFXr16Nl9ZeJ4igjI6O3i2EOECz+C1CiIPyfhgxnwYb61HLsk5etWqVLtU69fUql8uItgFAeNxb/SAzLxsYGNi4dOnSo+v1OhiVxiMUOAw/Z2BgQIvdBSXK5TLSNXEIBcgoWDVuwX9Xq9XY0gfXdRG1vDRmEZ/0PE9XFph67UWHwgLNWiCJCYWZ7w+CICktXquGSXS5VVhFBtTsYLABbkRqSQJxBQlDEARnpR44Qwcp5bOFELqyrNqcOXP2a/chHUuRUuIwpmMVe5tS6jMZlr3HdLFt+2Qi2gnzsMHiXqCU+kXei+7v7z+yXq9v0jkTLct61tDQUOJ3M0k3KaW2tN6k1CVuDiklskGSAlENS4CS9G7mdyklMuG0IO552beRnlJKUKTvUvY03paIvu/7/gXNrLHVfZOyWDo7O49cs2YNSleNxXGcpcyM7PmGwsy3B0GwyHjACQ17e3uPtixL64QKw/Dw4eFhYCu1RJIwCydM+j6lVFwlQEt0a8WgSdlAIyMjB2zatKmpc2FEjKBjGEdmeFuzjqSU9+sA8onohb7va0vncD1s2z6IiLTQJFMR7Ir2ED8RQpyjuW++p5R6he6+sm37VWAJTbj3PqeUmghbk8utKqXE+xfv4YYCvQpHVS6mzn+QJUuWnBCGoZalKOOsF3meZ8RykHH8adutXC5fQETaNE8coAYGBlpygCqXy+cREaI4jQTe+nd4nveNPOp/K5XKmcwM1q1xql2ACj7f8zw4QHdIg2yruzs6Op62cuVKo02N67rdnueNmOhbqVR+y8yNqEgBhivhPJu2N06h2F5pASkl3pOv1Sy+ppSKZYAxMZohfsxnlVK5lyIbAOZuU0rFUlvr1uc4zseZWed8vlIp1ZbsXgPA+twiyibXfGIbKSUOg7Hsisz86SAIYjdxaefbHdsDNHrr1q3A2Iwt4chaFpdkjyRHhhDiHqXUkXnQkdu2fTURnanR6f1KqQ8n6dzod9u2X0REVyX0xR7hFKWUEWlKFj0m9zFgB8XhdmEQBFq4hqy6GGR+fkcppQMrzjr1E/1wf2/bts2p1WpHEdEhRIQ9G85mj1mWtZmZNx588MHr4jJIkrDumHl5EATA6DMWKSVwaHRkQp5SCsDXqcWEhbKjo+PAtWvXPpR6cIMOJvdcNEzm0ncDNVI1QQkcSLaY+ShmPhgA2dEAwK5ERt2GY4891o9jHbVt+z+ISJeN6SqltCy0SQob7CfwLL+9nYyJUkoQNRwSpzuYyoMg+J+ktRlgtgnLsg4aGhp6MGmsvH+3bfsrRBTLBsvMvw+CoNHZ6wlVDIKWIgzD84aHh3Vg8pmWlkRoQUR/KBxVmUzbnk6u65qAV6dShplvHBgYaBc2SCrdWt3YdV08ZFr2GCK6tFqtfrEVuriui4hmktcaDhs4q64/44wzhlasWGFUyw19Fy1aNMeyrOcS0RsnsQeNEtHZ1Wp1p4gzWAP3339/OEMBgDguQ5ZlPXvVqlVJ4KvGJooy2ZCC2+jQ+2XP8/7VeLCiYWGBNlnAcZwvMDOepVjp7u6e0Uz2ZXQIB+5D7LfYsqxzh4aGkg6Zqa2C5/Lhhx8Gdk3s3GNjY/tv3LgR5WmpxIAxKDHKl2pCTWPHcd7DzLqo+FqlVEsJLeLUcxznV8wcWwLZ7gh0XjbPexzHca4CuL9m3MzZfzpdpZQ4vOnKe3NzIifRwRPRZb7v63DfYpcSlZni0KajMkf/e5n5hCAIkEXWckk6pEAB4GeuW7fuL61QxgCbpWnCjEZ6L1y48OBarfZSMF4xM5xCSQEBvKeRVfijsbGxH09ke3Yc5yxm/nmcfYjotb7vfzON/WzbPiHKxo/rBlBlMEGnlgULFhxeKpW0wdA5c+Z0tyLDNcIFRHatDhMHDpUrgiBAFkqqksnUxtB0AIkDEZ1PRAicI5ih1VkIgWoQZHb+oLu7+6cT9yVSSqzlu3HT5eGEcBznPGaOC8SPT326Uur6PO2U8P7GfXa4po0RK6bjOKcxszZjt6enp9OkHDHvtScFBU0y8k3wMuv1+hHr169HRVKuYoChtq5wVOVq8nwHi8CrPV3aeYYZOQzDowcHB58AwMswxm7XJXLKICqbtFGTnuehJC53Wbx48XGWZaUpE2Y9EgAAIABJREFU70OWFSKJuFZ44SLChAykLUSEj1Y3Mx9IRGAsQV04DluTAVMfI6Jz4sryFi9efJRlWasmpcf+FZHdarUKwMSmxXVdlPw1AiwdHhkZqSQBIjatQDFAYYEMFjBhQgnDcL/h4WFsEDOLlBIp5QdpNpEtA5ZNwnDIihUipYSzX8dQlguuj4nRHcf5GDPrMBr+pJQ60WSsvNsklZcKIaYE5DrvdTY7npQSmY3aTPCs92qcbgsWLLBLpZKWeSzPcg/btq8kothAGjNfGgRB5iCaQVbFuCng0MKBsqkMC5NrbsC6h0h+y8rAHMf5IDNPxPCcrHaubKCRkwZMny8XQswysVGDNvcBauHggw/+Mg7GfX19S8IwvE0zVupMPMdxTmLmmzVjZn5nOo5zCDPjHosTVkoBHDpXJ1GEjYVswYYscuPKIINDCPG8qWJbtW17LhEBP/IlGuIi7a3DzDgvfCgIAgS9QwPSlrcqpcAgmVkMCFTwLB83PDy8JvMkKTtKKXF2ekpcN9P3d29v77mWZf1YM/2IUqo7pXq5NJdSAr8ROI5xkogn19vb22tZlu7cC6y72D1qMwsxmPu+wlHVjIXb0LdSqfyQmfHCylPe7Xme7sbOc65pMVa5XD6ViH6VoMwDnuc9Oe8P5MQ5K5XKL5Fu2iaj3BOG4VmDg4M6VhgROUQRiZmI3YUygHd5ngcHU+YNw+LFi0HtjQ3vZCyfzUKIEz3Pa0mktE32LabZgy1gADYuxsbGDt64cSMc4JlFSgmqZhk3QB5zxI0tpfybEAKlS3FyrFJK67AG80wYhts3bdqEd8YOkVJ+TQjxOs24/6WU0marZTbopI5J2V3M/KsgCMAo1HaRUoKYQgfE/SOlFDIv9mqJDvh36bL/4BhVSoHRNhcxcGJsVEodk8tk//vMIBtBVw77OqUUDp6ZZOHChUeMjY2BkCEpewfjA2vmpa3OfjBg3RN54OfEGcy27Y8S0XvifmfmbwVB8JpMBt+5E8C7kTkO9sJ9chgPQwyGYXj+zJkzHx8bG8OzESepsWUMHFWZM6qQTTY2Nob9X5xkLjmPG3Du3Llzurq6/qT7zkZ9h0ZGRk5qFq8p4/XFPfKOiH0tqxNz8tS3hmF4QUdHR1cYhkMavT6ilNIRqyQuyeB9iezIQ9atW6e79onzpGkgpQSTOQL5DcXUcWZQLrpZKRVbYphG57RtDZz9G5RSE5nmd5ni2GOPPaBWq+nKFhPHSKv3ePvou6R7fz1aOKqyWrdN/ZYuXbqgXq/jBaOjFk6rzaDneeW0nXbn9iZsf0KI6zzPO6OV64wymBCp0h0Om1aBiG4CY5RpCV+lUlnMzCg1PWzS5L9BbXuW7KolS5YcEobhL1GVOGnMO+r1+vNWr14NhpBCCgtMSwsYlIyBsfMo3/fh7MksCaxi3N3dPbOZ8kKdYkmMMcxcCYIAWb07iZQS3w+wZaFseCKbEJjXUMqI6GJsqQJwE6IS57vDMNxMRHc3m5kWt04pJZwX/xL3OxH9xPd9bUl45oub0NFxnG8xsw4Dp+UYOa1aW97jSilvj7KGGw5NRNf6vq/DeEqlkgGD1YeVUrpsnLTz/RRU3Jr79OW+71+RatBJjU3eaRO61Jn5fUEQwLmSOVil09eAdQ/BgFkTS92aWX+D91gSo2TTGY3I5u/s7ETZVSsw+R6DI8KyLJT+NTzPRWVsyOAyFtu2jyciOHbiJDPjrUHp38NKKR3hkfE6ooZWBDj//ISO9xDR8c1+z9Mqh/ZRae4PkcmYpX9CH1RiICMV75c4+bJSqikIDiklMrLerJkDmJ7YExjDmTRrCyllUunfAqVU4jkkqUSZiO7wff+pzeqbpb+UEjbXZcOZQBvASYpA4zi51mRVMjumk9Zk4CTbXjiqkqw4DX53XTcJ1De1lkRkV6vV4dQdd9MOlUplFQ5dOvWZ+b0DAwM6SvVcVl8ul+cTEerkYz39TUw0JoT4yOzZsz+Wtl562bJlR9RqNeB4ATNhooAR8MelUumTJsyEy5cvn/XYY4+9jJmxwd0pzRqHiZGRkQunAnSwCZsWXfdCC5gcopi5NwgCZClkFiklUsrjaLIfV0rF0UpnnnO8o5QSTqjYoAURPc33/Z3Yn6KNBbD0DmxagZ0HgJMLTE/AxwNWDspD7gSYcEdHx0b8m6Ucw7btzwN7UKPrL5RSL8h5LUbDGWTRNH2AMFJkN2gkpUxyKqDM/aAs98jk5ff29p5oWdYtGrPAcdNrcsgxNa0B69+LgiDQHTYTpwIoc8TmloaxDSWJr2lFib6U8vIoyyhO97pSKs8g7U7zSCmxR4EOcfJDpdT5iYaNaRAxoV0rhADzaKsEzMtWHERIFgeu4zjLmFkHqp9YThS3WAPWv3uVUpMDppltJ6V8L/bECQOMgHl7aGgIMBhtFcdx9mVmAHqf0MKJETzSBY6AyZXKmTlZV9u2v0lEr9as4RGl1Di5UwuX+n9DJ7H+mTJiOo7zambW4bzles+mMY5t2+8ioo9r+vxZKXV80pgJTr3fKKWemzRGlt+jbxLuz9hvQOGoymLZNvdxXRc1tjgMJYHppdHs/Z7nZWKQSTPJdGgbgXkD7ymJoeuZE1nxWqk7gM87Ojq+wcw6WtFUKjDznyzLemO1Wh1M1XFC4+XLl3c8+uij7yUiMHY1Sj9Gqd7VzDxYKpWQrgl8ne4wDBEBA5U9nIGICk0+xG4C48fAwEBTG+2s62pHP0RO99tvv3mlUunwer0+m4i6mHmHk4GIcIjaHobh/R0dHZthu1aAhbZjnXvLHAYp1blgLiTgOTXNLKi7Xklg0Y1S45PAe1t4f8AJv4aIUM7wkyAIbjKJzhpgjd2slHpGC/WOHVpKCTwUHbnJJ5VSOvbEqVB7Sua0bftkIgKgdKxYlvWsoaEhZOs1JQaHrluUUk9vapJJnaWUvxZCPEcz5guUUlpAXxN9IqweHMjTZK2ssyzr7KGhoVzZeQ0yvB5TSiXhiposu2GbJEdVk9mW5DjOlQkkAJl1T9Hx10qpWMKGRuMY4F5lLgWybXsBEemC5H9VSs1Lsb7Ypn19fc8MwxDPFTCv4oSZ+eVBEHw/jznTjHHuueeW1q5dex0RtQsOpKF6zHxVEARxwTKjJUkpfyKE0J1n2l4eJ6V8WMcWW6/Xn7x+/XqcYbRi2/bLiEiXzdrS95ROOSnlZ4QQb9G0MXIyJQQtW7ZHipz5YI+Pk8cKR1XSHTpNfjcsXUuj7ZDnef1pOuyubcvl8tNRCpegP3d0dMxZuXJlaoarZuziui4+Doj2aGuIE+YYIqKPVKtVYFzkkqK/dOnSo8Mw/FCEj5bk4NOph7KoL8+YMeNze5JjBg69LVu2oOwJh0wccoExBIeybkM00U64TmBWAj6RF4bhTfV6/c9r1qwBu08h08ACtm1fSETf0qliCsaZsNEANgTAUxtKZ2fnvq26L5JK/xoxbpngyrTp8m0Kw/DNw8PD1yTYF7bV4W9kLmNpdp1SSgSgYnGOmgXQbla/6dQ/YsgEHtz+Gr2appTv7e2dbVkWsvlisYSyMKkl2TKhBBhO8WcODw/Dsdm0SCnhEEOmT5rg50OWZb1saGgoCevTWD+DbJd/KKUONh4wZcMk/Los2UjjKkgpcXjEITKN4NAMAGiUa2EvAGcign52E/AfNyilTkmjhG3bLhHpsE3vVEplqgiQUuLcAZKgOFFKKSeNvo3agjUvBh91p+ZE9Anf93VkG82qEtvfgHWyUV9gPCFIDCcM7hHcHwC6RqDYdP+507jMfE0QBGAXzCxSSrD56corM98zWZWSUiJLOxaTj4hmm2SKSilRkq0LsoMAAJmfbStrnPCe0WXko9k3lVIo/dSKbdu/jHOYMvPtQRCkycJNmu6J3w1K/zYXjipjc05tw2XLlvXUajVks+QFxIgsj2OzYA9NrSXSz14uly8jon9P6PlXz/NyieKk1TByelxARBczc2KKZjT+dmBK4SDteR6irLk4qCbrHmXzvVIIAQwXsAqavDNwmLhRCPHtefPm/erKK6+sp7XJdGy/YsUK69prrz1ZCPGqCEtkv5z1HGXm3wkhfrZ9+/afFOWROVs35XAGUTS8Q5/u+76uRChxVsdx8Nx/RdPwMKWUjiUpcY64BlJKOEuPSjO3AQNOZn2ydCSi9/q+H1uybeBYyy2Cn0Z/ZPo+/PDDCIzEljYx85lBEMChUIgQwnGcqxIyVEzwOJI27BcREUDu4+TxMAwPzRtTTUoJTKDY738eTvGJC+rt7T3TsqyrDDLNJ3YDbtW/BkGgs4/xvWpQXt3SkhopZRKsRmonDxYvpcQ7FYyRJsD1aAc2R2Q+NMTLAYbR6OjoSUQErD3gsJnsw8avQ+rsP8dxgFmqY328Ryl1uPGFntAwwjfcBfdwQpOqUmpJlrHH+2BPvXnzZmRWJmU9XqeUgoOm7Q6GiFUUDHiJgWA4CoQQ/8XMvx0eHgZA+C4CBzsRYX/6hgwZWk2XvxuUsbf0WW5kEyklsrDjvq+hUgq2T7z2BuQCLSV90D0LUkqQ3fTFtWHmFUEQfDDpeZJSfkcIgbNeI9mklDo6aYwsv0cO5bs1ff+a5mWXRYeiT44WqFQqH2XmWIaSDFN9xPO8ppgeMszZ9i6u6yax6UCnqz3Pe2HblZs0oeu6iJwh2nlShGEFtjw4erYIIfCBCojo5q1bt95kEgnIcz2u6wJvahkRIfsL2UMo+esgIrBF/JOZ77Ysa9Wehn3mui6AoS8RQrwp4VCfp7m3MTOwQf7L87ydMILynKQYK94CBkwv6Hy8UkqH5ZFo4qRoXb1el+vXr9dRByfOEddASokIfizt8NjY2P4bN27cKcs0wtTAgWpKWG4arKXW2dl5+Jo1a+5vtE4Dx1p9zpw5s9ud8WmAAyNaee0z3zRT2FFKCSZJMErGCdfr9SPXr1+v2/hqV2Db9p/hFNI0agnAvZQSGSzI0m0oeeDhTR7YcZzTmBn7ozTldSiVuiwIgv9o9lYwcNLnDay9k8oJ+IBoO6iUSk08JKUEePorEuyzlYje6Pv+t9MEGm3bPoGI4GA81ND+v1NKpcLI6uvrOy4Mw9Wa8f+plAJDdmqRUgID9VZNR6NSJd3EBuXeCDIFo6OjyyZ/31IvKGMHKeXPhBBJZw58ey9WSgFo3Vgcx3lW9FzHftsnDfYzpVRTMCQGTt9HlVK6bFjj9Rk2BIi+Lkhu/G7p6+ubH4ahFnQ970CCyRpxNtm6dStgbXTBrgtMyloTnpmHlFJ5Y5LuWKJBKfC6wlFlcjdMkzbANSqVSnekxBbQab/B87xmSs6miWX0ariuizTjpDLHD3uelxuDz25hmEJJrQXwEWBmRKdAGdyy8oOky4AoGhF90PO8pjJ3kuYpft/ZAlJKpEsj4q4TVymlizwnmjUJuJmZTwiCQLexT5yjUYOIjQrYAHH7gFp/f/+sRhmRUfnGf0UR6ynfR4RheNLw8PAfG63T4GAk4tgNMxnWsJMBCCo29ij9SYz4Gk652zeLGMNQ9qK7516nlPpGlsUalCXhXjklCAItVlbGubWshmNjYwdv3LgR2cq5iuM4i8IwvJaIjkgzsGmkXjem4zgvZ+b/1rTZrpRqhJWZRtXYto7j/IqZY/GbsrB5SSnhQEL5ni5T5lHLsp4xNDSEa55a+vv7j6zX68AZQyBTK1nKF23bPpaIkO0TJ1uVUpmqO6SUgEpAxn2cXKmUysyQGGEowgmke0c8ZlnWsqGhIUAvtF0ixwdwugCCHycPhGF44vDwcCbSKyklSsoR5EzEosvCDDlZaQPWv5YSI0zWxwD7yDiTOsp+fizhel2klEraL+Z6r9m2fSoRJZViGzEbSikvE0LEVR7V+/v7Z7aiOiYJe5KI/jjlG8xcr9peMJjruu8TQuQJgr7Q8zxdvfhubdWorA513HG0mzvWR0TnVqtVRKkKKSwglixZ8uwwDL8qhDAtB0XpJSKQtxKRCsPw7lKphCw4ZEVgoz2HiHqJyGFmbNR2YkM0MTkz/6RUKr111apVOKgV0mILOI5zCTN/WTcNMy8MgqCp92e0odQxB56fNqJqYhrbtucSUcMygqh/Yrq3bdsHERHSzg9j5v2IaH8iAoEADqCmz46Juto2RHRUHK34vHnz9p85cyYwX2L3O8z86iAIkNnQNpFSAjcxtjSFmX8fBMGz2qbQbjKRlFLr0BFCZD7oGgDTblRKIbiXe6m9lBJByNjyiu7u7hme56GUJXdxHOcQMPsalErtNDcRvcT3ffTLJLZtnwPAcl3n/v7+jlYckDBnUhabEOJBpZRpVsqOZSQc+Ha0CcPwrCRsvSSDGh5SMcyPlVIvSRpv4u+O4/QxM0qKYqWnp6czLbN0ZB8wrF4XNzDKbn3fvziNvuNtI6IAZCYmscu9VCmFTMIpESklznA4y8VJaFnWc5olhjDIJh6f/+tKqYuaMYbBmoRlWQe1C9Ji/vz5T+7s7GyYZR2tM1W2pJQSRBJP1djoc0opHah5M+Zt2Ne27c8RESo94gSZUHh/JX6vDCoI5iql4IDPVWzbPp+IdEQGPygcVbmavPWDLVu2bL9arYYNTaqPp0azD3ieFwvk2/oVtXaGqJQOGABaCcOwb3BwcEqiK0m6Fb+3zwKu6yI1+bMRDpXJ+3GYiL46Ojp6RVzp0WTtgXV1zTXXLCYi1IOjPCAx4jVhDDhd3+N53hdMPj7ts9yeN5MBthEOHHbWiOe4xSJHCoBRGwrKvYMg0NEPZzJ+UiYXot5KKR0jXey8juP8HpknmjW9vVQqfZuZDw3DEFgnh0YZHcB2gSMAf0alLYi4+b6PUulYkVKC1OHIuAbNHI6yGD+KqMM5qXOeteS6Z9F3OvVJYmoDEHVPT8/BaQ/RURkFggC6EofLlVKfaoU9pJQo4YjDPWw5q1QEVg/w7zekWN8jzLwoCAJg3aUWE2fLyMjIAZs2bYp9P6aeNOoAxrV169YhmKTDkQLrKgDnjbMapZTI7DxBo9dvlVI6dkfjJSUB8EcDpS5VNQieiI6OjgPXrl2LAEAqMTgQZ2I6jTJogPO2OEGhtjsUJusjpUyq8vipUupFqQwb0ziJ2RfdmPkLQRDoHB6JqkgpLxdCfDKhYdNQCYmKRA0iDLDYs1/aQJBt21cTEfDh4uQ2pZSuZNxUdaN2UUb83xOC3sZBm76+vueFYfjLuMnzJPOYOIdt228nok/HzUtEHzc5iBkZrWjUPguUy+X3ENFHc5px0PO81DX4Oc3d8mHK5XJixA6bkNmzZ+9zww03bGu5QsUE09YCS5Ys6QvDECnjsSxcE5T/GxH92+mnn/69FStWGG9iJy8+wr/CBgFpt2lqwH9jWdYrV61add+0Nehurpht228jIi0OSxiG8+LATdMsX0qJEry4Epemo52NdDE4MHxXKQXigNSShPNDRJf4vo+MxViJwGFBZX4M8HmQkRgxG8GJhawtyJ21Wu20DRs2aIMRBlg0/+jp6TksrXMjtWGiDgZlEog+901VaUrWdbWjn23bzyWi/9HNpSsFjetngH+1LcK/SqQzT2uHyEm0XeO4vEspBVzIlkvEdopMUtOSu+8ppZLwmBrqbeAsx3OwKGuJnM5YfX19ThiGQ0kGLZVKh6xbtw5Ma4kSlQjB4Rhb9kdEz/d9P/ZAmDjJhAZSSmRKJeEXfVkp9a9pxnUc5ynMnJQ9kSnDwoAN8V1KqSSHxy7LMciGROXEH7u6uk5pVWaiiY37+voODMMQ75DY83eW91fc3LZtJ5FDoGsm5+DEOU3IZ5j5wiAIANrdcomw3BrCAWByZHL6vg+SKCNxHOc9zKw7d3OtVpu/YcMGJJK0XGzbfhURabPAiegVvu9/z0SZJJKDVjDdQi8p5ZeEECCJaCjYKxaOKpMrOM3anHjiibO3bduGhyF1+VCjpdTr9aNXr16dKSI2zUyzizqGpZKbPM9rCaPBdLdPod//WqBcLp9HRMA1GT8A60zz3Y6OjktXrly5E8h0M7ZcunTpQWEYgtUlTYr+ncx82sDAQGLGYDO67a19bdt+NxHFsslFdsmFkU9KiUNB3EE0NRiuyTWTUgKPAA7SuA3Ch3zf/4DJWJPbSCmBb3Kspu8rlVI6bBrttAsXLjwCmD1EtM73/dEkHaWUOKgBUytWmPl5QRBoHSBJ85j8HuEsoYxA5wjwlVKxTD4m8+ypbcCANjY2BgKP2HJ+Zv5AEASpMsWllINCCB0Fd2aHTNK1iErvdMyea5RSxyWNk9fvfX19S8IwRElebBbihLkAWCzjGOt0OhmUH+NA+ULf96/Oa23j4xiUnOxoSkRl3/dxbySKAUHC6Jw5c+bkRdywcOHCg8fGxpKcaKmdEP39/T31el0bBMta9p5UIsbMF6dllYzAw3+TkKF6fxiG5WaIFhJvAIMGUkpk0/1a0/TR/v7+A/Mqd43KIfG9iZUk5lyDZYGRdRkza4llmPnzQRC82WS8ZtvYtn0GEV2jGSdVANC27eOJCBl7uj1EW7Kgo8AG9v26UsSRjo6Ow02zHqM9lQ5W5CNKqdzJ16SUN0fkYQ3talnWaYWjqtmnYYr655lVxcxvHRgYQLnTHieu635LCHFhwsJ+43nec/e4xRcLMrKA67qXCiE+Z0D5jA35mzzPQwSgJVKpVF7BzKD+No1mP2RZ1jNXrVqlY+hpia57+qC2bX+UiLQsq52dnfuuWbMG5ZhNiZQSwLiVmEGMQT/TKCGl/IUQ4rS4PmmicZPHSMJzYOYXBUHw0zT6NtPWpJQFmQlKqfObmcekrwnbEzNfGgQBKOsLaWCBvPG9TOjH88xymLwkg+yezGW4WW+gyAnyczCbGoyR6RATHbiQya4DlX6LUgrf51xFSgnHtUmm0elKqetNJjdwft2qlNKVBZpMs1MbKSVwBudq3uNv8n0fUAHGklSOjoGY+cQgCLQH90YTJmVQhGF43vDw8JWmyh577LEHjI2NrUkgAwDm0wuGhoaSgKdNp83czoDp8tdKqViA/wwTk5QSJAyxcDF5ZDrNnTt3TldXFwIIOr8CMP5MKhYyLHPnLlFmKM5/cfIppRTKFY0kelfBKRwL1QEmSd/3EWDKXGVhooxt2+8HwVJC228qpUAIZCSO48xgZmT1NhTgSPm+f4HRYCkaSSlRPhyLKVer1Z5aOKpSGHQ6NY0YAIG7kYZWOO4GvKlarZ48ndaXly6u6/5eCBGLlRLN8yXP89LgMuSlXjHOFFugXC5fRkRxTBcTtasx83kDAwMoDWypuK6LOndEkBMZfSJF7gnD8ITBwcGkVP2W6r2nDW4AVAn8Eh2zk7FJpJTI5Ilzltd6enq68i5Lk1IC3wD4UA2lXq/L9evXB8aLmNBQSnmPDmOqXdlLE3WXUnpIntSsp05Ex/m+n1gOlMUm6GNYhvFIGIZHDg8P7yBjKGRXCziO80Fm1rH0joyNjR2wcePG2I33pHsD5VO6bNaWZjQ5jvN0Zga4fpz8XCl1drvvhejwCbbZpOy+/8/el4DJUVVt31M9M8wkGQiyBAExxCRTt2cSMn1rEmMAI7gAGhQ0ioob4oLbh4r7FpfPBfcdN1SUDxUVBBE3PoMSYzJ9e8gk07cmhAAiq4CEJZNMd9f5n8NX4Z8MXVW3qqt7umfueR4eeJh7zz33reruqnPPed/E/CwR1aRU0fSjYrH4upT3TtL19Pwc+P23bz1EfKPrut/TWT+bzV6AiIEcZoj4S9d11+r40h0TVZGQ5FBAQzGNWjJPTZL44ZxHfdaeo5T6s+7+s9nspYj4iojxFyql3qfrs57jOOdU6RlWmRIrwaATq4YARSzMg9bknNPzArXoB1q5XM5Gterr7ClqTBT3URLuT845qfqFJn8Q8ZWu64aRg0eFHvp3v6XxLxECYehXgsY6wOacU5dIUE4h9SS7RosxiVkcahJVNd0yUztZCEEEZO9OIYqK53lPHhoaSl36OIXYanIhhLhZQ7nt3VLKL9W0kJnccggIIT7AGItq7aJ9eYj4mkKhoNXrnQYQPl8WJVkP1/EHAPk5c+asTDuZobP2dB1j2/bFABD2gkSKKnF4xQKh4pxfxhg7K2hAJpNZuG3bNvouS8U450RaHtbu/ZBSik4OE50Mcs6J/JiECaoaAJxQLBbpBbhhpsM5xhi7QSlFhzaJ9h22md7e3pN8stIoBdoPFYtFne+lJyzHOScC+rcg4nP8CoMSItIp8IZKpfL9RrwgNOKCRklaUwwAcGKxWKS2glDr6ek50rIs+iyE8QqdVywWL4rylfTvnPMXMcbCDkG+qZR6Wxz/RBa+devWp1QqFeumm26i/SW6p33uks2MsUzI+pVSqTRbNzE40Q/nnKqVTgvxHak+GgcXGqtD4r7PJwBot0Bns9l11HYaEs/3lFJvjBtv2HjO+dWMsReEjElCYE1VOFRBHviOmFTxkXNOSahANdM43Hyc82czxqjlL8z+MWvWrBOnkpdq0v1O7xrvDAqYeDGLxeIFKd8j1zPGSG26qsXBPOJeJM6kKF7Li5RSgZxEae07m81+GhHpGb+qJaki83/Dr4uI8c6xsbHeeghALFq0aEFbWxvxbh0RFkPShHjYoQEi3uu6ru7hudZl1ODYe6y60CSqtOBszkErVqw4ulwu08tL6IOvTvQAcG4+nyeOnmljpK529dVXU1l5VNXDS6WU2qXG0wagGbyRXC73WgC4WKPdj1D6qJSS5IQbakII4vihU/YoqeV9cX1ESvmphgY5jRfTIOBO7QUqqg0l7QqkbDZ7NiIGckQBwF+KxeJJSS8v55x4o8K+d4VSqpDUf5J5fnWIThXyJ5VSYdU6sZfnnNOLOP3GzIqYfPvcuXN7knDYZLPZV/ptw0FrlImTTCnV8m3+vuIRtQyEKbZ9RCkV+X2oUZ31QHt7+zFptPgGXfsogml64XJd97O6N55fTfD+CTwUBVZYAAAgAElEQVSmt1uW9dqkcvcaileUGHxqsVikz1cs01BxJH+JiLtD8A5te540T7slWKNd/FtKqVSr97PZ7C+paipor5lM5pht27aFcc9Unco5p2dnUjwMsjcopajCJJZxzm9ijC0MmuR53oE61aR+qxJVjPCQAB5ExP6kqpSxNqY5OJvNfh0RA5POAPDZYrEYmGDRXGa/YZxz4sQKVJrcu3fv3J07d5IIQE2m0fpK/sdJICXJd0Wc4DjnVNUU2MpvWdbJCb4PKYFL99zSsFgQ8SrXdakCNtHhQDXffns4XceoKtDxTCaTTXKwGcXTWCqVDtqxY0dq3LxRz72Msf9WSn3YJKri3PlNOFaTg0kn8t9KKdfoDGyVMX4iL/IHGhFXFgqFUBLAVtlzK8YphCCFmVMA4BTG2CVSSuLFqJvlcrnnAQCdQkYlMOnh+9f5fJ6UQbBuAYU4zuVyJwEAKQTpJKOJPPHYTZs2RZGrTsVWWm7NKA4nxlhq7UBRBLOMsbcppULJwOMAnM1mv0MtLSFzErdK+FwOoQTnnufZo6Ojo3FiTmNsNpv9AiJGVSHTZ/2dafDirF69uu2ee+6hlw6qsgirSKHt0brEh0Mv0bEsm82+FBGppSbqmQ79pGcYmW+stadqMOecKimooiLIIkUIfJU2apk+LMgJyWMXi8VQrrpaMbBt+2sAQFyJVS1OOwnnnMiKqyUjqZW0RykVRtpedX3btt8IAKEqnYjouK5L7bWxzLbtSGVmRLzAdd1QBVbdRTnnVFlCFSa6NqSU0lLG5pwT502gYl09eF6y2ez/ImIQvUVl3rx5nUkqrTnnlLg4MOSefLfrurE6Efzvw90hz14P+pW8kdeGc05CIKG0DZZlrR0ZGfllpLMGDuCcU/L8QyFLpl5xxDnPM8ZEwJqPKKVqppAh376iIZHwRz1b/7mvr++UtAjjq+0rSnmYMbY4iQCEfyCk011xcV9f3xvT2KOfAKTvX53r9GGlVJg6YeCtZ9v2dQAQdkCZ6gFjlOjOPiGNqIeaBn58zVJJEPCrLkhhqVbb09nZefiGDRumDS+G4zirEDGyvaRcLh+9ZcuWO2oF0MzXQ4BOw7u7u4+3LIsSU0Tm/Dj/BSKeXSgULtXzFH+U4zg9iEjE1Tpf+HdmMpmlmzdvvj/+SunNEEJEKpbtWw0APp/P57UJItOLcvp5iuL+8NvETkhj5xptaV9RSgW2C8SNIYpLAhFPd12Xkrmxza9comqXQGtvb3/K8PAwcWQ11PwH6e1hxLITPkvfbWtre1fSShrbtp9Ln8eo09cJACSqtiAy4XK5TKpOWm2oiPi/rusGtt409ILUsJiGXPhuADg4TBVSQw2yRKrI9VYKi2p/021jJFJyzjk9ywS1hmhVmU2+LD09PadblhWqvAcAfUn43RYuXHhYe3s7Ha6EtZntLBaLRMJcU4WCX4lHlZzZGLfeo/6LfORhFef8XMZYGJ9V2kTZJO++LYRDLHHVbxSHIZE5F4vFdTFwZH7rUlgL+1alVGi1Cq3nK39S9V7Ydx5VhBHp9LeLxeIjceKs59io3/qkbVthMft8bEEKnqkduFEMnHNSCz1TA8MvK6Xo0Cjyc6Xh6wlDfAL5QwPm4tjY2Kxbb72V7pG4Rt+xm0LEbyb6+7Pnea8ZHR0lzs7Y1tPTsxQAPucf4uvM/1tfX9+zkibHoqozk7b7Vgvctu1DAODeECENr1QqHbFjx45/m0SVzqVv8jFCCGoPqvmFCRFfVigUftHk29UOz3GcsxCRuF/CrLRmzZrOdevW1fQApB3UDBxIDxUdHR0DiHi8ryBEHDCzq0FRz0QVnZ6Pj49T5VzkgxDFhohnNoI8XeeWEEKQQpoOme593d3dT05ygqoTx0wawznfyhjrC9lzagTHGgo1v1VKpVLxqiFDvLe9vf2QpAma3t7ehZ7nUXtHoFmWdcjIyAgpBDXcdKpDJgRF1ScXWpZ1iU68PvcX8Q2R0uyyGJu7YWxs7DlJHpyz2eybEfHbMdbaO2vWrO5m4WyJEfd+QznnT2eMbQybH8aFRhxO27Zto6q+MInvnyqlXpU0Rt15GonjY3XalxYvXmxnMhmSLQ+ya5RSYXxGVedpfD+xUql0OL1U6O554jjbtm8kIYOI74yaq2M0KkmrhqCbWNeoDrtPKUW8k6m8nC9cuPDA9vZ2+h4NqtZM/LuRzWYVItoh1yT24QnnnNrPwqo5te5P27bfBgC6SoZ0T36tvb39u8PDw/RiPKWm8VlKnFystjGftzAsUXKZUiqKjF4bM/+AhsRhdOzKtra2c7Zu3Vr1YIsq8P79738/2/M8am2l5/YHAeAaX8Uy8DMUpVpZK9+S/9tDRRBRVdKEwaOI+FUA+K5SKlLwiBI4VFkNAKSwRxXDunma2z3Pe3rSpBgFyjknxfE3BF04AEjMnznZZ29v70s8zwuj3HlcoEMXAJ0bzoyZIgQ0EzI60V0mpUztC0tnwXqOyeVy5wPAlyPWuE1KGSjtW8/4pqNv+mHZvXv3gnK5vAwAngEAVNVGL2xtOvutZ6LKcZyodqeJIf6vlLJpqg76+/sPsyyLXqoCpXH3Be953rOHhoaiCB91LseMHhOlXEcn52kR40ZVLPiyx2FcHNrXinP+asbYj0Mm1HTqb9v2SgAIlS0vlUqdSYiXtTcZPhBs274SAE6P4a8MAJsQkfgp/omID1qWBYhI/HFEMErk9AOMsaBT67ClRn2p90SVm9ls9odEDBtjL9TS/ORisUgtGi1rfhsRYRbYnsQYC2yD6OnpWWtZVujBXNJ2tjig+u2HxPsR9BvpzZo1q1MnsWjb9mrilwtZX6tiZfL8qBcYxlhFKUXt6YkO/DTl1u8plUpLkibDNIjOA2HTVbjT+e5LWnlWLTjbtumFNrDytRa+I79qZHkQKIj4Q9d1z4lzr0dxsTHGtNreOOf0LLQ4ztqMMVIAvdyyrB9ms9nrk1adxFzzCcN1iPyT8ooF3CMvp5bToLjTTD7sW4NzTgcIdJCgY48yxi6zLOsPiEhVckQbsBgRn8cYo9/oJ1RFAcB/FYvFrwU57+npWWVZVlg3jVRKOTrBBY1J8H1CiTU6/CRhilsB4D7P80id7yAAeBIi0nsoJespORw3N0Ntuscrpai6MrFxzokHMVAdM8lnPigY27YvAoA3hdyXj1dsxgUjMQBmYv0QIFLBrq4uytSGKgFoRLBrbGzs8LBSeQ0fTTNECPEZxhgRigYaIv69UCisapqgUw6kv7//xLa2to5yuUxfiKTENdFKmUxmv5Joz/PGxsfH9yuHPeSQQx6mCh2/IolezA7yX9BI1etIAKAHBpKkpRdpOp2O6k8Pux51af1zHOc0RCR1IV07QUoZ2TYa5Wz16tWdjz766BLP8+YDwIGe5+1BxLsB4LZCoUDtOtrmOM7bEFHnFPEzUsq6cqpoB93CA6PIZBHx067rhnFNaO9eQ56e2k/maDsMGcg5pyQVJauCjPiZEhNu27a9BgCuCvFfVkol/o5IAwO/BZCqK6mdaCpt2PO8U2s8BdVttXh8n5VK5bDt27ffN5UbT2NtzvlvGWPPD/H1J6XUc6v93bbtzQBAycUgW6+UCuL+SSP8x3z09vYOeJ5HLy9VDRH/5bquVgI0m82uQMQwvs1H2tvbnxanssT/rNBvVdghyYhSKqz6NBQvvxKsqPGCdq3PWxLKgTdxsfnz53d2dnZ+JeylSONivl8pFcg9tW++35JGL41hlRZfVUqdr7Fm5JAoHkUAeFWxWNTh03nCWhoccL9WSgWSuFcLPuq3R0c0QEOxNhI3xthd1GLHGLtmz5491yepZNVZpNqYpUuXHl4qlaJ4RFMT9IiiMPA874Wjo6Nhv9ext+rzwK3X+DzH9k0TAIBagQMrYTnnJFjwjRDnse/dyb6oIndkZOQaP6GWaB9pTKLqMFJNTcIPOHn9KI49UtgM+j2Nu5coUQUAWFEsFh/7XTSJqrjoNul4IQSpkn241vAQ8dRCofD7Wv00w3zHcS5GxDB5+X1k2bF+bJthb7oxCCHoSyyQKFbXT6PG1aOiSghBKlh00nCs5j7+IaVcqTm26rBcLicAgE4mXhhChH4zEfXqqm0SSTVjjFqqqHoj0BDx2kKhECb3XcvWZsTcbDY7BxGj+PrOT4NwmwDNZrO9iBh6GpZWFVIU90itROfZbPYcRAxTkH1IKUVJ7ik127bpBPNvAHD0VARCXFF79ux5ca0y1gnamSjpSVVIiapfpgKroDWj+F6o7WLWrFkHT65G0qg8otbv57muW3fSeY1W1GuVUlrf5319fU+pVCpRyntbK5XKSZqJSlK5Is7IQPUs/9p8UykVqGSmc89wzv/MGNOpYqZq4VdpkMJT7KcBAAkohLWwUZUDPSOEtYBqt0dFVSIxxuhwkIicY5PaT8TRr94iqfowbq/+YrFIVaCxTYNrKFKsYPKinPMtEdQLJCYReqDY29t7nOd5ifYUAAKRu1MF8D8QkZLXxNlEn6HY7ZnUctbe3r6IDm8ty6LflwcAYPvkCi6Ntsr7LctarNNuHnZhNVotWblcftpNN920M/YNEjFBQ9GtliU9AOgKKqrgnJMa5euDFkjCr1bNl5+Ypu8t3eqxWvZcbe52y7KePzIyEuvQO+T39A3UohgSZM2VaORbI9n8b6UUFd489oxiElVp3zZT5G9gYOApnufRl41Wi1XIB/i7+Xw+sBxviraXaFkhBP3gRT3gfUtKmapccKJg6zSpRRJV/wKA9Z7n/RURrxwaGkrEcxEEoU5l3cS5APDmfD4fqnAUdrlyudxbAYAqUqI+iw9mMpnc5s2bb9G9/JpVVTullGEP3brLzdhxGj+k9CL7Std1A0vq44CnwSNB7o6s9eUmisMGEbe4rhuHW+kJ2+ScU4KWSsiD7C6l1JFx8KnX2J6enmMty6LfiVTaKjXjLDPGPtHX1/fpNNpPstns6xDxYs21aZgWD0wMf1M2NJvN9iMikWMHmt9WuV8ralQlCgluuK4b2PaU5oY558Qv9uaQZzJtuXrNdkhaagcivsZ13cAWXSIe7+jo+FqEOuhjYXued9Lo6GhYy2EkZJxzqoyjCjkde4TuecuyrkLEHfPmzXtMDOfOO++c19bWZiPiasbYWr/SO8zfA5lMZnmlUiGhirDnQKWU0iJg55zTgTEdHAcaAFCC6aSk3Qt+lRvd92GHVuVSqTQnaYt1VEtx3M8IVbZ1dXVRi2tgNa0OFxgdPO7evZsOkSydGyXhmDH/UJAEP/6NiPRM+jAAUPvgYwYAcxGxExGPBgBKStG1CDoU3tbe3n7qPgERzjmpFZJqYZj9sa+v77SkvxHZbPYIRByK6LQhxT86tIidlIvC1b/e/+vz0kYNj/v3SqlUmh10b3POSX00TKnzTKXUFXEXrTaeeOI6Ojp+MQWVVZcAwFvTFAqwbfvFABCmknmLUmpBrbhpHGZ+WylFIlL/91mrdUEzv3kQiEG4HBb03WvWrDlqOpCLCyGivqwIh49KKUMfKprnCsePpEkTVZRQpaTU9ZlM5q+Dg4Opn+bsQ+q44447qq2tjU4bOjXR8zKZzOFJlf78FkN62I76bvUQ8UWFQiGWstqqVau69+zZQ2XjXSH7+Y+UUksBTBOTGTdM5wWYMfZcpdSf0gDHf6ijh+NAS4PbRKMk/q1KqW/VsqdsNksVDKTmE2Q7lFJT3XL3eGy+SiFVgOkoFdUCDb3cbKhUKuePjo6SXHgq5hMq36rDX0cLWpZ18sjICL1ATAcjBSaqGiYC2qqGiB90XZdoAB6zqFY7f9gZSqkrGwEQ55wSDv0ha52llPq5biyc8x8xxl6jMb4CAOT34q6uro1SSqosYYsXLz7KsiyqRLpAkweI2v6WpPGyyzmndiESW2mEUfvg85VSf+ackwBC2ItrZe7cud0bN24M/Y6moLPZ7DGISM80UUTLfyyVSmfH5dyiQxRE/E0U+TxjrCY1N9u2iQD6HSEXYrtSiigftMy2beIspQRdkBHRvFb1f4g6GVVg1DOBpbXXaoMQ8SrXdanCntQPeVtb24jGc+JvxsbGXhu36ta27cV++33U9blBKVWzEFcQKL6iJ1Wl1nT4VcX/40Tbk//mJzKJ5iQwIep53oLR0VHtA+Koi04HBHffffdnAIAS3lGf+yh3UX/f4Xneu9Nu16RFe3p6nmVZVtizQSrV8Nls9lJEDOTDBoD9KkGjXqaiADN/byIEHMd5DiLWXKoOAMfn8/mwH5Qm2nVwKEIIOg05KixYOi0sFAphcsItsdegIJskUeUCwF+pYqq9vf36TZs2NUyWXgjxVcZY2MPWZOhulFKGvTSE3g9CiCiluH3zPyKl/FSSm8txnJ+RQmfI3IqUMqqaK8nSM2YO55zUVkKTUJZlLRsZGaFWhlSMc06kotSCUtUAIFcsFumENLFFyA8/XCqVjt6xYwedeie2KB4SxtiQUirstDPx2rVM5JzTZ4p4aEJba5OsQdUHmUzmwpGREeKTSv30mnNOynSXRMVGHHeu68b5PoxyOeV/12hR2k8cgHNOhwNhynepJV6iwPFbR+ilKvD72rKsRXFaO3TaGgPiIuWtA8K+g6rNQ8QXu65LqrQ1m23bSwBg0I+jZn8hDkoAsLZYLP6GxvgqYcTZFnYdlo+MjFBskcY5pwTgSyMHMkZqbJ/3PO8Ho6Ojoa3m9AL+6KOPngcAHwhLzE5Ys6Z2TM458S+GPaPc47fnaGyTMdu2301tmEGDAeAPxWLxFB1nixcvPjSTydB36YkTxn/S87xLKVkAAMTBGHaYp7NM2mPG582bN3ufInNUVeeExakN8XOzZs360b5kclBgPT093ZlM5u2I+F7iko3aAFFPFIvFuvKZ+p8t4kmLrTYaED8Jm5xSLBarCgb5/FjXh+z9fj8hmvrvsJ+MJZJ3EYV93L8TLxdjjDo1vpO0EjNqTY222jGlVOAzapT/fX+PECraqJR6xkRfJlGli2xrjAMhhKt5Cha2oy9IKaPKUpsdEcKCynRDSXsR8fS4VS3NvvGJ8QkhqFf7EEScAwD7HkLpi4b+m8iZCR/6QavLKRQAvD2fz4eRGtYNTiHEkxljN8d5YKH+7KStr47j9CAiff6i7EopJVVvJPqhzOVyZwPAT0IWGZNS1vxjErWJ6fx327ZDlXJo75lM5oht27ZFkaJqw2Tb9u1hfEk6bRFRi9m2fTEABPH2vUspFaWSGrUE8Q/8jjF2atBA4mZyXVeHiyZyrbQHkDCJ53mv9YmXa02m3U2VD5Zl/bRYLNYszBC1V5/riK5ftc/+uK8A9vHpwE01EQuNKsFHZs2a9STiqbJtm7gDKdkQxutzdrFYJF6mupuGOtU2v1opViyc88sYY2fFmpRgMCnOFYvFOOqZkatoKMNF+ogYMEZcmJOTa5xzOpzd7wVpoh+iBCgWi1qUAJxzqhilQyt6ztIxkrDfRDxJjLHbMpnMA4hI/48Uz6iF63gAoEqzyOTDvsWoYsF1XboPEhnn/FxStg2Z/LDfNqbln3NObfKBXGcAcF6xWLxIyxljzG9zXYOI1L69oVgsEn6PmZ/IIgoT2kOzqHpje3t79/DwMB1IUfXKUsuyqOtD91CREpmkpkfqs7f7/FdU4XcoIpKo0fF+NWIc0ZVITjDd6xExjvjiSCGSulfouTyp7ULE17uuS0nKqsY5p6qmL4UscLFSKpC/KmlgE+ZBNps9HRGJs++kGt+t6JrT89TP+vr6rk7aBqq7J78alITZguyfSqmaD/JCONqo0+R413XpPn/cTKJK9wq2yLhcLnc+ANT6slGUUva2yJarhrlixYoDy+Uyqa+EmmVZywcHB7VOyaJ8tfjfYcmSJXM7OjoylmUdWKlUqHT42hT29FIp5eUp+IntwnGcDyFi3KqlC6SUX4y9GB2hCEGlrFEvOLssy7IHBwcTS8P7fHRhhLl3SylreRhIsv1pNUfjZamklKJ20tQIqaOIZtMgU+/p6XF82ebJL1Cb582bt2rfaW8tF5NzTt+ngdLPAPCrYrH4klrWaMTc3t7erOd5pBhHL4ikaEYPaEEHHw/4ktOUqN4EABtHRkboJSS1+0Nnzz09PfTC8mpSzKGDCACgB/tBRPy567rUHjjtzL9O1EYTZiuVUv/gnFM732PtNwE22tfX11vvF4J9a/vk5/RiUPVZHBE/5rruJ+JeNF9ZjFoKQyvK4/qdNP5mRFzhuu79Nfp5wvQ6EjHf4Xnei6q13tq2/TYACFPV/YlSKkwtdb99RFUQpY3ZZH+ZTOaYbdu2UUIjkWmot9JvYIeu82w2+xlEDFLhLre3tx8VR41Sc13Ltu1nAwAlrNbEoIDQdB9r2Fal1NKJM7LZ7Dr6jMfykt5gr62t7dCtW7dSJWVDzG/Le63fmhyHA/AhRPxRW1vbF6Luadu2z6RnjKANIeIpruv+oREbXrp06dGlUomqBOkZgjo1iDs2iIaERBbot2A7kfpT0nrPnj3/aKQipYaIUCpk6rZtVyVtB4BvFIvFt0++NiZR1Yi7tYFrLFu2bG4mkyFiyZoqKjKZzII4JM8N3KLWUkKIY/wPfeh4y7KOGRwcTPxjrhVMCw7y76Oaf8AA4Ln5fD4VHp+YMFJF3XbG2MI482pRHRRCUEsNtRqG2flSyqgxkSELISjRNS9g4CYp5VSpkETG3goDOOdEBk6k4EGWysnSROecc2rbfk7AgqkRkPs8BHTiSLwRiIjUCnVOWi+cnHP6/QkjS/++UuoNrXAfTIyRTvDvvffeQ0ul0qz29vYDS6XSQ5Zl7TnggAN27Tslb7U9TZN46bSe7rnA5DzJ3luW9QdEpORh2HPvy5VSP2skLiFcQPeUSqUlcTmM9sXe29u70PM84ht5Str7QcR/tbW1rd62bRtVLNfDKMHweQB4V1rOEfGXbW1tbwuqgrVt+xAAoAOgoGfnnyul4lSp6SomprXFiX5uU0rVVEmUzWaX+1VegfH19fW16SZ1fb6i4Wrk3oj4Ndd1/6seQOzz6XP5UZKaWjLpd1a32i2NsB72PO/U0dHR/ShV1q5dmxkZGbkCESmJ1mh7QuKskQH09fXNQ8QTELEPEYmgm3gG9yU+KWlDBPY3eZ6XnzNnzg2TlVuDYvUxvZ5ENCaPIY60YrFI7aINPUCaEAcsXLjwUADotixrTltb225EHB8fH3+wVsqFtK4d55ywnx3g79dKqRensZZfsUkV3vSsuBcRv7lkyZL3Vvs+MYmqNBBvMh9CCCrXpROEWuytUsqaSHVrWbzWuf39/cdZlhUlYYtjY2Od9er3rXUPUz1fCBH2haUVnud5A0NDQ6kRB2stSkcX/f0nWpYV1qce5OoMKWUiEl0hBCk3kYJTkN3R3d09P42qFSHE3xhjVOpdzS6RUuqQ6erCOePGaRASP6GPvlaQIk5XL1FKpXpNic8CADrSSlDR/ukhcdu2bdRyHUYoeqFSKiwJWCuUZv4MQyCqrQgRfw8A1CZzRgg09OJGyduGvsT46nof8wUI9r2oERfdq5VS22q5lLZtzwcAav9K7eCCKvQ8zztj+/btjynt1dM452chIpF6H17DOlRt92EdcvwwAnHiM3VdNxafKV3btra2nwJAQytIEfFS13XPrgEzHQl51t7ePidOkp5zTpWphOG++5FeUL8ze/ZsqmQv1RJvnLnEDTc+Pn4SAFCLOvFR1kvcwwOAayqVyntGR0dHq8XoVxlR10GUQnmcLeqM3U9ZTWdCq4zxK0qJK4qSkpTnQAD4bblcPmf79u3ERWcsAAHOOVWbUSX5EyxO+7MuwJTAnjVr1u6w7xGTqNJFs4XG9ff3r7QsK1B2WHMr10gp0yK/01wyvWEDAwPP9DyPFGTC7H4pJXEAGKuCgBCCflgX1wIOIi4qFAqkutdQE0IQaWeY8lhQPIkTVblc7gwACCOV/YyUMhXiSiEEtRhWVc1AxDcVCoXvNhTwabaYbdvXEmFn0Lbq0b7mKw1Wq/ioeJ739DSV4up1uaj1zLKs0BdYRLzAdd1E7bX1itv4bW0ENPh09vgVFGHPvA1T+quGNvGjISL93hL3TxhPSKyL5VcYvBMR14WclOv4JM6kC2fPnk2/Yw1LKixZsuTgcrn8VsYYyZXrtrRTspwquX+glCLCdC0+yN7e3id5nlesUq2sxsbGcgnbcKxsNkuJSCInr7ci2GPXEQDOKRaLP9S5qEFjfCVaOqwMjJk4tJIcdNDL6QEHHHDk3r17b2mGShKKJ5PJrKSWaQDIkjgocewnuF4VxhipyQ0j4l8qlcrvbrrppkhVa59v69P+M2td+GInX2dEfEkY11Mt906zzKXDuLa2tgWZTOauOrSVNss2U42Dc34eY+wJRSqIeC8iLowSfUg1GN+ZSVTVA9Um8JlCkmF3R0fHoTpyvE2w3SeE4DjOCxExqjJmREpJJzzGqiAghKC2gWfVAk4mkzl08+bNqXNYRMUkhIiS/K7qAhHPKhQK2lLgE50MDAw8w/O8QLVMAFiSz+drOiHft14ul7vIJ3yuto+FUsp6tWREQT8t/s45p4qGQEnloFaFnp6eHsuy6IT2yQAw3Nvb+yvd1ggCjnNO/ILUArHvt5lIsN+hS+I71eD7HFhRnH8Nb6+aalzM+vVFYNGiRQva2toSf+dRlZDrusTrpZXQqO9u6uN9/vz5czs7O8+hU/GYFSTEbUZqasQfkphbMYVdWZxzakcjCXVqF6KWxjmIaAEAKSfeDwBEYD60Z8+e9Tt37ozkKK0WE+ecqn1+O0FZj54lzqw1eeh/N9IBGvHV1GJ/R8RjQoQ3xtva2o5Ig3uIc07PK4F8taVS6fCkram1ANCIuZQ4tixrXrlcPtqyrMM9z6OW0O6JawMAcScROTo9495XLpdv27FjByVJE5mvGkeHOLVWQK5HxGxIJeIjc+fOPbxV34rgtxMAACAASURBVO8SgWsmaSFAVaDt7e1EQzFRUfPfAHBmI0RhqgVpElVal671BiUkkt5vowBwWj6fT4NQu+EA5nI5Um4KPVECgOvy+Ty9VBqrgoAQgiRlX1kDOLhgwYL2OC/qNaz1+FQhBFXJkRpb7JMpAHhNPp+PlHmvFicREXZ1dRGpcjXC5TJxX6R1Ei2EIJ6rajLzUkoZSGSdBr6t7oMeBv1yf+IJuB0Rb1BKUZvw4y0/EfK5BMH7lFIX0n8QtwmpGQHAqxhj+xGEAsBfxsfHT43z8EoEnCRmUKlUZnd0dGxqpZPAnp6e0y3LekzyPcSeqZT6a6vfRyb+5kKAc06VDIl4eRpJsNsMqFFLICncAcAAVQ8h4sEA8CTG2EPEDYOI1B6ztVKpXKdTEdIMe0ozBqqsKpfLx7e1td2VtigCJcKojRAAiJdIt6L/AQC4ijF2cbFY/BvnnBJyQYesv1VKpcJ5xDmnZyH6XatqxLVTLBap6spYigjYtv1MnwCe2gHpc6lj9Jm9AgC+XywWN3POKcFcVaENAP6nWCzW8myvE48Z08II+IeuT0PE8uzZs4kjbPdUbcckqqYK+Tqv65OJ04Nb7Jf1faEh4jcKhcITGPjrHHoq7jXVDy+VUtbUx59KsE3qJJfLfQ4A3ltDeA9JKbXllGtYZ7+pjuM8BxHpRCC2AcDb8/n8N2JP9CeEcEfdJqVM9BJVLZZcLncZAFQjdn2HlDJMuSjp1qbFvGw2+3VfNnjyfujl7I+WZf0eEa9jjJHAQmDLA7VWICKJDRBvFD1MBqofAcCHisUilfVPe8tms29GxDCeNuI1mddKybdpf9GmyQY5599njCWRHf+bUmri6fE0QcRso5kRoJbM4eHh3kwm4/hk0iQARIpgs3y1Tvp9KSLi0OzZs/MTD7k450RrUbUyCxFXu66bhJ/zCXBxzunzRJ+ralZWShEheUM53Zr5mqYdmy/gscTzPFLrPRYRj953jyDig5Zl0T1CVW9Dvb29cuKhMOc8qKvAQ8TlrusSzYAxg0DTI2ASVU1/iZIHKISgF66TkntgO6WUJKfZciaEIDWBj0YE/kUp5QUtt7kGBaypYhcWTarJGd1tCyEouUpEiknsU1LKjySZSHNyudzHAIC4QCbbPVLKI5L6nTxPCEEcJvRgO9HuL5VKT41DbppWPK3gx1e7o3bWKKP2n6jfxvGw5NSkBahi64SoRafD3znnn2CMhX1+blZKxVLinA64mD3UHwEi3maMEXF4HEPP806YrMYVx4EZaxBoNAKcc1JtfWeVdS9XShGBdCpGVeKe590c0EK2TSm1JJWFjJPUEQhJ3BNvW61iW6nHaxwaBIIQiHoYN8i1MAJCCDrt/1GNW+BSSrdGHw2fnsvlvgQA1X7IJ8byHiklcQYYq4KA4zgvJknnGsDZIqUM5PmpwW/oVCHEN33i1dhLAMB38/n8m2JP9CfkcrmFAEAk9NUqGU+SUv4lqe9980K4sN4vpfxcrf6n6/wIVb16bntIKZWr5wLN4lujquWnSqnAVpJm2YeJo/UQ8JWeiEMpznPtZUqpqqIUrYeAiXimIMA5J1J5qph5/PCLeNYymcwpIyMjRD+QmnHOSSmTngP3e6YBgPcUi0Xz/Jwa0uk68nn7Nk/gWqMF/up53gumghA73d0ZbzMJgTg/6DMJl2mxV58zhx7cZtewoXdLKen0pqXMcZzvEA9AWNCI+KpCoUA8TMaqIJDL5Z4OABtrAGe9lLImMvYkawshSHkvTIY8zO3vpJTPT7LuvjlCCCJireZjO3EYSSkTkbxG+N/Z3d3du379elK3MlYFAc45Je0ped9o+4lS6tWNXnQq1uOchyaJ01Cjmop9mTVbAwHO+RbG2FLNaB9tb2+3h4eH/6U53gwzCDQNAj434hpqCfM8b9SyrF8Wi0Wq9E3dOOcnAsAFiNgDANQmf6lS6qLpLD6QOohT4LCvr29epVJ5AQBQ9f3I4Ycf/uv169cTX6oxg0DLIDAtE1W5XO55AHAhALy/VcnA07qDhBA/ZowlfklqVcJxHSJwy7KeMzg4+Oe0sJ5ufgYGBp7ied4/a9jXFVLKM2uYn2hqLpf7EwAkJcm/SUpJEuGJTQjxXMbYHwIcuADwonw+T1VXsS1AzRIB4Hn5fJ7kuI0FIMA5/yyRoE8BQCuVUv+YgnUbviTnnDjtgqr6HvI872hzmtvwyzJjFrRtO6j1uhoGH1VKfXLGgGM2ahAwCBgEDAIGgRZDYNolqnK53EkAcI1POEeXg6obzp+pcu39/f0nW5ZVSzJmvLOz89ANGzY83Er3thDiSsbYC8NiBoAl+XyeiAiNVUFACEHqdVShk4iQn1QX8/n8OY0GVwhBVWBJ5X3TUOcDIQSRmQbxEpF88Xcsy/rM4OCgttz3smXLFmUymQ2MscMmYfpVKeX5jca51dZbvHixnclkhib8NtR9C4j4Bdd131P3hZpkgd7e3uM8zyOMn/BsMZNI5Zvkcsy4MHylIh2qgnypVDo+jhrnjAPTbNggYBAwCBgEDAJTjMC0SlT5rUpUVTBnEq4lxti329raPrJp0yaS350xtm7dOuvqq68mmdKnJN00Ip5ZKBSuSDp/KuZpVtUcJqUkSVdjAQgIIe5kjBEfQhL7kpTy3Ukm1jJHCJFnjImkPtJIYPb39x9nWRapqgQqxzHGKGF1LWPsf8bGxq4Nk3kWQhDHEbU0TpYb3jA2NnZSvUr+k2LYrPN6enpOtyzrJ4yxA+scYwkR/9t1XSIXJ3L2GWO2bX/UFxR4/PmCuO6WLFly1kRVohkDiNloQxHIZrNXIeKakEXvYYytUEqRIIUxg4BBwCBgEDAIGASaFIFpk6jyX+RI0emgEKzvAoBX5PN5knadMeY4zn8j4gdr2PD3pJShfE81+K7LVMdx/o6IK0Ocl6SUJK07o14i44JdY9Lno1LKhrdWCCH+GlLNFAkBALw+n89fHDkwYkBMUnfilriBMfZ3ANjied6/MpnMw57nHQUARGpP3Ep0v060W9va2p6+adMmevEypomAbdvzAYC+DwnTDs1pusMqiHgNVQ8ppWZstWZPT8/STCbzXESkhOAmpdTvzHet7i1kxtWCwMKFCw9rb2+nSvrlVfzczBg7VSl1Uy1rmLkGAYOAQcAgYBAwCNQfgZoTVUTYPWvWrJMR0UHEpQBwNGPscJ/AmyoG7mKM3YGId1iWtRMR/75r167BNEuuBwYGej3Po+TToWGQAcDvEfHFUsrd9Ye2eVZwHKcHEXXK4YOCvkNKSRVZLZPUEUJEkareI6V8XDGlea5Wc0UihKA22tOSRAUAb8/n899IMreWOUII4ocinqhEhojfKRQKb040ecKkZcuWzc1kMqTMc2ytvqrMv4Mx9syZ2tKcBp69vb1PIgUcxhj949RwnahKl1oyr29vb7/UkDOncXWMD4NAcgSy2WwHIr6MMUaVVfRM+ggi/uHggw/+1saNG8eSezYzDQIGAYOAQcAgYBBoFAKJE1VCiBVUpQMA9ELYGTNg4r0ZRMTrEPGPCxcu3Jy0JaC/v/+plmXRS8JRETFcPjY2dvZMbZERQhCZ74qY1+nx4Z7nLRsaGqLkT0uYEIJOTheEBOtKKXlLbGYKg3Qc52JEfF2SEBDx7EKhcGmSubXMqVH1j5beJqVcUksM++Y6jrMcESmJ3pWGP9/HzZVK5dQbb7zRVAWkCOr8+fPndnV12QAwDxHp96QbAOYiIv1O0m/cHgDYg4hjpHwEALeOj4/fumzZstuS/n6lGL5xZRAwCBgEDAIGAYOAQcAgYBCYNgjETlStWLHiwHK5/DVfSS72/ADk/sMY+xMi/qpcLl8zPDz8qA7CQgiqoKJ2mZ6I8T9YsGDBm2byy4QQ4i2MMZIOT2oflFJ+JunkRs8TQhBJ9bygdQFgYz6ff0aj42q19YQQdM3fnzDuF0gpqSKroSaE+BZj7LwaFsVyufyULVu2UNVSzeY4zun03cYYa6vVGQD8dXx8fO3w8PC9tfoy8w0CBgGDgEHAIGAQMAgYBAwCBgGDQDMiECvRNDAwsMDzPCL/rUm+PQIIOq2mNS6ZM2fONevXrycVricYtRx2dXVdF8BDMHE8ETpf0Epta/W4UfykHrVhJn1ZvkFKGaRiVo+Qa/IphNgVQZj8Oynl82taZAZMFkL8F2PsK0m2alnWqsHBwb8nmVvLHCHEBxhjn67FR1o8VfticBznVET8RRWhB90w9wLAJ4899tjPzuSEuy5YZpxBwCBgEDAIGAQMAgYBg4BBwCDQughoJ6r8Fjt66TyygdslxbGLK5XKD2688UZSrnvMhBDtjLGrGWPPi4hlSsicG4hPrKVq5O4p79mzZ97IyMgDsRadosFCCOKhCGtJvVRKefYUhdcyyzqO83JE/J8kAXue1zs0NFRMMreWOblc7mwAIGW3WuxKKeUZtTiYPDeXyy0EgB8yxo6P4bdMimmZTOZDg4ODO2PMM0MNAgYBg4BBwCBgEDAIGAQMAgYBg0BLIqCVqFq5cmXX+Pj4JsZYKrwtCZDyqDUQAL734IMP/vaggw4iRa5XhPgh0u/zpZTUomjMR8BxnNcj4veTAgIAL8/n8z9LOr+R84QQdM8E3t+I+I1CofD2RsbUimsJIZ7FGCM1zSR2pJSSqvgaav39/Ssty6q1kmtvpVI54sYbb3ww7eBzudwLAIDI2onfj5Luk63CGJOUjLcs68eDg4O3px2D8WcQMAgYBAwCBgGDgEHAIGAQMAgYBJoVAa1ElRDii4yxdzXJJh6Jap9BxPcWCoXPN0m8TRMGqVx1dnYSd1O1l2OdOH8spXytzsCpHEOKP11dXaQ4GWaflFJ+dCrjbIW1+/v7s5ZljSSJtaOjY9ZUKCwtXbp0dnt7OymxWUni3jcHAM7N5/M/qMVH2Fz/AGApIh4JAG0A8Cgi3t3d3V1cv349CU4YMwgYBAwCBgGDgEHAIGAQMAgYBAwCMw6ByETV8uXLj61UKi5jrKNF0PmslJI4aoxVQUAIQeTWpyUE504pJUk9U8Va09qqVau69+zZQ4mKMHu3lPJLTbuJJgls+fLlh1QqlfsShLNHSpmm0l2sEIQQ9J0VJbIQ5bOleNmiNmP+bhAwCBgEDAIGAYOAQcAgYBAwCBgEWgGByESVEIKU4kgxrhXse1LKNzV7ImUqgRRCvIYx9qOkMViW1Tc4OJiowibpmnHn6SRXEPGcQqFAfEHGwhEAIQRVp8WtwrtLStlIPrv9dpHL5S4DgLNqvbiWZfUPDg7eWKsfM98gYBAwCBgEDAIGAYOAQcAgYBAwCBgE9BAITVT5LVQkg36QnrspHXX5ggULXm4UscKvwbJly+ZmMhlq/zsgydVCxHcWCoVEKnBJ1ksyp7+//0jLsu6ImHuGlPLKJP5n2hwhxL8YY0fF3LeSUmZjzkltuBCCOKC+nYLD70sp35CCH+PCIGAQMAgYBAwCBgGDgEHAIGAQMAgYBDQQCE1U9ff3n2hZ1vUafqZ6yB/HxsbWFIvF8akOpBXWdxznKkRckzDW30kpn59wbkOm+e2qoQppnuc9c2ho6K8NCajFFxFCELF3LuY2Nkgp46jbxXQfPnzZsmWLMpnM9hSc7imXywu3bNkSlfhMYSnjwiBgEDAIGAQMAgYBg4BBwCBgEDAIGARCE1VCCCJQJyL1pjUAyI+Pj68eHh5+tGmDbLLAcrnc2QDwk4RhPbpr165DduzYEUVWntB97dOEEDZjTIV5QsTjCoXCcO2rTX8PuVzudwBwasydTnlCUwhxK2PsqTHjrjb861LKd6Tgx7gwCBgEDAIGAYOAQcAgYBAwCBgEDAIGgQgEQhNVjuN8BxHf2MQo3t3W1jawadMmak0yponAihUrDiyXy/cwxjo1p+w3DACelc/n1yeZ24g5uVxuKQBsCVvL87z5Q0NDtzUinlZfQwhBXF5x1R4vlVKePZV7F0J8izF2XgoxmKqqFEA0LgwCBgGDgEHAIGAQMAgYBAwCBgGDgA4CoYmqXC63HgCeqeNoCsbsQcRnFQqFf0zB2i2/pBDi14yxM5JsBAA+nc/nP5RkbiPm5HK5pwPAxrC12traDtq0aVOUMmAjwm36NYQQn2eMXRAz0CmvQnIcZxUi3hAz7qDhl0gpSYjAmEHAIGAQMAgYBAwCBgGDgEHAIGAQMAjUEYGo1j/ieFmUYP0HGGNPSjBPewpVehUKhe9pTzAD90PAcZyzEPGyJLAg4mChUFieZG4j5gwMDDzb87w/hazlrVmzpn3dunVeI+Jp9TWEEO9njH0m5j4+KaX8aMw5aQ8nxcIdjLEFKThGxthKKeWmFHwZFwYBg4BBwCBgEDAIGAQMAgYBg4BBwCAQgEBUoiqJ2tfDvqJcRx1Rv0xK+Yo6+p/2rrPZ7Jyuri5q/5uVYLNeJpM5fPPmzfcnmFv3KY7jvBARwxT9dkkp59Y9kGmygBDiXMZY3KTwu6WUX5pqCIQQH2eMpZUw27xgwYJnGGXRqb6qZn2DgEHAIGAQMAgYBAwCBgGDgEFgOiMQlaiiRESsyihEfCdj7D4A+DBjrKcO4O3o7OzMbdiwgRJixmpAQAhxOWPsJQldvFRKSfObznK53CsB4Kchgd0mpZzfdIE3aUC5XO4MAKBWUW1DxHMKhQJxW02prVixYl65XCZS9UR8bFWCf4+U8gtTuimzuEHAIGAQMAgYBAwCBgGDgEHAIGAQmMYIRCWq/sMYi1V5AgDPzefzf1q3bp111VVXnWZZ1ssQ8XTG2IEp4OgBwIn5fH5DCr5mvAvHcV6CiEmTTd+XUr6hGUF0HOdNiHhRSGxSSuk0Y+zNGFN/f/+JlmVdHyc2RDyzUChcEWdOvcYKIX7EGEuLX2osk8ks27x5M7VFGzMIGAQMAgYBg4BBwCBgEDAIGAQMAgaBlBGISlSRKtoxcdbMZDI9k1/iVq5c2VUqlV6PiETIXItc/BellHFJneOEP6PGCiGo7Y/a/+Yk2PitUspjE8yr+xQhBFXzfTJoIUS8qlAovLDugUyTBQYGBno9z9sWZzvNpAzZ399/nGVZQ4yx0O+7GPvbPDY2dkKxWByPMccMNQgYBAwCBgGDgEHAIGAQMAgYBAwCBgENBKISVVsZY30afh4f4nne/KGhIUpwPcGEEO2MMeK7WccYOzyOX8bYLR0dHb0bN24ciznPDA9BwHGcnyHiy5KAVC0pmcRP2nOEEF9jjL09xO9FUsrz0l53uvobGBg4wvO8u+Lsz7Ks/sHBwRvjzKnnWMdxfkVVXmmtAQBfyefz1OZszCBgEDAIGAQMAgYBg4BBwCBgEDAIGARSRCAqUfUXxtjqOOt5nnfU0NDQnWFzVq1a1b13796P+HxWbZr+z5BShhFka7oxwyYiIIRYyxj7RRJUEPFthULhm0nm1nNOLpe7DADOClnjI1LKT9Uzhunk208w741TkRSWsJ4KbBzH6UFEqgrT/b6JCpNUAM8030lRMJm/GwQMAgYBg4BBwCBgEDAIGAQMAgaBeAiEJqocx7kYEV8XzyU7TEp5n84cx3H6EZHUxETE+D9KKZ+n49OMiYeAr/53L2OsK97Mx0b/Rkr5ogTz6jpFCHEdY+ykoEWahei7riCk7FwI8SBj7CBdt21tbQdt2rTpId3xjRgnhPg2Y+zNKa71MCIeXygUhlP0aVwZBAwCBgGDgEHAIGAQMAgYBAwCBoEZjUBURRXJupO8u7bFfUH1SdfPBYAvBnAlEYG6k8/niWPGWB0QEEIQ6XWShNOu7u7uQ9evX1+uQ1iJXQohFGPMDnJgWdZzBgcH/5x4gRk4UQhxM2NsgebWK1JKavOlqqOmseXLlx9SqVSKCdqOw/bwT8uyVgwODt7dNBs1gRgEDAIGAYOAQcAgYBAwCBgEDAIGgRZGICpR9QrG2KVx9lcqleYMDw8/GmcOjc3lcq8DgIsnz0PEnxQKhVfH9WfG6yOQy+XOBoCf6M/4/yMB4PgmU2EEIcRuxlhnyH6eKqX8Z5L9ztQ5uVxuMwAMaO7/finloZpjGzqsllbXoEARcbCrq+vkDRs2PNzQzZjFDAIGAYOAQcAgYBAwCBgEDAIGAYPANEQgKlGVY4zJOPsulUrzhoeHqZUslgkhbmCMrZo0adyyLD44OLgzljMzOBYCQghq6aJr1hFrIpEWAXw8n88TOX5TmBDiyYyxMI603WvWrOlet26d1xQBt0gQjuNci4inaIZ7s5RyoebYhg9Lm1jd38Bfuru7T1u/fv2ehm/ILGgQMAgYBAwCBgGDgEHAIGAQMAgYBKYRAqGJqpUrV3aNj49TlUBGd88AYOfz+VHd8TQul8udAAB/rTLni1LKC+L4MmOTISCEuIYxdlrc2Yj490KhMDnBGNdNauP7+/tXWpb19xCHW6SUy1JbcIY4chznJ4h4ts52ASCfz+d1q690XKY6ZtmyZXMzmcwmxtjiNB0DwNW7d+9+SbFYHE/Tr/FlEDAIGAQMAgYBg4BBwCBgEDAIGARmEgKhiSoCQghBnC48BihPl1LSS6C2CSF+yxh7/qQJD2YymYWbN2++X9uRGZgYAcdxXo+I30/ggPipDpVS7kowN/UpQoiodtXLpZQvTX3hae5QCPFVxtg7dLaJiH8uFArP0Rk7VWN8FcB/MMbmphzDb7u7u9eayqqUUTXuDAIGAYOAQcAgYBAwCBgEDAIGgRmDgE6i6n8YYy/XRYTagwqFwh90xwshljDGtlAX2cQ5APC+fD5/oa4fM642BIQQxCl0F2OsLYGnM6SUVyaYl/oUx3HWIeLHQhx/Skr5kdQXnuYOhRAkqkDiCjrWEsnAXC53ClVBJbznw3D4E4kTSCmJK82YQcAgYBAwCBgEDAIGAYOAQcAgYBAwCMRAQCdR9T7G2Gd1fQLAa/L5/CW64wNaiv7V0dGxeOPGjWO6fsy42hFwHOfPiHhyAk/fklK+NcG81KcIIX7BGFsb5BgA1ubz+V+mvvA0d+g4zjsR8Uua2/yBlPJczbFTOiyXy70UACgZr93erBMwAGxExNOllPfpjDdjDAIGAYOAQcAgYBAwCBgEDAIGAYOAQeD/EIhMVOVyuecBwO9jAPYRKeWndMYvW7ZsfiaTuWlyRQMivq5QKPxIx4cZkx4CQoi3MMa+mcDjdillT4J5qU8RQmxljPWFOF4opbw59YWnuUPHcc5BxB9obvOrUsrzNcdO+bBcLvdKAPhx2skqxtgORDy1UCjsmPJNmgAMAgYBg4BBwCBgEDAIGAQMAgYBg0CLIBCZqFqyZMnBHR0dVBVgae7pe1LKN+qMzeVyXweAt00au3XBggX9l19+eUXHhxmTHgK+Yt6/Ylzrxxe3LOuYwcHB29OLJr6n1atXtz388MOPMMYOCJi9S0p5MGMM43uf2TNyudyZAPArHRQQ8b8LhcKHdcY2yxghxGsYYxcnufcj9nCf53kvHhoaqiYW0SzbN3EYBAwCBgGDgEHAIGAQMAgYBAwCBoGmQSAyUUWRCiFGGGNZzaj/KKV8XtTY5cuXH1KpVG5jjM2eOBYAnp/P538XNd/8vT4ICCH+xhg7Pq73uC2fcf3rjPcJst2QseullM/S8WXG7I9ALpc7CQCu08TlA1JK7XZhTZ91H5bL5V7mV1YFJTqTxlBijF0gpfxaUgdmnkHAIGAQMAgYBAwCBgGDgEHAIGAQmCkIaCWqHMf5DiJqVUkxxm6SUkbKvgshPsEY24/UGhGvLxQKq2cK+M24z1wudz4AfDlBbD+SUr4uwbzUpjiOcxYiXhbkEBG/XCgU3pXagjPIUS6XEwCQ19kyALw9n89/Q2dss43p7+8/2bKsXzPGDkw7NkT8yYEHHvhGowiYNrKN85fNZucwxuYAwJxKpXIQrVypVP5D/25vb999+OGH37d+/XpSQjVmEDAIGAQMAgYBg0CLITB//vzO2bNnr65UKgsB4JZ58+b9wfyut9hFNOFOGwR0E1WvRkTicNGx8q5du+bs2LFjb9DgpUuXzm5vb6dqqkMmjEHP81YNDQ1t1FnEjKkPAkKIYxhjt+rwl02K4DYp5fz6RKXnVQjxeapcCRqNiGcVCoWf63kzoyYiIIR4GnEu6aDS6hxzjuP0IyJVdR6hs9+YYzZ7nnfG0NDQnTHnmeF1RkAIMWv37t0LAOBpiEj/XoCIdN8vYIwdzhijtmEde4Ax9m8AoO9R4mDc7nne8OzZsweNEqQOfGaMQcAg0CoILF269PDx8XH6zrx7dHT0llaJ28RpEKiGQDabXYGIP2WMLdz3d0Tc4nne87dv336HQc0gYBBoLAJaiao4L6l++EullERqXdWEEFTV8sVJf/yllDJQra2xsMzs1XK53GYAGIiLgmVZTxscHNwZd15a44UQf2GMBVbklcvlo7ds2WJ+aBIA7rfqainYTQdlxYGBgQWe513DGLMTwBU15Q7Lss4YHBwcjBpo/p4+AosXLz6qra3NRsQeRLQBgK4xiUE8JUGCPk6AVGm1hTF2HSL+xnXdfzDGvDgOzFiDgEHAINAkCFjZbPariHjePiESRPx9JpN55cjICCXrjU1AIJvN9hKtBiIuYYwd7R9+dEwYQry8DzHGiCrgLgC4HRFvB4DRrq6ugjnkqP/ttHTp0qNLpdIQY+zQKqv9SSn13PpHYVYwCBgEJiKglaiiCUIISkAcqwNfWOWKEKLdr8ygyp19VqpUKr033ngjnT4bm2IEhBDvY4zF5hgCgHPz+byuMlzauwQhBLXgPNaOU8VullI+fkKS9uLT3Z9PVD+u8yLvK93FUQptSvhWrVrVvXfv3ksRcU0dAtwLAG/M5/OX1MH3jHRJlbpjY2PHWJZ1RCaT6axUKnMymcwBiPhUROQAQMko+qe7SQC6hzH2Y8/zLjKVCE1yRUwYBgGDgBYCnPO3Msaqtfhfq5Q6TcvJDBjU29s74Hke4bS8hu2W8BQMewAAIABJREFUEZG4gv8EAJcppQo1+DJTAxDgnP8XY+wrIQCdqZS6wgBoEDAINA6BOImq7zHGztUJDQA+ns/n11UbW03mHgC+mc/nJ6v/6SxlxtQBgWXLli3KZDLbE7i+VEp5doJ5NU/RIFL/sZTytTUvNIMdCCEeJn4eDQhOkFLeoDGu6YesXbs2c/PNN38eAN5Zh2BJffKza9as+fC6detMZU1CgG3bfi4AfJAxtoox1pbQzVRO8wDginK5/OHt27eHiUFMZYxmbYOAQcAg8DgCnHPJGMsFQLJYKTXjD557e3uP8zxvw2TRqBRuoyK9ZxWLxcuNinUKaPouOOevZ4x9P8gjKV8Xi8WXpLei8WQQMAhEIaCdqMrlci8FAF1+n99IKV9UZXGqetk2SUHwEcuyFg0ODt4dFaz5e+MQEEJQi8rSmCveKaU8KuacVIZXS4BOdDzF1V6p7HGqnQghbvdL1kNDsSyrf3Bw8MapjjfN9XO53OsA4NuMsbQVASnM33R0dLx848aNY2nGPBN89fT0rLUsi36XtH/LmhgXag38rud57x8dHaWksDGDgEHAINB0CHDOn+pzmQbFdoZS6sqmC7zBAXHOf8UYO7OOy97Q3t7+4uHh4XvruMaMcW3b9jMAgBKLQbZ77ty5h5pntRlzS5iNNgEC2g/3PkcNfRlaGnHfIaWkHuz9jBSTurq6LmKMvXyfH0RcVygUPq7h0wxpIAJCiI8yxmJfF+J7yefzow0M9bGlcrncDwDgnKB1EXFRoVDQIgNvdOytsp4Qgnjn+qLina5YO46zChFJEZCItdO29Z2dnadv2LDBJChiIMs5p880EZ5PGwOAnZ7nne26rhEWmTZX1WzEIDB9EOCcv4wx9rOQHb1AKUUcjzPaOOfEiXpknUG4xbIsx/CC1Y7ykiVLDi6Xy6H8apZlLR8ZGTH8orXDbTwYBLQQ0E5UkTchxKYYfdZHSinvqhYFqWp5nnchACwZGxtbWCwWH9GK1gxqGAIDAwO9nudR9VtcO09KScnIhpoQgpJjiwMWvUVKScpdxmpAQAhB7XzUXhVqbW1tR2zatIn4d6adrVix4uhyuUwnxaIOm6NWilOklFqk9XVYv6Vc6jxUttSG9g92nBLvxWLx0hbegwndIGAQmIYIZLPZLyDiu4O2Rl0SIyMjM/5gkHNO70D1UA+eDP23lFLEGWasRgQ0rtm5Sqmp4uKtcXdmukGg9RCIm6j6CGPsEzrbJALiQqHw27Cx/f39RxqZdh00p2aMEIL4Uoh8OI79QkpJp20NM5JHbm9vp9bRoPv5W1JK8yNe4xXJ5XK/A4BTo9yMjY11T+fks18ZSiToZ0RhkeDvWy3Leq5phY5Gjj73pVJpKhOiuxlje31y9npwYyEivsN13WqExdEAmREGAYOAQaAOCHDOr2eMnRjgenzevHmz169fT63MM9o45+sZY89sAAj/VEpRO6axGhHgnP+JMfbsEDcXKqVIcMqYQcAg0AAEYiWq+vv7j7MsS5d75hNSyo81YA9miToh4DjOfyMikRTHsXullHSCRETRDbFcLncmkRwGLYaIpxcKhasbEsw0XkQI8QvG2NqILXpSSnppb9j1nwrI161bZ1111VWf8Em8Y32PasRLJLTPllL+U2PsTB4CnPPbGGNPSRmEBxljVNUWqhKKiKe4rvsHWnv+/PmdHR0dcxDxwEwmMw8AFgEAZ4ytQMQBTRGCatvwEPGlrusGfr+lvHfjziBgEGgyBOhwBBG7y+VyV3t7e5dlWQ/t3r37oZ07d+6ailA55/T9eEjA2koplZ2KuJptTdu26dn0lw3gUNyjlOpqtv23Yjycc1L9I/W/ICPVxVe04t5MzAaBVkQg9guWEGInY+xYjc3+RUp5ksY4M6RJERBCkKILtSPFMmrpzOfzSdoGY62zb7DjON9AxKCKqb1jY2OHTucKn0SgJZjkOM7FiPi6iKmPSCm7E7hvySmO47wcEakMPO2HxNssyzphcHCQCOyNBSCQzWbPRkSqbov9W8YY+zdjjCS/XQAoIqLyPK84Ojp6J+f8fMbYl0OA9/bu3fsknRfFbDbbgYjPBICXICLxM8b9fIwh4grXdYkjzphBwCAwjRFYuHDhYZlMZrVlWatJ0AYRFwNAIC8iIt4LAPTdUKB/KpXK37Zv307cSHWxxYsXH5rJZOi7M8iuVErVo9q4Lvupt1Pbtp8HAKQmRwcfnf4hCHF9HhyyNn3nbwQAOuTQ+b34q1KqEZVb9YZryv1zzkndnlTuqxqRrReLxeOnPFATgEFghiAQ++FeCPE1xtjbNfAZ27Vr18E7duyg1oiWsNWrV7c98sgjz0JESrBRkmae/yPxCADQKTudXu1CxJ2IOJLJZDZO9xfJGInJidf4v6SUdJ80xMJaFAHgunw+H1bG25AYp8Mimp/9u6WUT54O+9Xdw8DAwIDnecRblTZp6sj4+PgJW7du/Y9uLDNxXE9Pz+mWZa1jjPVX2f8eALgVEW9hjG0HAEUJKfr+dl33/iC8NNSatiql4qqisoULFx7Y3t7+JsbYByJeVCaHlp83b95K004zE+9ws+fpjoCfzKbkDgnC0POKjmhRECxUhbnesqyfjo+P/2rHjh0PpYlfT0/PKsuyiK8yyExrVATgnPNQYRpE3OK67rK1a9dmisXiMz3Pe6NPNdBRxXWFMXaSUuqvaV7nmeqLc/50xliYkIlps5ypN4fZ95QgEDtR1d/ff7JlWX/WiRYAjs/n82FSnzpu6j5GCHGoX+p5Xkg5c1AcRBh5pWVZlw4ODuq2RdZ9T2ktIIT4AmMskDQzYJ0rpJT1lOR9fFmf3Dqs6uQdUsqvp4XHTPYjhPi0/4IdBsNNUsogUvtpCx/x7VmWdUUMsQldLEjA4iQpJfEhGQtBoK+vb16lUumh9jvG2AOIeCtVRyUAjVoKifvqsKC5iPgd13XfnMD3Y1N6e3uf5HkecU9RhZWuvVMpRW0JU25CiPZHHnnkaMuyDvY876BMJlNijD06Pj7+rx07doRVW0x57M0cAL2YjoyMHMUYe5J/HzNEfBQR70p4Lzfzdmd8bHS9t27d+ioAoER7PTiGSKjoK6VS6fNpJaw451Qd9P2gi0fVQ8Vi8eIZf3FDAOCc0+HT3JAhVyil9nuGJk7Gcrl8LiLS786+dnc6PH+TUurnBu90EPAPk6gwIej9+FGl1Jx0VjNeDAIGgSgEYieq6Id1586dVFZM1UZR9kEp5WeiBk3V32kvt9xyy3mI+CnG2EG1xoGI12cymU8NDg5qJfJqXa8R8/v7+1dalvX3mGs9sGbNmsPWrVvnxZwXe7jjOK9HxKCHJrQs66nTveotNmgJJziO8yH/sxLmYUhKSdWIM85Wr17d+dBDD30XAF6V5uYB4Oo5c+acaapp0kQ12NeiRYt4W1tbMWw1RHyt67o/rjWibDb7ZkSkhFVGw9fdc+fOXbBx48YxjbGpDlm4cOEB7e3tJwPACxFxOWOMOGiqne7TuvTytJkxdj0iXu667vZUg9F01tfX95RyuXwKAKwAgKMRkdqn6FCqAwD+g4j0skh8cP9gjP1NKdWwdvV9W6BnkG3btpGS6ot8RVVqCZoVsEVKVhcA4G+e5/3Kdd3Ybfma0JlhDUAgm832IuJPAipB047gDkQ8z3Xdmrk6OecXMsbeExQgAJxQLBbDKq7S3ltL+Vu6dOnsUqkUqnSOiF9wXTcIY4tznkXEI6k9cHR09OGWAqAFguWckzhT4Dvu2NhY16233rqnBbZiQjQItDwCsRNVtGMhxDcZY2+J2j0A/D6fz0eqhEX5qcffV6xYMa9cLl/GGHtW2v7pxbJSqbx5migaghCCKpbolDeOCSklcSbU1XK53GUAcFbAIpuklFTGaywFBIQQ72CMfTXC1Q1SyhNSWK5VXdDn5UO+Omqi79eAjV8kpaSKT2N1RsC27TcAwHfDlkHEnrQSMJxz+v66VKfdBwDeUSwWG1Yhms1mj0BE4uuiU/ykhzk3IOKFruuSCnC9RRbAJzCmmCkBFOczSBXR32tvb//x8PDwo/W8zfxTe8KU4kzaKj2CiJ+fPXv2/0gpqaLNWIsg4CeoiQOPOIsaZaQi+nHXdUm5O/HnMJvNXkWq3kFBl0qlw6OqKolm495776VEy6GICJZlVSqVyq5MJnNHsVgcbxQgU7GObdvEOTYasfZblFLfnor4zJqM2bZ9IwAcF4SF53lHmQpXc6cYBBqDQJyHuMcj6u/vP9GyLJKnjbJHuru7D262SgDHcfoQ8fcJki9R+5349/sR8ZWFQuExVahWNk1uoslbvEBK+cV67tuv7qMWnarqM4j43kKh8Pl6xjCTfDuOc45PHB647WZOTjfyWjmOQ8TZdFqe5ovIu6WUX2rkPmbiWpxzIlIlQtUge0gpRUS4qVWMcs4/zBj7pAbeUinlaIyraQipGHZ1dZHiK53qp3UPry+Xy2+56aabVE3BBUzOZrPLqCUzhfbbf3qe9/bR0dGr6hAnVUNQwpmquMNaf+IsvRUA3tKIKhYi+m5vbx9AxKWWZR2LiAcDALXajiMiEUDfAwA3M8aKALDRiJg84TJSW/HnwiqS4lz4hGN/PmvWrFclTW5yzinJEtTe/4BS6gnPY1RFVC6Xn+95HlU40uHhIsYYqQNPtjJjjO6fDZZlXXvggQdeMxUVpAlx1ZrW29t7kud514UNnqgoq+W0hQctXrz4qEwmQ6TxS/z2V/o+oe9GqiCl6uG7GGM7iFdyz549mxpRyWTb9rUAcEoIrEumogK3hS+zCd0gkBiBRIkqkma/+uqrSTo9ssrG87yBoaGhfOIIU54ohFjBGPsdcUCk7LqauzIAvCmfz7d0v77jOKsR8S8x8fqtlDLw1C2mr6rDNRKmC6WU9NBjLAUEcrncywDgZxGuLpdSvjSF5VreRS6XezpVV/rtRmnsp+x53slDQ0OGNDUNNAN8cM6ppSqsfZXaxE5MMwS/BYxarKmtLtTSrOaqtlA2m13hKynWg2tuNwC8rVgs/jBqn3H+btv2GwGABDwOiDMvYuwlpVLpjWkJwvT19T2tUqlQ8nplijHuc1VBxE+4rksJsNQSqOSc2j7b2tpeAwDEp0bVsjptqjSVkg50T1/ied4vTIsSY9ls9juISMTYU20XK6WIayqW+aTvVG1YLclEvv6hlHr8/vbv+Xcxxl7DGJsda7H/G3wfY+yiNDm2EsSQ6hTOOVEDkFJtmC1WSlFb8rS0np6ebgCg72x6VqQkle676B4SCgCAH5dKpSvS+m6eDLJt2xcDQKDCNSKudl1Xp1hjWl4/symDQCMR0P1yeEJMjuN82W8JiIq3aaoA/EoqeskLk4WN2k/cv5MCy6sLhQK1drSk+ZVLREocKJFcZWMPdXd3H1LParpcLvc5AHhvAKgFKaVoScCbNGjHcU5DxGsiwvuRlDLwB75Jt1a3sAYGBno9z7t2AvlprWvdVSqVlg0PD99bqyMz/4kI+C9ipJIVlvD4qlKKWrZStWw2ezwi/k3D6buUUtQ2lLrZtk0JiYtSrKKqGiMiftp1XWqRrdk45+SHEjT1sOtLpdLptRJRZ7PZkxHxFw04IPvZrFmzXp20WmYSgNRGSZWFHyWOrxrBfQAAPrN79+5vpFkRsXjx4kMzmQxVIpJSMynlXVEqlT5V6/Wqca9Vp9u2TTh+PIFvqighzrxbSX0aESkBeCCR7VuWRf/u8SuU4j7Pv1wpFXXwtF+4ixcvtjOZTFhF5I+VUq/NZrNzPM/7OCWlQ7js4kBBz59vVUqRum5Lm23bHwAAEqYJsgoAzJqOLZDU8nnPPfeQOBM9t9daLEBcyev6+vp+ePnll5PyYWpm2/bnAeCCEIdnKqVIPKeqUWt3R0fHszzPo4OnPgCY7793zkHEkmVZj3ie92/Lsm5GRPps/21sbGxzmt+NqYFhHBkEphiBuD9sj4frVwuESXg+NhYRryoUCi+c4n0yX5WLCF4jq8DqEOteADgxn8/T+i1puVzuBwBA0snaRiS29dyzEIIemOxqAQHAu/L5fF1e5rQBmGYDNSrYaMdfl1ISl5UxHwEhBHHQUBXnsjRA8dsrT6uFZySNOKajj2w224+Iodx6aRGpV8OPc04HKaEcbwDwq2Kx+JK08a/hRTppKDXL2PtcP/Xmcvm1UorwTsTrk81mz0ZEqiALqkJJil/QvCv6+vrW1vLy5rf40eHac1IObsTzvFeMjo4O1+q3p6fnWF/o5YhJvrZlMplnb9u2jWgBmsJ6enrWWpZFymy6z9y3IuJ3K5XKlTqtsvPnz5/b2dlJogGnM8bOpkSWxsb/WSqVFsepSrFt+3n0+xPkGxE/iIh/siyL+F8XasQQZwh9/j6llPpY0s9inMXqNZZzTuIZbw3xf5tSihIb08oWLVq0oK2tjT4DqbauA8AGollRSt2WFmCc84/4PKNBLs9VSv1g0h8t27bpueytAECJ8yCxkSCfRIr/awD4fiPauNPCyvgxCNQbAd0fzWpxEGnwTsZY1BcqnU4fmtIJXyI86JS8s7PzLwDwjEQOGLsdAEi56J+I+IBf0t6JiN2MsWN80r1AKXN/zVvHxsaWtCpng+M4pPYU9zTrA1LKzybEPHSaEOJp1LceMKhiWdbRg4ODpNxhLCUEhBDUDhWlNPVZKeUHUlpy2rhZtmzZ3EwmQydwq9PYFLWPFAoF4lIyliICUdLrtJTnecel8aJdLWzOOVWwRF3XO5VSqR64xODIShHtx1xRlcS3kji1bVsAALWWxX0hiL0cALy+WCzGbuG3bfvlAEDtfrrtcrFjC5iQuOpvyZIlB5fL5fWMsaVpBTPJD7XvvLRWBTrO+aaQVtnr+/r6To6TrPPbkQQ9O3ieN9eyrBIiPmhZlnvYYYeNJK0Oz2azxyDiFk1OMkqufbiWKpHe3t4nEWk6IlIyJPQZHxFf7Lrur3Wvs4bQxE8ZY2eGKFfqLhU4DhG/5LouVeW0pHHOCe8zQoJPvbV8qoHinD+VqoZSrCyfvCV6L3u+UooUXGu2bDb7DkQMEw56n1KK1C8Z8Tl2dnaeS0InfmVjzeszxtZ7nvee0dHRpqHNSWNTxodBIAkCtSSq2P9j703g5Kiq/fE61d0hmQhEWYK4hZhk6tYMgenqJCKoEVRQAcUNFQUXeKhPn+sTRR9Gnz7FXXHB5bmguG8I7sJDBRHS1QlJpm5NgjHugiBLIJNMd9f5f7751eQ/09N161Z1VU9P0ufzyYf3nHvPPfdU9a17zz3n+40pvdpnDxGdVK1Wb0xjYBZ9HMcBqDfq5HUFtKPXIDADbCYd9r7jjz9+SbFYPIuZweAUhTPyMdd1My8Z0Z1UJ+0cxwFlNvACFiTQ83PXdU9N0F67qeM4eJ5twdr7gN7abkzUcPXq1SuazaaSrYaI3l6tVt+TSPEB0hhYL4ceeiiwKbLA8LovCAKhszYdIO7NZJqWZX0s3HBG6asPDAwszOviZXh4eHGz2USpj/LbTEQHZ3XpIYQAgy+YfJPIPYZhgCgEzHP/wIG+UCgcxszHhIcwgCXryATAlT3P26DTeEobgJJjEz+i04+Z7yCizYZh4ECDb9nRIXivVpYTEfme59lJMjmGhoZOC4IAGHVaY4TzAHjwdURUhc1hecghRIRgx+kx2GnTXJE0CDHZWQiBwGHeDKMIAj0/SZBk6uTCkr9/qp49Eb3S8zyUsUZKiL91rmma5zEzsJVQPthOcOH6zWaz+eGtW7f6Ou9c2Abg6ddpXlD8vF6vvyiOMU93bCHEuYZhIJMvak5Q9TkppTZmlhACjIHINpltya38Oe+JaWTNfltKmcUeIe+paOsXQgAyAtlGeQrK6U4bGxvr+KxpWdZLiEiFo3iplPItITA+1hjd712S+aOc8cPYU++PZaBJHNFve2B7oKNAlWaGhYG6/Gq1um42XD0yMnKCaZqI5OvcaOKA8MHdu3d/aXR0FBvaVFIul08mInzQQY89VerNZnNo48aNcxIksVwuXxWmluv65YHx8fGH5LHIOo6juk09x3Xdr+ka2W+n54GwfBa4ACp5neu6qpsovcH201Ygorjmmms+pInvp/QCEX2zWq0iMN6XjDwghPh5TLmTlFIiYJGbxLBq7R0XrGu+7yPw0pEIIQAK/0vDMEqaim5g5v8+6qijrlNlmKBEyDTNTzHzUg29m4eHh0eSZL/Ytn0OMyN7I05+ycyX+L6Pm/ZppXsrV648sl6vAyAcB++2zLEtyrUBjoeGhpYFQYBSf108TLDkvfPQQw+9WsVyJoRAViuYDXXKZ+4sFosrNm/efHeck6b8HYEVBCF1SscSqG3bFKxej5NSKkttIwZBoPJewzAepDDinwMDA0tc18U4M8S2bWSJAx4AwVVdmQjLz4CJFlsKGpb8AZssTq4YHh5+WZLfQJxC/N227SuZ+YVRbVE25XneSTq60EYI8aUQGF23S17tJkzTPGl0dHR9XgPkpVcIAUwiEaWfmT/u+/5r8xq/23qR4RcEwV3dGDe8kFjdaRmgEAIZb5GZhii/NwxjJzODJKCjc7SGX37dbDafvXXrViQK9KXvgQPOAx3/wBzHwWZ5WOU5Zv5trVZrDdrk7uwQBBw3taA9VQlYTN49b968j2VIhYvSyNcYhoHSt31ZSKCsr9VquOmac1KpVF7OzJ9PaPjjXNe9IWEfZfPVq1cf02w2webX7v1FnfdRUZvTLO040HSF5WvKQw8RnV+tVltr9w80V8XO13EcAHUidbzTNfhk13WTMnLG2negNhBCAOfikYr5f19KidKW3ESjNARjo8wBuGepRQgB7DR8HxdrKEGA+kIpZRyZwj5VISX9d5k5NquWiF7heR4CMFpiWdYtRAS2KJV8VEqJzFtlQCHMYkPQ60kqZaZpPnV0dDQSn2ey7wknnLDgnnvuQZBKuS8K2+8kotcODQ1doRukwL5m8+bNnwSjsIazPhL6QKPp3sDGPGa+P0HgEnrh31TrGBFtX7BgwbFpvtdCCASAnhszsVdLKadlC4YMmx8wDAPZ7Wnt/qzneUr/I1tr3rx5nkawFhhomEembI3wS8i6ByzPqED0JinlcVovBwBBLevaEH9Ht0u7doBsqAJOIwiC+4ioyMxHmqYJfEAEzXSD5qOLFy8+Pm1JZicT6KSvEAJEKJFQIcD58n3/vZ2M0Ut9w7K/HQltSr2mhMyTOG+m/j0JIZD9pf2tSzi3NM29er2+NqtsyzQG9Pv0PTBbHkj1kZ5qrOM4wKNRMVigeXNiYuKIhDd7HfvEcRxEu3EDpJLrgiB42YYNGzID4ps62MjISMU0TRwoJj9MuJHDLR+yt+aU4Aa6VCrBblUqeeucLnFdF6w8mYnjOBeFAcB2Oj/nuq52KntmRh0AitauXTt/586dKE2JFJRz1Go1AGb2JcYD5XL5gpBhLcnvaZpWZl5fq9XWxB3G+w8j3gMIrNTrdQS6I7+LWbLVRVlkWdaHQAahspiIzvY8TydTI1KNbds/ZOYz4j1j3EBEz/U8LzHmXxi0wfcvDpttx+LFi5frHDoty1pBRMoSZMMwfiWlBKCt1mEFpe27du2CnU+I8gcCbr7vI+NOKbZtf5CZdTB0xhqNxlk6YNltBiTbtr8AYP8Yc8abzeYjk9zG27aNrLnIi8UwawFg2T8yTdNF9jme8913373YNM1HB0FwJhE9W5e4hog+5HmeimGr7RRt217NzMisVslmKeVUrC1kYqGkp+PLwrjfoA7eHdj8QDqTVRlvO0fYtv0ZYBpGOOnHUsqnx73Tk38XQqAaIA1IOtYOYO99RUoZWVGA7Jtms/nqkM15YZxdOuWdcTq6/He8fzgDRFZ4MPNLfd+PO7d02eyOhkOWJs5Xj1BoAf7vV03T/OnExMStYO3E97jZbD40CIIVYTn5M4F3rGMJyvc9z7tMp227NkIIkEjErvVp9afst5GIHpfnWpHSrn63vgdy9UDHgarjjjvuYcViEYuQsrQOeAm1Wk0btLHTWYfZVPggRqV1YwO77owzznjPunXrtDazaW0KsX2Q9QBcDJRCXlStVvcC8c01qVQqvw2xHHRNv8513VN0G+u0cxwH2CROu7bMXKnVanGA3zrD9NvM9ACyBEGNrQqsnO66bi/dRPX0c6xUKucyM0CadUqT286l22trTzu0A+PCsirl2kFEL/Y8T6fkLLUlQoi3IcNXpQAMrJ7nqTA0lONblnUeEcUehojo6gULFjy7E0yuFStWPKxQKCDzOq4MTkn5PTkhIcTrgd2hmiAzr/V9/1dJHkJYCgj8oXZ2Nkql0sM2bdqEbIhIsSzrsUQEqIG44HNtfHz8lB07dqDMLpWEQcCNhmHgIBcpzPxW3/e1SU3C3wFA6g9qUYqsiA8sWrToi3GZ52HWEoJoyFyKe+7Aq1rh+37SrAuUol2D7ELV/IMgsMbGxvYGNoUQ2Hf9ZyqHz+x0i5QSlwTtBIdzMBuqsuqaRHSi53lxwbaOzBVCAD8HWVXtvjH/LaW8RHMAzAkXVa3vhao7ypXePT4+/pkdO3YA+1VLVqxYYRUKBeC7KYNizPyXhQsXLu1kfdIyKKNGlmUdRkTKEi7dzM2MTOqKGsuyTieiq9qsi1uI6NIjjzzyG3GXFMhQLJVKACwHrMr8GMP/Va/Xj0HAK80EBwcHn2iaJrDl0gqCkTgrYQ3YhmfOzFjnTNM0D2dmQUS4FElKWPF1KWVkKW9aY/v9+h7oZQ90HKjC5BzHwQ/6iTETvdx13bwBOveZUC6XzyCiH0bYtIuZX9zNwNmqVatWBUGAjTPKAG90XVcbF6CXXqCYbKZ2pu4aHx9/cFY4VeVyeRkRtb2RC7NLooDse8mNc9YWx3FQJgsw4rZimuba9evXJzogzllnZGR4uVw+O2QG0y15mDZy/73P5kFYlvVCIrpSpS0IglV5M/FoBmKzTZxdAAAgAElEQVT+zff9OHbAtlOxbftBzIw19KgYz/160aJFp8UFJXS8b1nWvxFRXGnfN6WUsZhrQghk80S2w+HV932Ub8ZiCLXarrDzk1LKV8fMFQd5lPzF4UdtK5VKJ8UFvTT9+gQiAkOfSjZKKbVA5yeVIFjFzJ8iIsAmAAfoCwMDA19PGhAYHBw8xjRNXNKB9UsliUC9p9iJQBCCdZGBfiJ6m+d5/xMelrEnzGTfi/erXq8vuO222/a0TiwEWb5WNWEiii0f1HkHdNoIIQDZ8PKpbVF2GQTBat/3tfCDbNs+ipmTVAL8oFQqXZj2PQ8D3Pg97b3gjRJgcPm+jzWh52VwcHAQLJIx78WI53l4p/crEUKgtBqYcEuY+QbTNC/3PA+/x0TrdBhIB65iXAD87VLKVMQ+tm2fxMy4cEgk2IuZpvnxZrN51djYGLKzlbJ8+XJRLBZx8fLSBKQb50kpQcrTl74HDggPZPLBLpfLLyWiOOrmHa7rJgGt7OgBOI6D2xiw5LTKeBAEZ2zYsEG5ieho8IjOYfbEl1EKGeIozTlwvHK5jJsAgEFqi2maJ65fvx43tB1LpVJ5GzO3zTYAhXi1Wo17Dzu24UBW4DgONrUPUfjAcV03DTjugexWo1KpPJuZv5FgszLNX/0AYeevjxACoNq4rY0UBN07yYLRsdK27YuZWbnBDoLgeWNjY9/W0dfaRoe5C4fY3bt3l7dv3w7A6o4lZFf7ExEdqVC2c/HixQ+Ju1m3LOt3KJdS6AHmD0rPUollWSg9ekV4QN5uGMZXh4eHL4vDkNIEeL+v0WiMbNu2DXozESGEilhk7xiFQuGRW7Zs+XMmAyZUEmb04NCnwkLbXSwWj04DD2FZ1heICAe9KKkhe4GZkVWlDHoknJpRKpUWtwvECCE+axjGBQp9e4hohed5f0o6Zpr2a9euLd5+++0XMDOIflBBUCsWi59N4u/BwcGVpmneqjn+u8NMrURBiFbdlmWtJSJchKvOKr+WUkaW7Gra25Vmg4ODJ5qmqcRsLRQKR23ZsuX2rhg0RwexLOsEIvqFYRiq8tC/L168+JFx35N2LrBtew0zg4BDV/4aBMHr036Tbds+3jCMrzOzpTHgP03TtDoh/NIYo9+k74Ge8UAmgaoTTzzx4N27d6MGPTLTIpzxMtd1AYKdq6xZs+aQRqOBFP3WFOWAiM6qVqtRmVa52gXllUplLy4IEZ1XrVbnZFTccRxs+JTlBi2OfKvrutqlB6qH4DgONkrt0mXvqdfrD9+0aRMyfvqSkwccxwGocuRmv1AoDN5yyy1bcxp+v1YbYuoh0BpXNjTDD30GwM5fDSEEMpTOV2i6R0oZd4vbsSFCCJS14ZY1UojoSZ7nJb5sWbJkyaIFCxYgYKFiS+MgCE4ZGxvLFKTfsqz3ENHFMfOKzSYQQgCM+dFRepj5g77vZ1Xepfs8gT2DTAklTTkzX+j7PoIYmYkQAnhLuABTyfOllLOGHWhZ1lOI6GcxNv67lPJTSR2zcuXKh9frdXxz9pHWtNGBS4C4bL0tCEoahjFGRHehHNEwDGTR4RDZTv4lpZzBFhkGhf4WA5h9pe/7L0o619lsr1sOlRZzLGpucRmUwKELguARY2Nj8HlPy+Dg4JmmaaIELkqC4eHheXFB8Z6eZJeMsywLGJ9xa+npSQhAJk23LMshIkCM6MgN9Xr9WZ0CnS9duvTQgw46CGdTMPHGyaVSyrfENer/ve+B/cEDmQSq4AjHcVAyoaydZeZX12q1aQwseTjRcRwwqLQDmv1v13V16/HzMM0IMb2eEQTB9Rs2bEiUmZSLQSmUOo7zQcMwdMBi92onop9Wq9WnphhqWhfHcXDbAKyFdvIx13XB4tOXHD3gOI7ykNhoNB5+6623IpjVlxQecBwHGAwfS9F198TERKqMhBRj7ZddhBAATwWIapRskFKW8568EAIXGC9WjUNEZc/zwNiXSIQQKiKKSV2fklL+eyLFGo1t234cM/86Zl4v9zxPmRUrhACu06EKPZdIKTMl8IibnhACQL/fj2n3SynlU5KWusSNHbIWoiRLtZ97v5QSz37WRAjxA8MwnqEw4AYp5ePSGCiEwL7yVWn6GoZxdxAEF7bLhgDW1ujo6PkgUWiTSdz2PRNC4KCpLH9Pg6GWcm6ZdRsaGnpOEARxWZyjAwMDI0lLRFVGhrhvN6raMPNrfN//RGaTzUmREALruuqC+l4p5aKcht/f1OJyAKWhbfFqMVki+prneecknbhu9iAzX9doNJ7Wrvw36ZhoPzg4eLBpmlg74kq17ysWi0uSZESmsaffp++BXvBAZoGqSqXyVGZW0mUz809qtRpoP3MVx3E+ahjGa1sGGR0fH8fmHiB3iWRkZORRoOQlIrBWHEpEO5n5X8z8h2Kx+NtbbrlFq8Y/0aA93LhcLj+OiJQHjhbz71u6dOlDOr0lchwHQcZ3tnENSikHu5Gt18OPpSumOY4DUGQVQOwi13UzKRfqyoR6cBDHcQBAnJgFC8xOtVotFW5RD7qh6yaFGTGDioE7KinTnZAQAiUNwPOIEiCyHp409R+H7s2bN+8goocrdN/PzEt0cWt054R2IRju3TGZLygZQglmpAghQOigYs16h+/7yhLOJHbrtBVCIPtMxWyILLXjx8bGAK6budi2LWPKRr4lpTw784ETKAzxeXDRFLXvbBSLxSPTHL4SZkBMtfqfhmGcqGKiQ+MwGIgLur0lpcz86YULF76lXUDGsqxLiKjdPmVy3H9IKZGV3FFZXALXZ9LUtu0LmflylbIgCJ4xNjaWecWCxvt9lZQSweKeFiEEgqmqy/o/SSnj8Nx6eo7dNE6Dne/O4eHho5KePYaGhuwgCEZj5iLr9fpj0gK2R+kO10lUjihJC4jotZ7nfbyb/u6P1ffAbHggs0AV0p137tyJkgIVQCtYPw5zXXdXnpN1HOcmwzAeM3UMZj6zVqsBt0pbyuXyqUS0rlVXiwJsNpAZdWWxWPzCzTffvN/XloeMiij11KKKhb8AQrxhwwbdVNq2z8hxHGxyZ9RwE9H3qtVqakwS7Rei3xClq+vBrBjliqVLlxaTbgr6bp3ugXXr1pnXXHPNt5n5WUl8w8w/rNVqqoyFJOoOtLYAwkbZcGT5EDN/2Pd97UzSlA6EHTg8zygpmqJvTEqpg2UxzQTbtk9hZoDQqiTXzBshBPDrVLfFX5BSTgN9bjVWCIFgV2TWATNf5vs+MhO7IsPDw49oNptgrFOV7OZ6kNYoj0qdrZSlE23bvoGZT4zS2Qn2mmVZoG8/LoG9YOECO6Q2fqbjOIC3qKsyhoQQ+I1FMh0z8xd9339ZAjt7oqkGG+mdAwMDR2eZTTU5ccuy3kpEyGqLkrullNiP5srg3emDEEK82TCMSxV6NkspkzLBdWrWXO6PrKo/GIYB8oy2QkSPScqsGeLqqSAs6jgXSilzwWPVwcs0DKMqpVw1lx9e3/a+B3Q8kFmgCoM5jvMhwzDeoBo4TcBIZyJT2ziO868WRgjfdV1b9wZr7dq18++///5PMbMKoLOdWVi8vhwEwcUbNmzAYWO/FcdxQG1+XoIJvtF1XSWluErXqlWrHhsEQdv0byI6qVqtKlPDE9jZb6rwgOM4yKSLKs8Yd103Dqeu718ND4QHIqS1D2k0n2zywL333ntYVmnoCcad803DjAkE3yOlG+UlQghkKyJrUSVXSCmTrL17dbVj/moZZLxQKByTJ5CvECKK5GTSlFjmP9u2f8/MSxUO6iq4ssbhc+9FTZ5skZZlfYiIVHuvrpStxi0EGlk5H5FSKveQUWPYtv0fzJykbPpjUsqs4QJwcL4vBuT5XCnlV+J81Wt/j8POY+bccLeEELh4xgW0So6VUgJnrGdFg8iiJwLKPevANobZtv0/zPxWhc2vk1ImWRdQgge2UhXhRU1KGVly2Kn/bNueF5I/LInRtURK+cdOx+v373uglz2QaaCqUqkMM7Nyk83Mn6nVamDUyUUcxwF2BTAs9gnSsKvVKjKjYgVBqp07d/6kJY3/X6CADoLgNiLCTTdANh+rKD+4m4jeWq1W4+i4Y+3p1QblcvlZRPTdBPb9wHXdsxK0n9a0XC7/LxHNuIUEHWytVludVm+/XzIPOI6jwvG5w3VdFbNTssEO8NarVq0aCoIA1PAqkOBpXgIbWrVaRYCrLwk8EFJeu6ouzPxs3/e/l0Bt4qYamQPA3Xil53nKEpw2A5NlWf+IYd37hpTyBYmN1uwQgkzjgB4Jas3M3/F9HxiTkaIR7GrU6/WjOwW31ZwWAoBgtDtJ0T7vIBGy8FDq+HaFDZuklEmyjXSnn6idRkA4dZBR43A51dZcMF50bGDmQd/35xzhiBACgP0A7o+SN0spUbaeuYRlw4AUiCyHYuZzfN//WuaDZ6hQCPERwzBUwdEfSSnbsZVnaMX+pcq27dXMDObTKPmKlFL13s7oFxI0qFhScw1UwSAhBNZzJdYimM7jMB33r6fdn82B6IFMA1VwoOM4can9f3NdFxgZudTnr169ekWz2QQr3T4hoidWq9XrdR5wCyh8A+UeQRC8d+PGjdOCXytXrjyyVCq9wzAMBN3apvwT0Vcf9KAHvTQNPaqOrbPZxrbtBy1YsABZY/M17bjLdd0j0jz3cCyAxc5gqmLm59dqtVljM9Kc+37TrFwuX0VEZ0ZM6A+u66oyHfYbP3RrIuVy+XVEhM2tlnSLsELLmDnUyLbtWIxFwzBOkFImoaxO6gGybduLwRoCPtMjpZRYD7VlaGjouCAINqo6ZI0vMzg4eLRpmmvC0nn8FyXDKjpxmBcL5K6RlYBg3vs8z1Pdsmv7TtUwBL8FRmVJ0S7TA/zQ0NBDmBn+XBMEwRqUtqhKIUO7AOSuIgrIxB86SoQQyACIKtW5T0qpAspXDmFZ1p9jMNj29ieiL3melzRjPnZ6QoinG4ZxjaLhznB+uex/Yw3soIFGgDgVw5quSZZl/Q4XMVHtu/Wb17W3Xbs4Ztm04N+d2DTX+4ZBTGQxzouYS+JyStu2j2Jm1Tc290BVGCxDSXkkHiOA+dNkV8/1Z963/8DyQB6BKoCYA8w8UkzTHFm/fr1y05z2Maxater4IAimsSEVCoXDdQDPy+XyaUSEbCpIwMzPjMO1KpfLZ+PjosCn+JrruolZJ9LOv5v9HMfBhgwbM11Z6bpuXFnLDF2VSuXlzPz5NoNsP/jggwf3x0CgrkO73a5SqXyDmaNAeTe7rrvf4CsAK+qqq64qm6YJHIBHMTM2QveapvkXIvrd+vXrgU2X64EjxP5D8P9YnWedd8aqjg1zsY1lWS8hoi/G2J5rmv3Q0NBpQRBMfn+iTEl14y6EeL1hGKrS63vq9fpRacpGV6xYcbhpmsuBOU1EKFWd/PfQFO/CG6SUysCsZhnQBBGd4nneDSls0O4ihAA5zI8UHZiIlnie9ydtpWFD0JXPmzdv2RSfoiwUEAZx5SDthrpcSvnKpDZEtT/hhBMW3HXXXSCZeahpmkVmNpl5olgs/nn+/Pl/VOEU2bb9HWQnRumu1+tHps2G08Dq2jusaZpPHR0d/WlW/pjUY1nWG4kIoOtRslFKGcfolbVZmejTwN46MQneV1KjhBCfMgxD9Q7/QEqZOms/qT1p2mu8n5+WUqZlr0xjUs/0wYU09lnAOQ6CoEhEOINhHd8xPDz8FxX2qRACmedR2Km7pJTQrb1XQyJCvV5X4Q3nHqjCg7Ft+zpmfmLUQ2LmW33fP75nHmLfkL4HcvBA5oGqkZGRI0zTBD195A0jEb29Wq2+J4f5IKMLNy5Tb72bruvClthFynGcqSn8V7iuq4UDomCjm5ziq1zX/XQe851NneVy+d+ISLu8MW22RxSAd5/lrPtPX4VNRkQ3VatVlMTOaUHGwvz5819tGMaFhmGAnSlKbjMM4/KDDz74k9dffz2IInKRkZGRx5umiYxQnfX6Z67rnpaLIfuxUiHERYZhvE8xRa7X6wvSBHI03YbSvJuJSAmOyszP8X0/Scn13uGFEKBEBzV6lKC8/cYgCO4kojsNw9hpGAYOCU0EIcKSG2RDYcN/SJgRg98GmHB1s2pjXdFoNB69bds2FTYIdKDUDVk5GDtSmPkOIlqdJ4aHBsD0HsMwrjUM405mhl/vI6K9awUzN0zTPIiZD2HmASKCX+FTZJwj4ygu+yzWn5MNOg3MIGuhUCicapomyBpOCElNotajPURUZeafFgqFr2/ZsuX3Uw21bftiZlbt/1JnLmqwqu11fb1eX5Q1W1f4O0MwGEHhtgK4BM/znqP94HqoYVyJKzOv9H0/8UWk7hQ1yqK7EjzQtbddO42stEullG/pZIy50heBKWY+nYjOQNZtDO7gA2F534+CIPjm1q1bccbcJ7ZtfwbnAcXcj06ShSyEwCXL3xT6uvKu2bb9XmZWvQ8TAwMDD8qDwGCuvEd9O/d/D+gcfBJ7IaY8CGnXuR1oR0ZGjjNNc2q21m7XdWMxXtasWbO40WhgYdpbxkdE51er1f/VmTxuFycmJnxFOvvdExMTj05Du6wz/my1cRwHi/lfYtiOppr3Ldd1E1Fkl8vlx+B9aTPHP4+Pjy/zPG9ituZ/II5bqVRUG4Kfu6576lz2S7lcvoCI3hvDutY6RWDXvSRPQP+WkmSViz3XdZMAsM/lx5WZ7XFAwYZh3BWySmU2ZstG+xWgvI9R/iciWp5mzUvBiJbLPGOUfk9KqcXeqhFYnBwKmUxPzwtkWQiBsvPnzYazEoy5cfHixavSZB4vW7bskHnz5r0xCIJXxOCbRZmDrIhrCoXCJaOjo6BcR9AUAVMETtsKEZ3ted63EsxvX9PBwcGKaZrIrogUItrued6j0+iP62Pb9pXM/ELF3D7reR4uQOacCCGAA6TCA10hpdyW18SEEMAZAk5WlOS6Rmcxr7isNODpep6nhaebhT2zoSPEqUPwBZizCM4nFZBWfbPRaLxj8lIjDs8pKfNfL2BUwSmWZT2biL6jchAzH+P7PkoE+9L3wH7pgbwCVXFA20G9Xn/opk2b7sjaq47jYAOCTId9snTp0qIqbRQNw6yFX012IqKLqtXq+3XtK5fL7yCiyA8MGHmq1ao21ozuuLPdznGcuM3LVBP/7rquKkNlxnQqlcpXmPlFrX8gotdUq9VPzPb8D7TxK5XKJ5j53yPm/X3XdZ81F30Clj0iwruW1n5kESBY9Y085j8yMvIo0zSxrhVj9P/Zdd1IquY8bNsfdFqW9VUiUpVoj0opUXqVuaxYscIqFAoAwD84Rvl5UsrIA76iLzKQdmWZ+ZS1E5j5L8BdGhsbU91iT/2mH3rQQQdhc75IwxaAMD9HSvlLjbaJmgghEHzp5XJnZMatTUOjLoQA6D1gHLIgyEBm3scajcbFpVLp8YZhgJQjSl4lpYwL2rbta1nWYWFGYKRyZHr5vv/URA9as7FGIOJDnue9SVNdTzXTCHbnGqiybfsUZlb+huv1+vwcs147fh5CCGRGP0Gh6O1SylyqTTo2vnMFwGB8DTMDIDxNgKrVgt3M/C7f9y8VQgBvrh08yGQfXFb8WHcKQgiUIKqCP13JqLIsawkR/UFlNzM/1vf9OEZM3an32/U90HMeyCVQBWrNBQsWIDXz8KgZE9F51Wo1zaZb6cSQtQ+b8n1zKxaLR918882qemOjDYvdNa7rIiV1hgC75uqrr17hui6yqPaK4zjAkNmkMO43rutig7ZfSblcvpiItD+shUJh8JZbbtFivAmz3FDi0cr08vd58+Y9+qabbhrfr5w5ByZTqVQ+wsxtWWuY+Su1Wi0Ru0ovTDlkCgXemoq5S8fUPcx8Yq1WU7LH6Shq18ZxHGQZKBnRkPnjum7kupt27P29nxBCxWaJ6f9KSrk2az+gzDQIApScA3tIJcC2AR12kNSGZcuWHVEqlTK/FEpqh6J9jYjOSorjJIRAwFz3sqJORG/0PO+yDO1GdhCA1B+Spc4Mde0IS0UTrUeO45R27doFPKDzM7RlUlXVMIyLYwJV/yWlfHfasYUQAFZWBX2/KaWMZJ5MOy76CSHg63KUDmZe5/v+OzsZY7b62rYtY4gecg1UDQ4ODpqmuW/P3c4PwEzzPO8fs+WjuHFt274BewRFu4uklNoX5HHj9crfQ/yprzFz2zNVJ3YS0c+Y+UuGYXxdoSfRJc/y5cuXFovFaSXLLbpdKWUUJlYn05nWNwSKj4OVeJaU8vuZDdpX1PdAj3kgl0AV5lguly8jIuC8REniMjBd3zmOg3K0h022N03zxPXr1/9W1b9SqZzIzNOAV4GltWvXrg9MKbUgx3HAnHOpYRifc10Xm7lJwd9wcxu1QdqzdOnShXGZXbpz7JV27cDrY2y7wHVd1c3Hvu6VSmUdM4NZsVXe5Lruh3rFBweSHZVK5f3M/J8Rc/6U67pR2VY96aYQUw+gupGHi4SG/8J13ack7KPVfNWqVY8NguDGmMaJsxa1Bt/PG1mWdUsMPlTmQL1LlixZtGDBgp/FlNPA8wDkfrLnecA6Siy2bR/PzNMIRhIryb4Dyhh/yszfllJiXrEYkq0mPPe5zy1s3rz5RhUTWBuzvzw+Pv6KHTt2xG3+Y2eMkv977rkHl2I9I8DlMk3zl0EQfHfhwoVXJ8UuCQ9GwEBLQpKSdP5gCwYDcFshoo6yjoQQuDBUkU98TkqpwrNJOp997YUQW0IygbY6mPmNvu+rSA1Sj513R9u2f6/CEWo2m2Lr1q3KQFInNmrgBhmNRsPetm2b7GScPPvGMRfO5fcjym/4zs2fP//ncfiLHfo9bk15red5H9cdQwgBchDVhXpVSqnEk9QdK66dEAIX8pE4kET0Is/zrozT0/973wNz1QO5BapGRkbisAIQ1Dki6UZKx9GO41xtGMbpk211ysTCLDDcOrdSI98TLlj4L7Bf9gbAms3mio0bN06rx48rgwuCYMmGDRuQIbQ/CQJ0uME6UmdSulk3K1euXFgqleCrw1r0gjJ2meu6PXVA0Jn7/tCmUqm8h5lxIz5DmPn9tVoNoNRzQpA5EAIdPy5DgzkIgsUbNmzAxilzKZfLcQGVra7rDmY+8H6uUAgxZhjGCsU0vyClfHlWbghvbPGdisukwpAfkVK+Ie3YQ0NDJwdBkCrIlXbMln7IAsMB/jfM/NtisfibLVu2/DkL3bZtP5KZkcWSJIuwWigUntWpDStWrHhYoVDApdhsylZmvtE0zRuazeaNY2NjeI/Tihmyks0q5hYRfcLzvNeknYRt2z9UZW4w82W+7/9HWv2qfkII7AmXRbUB4LPv+5/LY+y8dQohpl0At46XN5j6scce++BGo/GvmHmmBuLP23/QL4RARiEyY9sKEf1H1lmf3ZhX1BhLliyZv2DBAmQrZ7nHSjOlN0spP6DbMSzHjwx4MvN63/dVeG26Q8W2E0LgzHOUouH5UkotPOXYwfoN+h7oQQ/kFqjCXB3HUd5sEdETq9UqarYzFcdxANQHQORJ+Y7runElM4bqEN5ioOu67oy0z7jSHGY+rlarqcoDM/VDt5QlAHqGSaCujqXXLpfLryOiGZheaZkDu+WL/X0cRZYbpv4O13XfNVd84DjOxwzDyOPA8hjXdYHdlrlUKpU3MzMyOtsK2Laq1WpXbvoyn9wsKhRCINgeicXTaZbHlKkBp+OlzIy1TQen46aBgYEndHKhI4RAdgxKW7shILcYJaJbmXkj/k1MTGzcvn07LqZykTAQB/yR1hLxyPGQeWQYxtm+76fefwwNDS0LgiA38OgW45vhhRmIYuDbDY1GY8Ntt92WWUDctu03MbP2YW6Kfbg0upeIxpkZZZA6uGGRz4aIOgIctyzrciKKBCzPOVCFyzUVRuCcPVQKIYAfBwKdKHHSYKHpLgo6GYzMvNb3/X1Ys7q6u9UuDtOOiF7ped7l3bIn73Fs274Me/YU49zPzPeAddYwjAdrfitVwyTC/rJte4iZcbkSJbdIKcEwn7vEBb+J6BWe52mzr+ducH+Avgcy9kCugaq4Q5VhGB90XTeqjCj1VNvgRT0wf/78h954440AFo2U1atXH9ZsNgFcpwS1JaIXVqvVGfXQlUrlC8wMUL+2QkRWtVrt5MYztU/y7Fgul19KRF/QHSMusyzMbgNwdCv9+B/Gx8etNKxXurb126k9UKlU3sbMbfFD5hJhQKVSeT4zqzAN4Ai8g99m5r+apvkoZkbZ7/Fx7wgzV/LCqapUKiPMXFPYcJ3ruqfE2dj/+3QPaKTXv83zvP9J6zeUqW3ZsgX4HG8zDEMX2+LOQqFQ7jTzR4M5CMGlnyB7lYgOZ2ZksSLYgIzDqdIwDAPf0DsNwwDm49+Z+e8A+Q+CYGuz2dx2/PHH/3E2yttt234Gygjb2Kx6ZA0i+jfP876Y5rkKIQCuvzmm74/C/QR8iqwvZGy3lnGg7BEZ2wjmIRiAINpfmfkPzLyNmbcWi0Uw1eXGcBvi/+ASbZ6GLxAc+yIRXV8oFH7XymaM7zfKWYMgOBmHqJjgxozhiOhLnudF7qPi7LMs60P4FkW1yzNQFVceZxjG66WUAKifc2JZ1p+J6OGK/e0az/NACpGXgBQCgQvVueUpUspf5GVAp3qFEKMxWbRzNpDZ6hvLstYS0XUxz2uy25+YGeenXxcKhfWe590/VR/IbsbHx09gZsAqXBAGr7QfBxG9y/O8djAibXUMDg6uNE1zL0tpO2Hmm33ff4y2AR00jLtEY+aX+L6vYsPsYPR+174HZt8DuQaqRkZGjjZNE/TQhYip+q7rijzc4DiOh0zbSd1Iua7VarEp1xrg4L8544wz1q5bt24GqK3jOKiBjkxZ371792Gjo6Nxqct5uCNXnWvWrHl4o9HQLuUgonOr1epXooxyHAcgrjOeVV4A/Lk6Zz9Trgo+6/7GZtslKCGYN28eAsZROCkTzHzRIffPk0EAACAASURBVIcc8olWSndg2QVB8HoienbEPJrNZvPwjRs34uCZh8SV2v7Add2z8hh4f9UZlifEETMkZiIDiHmxWMStKwKcYMKNPOS18e1dIS5Vx9hSGoGqXVLKhe2eLw4Id91117wdO3bk9T5n9lqFwaqvGYYxkEApgkQIHiC7MpHoBKoKhcIj2wUagQW1YMGCgc2bN8OvifG5Ehmq0VgI8QPDMJ4R0xSBsrePj49fpovxhd/W/PnzLyKiSwzDMDVMMZj5M77vI8CVSoQQuEhBQLit5BmoEkJM23e2GgDMTd/350zW8VT7hRBgQQMbWlsJguCksbGxOAzFVM90spMQAthyqszJROxuHRmTorNGiXki0O8UJnSrC4KKKMkeiRlwJxG97sgjj7yida8V1W/ZsmWHlEolVMy8SncyRJToosm27bgLwZuklI/VHb+TdnHvPBGd7XkeiHb60vfAfumBXANV8JjjOAAqPlWxaVheq9WQuZCpOI6DgNFU8LzthmFYcSUUuPn+/e9/fzURtaMv3tpoNE6+9dZbwWg4Q8rl8v8S0csiJvJX13WTHFQy9UfeyloDgzHjfd51XdyKzBBs4A899FCAGLamz48uXbr0uNm4rc/bd3NJf6VSeT0ztwWDjco07LX5OY6DzJi3Rth1dxAET9+wYYOS7rdSqTyVmT9rGEbrb/oG13VzxWNwHAeZI89pZz8OebVaLfUhr9eeVTfsGR4eXtxsNuOYos6VUrYNrgPrbPfu3acEQeAQkR0yYy3toAQKQaoneZ6HMq+OxbKs04kIeFiRn+Hh4eHS/rC22ra9mpl/qCrjjHDCJVJK0KZriwbgbs+DO2OyYTYV8FhU+0Ew6Z0qpfydtoOmNBwcHHyuaZrf0AxWfVRK+fo046CPbdsXM3MkE3HOgSol61+GJcRp3ZO6X1y2GDM/sZNSWh3D4jJfgU0rpUQWY0+KEAJg8yoMyf0iUCWEeJJhGMrMNmb+CzM/KS2unmVZb8DvSfNBv0FKOQNKJKrv4OBgHMbyb6WUKvZGTbPUzXBRtGvXrgdilPV0cDYTR/SVHNAeyD1QpVFi8zrXdRPfZsY9tRCMGzdAU0FWL3Zddyp2VVs1YbAEt3I48D0IqfjMfGUQBO9SZUo4jgOK0Ge2U4q01lqtlhkYb9z8u/33hHg/kYDPlUrl1dhItrH/LNd1cevbl1n0gOL54Cb8zFqtpjoQz6Ll/29o0CQvWLAA2X/tcFSQ7fhk13VVpXX75uA4Dsp4kPk3Ff/uHNd1kdWRm5TL5XfjhjBigP90XfeDuQ2+HyoeHh5+dLPZVF6WMPOzfd//Xuv0wwM4NsD7WGY7dBHKTJ8+OjoaWXaQVL8QAhldALSNlD179izKE0cqqc2dtB8eHn5Es9nEs9Itsdw7HMr2fd8HzbmWhEDuSnIUMBLmXA6lZauqkRDi/YZhqCAYAmZ+pu/7Ha3tGuPsNZOI3ut5XlvCDp3JCiFeBwKCqLY5B6qAldbuknPSnCuklOfpzKPX2gghcIEINrQoybvsTqf078lSyl/2mu8m7YnDqEJZm5RSixW7V+cIu4QQ3zQMQ0XKsNs0zcePjo6u72QeGuNMrimJsL9s217DzJFBeSK60fO8kzqxXafvypUrH16v15XVKkRU9jyv48xrHXv6bfoemA0P5B6oWrt27fydO3eCtaAtwCYz/7JWq2Ejnbk4jvNKwzA+NUXxbmY+KQF+DIBvF7bWS0cZ6jhOZP15XsDxmTstpcJyuRx3az9Ns2maD12/fv20LAbcHoS4QNMAO4no19Vq9QkpTet3y9ADlUrlQmaOAvs82XXd/8twuMxVVSqVc5m5XT0/ylpOcV33hoSDohQPwW+wHY4efPDBx+umsCccZ1/zNuvavr8R0TOq1SoySvqi6QGdEi7TNJ86OjqK7OB9Ytv285gZWSKZfEeJ6GcTExMvzhIgG8ZaloVML7BNRUqhUFi2ZcuW32u6rOeboeRsYGDg08DvSGDs/UEQVHRv+BH0ZmYl7qVhGD1/260B1vtdz/PaZnAm8C2y65EdgEMXANdV8l9SyrY4iDrj2bat+kYhIPlB3/czx0aFbUIIXFwAuiBKNkgpyzrz6LU2tm3LMFs0yrRc33UdMHXDMJ4gpfx1r/lu0h4hBEhWVGxx/y6lnHpm6dWpRNoVltIDxw6X/G0FWfm+77+x08mFgRxUy7TiKbaqTpSpZlnWYxGMUth3g5Qy18x5jG3b9ik4I6v8VCgUjtqyZQswI/vS98B+6YFMNthxnnEcR/XxrjebzSPzwHRBGd/27dt/2/Jh+EuxWDzh5ptvzpRWemRk5AjTNLFYzPApEd1UrVa7Us8c9yzy+vuJJ5548O7du+9W4JFNG5qZz67VatPqqh3HebthGK3lF7jNXZ0guJjXFPt6kaJQqbyMmdtS4ZqmuXr9+vUd3ZDl7WTHcdpisTDzhbVaDaV8qaRcLl9gmqZXrVZzxeiAcZVK5cXMfEU7Q03TfOT69eu18eJSTXY/6zQ0NLQqCII4EOAZByAhhJLVNoGbAOr9Ds/z3mcYxgzswwR62jYNM4yAFRkpRPRMz/Ou6nSsXutvWdariQilynEHmb2mI1joed5puvMQQqAsQ4WJdZGUEhlLPSmaWWGP8TwvExZTy7I+QERvUjmDmd/k+75uSc8MVXEZVYZhvEdKib1G5iKE+C/DMFQYVHsGBgYOjoOgyNywUOHg4ODBAJonImSD/DUIgi+PjY1pXS4JIcCCNhRlWxAEzxgbG8vtkgTYko1GQ4nxSkSZvat5PAMhBIJoqgDHnAXbn/SXbduPAyi6wn+NUql0zKZNmzI5gwkhcI5QsroHQfC8sbExQCZoicYcfiOlfLyWsg4aCSFQAt0WaiNUC3xJkH9lvm/owOx+174HMvVAVwJVq1atekIQBCoa6Oe5rqu9iCTxgOM4jzYMA6U8U6nAtzebzVM2btyI0sBMRFESVQ8P8JngjWRibE5KHMdB+mksKxqGJ6JPVqvVfbS1ISA76vdbQX2/7LpuklvxnGbXVwsPqIIkzGzXajVgnfSqIPsJjGWtN/rXuK4LRrY5IQqWzdtd1z1qTkyih4wUQmDDqaQ0B5Oj7/vAn9kncSCnmlO8NgiCN4yNjSHolYuAhY2Zd8VcInSUxZKL4RkpDQ8d2F8s1lGZpFxPoxzqK1LKc3XGnY02GkD7t0spkeGcCeC7ToZAp3Trtm2/k5kB3h4lub3rQghAPwACQiXHSikR9OmqLFmyZNH8+fOvJ6LjpgzMzHyx7/sIkislrmyNmZ/j+/534/Sk/fvQ0NCyIAi2qfoT0UhW2H5p7VT1E0IAtwn4TW2Fmd+q8yzysC0rnXHYUcy83vd9VVZZIlNs2468PJ1URERP8zwPzLZaEjIWqgK4v5JSrtVS1kEjIUQknEyo9hYpJQhb+tL3wH7rga4EqhCXcBwH6ZlLIjx5heu6udXth2Vp+MEXp4z/TyI6p1qtdkxlG5Y3gkWsFQAcw73Wdd2poO777cvkOM4nEzBxbHZdd+WkMxzH+aphGOe0OOeBRqMxGAVev986socnpsKc6/Vsngh2ykahUFhxyy23/KGH3T7NNMdxXmsYRjuK82+7rqvChZgrU+yqnZZlnUpE08r6Wg1oNBr2tm3bpgVh48CFYyaxNcwc6Qj3R9dRGgGV70spn6Wrb661Q4nIxMTE94holYbtX5ZSal2OCCHw/E5X6PSklJFZKBq25NrEsqy3ABMqahAiyqTsb1J/yNiFzOtIBkBgHXaCh2VZ1seJKJJ92TCMN0spP5CHY5cvX760WCwqS2iZ+TW+738ij/FVOhXMjsjGeGJcyZxlWb9DEFfxrrzI87wr85qXzoVCu3U6L3vS6I1bLzrFZ0tjU9Z9hBAoXQTsSlvJquxvUrlt20PMrAz8mqZ5fBLcx6GhoZODILhW8a7/n+d5J2ftu6n6wgsmVOm0hc0J235OSvlvedrR1933wGx7oFuBKuATqJi27lq6dOniPFmHwiwEgBRO3SAFRPTfp59++rvWrVuXOnXScRwAsLYLtH3IdV1lmvtsvwBZjl8ul88hIgScdCTYvXv3EaOjo/9yHAdp6EgVnvY+MvO6Wq32Th1l/Tbd8UClUnkOM7fNfpyYmHjI5s2bcQjpSQnfs99MNQ4MYbVaLY6Wvafm4zgOymLe0MaoC1zXnfNArN12tk4WRDsMJ40SI9VUrtmzZ8+LugVgblnWVUR0psKgXaVS6chNmzbFMQylejyg+w6C4JDdu3ffumPHjntSKemwEzJKFixYgO/MsTGq/ialBJtnbBaRTilbs9kUW7duRbZw5gLGvmKx+DBm9jzPi2OunDG+ECLucukDUso3Z2m4EOIOwzCOUOh0pJRahBbtdAghwM75IoX+86WUbcvXs5inEAIlTZHkCsx8ne/7p2Qxlq4OIQSIfCK/DUT0Cc/zVME94OVcB2Y/xZi54isJIc42DAOYgJFCRA9N8zvQ9WOn7Wzb/g6IORR6Piml3Fdp0Ol4WfW3bfskZn5HuHY2sV9vNBpv27ZtGxIQpokQ4hpg8ynGfrWUEutOJqLDjNdsNo/YunUrsum1RIOA5FopZWRmnNYgMY0GBwfPNE0zrhw/17Usi3n0dfQ90KkHuhaoKpfLgoi8KINRM583vovjOC80DANBpVa8io1E9Oak2VUAd6zX6x9l5taINhPRu6rV6rpOH9Bc6r969epjms3mjA+X4pk/85577vnpoYceirJIq6UdcHYs13VRstKXHvFAuVx+Fm7ZI8yZN1vYGzruqVQqT2PmadTVczEY6jgO5vC0ljkHjUbjkf3sQ503YXoby7JeQERxTI1LpJQzGN6EELg5Bi7NNAIITSu2mqZ51ujoaOR3UVNPbDPbti9m5veoGjLzC33f/3qssgQNli1bdkSpVEKWxSRhyp4QIwhg2bGBoARDaTVdsWKFVSgU8L05SNUhCAJLB1Rdo3QO4N3rfN/P9MIFe4+77777k0T00nAewHL8XKPReO1tt90GH2uJEAJYdy+OapxHKZIQAtnnK6LG7BQcWAgBmAkV+crpUspp3wEtZ2k2sm37izEg/ii3s3zfB4te7mJZ1hIiQmkxsGzaChF9yPM85aVqXAAiLCGMZdVOO2ENvJ5g8eLFB+VNZpLWfvSzLOurqORQ6Oi5UuGQbARkHK1r5t9LpdLxmzZtQuB5nwghUEYfid/EzOf4vh/3vU3k5pgy/D1SygVJvjdDQ0OnBUGgKhX8hZTyKYmMTNg4LvsO6ojoUZ7nKfEnW4cFdvOWLVvOJKLTmBkXMsTM/zBN8+Zdu3Z9c7YukhK6p9/8APJA1wJV8KnjOMD4iGI8udR13bfk7ftKpbI2ZGpqh1fxCyL6TKlU+vFNN900HmULSv3uv//+FzIzmGNaAyy3M/Mra7VaHE5B3lOdFf2O4/wtwaENIIG4wcdBb5oQ0XOr1ep3ZmUS/UEjPVAul88iIlC/t8oe13Xn97LryuXyGUTUCvb6btd1Z7x/vTqPkCACjDoPnmojM/+qVqvljpnQq37pxC7Lss4jIlxgREqpVHpEFPhruPE7DUEDZgbW2bwE9uwMN+65lgCGN+LTsgnbrLmg3AbQbyYBpBDE/TrDMJa1GeudnudpXeSErIUI9ICQBBiGuFh6o+d5SRk695ph2/Zn2lwutX5/nuR5XmTpx2TjlStXHlmv15HJpNpL/XlgYCCzSxcAYhcKhZ8w84lt3rOvSylxIaclcfTuRPRaz/MyhS4QQqiwLOtSSnxH0ma4kxACgNuR5TJBEKwaGxtTsmBqOS+ikWVZqsucyV5fkFIiyylvMYUQ+A3GsSafJaUE0UikxIFWE9H7PM97a14T0vjd3iWlPDyv8bPQK4RAJt/LonQhw9v3/Z7K8I4ppZ2RcRlXImoYRuy7ltTX4W9+2p5oio4/SCmXJtEZl82UlHQjydhoGwYHEVyO/K4Qke95nkiiO9SLrMSocnTsRy7M+sIqiY39tn0PtHqgq4Gqcrn8OiL6SMRjGHVdd7gbj2hkZOToQqFweXioaDckgie/ZObtRPRHZh4nogczM4JbZSKqtAH9RhbVl8bHx9+EcrZuzKMXxyiXy98hIlVq81SzkTUF8OfWDLdfuK6b621FL/puLthUqVSewcztNrR3ua7b05vEkZGRU0zTnEb1S0RfrFarkRvHXnsmlUplNTPPYODCwbtWq4FdtS8JPaADxmoYxtFSyr/HqV6xYsXhpmleQES4dJlK4KHq2iSi13ued1mc/rR/dxyntGvXLgRUWokEpqkkohd7nqdbvh1pDtjkDMP4P2aOOiBMALMyzqe2bR/PzGDSbGXWeyDEHbktqU8sy3oKDhqqfkmyy4QQYDrFnkAl75ZSdhwQDzGegKd2QtRgCGD5vg+241iJOzgbhnGJlLKViTdWr6qBEAJ4gFF4pX+SUj4q7QBh9pASb7DZbD5869atf007Rly/ZcuWHVQqlXBhp/qtoXxqdScljnF2AObCsqyPxuB1Qc2f6vX6irhMPCHElw3DUBEDfFpK+SoNu1I1EUIg0A6YiCiRUko7lfIuddIotb1eSqkqr+ySpf//MEIIrLEgpZoh7YIlQgjssSJLW5Ft6Ps+3qWsBMFYfE8KEQpvkFKqmBZndNMoM/0zES3zPA/jZi62bf+UmU9VKUYppu/7KobRad1DLC98Sw+NMbjJzKf4vq8kmMl80n2FfQ9EeKCrgSrcPpZKJWwQpoKa7zONmZfXarXEG8+0Tzc8dOOHvg/UO4Uu4Fz9iJnf77puqhveFGP2bBfHcYCdk5pa2jCMCSJaWa1WUR7Qlx7zQERWEqz8o+u6UYePnpiF4zgAgv1dizGe67o9C3bc6rhyufxhBDVa/ve76/U6Mn5ywRfqiYeXoxGWZSGw9FnVEPV6/cjbbrsNmWxaIoRAKSBuz5+q1eH/NfqolPKNHWSTKIcSQgCjJi6LA8E4YATFBuWiBguDBcjiOCZm7i+QUioxZ2KwtVIdjC3LWkFEcd+XWNsm5yaEQGb1+2Pmuts0zcckAfRt1Reytv1UBWiNPklKDTUwtvBOtq43CV7pmU2FEPcpytA6on3XwJu7T0qJbKtMsgajHCGEANkFSC8iBYf8iYmJNbfddhv8kamgNPSee+7B+vOCOMW6QVkhxKcNw3hFlD5mvtL3fRU2WJwpcevXXTHBv64wsXUyCcuyPkRE7fAlJ9VullJ2ch7pxLwZfUNcPxXuaHNgYGDBVMiHuMw74GtKKaMSFhLbPzQ09JAgCPButJU076VlWS/BJWbM7/eVnuddntjgmA6WZb2QiOJICVDq/Wjf93WZ6xG0rrUwfqos6fnfUtZ+7+vrXQ90NVAFN1QqFaSsnxbhktlgyKNKpfJUZgYYOgAAUVqgI2NE9JMgCD7ZzeCajmGz2WbVqlVPCIIAGBFp5b2u616ctnO/X74eCBk025UpdS0jMu0MHcdB8AA33dOEiKy5EBjFTf2hhx4KnKTWsuUPuq6Lw3JfUnjAtu0LmVm54TRN87AUmbIUUnVfqrjtbbX4GwMDA+fmgfVmWdZjiQg3qnGyoVQqndaKPRLXCX8fGhpaFQQBAGB1MLsukFJGAjyHJZUAXn9Qu7HTlD5AjxAC8AOAIYgU0zRPGR0dRbAtVgYHB482TRNZPMqST2b+SxAET04DrD44OHiMaZpYd3WC6toA6JZlvZWIQHTTVrIG/hZCLDcMQ4XNdLmUMpIxLO5h2La9LgR9jmr6Wyllu5LJONWJ/h6WveLSNa4M+NqBgYEzs8TiXL58uSgWi9/UIA3AnL4ppXy+zuQ0gprXSClR+py5hP5UYvEw8xd93+/p7GghBLIqVVkwt0spUWXQE6LzzWj9NlqWdTkRXRg1AVSeeJ43ia3X8Txt2z6Fmadlyk9VmgY7LcSeBHthpDDzHY1GYzjJBVbcZIeGhpYFQYCyZGXWExFd7Xmeihxl2lA6zMYttjVQReR53v1xNvf/3vdA3h7oeqBKxQyHxaZWq02CruY99xn6UR5hGMYaZj6OiFYw85FEBBA+AHqDMeJOItrGzNe7rpv6xrnrE+vigMcee+yD582bl7b0ESnodj8zpIsPLOFQ7QDJQxU3u677mITqutp83bp15tVXX42so1YsrTnBzuk4Dm6zcas9VR6o1+tL0wQVuur8Hh5MCIFyFSULUcpA1d5ZCyFwAQKQ8kgw4xb3XLNo0aLnqXAS07pTCIFAFbCe4uSPRPRyHZymUBFubM8nImSS4JsZK0Q04nkegM3bCsooC4WCKottl5QSQaxE2TFxDGihMcdKKZWU51ON1gDQnmx+N0qxPM8DmLCW3ZZl4fD/eSI6Mtap/6/B86WUCFTEioYvHhgYGHhwVoFTjfE6YgSLK5lh5s/4vh+ZFRTrsAQNNMq89mpj5vXMfPbY2JiyZDFuaNu2H8TMKDnGpUVcgAzqfjMwMHCabpBMg5Cho2w41fw0SrHQ/c1Syg/E+Wk2/67xrWlIKQFanhajLdPpCSHONwxDCSnQ+m0UQiAQpypz/r2UcgZuYVrDbdt+JzNfEtWfmc/0fT8RBqQGcP/kcN+TUj5Hdy1XzXF4eHhxs9lEVU6sb0zTXD06OoqScy2xbft/QIyh1ThspEsokkRnv23fA2k80PVA1cqVKxeWSiVgZbS7JZ0oFotH3HzzzZmkQiPwdPDBB3Mvs4CkeWi93sdxHGBPgU0iqZzluq4S0DOpwn77bD1QLpcBGj2DDYWIrq1Wq7nS9WYxE8dxgO+0ukXXeKPRWN7LjHko5ZiYmADFPbB/9gmyIarV6tuy8M2BqsO27dcwcxxgtBZGVZQPQxBTbJZ1y2OvD4LgzLGxsZ1ZPhfLstYS0f8l0Imb6m8WCoWrt2zZcntrPwB7g7kwLHOKIkqZMZxOOUZcSUeotC0bo2p+caxUhmEkvk0OM57A3qhLKIGMrq8EQfDDdgGKJUuWzB8YGDiVmUFVr72uAr/u2GOPPfHb3/42MJBiZXBwsGKaZtyBRzvwFTdgXKCUmdemxUYJM/BwSRaJDZcDPk7klHFp12g0ZJsM2HZ9kLnw/vHx8cuSsm4JIR4VEjm8Jg6DbsrAG/bs2fPE7du33xv3zCb/rpF5uklKeZyuviTtYgC996oC5qzv+9ck0dvttjoBN2Y+3Pf9yFK2btoshECJ3utUY9br9flT8c00mVAf6/v+TZ3OZe3atcXbb78dmYuRuHZBECxNGgTWCMpONf1SKWVHRGD4DRuGAdzEQQ2fXCWlfKZGu31NNIgIZqgjomHP80aTjNNv2/dAHh7oeqAKk3AcJxKUsRO2N2RM/OhHPxLNZvNEIsLm7inM/KxaraaVwp+Hgw9EneVy+cdElASbBZuM79ZqNdxM9KWHPVAul08lIoD5tsoPXNfFgbWnxXEcZM60A3y9ynXdRB//bk7UcRwAGr+9Zcw/jo+PYzPRT8/u4GEIIYAlg0ygSGHmYxLgQbTVEzLEoSxON/PwN0T0tKyfrxAC2V1a5T5TJoIbfuBLIpP4DiIqhdTWYL2NArGN8metWCw+afPmzSrsk719hRDIZlZlaG1i5pN1D3a2bb+Imb8S86zX+77fGsyOfcM0ys6idKAcGUFAXOBBUNoLYhmdrJh9OlFa2Gw2n7Bt27btscaGDWzbnsfMOBS3La8Mm9WklKs6zfIYHBx8ommayr1YJ4f0EHgfjIJRAsKboz3Pm/SzrptSt9M5tLcoB9s0Atq/MAyj1mw2by8Wi/+cBG3GwfzOO+98VBAEyPhHZiRAq7GeJNnLy1KptDZpFu7g4OBzTdP8lsIZf5RS6gbiE/lUCKFiDN+rq1AoLNuyZcvvEynucmMhBCpGfq4attlsijTlwXlMJQ4YHUF9KeU0MqSwFPovqncyK3ZDDSypnVJKlNFpZa9O+lAI0W6/pXLx5QMDA/+RJvM0ZBgEnpwOGdH9RDTkeZ6yDLbVUCEEMBQTwUN0shbn8S72dR64HkjyccvMS5VK5cnMHLVYX+G6LvCitGTVqlVLm83mk8LAFD7a05hWAHJeq9Uu0lLWb5SJBxzHeZ9hGEl8fk8QBEMbNmyYgR+UiUF9JZl5QPHbvdJ13dyAVLOaQLlcfh4RRZXFvMp13dbSuqyGTq1nZGTkONM0kQmGkoB9Aqy/Wq2mZC9LPegB1FEnzT+rNHhkFE9MTPyQiE7WdPGvSqXS07Mshw4zPXDwiwM71zQxUbOaaZpP1sX7EkIgSymOgns0CIIXjo2Ngc47UizLOp2Ivh2X9ZQG0wSDhrf7yFZTMZMlcpZuYwSpisXi2jQHdSHE90AZHzPWf0spI8tr4uwMs+MQRJqWEdrS7+9SyqPjdEX9XaOsaoOUUjvrL60drf00ALR1hkKVAQICWmW1UQqRTUlEz9H9/U3VMzQ0dHIQBNcqjAVQfRyjmM5cp7UJ1yuUAKsC4vcODw8fpptJmNiIjDro4OMR0eM9zwPD4ayLEAJB3VZMzKl2tQ1O6gQWDcNQYhTGTX54ePjRzWYT3zHVO/c7KWUkQ2rUGBp4bO26bgJQvm65PLJZC4XCJQr2+XZjpCqNtizrBUSEcnNd8aSUOniIuvr67foeSO2BWQlUhVgxiAg/rI3ldy1dunRx1AcHgSlmxkbwRGZ+mkaJ2a2u6x6f2kP9jok9oMIha6eMmS+s1WpK1q3ERvQ75OKBVatWPSkIAtz2tsrlruumBsHNxdg2StesWXNIo9EA3ty0W8CwaR2bhl4K/oSl0ijNaT2sz4nAYLeeayfjCCH+3TCMT6h0BEFwXFwgRNcGlHUtWLDgOyF5R2w3AFo/+MEPPj1LzKrBwcGVpmkiqDLtYifWmA4aMPNPJyYmnp+k3MiyrPcQkQ65xh5mvgx4Kr7vTwPrDmm5wbQFAN+4Pc+esFQk1aVJyPb4ax2ckQ5c2dp1Y6FQOHPLli0ouU8snxgOrAAAF0tJREFUQggEqRCsUgmykd7seR4YfRNlJ9i2fRQzfz8ukxDvh+/7iTKxpxoshAD4seoblCnbmK6jwwAmAqSznbH7+YGBAVzG1HVtn9pOI2PNaC0DSzNOax/Lsp5FRN9V6UoKLp2FXWl0hCVeSqY2Zn6O7/vK+aYZO2kfHVsNw7heSvnEVt1CCJQLxjH77SGi8z3P+2oK20DKgMxDZalcWkw6IQT2A9gXpBGPmb9VKBRuDoLg981m8+558+YV9uzZ8xDTNJeHrK1PT8DAN2nD16WUL0xj0NKlSw896KCD8N6B8TRWmPk1vu8r90SxSvoN+h7IyANxm7aMhpmpxnGcDxqGASruGUJEJ1Wr1b3sRCFT10nImGLmU1W1yBHGchAED+9n6+T2KGcoLpfLK4noVp0RiejX1Wp1bdLNr47ufpvsPVAul08GHlUbzV0BJF+9evVhjUYDAe6ja7VauxLE2Ek7joN+WEvayQNBEDxjw4YNqpvj2DEyakCO4yD767kt+v5Rr9ePS1q6kZFN+50ay7IuICJloDwIglVjY2Ng48lEUHIVBMGVyG7QUYhDfKPReOZULBCdfqo2lmU5RPQjTQydToZDkOPDQ0NDFyXNeAiDTJs1AkyT9jEz/5WIsCk3Q0ywJFk6n5RSAhcqtYChLAiCnzMzyiLzlm+FoPepy3/DQMo2Tfy0HwdB8A7N3wIA9lFieikR6WBW/peU8t1pHWZZ1rcVv6ede/bseUSSIGlaO9r1w+/dMIzvJMyeyMqEgIgu8jwPe+7UsnLlyofX63VlMLRQKDwybcA0yjCNACS6zkoQMqkzQ8B7Je4gEb3S8zwlC23ScdO0tyzrPDD0qfriu+l53gyGvzALDmtwJF7cFL1fbTab79EpdwxLlV9uGMZ7DMN4sMa8zpVSKku92+kQQqAUr2cYJIE9OG/evFM6yazWyDiddMUNAwMDJ6cNaGs8k36TvgcSeWDWAlVhOUtbxh/ULxPRHYZhIFL/6EQzat/4Ja7rAherL13wAD4mCxYsANYCDgoq2U1Ex1er1bEumNUfIgMPVCqVtcw8A4yZiN5ZrVbXJR0CALjbt2/HhuNwIjrMMAz8Q63+4cx8hGEYYLp6RJh9if9Olj484LquClcl0pRyuXw2EX1DYetuZj6nVqvFZRkknW6i9o7jvNcwjFaQTgA9P7larV6fSFm/caQHdDbkQRCcNDY2tvfyJCsJwZ+/aBjGizV1/mDx4sXPzZIcJDx8IhiqwwSoaea0Zn9g5pf5vp/6fRVCIIh4QZrBE/b5h2maQ2nKolrHWbZs2SGlUgnP9lkJbdBt/i8Arfu+D7yxjsW27XOYWTuzAQcnIvoV/mua5l+DILi72Ww25s2bd1gQBLhIeEKYMYjMBy1h5id2+J5cCua3iMHeLqXE4XbWBL/30dHRS5m57QVtTobtCAHkf9Wp/nC92m0YRlGhy5FS1joda2p/IQSCqEomNNM0jx8dHdW6HM3StjS6hBDw4bQy/hY9l0gpgZE0q2JZ1leJ6ByVESpygoSA5MBARCbqb4IgqBaLRWAh7sUwZGbsCR8FogUEejWD3nvNTgOkjn62bV/JzKmyl3J4aLfs2bPnKVkE2UOGRDAyRp39f2ma5tlZfANz8ENf5QHqga4HqtauXTv//vvvfxzwVQzD+I+Yj15Wj+Xrruv2yqKT1Zx6Wo8m899bXdcFnlVf5ogHRkZGHm+aZrtN7y3MvIWIDm6ZyiHMXCAi4Evgdg3BJTBj4f9emBQweIru1IEqrEE7d+78YxgEi/I8MjPeWavVQLWcqNQli0dZLpffTUTt2Pz6v5ksHDxFhw5+g2map4yOjuZBymEKIXB7rhuI+frw8PCLk2YmxbjMtG37ArzvGWZX4ZDxvkWLFl3WacnikiVLFs2fP39zkgNKilekHgTBqWNjY0kYEWOHsW37Gcz8AcMwtAM2MUoRRP9EoVB4b8aHCRJCgDENcAqzIROLFi1a1Mm7EmYI/q7NnvKGxYsXPzHLAG8nDhJCPN0wDJQpqvC6OhkCfUFC8GEiujRLMgYhxB9UmXemaT51dHQ0VaZzuwlblrWEiDCmSnZIKXGhjWBHz4sQAqQUkVmeKGH2fR9no1mTkM0VwSLs0SIFpWyjo6Ng3ZshYfYTfo8jszER4Pb5vo/LzcQihAD7+DMSd8y4A0paJyYmXnTbbbcBoy4TwTqJskYiwuUULoNBpgH8QJQWguyl6/vdTCbWV7LfeqArgaoWwHMEqFoPs3k7+M4zzjhj8bp16+bEhyxvZ3RDv+M4NwBHTDHWzUuXLtWm0e6GzQfCGI7jHDoxMWHOmzcPtPJFZh4IguAg0zTnE9ECZgab14MQWAqCYG/aNhFNplgDtBKba+UtW5f8mDpQBfscx3mrYRj/o2Hr/xUKhZffcsstcZtlDVVaTVDuhxINYOpME2xaqtUqNk/9jYSWK/Ua6TBzhex7P9HTmLgVAkX/i9tpzZ5fkFKen/V7sGzZsoNKpRKyu/APOJBxGbHtzK0S0eebzebXxsbGlCUumnPd28yyrBWGYVybU7AK+4KXpCkR0ZwDSuDOIiKUkoCNOBGbXzgGcLe+UCgUvrRlyxYwBGYuy5YtO6JUKoEyPoss9qT23SSl7DirLwwCIcAPIGB8376ycOHCN7iui8BNzwhKwIIgeDXAl8PDYla23U5EnzEM49N5sBsKIXBJ9XiFsedJKa/IajJCCKxzn1PpY+Z1vu8jyD4nRAgB0odjFcZ+Q0r5gtmcjA4TrmEYW6SUqnmAtRUB+t9qMtplPeXUftRgO/xXzviOwEt9t+/7KIXun1uzfjP6+uaUB3IJVK1Zs2ZxvV5/Am6hU+JKZe5EANhVq9VbMlfcV9jWA47jXGkYRlQWG8oCy67r+n33dc8DMYx33TMkm5E6DVQh6AYadx0waRy43zNv3ryPd3LjHzftsAwSgNDtAIF/V6/Xn9QJRkHc+Afq3y3LQjnBD2Pm/ywpJQChc5GwLOgK3XIDIvqE53mvSWvM8uXLRbFYBBYTDhJXSSk/OVXX8PDw4kajAWzI1SHW0qOICLevKL1FRiTW8LuJ6E/M7BPR+maz+bOxsbFUIOQ68whZnnDTPazTXrPNAwjM5flsp9oRgtru9SuCKUEQPJKIjpqSaYqyoHsNw4AfwXgIeISfSylR/pS7DA0NLQvJMpbkPtj0AT4gpYwq2+uyKd0b7oQTTlhw9913A2T9+SETaNJydlxaSMMwEED6/vDw8HUZZ1tOc4YQAng/key+RPSfnWJhTR1QCIES/bMVTwSH+KVSSmRIzwkRQiBrE7isbQXkGb7vg8F8VmRwcPAY0zTBpheHAaWFKWfbNr4hPw5hHbo2p04AwS3L+l0Iet7WXlxchWdbZL5leo4mohuZ+RVSyi1dc1Z/oL4HetgDmfzAVq5ceWSpVAImARZf/LO7PGd8rECj+pdw83xPEAT3ENE9+P+ZGRvqa13X/X2X7Tpgh3McB9kqyFppJ29yXRfsQX3pogf6garpznYcB5uMjyV4BACSfW+9Xr8i64BRuIYCb+bkNvZs3r1799qMS30STHv/bmpZ1qlEFFeukgqUNYnnAGp9xx13fIOZn63Z7/1Syos02+5rZtv2i5gZuE/7qO6Z+YO+7/9nUl3dbo+sr2KxeAkY6DKADUDW78u6FQTqtq/Sjjc4OHi0aZrALUNWXbfkdCklgP0PWMHv/5///OdIEAQrmXkpEaFsCUHhRUSEkk8EMVEC9Dci+hsze6Zpbunmd0EIgQyPdiXpk88t1ZoU9dAty9qoYkcjoq95ntcLGd5Tp4Ay2kcy88NM00Rm+j2maf5zMsPNtm2A6qvW+M1SypXd/iHgd18oFN7AzGC7w3unEuDLHqObtbdixQqrUCiA6RaZjt2SY9MGe4QQCBJF2jpJrmLb9lODIHhvCga/dj64npnf6/v+z7vloP44fQ/MBQ+kClQ5jvNoZn5MWOParcDUn5BqyszbiegvqD8moj8GQfBn0zT/1mco6K3XrVKpXMjM7ZhLbjzjjDMe3y/D7P7z6geqpvvccZxSmLGQNLCO4PeXCoXC19evX7++0ydZqVSez8wImAE4vlUQXH+c67rAi+hLDh6wLGstEcVhE71KSvnpHIafphLv5Pj4+Hd12cGY+R2+7wNHTUuGhoaeEwQBshSAGTdVGqZpiii8ES3lXWyE7KogCF4JoHaNm/+pliED5TdgIfQ8D3gcfWnjAWT4bd68+XVE9HZdSvMoRxLRdmYGJk/U4RcXiUd5njfRfxi97YHBwcHnmqb5LYWVV0gpz8tqFrZtf1ABPo+gnSWl7Jlv4+Dg4JmmaQJ3VbTxATIlQRy0OIa9/B9Syodm5UOVHsuyDjNN87QgCJ5JRIAVwJ5IRxKzo4bZg28notdPvSTRGaxNG2SbqvZtUkqZdF+3bxjbtqWKtbUFm4ssy3q6aZqvZmaUxe67AIqZ2x4iApPwj5vN5tfHxsa6BS+R0uX9bn0PzI4HYgNVJ5544sHj4+OrTNM8wTCMNQhQZVxT3zpzZEdtZmaXiG4lok179uy5dfPmzXsZIPoyNzxQLpfbZSnsajabx2/cuLErZQxzw1Pds7IfqJrpa8dx1hiGATa31oO77oPBIewXAJhvNBo3bdy4EZTMsYLb8/vvvx/p4xdjXY3oAPak0/tBqlh3dtTAsqxj8Z2JUfJmKSVAsXOXMGvoB0QEPEcd+d/x8fE37dixAxnEkRJmjqHEsS1GkorBSceI2WjjOM7A+Pj4CcwMfCP8jsA4h3LeRchAIaI7Q7DYrcx8bbFYvC4vjKfZmH/eY4Y08+cDX0t1cGtjRxMBQcMwPjM8PPztLVu2IKgwEGEvMNdAOd+XHvfA8uXLlxaLxcjKBCL6med5uutW7GxD9sxrDcOotDQOiOhcz/MAMdETEpYmowxTN9gTZTd+O2AM/QfYz5kZ//7RbDbvKBQKd/i+D/DrxLJkyZL5CxcuHGTmQQR5mBnZ21g3k+597iyVSkObNm0CM3tiEUIgCAd4g3NjAnatuhHI/gURfbJYLLr1ej0Sq69T3DLbtq8DC2nE5B4YHh4+tF2JLXx80EEHnVAoFJwgCBabpgn2agDS7yKiPUEQIBsSTLjbdu/evWHHjh3IkuxL3wN9Dyg8MC1QhU1JqVQaIaLjmfl4IgJbA24Gki5kSZyOH+p6IsKm5gZm/q3rurh56Msc9gAO4nfdddc00PxDDjmkceONN2YGsDuH3TMrpncQqMJvFJujO3Hww8aJiPAcdzEzboV2MnMDpbZBEGADue/AjP+9UChEPvNGo4ES3Shw8F2FQmFPO2eZpjlx8803o9S3Y4kpU02qHwcySUSgBUc5MjZTD4RlGwCmxyEaAKTAoMDNaltBKdquXbuemyVjU9KJHCjtgcfUbDbxrCKFiN7led47uuUT3D7fe++9P1JslltNAdbSd4kI5QO3lkqlO+677777Fy5caE5MTCwuFos4lLxfESzAu5kpvky3fNUfpzseAKC9aZonMXM5ZH47apJog5mxZ0NQcNQwjFqpVPrZ1IOsZVkA+W6XMYpPxpqxsTFkFvSl9z2A7BEEUNo9S1ifGsA6aurhWngRMz8PbHnMvNU0zXd4npcXuUWqp2DbdlQVQSp9ik4I2PwT+wrDMLC3Al7gZFko/ob/bVHI2IfgMPbhhxuGgVLSNAQZ00wh+v/aO7vQOKoojp9zZ0OSbpoGimyl9RPa7J3VmuwSC4KiCH4UBRH1TaRQrdA3rfiJ6INCBX2wItVKW0TEJ0XtizWU2A9rCNngspmZpKnog6WItNrUXcmaOXKWCcQ1m+3Mzm5mN+fCEEjmfv1mdzJz7j3/Pz5uWdYnYUwqlUrd4rrubfzO6en1JRCR9UOBJVsAgINh7Pg6XigUji4sxvACRaFQuFxFH6poGEZ/Pp9nqYZAxTTND4joqaUq8+5ry7KWkmgI1JdUEgJCYHkCmE6nX/KEPQd8RreDsuWX2JNeYOpUoVAYky3fQVFKPSFw5QRqBKpKnri4Q0RTSqmp+fl5e25ubqqZGhhXPpvwzuSg6uzs7LfLCZyG11vtlhDxw56ent1RsVOvPeLWPoPTnPL5PLuCLefG1nSxZ95NEIvFjoekf1HzIimlHp2cnGQdESlCIFQCWusRAGAd0/8UIjrkOA6nb0ppEQI10vFesW37jRaZSqjDbGKgKtRx+2msXhMPP33VOldrzaly/zN9QMTXLct6rVb95f6utebMIXYrXCrraNXr6dXDVuoKAb8E2Aqdt9U2MjpcJKJTSqlTiHjSdd3vRE/K72WS84VA/QQWBap4pWqCDyIqH0qpM6v5e+mJmbMr6HX1kw7cAt8rd2ezWd72L6WJBLTWPwLAcgK2L9i2vbeJQyp3tWXLlo2GYZz2VsMb2f1fxWJxU630wUYOQNpuXwJe2ik7fy3e0cGao3cGTWVqX1rRnpnWmv9H8vNDpSvcuVKpNDAzM8O7fVZd8XYHsUtnu5YvEonEY1FZQNNa7wSAAxWwR/r6+raH4c6cTCafREQ2fVrIDLlERC87jvNeu15gmZcQiCIBDlTtAYAwtTc4v5pv1sNKqeF4PH5yZGRE8nCjePVlTKuKAAdjlFJrrlRHaVXBAYCBgYHNhmGwzXdThEwr+J5VSj0yNjbWzg+6kf1Iaa0/AoDldHKesG3745WYgGmaKSJihzpO52hIIaJ3HMd5tiGNS6NCAAD6+/vvMgzjYXZD80SE35XU5tb8aHh6TM9wcJ+ILrOe7Pz8/L7p6elfW3NG4Yxaa30YAEITkw9nVKG0cjCRSOyKSpBqYUZa64eI6D5EvIrT3ru7u/eHueDqpZ3e7ElbTMv9KpTPkjQiBHwRwMHBQVMpxboCQQuLn/PL1TFEPFYoFE7IlzkoSqknBITAShLw7oesfXFtk8ZBiHigs7Nzj+i3NYn4Et2Ypnk3EQ1XG4FSamBycpJ3Xa1IMU3zdiL6xoejkJ9x2n19fZkwVqH9dCrnCgEhIATaiQDLCJw/f34HIr4IADe0wdz+IKK98Xj87TADQG3ARaYgBIRAkwiU828zmQy7eNzoo08WCD7OD/ZEdGRiYuKcj7pyqhAQAkIgsgSGhoY2ENHnRMROp40sLLj+dDab5QCElJUloLTWx6ro6Iw6jsOaFStaTNO8n4hYQ6qae1qQ8f3Cc7Ztm39KEQJCQAgIgfoJqFQqxc5v97C7nqczuL7+ZpvWwjQA7C8Wi4ckHbxpzKUjISAEliCwEKh637MLrQaprDOFiByYGs5ms2ybXs2pS0ALASEgBFqagCew/hwAvAoAXSFPhlcp3+zt7d0nadEhk62jOc82+zMAuGNRM9OGYWzP5/NVLdnr6NJ3VdM0b2UBarYX9125ogJbycdisZ25XC4U98x6xyP1hYAQEALtSoDdZV3XvQkAUnwQURIANnpH2M8YfjGyc+AoZ8a4rvvl1NRUzm8Dcr4QEAJCoBEEyoGqdDr9ICJ+VdHBTwBwRCn1tehMNQK9tCkEhEDUCWzbtm1TqVR6HhF3eHbPQYfM2n1swX44Fot9Ojo6eiloQ1KvoQTQNE12wN2MiL93dXWdiFrKw6L0kl28IToADV4tf8u27YOy4BSAnlQRAkJACIRIIJlMrkfEqxHxGgDY4LruBkRcBwDriIjFvNcqpdYSUa+nVdhdkQbOgS7+XWXhDQXstP43IvKGA37uYLH7GSIqH67rnuno6Dgr7ushXlBpSggIgdAIlANVW7dujXd0dHAE/QQAHC2VSsO5XO630HqRhoSAEBACLUwgk8msIaIHPIfUNCKyhhWLW3fyQyAA8IokPxRe4AMRLxDRz/xAiIgWEX0/Pj7+ZwsjkKFHkEAymbxeKXWv67opRNSeXXePlx7ILzUXEfEiEfHC0w8sOGtZFqc4yo7oCF5PGZIQEAJCoF4CLAI+Nzf3T9QWWeqdl9QXAkJg9RH4FxhsNRO3AyWNAAAAAElFTkSuQmCC" + +/***/ }), +/* 56 */ +/***/ (function(module, exports) { + +module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAh0AAABxCAYAAABxyRHvAAAABGdBTUEAALGPC/xhBQAAQABJREFUeAHt3QeYLEdxAOBBPBtjbIxlA8YEP4GMyME2CAS2HgIEmCSRjEWQSCKDyAgEepgghIgig0GPnDMyGR6YnHMGCRBRIGOwwXlcf0Mtc3Oze7t3t3v33nV93+7szvR0V1dXV1VXV3efrQ1oNin88Ic/bPLzpS99qfnyl7/cfOtb32rOOOOM5sc//nHz05/+tPnlL3/ZZBXOdrazNec85zmb85znPM15z3ve5k//9E+b7du3NwcccEBzyUtesjn/+c/fnO985yvXffbZZ5PWuqJVKVApUClQKVApsFdSYOfZNovR8ZOf/KT5+te/3nz6059uPvKRjxQD4wc/+EExOn7xi1+sC/UZJIyOP/mTP2kufvGLN1e+8pWbK17xis3+++9fDJF1KaRmUilQKVApUClQKVApMESBjTU6vvrVrzbvf//7m7e97W3F2GB0/N///d8QonO9d9GLXrS57GUv2xx66KHNjh07mktd6lJzLa9mXilQKVApUClQKbAFKbB4o+P73/9+8/a3v7155Stf2Xz4wx9uzjrrrE1Fd1MzV7rSlZrDDz+8ud71rlemZzYVghWZSoFKgUqBSoFKgT2TAoszOr7whS80u3btal796lc3p59++qYnl/iQC17wgs0NbnCD5sgjj2yucpWrbHqcK4KVApUClQKVApUCm5gC8zc6Pve5zzUnn3xyMTYEfq4FxGSc+9znbn73d3+3+Z3f+Z3mt37rt5pt27Y1DATwv//7v83//M//NP/xH/9RAkx//vOfNz/72c/WUmR5V3m8Hve4xz3K9MuaM6wZVApUClQKVApUCmw9CszP6Pje977XPOEJT2ie//znl1Ums9D2j//4j5s/+7M/a8RaXPrSl24udrGLNRe5yEWaP/iDPxgZHec4xzma3/7t315idDA40uhgeKTR8aMf/ag57bTTGitgvvKVrzTf+c53yioYaWcBRs/Nbnaz5gEPeECJAZnl3Zq2UqBSoFKgUqBSYItTYP2NDt6GF77whc0//MM/TD2N8nu/93vN5S53ueav//qvm4MPPrisJrHUlSdjHsAIsfT2U5/6VPOud72r+cQnPtF84xvfmKooXhXLce95z3uWD0OoQqVApUClQKVApUClwIoUWF+j49vf/nbzoAc9qHn5y1++Ysm8FAceeGDxHBxyyCFlxchG7Z1x5plnNp/85Ceb17/+9c1b3vKWYpCsVIGzn/3szdWudrXmhBNOaA466KCVktfnlQKVApUClQKVAludAutndFj2KubBstdJwEtgiuI2t7lNMTo2ytAYh+N3v/vd5tRTT21e9KIXNR/4wAdGG4+NS68+xx9/fHOXu9ylYYhUqBSoFKgUqBSoFKgUGKTA+hgdT33qU5tjjz22+fd///fBUtwUp3G7292uufOd71xiNMYm3CQPxIS89a1vbdTt3e9+90SsTAPd8Y53bB772MeWmJOJievDSoFKgUqBSoFKga1JgbUZHQIxH/rQhzYnnXTSWI+A1SVHHHFE8+AHP7hsRb6n0Znx8ZrXvKY58cQTGytxxoF6Xv/612+e8YxnlO3Xx6Wr9ysFKgUqBSoFKgW2KAVWb3T853/+Z3PMMcc0z3rWs8bS7hKXuESJeTjssMPGptkTHjjbRfDpk570pObpT39682//9m+DaJteEQz7ghe8oKy2GUxUb1YKVApUClQKVApsTQqszuj47//+7+Ze97rXRIPjtre9bfEOOOdkbwErc+ym+sAHPrD5/Oc/P1itNDys4LnwhS88mKberBSoFKgUqBSoFNiCFNg581GrPBz3v//9Bw0Oy0n33XffEgdxyimnlIPV9iaiMiiue93rNm9+85vLlJG9QvrAMPnnf/7nEr9iP5AKlQKVApUClQKVApUCv6LATEaHGI4nP/nJzdOe9rRl9GNwOEqesWEVy2ZblbIM4VXeUE8bl4ndsFeHnVH7wPB473vf29zvfvdr/vVf/7X/uP6vFKgUqBSoFKgU2JIUOPvOgGlq7vTXN73pTUXRml7pAkVsKsGUAk/AVgDGxt/8zd8U4+pjH/tY06cJelk+/F//9V9l6/S6nHYrcEWtY6VApUClQKXABArsntro+PKXv9yI0/jxj3+8LD8eDvtaXOMa11j2bG++YcVKHgTnxNz+tuo8Hla8bI/dVS9zmcuMzojZm2lS61YpUClQKVApUCkwhgK7p5pesf+G80ZOHzgd9g//8A+b5zznORt6EBr8NmoaQ1yHGJe73/3ug9u2W+nyiEc8onHKboVKgUqBSoFKgUqBrUyBFY0O0wTPfe5zyy6dfUJRuI9+9KPL/hT9Z4v6z+Cw9fod7nCHQS/MIvBwCu1xxx3X3OQmN1kWy2K5LWPNWTSTNk9bBJ61jEqBSoFKgUqBSoGNpMCKRodplcc97nHLcBQoStHbYXSjgBK3OZm9M2zgZSvyoemfReDn4LfHPOYxzV/8xV8sK860yz/90z81r3jFK8ZuorbspXqjUqBSoFKgUqBSYC+jwNliJN6OqxNledRRRzUveclLliW58pWvXLwftjffCEiD4ylPecqS4m9605uW5bwbgZcYDlum/93f/V3zL//yL0vwEmx7qUtdqtDM6pcKlQLzogA+FMCM58Qd+cwDyAflgL4YEWi9qOBp3lh19fHbsn749HFyXIGDJitUCuypFMDT+p2PgT+e3sNWik7eHMxGWDe84Q1HgiUbylH0b3zjGzcscHScwZH4baThQeA96lGPKjuxEv5dMB113/vetzzfCEYhkH0mAcG9WmWhvn1B3y9LvTei7n089tb/+M9BhXnSs8MVr3nNa666TcfRibFhWbjl89rcfx+ruHj9HvnIRzZXvOIVx70+1X154SkCVr38Puc5z1mMKDzKmHJMwWmnnVb2Bzrf+c7XfOUrXylnIP30pz8dved9RtCtb33rctDkVIVvoUTTyIUkB/mg/7omoO8kyLSrlSuT8t5qz+z9ZBXpRz/60caO34cffnhz8YtffEl7bHKa7Bw7BNKZH//4xy8zODDQ0UcfvWkNDgQ31UIQPvvZzy4HzS2yERgWpnkYbBijC4Tyi1/84uZWt7pVc+lLX7r7aO6/CexPfOITzZlnnjm2LG0rMNiKnBQUYxP3HhA8VvBMCuiVpx1qh6agetnVv6uggDb+0pe+VPjva1/7WmlDnrdXvepVazYA+ugo6wc/+EExPPA1oyANWsqf0l8tyM806fve977iOfziF7/Y/OxnPyvZnetc52r222+/5qCDDmouf/nLFwPr+c9/ftkhWb+TjtEFN/mkQjz3uc/dHHzwwatFaa9975e//GWDV6bdyBD9KTv9GA98//vfLyv0su3HEeo85zlPaS8D1gqrowDe3rVrV9kr66yzzmroGvR3rtkFLnCB1WW6EW+Fch6E8GS0MZIw9bLks//++7dnnHHG4DvzvhkrQdp73/veS/Dp49f9Hx6PNpTsvNFaln+M0NpXv/rVbYyuluEa7t32Pve5Txsddtl787yBdte5znXaYNTSrmEALMPNvYte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" + +/***/ }), +/* 57 */ /***/ (function(module, exports) { module.exports = require("sharedb/lib/client"); /***/ }), -/* 55 */ +/* 58 */ +/***/ (function(module, exports) { + +module.exports = require("jquery-ui-dist/jquery-ui"); + +/***/ }), +/* 59 */ /***/ (function(module, exports) { module.exports = require("cytoscape-edgehandles"); /***/ }), -/* 56 */ +/* 60 */ /***/ (function(module, exports, __webpack_require__) { var require;var require;(function(f){if(true){module.exports=f()}else { var g; }})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return require(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; +// EXTERNAL MODULE: external "react-bootstrap" +var external_react_bootstrap_ = __webpack_require__(1); +// EXTERNAL MODULE: external "react-toastify" +var external_react_toastify_ = __webpack_require__(10); +// EXTERNAL MODULE: external "react-tooltip" +var external_react_tooltip_ = __webpack_require__(20); +var external_react_tooltip_default = /*#__PURE__*/__webpack_require__.n(external_react_tooltip_); - // @ts-ignore +// EXTERNAL MODULE: ./src/css/pmv1.css +var pmv1 = __webpack_require__(52); - // @ts-ignore +// EXTERNAL MODULE: ./src/css/pmv2.css +var pmv2 = __webpack_require__(53); - // @ts-ignore +// EXTERNAL MODULE: ./src/css/qtip.css +var qtip = __webpack_require__(54); - // @ts-ignore +// EXTERNAL MODULE: ./src/data/pathways.json +var pathways = __webpack_require__(8); -var addSelImage = __webpack_require__(23); // @ts-ignore +// EXTERNAL MODULE: external "file-saver" +var external_file_saver_ = __webpack_require__(14); +// CONCATENATED MODULE: ./src/utils/SaveLoadUtility.tsx +var SaveLoadUtility = +/** @class */ +function () { + function SaveLoadUtility() {} //Exports given json graph(based on cy.export()) into a string -var addAllImage = __webpack_require__(24); // @ts-ignore + Object.defineProperty(SaveLoadUtility, "exportGraph", { + enumerable: false, + configurable: true, + writable: true, + value: function (pathwayDetails, cy, edgeEditing, graphJSON) { + var returnString = pathwayDetails.pathwayTitle + '\n\n'; + returnString += pathwayDetails.pathwayDetails + '\n\n'; //Get nodes and edges -var aboutImage = __webpack_require__(22); // @ts-ignore + var nodes = graphJSON.elements.nodes; // var edges = pathwayDetails.graphJSON.elements.edges; + var edges = cy.edges(); //Prepare Meta Line + returnString += '--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY\tWIDTH\tHEIGHT--' + '\n'; + if (nodes) { + for (var i = 0; i < nodes.length; i++) { + returnString += this.exportNode(nodes[i]); + } + } //Put a blank line between nodes and edges -var Toolbar_Toolbar = -/** @class */ -function (_super) { - __extends(Toolbar, _super); + returnString += '\n'; + returnString += '--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE\tINTERACTION_PUBMED_ID\tEDGE_NAME\tEDGE_BENDS\n'; - function Toolbar(props) { - var _this = _super.call(this, props) || this; + if (edges) { + //Write edges + for (var i = 0; i < edges.length; i++) { + var edgeID = edges[i].data('id'); + var edgeType = edges[i].data('type'); + var source = edges[i].data('source'); + var target = edges[i].data('target'); + var pubmedIDs = edges[i].data('pubmedIDs'); + var pubmedString = ""; + var edgeName = edges[i].data('name') ? edges[i].data('name') : ""; + var numberOfBendPoints = 0; + if (edgeEditing.getSegmentPoints(edges[i]) !== undefined) numberOfBendPoints = edgeEditing.getSegmentPoints(edges[i]).length / 2; + var bendPointPositions = ""; - Object.defineProperty(_this, "selectedGenes", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(_this, "editor", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object(external_mobx_["makeObservable"])(_this); - _this.selectedGenes = []; - return _this; - } + for (var j = 0; j < numberOfBendPoints; j++) { + bendPointPositions += "(" + edgeEditing.getSegmentPoints(edges[i])[2 * j] + ";" + edgeEditing.getSegmentPoints(edges[i])[2 * j + 1] + ")"; + } - Object.defineProperty(Toolbar.prototype, "render", { + if (pubmedIDs != undefined) { + for (var j = 0; j < pubmedIDs.length; j++) { + pubmedString += pubmedIDs[j]; + if (j != pubmedIDs.length - 1) pubmedString += ";"; + } + } + + returnString += edgeID + '\t' + source + '\t' + target + '\t' + edgeType + '\t' + pubmedString + '\t' + edgeName + '\t' + bendPointPositions + '\n'; + } + } //Finally return a string that includes whole graph lovely and peacefully :) + + + return returnString; + } + }); + Object.defineProperty(SaveLoadUtility, "exportAsSIFNX", { enumerable: false, configurable: true, writable: true, - value: function () { - var _this = this; + value: function (pathwayDetails, graphJSON) { + var returnString = ""; //Get nodes and edges - var studyQuery = "q=" + JSON.stringify(this.props.alterationData) + "&g=" + this.props.genes.map(function (gene) { - return gene.hugoGeneSymbol; - }).join("+"); - return external_react_default.a.createElement("div", { - id: "toolbar", - style: { - marginLeft: '0px' - } - }, external_react_default.a.createElement("img", { - height: "22px", - width: "22px", - "data-border": "true", - "data-type": "light", - "data-tip": "Save as PNG", - "data-place": "right", - "data-effect": "solid", - src: save_png_default.a, - onClick: function () { - _this.props.pathwayActions.saveAs("PNG"); - } - }), external_react_default.a.createElement("img", { - height: "22px", - width: "22px", - "data-border": "true", - "data-type": "light", - "data-tip": "Save as SVG", - "data-place": "right", - "data-effect": "solid", - src: save_svg_default.a, - onClick: function () { - _this.props.pathwayActions.saveAs("SVG"); - } - }), external_react_default.a.createElement("img", { - height: "22px", - width: "22px", - "data-border": "true", - "data-type": "light", - "data-tip": "Perform layout", - "data-place": "right", - "data-effect": "solid", - src: layout_cose_default.a, - onClick: this.props.pathwayActions.performLayout - }), !this.props.patientView && [external_react_default.a.createElement("img", { - height: "22px", - width: "22px", - "data-border": "true", - "data-type": "light", - "data-tip": "Add selected genes to query", - "data-place": "right", - "data-effect": "solid", - src: addSelImage, - onClick: function () { - _this.selectedGenes = _this.props.pathwayActions.getSelectedNodes().filter(function (node) { - return node.data().type === "GENE"; - }).map(function (node) { - return node.data().name; - }); + var nodes = graphJSON.elements.nodes; + var edges = graphJSON.elements.edges; + var nodeMap = {}; //Put a blank line between nodes and edges - var noneGeneList = _this.props.pathwayActions.getSelectedNodes().filter(function (node) { - return node.data().type !== "GENE"; - }).map(function (node) { - return node.data().name; - }); + returnString += '\n'; + returnString += 'PARTICIPANT\tPARTICIPANT_TYPE\tPARENT_ID\tPOSX\tPOSY\tWIDTH\tHEIGHT' + '\n'; - var invalidGenes = []; - var message = ""; + if (nodes) { + for (var i = 0; i < nodes.length; i++) { + returnString += this.exportNode(nodes[i]); + nodeMap[nodes[i].data.id] = nodes[i]; + } + } //Put a blank line between nodes and edges - if (noneGeneList.length > 0) { - message += "Selection contains nodes that are not genes: " + noneGeneList.join(', ') + ". "; - } - _this.selectedGenes.forEach(function (gene) { - if (!_this.props.validGenes.hasOwnProperty(gene)) { - invalidGenes.push(gene); - } - }); + returnString += '\n'; + returnString += 'PARTICIPANT_A\tPARTICIPANT_B\tTYPE\tPUBMED_IDS\n'; - if (invalidGenes.length === 0) { - if (_this.selectedGenes.length > 0 && noneGeneList.length === 0) { - _this.props.onAddGenes(_this.selectedGenes); + if (edges) { + //Write edges + for (var i = 0; i < edges.length; i++) { + var edgeType = edges[i].data.type; + var source = edges[i].data.source; + var target = edges[i].data.target; + var edgeName = edges[i].data.name; + var pubmedIDs = edges[i].data.pubmedIDs; + var pubmedString = ""; + + if (pubmedIDs != undefined) { + for (var j = 0; j < pubmedIDs.length; j++) { + pubmedString += pubmedIDs[j]; + if (j != pubmedIDs.length - 1) pubmedString += ";"; } - } else { - message += "Following gene symbols are invalid or already in gene list: " + invalidGenes.join(", ") + "."; } - if (message.length > 0) { - _this.props.showMessage(message); - } + returnString += nodeMap[source].data.name + '\t' + nodeMap[target].data.name + '\t' + edgeType + '\t' + pubmedString + '\t' + edgeName + '\n'; } - }), external_react_default.a.createElement("img", { - height: "22px", - width: "22px", - "data-border": "true", - "data-type": "light", - "data-tip": "Add all valid genes to query", - "data-place": "right", - "data-effect": "solid", - src: addAllImage, - onClick: function () { - _this.selectedGenes = _this.props.pathwayGenes.filter(function (gene) { - return _this.props.validGenes.hasOwnProperty(gene); - }); + } //Finally return a string that includes whole graph lovely and peacefully :) - if (_this.selectedGenes.length > 0) { - _this.props.onAddGenes(_this.selectedGenes); - } - } - }), external_react_default.a.createElement("img", { - height: "22px", - width: "22px", - "data-border": "true", - "data-type": "light", - "data-tip": "Edit pathway", - "data-place": "right", - "data-effect": "solid", - src: edit_default.a, - onClick: function () { - { - window.open("http://pathwaymapper.org/?pathwayName=" + _this.props.selectedPathway + "&" + studyQuery); - } - } - })], external_react_default.a.createElement("img", { - height: "22px", - width: "22px", - "data-border": "true", - "data-type": "light", - "data-tip": "Help", - "data-place": "right", - "data-effect": "solid", - src: aboutImage, - onClick: function () { - console.log("Here"); - _this.props.handleOpen(EModalType.CHELP); - } - })); + return returnString; } }); + Object.defineProperty(SaveLoadUtility, "exportNode", { + enumerable: false, + configurable: true, + writable: true, + value: function (node) { + //Node specific data fields + var nodeName = node.data.name; + var parentID = node.data.parent; + var nodeID = node.data.id; + var pos = node.position; + var nodeType = node.data.type; + var nodeW = node.data.w; + var nodeH = node.data.h; //Check if node has a parent, if not set parent id -1 - __decorate([external_mobx_["observable"]], Toolbar.prototype, "selectedGenes", void 0); - - __decorate([external_mobx_["observable"]], Toolbar.prototype, "editor", void 0); - - Toolbar = __decorate([external_mobx_react_["observer"]], Toolbar); - return Toolbar; -}(external_react_default.a.Component); - -/* harmony default export */ var ui_Toolbar = (Toolbar_Toolbar); -// EXTERNAL MODULE: external "cytoscape" -var external_cytoscape_ = __webpack_require__(6); -var external_cytoscape_default = /*#__PURE__*/__webpack_require__.n(external_cytoscape_); - -// EXTERNAL MODULE: external "jquery" -var external_jquery_ = __webpack_require__(2); -var external_jquery_default = /*#__PURE__*/__webpack_require__.n(external_jquery_); - -// EXTERNAL MODULE: external "autobind-decorator" -var external_autobind_decorator_ = __webpack_require__(4); -var external_autobind_decorator_default = /*#__PURE__*/__webpack_require__.n(external_autobind_decorator_); + if (node.data.parent) { + parentID = node.data.parent; + } else { + parentID = -1; + } // Write a line for a node -// CONCATENATED MODULE: ./src/utils/GraphUtilities.tsx -/** - * Created by istemi on 27.09.2016. - */ -var GraphUtilities = -/** @class */ -function () { - function GraphUtilities() {} - Object.defineProperty(GraphUtilities.prototype, "createGraphHierarchy", { + return nodeName + '\t' + nodeID + '\t' + nodeType + '\t' + parentID + '\t' + parseInt(pos.x) + '\t' + parseInt(pos.y) + '\t' + nodeW + '\t' + nodeH + '\n'; + } + }); + Object.defineProperty(SaveLoadUtility, "parseGraph", { enumerable: false, configurable: true, writable: true, - value: function (nodes) { - //Some arrays and maps for creating graph hierarchy - var tree = []; - var mappedArr = {}; // First map the nodes of the array to an object -> create a hash table. + value: function (graph, isArray) { + var allEles = []; + var nodes = []; + var edges = []; // By lines + // Match all new line character representations - for (var i = 0, len = nodes.length; i < len; i++) { - var arrElem = nodes[i]; - mappedArr[arrElem.id()] = arrElem; - mappedArr[arrElem.id()].childNodes = []; + var seperator = /\r?\n|\r/; + var lines = isArray ? graph : graph.split(seperator); + var edgesStartIndex = -1; + var title = lines[0]; + var description = lines[2]; // In old version description used to expand in multiple lines + // graphDataIndex holds the line index where the first --NODE_NAME occurs and is used later to load nodes + + var graphDataIndex = 3; + var isFound = false; + + while (graphDataIndex < lines.length) { + if (lines[graphDataIndex].includes("--NODE_NAME")) { + isFound = true; + break; + } + + description += "\n" + lines[graphDataIndex]; + graphDataIndex++; } - for (var id in mappedArr) { - var mappedElem = mappedArr[id]; // If the element is not at the root level, add it to its parent array of children. + graphDataIndex++; // TODO AMENDMENT - if (mappedElem.parent().length > 0) { - mappedArr[mappedElem.parent().id()].childNodes.push(mappedElem); - } // If the element is at the root level, add it to first level elements array. - else { - tree.push(mappedElem); + if (!isFound) { + graphDataIndex = 2; + } //TODO Legacy pathways workaround + + + if (lines[0].includes("--NODE_NAME")) { + graphDataIndex = 1; + title = "New Pathway"; + description = ""; + } // start from first line skip node meta data + + + for (var i = graphDataIndex; i < lines.length; i++) { + // If we encounter a blank line, that means we need to parse edges from now on ! + // so skip blank line and edge meta line + if (lines[i].length == 0 || lines[i] === "") { + edgesStartIndex = i + 2; + break; + } //Fetch a line for nodes + + + var lineData = lines[i].split('\t'); + var nodeName = lineData[0]; + var nodeID = lineData[1]; + var nodeType = lineData[2]; + var parentID = lineData[3]; + var posX = lineData.length > 4 ? lineData[4] : "0"; + var posY = lineData.length > 5 ? lineData[5] : "0"; + var nodeW = lineData.length > 7 ? lineData[6] : nodeType === 'PROCESS' ? nodeName.length * 6 + 24 : "150"; + var nodeH = lineData.length > 7 ? lineData[7] : nodeType === 'PROCESS' ? "24" : "52"; + + if (nodeName === " " || nodeName === "") {//nodeName = "No Name " + (i + 1); + } + + var newNode = { + group: 'nodes', + data: { + id: nodeID, + name: nodeName, + type: nodeType, + w: nodeW, + h: nodeH, + parent: -1 + }, + position: { + x: parseInt(posX), + y: parseInt(posY) } - } + }; - return tree; - } - }); - ; - /* - * Creates graph hierarchy from given flat list of nodes list, nodes list is assumed to have parent-child - * relationship by a field 'parent' which represents to the id of the parent node This function is specific - * for the needs of TCGA Pathway Curation Tool 04/07/2016 - * - * @param nodes {array}: flat list of nodes of a graph - * @return {array}: Tree representation in array, entries are root level nodes. node.children gives children nodes - * of each node in the returned array. - * a node in corresponding level. - * - * */ + if (parentID != '-1') { + newNode.data.parent = parentID; + } - Object.defineProperty(GraphUtilities.prototype, "createGraphHierarchyRealTime", { - enumerable: false, - configurable: true, - writable: true, - value: function (nodes) { - //Some arrays and maps for creating graph hierarchy - var tree = []; - var mappedArr = {}; // First map the nodes of the array to an object -> create a hash table. + nodes.push(newNode); + } //Read edges - for (var i = 0, len = nodes.length; i < len; i++) { - var arrElem = nodes[i]; - mappedArr[arrElem.data.id] = arrElem; - mappedArr[arrElem.data.id].children = []; - } - for (var id in mappedArr) { - var mappedElem = mappedArr[id]; // If the element is not at the root level, add it to its parent array of children. + for (var i_1 = edgesStartIndex; i_1 < lines.length; i_1++) { + //If we reach EOF we break loop + if (lines[i_1].length == 0) { + break; + } - if (mappedElem.data.parent != -1) { - mappedArr[mappedElem.data.parent].children.push(mappedElem); - } // If the element is at the root level, add it to first level elements array. - else { - tree.push(mappedElem); + var lineData = lines[i_1].split('\t'); + var edgeID = lineData[0]; + var edgeSource = lineData[1]; + var edgeTarget = lineData[2]; + var edgeType = lineData[3]; + var pubmedIDs = lineData.length > 4 ? lineData[4].split(';') : []; + var label = lineData.length > 5 ? lineData[5] : ''; + var bendPoints = lineData.length > 6 ? lineData[6] : ''; + var bendPointPositions = []; + + if (bendPoints) { + var bendPair = bendPoints.split(')'); //The last element of bendPair array is "" + + for (var j = 0; j < bendPair.length - 1; j++) { + var separatorIndex = bendPair[j].indexOf(";"); + var x = bendPair[j].substring(1, separatorIndex); + var y = bendPair[j].substring(separatorIndex + 1, bendPair[j].length); + bendPointPositions.push({ + x: parseFloat(x), + y: parseFloat(y) + }); } - } + } - return tree; + var newEdge = { + group: 'edges', + data: { + id: edgeID, + type: edgeType, + source: edgeSource, + target: edgeTarget, + pubmedIDs: pubmedIDs, + name: label, + bendPointPositions: bendPointPositions + /*[{x:100,y:100}]*/ + + } + }; + edges.push(newEdge); + } // edgeEditing.initBendPoints(cy.edges()); + + + return { + title: title, + description: description, + nodes: nodes, + edges: edges + }; } }); - ; - return GraphUtilities; + return SaveLoadUtility; }(); -/* harmony default export */ var utils_GraphUtilities = (GraphUtilities); -// CONCATENATED MODULE: ./src/utils/SVGExporter.ts +/* harmony default export */ var utils_SaveLoadUtility = (SaveLoadUtility); +// CONCATENATED MODULE: ./src/managers/FileOperationsManager.tsx +var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { + var c = arguments.length, + r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, + d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; -var SVGExporter_SVGExporter = + + + +var FileOperationsManager_FileOperationsManager = /** @class */ function () { - function SVGExporter(edgeEditing, editor) { - Object.defineProperty(this, "SVGNameSpace", { - enumerable: true, - configurable: true, - writable: true, - value: 'http://www.w3.org/2000/svg' - }); - Object.defineProperty(this, "svg", { - enumerable: true, - configurable: true, - writable: true, - value: document.createElementNS(this.SVGNameSpace, 'svg') - }); - Object.defineProperty(this, "NODE_FILL_COLOR", { - enumerable: true, - configurable: true, - writable: true, - value: 'rgb(255,255,255)' - }); - Object.defineProperty(this, "FAMILY_FILL_COLOR", { - enumerable: true, - configurable: true, - writable: true, - value: 'rgb(255,255,255)' - }); - Object.defineProperty(this, "FAMILY_STROKE_COLOR", { - enumerable: true, - configurable: true, - writable: true, - value: 'rgb(204,204,204)' - }); - Object.defineProperty(this, "NODE_STROKE_COLOR", { - enumerable: true, - configurable: true, - writable: true, - value: 'rgb(0,0,0)' - }); - Object.defineProperty(this, "COMPARTMENT_STROKE_WIDTH", { - enumerable: true, - configurable: true, - writable: true, - value: 2 - }); - Object.defineProperty(this, "NODE_STROKE_WIDTH", { - enumerable: true, - configurable: true, - writable: true, - value: 1 - }); - Object.defineProperty(this, "NODE_OPACITY", { - enumerable: true, - configurable: true, - writable: true, - value: 0.5 - }); - Object.defineProperty(this, "ROUNDING_FACTOR", { + function FileOperationsManager() { + Object.defineProperty(this, "pathwayInfo", { enumerable: true, configurable: true, writable: true, - value: 6 + value: void 0 }); - Object.defineProperty(this, "GENOMICDATA_LABEL_Y_OFFSET", { - enumerable: true, - configurable: true, - writable: true, - value: -15 - }); - Object.defineProperty(this, "EDGE_WIDTH", { - enumerable: true, - configurable: true, - writable: true, - value: 1 - }); - Object.defineProperty(this, "T_WIDTH", { - enumerable: true, - configurable: true, - writable: true, - value: 2 - }); - Object.defineProperty(this, "T_HEIGHT", { - enumerable: true, - configurable: true, - writable: true, - value: 8 - }); - Object.defineProperty(this, "T_ARROW_HEAD_OFFSET", { - enumerable: true, - configurable: true, - writable: true, - value: 2 - }); - Object.defineProperty(this, "TRIANGLE_ARROW_HEAD_HEIGHT", { - enumerable: true, - configurable: true, - writable: true, - value: 8 - }); - Object.defineProperty(this, "TRIANGLE_ARROW_HEAD_WIDTH", { - enumerable: true, - configurable: true, - writable: true, - value: 8 - }); - Object.defineProperty(this, "DASH_PARAMETERS", { - enumerable: true, - configurable: true, - writable: true, - value: '5, 3' - }); - Object.defineProperty(this, "COMPOUND_MARGIN", { - enumerable: true, - configurable: true, - writable: true, - value: 8 - }); - Object.defineProperty(this, "NODE_FONT_SIZE", { - enumerable: true, - configurable: true, - writable: true, - value: 14 - }); - Object.defineProperty(this, "edgeEditing", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(this, "editor", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - this.edgeEditing = edgeEditing; - this.editor = editor; + Object(external_mobx_["makeObservable"])(this); + this.pathwayInfo = { + pathwayTitle: "New Pathway", + pathwayDetails: "", + fileName: "pathway.txt" + }; } - Object.defineProperty(SVGExporter.prototype, "resetSVG", { + Object.defineProperty(FileOperationsManager.prototype, "getPathwayInfo", { + get: function () { + return this.pathwayInfo; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(FileOperationsManager.prototype, "setPathwayInfo", { enumerable: false, configurable: true, writable: true, - value: function () { - this.svg = document.createElementNS(this.SVGNameSpace, 'svg'); + value: function (other) { + this.pathwayInfo = other; } - }); - Object.defineProperty(SVGExporter.prototype, "exportGraph", { + }); // see http://stackoverflow.com/questions/16245767/creating-a-blob-from-a-base64-string-in-javascript + + Object.defineProperty(FileOperationsManager.prototype, "b64toBlob", { enumerable: false, configurable: true, writable: true, - value: function (nodes, edges) { - //Reset SVG - this.resetSVG(); - this.svg.setAttribute('version', '1.1'); - this.svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg'); //Set viewport of output SVG - - var cyBounds = this.editor.cy.extent(); - this.svg.setAttribute('viewBox', cyBounds.x1 + ' ' + cyBounds.y1 + ' ' + cyBounds.w + ' ' + cyBounds.h); - var that = this; - var nodeMap = {}; - var nodeTree = new utils_GraphUtilities().createGraphHierarchy(nodes); - - var traverseFunction = function (node) { - //Create SVG for current node - nodeMap[node.id()] = node; - var genomicDataSVG = that.editor.getGenomicDataSVG(node).children; - var oncoprintDataSVG = that.editor.getOncoprintDataSVG(node); - that.svg.appendChild(that.createRect(node)); - var labelOffset = genomicDataSVG && genomicDataSVG.length > 0 || oncoprintDataSVG.outerHTML !== '' ? that.GENOMICDATA_LABEL_Y_OFFSET : 0; - that.svg.appendChild(that.createText(node, labelOffset)); //Append Genomic Data SVG here + value: function (b64Data, contentType, sliceSize) { + if (sliceSize === void 0) { + sliceSize = 512; + } - if (genomicDataSVG) { - while (genomicDataSVG.length > 0) { - var elemSVG = genomicDataSVG[0]; - var nodePosition = node.position(); - var svgX = elemSVG.getAttribute('x'); - var svgY = elemSVG.getAttribute('y'); - elemSVG.setAttribute('x', nodePosition.x - node.width() / 2 + parseFloat(svgX)); - elemSVG.setAttribute('y', nodePosition.y - node.height() / 2 + parseFloat(svgY)); - that.svg.appendChild(elemSVG); - } - } else if (oncoprintDataSVG.outerHTML !== '') { - var nodePosition = node.position(); - var width = parseInt(oncoprintDataSVG.getAttribute('width')); - var height = parseInt(oncoprintDataSVG.getAttribute('height')); - var verticalPadding = 8; - var y = nodePosition.y + node.height() / 2 - (height + verticalPadding); - oncoprintDataSVG.setAttribute('x', nodePosition.x - width / 2); - oncoprintDataSVG.setAttribute('y', y); - that.svg.appendChild(oncoprintDataSVG); - } //Traverse children + contentType = contentType || ''; + var byteCharacters = atob(b64Data); + var byteArrays = []; + for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) { + var slice = byteCharacters.slice(offset, offset + sliceSize); + var byteNumbers = new Array(slice.length); - if (node.childNodes) { - for (var i in node.childNodes) { - traverseFunction(node.childNodes[i]); - } + for (var i = 0; i < slice.length; i++) { + byteNumbers[i] = slice.charCodeAt(i); } - }; //Traverse node hierarchy - - for (var i in nodeTree) { - var rootLevelNode = nodeTree[i]; - traverseFunction(rootLevelNode); + var byteArray = new Uint8Array(byteNumbers); + byteArrays.push(byteArray); } - edges.forEach(function (edge) { - var source = nodeMap[edge.source().id()]; - var target = nodeMap[edge.target().id()]; - that.drawEdge(edge, source, target); + var blob = new Blob(byteArrays, { + type: contentType }); - return this.svg.outerHTML; + return blob; } }); - Object.defineProperty(SVGExporter.prototype, "drawEdge", { + ; + Object.defineProperty(FileOperationsManager.prototype, "saveAsJPEG", { enumerable: false, configurable: true, writable: true, - value: function (edge, source, target) { - var edgeType = edge.data().type; - var sourceRectangle = { - x: source.position().x, - y: source.position().y, - width: source.width(), - height: source.height() - }; - var targetRectangle = { - x: target.position().x, - y: target.position().y, - width: target.width(), - height: target.height() - }; //If source or target node is compound node adjust their width and height according to compound margins + value: function (cy) { + // var fileName = getFileName(); + var graphData = cy.jpeg(); // this is to remove the beginning of the pngContent: data:img/png;base64, - if (source.isParent()) { - sourceRectangle.width += this.COMPOUND_MARGIN; - sourceRectangle.height += this.COMPOUND_MARGIN; - } + var b64data = graphData.substr(graphData.indexOf(",") + 1); + var imageData = this.b64toBlob(b64data, "image/jpeg"); + var blob = new Blob([imageData]); + Object(external_file_saver_["saveAs"])(blob, "pathway.jpg"); + } + }); + ; + Object.defineProperty(FileOperationsManager.prototype, "saveAsSVG", { + enumerable: false, + configurable: true, + writable: true, + value: function (editor) { + var returnString = editor.exportSVG(); + var fileName = 'pathway.svg'; + var blob = new Blob([returnString], { + type: "text/plain;charset=utf-8" + }); + Object(external_file_saver_["saveAs"])(blob, fileName); + } + }); + Object.defineProperty(FileOperationsManager.prototype, "saveAsPNG", { + enumerable: false, + configurable: true, + writable: true, + value: function (cy) { + // var fileName = getFileName(); + var graphData = cy.png(); // this is to remove the beginning of the pngContent: data:img/png;base64, - if (target.isParent()) { - targetRectangle.width += this.COMPOUND_MARGIN; - targetRectangle.height += this.COMPOUND_MARGIN; - } + var b64data = graphData.substr(graphData.indexOf(",") + 1); + var imageData = this.b64toBlob(b64data, "image/png"); + var blob = new Blob([imageData]); + Object(external_file_saver_["saveAs"])(blob, "pathway.png"); + } + }); + ; + Object.defineProperty(FileOperationsManager.prototype, "saveGraph", { + enumerable: false, + configurable: true, + writable: true, + value: function (isSIFNX, editor) { + var pathwayData = this.pathwayInfo; + var returnString = isSIFNX ? utils_SaveLoadUtility.exportAsSIFNX(pathwayData, editor.cy.json()) : utils_SaveLoadUtility.exportGraph(pathwayData, editor.cy, editor.edgeEditing, editor.cy.json()); + var blob = new Blob([returnString], { + type: "text/plain;charset=utf-8" + }); + Object(external_file_saver_["saveAs"])(blob, pathwayData.fileName); + } + }); + ; - var numberOfBendPoints = 0; - if (this.edgeEditing.getSegmentPoints(edge) !== undefined) numberOfBendPoints = this.edgeEditing.getSegmentPoints(edge).length / 2; - var clipPoints; + __decorate([external_mobx_["observable"]], FileOperationsManager.prototype, "pathwayInfo", void 0); - if (numberOfBendPoints > 0) { - var lastBendPoint = { - x: this.edgeEditing.getSegmentPoints(edge)[2 * numberOfBendPoints - 2], - y: this.edgeEditing.getSegmentPoints(edge)[2 * numberOfBendPoints - 1], - height: 0, - width: 0 - }; //Calculate clipping point of target node with the segment from last bend point by Cohen Sutherland algorithm + __decorate([external_mobx_["computed"]], FileOperationsManager.prototype, "getPathwayInfo", null); - clipPoints = this.findClippingPoints(lastBendPoint, targetRectangle); - } else { - //Calculate clipping points of both source and target nodes by Cohen Sutherland algorithm - clipPoints = this.findClippingPoints(sourceRectangle, targetRectangle); - } //Calculate unit vector pointing from source clipping coordinates to target clipping coordinates - - - var unitV = this.unitVector({ - x: clipPoints.targetClipPoints.x - clipPoints.sourceClipPoints.x, - y: clipPoints.targetClipPoints.y - clipPoints.sourceClipPoints.y - }); - var inverseUnitV = this.scale(unitV, -1); - var targetX = clipPoints.targetClipPoints.x; - var targetY = clipPoints.targetClipPoints.y; //Draw Triangle arrow head - - if (edgeType == 'ACTIVATES' || edgeType == 'INDUCES') { - targetX = clipPoints.targetClipPoints.x + this.TRIANGLE_ARROW_HEAD_HEIGHT * inverseUnitV.x; - targetY = clipPoints.targetClipPoints.y + this.TRIANGLE_ARROW_HEAD_HEIGHT * inverseUnitV.y; - var point1Vector = this.rotateVector(unitV, Math.PI / 2); - var point2Vector = this.rotateVector(unitV, -Math.PI / 2); - point1Vector = this.scale(point1Vector, this.TRIANGLE_ARROW_HEAD_WIDTH / 2); - point2Vector = this.scale(point2Vector, this.TRIANGLE_ARROW_HEAD_WIDTH / 2); - var point1X = targetX + point1Vector.x; - var point1Y = targetY + point1Vector.y; - var point2X = targetX + point2Vector.x; - var point2Y = targetY + point2Vector.y; - var polySVG = document.createElementNS(this.SVGNameSpace, 'polygon'); - polySVG.setAttribute('points', point1X + ',' + point1Y + ',' + point2X + ',' + point2Y + ',' + clipPoints.targetClipPoints.x + ',' + clipPoints.targetClipPoints.y); - this.svg.appendChild(polySVG); - } //Draw T type arrow head - else if (edgeType === 'INHIBITS' || edgeType === 'REPRESSES') { - targetX = clipPoints.targetClipPoints.x + this.T_ARROW_HEAD_OFFSET * inverseUnitV.x; - targetY = clipPoints.targetClipPoints.y + this.T_ARROW_HEAD_OFFSET * inverseUnitV.y; //Calculate T shape points - - var point1Vector = this.rotateVector(unitV, Math.PI / 2); - var point2Vector = this.rotateVector(unitV, -Math.PI / 2); - point1Vector = this.scale(point1Vector, this.T_HEIGHT / 2); - point2Vector = this.scale(point2Vector, this.T_HEIGHT / 2); - var point1X = targetX + point1Vector.x; - var point1Y = targetY + point1Vector.y; - var point2X = targetX + point2Vector.x; - var point2Y = targetY + point2Vector.y; //Draw edge arrow line here ! - - var lineSVG = document.createElementNS(this.SVGNameSpace, 'line'); - lineSVG.setAttribute('x1', point1X); - lineSVG.setAttribute('y1', point1Y); - lineSVG.setAttribute('x2', point2X); - lineSVG.setAttribute('y2', point2Y); - lineSVG.setAttribute('stroke-width', this.T_WIDTH + ''); - lineSVG.setAttribute('stroke', 'black'); - this.svg.appendChild(lineSVG); - } //Draw edge lines here ! - - - if (numberOfBendPoints > 0) { - //Calculate initial clipping point of source node with the segment from first bend point - var firstBendPoint = { - x: this.edgeEditing.getSegmentPoints(edge)[0], - y: this.edgeEditing.getSegmentPoints(edge)[1], - height: 0, - width: 0 - }; - var initialClipPoint = this.findClippingPoints(sourceRectangle, firstBendPoint); //Create a copy array of edgeEditing.getSegmentPoints(edge) which contain all the bending points - // including source and target clipping point. The first elements of the array are source's x and y positions - // and the last ones are target's x and y positions + __decorate([external_mobx_["action"]], FileOperationsManager.prototype, "setPathwayInfo", null); - var points = [initialClipPoint.sourceClipPoints.x, initialClipPoint.sourceClipPoints.y]; - - for (var i = 0; i < numberOfBendPoints * 2; i++) { - points.push(this.edgeEditing.getSegmentPoints(edge)[i]); - } - - points.push(clipPoints.targetClipPoints.x); - points.push(clipPoints.targetClipPoints.y); + return FileOperationsManager; +}(); - for (var i = 0; i < points.length - 2; i += 2) { - var lineSVG = document.createElementNS(this.SVGNameSpace, 'line'); - lineSVG.setAttribute('x1', points[i]); - lineSVG.setAttribute('y1', points[i + 1]); - lineSVG.setAttribute('x2', points[i + 2]); - lineSVG.setAttribute('y2', points[i + 3]); - lineSVG.setAttribute('stroke-width', this.EDGE_WIDTH + ''); - lineSVG.setAttribute('stroke', 'black'); //Draw dashed if induces or represses interaction +/* harmony default export */ var managers_FileOperationsManager = (FileOperationsManager_FileOperationsManager); +// EXTERNAL MODULE: external "lodash" +var external_lodash_ = __webpack_require__(7); +var external_lodash_default = /*#__PURE__*/__webpack_require__.n(external_lodash_); - if (edgeType == 'INDUCES' || edgeType == 'REPRESSES') { - lineSVG.setAttribute('stroke-dasharray', this.DASH_PARAMETERS); - } +// CONCATENATED MODULE: ./src/managers/GridOptionsManager.tsx - this.svg.appendChild(lineSVG); - } - } else { - var lineSVG = document.createElementNS(this.SVGNameSpace, 'line'); - lineSVG.setAttribute('x1', clipPoints.sourceClipPoints.x); - lineSVG.setAttribute('y1', clipPoints.sourceClipPoints.y); - lineSVG.setAttribute('x2', targetX); - lineSVG.setAttribute('y2', targetY); - lineSVG.setAttribute('stroke-width', this.EDGE_WIDTH + ''); - lineSVG.setAttribute('stroke', 'black'); //Draw dashed if induces or represses interaction - if (edgeType == 'INDUCES' || edgeType == 'REPRESSES') { - lineSVG.setAttribute('stroke-dasharray', this.DASH_PARAMETERS); - } +var GridOptionsManager_GridOptionsManager = +/** @class */ +function () { + function GridOptionsManager(cy) { + Object.defineProperty(this, "currentProperties", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "cy", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + this.cy = cy; + this.currentProperties = {}; + this.changeParameters(GridOptionsManager.defaultGridGuideOptions); + } - this.svg.appendChild(lineSVG); - } + Object.defineProperty(GridOptionsManager.prototype, "changeParameters", { + enumerable: false, + configurable: true, + writable: true, + value: function (params) { + this.currentProperties = external_lodash_default.a.clone(params); + this.refreshGridOptionsExtension(); } }); - /** - * - * **/ - - Object.defineProperty(SVGExporter.prototype, "findClippingPoints", { + Object.defineProperty(GridOptionsManager.prototype, "getCurrentOptions", { enumerable: false, configurable: true, writable: true, - value: function (sourceRectangle, targetRectangle) { - var sourceAABB = { - xMin: sourceRectangle.x - sourceRectangle.width / 2, - xMax: sourceRectangle.x + sourceRectangle.width / 2, - yMin: sourceRectangle.y - sourceRectangle.height / 2, - yMax: sourceRectangle.y + sourceRectangle.height / 2 - }; - var targetAABB = { - xMin: targetRectangle.x - targetRectangle.width / 2, - xMax: targetRectangle.x + targetRectangle.width / 2, - yMin: targetRectangle.y - targetRectangle.height / 2, - yMax: targetRectangle.y + targetRectangle.height / 2 - }; - var line1 = { - x1: sourceRectangle.x, - y1: sourceRectangle.y, - x2: targetRectangle.x, - y2: targetRectangle.y - }; - var line2 = { - x1: targetRectangle.x, - y1: targetRectangle.y, - x2: sourceRectangle.x, - y2: sourceRectangle.y - }; - var returnObj = { - sourceClipPoints: this.clipLine(line1, sourceAABB), - targetClipPoints: this.clipLine(line2, targetAABB) - }; - return returnObj; + value: function () { + return this.currentProperties; } }); - Object.defineProperty(SVGExporter.prototype, "createRect", { + Object.defineProperty(GridOptionsManager.prototype, "getDefaultOptions", { enumerable: false, configurable: true, writable: true, - value: function (node) { - var nodeRectangle = document.createElementNS(this.SVGNameSpace, 'rect'); - var nodePosition = node.position(); - - if (node.isParent()) { - nodeRectangle.setAttribute('x', nodePosition.x - node.width() / 2 - this.COMPOUND_MARGIN / 2 + ''); - nodeRectangle.setAttribute('y', nodePosition.y - node.height() / 2 - this.COMPOUND_MARGIN / 2 + ''); - nodeRectangle.setAttribute('width', node.width() + this.COMPOUND_MARGIN); - nodeRectangle.setAttribute('height', node.height() + this.COMPOUND_MARGIN); - } else { - nodeRectangle.setAttribute('x', nodePosition.x - node.width() / 2 + ''); - nodeRectangle.setAttribute('y', nodePosition.y - node.height() / 2 + ''); - nodeRectangle.setAttribute('width', node.width()); - nodeRectangle.setAttribute('height', node.height()); - } - - nodeRectangle = this.createStyleForNodes(node, nodeRectangle); - return nodeRectangle; + value: function () { + return GridOptionsManager.defaultGridGuideOptions; } }); - Object.defineProperty(SVGExporter.prototype, "createText", { + Object.defineProperty(GridOptionsManager.prototype, "setSnapToGuidelines", { enumerable: false, configurable: true, writable: true, - value: function (node, genomicDataOffset) { - var verticalTextOffset = 5; - var nodePosition = node.position(); - var svgText = document.createElementNS(this.SVGNameSpace, 'text'); - - if (node.isParent()) { - verticalTextOffset = 20; - svgText.setAttribute('x', nodePosition.x); - svgText.setAttribute('y', nodePosition.y + node.height() / 2 + verticalTextOffset); - } else { - svgText.setAttribute('x', nodePosition.x); - svgText.setAttribute('y', nodePosition.y + verticalTextOffset + genomicDataOffset); - } - - svgText.setAttribute('font-family', 'Arial'); - svgText.setAttribute('text-anchor', 'middle'); - svgText.setAttribute('font-size', this.NODE_FONT_SIZE + ''); - svgText.innerHTML = node.data().name; - return svgText; + value: function (state) { + this.currentProperties.geometricGuideline = state; + this.currentProperties.snapToAlignmentLocationDuringDrag = state; + this.currentProperties.distributionGuidelines = state; + this.refreshGridOptionsExtension(); //this.appManager.gridOptionsView.changeParameters(); } }); - Object.defineProperty(SVGExporter.prototype, "createStyleForNodes", { + Object.defineProperty(GridOptionsManager.prototype, "setShowGrid", { enumerable: false, configurable: true, writable: true, - value: function (node, nodeRectangle) { - var nodeType = node.data().type; - var strokeWidth = node.css('border-width') || this.NODE_STROKE_WIDTH; - var strokeColor = this.NODE_STROKE_COLOR; - var fillColor = this.NODE_FILL_COLOR; - var opacity = this.NODE_OPACITY; - var strokeOpacity = 1; - - if (nodeType == 'GENE' || nodeType == 'COMPARTMENT') { - nodeRectangle.setAttribute('rx', this.ROUNDING_FACTOR); - nodeRectangle.setAttribute('ry', this.ROUNDING_FACTOR); - if (nodeType == 'COMPARTMENT') strokeWidth = this.COMPARTMENT_STROKE_WIDTH; - } - - if (nodeType == 'PROCESS') { - opacity = 0; - strokeOpacity = 0; - } - - if (nodeType == 'FAMILY') { - fillColor = this.FAMILY_FILL_COLOR; - strokeColor = this.FAMILY_STROKE_COLOR; - } - - var styleString = 'stroke-width:' + strokeWidth + ';' + 'stroke:' + strokeColor + ';' + 'fill-opacity:' + opacity + ';' + 'fill:' + fillColor + ';' + 'stroke-opacity:' + strokeOpacity + ';'; - nodeRectangle.setAttribute('style', styleString); - return nodeRectangle; + value: function (state) { + this.currentProperties.drawGrid = state; + this.currentProperties.snapToGridDuringDrag = state; + this.refreshGridOptionsExtension(); //window.appManager.gridOptionsView.changeParameters(); } }); - /** - * Cohen Sutherland Line Clipping algorithm implementation - * **/ - - Object.defineProperty(SVGExporter.prototype, "clipLine", { + Object.defineProperty(GridOptionsManager.prototype, "refreshGridOptionsExtension", { enumerable: false, configurable: true, writable: true, - value: function (line, rectangle) { - //Clipping regions encoded with different integers ! - var INSIDE = 0; - var LEFT = 1; - var RIGHT = 2; - var BOTTOM = 4; - var TOP = 8; - /* - * Get outcode of given point compared to the rectangle - * */ - - function getOutCode(point, rectangle) { - var outcode = INSIDE; - if (point.x < rectangle.xMin) outcode = outcode | LEFT;else if (point.x > rectangle.xMax) outcode = outcode | RIGHT; - if (point.y < rectangle.yMin) outcode = outcode | TOP;else if (point.y > rectangle.yMax) outcode = outcode | BOTTOM; - return outcode; - } - - var outcode0 = getOutCode({ - x: line.x1, - y: line.y1 - }, rectangle); - var outcode1 = getOutCode({ - x: line.x2, - y: line.y2 - }, rectangle); - var slope = (line.y2 - line.y1) / (line.x2 - line.x1); - var returnCoords = { - x: line.x1, - y: line.y1, - slope: slope - }; //Main clipping loop - - var accept = false; - - while (true) { - // Bitwise OR is 0. Trivially accept and get out of loop - if (!(outcode0 | outcode1)) { - accept = true; - break; - } // Bitwise AND is not 0. Trivially reject and get out of loop - else if (outcode0 & outcode1) { - break; - } else { - var outCode = outcode0 ? outcode0 : outcode1; - - if (outCode & TOP) { - returnCoords.x = line.x1 + (rectangle.yMin - line.y1) / slope; - returnCoords.y = rectangle.yMin; - } else if (outCode & BOTTOM) { - returnCoords.x = line.x1 + (rectangle.yMax - line.y1) / slope; - returnCoords.y = rectangle.yMax; - } else if (outCode & RIGHT) { - returnCoords.x = rectangle.xMax; - returnCoords.y = line.y1 + slope * (rectangle.xMax - line.x1); - } else if (outCode & LEFT) { - returnCoords.x = rectangle.xMin; - returnCoords.y = line.y1 + slope * (rectangle.xMin - line.x1); - } // Now we move outside point to intersection point to clip - // and get ready for next pass. - - - if (outCode == outcode0) { - outcode0 = getOutCode({ - x: returnCoords.x, - y: returnCoords.y - }, rectangle); - } else { - outcode1 = getOutCode({ - x: returnCoords.x, - y: returnCoords.y - }, rectangle); - } - } - } - - return returnCoords; - } - }); - /** - * Utility vector functions - * */ - - Object.defineProperty(SVGExporter.prototype, "dotProduct", { - enumerable: false, - configurable: true, - writable: true, - value: function (v1, v2) { - var newX = v1.x * v2.x; - var newY = v1.y * v2.y; - return { - x: newX, - y: newY - }; - } - }); - Object.defineProperty(SVGExporter.prototype, "unitVector", { - enumerable: false, - configurable: true, - writable: true, - value: function (v) { - var inverseLength = 1 / Math.sqrt(v.x * v.x + v.y * v.y); - return { - x: v.x * inverseLength, - y: v.y * inverseLength - }; - } - }); - Object.defineProperty(SVGExporter.prototype, "rotateVector", { - enumerable: false, - configurable: true, - writable: true, - value: function (v, radians) { - var newX = v.x * Math.cos(radians) - v.y * Math.sin(radians); - var newY = v.x * Math.sin(radians) + v.y * Math.cos(radians); - return { - x: newX, - y: newY - }; + value: function () { + this.cy.gridGuide(this.currentProperties); } }); - Object.defineProperty(SVGExporter.prototype, "scale", { - enumerable: false, + Object.defineProperty(GridOptionsManager, "defaultGridGuideOptions", { + enumerable: true, configurable: true, writable: true, - value: function (v, scalar) { - var newX = v.x * scalar; - var newY = v.y * scalar; - return { - x: newX, - y: newY - }; + value: { + // On/Off Modules + + /* From the following four snap options, at most one should be true at a given time */ + snapToGridOnRelease: false, + snapToGridDuringDrag: false, + snapToAlignmentLocationOnRelease: false, + snapToAlignmentLocationDuringDrag: false, + distributionGuidelines: false, + geometricGuideline: false, + initPosAlignment: false, + centerToEdgeAlignment: false, + resize: false, + parentPadding: false, + drawGrid: false, + // General + gridSpacing: 20, + // Draw Grid + zoomDash: true, + panGrid: true, + gridStackOrder: -1, + gridColor: '#dedede', + lineWidth: 1.0, + // Guidelines + guidelinesStackOrder: 4, + guidelinesTolerance: 5.00, + guidelinesStyle: { + strokeStyle: "#4286f4", + geometricGuidelineRange: 750, + range: 500, + minDistRange: 10, + distGuidelineOffset: 10, + horizontalDistColor: "#4286f4", + verticalDistColor: "#4286f4", + initPosAlignmentColor: "#34495E", + lineDash: [6, 8], + horizontalDistLine: [0, 0], + verticalDistLine: [0, 0], + initPosAlignmentLine: [0, 0] + }, + // Parent Padding + parentSpacing: -1 // -1 to set paddings of parents to gridSpacing + } }); - return SVGExporter; + return GridOptionsManager; }(); -/* harmony default export */ var utils_SVGExporter = (SVGExporter_SVGExporter); -// EXTERNAL MODULE: external "oncoprintjs" -var external_oncoprintjs_ = __webpack_require__(11); - -// CONCATENATED MODULE: ./src/managers/GenomicDataOverlayManager.ts - - - -var GenomicDataOverlayManager_GenomicDataOverlayManager = +/* harmony default export */ var managers_GridOptionsManager = (GridOptionsManager_GridOptionsManager); +// CONCATENATED MODULE: ./src/managers/ViewOperationsManager.tsx +var ViewOperationsManager = /** @class */ function () { - function GenomicDataOverlayManager(cy) { - Object.defineProperty(this, "genomicDataMap", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(this, "visibleGenomicDataMapByType", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(this, "groupedGenomicDataCount", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(this, "groupedGenomicDataMap", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(this, "patientData", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(this, "DEFAULT_VISIBLE_GENOMIC_DATA_COUNT", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(this, "MAX_VISIBLE_GENOMIC_DATA_COUNT", { + function ViewOperationsManager(editor, cy) { + Object.defineProperty(this, "movedNodes", { enumerable: true, configurable: true, writable: true, value: void 0 }); - Object.defineProperty(this, "observers", { + Object.defineProperty(this, "editor", { enumerable: true, configurable: true, writable: true, @@ -6944,5700 +6548,5232 @@ function () { writable: true, value: void 0 }); - Object.defineProperty(this, "clearAllGenomicData", { - enumerable: true, - configurable: true, - writable: true, - value: function () { - this.genomicDataMap = {}; - this.visibleGenomicDataMapByType = {}; - this.groupedGenomicDataMap = {}; - this.groupedGenomicDataCount = 0; - } - }); - Object.defineProperty(this, "prepareGenomicDataShareDB", { - enumerable: true, - configurable: true, - writable: true, - value: function (genomicData) { - var genomicDataMap = {}; - var cancerTypes = []; - var visibleGenomicDataMapByType = {}; // By lines - - var lines = genomicData.split('\n'); // First line is meta data ! + this.cy = cy; + this.editor = editor; + this.movedNodes = []; + } //TODO use align function from cytoscape.js-grid-guide extension - var metaLineColumns = lines[0].split('\t'); // Parse cancer types - for (var i = 1; i < metaLineColumns.length; i++) { - cancerTypes.push(metaLineColumns[i]); // Update initially visible genomic data boxes ! - - if (i - 1 < this.DEFAULT_VISIBLE_GENOMIC_DATA_COUNT) { - visibleGenomicDataMapByType[cancerTypes[i - 1]] = true; - } else { - visibleGenomicDataMapByType[cancerTypes[i - 1]] = false; - } - } // parse genomic data + Object.defineProperty(ViewOperationsManager.prototype, "handleNodeAlignment", { + enumerable: false, + configurable: true, + writable: true, + value: function (param) { + var tmpNodes = this.editor.selectedNodeStack; + var nodes = this.cy.collection(); + var nodeMap = {}; + this.movedNodes = []; + for (var key in tmpNodes) { + nodes = nodes.add(tmpNodes[key]); + } - for (var i = 1; i < lines.length; i++) { - // EOF check - if (lines[i].length === 0) { - break; - } // Split each line by tab and parse genomic data content + nodes.forEach(function (node) { + if (node.isParent()) { + nodeMap[node.id()] = node; + } + }); + if (nodes.length > 0) { + var firstSelected = nodes[0]; + var firstBbox = firstSelected.boundingBox(); //OuterHeight variable added due to miscalculation of boundingBox function in pathwaymapper - var lineContent = lines[i].split('\t'); - var geneSymbol = lineContent[0]; // If current gene entry is not in genomic data map create new hashmap entry + var firstOuterHeight = firstSelected.outerHeight(); + var self = this; + nodes.forEach(function (node, index) { + if (index == 0) { + return; + } //If parent of selected node is in selection do nothing ! - if (!(geneSymbol in genomicDataMap)) { - genomicDataMap[geneSymbol] = {}; - } // Add each entry of genomic data + if (nodeMap[node.parent().id()] == null) { + var newPosition = self.calculateNewPosition(param, node, firstBbox, firstOuterHeight); //Recursively traverse leaf nodes - for (var j = 1; j < lineContent.length; j++) { - genomicDataMap[geneSymbol][cancerTypes[j - 1]] = lineContent[j]; + self.changePosition(node, 0, 0, newPosition); } - } - - var returnObj = { - genomicDataMap: genomicDataMap, - visibilityMap: visibleGenomicDataMapByType - }; - return returnObj; - } - }); - Object.defineProperty(this, "updateGenomicDataVisibility", { - enumerable: true, - configurable: true, - writable: true, - value: function (_key, isVisible) { - if (_key in this.visibleGenomicDataMapByType) { - this.visibleGenomicDataMapByType[_key] = isVisible; - } - } - }); - Object.defineProperty(this, "hideGenomicData", { - enumerable: true, - configurable: true, - writable: true, - value: function () { - this.cy.style().selector('node[type="GENE"]').style('text-margin-y', 0).style('width', function (ele) { - return 150; - }).style('background-image', function (ele) { - var dataURI = 'data:image/svg+xml;utf8,'; - return dataURI; - }).update(); + }); + this.editor.handleChangePositionByAlignment(self.movedNodes); } - }); - this.cy = cy; - this.genomicDataMap = {}; - this.patientData = {}; - this.visibleGenomicDataMapByType = {}; - this.groupedGenomicDataMap = {}; - this.groupedGenomicDataCount = 0; - this.DEFAULT_VISIBLE_GENOMIC_DATA_COUNT = 3; - this.MAX_VISIBLE_GENOMIC_DATA_COUNT = 6; // Observer-observable pattern related stuff - - this.observers = []; - } - - Object.defineProperty(GenomicDataOverlayManager.prototype, "getEmptyGroupID", { - enumerable: false, - configurable: true, - writable: true, - value: function () { - var oldCount = this.groupedGenomicDataCount; - this.groupedGenomicDataCount++; - return oldCount; - } - }); - Object.defineProperty(GenomicDataOverlayManager.prototype, "addGenomicDataLocally", { - enumerable: false, - configurable: true, - writable: true, - value: function (genomicData, groupID) { - this.parseGenomicData(genomicData, groupID); - this.showGenomicData(); - this.notifyObservers(); } }); - Object.defineProperty(GenomicDataOverlayManager.prototype, "preparePortalGenomicDataShareDB", { + /* + Determine new position according to the alignment + node that node.position works on center positions thats why all calculations + are performed accordingly + */ + + Object.defineProperty(ViewOperationsManager.prototype, "calculateNewPosition", { enumerable: false, configurable: true, writable: true, - value: function (genomicData) { - var geneMap = {}; - var visMap = {}; + value: function (param, node, referenceBbox, referenceOuterHeight) { + var currentPos = node.position(); + var currentBbox = node.boundingBox(); + var newPosition; //This parameter is used to move the compounds less upwards when they contain label - for (var cancerKey in genomicData) { - for (var geneSymbol in genomicData[cancerKey]) { - geneMap[geneSymbol] = {}; - geneMap[geneSymbol][cancerKey] = genomicData[cancerKey][geneSymbol]; - } + var moveParam = node.isParent() ? node.outerHeight() - (currentBbox.h - node.outerHeight()) / 2 - (node.outerHeight() - node.height()) / 2 : node.height(); //This param is used only when the node is parent, for simple nodes is 0 - visMap[cancerKey] = true; - } + var labelHeight = node.isParent() ? currentBbox.h - node.outerHeight() : 0; - return { - genomicDataMap: geneMap, - visibilityMap: visMap - }; - } - }); - Object.defineProperty(GenomicDataOverlayManager.prototype, "addGenomicData", { - enumerable: false, - configurable: true, - writable: true, - value: function (data) { - this.genomicDataMap = data; - } - }); - Object.defineProperty(GenomicDataOverlayManager.prototype, "removeGenomicVisData", { - enumerable: false, - configurable: true, - writable: true, - value: function () { - this.visibleGenomicDataMapByType = {}; - } - }); - Object.defineProperty(GenomicDataOverlayManager.prototype, "addGenomicDataWithGeneSymbol", { - enumerable: false, - configurable: true, - writable: true, - value: function (geneSymbol, data) { - this.genomicDataMap[geneSymbol] = data; - } - }); - Object.defineProperty(GenomicDataOverlayManager.prototype, "addGenomicGroupData", { - enumerable: false, - configurable: true, - writable: true, - value: function (groupID, data) { - this.groupedGenomicDataMap[groupID] = data; + if (param === 'vLeft') { + newPosition = { + x: referenceBbox.x1 + currentBbox.w / 2, + y: currentPos.y + }; + } else if (param === 'vCen') { + newPosition = { + x: referenceBbox.x1 + referenceBbox.w / 2, + y: currentPos.y + }; + } else if (param === 'vRight') { + newPosition = { + x: referenceBbox.x2 - currentBbox.w / 2, + y: currentPos.y + }; + } else if (param === 'hTop') { + newPosition = { + x: currentPos.x, + y: referenceBbox.y1 + currentBbox.h / 2 + }; + } //Checks for the case where compounds don't have names (name isn't taken in consideration in that case) + else if (param === 'hMid' && node.isParent() && node.data('name') == "") { + newPosition = { + x: currentPos.x, + y: referenceBbox.y1 + referenceBbox.h / 2 + }; + } else if (param === 'hMid') { + newPosition = { + x: currentPos.x, + y: referenceBbox.y1 + referenceOuterHeight / 2 + labelHeight / 2 + }; + } //Checks for the case where compounds don't have names (name isn't taken in consideration in that case) + else if (param === 'hBot' && node.isParent() && node.data('name') == "") { + newPosition = { + x: currentPos.x, + y: referenceBbox.y2 - currentBbox.h / 2 + }; + } else if (param === 'hBot') { + newPosition = { + x: currentPos.x, + y: referenceBbox.y1 + referenceOuterHeight - moveParam / 2 + }; + } else { + console.log('Error: wrong alignment name ' + param); + return; + } + + return newPosition; } - }); - Object.defineProperty(GenomicDataOverlayManager.prototype, "addPortalGenomicData", { + }); //Recursively move leaf nodes + + Object.defineProperty(ViewOperationsManager.prototype, "changePosition", { enumerable: false, configurable: true, writable: true, - value: function (data, groupID) { - for (var _i = 0, _a = Object.keys(data); _i < _a.length; _i++) { - var cancerStudy = _a[_i]; - this.visibleGenomicDataMapByType[cancerStudy] = true; // Group current cancer study according to the groupID - - if (this.groupedGenomicDataMap[groupID] === undefined) { - this.groupedGenomicDataMap[groupID] = []; - } - - this.groupedGenomicDataMap[groupID].push(cancerStudy); - var cancerData = data[cancerStudy]; + value: function (node, dx, dy, newPos) { + if (node.isParent()) { + var childNodes = node.children(); + var parentBbox = node.boundingBox(); + var self = this; + childNodes.forEach(function (childNode, index) { + var childBbox = childNode.boundingBox(); - for (var _b = 0, _c = Object.keys(cancerData); _b < _c.length; _b++) { - var geneSymbol = _c[_b]; - if (this.genomicDataMap[geneSymbol] === undefined) this.genomicDataMap[geneSymbol] = {}; - this.genomicDataMap[geneSymbol][cancerStudy] = data[cancerStudy][geneSymbol].toFixed ? data[cancerStudy][geneSymbol].toFixed(2) : data[cancerStudy][geneSymbol]; - } - } //This parameter is used as flag for PatientView PathwayMapper Functions + var _dx = -(parentBbox.x1 - childBbox.x1) - parentBbox.w / 2 + childBbox.w / 2; + var _dy = -(parentBbox.y1 - childBbox.y1) - parentBbox.h / 2 + childBbox.h / 2; //If further compound node is found, set position accordingly - if (data['PatientView'] == 1) { - this.patientData = data; - this.showPatientData(); - } else { - this.showGenomicData(); - } - this.notifyObservers(); - } - }); - Object.defineProperty(GenomicDataOverlayManager.prototype, "removeGenomicData", { - enumerable: false, - configurable: true, - writable: true, - value: function () { - this.genomicDataMap = {}; - } - }); - Object.defineProperty(GenomicDataOverlayManager.prototype, "removeGenomicDataWithGeneSymbol", { - enumerable: false, - configurable: true, - writable: true, - value: function (geneSymbol) { - this.genomicDataMap[geneSymbol] = {}; + if (childNode.isParent()) { + self.changePosition(childNode, 0, 0, { + x: newPos.x + _dx, + y: newPos.y + _dy + }); + } else { + self.changePosition(childNode, _dx, _dy, newPos); + } + }); + } else { + //Move locally and let editor actions manager know a move happened + //If in collaborative mode editor actions manager will update collaborative model + var position = { + x: newPos.x + dx, + y: newPos.y + dy + }; + this.movedNodes.push({ + node: node, + nextPosition: position, + oldPosition: null + }); + } } }); - Object.defineProperty(GenomicDataOverlayManager.prototype, "addGenomicVisData", { - enumerable: false, - configurable: true, - writable: true, - value: function (key, data) { - this.visibleGenomicDataMapByType[key] = data; + return ViewOperationsManager; +}(); + +/* harmony default export */ var managers_ViewOperationsManager = (ViewOperationsManager); +// CONCATENATED MODULE: ./src/modals/AboutModal.tsx +var __extends = undefined && undefined.__extends || function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || { + __proto__: [] + } instanceof Array && function (d, b) { + d.__proto__ = b; + } || function (d, b) { + for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; + }; + + return extendStatics(d, b); + }; + + return function (d, b) { + extendStatics(d, b); + + function __() { + this.constructor = d; } - }); - Object.defineProperty(GenomicDataOverlayManager.prototype, "countVisibleGenomicDataByType", { + + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +}(); + + + + + +var AboutModal_AboutModal = +/** @class */ +function (_super) { + __extends(AboutModal, _super); + + function AboutModal(props) { + return _super.call(this, props) || this; + } + + Object.defineProperty(AboutModal.prototype, "render", { enumerable: false, configurable: true, writable: true, value: function () { - // Count the genomic data that will be displayed on nodes' body - var genomicDataBoxCount = 0; + var _this = this; - for (var cancerType in this.visibleGenomicDataMapByType) { - if (this.visibleGenomicDataMapByType[cancerType]) { - genomicDataBoxCount++; + return external_react_default.a.createElement(external_react_bootstrap_["Modal"], { + show: this.props.isModalShown, + onHide: function () { + _this.props.handleClose(EModalType.ABOUT); } - } - - return genomicDataBoxCount; + }, external_react_default.a.createElement(external_react_bootstrap_["Modal"].Header, { + closeButton: true + }, external_react_default.a.createElement(external_react_bootstrap_["Modal"].Title, null, "About")), external_react_default.a.createElement(external_react_bootstrap_["Modal"].Body, null, external_react_default.a.createElement("h3", { + id: "about-model-header" + }, "PathwayMapper 2.0"), external_react_default.a.createElement("div", { + className: "aboutImageContent" + }, external_react_default.a.createElement("img", { + src: __webpack_require__(55), + alt: "", + height: "25px" + })), external_react_default.a.createElement("div", { + className: "aboutImageContent" + }, external_react_default.a.createElement("img", { + src: __webpack_require__(56), + alt: "", + height: "34px" + })), external_react_default.a.createElement("div", { + className: "adressText" + }, external_react_default.a.createElement("p", null, "i-Vis information Visualization Lab"), external_react_default.a.createElement("p", null, "Bilkent University, Ankara, Turkey")), external_react_default.a.createElement("div", { + className: "adressText" + }, external_react_default.a.createElement("p", null, "Memorial Sloan-Kettering Cancer Center"), external_react_default.a.createElement("p", null, "New York, USA"))), external_react_default.a.createElement(external_react_bootstrap_["Modal"].Footer, null, external_react_default.a.createElement("a", { + href: "https://github.com/iVis-at-Bilkent/pathway-mapper" + }, "https://github.com/iVis-at-Bilkent/pathway-mapper"))); } }); - Object.defineProperty(GenomicDataOverlayManager.prototype, "generateSVGForNode", { - enumerable: false, - configurable: true, - writable: true, - value: function (ele) { - var genomicDataBoxCount = this.countVisibleGenomicDataByType(); // Experimental data overlay part ! + return AboutModal; +}(external_react_default.a.Component); - var dataURI = 'data:image/svg+xml;utf8,'; - var svgNameSpace = 'http://www.w3.org/2000/svg'; - var nodeLabel = ele.data('name'); // If there is no genomic data for this node return ! +/* harmony default export */ var modals_AboutModal = (AboutModal_AboutModal); +// EXTERNAL MODULE: external "oncoprintjs" +var external_oncoprintjs_ = __webpack_require__(11); - if (!(nodeLabel in this.genomicDataMap)) { - return dataURI; - } +// EXTERNAL MODULE: ./src/images/toolbar/edit.svg +var edit = __webpack_require__(15); +var edit_default = /*#__PURE__*/__webpack_require__.n(edit); - var eleBBox = ele.boundingBox(); - var reqWidth = this.getRequiredWidthForGenomicData(genomicDataBoxCount); - var overlayRecBoxW = reqWidth - 10; - var overlayRecBoxH = 25; - var svg = document.createElementNS(svgNameSpace, 'svg'); // It seems this should be set according to the node size ! +// EXTERNAL MODULE: ./src/images/toolbar/layout-cose.svg +var layout_cose = __webpack_require__(9); +var layout_cose_default = /*#__PURE__*/__webpack_require__.n(layout_cose); - svg.setAttribute('width', reqWidth); - svg.setAttribute('height', eleBBox.h); // This is important you need to include this to succesfully render in cytoscape.js! +// EXTERNAL MODULE: ./src/images/toolbar/save_png.svg +var save_png = __webpack_require__(12); +var save_png_default = /*#__PURE__*/__webpack_require__.n(save_png); - svg.setAttribute('xmlns', svgNameSpace); // Overlay Data Rect +// EXTERNAL MODULE: ./src/images/toolbar/save_svg.svg +var save_svg = __webpack_require__(13); +var save_svg_default = /*#__PURE__*/__webpack_require__.n(save_svg); - var overLayRectBBox = { - w: overlayRecBoxW, - h: overlayRecBoxH, - x: reqWidth / 2 - overlayRecBoxW / 2, - y: eleBBox.h / 2 + overlayRecBoxH / 2 - 18 - }; - var genomicFrequencyData = this.genomicDataMap[nodeLabel]; - var maxGenomicDataBoxCount = - /*(genomicDataBoxCount > 3) ? 3:*/ - genomicDataBoxCount; - var genomicBoxCounter = 0; +// CONCATENATED MODULE: ./src/modals/CBioHelpModal.tsx +var CBioHelpModal_extends = undefined && undefined.__extends || function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || { + __proto__: [] + } instanceof Array && function (d, b) { + d.__proto__ = b; + } || function (d, b) { + for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; + }; - for (var i in this.groupedGenomicDataMap) { - for (var j in this.groupedGenomicDataMap[i]) { - var cancerType = this.groupedGenomicDataMap[i][j]; + return extendStatics(d, b); + }; - if (!this.visibleGenomicDataMapByType[cancerType]) { - continue; - } + return function (d, b) { + extendStatics(d, b); - if (genomicFrequencyData[cancerType] !== undefined) { - genomicDataRectangleGenerator(overLayRectBBox.x + genomicBoxCounter * overLayRectBBox.w / maxGenomicDataBoxCount, overLayRectBBox.y, overLayRectBBox.w / maxGenomicDataBoxCount, overLayRectBBox.h, genomicFrequencyData[cancerType], svg); - } else { - genomicDataRectangleGenerator(overLayRectBBox.x + genomicBoxCounter * overLayRectBBox.w / maxGenomicDataBoxCount, overLayRectBBox.y, overLayRectBBox.w / maxGenomicDataBoxCount, overLayRectBBox.h, null, svg); - } + function __() { + this.constructor = d; + } - genomicBoxCounter++; - } - } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +}(); - function genomicDataRectangleGenerator(x, y, w, h, percent, parentSVG) { - var colorString = ''; - if (percent) { - var isNegativePercent = percent < 0; - var _percent = Math.abs(percent); // Handle special cases here ! + // @ts-ignore + // @ts-ignore - _percent = _percent > 0 && _percent < 0.5 ? 0.5 : _percent; // _percent = _percent === 1 ? 2 : _percent - // Here we are using non linear regression - // Fitting points of (0,0), (25,140), (50,220), (100, 255) + // @ts-ignore - var percentColor = 255 - (-7.118 + 53.9765 * Math.log(_percent + 0.8)); + // @ts-ignore - if (_percent === 0 || percent == -101) { - colorString = 'rgb(255,255,255)'; - } else if (isNegativePercent) { - colorString = 'rgb(' + Math.round(percentColor) + ',' + Math.round(percentColor) + ',255)'; - percent = percent.substring(1); - } else { - colorString = 'rgb(255,' + Math.round(percentColor) + ',' + Math.round(percentColor) + ')'; - } // Rectangle Part + // @ts-ignore - var overlayRect = document.createElementNS(svgNameSpace, 'rect'); - overlayRect.setAttribute('x', x); - overlayRect.setAttribute('y', y); - overlayRect.setAttribute('width', w); - overlayRect.setAttribute('height', h); - overlayRect.setAttribute('style', 'stroke-width:1;stroke:rgb(0,0,0);opacity:1;fill:' + colorString + ';'); // Text Part +var addSelImage = __webpack_require__(17); // @ts-ignore - var textPercent = percent < 0.5 && percent > 0 ? '<0.5' : Number(percent).toFixed(1); - var text = percent == -101 ? 'N/P' : textPercent + '%'; - var fontSize = 14; - var textLength = text.length; - var xOffset = w / 2 - textLength * 4; - var yOffset = fontSize / 3; - var svgText = document.createElementNS(svgNameSpace, 'text'); - svgText.setAttribute('x', x + xOffset); - svgText.setAttribute('y', y + h / 2 + yOffset); - svgText.setAttribute('font-family', 'Arial'); - svgText.setAttribute('font-size', fontSize + ''); - svgText.innerHTML = text; - parentSVG.appendChild(overlayRect); - parentSVG.appendChild(svgText); - } else { - colorString = 'rgb(210,210,210)'; // Rectangle Part - var overlayRect = document.createElementNS(svgNameSpace, 'rect'); - overlayRect.setAttribute('x', x); - overlayRect.setAttribute('y', y); - overlayRect.setAttribute('width', w); - overlayRect.setAttribute('height', h); - overlayRect.setAttribute('style', 'stroke-width:1;stroke:rgb(0,0,0);opacity:1;fill:' + colorString + ';'); - parentSVG.appendChild(overlayRect); - } - } +var addAllImage = __webpack_require__(18); // https://github.com/cBioPortal/cbioportal-frontend/blob/29a93c5e992ca1affd3d027355015164ae3602bd/src/shared/lib/Colors.ts - return svg; - } - }); // Just an utility function to calculate required width for genes for genomic data ! - Object.defineProperty(GenomicDataOverlayManager.prototype, "getRequiredWidthForGenomicData", { - enumerable: false, - configurable: true, - writable: true, - value: function (genomicDataBoxCount) { - var term = genomicDataBoxCount > 3 ? genomicDataBoxCount - 3 : 0; - return 150 + term * 35; - } - }); - Object.defineProperty(GenomicDataOverlayManager.prototype, "showGenomicData", { - enumerable: false, - configurable: true, - writable: true, - value: function () { - var _this = this; - - var self = this; - var genomicDataBoxCount = this.countVisibleGenomicDataByType(); - - if (genomicDataBoxCount < 1) { - // Hide all genomic data and return - this.hideGenomicData(); - return; - } //console.log('Inside showGenomicData') - //console.log(this.cy) - - - this.cy.style().selector('node[type="GENE"]') // It used to change the width of nodes only locally - .style('width', function (ele) { - return _this.getRequiredWidthForGenomicData(genomicDataBoxCount); - }).style('text-margin-y', function (ele) { - var nodeLabel = ele.data('name'); // If there is no genomic data for this node return ! +var CNA_COLOR_AMP = '#ff0000'; +var CNA_COLOR_HOMDEL = '#0000ff'; +var DEFAULT_GREY = '#bebebe'; +var MUT_COLOR_MISSENSE = '#008000'; +var MUT_COLOR_MISSENSE_PASSENGER = '#53D400'; +var MUT_COLOR_INFRAME = '#993404'; +var MUT_COLOR_INFRAME_PASSENGER = '#a68028'; +var MUT_COLOR_TRUNC = '#000000'; +var MUT_COLOR_TRUNC_PASSENGER = '#708090'; +var MUT_COLOR_FUSION = '#8B00C9'; +var MUT_COLOR_PROMOTER = '#00B7CE'; +var MUT_COLOR_OTHER = '#cf58bc'; +var MUT_COLOR_GERMLINE = '#FFFFFF'; // always used shape - if (!(nodeLabel in self.genomicDataMap)) { - return 0; - } // Else shift label in Y axis +var defaultShape = { + type: 'rectangle', + fill: DEFAULT_GREY, + x: 0, + y: 0, + width: 6, + height: 20, + stroke: 'rgba(0,0,0,0)', + 'stroke-width': 0 +}; +var labels = ['Amplification', 'Deep Deletion', 'Fusion', 'Germline Mutation', 'Missense Mutation (putative driver)', 'Missense Mutation (unknown significance)', 'Other Mutation', 'Promoter Mutation', 'Truncating Mutation (putative driver)', 'Truncating Mutation (unknown significance)', 'Inframe Mutation (putative driver)', 'Inframe Mutation (unknown significance)']; // conditional shapes +var shapeBank = [{ + type: 'rectangle', + fill: CNA_COLOR_AMP, + x: 0, + y: 0, + width: 6, + height: 20 +}, { + type: 'rectangle', + fill: CNA_COLOR_HOMDEL, + x: 0, + y: 0, + width: 6, + height: 20 +}, { + type: 'rectangle', + fill: MUT_COLOR_FUSION, + x: 0, + y: 4, + width: 6, + height: 12 +}, { + type: 'rectangle', + fill: MUT_COLOR_GERMLINE, + x: 0, + y: 8.75, + width: 6, + height: 1.6 +}, { + type: 'rectangle', + fill: MUT_COLOR_MISSENSE, + x: 0, + y: 6.66, + width: 6, + height: 6.66 +}, { + type: 'rectangle', + fill: MUT_COLOR_MISSENSE_PASSENGER, + x: 0, + y: 6.66, + width: 6, + height: 6.66 +}, { + type: 'rectangle', + fill: MUT_COLOR_OTHER, + x: 0, + y: 6.66, + width: 6, + height: 6.66 +}, { + type: 'rectangle', + fill: MUT_COLOR_PROMOTER, + x: 0, + y: 6.66, + width: 6, + height: 6.66 +}, { + type: 'rectangle', + fill: MUT_COLOR_TRUNC, + x: 0, + y: 6.66, + width: 6, + height: 6.66 +}, { + type: 'rectangle', + fill: MUT_COLOR_TRUNC_PASSENGER, + x: 0, + y: 6.66, + width: 6, + height: 6.66 +}, { + type: 'rectangle', + fill: MUT_COLOR_INFRAME, + x: 0, + y: 6.66, + width: 6, + height: 6.66 +}, { + type: 'rectangle', + fill: MUT_COLOR_INFRAME_PASSENGER, + x: 0, + y: 6.66, + width: 6, + height: 6.66 +}]; - return -15; - }).style('background-image', function (ele) { - var x = encodeURIComponent(self.generateSVGForNode(ele).outerHTML); +var CBioHelpModal_CBioHelpModal = +/** @class */ +function (_super) { + CBioHelpModal_extends(CBioHelpModal, _super); - if (x === 'undefined') { - return 'none'; - } + function CBioHelpModal(props) { + return _super.call(this, props) || this; + } - var dataURI = 'data:image/svg+xml;utf8,' + x; - return dataURI; - }).update(); - } - }); - Object.defineProperty(GenomicDataOverlayManager.prototype, "parseGenomicData", { + Object.defineProperty(CBioHelpModal.prototype, "generateOncoprintLegend", { enumerable: false, configurable: true, writable: true, - value: function (genomicData, groupID) { - this.genomicDataMap = this.genomicDataMap || {}; - this.visibleGenomicDataMapByType = this.visibleGenomicDataMapByType || {}; - this.groupedGenomicDataMap = this.groupedGenomicDataMap || {}; - var cancerTypes = []; // By lines - - var lines = genomicData.split('\n'); // First line is meta data ! - - var metaLineColumns = lines[0].split('\t'); // Parse cancer types - - for (var i = 1; i < metaLineColumns.length; i++) { - cancerTypes.push(metaLineColumns[i]); // Update initially visible genomic data boxes ! - - if (i - 1 < this.DEFAULT_VISIBLE_GENOMIC_DATA_COUNT) { - this.visibleGenomicDataMapByType[cancerTypes[i - 1]] = true; - } else { - this.visibleGenomicDataMapByType[cancerTypes[i - 1]] = false; - } + value: function () { + var svgNameSpace = 'http://www.w3.org/2000/svg'; + var svgElement = document.createElementNS(svgNameSpace, 'svg'); + var legendEleWidth = 280; + var cellWidth = 6; + var cellHeight = 23; + var cellVerticalPadding = 15; + var cellMarginRight = cellWidth + 3; + shapeBank.forEach(function (shape, index) { + var offsetX = index % 3 * legendEleWidth; + var textOffsetX = offsetX + cellMarginRight; + var offsetY = Math.floor(index / 3) * (cellHeight + cellVerticalPadding); + var textOffsetY = offsetY + 15; + var g = document.createElementNS(svgNameSpace, 'g'); - if (this.groupedGenomicDataMap[groupID] === undefined) { - this.groupedGenomicDataMap[groupID] = []; + if (!shape["stroke"]) { + shape["stroke"] = 'rgba(0,0,0,0)'; + shape["stroke-width"] = 0; } - this.groupedGenomicDataMap[groupID].push(cancerTypes[i - 1]); - } // parse genomic data - - - for (var i = 1; i < lines.length; i++) { - // EOF check - if (lines[i].length === 0) { - break; - } // Split each line by tab and parse genomic data content - - - var lineContent = lines[i].split('\t'); - var geneSymbol = lineContent[0]; // If current gene entry is not in genomic data map create new map - - if (!(geneSymbol in this.genomicDataMap)) { - this.genomicDataMap[geneSymbol] = {}; - } // Add each entry of genomic data - - - for (var j = 1; j < lineContent.length; j++) { - this.genomicDataMap[geneSymbol][cancerTypes[j - 1]] = lineContent[j]; - } - } - } - }); // Simple observer-observable pattern for views!!!!! + g.appendChild(Object(external_oncoprintjs_["shapeToSvg"])(defaultShape, offsetX, offsetY)); + g.appendChild(Object(external_oncoprintjs_["shapeToSvg"])(shape, offsetX, offsetY)); + var text = document.createElementNS(svgNameSpace, 'text'); + text.setAttributeNS(null, 'x', textOffsetX.toString()); + text.setAttributeNS(null, 'y', textOffsetY.toString()); + text.setAttributeNS(null, 'font-size', '12'); + text.setAttributeNS(null, 'font-family', 'Arial'); + var textNode = document.createTextNode(labels[index]); + text.appendChild(textNode); + g.appendChild(text); + svgElement.appendChild(g); + }); + svgElement.setAttribute('width', '840'); + svgElement.setAttribute('height', '175'); + svgElement.style.paddingTop = '20px'; // This is important you need to include this to succesfully render in cytoscape.js! - Object.defineProperty(GenomicDataOverlayManager.prototype, "registerObserver", { - enumerable: false, - configurable: true, - writable: true, - value: function (observer) { - this.observers.push(observer); + svgElement.setAttribute('xmlns', svgNameSpace); + return svgElement; } }); - Object.defineProperty(GenomicDataOverlayManager.prototype, "notifyObservers", { + Object.defineProperty(CBioHelpModal.prototype, "render", { enumerable: false, configurable: true, writable: true, value: function () { - for (var _i = 0, _a = this.observers; _i < _a.length; _i++) { - var observer = _a[_i]; - observer.notify(); - } - } - }); //This method is needed to calculate the alteration Types for each gene + var _this = this; - Object.defineProperty(GenomicDataOverlayManager.prototype, "getAlterationCountForPatient", { - enumerable: false, - configurable: true, - writable: true, - value: function (geneData) { - var count = 0; - - for (var altType in geneData) { - count++; - } - - return count; + var legendPadding = '45px'; + return external_react_default.a.createElement(external_react_bootstrap_["Modal"], { + bsSize: "lg", + id: "cBioHelpModal", + className: "pathwayMapper", + show: this.props.isModalShown, + onHide: function () { + _this.props.handleClose(EModalType.CHELP); + } + }, external_react_default.a.createElement(external_react_bootstrap_["Modal"].Header, { + closeButton: true + }, external_react_default.a.createElement(external_react_bootstrap_["Modal"].Title, null, "PathwayMapper cBioPortal Edition 2.1")), !this.props.patientView && external_react_default.a.createElement(external_react_bootstrap_["Modal"].Body, null, external_react_default.a.createElement("p", { + className: "leftText" + }, "PathwayMapper shows you your genes of interest with the alteration frequencies of selected genetic profiles of the chosen study overlaid on a TCGA pathway using a white to red color scale (the more frequently altered a gene is, the more red it's shown). All available TCGA pathways are ranked with the aim to choose the pathway that matches your interest the most. By default we display the pathway with highest ranking with the default ranking options but you may look at your genes of interest in the context of other pathways as well by choosing from the pathway table.", external_react_default.a.createElement("br", null), external_react_default.a.createElement("br", null), "Refer to the documentation ", external_react_default.a.createElement("a", { + href: "https://github.com/iVis-at-Bilkent/pathway-mapper", + target: "_blank" + }, "here"), " for the notation used.", external_react_default.a.createElement("br", null), external_react_default.a.createElement("br", null), "To search for a particular pathway of your interest, use the search field on top of the pathway table. To switch to another pathway, click on the button in the associated row of the pathway table. Ranking criteria might be changed by changing the options at the bottom of the table.", external_react_default.a.createElement("br", null), external_react_default.a.createElement("br", null), "The buttons on top of the pathway are:", external_react_default.a.createElement("ul", null, external_react_default.a.createElement("table", { + cellPadding: 5 + }, external_react_default.a.createElement("tr", null, external_react_default.a.createElement("td", null, external_react_default.a.createElement("img", { + height: "22px", + width: "22px", + src: save_png_default.a + })), " ", external_react_default.a.createElement("td", null, "Save as PNG")), external_react_default.a.createElement("tr", null, external_react_default.a.createElement("td", null, external_react_default.a.createElement("img", { + height: "22px", + width: "22px", + src: save_svg_default.a + })), " ", external_react_default.a.createElement("td", null, "Save as SVG")), external_react_default.a.createElement("tr", null, external_react_default.a.createElement("td", null, external_react_default.a.createElement("img", { + height: "22px", + width: "22px", + src: layout_cose_default.a + })), " ", external_react_default.a.createElement("td", null, "Perform layout: Layout is recalculated taking current node positions into account")), external_react_default.a.createElement("tr", null, external_react_default.a.createElement("td", null, external_react_default.a.createElement("img", { + height: "22px", + width: "22px", + src: addSelImage + })), " ", external_react_default.a.createElement("td", null, "Add selected genes to query: You may select additional genes from the pathway by left clicking (Shift + left click to add more genes)")), external_react_default.a.createElement("tr", null, external_react_default.a.createElement("td", null, external_react_default.a.createElement("img", { + height: "22px", + width: "22px", + src: addAllImage + })), " ", external_react_default.a.createElement("td", null, "Add all valid genes to query: All valid gene symbols will be added to the query; others will be ignored")), external_react_default.a.createElement("tr", null, external_react_default.a.createElement("td", null, external_react_default.a.createElement("img", { + height: "22px", + width: "22px", + src: edit_default.a + })), " ", external_react_default.a.createElement("td", null, "Edit pathway: Edit both the topology and the geometry of the current pathway with the full blown PathwayMapper editor")))))), ",", this.props.patientView && external_react_default.a.createElement(external_react_bootstrap_["Modal"].Body, null, external_react_default.a.createElement("p", { + className: "leftText" + }, "PathwayMapper shows you your genes of interest with the mutation types, copy number alterations and fusions of selected genetic profiles of the chosen study overlaid on a TCGA pathway using the OncoPrint color scheme. All available TCGA pathways are ranked with the aim to choose the pathway that matches your interest the most. By default we display the pathway with the highest number of genes of interest matching the ones in a pathway but you may look at your genes of interest in the context of other pathways as well by choosing from the pathway table.", external_react_default.a.createElement("br", null), external_react_default.a.createElement("br", null), "Refer to the documentation ", external_react_default.a.createElement("a", { + href: "https://github.com/iVis-at-Bilkent/pathway-mapper", + target: "_blank" + }, "here"), " for the notation used.", external_react_default.a.createElement("br", null), external_react_default.a.createElement("br", null), "Genetic alteration legend:", external_react_default.a.createElement("br", null), external_react_default.a.createElement("div", { + className: "container", + style: { + paddingLeft: legendPadding, + width: 'fit-content' + }, + dangerouslySetInnerHTML: { + __html: this.generateOncoprintLegend().outerHTML + } + }), external_react_default.a.createElement("p", { + style: { + paddingLeft: legendPadding + } + }, "Putative driver and unknown significance annotations are based on data from OncoKB and CancerHotspots.org."), external_react_default.a.createElement("br", null), "To search for a particular pathway of your interest, use the search field on top of the pathway table. To switch to another pathway, click on the button in the associated row of the pathway table.", external_react_default.a.createElement("br", null), external_react_default.a.createElement("br", null), "The buttons on top of the pathway are:", external_react_default.a.createElement("ul", null, external_react_default.a.createElement("table", { + cellPadding: 5 + }, external_react_default.a.createElement("tr", null, external_react_default.a.createElement("td", null, external_react_default.a.createElement("img", { + height: "22px", + width: "22px", + src: save_png_default.a + })), " ", external_react_default.a.createElement("td", null, "Save as PNG")), external_react_default.a.createElement("tr", null, external_react_default.a.createElement("td", null, external_react_default.a.createElement("img", { + height: "22px", + width: "22px", + src: save_svg_default.a + })), " ", external_react_default.a.createElement("td", null, "Save as SVG")), external_react_default.a.createElement("tr", null, external_react_default.a.createElement("td", null, external_react_default.a.createElement("img", { + height: "22px", + width: "22px", + src: layout_cose_default.a + })), " ", external_react_default.a.createElement("td", null, "Perform layout: Layout is recalculated taking current node positions into account"))))))); } - }); //These methods are created to be used in CbioPortal PatientView they are not used - //in ResultView Page or PathwayMapper Editor - - Object.defineProperty(GenomicDataOverlayManager.prototype, "showPatientData", { - enumerable: false, - configurable: true, - writable: true, - value: function () { - var _this = this; + }); + return CBioHelpModal; +}(external_react_default.a.Component); - var self = this; - var data = this.patientData; // const genomicDataBoxCount = 3 //this.countVisibleGenomicDataByType(); //CHANGE +/* harmony default export */ var modals_CBioHelpModal = (CBioHelpModal_CBioHelpModal); +// CONCATENATED MODULE: ./src/modals/ConfirmationModal.tsx +var ConfirmationModal_extends = undefined && undefined.__extends || function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || { + __proto__: [] + } instanceof Array && function (d, b) { + d.__proto__ = b; + } || function (d, b) { + for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; + }; - var genomicDataBoxCount = data.geneticTrackData ? data.geneticTrackData.length : 3; + return extendStatics(d, b); + }; - if (genomicDataBoxCount < 1) { - // Hide all genomic data and return - this.hideGenomicData(); - return; - } + return function (d, b) { + extendStatics(d, b); - this.cy.style().selector('node[type="GENE"]') // It used to change the width of nodes only locally - .style('width', function (ele) { - return _this.getRequiredWidthForGenomicData(genomicDataBoxCount); - }).style('text-margin-y', function (ele) { - var nodeLabel = ele.data('name'); // If there is no genomic data for this node return ! + function __() { + this.constructor = d; + } - if (!(nodeLabel in data)) { - return 0; - } // Else shift label in Y axis + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +}(); - return -15; - }).style('background-image', function (ele) { - var x = encodeURIComponent( // self.generateSVGForPatientNode(ele, data).outerHTML - self.generateOncoprintForPatientNode(ele).outerHTML); - if (x === 'undefined') { - return 'none'; - } - var dataURI = 'data:image/svg+xml;utf8,' + x; - return dataURI; - }).update(); - this.cy.on('mouseover', 'node[type="GENE"]', function (event) { - var node = event.target || event.cyTarget; - var nodeLabel = node.data('name'); - if (!data[nodeLabel]) { - return; - } +var ConfirmationModal_ConfirmationModal = +/** @class */ +function (_super) { + ConfirmationModal_extends(ConfirmationModal, _super); - node.qtip({ - content: { - text: function () { - return self.generateHTMLContentForNodeTooltip(node, data); - } - }, - style: { - classes: 'qtip-light qtip-rounded' - }, - show: { - event: "showqtipevent" - }, - hide: { - event: 'mouseout' - } - }, event); - node.trigger("showqtipevent"); - }); - } - }); //Every mutation type has a unique color coded. This method is used to retrieve the colors + function ConfirmationModal(props) { + return _super.call(this, props) || this; + } - Object.defineProperty(GenomicDataOverlayManager.prototype, "getOncoprintColors", { + Object.defineProperty(ConfirmationModal.prototype, "render", { enumerable: false, configurable: true, writable: true, - value: function (selectedGene) { - var oncoprintColors = { - Missense_Mutation: 'rgb(0,128,0)', - inframe: '#993404', - truncating: '#000000', - Fusion: 'rgb(139,0,201)', - AMP: 'rgb(255,0,0)', - gain: '#ffb6c1', - heatloss: '#8fd8d8', - homdel: 'rgb(0,0,255)', - DeepDel: 'rgb(0,0,255)', - "5'Flank": 'rgb(207,88,188)', - in_frame_del: 'rgb(166,128,40)' - }; + value: function () { + var _this = this; - if (oncoprintColors[selectedGene] !== undefined) { - return oncoprintColors[selectedGene]; - } else { - //Types are not on the list corresponds to black - return 'rgb(0,0,0)'; - } + return external_react_default.a.createElement(external_react_bootstrap_["Modal"], { + show: this.props.isModalShown, + onHide: function () { + _this.props.handleClose(EModalType.CONFIRMATION); + } + }, external_react_default.a.createElement(external_react_bootstrap_["Modal"].Header, { + closeButton: true + }, external_react_default.a.createElement(external_react_bootstrap_["Modal"].Title, null, "Confirmation")), external_react_default.a.createElement(external_react_bootstrap_["Modal"].Body, null, external_react_default.a.createElement("div", null, "All unsaved changes will be lost. Do you want to continue?")), external_react_default.a.createElement(external_react_bootstrap_["Modal"].Footer, null, external_react_default.a.createElement(external_react_bootstrap_["Button"], { + onClick: function () { + ConfirmationModal.pendingFunction(); + + _this.props.handleClose(EModalType.CONFIRMATION); + } + }, "Yes"), external_react_default.a.createElement(external_react_bootstrap_["Button"], { + onClick: function () { + _this.props.handleClose(EModalType.CONFIRMATION); + } + }, "No"))); } }); - Object.defineProperty(GenomicDataOverlayManager.prototype, "generateSVGForPatientNode", { - enumerable: false, - configurable: true, - writable: true, - value: function (ele, patientData) { - //Here we should use the parameter patientData when calculating the expressions - var genomicDataBoxCount = this.countVisibleGenomicDataByType(); // Experimental data overlay part ! + return ConfirmationModal; +}(external_react_default.a.Component); - var dataURI = 'data:image/svg+xml;utf8,'; - var svgNameSpace = 'http://www.w3.org/2000/svg'; //nodeLabel refers to the nodeLabels in the overlay data +/* harmony default export */ var modals_ConfirmationModal = (ConfirmationModal_ConfirmationModal); +// CONCATENATED MODULE: ./src/modals/GridSettings.tsx +var GridSettings_extends = undefined && undefined.__extends || function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || { + __proto__: [] + } instanceof Array && function (d, b) { + d.__proto__ = b; + } || function (d, b) { + for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; + }; - var nodeLabel = ele.data('name'); // If there is no genomic data for this node return ! + return extendStatics(d, b); + }; - if (!(nodeLabel in patientData)) { - return dataURI; - } //this parameter refers to the count of alteration types for each gene + return function (d, b) { + extendStatics(d, b); + function __() { + this.constructor = d; + } - var alterationBoxCount = this.getAlterationCountForPatient(patientData[nodeLabel]); - var eleBBox = ele.boundingBox(); - var svg = document.createElementNS(svgNameSpace, 'svg'); //this parameter is set to 12 since there are 12 different possiblities for types + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +}(); - var term = alterationBoxCount > 12 ? alterationBoxCount - 12 : 0; - var reqWidth = 150 + term * 35; - var overlayRecBoxW = reqWidth - 10; - var overlayRecBoxH = 25; // It seems this should be set according to the node size ! - - svg.setAttribute('width', reqWidth); - svg.setAttribute('height', eleBBox.h); // This is important you need to include this to succesfully render in cytoscape.js! - - svg.setAttribute('xmlns', svgNameSpace); // Overlay Data Rect - - var overLayRectBBox = { - w: overlayRecBoxW, - h: overlayRecBoxH, - x: reqWidth / 2 - overlayRecBoxW / 2, - y: eleBBox.h / 2 + overlayRecBoxH / 2 - 18 - }; - var genomicBoxCounter = 0; //required width is calculated for each gene since box count is different for each gene - - for (var j in patientData[nodeLabel]) { - var genomicAlterationData = patientData[nodeLabel]; - var alterationType = j; +var GridSettings_decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { + var c = arguments.length, + r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, + d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; - if (!this.visibleGenomicDataMapByType[nodeLabel]) { - continue; - } //get the color string corresponding to the alterationType - var colorString = this.getOncoprintColors(alterationType); - if (genomicAlterationData[alterationType] !== undefined) { - genomicDataRectangleGeneratorPatient(overLayRectBBox.x + genomicBoxCounter * overLayRectBBox.w / alterationBoxCount, overLayRectBBox.y, overLayRectBBox.w / alterationBoxCount, overLayRectBBox.h, 100, svg, alterationType, colorString); - } else { - genomicDataRectangleGeneratorPatient(overLayRectBBox.x + genomicBoxCounter * overLayRectBBox.w / alterationBoxCount, overLayRectBBox.y, overLayRectBBox.w / alterationBoxCount, overLayRectBBox.h, null, svg, '', null); - } - genomicBoxCounter++; - } //This function differs from genomicRectangleGenerator. genomicDataRectangleGeneratorPatient - //has an extra parameter text. In patient view alterationTypes of genes are displayed instead of - //alteration percentage. Hence a text is sent to this method which is alterationType - function genomicDataRectangleGeneratorPatient(x, y, w, h, percent, parentSVG, text, colorString) { - if (percent) { - var isNegativePercent = percent < 0; // Rectangle Part +var EGridType; - var overlayRect = document.createElementNS(svgNameSpace, 'rect'); - overlayRect.setAttribute('x', x); - overlayRect.setAttribute('y', y); - overlayRect.setAttribute('width', w); - overlayRect.setAttribute('height', h); - overlayRect.setAttribute('style', 'stroke-width:1;stroke:rgb(0,0,0);opacity:1;fill:' + colorString + ';'); // Text Part +(function (EGridType) { + EGridType[EGridType["GRID"] = 0] = "GRID"; + EGridType[EGridType["GUIDE"] = 1] = "GUIDE"; + EGridType[EGridType["NONE"] = 2] = "NONE"; +})(EGridType || (EGridType = {})); - var fontSize = 14; - var textLength = 4; - var xOffset = w / 2 - textLength * 4; - var yOffset = fontSize / 3; - var svgText = document.createElementNS(svgNameSpace, 'text'); +var GridSettings_GridSettings = +/** @class */ +function (_super) { + GridSettings_extends(GridSettings, _super); - if (colorString === 'rgb(0,0,0)') { - svgText.setAttribute('fill', 'white'); - } + function GridSettings(props) { + var _this = _super.call(this, props) || this; - svgText.setAttribute('x', x + xOffset); - svgText.setAttribute('y', y + h / 2 + yOffset); - svgText.setAttribute('font-family', 'Arial'); - svgText.setAttribute('font-size', fontSize + ''); //first 4 letters of the alterationTypes are used + Object.defineProperty(_this, "gridSize", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(_this, "guideColor", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(_this, "defaultSettings", { + enumerable: true, + configurable: true, + writable: true, + value: managers_GridOptionsManager.defaultGridGuideOptions + }); + Object.defineProperty(_this, "enabledType", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object(external_mobx_["makeObservable"])(_this); + _this.gridSize = _this.defaultSettings.gridSpacing; + _this.guideColor = _this.defaultSettings.guidelinesStyle.strokeStyle; + return _this; + } - svgText.innerHTML = text.substring(0, 4); - parentSVG.appendChild(overlayRect); - parentSVG.appendChild(svgText); - } else { - //Normally - colorString = 'rgb(210,210,210)'; - } + Object.defineProperty(GridSettings.prototype, "setEnabledType", { + enumerable: false, + configurable: true, + writable: true, + value: function (newType) { + if (newType === this.enabledType) { + this.enabledType = EGridType.NONE; + return; } - return svg; + this.enabledType = newType; } }); - Object.defineProperty(GenomicDataOverlayManager.prototype, "generateOncoprintForPatientNode", { + Object.defineProperty(GridSettings.prototype, "render", { enumerable: false, configurable: true, writable: true, - value: function (ele) { - // const dataURI = 'data:image/svg+xml;utf8,' - // nodeLabel refers to the nodeLabels in the overlay data - var patientData = this.patientData; - var nodeLabel = ele.data('name'); - var genomicData = patientData[nodeLabel]; - var svgNameSpace = 'http://www.w3.org/2000/svg'; - var svgElement = document.createElementNS(svgNameSpace, 'svg'); + value: function () { + var _this = this; - if (!genomicData) { - return { - outerHTML: '' - }; - } + return external_react_default.a.createElement(external_react_bootstrap_["Modal"], { + dialogClassName: "gridModal", + show: this.props.isModalShown, + onShow: function () { + _this.enabledType = _this.props.pathwayActions.enabledType; + }, + onHide: function () { + _this.props.handleClose(EModalType.GRID); + } + }, external_react_default.a.createElement(external_react_bootstrap_["Modal"].Header, { + closeButton: true + }, external_react_default.a.createElement(external_react_bootstrap_["Modal"].Title, null, external_react_default.a.createElement("h4", null, "Grid Settings"))), external_react_default.a.createElement(external_react_bootstrap_["Modal"].Body, null, external_react_default.a.createElement(external_react_bootstrap_["Form"], { + id: "gripOptionsForm", + className: "leftText" + }, external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { + sm: 8 + }, external_react_default.a.createElement(external_react_bootstrap_["ControlLabel"], null, "Enable Grids:")), external_react_default.a.createElement(external_react_bootstrap_["Col"], { + sm: 4 + }, external_react_default.a.createElement(external_react_bootstrap_["Checkbox"], { + checked: this.enabledType === EGridType.GRID, + onChange: function () { + _this.setEnabledType(EGridType.GRID); + } + }))), external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { + sm: 8 + }, external_react_default.a.createElement(external_react_bootstrap_["ControlLabel"], null, "Enable Guidelines")), external_react_default.a.createElement(external_react_bootstrap_["Col"], { + sm: 4 + }, external_react_default.a.createElement(external_react_bootstrap_["Checkbox"], { + checked: this.enabledType === EGridType.GUIDE, + onChange: function () { + _this.setEnabledType(EGridType.GUIDE); + } + }))), external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { + sm: 8 + }, external_react_default.a.createElement(external_react_bootstrap_["ControlLabel"], null, "Grid Size:")), external_react_default.a.createElement(external_react_bootstrap_["Col"], { + sm: 4 + }, external_react_default.a.createElement(external_react_bootstrap_["FormControl"], { + type: "text", + value: this.gridSize, + onChange: function (e) { + _this.gridSize = e.target.value; + } + }))), external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { + sm: 8 + }, external_react_default.a.createElement(external_react_bootstrap_["ControlLabel"], null, "Guideline Color:")), external_react_default.a.createElement(external_react_bootstrap_["Col"], { + sm: 4 + }, external_react_default.a.createElement("input", { + id: "guidelineColor", + type: "color", + className: "form-control", + value: this.guideColor, + onChange: function (e) { + _this.guideColor = e.target.value; + } + }))))), external_react_default.a.createElement(external_react_bootstrap_["Modal"].Footer, null, external_react_default.a.createElement(external_react_bootstrap_["Button"], { + onClick: function () { + _this.props.pathwayActions.enabledType = _this.enabledType; - var ruleset = new external_oncoprintjs_["GeneticAlterationRuleSet"](genomicData.geneticTrackRuleSetParams); - var cellWidth = 6; - var cellPadding = 3; - var cellHeight = 23; - var cellVerticalPadding = 8; - var shapesPerDatum = ruleset.apply(genomicData.geneticTrackData, cellWidth, cellHeight); - shapesPerDatum.forEach(function (shapes, index) { - var offsetX = index * (cellWidth + cellPadding); // width + padding + _this.props.pathwayActions.adjustGridSettings(_this.gridSize, _this.guideColor); - var offsetY = cellVerticalPadding; - var g = document.createElementNS(svgNameSpace, 'g'); - shapes.forEach(function (shape) { - return g.appendChild(Object(external_oncoprintjs_["shapeToSvg"])(shape, offsetX, offsetY)); - }); - svgElement.appendChild(g); - }); // It seems this should be set according to the node size ! + if (_this.props.pathwayActions.enabledType === EGridType.GRID) { + _this.props.pathwayActions.toggleGrid(true); + } else if (_this.props.pathwayActions.enabledType === EGridType.GUIDE) { + _this.props.pathwayActions.toggleGuide(true); + } else { + _this.props.pathwayActions.toggleGrid(false); // This will disable both. - svgElement.setAttribute('width', ((cellWidth + cellPadding) * shapesPerDatum.length).toString()); - svgElement.setAttribute('height', (cellHeight + cellVerticalPadding).toString()); // This is important you need to include this to succesfully render in cytoscape.js! + } - svgElement.setAttribute('xmlns', svgNameSpace); - return svgElement; + _this.props.handleClose(EModalType.GRID); + } + }, "Save"))); } - }); // Mapping of alteration type keys to strings - // See: https://github.com/cBioPortal/cbioportal-frontend/blob/442e108208846255feb1ed5b309218cd44927fb9/src/shared/components/oncoprint/TooltipUtils.ts#L599 + }); - Object.defineProperty(GenomicDataOverlayManager.prototype, "getCNADisplayString", { + GridSettings_decorate([external_mobx_["observable"]], GridSettings.prototype, "gridSize", void 0); + + GridSettings_decorate([external_mobx_["observable"]], GridSettings.prototype, "guideColor", void 0); + + GridSettings_decorate([external_mobx_["observable"]], GridSettings.prototype, "enabledType", void 0); + + GridSettings = GridSettings_decorate([external_mobx_react_["observer"]], GridSettings); + return GridSettings; +}(external_react_default.a.Component); + +/* harmony default export */ var modals_GridSettings = (GridSettings_GridSettings); +// CONCATENATED MODULE: ./src/utils/GraphUtilities.tsx +/** + * Created by istemi on 27.09.2016. + */ +var GraphUtilities = +/** @class */ +function () { + function GraphUtilities() {} + + Object.defineProperty(GraphUtilities.prototype, "createGraphHierarchy", { enumerable: false, configurable: true, writable: true, - value: function (alterationTypeKey) { - var disp_cna = { - '-2': 'HOMODELETED', - '-1': 'HETLOSS', - '1': 'GAIN', - '2': 'AMPLIFIED' - }; - return disp_cna[alterationTypeKey]; - } - }); - Object.defineProperty(GenomicDataOverlayManager.prototype, "generateSvgIconForSample", { - enumerable: false, - configurable: true, - writable: true, - value: function (iconColor, iconText) { - var html = '' + '' + '' + '' + '' + '' + iconText + '' + '' + ''; - return html; - } - }); - Object.defineProperty(GenomicDataOverlayManager.prototype, "generateHTMLContentForNodeTooltip", { - enumerable: false, - configurable: true, - writable: true, - value: function (ele, patientData) { - var _this = this; - - var tooltipMaxHeight = '200px'; - var tooltipMaxWidth = '200px'; - var marginBetweenSamples = '10px'; - var sampleIconColorMap = patientData.sampleColors; - var sampleIndexMap = patientData.sampleIndex; - var nodeLabel = ele.data('name'); - var data = patientData[nodeLabel]; // Outer wrapper for the entire tooltip - - var wrapper = external_jquery_default()('
'); - wrapper.css({ - 'max-width': tooltipMaxWidth, - 'max-height': tooltipMaxHeight, - 'word-wrap': 'break-word', - 'overflow-y': 'auto' - }); - data.geneticTrackData.forEach(function (sample, sampleIndex) { - var sampleId = sample.sample; - var iconColor = sampleIconColorMap[sampleId]; - var iconText = (sampleIndexMap[sampleId] + 1).toString(); - - var sampleIconSvgHTML = _this.generateSvgIconForSample(iconColor, iconText); - - var margin = sampleIndex > 0 ? marginBetweenSamples : '0px'; // Inner wrapper for a single sample - - var sampleWrapper = external_jquery_default()('
'); - sampleWrapper.css({ - 'margin-top': margin - }); - var sampleData = sample.data; - var mutationInfo = []; - var cnaInfo = []; - var fusionInfo = []; - sampleData.forEach(function (data) { - var geneSymbol = data.gene.hugoGeneSymbol; - - if (sample.disp_mut && data.proteinChange && data.mutationType !== 'Fusion') { - var proteinChange = data.proteinChange; - mutationInfo.push({ - gene: geneSymbol, - proteinChange: proteinChange - }); - } - - if (sample.disp_cna && data.alteration) { - var cnaLabelKey = data.alteration; - - var cnaLabel = _this.getCNADisplayString(cnaLabelKey); - - cnaInfo.push({ - gene: geneSymbol, - cnaLabel: cnaLabel - }); - } - - if (sample.disp_fusion && data.proteinChange && data.mutationType === 'Fusion') { - var proteinChange = data.proteinChange; - fusionInfo.push({ - gene: geneSymbol, - proteinChange: proteinChange - }); - } - }); // Prepare HTML for tooltip + value: function (nodes) { + //Some arrays and maps for creating graph hierarchy + var tree = []; + var mappedArr = {}; // First map the nodes of the array to an object -> create a hash table. - var mutationInfoHTML = mutationInfo.length > 0 ? 'Mutation: ' : ''; - var cnaInfoHTML = cnaInfo.length > 0 ? 'CNA: ' : ''; - var fusionInfoHTML = fusionInfo.length > 0 ? 'Fusion: ' : ''; - mutationInfo.forEach(function (mutation, index) { - mutationInfoHTML += "" + mutation.gene + " " + mutation.proteinChange + ""; + for (var i = 0, len = nodes.length; i < len; i++) { + var arrElem = nodes[i]; + mappedArr[arrElem.id()] = arrElem; + mappedArr[arrElem.id()].childNodes = []; + } - if (index !== mutationInfo.length - 1) { - mutationInfoHTML += ", "; - } else { - mutationInfoHTML += "
"; - } - }); - cnaInfo.forEach(function (cna, index) { - cnaInfoHTML += "" + cna.gene + " " + cna.cnaLabel + ""; + for (var id in mappedArr) { + var mappedElem = mappedArr[id]; // If the element is not at the root level, add it to its parent array of children. - if (index !== cnaInfo.length - 1) { - cnaInfoHTML += ", "; - } else { - cnaInfoHTML += "
"; + if (mappedElem.parent().length > 0) { + mappedArr[mappedElem.parent().id()].childNodes.push(mappedElem); + } // If the element is at the root level, add it to first level elements array. + else { + tree.push(mappedElem); } - }); - fusionInfo.forEach(function (fusion, index) { - fusionInfoHTML += "" + fusion.gene + " " + fusion.proteinChange + ""; + } - if (index !== fusionInfo.length - 1) { - fusionInfoHTML += ", "; - } else { - fusionInfoHTML += "
"; - } - }); - var sampleIdHTML = " " + sampleId + "" + "
"; - sampleWrapper.append(external_jquery_default()('
' + sampleIconSvgHTML + sampleIdHTML + mutationInfoHTML + cnaInfoHTML + fusionInfoHTML + +'
')); - wrapper.append(sampleWrapper); - }); - return wrapper; + return tree; } }); - return GenomicDataOverlayManager; -}(); - -/* harmony default export */ var managers_GenomicDataOverlayManager = (GenomicDataOverlayManager_GenomicDataOverlayManager); -// EXTERNAL MODULE: external "react-bootstrap" -var external_react_bootstrap_ = __webpack_require__(1); + ; + /* + * Creates graph hierarchy from given flat list of nodes list, nodes list is assumed to have parent-child + * relationship by a field 'parent' which represents to the id of the parent node This function is specific + * for the needs of TCGA Pathway Curation Tool 04/07/2016 + * + * @param nodes {array}: flat list of nodes of a graph + * @return {array}: Tree representation in array, entries are root level nodes. node.children gives children nodes + * of each node in the returned array. + * a node in corresponding level. + * + * */ -// EXTERNAL MODULE: external "lodash" -var external_lodash_ = __webpack_require__(14); -var external_lodash_default = /*#__PURE__*/__webpack_require__.n(external_lodash_); + Object.defineProperty(GraphUtilities.prototype, "createGraphHierarchyRealTime", { + enumerable: false, + configurable: true, + writable: true, + value: function (nodes) { + //Some arrays and maps for creating graph hierarchy + var tree = []; + var mappedArr = {}; // First map the nodes of the array to an object -> create a hash table. -// CONCATENATED MODULE: ./src/modals/LayoutProperties.tsx -var LayoutProperties_extends = undefined && undefined.__extends || function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || { - __proto__: [] - } instanceof Array && function (d, b) { - d.__proto__ = b; - } || function (d, b) { - for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; - }; + for (var i = 0, len = nodes.length; i < len; i++) { + var arrElem = nodes[i]; + mappedArr[arrElem.data.id] = arrElem; + mappedArr[arrElem.data.id].children = []; + } - return extendStatics(d, b); - }; + for (var id in mappedArr) { + var mappedElem = mappedArr[id]; // If the element is not at the root level, add it to its parent array of children. - return function (d, b) { - extendStatics(d, b); + if (mappedElem.data.parent != -1) { + mappedArr[mappedElem.data.parent].children.push(mappedElem); + } // If the element is at the root level, add it to first level elements array. + else { + tree.push(mappedElem); + } + } - function __() { - this.constructor = d; + return tree; } - - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; + }); + ; + return GraphUtilities; }(); -var LayoutProperties_decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; - - - - - - +/* harmony default export */ var utils_GraphUtilities = (GraphUtilities); +// CONCATENATED MODULE: ./src/utils/SVGExporter.ts -var LayoutProperties_LayoutProperties = -/** @class */ -function (_super) { - LayoutProperties_extends(LayoutProperties, _super); - - function LayoutProperties(props) { - var _this = _super.call(this, props) || this; - - LayoutProperties_1.layoutProperties = external_lodash_default.a.clone(managers_EditorActionsManager.defaultLayoutProperties); - return _this; - } - - LayoutProperties_1 = LayoutProperties; - Object.defineProperty(LayoutProperties.prototype, "updateLayoutProperties", { - enumerable: false, - configurable: true, - writable: true, - value: function (property, val) { - LayoutProperties_1.layoutProperties[property] = val; - } - }); - Object.defineProperty(LayoutProperties.prototype, "render", { - enumerable: false, - configurable: true, - writable: true, - value: function () { - var _this = this; - - return external_react_default.a.createElement(external_react_bootstrap_["Modal"], { - id: "layoutPropertiesDiv", - show: this.props.isModalShown, - onHide: function () { - _this.props.handleClose(EModalType.LAYOUT); - } - }, external_react_default.a.createElement(external_react_bootstrap_["Modal"].Header, { - closeButton: true - }, external_react_default.a.createElement(external_react_bootstrap_["Modal"].Title, null, external_react_default.a.createElement("h3", null, "Layout Properties"))), external_react_default.a.createElement(external_react_bootstrap_["Modal"].Body, { - id: "layoutPropsForm", - className: "leftText" - }, external_react_default.a.createElement(external_react_bootstrap_["Form"], null, external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { - className: "control-label", - sm: 4 - }, "Node Repulsion:"), external_react_default.a.createElement(external_react_bootstrap_["Col"], { - sm: 8 - }, external_react_default.a.createElement(external_react_bootstrap_["FormControl"], { - type: "text", - value: LayoutProperties_1.layoutProperties.nodeRepulsion + "", - onChange: function (e) { - LayoutProperties_1.layoutProperties.nodeRepulsion = Number(e.target.value); - } - }))), external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { - sm: 4 - }, external_react_default.a.createElement(external_react_bootstrap_["ControlLabel"], null, "Ideal Edge Length:")), external_react_default.a.createElement(external_react_bootstrap_["Col"], { - sm: 8 - }, external_react_default.a.createElement(external_react_bootstrap_["FormControl"], { - type: "text", - value: LayoutProperties_1.layoutProperties.idealEdgeLength + "", - onChange: function (e) { - LayoutProperties_1.layoutProperties.idealEdgeLength = Number(e.target.value); - } - }))), external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { - sm: 4 - }, external_react_default.a.createElement(external_react_bootstrap_["ControlLabel"], null, "Edge Elasticity:")), external_react_default.a.createElement(external_react_bootstrap_["Col"], { - sm: 8 - }, external_react_default.a.createElement(external_react_bootstrap_["FormControl"], { - type: "text", - value: LayoutProperties_1.layoutProperties.edgeElasticity + "", - onChange: function (e) { - LayoutProperties_1.layoutProperties.edgeElasticity = e.target.value; - } - }))), external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { - sm: 4 - }, external_react_default.a.createElement(external_react_bootstrap_["ControlLabel"], null, "Nesting Factor:")), external_react_default.a.createElement(external_react_bootstrap_["Col"], { - sm: 8 - }, external_react_default.a.createElement(external_react_bootstrap_["FormControl"], { - type: "text", - value: LayoutProperties_1.layoutProperties.nestingFactor + "", - onChange: function (e) { - LayoutProperties_1.layoutProperties.nestingFactor = e.target.value; - } - }))), external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { - sm: 4 - }, external_react_default.a.createElement(external_react_bootstrap_["ControlLabel"], null, "Gravity:")), external_react_default.a.createElement(external_react_bootstrap_["Col"], { - sm: 8 - }, external_react_default.a.createElement(external_react_bootstrap_["FormControl"], { - type: "text", - value: LayoutProperties_1.layoutProperties.gravity + "", - onChange: function (e) { - LayoutProperties_1.layoutProperties.gravity = e.target.value; - } - }))), external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { - sm: 4 - }, external_react_default.a.createElement(external_react_bootstrap_["ControlLabel"], null, "Gravity Range:")), external_react_default.a.createElement(external_react_bootstrap_["Col"], { - sm: 8 - }, external_react_default.a.createElement(external_react_bootstrap_["FormControl"], { - type: "text", - value: LayoutProperties_1.layoutProperties.gravityRange + "", - onChange: function (e) { - LayoutProperties_1.layoutProperties.gravityRange = e.target.value; - } - }))), external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { - sm: 4 - }, external_react_default.a.createElement(external_react_bootstrap_["ControlLabel"], null, "Compound Gravity:")), external_react_default.a.createElement(external_react_bootstrap_["Col"], { - sm: 8 - }, external_react_default.a.createElement(external_react_bootstrap_["FormControl"], { - type: "text", - value: LayoutProperties_1.layoutProperties.gravityCompound + "", - onChange: function (e) { - LayoutProperties_1.layoutProperties.gravityCompound = e.target.value; - } - }))), external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { - sm: 4 - }, external_react_default.a.createElement(external_react_bootstrap_["ControlLabel"], null, "Compound Gravity Range:")), external_react_default.a.createElement(external_react_bootstrap_["Col"], { - sm: 8 - }, external_react_default.a.createElement(external_react_bootstrap_["FormControl"], { - type: "text", - value: LayoutProperties_1.layoutProperties.gravityRangeCompound + "", - onChange: function (e) { - LayoutProperties_1.layoutProperties.gravityRangeCompound = e.target.value; - } - }))), external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { - sm: 4 - }, external_react_default.a.createElement(external_react_bootstrap_["ControlLabel"], null, "Number of Iterations:")), external_react_default.a.createElement(external_react_bootstrap_["Col"], { - sm: 8 - }, external_react_default.a.createElement(external_react_bootstrap_["FormControl"], { - type: "text", - value: LayoutProperties_1.layoutProperties.numIter + "", - onChange: function (e) { - LayoutProperties_1.layoutProperties.numIter = e.target.value; - } - }))), external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { - sm: 4 - }, external_react_default.a.createElement(external_react_bootstrap_["ControlLabel"], null, "Tiling Vertical Padding:")), external_react_default.a.createElement(external_react_bootstrap_["Col"], { - sm: 8 - }, external_react_default.a.createElement(external_react_bootstrap_["FormControl"], { - type: "text", - value: LayoutProperties_1.layoutProperties.tilingPaddingVertical + "", - onChange: function (e) { - LayoutProperties_1.layoutProperties.tilingPaddingVertical = e.target.value; - } - }))), external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { - sm: 4 - }, external_react_default.a.createElement(external_react_bootstrap_["ControlLabel"], null, "Tiling Horizontal Padding:")), external_react_default.a.createElement(external_react_bootstrap_["Col"], { - sm: 8 - }, external_react_default.a.createElement(external_react_bootstrap_["FormControl"], { - type: "text", - value: LayoutProperties_1.layoutProperties.tilingPaddingHorizontal + "", - onChange: function (e) { - LayoutProperties_1.layoutProperties.tilingPaddingHorizontal = e.target.value; - } - }))), external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { - sm: 4 - }, external_react_default.a.createElement(external_react_bootstrap_["ControlLabel"], null, "Tile Disconnected:")), external_react_default.a.createElement(external_react_bootstrap_["Col"], { - sm: 8 - }, external_react_default.a.createElement(external_react_bootstrap_["Checkbox"], { - className: "layProps", - checked: LayoutProperties_1.layoutProperties.tile, - onChange: function (e) { - LayoutProperties_1.layoutProperties.tile = !LayoutProperties_1.layoutProperties.tile; - } - }))), external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { - className: "control-label", - sm: 4 - }, "Animate:"), external_react_default.a.createElement(external_react_bootstrap_["Col"], { - sm: 8 - }, external_react_default.a.createElement(external_react_bootstrap_["Checkbox"], { - className: "layProps", - checked: LayoutProperties_1.layoutProperties.animate, - onChange: function (e) { - LayoutProperties_1.layoutProperties.animate = !LayoutProperties_1.layoutProperties.animate; - } - }))), external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { - sm: 4 - }, external_react_default.a.createElement(external_react_bootstrap_["ControlLabel"], null, "Incremental:")), external_react_default.a.createElement(external_react_bootstrap_["Col"], { - sm: 8 - }, external_react_default.a.createElement(external_react_bootstrap_["Checkbox"], { - className: "layProps", - checked: !LayoutProperties_1.layoutProperties.randomize, - onChange: function (e) { - LayoutProperties_1.layoutProperties.randomize = !LayoutProperties_1.layoutProperties.randomize; - } - }))), external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { - sm: 4 - }, external_react_default.a.createElement(external_react_bootstrap_["ControlLabel"], null, "Incremental Cooling Factor:")), external_react_default.a.createElement(external_react_bootstrap_["Col"], { - sm: 8 - }, external_react_default.a.createElement(external_react_bootstrap_["FormControl"], { - type: "text", - value: LayoutProperties_1.layoutProperties.initialEnergyOnIncremental + "", - onChange: function (e) { - LayoutProperties_1.layoutProperties.initialEnergyOnIncremental = e.target.value; - } - }))))), external_react_default.a.createElement(external_react_bootstrap_["Modal"].Footer, null, external_react_default.a.createElement(external_react_bootstrap_["Button"], { - onClick: function () { - _this.props.pathwayActions.setLayoutProperties(LayoutProperties_1.layoutProperties); - - _this.props.handleClose(EModalType.LAYOUT); - } - }, "Save"), external_react_default.a.createElement(external_react_bootstrap_["Button"], { - onClick: function () { - LayoutProperties_1.layoutProperties = external_lodash_default.a.clone(managers_EditorActionsManager.defaultLayoutProperties); - - _this.props.pathwayActions.setLayoutProperties(LayoutProperties_1.layoutProperties); - } - }, "Default"))); - } - }); - var LayoutProperties_1; - LayoutProperties = LayoutProperties_1 = LayoutProperties_decorate([external_mobx_react_["observer"]], LayoutProperties); - return LayoutProperties; -}(external_react_default.a.Component); - -/* harmony default export */ var modals_LayoutProperties = (LayoutProperties_LayoutProperties); -// CONCATENATED MODULE: ./src/managers/EditorActionsManager.tsx -var EditorActionsManager_decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; - - - - - - -var _ = __webpack_require__(9); - -var EditorActionsManager_EditorActionsManager = +var SVGExporter_SVGExporter = /** @class */ function () { - function EditorActionsManager(isCollaborative, shareDBManager, cyInst, isCBioPortal, undoRedoManager, portalAccessor, profiles) { - Object.defineProperty(this, "cy", { + function SVGExporter(edgeEditing, editor) { + Object.defineProperty(this, "SVGNameSpace", { enumerable: true, configurable: true, writable: true, - value: void 0 + value: 'http://www.w3.org/2000/svg' }); - Object.defineProperty(this, "genomicDataOverlayManager", { + Object.defineProperty(this, "svg", { enumerable: true, configurable: true, writable: true, - value: void 0 + value: document.createElementNS(this.SVGNameSpace, 'svg') }); - Object.defineProperty(this, "edgeEditing", { + Object.defineProperty(this, "NODE_FILL_COLOR", { enumerable: true, configurable: true, writable: true, - value: void 0 + value: 'rgb(255,255,255)' }); - Object.defineProperty(this, "selectedNodeStack", { + Object.defineProperty(this, "FAMILY_FILL_COLOR", { enumerable: true, configurable: true, writable: true, - value: void 0 + value: 'rgb(255,255,255)' }); - Object.defineProperty(this, "layoutProperties", { + Object.defineProperty(this, "FAMILY_STROKE_COLOR", { enumerable: true, configurable: true, writable: true, - value: void 0 + value: 'rgb(204,204,204)' }); - Object.defineProperty(this, "FIT_CONSTANT", { + Object.defineProperty(this, "NODE_STROKE_COLOR", { enumerable: true, configurable: true, writable: true, - value: void 0 + value: 'rgb(0,0,0)' }); - Object.defineProperty(this, "observers", { + Object.defineProperty(this, "COMPARTMENT_STROKE_WIDTH", { enumerable: true, configurable: true, writable: true, - value: void 0 + value: 2 }); - Object.defineProperty(this, "svgExporter", { + Object.defineProperty(this, "NODE_STROKE_WIDTH", { enumerable: true, configurable: true, writable: true, - value: void 0 + value: 1 }); - Object.defineProperty(this, "undoRedoManager", { + Object.defineProperty(this, "NODE_OPACITY", { enumerable: true, configurable: true, writable: true, - value: void 0 + value: 0.5 }); - Object.defineProperty(this, "isCbioPortal", { + Object.defineProperty(this, "ROUNDING_FACTOR", { enumerable: true, configurable: true, writable: true, - value: void 0 + value: 6 }); - Object.defineProperty(this, "isCollaborative", { + Object.defineProperty(this, "GENOMICDATA_LABEL_Y_OFFSET", { enumerable: true, configurable: true, writable: true, - value: void 0 + value: -15 }); - Object.defineProperty(this, "shareDBManager", { + Object.defineProperty(this, "EDGE_WIDTH", { enumerable: true, configurable: true, writable: true, - value: void 0 + value: 1 }); - Object.defineProperty(this, "portalAccessor", { + Object.defineProperty(this, "T_WIDTH", { enumerable: true, configurable: true, writable: true, - value: void 0 + value: 2 }); - Object.defineProperty(this, "profiles", { + Object.defineProperty(this, "T_HEIGHT", { enumerable: true, configurable: true, writable: true, - value: void 0 + value: 8 }); - Object.defineProperty(this, "modifyPathwayGeneMap", { + Object.defineProperty(this, "T_ARROW_HEAD_OFFSET", { enumerable: true, configurable: true, writable: true, - value: void 0 - }); // Set cy instance and set real time manager reference if collaborative mode - - Object(external_mobx_["makeObservable"])(this); - this.cy = cyInst; - this.isCollaborative = isCollaborative; - this.isCbioPortal = isCBioPortal; - this.profiles = profiles; - var edgeEditingOptions = { - // this function specifies the positions of bend points - bendPositionsFunction: function (ele) { - return ele.data('bendPointPositions'); - }, - // whether to initilize bend points on creation of this extension automatically - initBendPointsAutomatically: true, - // whether the bend editing operations are undoable (requires cytoscape-undo-redo.js) - undoable: true, - // the size of bend shape is obtained by multipling width of edge with this parameter - bendShapeSizeFactor: 6, - // whether to start the plugin in the enabled state - enabled: !this.isCbioPortal, - // title of add bend point menu item (User may need to adjust width of menu items according to length of this option) - addBendMenuItemTitle: "Add Bend Point", - // title of remove bend point menu item (User may need to adjust width of menu items according to length of this option) - removeBendMenuItemTitle: "Remove Bend Point", - handleReconnectEdge: this.reconnectEdge.bind(this) - }; - this.edgeEditing = this.cy.edgeEditing(edgeEditingOptions); - this.portalAccessor = portalAccessor; - - if (this.isCollaborative) { - this.shareDBManager = shareDBManager; - } - - this.FIT_CONSTANT = 50; - this.layoutProperties = _.clone(EditorActionsManager.defaultLayoutProperties); - this.observers = []; - this.genomicDataOverlayManager = new managers_GenomicDataOverlayManager(this.cy); - this.svgExporter = new utils_SVGExporter(this.edgeEditing, this); - this.selectedNodeStack = {}; - this.undoRedoManager = undoRedoManager; - this.undoRedoManager.action("changePositions", this.doChangePosition, this.undoChangePosition); - this.undoRedoManager.action("changeNodeSize", this.doChangeNodeSize, this.undoChangeNodeSize); - this.undoRedoManager.action("changeCompoundSize", this.doChangeCompoundSize, this.undoChangeCompoundSize); - this.undoRedoManager.action("changeName", this.doChangename, this.undoChangeName); - this.undoRedoManager.action("hideNode", this.doHide, this.undoHide); - this.undoRedoManager.action("showAllNodes", this.doShow, this.undoShow); // HighlightOthers is the type of highlight from the menu and by searching, while highlightInvalidGenes is for only invalid genes - - this.undoRedoManager.action("highlightInvalidGenes", this.doHighlightInvalidGenes, this.undoHighlightInvalidGenes); - this.undoRedoManager.action("removeHighlightInvalidGenes", this.undoHighlightInvalidGenes, this.doHighlightInvalidGenes); - this.undoRedoManager.action("highlightOthers", this.doHighlight, this.undoHighlight); - this.undoRedoManager.action("removeOtherHighlight", this.undoHighlight, this.doHighlight); + value: 2 + }); + Object.defineProperty(this, "TRIANGLE_ARROW_HEAD_HEIGHT", { + enumerable: true, + configurable: true, + writable: true, + value: 8 + }); + Object.defineProperty(this, "TRIANGLE_ARROW_HEAD_WIDTH", { + enumerable: true, + configurable: true, + writable: true, + value: 8 + }); + Object.defineProperty(this, "DASH_PARAMETERS", { + enumerable: true, + configurable: true, + writable: true, + value: '5, 3' + }); + Object.defineProperty(this, "COMPOUND_MARGIN", { + enumerable: true, + configurable: true, + writable: true, + value: 8 + }); + Object.defineProperty(this, "NODE_FONT_SIZE", { + enumerable: true, + configurable: true, + writable: true, + value: 14 + }); + Object.defineProperty(this, "edgeEditing", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "editor", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + this.edgeEditing = edgeEditing; + this.editor = editor; } - ; - Object.defineProperty(EditorActionsManager.prototype, "handleChangePositionByAlignment", { + Object.defineProperty(SVGExporter.prototype, "resetSVG", { enumerable: false, configurable: true, writable: true, - value: function (movedNodeArr) { - if (this.isCollaborative) this.shareDBManager.changeElementsPositionByAlignment(movedNodeArr);else this.undoRedoManager.do("changePositions", movedNodeArr); + value: function () { + this.svg = document.createElementNS(this.SVGNameSpace, 'svg'); } }); - ; - /* - * Undo redo for changing positions of nodes via programatically (node.position) - * **/ - - Object.defineProperty(EditorActionsManager.prototype, "doChangePosition", { + Object.defineProperty(SVGExporter.prototype, "exportGraph", { enumerable: false, configurable: true, writable: true, - value: function (movedNodes) { - var newMovedNodes = []; + value: function (nodes, edges) { + //Reset SVG + this.resetSVG(); + this.svg.setAttribute('version', '1.1'); + this.svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg'); //Set viewport of output SVG - for (var i = 0; i < movedNodes.length; i++) { - var currentNodePosition = { - x: movedNodes[i].node.position().x, - y: movedNodes[i].node.position().y - }; - newMovedNodes.push({ - node: movedNodes[i].node, - oldPosition: currentNodePosition, - nextPosition: movedNodes[i].nextPosition - }); - movedNodes[i].node.position(movedNodes[i].nextPosition); + var cyBounds = this.editor.cy.extent(); + this.svg.setAttribute('viewBox', cyBounds.x1 + ' ' + cyBounds.y1 + ' ' + cyBounds.w + ' ' + cyBounds.h); + var that = this; + var nodeMap = {}; + var nodeTree = new utils_GraphUtilities().createGraphHierarchy(nodes); + + var traverseFunction = function (node) { + //Create SVG for current node + nodeMap[node.id()] = node; + var genomicDataSVG = that.editor.getGenomicDataSVG(node).children; + var oncoprintDataSVG = that.editor.getOncoprintDataSVG(node); + that.svg.appendChild(that.createRect(node)); + var labelOffset = genomicDataSVG && genomicDataSVG.length > 0 || oncoprintDataSVG.outerHTML !== '' ? that.GENOMICDATA_LABEL_Y_OFFSET : 0; + that.svg.appendChild(that.createText(node, labelOffset)); //Append Genomic Data SVG here + + if (genomicDataSVG) { + while (genomicDataSVG.length > 0) { + var elemSVG = genomicDataSVG[0]; + var nodePosition = node.position(); + var svgX = elemSVG.getAttribute('x'); + var svgY = elemSVG.getAttribute('y'); + elemSVG.setAttribute('x', nodePosition.x - node.width() / 2 + parseFloat(svgX)); + elemSVG.setAttribute('y', nodePosition.y - node.height() / 2 + parseFloat(svgY)); + that.svg.appendChild(elemSVG); + } + } else if (oncoprintDataSVG.outerHTML !== '') { + var nodePosition = node.position(); + var width = parseInt(oncoprintDataSVG.getAttribute('width')); + var height = parseInt(oncoprintDataSVG.getAttribute('height')); + var verticalPadding = 8; + var y = nodePosition.y + node.height() / 2 - (height + verticalPadding); + oncoprintDataSVG.setAttribute('x', nodePosition.x - width / 2); + oncoprintDataSVG.setAttribute('y', y); + that.svg.appendChild(oncoprintDataSVG); + } //Traverse children + + + if (node.childNodes) { + for (var i in node.childNodes) { + traverseFunction(node.childNodes[i]); + } + } + }; //Traverse node hierarchy + + + for (var i in nodeTree) { + var rootLevelNode = nodeTree[i]; + traverseFunction(rootLevelNode); } - return newMovedNodes; + edges.forEach(function (edge) { + var source = nodeMap[edge.source().id()]; + var target = nodeMap[edge.target().id()]; + that.drawEdge(edge, source, target); + }); + return this.svg.outerHTML; } }); - ; - Object.defineProperty(EditorActionsManager.prototype, "undoChangePosition", { + Object.defineProperty(SVGExporter.prototype, "drawEdge", { enumerable: false, configurable: true, writable: true, - value: function (movedNodes) { - var newMovedNodes = []; + value: function (edge, source, target) { + var edgeType = edge.data().type; + var sourceRectangle = { + x: source.position().x, + y: source.position().y, + width: source.width(), + height: source.height() + }; + var targetRectangle = { + x: target.position().x, + y: target.position().y, + width: target.width(), + height: target.height() + }; //If source or target node is compound node adjust their width and height according to compound margins - for (var i = 0; i < movedNodes.length; i++) { - var currentNodePosition = { - x: movedNodes[i].node.position().x, - y: movedNodes[i].node.position().y - }; - newMovedNodes.push({ - node: movedNodes[i].node, - oldPosition: movedNodes[i].oldPosition, - nextPosition: currentNodePosition - }); - movedNodes[i].node.position(movedNodes[i].oldPosition); + if (source.isParent()) { + sourceRectangle.width += this.COMPOUND_MARGIN; + sourceRectangle.height += this.COMPOUND_MARGIN; } - return newMovedNodes; - } - }); - ; - Object.defineProperty(EditorActionsManager.prototype, "changeNodePositionsByArrows", { - enumerable: false, - configurable: true, - writable: true, - value: function (selectedNodes) { - if (this.isCollaborative) this.shareDBManager.changeNodePositionsShareDB(selectedNodes); //resize-node extension already deals for the movement in local mode - } - }); - ; - /* - * Undo redo for changing size of nodes - * **/ + if (target.isParent()) { + targetRectangle.width += this.COMPOUND_MARGIN; + targetRectangle.height += this.COMPOUND_MARGIN; + } - Object.defineProperty(EditorActionsManager.prototype, "doChangeNodeSize", { - enumerable: false, - configurable: true, - writable: true, - value: function (args) { - args.ele.data('w', args.newWidth); - args.ele.data('h', args.newHeight); - args.ele.style('width', args.newWidth); - args.ele.style('height', args.newHeight); - return args; - } - }); - ; - Object.defineProperty(EditorActionsManager.prototype, "undoChangeNodeSize", { - enumerable: false, - configurable: true, - writable: true, - value: function (args) { - args.ele.data('w', args.oldWidth); - args.ele.data('h', args.oldHeight); - args.ele.style('width', args.oldWidth); - args.ele.style('height', args.oldHeight); - return args; - } - }); - ; - /* - * Undo redo for changing size of compounds - * **/ + var numberOfBendPoints = 0; + if (this.edgeEditing.getSegmentPoints(edge) !== undefined) numberOfBendPoints = this.edgeEditing.getSegmentPoints(edge).length / 2; + var clipPoints; - Object.defineProperty(EditorActionsManager.prototype, "doChangeCompoundSize", { - enumerable: false, - configurable: true, - writable: true, - value: function (args) { - args.ele.style('min-width', args.newMinWidth); - args.ele.style('min-width-bias-left', args.newMinWidthBiasLeft); - args.ele.style('min-width-bias-right', args.newMinWidthBiasRight); - args.ele.style('min-height', args.newMinHeight); - args.ele.style('min-height-bias-top', args.newMinHeightBiasTop); - args.ele.style('min-height-bias-bottom', args.newMinHeightBiasBottom); - return args; - } - }); - ; - Object.defineProperty(EditorActionsManager.prototype, "undoChangeCompoundSize", { - enumerable: false, - configurable: true, - writable: true, - value: function (args) { - if (args.oldMinWidth == undefined) { - args.ele.style('min-width', 0); - args.ele.style('min-width-bias-left', 0); - args.ele.style('min-width-bias-right', 0); - } else { - args.ele.style('min-width', args.oldMinWidth); - args.ele.style('min-width-bias-left', args.oldMinWidthBiasLeft); - args.ele.style('min-width-bias-right', args.oldMinWidthBiasRight); - } + if (numberOfBendPoints > 0) { + var lastBendPoint = { + x: this.edgeEditing.getSegmentPoints(edge)[2 * numberOfBendPoints - 2], + y: this.edgeEditing.getSegmentPoints(edge)[2 * numberOfBendPoints - 1], + height: 0, + width: 0 + }; //Calculate clipping point of target node with the segment from last bend point by Cohen Sutherland algorithm - if (args.oldMinHeight == undefined) { - args.ele.style('min-height', 0); - args.ele.style('min-height-bias-top', 0); - args.ele.style('min-height-bias-bottom', 0); + clipPoints = this.findClippingPoints(lastBendPoint, targetRectangle); } else { - args.ele.style('min-height', args.oldMinHeight); - args.ele.style('min-height-bias-top', args.oldMinHeightBiasTop); - args.ele.style('min-height-bias-bottom', args.oldMinHeightBiasBottom); - } + //Calculate clipping points of both source and target nodes by Cohen Sutherland algorithm + clipPoints = this.findClippingPoints(sourceRectangle, targetRectangle); + } //Calculate unit vector pointing from source clipping coordinates to target clipping coordinates - return args; - } - }); - ; - Object.defineProperty(EditorActionsManager.prototype, "changeName", { - enumerable: false, - configurable: true, - writable: true, - value: function (ele, newName) { - if (this.isCollaborative) { - this.shareDBManager.changeName(ele, newName); + + var unitV = this.unitVector({ + x: clipPoints.targetClipPoints.x - clipPoints.sourceClipPoints.x, + y: clipPoints.targetClipPoints.y - clipPoints.sourceClipPoints.y + }); + var inverseUnitV = this.scale(unitV, -1); + var targetX = clipPoints.targetClipPoints.x; + var targetY = clipPoints.targetClipPoints.y; //Draw Triangle arrow head + + if (edgeType == 'ACTIVATES' || edgeType == 'INDUCES') { + targetX = clipPoints.targetClipPoints.x + this.TRIANGLE_ARROW_HEAD_HEIGHT * inverseUnitV.x; + targetY = clipPoints.targetClipPoints.y + this.TRIANGLE_ARROW_HEAD_HEIGHT * inverseUnitV.y; + var point1Vector = this.rotateVector(unitV, Math.PI / 2); + var point2Vector = this.rotateVector(unitV, -Math.PI / 2); + point1Vector = this.scale(point1Vector, this.TRIANGLE_ARROW_HEAD_WIDTH / 2); + point2Vector = this.scale(point2Vector, this.TRIANGLE_ARROW_HEAD_WIDTH / 2); + var point1X = targetX + point1Vector.x; + var point1Y = targetY + point1Vector.y; + var point2X = targetX + point2Vector.x; + var point2Y = targetY + point2Vector.y; + var polySVG = document.createElementNS(this.SVGNameSpace, 'polygon'); + polySVG.setAttribute('points', point1X + ',' + point1Y + ',' + point2X + ',' + point2Y + ',' + clipPoints.targetClipPoints.x + ',' + clipPoints.targetClipPoints.y); + this.svg.appendChild(polySVG); + } //Draw T type arrow head + else if (edgeType === 'INHIBITS' || edgeType === 'REPRESSES') { + targetX = clipPoints.targetClipPoints.x + this.T_ARROW_HEAD_OFFSET * inverseUnitV.x; + targetY = clipPoints.targetClipPoints.y + this.T_ARROW_HEAD_OFFSET * inverseUnitV.y; //Calculate T shape points + + var point1Vector = this.rotateVector(unitV, Math.PI / 2); + var point2Vector = this.rotateVector(unitV, -Math.PI / 2); + point1Vector = this.scale(point1Vector, this.T_HEIGHT / 2); + point2Vector = this.scale(point2Vector, this.T_HEIGHT / 2); + var point1X = targetX + point1Vector.x; + var point1Y = targetY + point1Vector.y; + var point2X = targetX + point2Vector.x; + var point2Y = targetY + point2Vector.y; //Draw edge arrow line here ! + + var lineSVG = document.createElementNS(this.SVGNameSpace, 'line'); + lineSVG.setAttribute('x1', point1X); + lineSVG.setAttribute('y1', point1Y); + lineSVG.setAttribute('x2', point2X); + lineSVG.setAttribute('y2', point2Y); + lineSVG.setAttribute('stroke-width', this.T_WIDTH + ''); + lineSVG.setAttribute('stroke', 'black'); + this.svg.appendChild(lineSVG); + } //Draw edge lines here ! + + + if (numberOfBendPoints > 0) { + //Calculate initial clipping point of source node with the segment from first bend point + var firstBendPoint = { + x: this.edgeEditing.getSegmentPoints(edge)[0], + y: this.edgeEditing.getSegmentPoints(edge)[1], + height: 0, + width: 0 + }; + var initialClipPoint = this.findClippingPoints(sourceRectangle, firstBendPoint); //Create a copy array of edgeEditing.getSegmentPoints(edge) which contain all the bending points + // including source and target clipping point. The first elements of the array are source's x and y positions + // and the last ones are target's x and y positions + + var points = [initialClipPoint.sourceClipPoints.x, initialClipPoint.sourceClipPoints.y]; + + for (var i = 0; i < numberOfBendPoints * 2; i++) { + points.push(this.edgeEditing.getSegmentPoints(edge)[i]); + } + + points.push(clipPoints.targetClipPoints.x); + points.push(clipPoints.targetClipPoints.y); + + for (var i = 0; i < points.length - 2; i += 2) { + var lineSVG = document.createElementNS(this.SVGNameSpace, 'line'); + lineSVG.setAttribute('x1', points[i]); + lineSVG.setAttribute('y1', points[i + 1]); + lineSVG.setAttribute('x2', points[i + 2]); + lineSVG.setAttribute('y2', points[i + 3]); + lineSVG.setAttribute('stroke-width', this.EDGE_WIDTH + ''); + lineSVG.setAttribute('stroke', 'black'); //Draw dashed if induces or represses interaction + + if (edgeType == 'INDUCES' || edgeType == 'REPRESSES') { + lineSVG.setAttribute('stroke-dasharray', this.DASH_PARAMETERS); + } + + this.svg.appendChild(lineSVG); + } } else { - this.changeNameCy(ele, newName); + var lineSVG = document.createElementNS(this.SVGNameSpace, 'line'); + lineSVG.setAttribute('x1', clipPoints.sourceClipPoints.x); + lineSVG.setAttribute('y1', clipPoints.sourceClipPoints.y); + lineSVG.setAttribute('x2', targetX); + lineSVG.setAttribute('y2', targetY); + lineSVG.setAttribute('stroke-width', this.EDGE_WIDTH + ''); + lineSVG.setAttribute('stroke', 'black'); //Draw dashed if induces or represses interaction + + if (edgeType == 'INDUCES' || edgeType == 'REPRESSES') { + lineSVG.setAttribute('stroke-dasharray', this.DASH_PARAMETERS); + } + + this.svg.appendChild(lineSVG); } } }); - ; - Object.defineProperty(EditorActionsManager.prototype, "changeNameCy", { + /** + * + * **/ + + Object.defineProperty(SVGExporter.prototype, "findClippingPoints", { enumerable: false, configurable: true, writable: true, - value: function (ele, newName) { - var currentName = ele.data('name'); - var args = { - ele: ele, - oldName: currentName, - newName: newName + value: function (sourceRectangle, targetRectangle) { + var sourceAABB = { + xMin: sourceRectangle.x - sourceRectangle.width / 2, + xMax: sourceRectangle.x + sourceRectangle.width / 2, + yMin: sourceRectangle.y - sourceRectangle.height / 2, + yMax: sourceRectangle.y + sourceRectangle.height / 2 }; - this.undoRedoManager.do('changeName', args); + var targetAABB = { + xMin: targetRectangle.x - targetRectangle.width / 2, + xMax: targetRectangle.x + targetRectangle.width / 2, + yMin: targetRectangle.y - targetRectangle.height / 2, + yMax: targetRectangle.y + targetRectangle.height / 2 + }; + var line1 = { + x1: sourceRectangle.x, + y1: sourceRectangle.y, + x2: targetRectangle.x, + y2: targetRectangle.y + }; + var line2 = { + x1: targetRectangle.x, + y1: targetRectangle.y, + x2: sourceRectangle.x, + y2: sourceRectangle.y + }; + var returnObj = { + sourceClipPoints: this.clipLine(line1, sourceAABB), + targetClipPoints: this.clipLine(line2, targetAABB) + }; + return returnObj; } }); - ; - /* - * Undo redo for changing name of nodes - * **/ - - Object.defineProperty(EditorActionsManager.prototype, "doChangename", { + Object.defineProperty(SVGExporter.prototype, "createRect", { enumerable: false, configurable: true, writable: true, - value: function (args) { - var currentName = args.ele.data('name'); - var newArgs = { - ele: args.ele, - newName: args.newName, - oldName: currentName - }; - args.ele.data('name', args.newName); - args.ele.css('content', args.newName); - return newArgs; + value: function (node) { + var nodeRectangle = document.createElementNS(this.SVGNameSpace, 'rect'); + var nodePosition = node.position(); + + if (node.isParent()) { + nodeRectangle.setAttribute('x', nodePosition.x - node.width() / 2 - this.COMPOUND_MARGIN / 2 + ''); + nodeRectangle.setAttribute('y', nodePosition.y - node.height() / 2 - this.COMPOUND_MARGIN / 2 + ''); + nodeRectangle.setAttribute('width', node.width() + this.COMPOUND_MARGIN); + nodeRectangle.setAttribute('height', node.height() + this.COMPOUND_MARGIN); + } else { + nodeRectangle.setAttribute('x', nodePosition.x - node.width() / 2 + ''); + nodeRectangle.setAttribute('y', nodePosition.y - node.height() / 2 + ''); + nodeRectangle.setAttribute('width', node.width()); + nodeRectangle.setAttribute('height', node.height()); + } + + nodeRectangle = this.createStyleForNodes(node, nodeRectangle); + return nodeRectangle; } }); - ; - Object.defineProperty(EditorActionsManager.prototype, "undoChangeName", { + Object.defineProperty(SVGExporter.prototype, "createText", { enumerable: false, configurable: true, writable: true, - value: function (args) { - var currentName = args.ele.data('name'); - var newArgs = { - ele: args.ele, - newName: args.newName, - oldName: currentName - }; - args.ele.data('name', args.oldName); - args.ele.css('content', args.oldName); - return newArgs; + value: function (node, genomicDataOffset) { + var verticalTextOffset = 5; + var nodePosition = node.position(); + var svgText = document.createElementNS(this.SVGNameSpace, 'text'); + + if (node.isParent()) { + verticalTextOffset = 20; + svgText.setAttribute('x', nodePosition.x); + svgText.setAttribute('y', nodePosition.y + node.height() / 2 + verticalTextOffset); + } else { + svgText.setAttribute('x', nodePosition.x); + svgText.setAttribute('y', nodePosition.y + verticalTextOffset + genomicDataOffset); + } + + svgText.setAttribute('font-family', 'Arial'); + svgText.setAttribute('text-anchor', 'middle'); + svgText.setAttribute('font-size', this.NODE_FONT_SIZE + ''); + svgText.innerHTML = node.data().name; + return svgText; } }); - ; - Object.defineProperty(EditorActionsManager.prototype, "hideSelectedNodes", { + Object.defineProperty(SVGExporter.prototype, "createStyleForNodes", { enumerable: false, configurable: true, writable: true, - value: function () { - //Hides the selected elements - var sel = this.cy.nodes(":selected"); - var nodesToHide = sel; - var b = true; //Hides the parents if they have no children + value: function (node, nodeRectangle) { + var nodeType = node.data().type; + var strokeWidth = node.css('border-width') || this.NODE_STROKE_WIDTH; + var strokeColor = this.NODE_STROKE_COLOR; + var fillColor = this.NODE_FILL_COLOR; + var opacity = this.NODE_OPACITY; + var strokeOpacity = 1; - sel.parent().each(function (parent) { - b = true; - parent.children().each(function (ch) { - if (!ch.selected()) { - if (ch.visible()) b = false; - } - }); - if (b) nodesToHide = nodesToHide.add(parent); - }); - this.cy.elements(":selected").unselect(); - if (this.isCollaborative) this.shareDBManager.changeVisibility(nodesToHide, true);else this.undoRedoManager.do('hideNode', nodesToHide); + if (nodeType == 'GENE' || nodeType == 'COMPARTMENT') { + nodeRectangle.setAttribute('rx', this.ROUNDING_FACTOR); + nodeRectangle.setAttribute('ry', this.ROUNDING_FACTOR); + if (nodeType == 'COMPARTMENT') strokeWidth = this.COMPARTMENT_STROKE_WIDTH; + } + + if (nodeType == 'PROCESS') { + opacity = 0; + strokeOpacity = 0; + } + + if (nodeType == 'FAMILY') { + fillColor = this.FAMILY_FILL_COLOR; + strokeColor = this.FAMILY_STROKE_COLOR; + } + + var styleString = 'stroke-width:' + strokeWidth + ';' + 'stroke:' + strokeColor + ';' + 'fill-opacity:' + opacity + ';' + 'fill:' + fillColor + ';' + 'stroke-opacity:' + strokeOpacity + ';'; + nodeRectangle.setAttribute('style', styleString); + return nodeRectangle; } }); - ; - /* - * Undo redo for hiding nodes + /** + * Cohen Sutherland Line Clipping algorithm implementation * **/ - Object.defineProperty(EditorActionsManager.prototype, "doHide", { + Object.defineProperty(SVGExporter.prototype, "clipLine", { enumerable: false, configurable: true, writable: true, - value: function (args) { - args.hide(); - return args; + value: function (line, rectangle) { + //Clipping regions encoded with different integers ! + var INSIDE = 0; + var LEFT = 1; + var RIGHT = 2; + var BOTTOM = 4; + var TOP = 8; + /* + * Get outcode of given point compared to the rectangle + * */ + + function getOutCode(point, rectangle) { + var outcode = INSIDE; + if (point.x < rectangle.xMin) outcode = outcode | LEFT;else if (point.x > rectangle.xMax) outcode = outcode | RIGHT; + if (point.y < rectangle.yMin) outcode = outcode | TOP;else if (point.y > rectangle.yMax) outcode = outcode | BOTTOM; + return outcode; + } + + var outcode0 = getOutCode({ + x: line.x1, + y: line.y1 + }, rectangle); + var outcode1 = getOutCode({ + x: line.x2, + y: line.y2 + }, rectangle); + var slope = (line.y2 - line.y1) / (line.x2 - line.x1); + var returnCoords = { + x: line.x1, + y: line.y1, + slope: slope + }; //Main clipping loop + + var accept = false; + + while (true) { + // Bitwise OR is 0. Trivially accept and get out of loop + if (!(outcode0 | outcode1)) { + accept = true; + break; + } // Bitwise AND is not 0. Trivially reject and get out of loop + else if (outcode0 & outcode1) { + break; + } else { + var outCode = outcode0 ? outcode0 : outcode1; + + if (outCode & TOP) { + returnCoords.x = line.x1 + (rectangle.yMin - line.y1) / slope; + returnCoords.y = rectangle.yMin; + } else if (outCode & BOTTOM) { + returnCoords.x = line.x1 + (rectangle.yMax - line.y1) / slope; + returnCoords.y = rectangle.yMax; + } else if (outCode & RIGHT) { + returnCoords.x = rectangle.xMax; + returnCoords.y = line.y1 + slope * (rectangle.xMax - line.x1); + } else if (outCode & LEFT) { + returnCoords.x = rectangle.xMin; + returnCoords.y = line.y1 + slope * (rectangle.xMin - line.x1); + } // Now we move outside point to intersection point to clip + // and get ready for next pass. + + + if (outCode == outcode0) { + outcode0 = getOutCode({ + x: returnCoords.x, + y: returnCoords.y + }, rectangle); + } else { + outcode1 = getOutCode({ + x: returnCoords.x, + y: returnCoords.y + }, rectangle); + } + } + } + + return returnCoords; } }); - ; - Object.defineProperty(EditorActionsManager.prototype, "undoHide", { + /** + * Utility vector functions + * */ + + Object.defineProperty(SVGExporter.prototype, "dotProduct", { enumerable: false, configurable: true, writable: true, - value: function (args) { - args.show(); - return args; + value: function (v1, v2) { + var newX = v1.x * v2.x; + var newY = v1.y * v2.y; + return { + x: newX, + y: newY + }; } }); - ; - Object.defineProperty(EditorActionsManager.prototype, "showAllNodes", { + Object.defineProperty(SVGExporter.prototype, "unitVector", { enumerable: false, configurable: true, writable: true, - value: function () { - var hid = this.cy.nodes(":hidden"); - if (this.isCollaborative) this.shareDBManager.changeVisibility(hid, false);else this.undoRedoManager.do('showAllNodes', hid); + value: function (v) { + var inverseLength = 1 / Math.sqrt(v.x * v.x + v.y * v.y); + return { + x: v.x * inverseLength, + y: v.y * inverseLength + }; } }); - ; - /* - * Undo redo for showing all nodes - * **/ - - Object.defineProperty(EditorActionsManager.prototype, "doShow", { + Object.defineProperty(SVGExporter.prototype, "rotateVector", { enumerable: false, configurable: true, writable: true, - value: function (args) { - args.show(); - return args; + value: function (v, radians) { + var newX = v.x * Math.cos(radians) - v.y * Math.sin(radians); + var newY = v.x * Math.sin(radians) + v.y * Math.cos(radians); + return { + x: newX, + y: newY + }; } }); - ; - Object.defineProperty(EditorActionsManager.prototype, "undoShow", { + Object.defineProperty(SVGExporter.prototype, "scale", { enumerable: false, configurable: true, writable: true, - value: function (args) { - args.hide(); - return args; + value: function (v, scalar) { + var newX = v.x * scalar; + var newY = v.y * scalar; + return { + x: newX, + y: newY + }; } }); - ; - Object.defineProperty(EditorActionsManager.prototype, "highlightElementsInitially", { - enumerable: false, - configurable: true, - writable: true, - value: function (invalidHighlightedGenesIDs, invalidGenesIDs, highlightedGenesIDs, highlightedEdgesIDs, hiddenGenesIDs) { - for (var i in invalidHighlightedGenesIDs) { - this.cy.$('#' + invalidHighlightedGenesIDs[i]).addClass('invalidGeneHighlight'); - } - - for (var i in invalidGenesIDs) { - this.cy.$('#' + invalidGenesIDs[i]).addClass('invalidGene'); - } + return SVGExporter; +}(); - for (var i in highlightedGenesIDs) { - this.cy.$('#' + highlightedGenesIDs[i]).addClass('highlightedNode'); - } +/* harmony default export */ var utils_SVGExporter = (SVGExporter_SVGExporter); +// EXTERNAL MODULE: external "jquery" +var external_jquery_ = __webpack_require__(2); +var external_jquery_default = /*#__PURE__*/__webpack_require__.n(external_jquery_); - for (var i in highlightedEdgesIDs) { - this.cy.$('#' + highlightedEdgesIDs[i]).addClass('highlightedEdge'); - } +// CONCATENATED MODULE: ./src/managers/GenomicDataOverlayManager.ts - for (var i in hiddenGenesIDs) { - this.cy.$('#' + hiddenGenesIDs[i]).hide(); - } - } - }); - ; - Object.defineProperty(EditorActionsManager.prototype, "validateGenes", { - enumerable: false, - configurable: true, - writable: true, - value: function () { - var geneSymbols = this.getGeneSymbols(); - this.portalAccessor.validateGenes(geneSymbols, this); - } - }); //Get all gene symbols - Object.defineProperty(EditorActionsManager.prototype, "getGeneSymbols", { - enumerable: false, - configurable: true, - writable: true, - value: function () { - var geneSymbols = []; - this.cy.nodes().forEach(function (gene) { - if (gene.data().type === "GENE") geneSymbols.push(gene.data().name); - }); - return geneSymbols; - } - }); - Object.defineProperty(EditorActionsManager.prototype, "highlightInvalidGenes", { - enumerable: false, - configurable: true, - writable: true, - value: function (validGeneSymbols) { - if (this.isCollaborative) { - var invalidGenes = []; - this.cy.nodes().forEach(function (gene) { - if (gene.data().type === "GENE") { - var geneName = gene.data().name; - if (validGeneSymbols.indexOf(geneName) < 0) invalidGenes.push(gene.id()); - } - }); - this.shareDBManager.changeHighlightInvalidGenes(invalidGenes, true); // TODO: Amendment by Ziya - /* - if (invalidGenes.length > 0) - this.notificationManager.createNotification("Invalid genes are highlighted","fail"); - else - this.notificationManager.createNotification("All gene symbols are valid","success");*/ - } else { - var highlightedGenes = this.cy.collection(); - this.cy.nodes().forEach(function (gene) { - if (gene.data().type === "GENE") { - var geneName = gene.data().name; - if (validGeneSymbols.indexOf(geneName) < 0) highlightedGenes = highlightedGenes.add(gene); +var GenomicDataOverlayManager_GenomicDataOverlayManager = +/** @class */ +function () { + function GenomicDataOverlayManager(cy) { + Object.defineProperty(this, "genomicDataMap", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "visibleGenomicDataMapByType", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "groupedGenomicDataCount", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "groupedGenomicDataMap", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "patientData", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "DEFAULT_VISIBLE_GENOMIC_DATA_COUNT", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "observers", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "cy", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "clearAllGenomicData", { + enumerable: true, + configurable: true, + writable: true, + value: function () { + this.genomicDataMap = {}; + this.visibleGenomicDataMapByType = {}; + this.groupedGenomicDataMap = {}; + this.groupedGenomicDataCount = 0; + } + }); + Object.defineProperty(this, "prepareGenomicDataShareDB", { + enumerable: true, + configurable: true, + writable: true, + value: function (genomicData) { + var genomicDataMap = {}; + var cancerTypes = []; + var visibleGenomicDataMapByType = {}; // By lines + + var lines = genomicData.split('\n'); // First line is meta data ! + + var metaLineColumns = lines[0].split('\t'); // Parse cancer types + + for (var i = 1; i < metaLineColumns.length; i++) { + cancerTypes.push(metaLineColumns[i]); // Update initially visible genomic data boxes ! + + if (i - 1 < this.DEFAULT_VISIBLE_GENOMIC_DATA_COUNT) { + visibleGenomicDataMapByType[cancerTypes[i - 1]] = true; + } else { + visibleGenomicDataMapByType[cancerTypes[i - 1]] = false; } - }); // TODO: Amendment by Ziya + } // parse genomic data - /* - if (highlightedGenes.size() > 0) - this.notificationManager.createNotification("Invalid genes are highlighted","fail"); - else - this.notificationManager.createNotification("All gene symbols are valid","success");*/ - var nodesToAddInvalidHighlight = this.cy.collection(); - highlightedGenes.forEach(function (ele) { - if (!ele.hasClass('invalidGeneHighlight') && !ele.hasClass('invalidGene')) nodesToAddInvalidHighlight = nodesToAddInvalidHighlight.union(ele); - }); - this.undoRedoManager.do('highlightInvalidGenes', nodesToAddInvalidHighlight); + for (var i = 1; i < lines.length; i++) { + // EOF check + if (lines[i].length === 0) { + break; + } // Split each line by tab and parse genomic data content + + + var lineContent = lines[i].split('\t'); + var geneSymbol = lineContent[0]; // If current gene entry is not in genomic data map create new hashmap entry + + if (!(geneSymbol in genomicDataMap)) { + genomicDataMap[geneSymbol] = {}; + } // Add each entry of genomic data + + + for (var j = 1; j < lineContent.length; j++) { + genomicDataMap[geneSymbol][cancerTypes[j - 1]] = lineContent[j]; + } + } + + var returnObj = { + genomicDataMap: genomicDataMap, + visibilityMap: visibleGenomicDataMapByType + }; + return returnObj; + } + }); + Object.defineProperty(this, "updateGenomicDataVisibility", { + enumerable: true, + configurable: true, + writable: true, + value: function (_key, isVisible) { + if (_key in this.visibleGenomicDataMapByType) { + this.visibleGenomicDataMapByType[_key] = isVisible; + } + } + }); + Object.defineProperty(this, "hideGenomicData", { + enumerable: true, + configurable: true, + writable: true, + value: function () { + this.cy.style().selector('node[type="GENE"]').style('text-margin-y', 0).style('width', function (ele) { + return 150; + }).style('background-image', function (ele) { + var dataURI = 'data:image/svg+xml;utf8,'; + return dataURI; + }).update(); } + }); + this.cy = cy; + this.genomicDataMap = {}; + this.patientData = {}; + this.visibleGenomicDataMapByType = {}; + this.groupedGenomicDataMap = {}; + this.groupedGenomicDataCount = 0; + this.DEFAULT_VISIBLE_GENOMIC_DATA_COUNT = 3; // Observer-observable pattern related stuff + + this.observers = []; + } + + Object.defineProperty(GenomicDataOverlayManager.prototype, "getEmptyGroupID", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + var oldCount = this.groupedGenomicDataCount; + this.groupedGenomicDataCount++; + return oldCount; } }); - Object.defineProperty(EditorActionsManager.prototype, "removeInvalidGeneHighlights", { + Object.defineProperty(GenomicDataOverlayManager.prototype, "addGenomicDataLocally", { enumerable: false, configurable: true, writable: true, - value: function (actions) { - if (this.isCollaborative) { - var geneIDs = []; - this.cy.nodes().forEach(function (gene) { - if (gene.data().type === "GENE") { - if (gene.hasClass('invalidGeneHighlight') || gene.hasClass('invalidGene')) geneIDs.push(gene.id()); - } - }); - this.shareDBManager.changeHighlightInvalidGenes(geneIDs, false); - } else { - var nodesToRemoveInvalidHighlight = this.cy.collection(); - this.cy.nodes().forEach(function (ele) { - if (ele.hasClass('invalidGeneHighlight') || ele.hasClass('invalidGene')) nodesToRemoveInvalidHighlight = nodesToRemoveInvalidHighlight.union(ele); - }); - actions.push({ - name: "removeHighlightInvalidGenes", - param: nodesToRemoveInvalidHighlight - }); // this.undoRedoManager.do('removeHighlightInvalidGenes', nodesToRemoveInvalidHighlight); - } + value: function (genomicData, groupID) { + this.parseGenomicData(genomicData, groupID); + this.showGenomicData(); + this.notifyObservers(); } }); - Object.defineProperty(EditorActionsManager.prototype, "doHighlightInvalidGenes", { + Object.defineProperty(GenomicDataOverlayManager.prototype, "preparePortalGenomicDataShareDB", { enumerable: false, configurable: true, writable: true, - value: function (args) { - args.each(function (n) { - if (n.hasClass('highlightedNode')) { - n.removeClass('highlightedNode'); - n.addClass("invalidGeneHighlight"); - } else n.addClass("invalidGene"); - }); - return args; + value: function (genomicData) { + var geneMap = {}; + var visMap = {}; + + for (var cancerKey in genomicData) { + for (var geneSymbol in genomicData[cancerKey]) { + geneMap[geneSymbol] = {}; + geneMap[geneSymbol][cancerKey] = genomicData[cancerKey][geneSymbol]; + } + + visMap[cancerKey] = true; + } + + return { + genomicDataMap: geneMap, + visibilityMap: visMap + }; } }); - ; - Object.defineProperty(EditorActionsManager.prototype, "undoHighlightInvalidGenes", { + Object.defineProperty(GenomicDataOverlayManager.prototype, "addGenomicData", { enumerable: false, configurable: true, writable: true, - value: function (args) { - args.each(function (n) { - if (n.hasClass('invalidGeneHighlight')) { - n.removeClass('invalidGeneHighlight'); - n.addClass("highlightedNode"); - } else n.removeClass("invalidGene"); - }); - return args; + value: function (data) { + this.genomicDataMap = data; } }); - Object.defineProperty(EditorActionsManager.prototype, "highlightSelected", { + Object.defineProperty(GenomicDataOverlayManager.prototype, "removeGenomicVisData", { enumerable: false, configurable: true, writable: true, value: function () { - var sel = this.cy.elements(":selected"); - sel.unselect(); - var elementsToHighlight = this.cy.collection(); - sel.forEach(function (ele) { - if (!ele.hasClass('invalidGeneHighlight') && !ele.hasClass('highlightedNode') && !ele.hasClass('highlightedEdge')) elementsToHighlight = elementsToHighlight.union(ele); - }); - if (this.isCollaborative) this.shareDBManager.changeHighlight(elementsToHighlight, true);else this.undoRedoManager.do('highlightOthers', elementsToHighlight); + this.visibleGenomicDataMapByType = {}; } }); - ; - Object.defineProperty(EditorActionsManager.prototype, "highlightNeighbors", { + Object.defineProperty(GenomicDataOverlayManager.prototype, "addGenomicDataWithGeneSymbol", { enumerable: false, configurable: true, writable: true, - value: function () { - var sel = this.cy.elements(":selected"); - var neighbors = sel.neighborhood(); - neighbors = neighbors.union(sel); - neighbors.unselect(); - var elementsToHighlight = this.cy.collection(); - neighbors.forEach(function (ele) { - if (!ele.hasClass('invalidGeneHighlight') && !ele.hasClass('highlightedNode') && !ele.hasClass('highlightedEdge')) elementsToHighlight = elementsToHighlight.union(ele); - }); - if (this.isCollaborative) this.shareDBManager.changeHighlight(elementsToHighlight, true);else this.undoRedoManager.do('highlightOthers', elementsToHighlight); + value: function (geneSymbol, data) { + this.genomicDataMap[geneSymbol] = data; } }); - ; - Object.defineProperty(EditorActionsManager.prototype, "highlightBySearch", { + Object.defineProperty(GenomicDataOverlayManager.prototype, "addGenomicGroupData", { enumerable: false, configurable: true, writable: true, - value: function (args) { - if (this.isCollaborative) this.shareDBManager.changeHighlight(args, true);else this.undoRedoManager.do('highlightOthers', args); + value: function (groupID, data) { + this.groupedGenomicDataMap[groupID] = data; } }); - ; - Object.defineProperty(EditorActionsManager.prototype, "removeOtherHighlight", { + Object.defineProperty(GenomicDataOverlayManager.prototype, "addPortalGenomicData", { enumerable: false, configurable: true, writable: true, - value: function (actions) { - var nodesToRemoveHighlight = this.cy.collection(); //TODO cytoscape selectors may provide more handy functionality instead of iterating over ! + value: function (data, groupID) { + for (var _i = 0, _a = Object.keys(data); _i < _a.length; _i++) { + var cancerStudy = _a[_i]; + this.visibleGenomicDataMapByType[cancerStudy] = true; // Group current cancer study according to the groupID - this.cy.elements().forEach(function (ele) { - if (ele.hasClass('highlightedNode') || ele.hasClass('highlightedEdge') || ele.hasClass('invalidGeneHighlight')) nodesToRemoveHighlight = nodesToRemoveHighlight.add(ele); - }); - if (this.isCollaborative) this.shareDBManager.changeHighlight(nodesToRemoveHighlight, false);else actions.push({ - name: "removeOtherHighlight", - param: nodesToRemoveHighlight - }); // this.undoRedoManager.do('removeOtherHighlight', nodesToRemoveHighlight); - } - }); - ; - /* - * Undo redo for highlighting of nodes - * **/ + if (this.groupedGenomicDataMap[groupID] === undefined) { + this.groupedGenomicDataMap[groupID] = []; + } - Object.defineProperty(EditorActionsManager.prototype, "doHighlight", { - enumerable: false, - configurable: true, - writable: true, - value: function (args) { - args.each(function (n) { - if (n.isEdge()) n.addClass("highlightedEdge");else { - if (n.hasClass('invalidGene')) { - n.removeClass("invalidGene"); - n.addClass("invalidGeneHighlight"); - } else n.addClass("highlightedNode"); + this.groupedGenomicDataMap[groupID].push(cancerStudy); + var cancerData = data[cancerStudy]; + + for (var _b = 0, _c = Object.keys(cancerData); _b < _c.length; _b++) { + var geneSymbol = _c[_b]; + if (this.genomicDataMap[geneSymbol] === undefined) this.genomicDataMap[geneSymbol] = {}; + this.genomicDataMap[geneSymbol][cancerStudy] = data[cancerStudy][geneSymbol].toFixed ? data[cancerStudy][geneSymbol].toFixed(2) : data[cancerStudy][geneSymbol]; } - }); - return args; + } //This parameter is used as flag for PatientView PathwayMapper Functions + + + if (data['PatientView'] == 1) { + this.patientData = data; + this.showPatientData(); + } else { + this.showGenomicData(); + } + + this.notifyObservers(); } }); - ; - Object.defineProperty(EditorActionsManager.prototype, "undoHighlight", { + Object.defineProperty(GenomicDataOverlayManager.prototype, "removeGenomicData", { enumerable: false, configurable: true, writable: true, - value: function (args) { - args.each(function (n) { - if (n.isEdge()) n.removeClass("highlightedEdge");else { - if (n.hasClass('invalidGeneHighlight')) { - n.removeClass("invalidGeneHighlight"); - n.addClass("invalidGene"); - } else n.removeClass("highlightedNode"); - } - }); - return args; + value: function () { + this.genomicDataMap = {}; } }); - ; - Object.defineProperty(EditorActionsManager.prototype, "removeAllHighlight", { + Object.defineProperty(GenomicDataOverlayManager.prototype, "removeGenomicDataWithGeneSymbol", { enumerable: false, configurable: true, writable: true, - value: function () { - var actions = []; - this.removeInvalidGeneHighlights(actions); - this.removeOtherHighlight(actions); - this.cy.undoRedo().do("batch", actions); + value: function (geneSymbol) { + this.genomicDataMap[geneSymbol] = {}; } }); - ; - Object.defineProperty(EditorActionsManager.prototype, "postLayout", { + Object.defineProperty(GenomicDataOverlayManager.prototype, "addGenomicVisData", { enumerable: false, configurable: true, writable: true, - value: function () { - if (this.isCollaborative) { - //Previously this.cy.nodes() was sent as an argument in moveElements function but it caused a problem when - // the compound node was moved before the child nodes - var movedNodes = this.cy.collection(); - var parentNodes = this.cy.collection(); - this.cy.nodes().forEach(function (node) { - if (!node.isParent()) movedNodes = movedNodes.add(node);else parentNodes = parentNodes.add(node); - }); - this.moveElements(movedNodes); - this.moveElements(parentNodes); - var newState = { - zoomLevel: this.cy.zoom(), - panLevel: this.cy.pan() - }; - this.updateGlobalOptions(newState); - } + value: function (key, data) { + this.visibleGenomicDataMapByType[key] = data; } }); - ; - /* - * Gets the first empty index from the list in cloud model - * **/ - - Object.defineProperty(EditorActionsManager.prototype, "getEmptyGroupID", { + Object.defineProperty(GenomicDataOverlayManager.prototype, "countVisibleGenomicDataByType", { enumerable: false, configurable: true, writable: true, value: function () { - if (this.isCollaborative) return this.shareDBManager.getEmptyGroupID();else return this.genomicDataOverlayManager.getEmptyGroupID(); - } - }); - ; - /* - * Gets the first empty index from the list in cloud model - * **/ + // Count the genomic data that will be displayed on nodes' body + var genomicDataBoxCount = 0; - Object.defineProperty(EditorActionsManager.prototype, "groupGenomicData", { - enumerable: false, - configurable: true, - writable: true, - value: function (cancerNames, groupID) { - return this.shareDBManager.groupGenomicData(cancerNames, groupID); + for (var cancerType in this.visibleGenomicDataMapByType) { + if (this.visibleGenomicDataMapByType[cancerType]) { + genomicDataBoxCount++; + } + } + + return genomicDataBoxCount; } }); - ; - Object.defineProperty(EditorActionsManager.prototype, "addPubmedIDs", { + Object.defineProperty(GenomicDataOverlayManager.prototype, "generateSVGForNode", { enumerable: false, configurable: true, writable: true, - value: function (edge, pubmedIDs) { - if (this.isCollaborative) { - console.log(edge, pubmedIDs); - this.shareDBManager.addPubmedIDs(edge.id(), pubmedIDs); - } else { - var pubmedArray = edge.data('pubmedIDs'); + value: function (ele) { + var genomicDataBoxCount = this.countVisibleGenomicDataByType(); // Experimental data overlay part ! - var validPubmedIDs = _.filter(pubmedIDs, function (id) { - return !isNaN(id); - }); + var dataURI = 'data:image/svg+xml;utf8,'; + var svgNameSpace = 'http://www.w3.org/2000/svg'; + var nodeLabel = ele.data('name'); // If there is no genomic data for this node return ! - pubmedArray.push.apply(pubmedArray, validPubmedIDs); - edge.data('pubmedIDs', _.uniq(pubmedArray)); - } - } - }); - Object.defineProperty(EditorActionsManager.prototype, "removePubmedID", { - enumerable: false, - configurable: true, - writable: true, - value: function (edge, pubmedIDs) { - if (this.isCollaborative) { - this.shareDBManager.removePubmedID(edge.id(), pubmedIDs); - } else { - var pubmedArray = edge.data('pubmedIDs'); - edge.data('pubmedIDs', _.difference(pubmedArray, pubmedIDs)); + if (!(nodeLabel in this.genomicDataMap)) { + return dataURI; } - } - }); - Object.defineProperty(EditorActionsManager.prototype, "updateEdgeBendPoints", { - enumerable: false, - configurable: true, - writable: true, - value: function (edge) { - if (this.isCollaborative) { - var numberOfBendPoints = 0; - if (this.edgeEditing.getSegmentPoints(edge) !== undefined) numberOfBendPoints = this.edgeEditing.getSegmentPoints(edge).length / 2; - var bendPointsArray = []; - for (var j = 0; j < numberOfBendPoints; j++) { - bendPointsArray.push({ - x: this.edgeEditing.getSegmentPoints(edge)[2 * j], - y: this.edgeEditing.getSegmentPoints(edge)[2 * j + 1] - }); - } // edge.data("bendPointPositions", bendPointsArray); - // edgeEditing.initBendPoints(edge); + var eleBBox = ele.boundingBox(); + var reqWidth = this.getRequiredWidthForGenomicData(genomicDataBoxCount); + var overlayRecBoxW = reqWidth - 10; + var overlayRecBoxH = 25; + var svg = document.createElementNS(svgNameSpace, 'svg'); // It seems this should be set according to the node size ! + svg.setAttribute('width', reqWidth); + svg.setAttribute('height', eleBBox.h); // This is important you need to include this to succesfully render in cytoscape.js! - this.shareDBManager.updateEdgeBendPoints(edge.id(), bendPointsArray); - } - } - }); //Related to order the nodes according to the selection of user + svg.setAttribute('xmlns', svgNameSpace); // Overlay Data Rect - Object.defineProperty(EditorActionsManager.prototype, "pushSelectedNodeStack", { - enumerable: false, - configurable: true, - writable: true, - value: function (ele) { - this.selectedNodeStack[ele.id()] = ele; - } - }); - Object.defineProperty(EditorActionsManager.prototype, "removeElementFromSelectedNodeStack", { - enumerable: false, - configurable: true, - writable: true, - value: function (ele) { - var nodeID = ele.id(); - if (nodeID in this.selectedNodeStack) delete this.selectedNodeStack[ele.id()]; - } - }); - Object.defineProperty(EditorActionsManager.prototype, "clearSelectedNodeStack", { - enumerable: false, - configurable: true, - writable: true, - value: function () { - this.selectedNodeStack = {}; - } - }); - Object.defineProperty(EditorActionsManager.prototype, "exportSVG", { - enumerable: false, - configurable: true, - writable: true, - value: function () { - return this.svgExporter.exportGraph(this.cy.nodes(), this.cy.edges()); - } - }); //Simple observer-observable pattern for views!!!!! + var overLayRectBBox = { + w: overlayRecBoxW, + h: overlayRecBoxH, + x: reqWidth / 2 - overlayRecBoxW / 2, + y: eleBBox.h / 2 + overlayRecBoxH / 2 - 18 + }; + var genomicFrequencyData = this.genomicDataMap[nodeLabel]; + var maxGenomicDataBoxCount = + /*(genomicDataBoxCount > 3) ? 3:*/ + genomicDataBoxCount; + var genomicBoxCounter = 0; - Object.defineProperty(EditorActionsManager.prototype, "registerObserver", { - enumerable: false, - configurable: true, - writable: true, - value: function (observer) { - this.observers.push(observer); + for (var i in this.groupedGenomicDataMap) { + for (var j in this.groupedGenomicDataMap[i]) { + var cancerType = this.groupedGenomicDataMap[i][j]; + + if (!this.visibleGenomicDataMapByType[cancerType]) { + continue; + } + + if (genomicFrequencyData[cancerType] !== undefined) { + genomicDataRectangleGenerator(overLayRectBBox.x + genomicBoxCounter * overLayRectBBox.w / maxGenomicDataBoxCount, overLayRectBBox.y, overLayRectBBox.w / maxGenomicDataBoxCount, overLayRectBBox.h, genomicFrequencyData[cancerType], svg); + } else { + genomicDataRectangleGenerator(overLayRectBBox.x + genomicBoxCounter * overLayRectBBox.w / maxGenomicDataBoxCount, overLayRectBBox.y, overLayRectBBox.w / maxGenomicDataBoxCount, overLayRectBBox.h, null, svg); + } + + genomicBoxCounter++; + } + } + + function genomicDataRectangleGenerator(x, y, w, h, percent, parentSVG) { + var colorString = ''; + + if (percent) { + var isNegativePercent = percent < 0; + + var _percent = Math.abs(percent); // Handle special cases here ! + + + _percent = _percent > 0 && _percent < 0.5 ? 0.5 : _percent; // _percent = _percent === 1 ? 2 : _percent + // Here we are using non linear regression + // Fitting points of (0,0), (25,140), (50,220), (100, 255) + + var percentColor = 255 - (-7.118 + 53.9765 * Math.log(_percent + 0.8)); + + if (_percent === 0 || percent == -101) { + colorString = 'rgb(255,255,255)'; + } else if (isNegativePercent) { + colorString = 'rgb(' + Math.round(percentColor) + ',' + Math.round(percentColor) + ',255)'; + percent = percent.substring(1); + } else { + colorString = 'rgb(255,' + Math.round(percentColor) + ',' + Math.round(percentColor) + ')'; + } // Rectangle Part + + + var overlayRect = document.createElementNS(svgNameSpace, 'rect'); + overlayRect.setAttribute('x', x); + overlayRect.setAttribute('y', y); + overlayRect.setAttribute('width', w); + overlayRect.setAttribute('height', h); + overlayRect.setAttribute('style', 'stroke-width:1;stroke:rgb(0,0,0);opacity:1;fill:' + colorString + ';'); // Text Part + + var textPercent = percent < 0.5 && percent > 0 ? '<0.5' : Number(percent).toFixed(1); + var text = percent == -101 ? 'N/P' : textPercent + '%'; + var fontSize = 14; + var textLength = text.length; + var xOffset = w / 2 - textLength * 4; + var yOffset = fontSize / 3; + var svgText = document.createElementNS(svgNameSpace, 'text'); + svgText.setAttribute('x', x + xOffset); + svgText.setAttribute('y', y + h / 2 + yOffset); + svgText.setAttribute('font-family', 'Arial'); + svgText.setAttribute('font-size', fontSize + ''); + svgText.innerHTML = text; + parentSVG.appendChild(overlayRect); + parentSVG.appendChild(svgText); + } else { + colorString = 'rgb(210,210,210)'; // Rectangle Part + + var overlayRect = document.createElementNS(svgNameSpace, 'rect'); + overlayRect.setAttribute('x', x); + overlayRect.setAttribute('y', y); + overlayRect.setAttribute('width', w); + overlayRect.setAttribute('height', h); + overlayRect.setAttribute('style', 'stroke-width:1;stroke:rgb(0,0,0);opacity:1;fill:' + colorString + ';'); + parentSVG.appendChild(overlayRect); + } + } + + return svg; } - }); - ; - Object.defineProperty(EditorActionsManager.prototype, "notifyObservers", { + }); // Just an utility function to calculate required width for genes for genomic data ! + + Object.defineProperty(GenomicDataOverlayManager.prototype, "getRequiredWidthForGenomicData", { enumerable: false, configurable: true, writable: true, - value: function () { - for (var i in this.observers) { - var observer = this.observers[i]; - observer.notify(); - } + value: function (genomicDataBoxCount) { + var term = genomicDataBoxCount > 3 ? genomicDataBoxCount - 3 : 0; + return 150 + term * 35; } }); - ; - Object.defineProperty(EditorActionsManager.prototype, "registerGenomicDataObserver", { + Object.defineProperty(GenomicDataOverlayManager.prototype, "showGenomicData", { enumerable: false, configurable: true, writable: true, - value: function (observer) { - this.genomicDataOverlayManager.registerObserver(observer); + value: function () { + var _this = this; + + var self = this; + var genomicDataBoxCount = this.countVisibleGenomicDataByType(); + + if (genomicDataBoxCount < 1) { + // Hide all genomic data and return + this.hideGenomicData(); + return; + } + + this.cy.style().selector('node[type="GENE"]') // It used to change the width of nodes only locally + .style('width', function (ele) { + return _this.getRequiredWidthForGenomicData(genomicDataBoxCount); + }).style('text-margin-y', function (ele) { + var nodeLabel = ele.data('name'); // If there is no genomic data for this node return ! + + if (!(nodeLabel in self.genomicDataMap)) { + return 0; + } // Else shift label in Y axis + + + return -15; + }).style('background-image', function (ele) { + var x = encodeURIComponent(self.generateSVGForNode(ele).outerHTML); + + if (x === 'undefined') { + return 'none'; + } + + var dataURI = 'data:image/svg+xml;utf8,' + x; + return dataURI; + }).update(); } }); - Object.defineProperty(EditorActionsManager.prototype, "updateGenomicDataVisibility", { + Object.defineProperty(GenomicDataOverlayManager.prototype, "parseGenomicData", { enumerable: false, configurable: true, writable: true, - value: function (dataMap) { - if (this.isCollaborative) { - //TODO compound OP - // this.shareDBManager.clearGenomicVisData(); - this.shareDBManager.addGenomicVisibilityData(dataMap); - } else { - for (var _key in dataMap) { - this.genomicDataOverlayManager.updateGenomicDataVisibility(_key, dataMap[_key]); + value: function (genomicData, groupID) { + this.genomicDataMap = this.genomicDataMap || {}; + this.visibleGenomicDataMapByType = this.visibleGenomicDataMapByType || {}; + this.groupedGenomicDataMap = this.groupedGenomicDataMap || {}; + var cancerTypes = []; // By lines + + var lines = genomicData.split('\n'); // First line is meta data ! + + var metaLineColumns = lines[0].split('\t'); // Parse cancer types + + for (var i = 1; i < metaLineColumns.length; i++) { + cancerTypes.push(metaLineColumns[i]); // Update initially visible genomic data boxes ! + + if (i - 1 < this.DEFAULT_VISIBLE_GENOMIC_DATA_COUNT) { + this.visibleGenomicDataMapByType[cancerTypes[i - 1]] = true; + } else { + this.visibleGenomicDataMapByType[cancerTypes[i - 1]] = false; } - this.genomicDataOverlayManager.showGenomicData(); + if (this.groupedGenomicDataMap[groupID] === undefined) { + this.groupedGenomicDataMap[groupID] = []; + } + + this.groupedGenomicDataMap[groupID].push(cancerTypes[i - 1]); + } // parse genomic data + + + for (var i = 1; i < lines.length; i++) { + // EOF check + if (lines[i].length === 0) { + break; + } // Split each line by tab and parse genomic data content + + + var lineContent = lines[i].split('\t'); + var geneSymbol = lineContent[0]; // If current gene entry is not in genomic data map create new map + + if (!(geneSymbol in this.genomicDataMap)) { + this.genomicDataMap[geneSymbol] = {}; + } // Add each entry of genomic data + + + for (var j = 1; j < lineContent.length; j++) { + this.genomicDataMap[geneSymbol][cancerTypes[j - 1]] = lineContent[j]; + } } } - }); //Global options related functions, zoom etc.. + }); // Simple observer-observable pattern for views!!!!! - Object.defineProperty(EditorActionsManager.prototype, "getGlobalOptions", { - enumerable: false, - configurable: true, - writable: true, - value: function () { - return { - zoomLevel: this.cy.zoom(), - panLevel: this.cy.pan() - }; - } - }); - Object.defineProperty(EditorActionsManager.prototype, "changeGlobalOptions", { + Object.defineProperty(GenomicDataOverlayManager.prototype, "registerObserver", { enumerable: false, configurable: true, writable: true, - value: function (op) { - var globalOptions = op.li; - this.cy.zoom(globalOptions.zoomLevel); - this.cy.pan(globalOptions.panLevel); + value: function (observer) { + this.observers.push(observer); } }); - Object.defineProperty(EditorActionsManager.prototype, "updateGlobalOptions", { + Object.defineProperty(GenomicDataOverlayManager.prototype, "notifyObservers", { enumerable: false, configurable: true, writable: true, - value: function (newOptions) { - if (this.isCollaborative) this.shareDBManager.updateGlobalOptions(newOptions); + value: function () { + for (var _i = 0, _a = this.observers; _i < _a.length; _i++) { + var observer = _a[_i]; + observer.notify(); + } } - }); //Layout properties related functions + }); //This method is needed to calculate the alteration Types for each gene - Object.defineProperty(EditorActionsManager.prototype, "saveLayoutProperties", { + Object.defineProperty(GenomicDataOverlayManager.prototype, "getAlterationCountForPatient", { enumerable: false, configurable: true, writable: true, - value: function (newLayoutProps) { - if (this.isCollaborative) { - // Call a real time function that updated real time object and - // its callback (updateLayoutPropertiesCallback) will handle sync of this object - // across collaborators - this.shareDBManager.updateLayoutProperties(newLayoutProps); - } else { - this.layoutProperties = _.clone(newLayoutProps); + value: function (geneData) { + var count = 0; + + for (var altType in geneData) { + count++; } - } - }); - ; - Object.defineProperty(EditorActionsManager.prototype, "updateLayoutPropertiesCallback", { - enumerable: false, - configurable: true, - writable: true, - value: function (op) { - var newLayoutProps = op.li; - this.layoutProperties = _.clone(newLayoutProps); - modals_LayoutProperties.layoutProperties = _.clone(this.layoutProperties); //Notify observers to reflect changes on colalborative object to the views - this.notifyObservers(); + return count; } - }); - ; - Object.defineProperty(EditorActionsManager.prototype, "performLayout", { + }); //These methods are created to be used in CbioPortal PatientView they are not used + //in ResultView Page or PathwayMapper Editor + + Object.defineProperty(GenomicDataOverlayManager.prototype, "showPatientData", { enumerable: false, configurable: true, writable: true, value: function () { - this.undoRedoManager.do("layout", { - options: this.layoutProperties, - eles: null, - zoom: this.cy.zoom(), - pan: this.cy.pan() + var _this = this; + + var self = this; + var data = this.patientData; // const genomicDataBoxCount = 3 //this.countVisibleGenomicDataByType(); //CHANGE + + var genomicDataBoxCount = data.geneticTrackData ? data.geneticTrackData.length : 3; + + if (genomicDataBoxCount < 1) { + // Hide all genomic data and return + this.hideGenomicData(); + return; + } + + this.cy.style().selector('node[type="GENE"]') // It used to change the width of nodes only locally + .style('width', function (ele) { + return _this.getRequiredWidthForGenomicData(genomicDataBoxCount); + }).style('text-margin-y', function (ele) { + var nodeLabel = ele.data('name'); // If there is no genomic data for this node return ! + + if (!(nodeLabel in data)) { + return 0; + } // Else shift label in Y axis + + + return -15; + }).style('background-image', function (ele) { + var x = encodeURIComponent( // self.generateSVGForPatientNode(ele, data).outerHTML + self.generateOncoprintForPatientNode(ele).outerHTML); + + if (x === 'undefined') { + return 'none'; + } + + var dataURI = 'data:image/svg+xml;utf8,' + x; + return dataURI; + }).update(); + this.cy.on('mouseover', 'node[type="GENE"]', function (event) { + var node = event.target || event.cyTarget; + var nodeLabel = node.data('name'); + + if (!data[nodeLabel]) { + return; + } + + node.qtip({ + content: { + text: function () { + return self.generateHTMLContentForNodeTooltip(node, data); + } + }, + style: { + classes: 'qtip-light qtip-rounded' + }, + show: { + event: 'showqtipevent' + }, + hide: { + event: 'mouseout' + } + }, event); + node.trigger('showqtipevent'); }); } - }); - ; //Node Related Functions + }); //Every mutation type has a unique color coded. This method is used to retrieve the colors - Object.defineProperty(EditorActionsManager.prototype, "addNode", { + Object.defineProperty(GenomicDataOverlayManager.prototype, "getOncoprintColors", { enumerable: false, configurable: true, writable: true, - value: function (nodeData, posData) { - if (this.isCollaborative) { - console.log("Add node to DB"); - this.addNewNodeToShareDB(nodeData, posData); + value: function (selectedGene) { + var oncoprintColors = { + Missense_Mutation: 'rgb(0,128,0)', + inframe: '#993404', + truncating: '#000000', + Fusion: 'rgb(139,0,201)', + AMP: 'rgb(255,0,0)', + gain: '#ffb6c1', + heatloss: '#8fd8d8', + homdel: 'rgb(0,0,255)', + DeepDel: 'rgb(0,0,255)', + "5'Flank": 'rgb(207,88,188)', + in_frame_del: 'rgb(166,128,40)' + }; + + if (oncoprintColors[selectedGene] !== undefined) { + return oncoprintColors[selectedGene]; } else { - this.addNodetoCy(nodeData, posData); - } - } - }); - ; - Object.defineProperty(EditorActionsManager.prototype, "addNodes", { - enumerable: false, - configurable: true, - writable: true, - value: function (nodes) { - for (var i in nodes) { - this.addNode(nodes[i].data, nodes[i].position); + //Types are not on the list corresponds to black + return 'rgb(0,0,0)'; } } }); - ; - Object.defineProperty(EditorActionsManager.prototype, "addNodesCy", { + Object.defineProperty(GenomicDataOverlayManager.prototype, "generateSVGForPatientNode", { enumerable: false, configurable: true, writable: true, - value: function (nodes) { - console.log("From EAM/addNodesCy"); - console.log(nodes); - var nodeArr = []; + value: function (ele, patientData) { + //Here we should use the parameter patientData when calculating the expressions + var genomicDataBoxCount = this.countVisibleGenomicDataByType(); // Experimental data overlay part ! - for (var i in nodes) { - var nodeData = nodes[i].data; - var posData = nodes[i].position; - var newNode = { - group: "nodes", - data: nodeData, - position: {} - }; + var dataURI = 'data:image/svg+xml;utf8,'; + var svgNameSpace = 'http://www.w3.org/2000/svg'; //nodeLabel refers to the nodeLabels in the overlay data - if (nodeData.parent === undefined) { - delete newNode.data.parent; - } + var nodeLabel = ele.data('name'); // If there is no genomic data for this node return ! - if (posData) { - newNode.position = { - x: posData.x, - y: posData.y - }; - } + if (!(nodeLabel in patientData)) { + return dataURI; + } //this parameter refers to the count of alteration types for each gene - nodeArr[i] = newNode; - } - this.cy.add(nodeArr); - this.cy.nodes().updateCompoundBounds(); - } - }); - ; - Object.defineProperty(EditorActionsManager.prototype, "addNodetoCy", { - enumerable: false, - configurable: true, - writable: true, - value: function (nodeData, posData) { - var newNode = { - group: "nodes", - data: nodeData, - position: {} + var alterationBoxCount = this.getAlterationCountForPatient(patientData[nodeLabel]); + var eleBBox = ele.boundingBox(); + var svg = document.createElementNS(svgNameSpace, 'svg'); //this parameter is set to 12 since there are 12 different possiblities for types + + var term = alterationBoxCount > 12 ? alterationBoxCount - 12 : 0; + var reqWidth = 150 + term * 35; + var overlayRecBoxW = reqWidth - 10; + var overlayRecBoxH = 25; // It seems this should be set according to the node size ! + + svg.setAttribute('width', reqWidth); + svg.setAttribute('height', eleBBox.h); // This is important you need to include this to succesfully render in cytoscape.js! + + svg.setAttribute('xmlns', svgNameSpace); // Overlay Data Rect + + var overLayRectBBox = { + w: overlayRecBoxW, + h: overlayRecBoxH, + x: reqWidth / 2 - overlayRecBoxW / 2, + y: eleBBox.h / 2 + overlayRecBoxH / 2 - 18 }; + var genomicBoxCounter = 0; //required width is calculated for each gene since box count is different for each gene - if (nodeData.parent === undefined) { - delete newNode.data.parent; - } + for (var j in patientData[nodeLabel]) { + var genomicAlterationData = patientData[nodeLabel]; + var alterationType = j; - if (posData) { - newNode.position = { - x: posData.x, - y: posData.y - }; - } //his.cy.add(newNode); + if (!this.visibleGenomicDataMapByType[nodeLabel]) { + continue; + } //get the color string corresponding to the alterationType - this.cy.nodes().updateCompoundBounds(); - this.undoRedoManager.do("add", newNode); //Width was not properly updated only by changing data property + var colorString = this.getOncoprintColors(alterationType); - var thatEle = this.cy.getElementById(nodeData.id); - thatEle.style('width', thatEle.data('w')); - } - }); - ; - Object.defineProperty(EditorActionsManager.prototype, "shareDBNodeAddRemoveEventCallBack", { - enumerable: false, - configurable: true, - writable: true, - value: function (op) { - console.log("shareDBNodeAddRemoveEventCallBack"); - console.log(op); //Get real time node object and sync it to node addition or removal + if (genomicAlterationData[alterationType] !== undefined) { + genomicDataRectangleGeneratorPatient(overLayRectBBox.x + genomicBoxCounter * overLayRectBBox.w / alterationBoxCount, overLayRectBBox.y, overLayRectBBox.w / alterationBoxCount, overLayRectBBox.h, 100, svg, alterationType, colorString); + } else { + genomicDataRectangleGeneratorPatient(overLayRectBBox.x + genomicBoxCounter * overLayRectBBox.w / alterationBoxCount, overLayRectBBox.y, overLayRectBBox.w / alterationBoxCount, overLayRectBBox.h, null, svg, '', null); + } - var isRemove = Object.keys(op)[1] === 'od'; - var node = op.oi || op.od; //Removal Operation + genomicBoxCounter++; + } //This function differs from genomicRectangleGenerator. genomicDataRectangleGeneratorPatient + //has an extra parameter text. In patient view alterationTypes of genes are displayed instead of + //alteration percentage. Hence a text is sent to this method which is alterationType - if (isRemove) { - var nodeID = op.p[1]; //Remove element from existing graph - var cyEle = this.cy.$("#" + nodeID); - this.removeElementCy(cyEle); - this.cy.nodes().updateCompoundBounds(); - } //Addition Operation - else { - this.addNewNodeLocally(node); + function genomicDataRectangleGeneratorPatient(x, y, w, h, percent, parentSVG, text, colorString) { + if (percent) { + var isNegativePercent = percent < 0; // Rectangle Part + + var overlayRect = document.createElementNS(svgNameSpace, 'rect'); + overlayRect.setAttribute('x', x); + overlayRect.setAttribute('y', y); + overlayRect.setAttribute('width', w); + overlayRect.setAttribute('height', h); + overlayRect.setAttribute('style', 'stroke-width:1;stroke:rgb(0,0,0);opacity:1;fill:' + colorString + ';'); // Text Part + + var fontSize = 14; + var textLength = 4; + var xOffset = w / 2 - textLength * 4; + var yOffset = fontSize / 3; + var svgText = document.createElementNS(svgNameSpace, 'text'); + + if (colorString === 'rgb(0,0,0)') { + svgText.setAttribute('fill', 'white'); + } + + svgText.setAttribute('x', x + xOffset); + svgText.setAttribute('y', y + h / 2 + yOffset); + svgText.setAttribute('font-family', 'Arial'); + svgText.setAttribute('font-size', fontSize + ''); //first 4 letters of the alterationTypes are used + + svgText.innerHTML = text.substring(0, 4); + parentSVG.appendChild(overlayRect); + parentSVG.appendChild(svgText); + } else { + //Normally + colorString = 'rgb(210,210,210)'; } + } + + return svg; } }); - ; - Object.defineProperty(EditorActionsManager.prototype, "addNewNodeLocally", { + Object.defineProperty(GenomicDataOverlayManager.prototype, "generateOncoprintForPatientNode", { enumerable: false, configurable: true, writable: true, - value: function (realtimeNode) { - var nodeData = { - id: realtimeNode.id, - type: realtimeNode.type, - name: realtimeNode.name, - parent: realtimeNode.parent, - w: realtimeNode.w, - h: realtimeNode.h - }; + value: function (ele) { + // const dataURI = 'data:image/svg+xml;utf8,' + // nodeLabel refers to the nodeLabels in the overlay data + var patientData = this.patientData; + var nodeLabel = ele.data('name'); + var genomicData = patientData[nodeLabel]; + var svgNameSpace = 'http://www.w3.org/2000/svg'; + var svgElement = document.createElementNS(svgNameSpace, 'svg'); - if (realtimeNode.x != "undefined" && realtimeNode.y != "undefined") { - this.addNodetoCy(nodeData, { - x: realtimeNode.x, - y: realtimeNode.y - }); - } else { - // TODO: Amendment by Ziya - this.addNodetoCy(nodeData, null); + if (!genomicData) { + return { + outerHTML: '' + }; } - this.cy.nodes().updateCompoundBounds(); - } - }); - ; - Object.defineProperty(EditorActionsManager.prototype, "addNewNodeToShareDB", { - enumerable: false, - configurable: true, - writable: true, - value: function (nodeData, posData) { - this.shareDBManager.addNewNode(nodeData, posData); - } - }); - ; //Edge related functions + var ruleset = new external_oncoprintjs_["GeneticAlterationRuleSet"](genomicData.geneticTrackRuleSetParams); + var cellWidth = 6; + var cellPadding = 3; + var cellHeight = 23; + var cellVerticalPadding = 8; + var shapesPerDatum = ruleset.apply(genomicData.geneticTrackData, cellWidth, cellHeight); + shapesPerDatum.forEach(function (shapes, index) { + var offsetX = index * (cellWidth + cellPadding); // width + padding - Object.defineProperty(EditorActionsManager.prototype, "addEdge", { - enumerable: false, - configurable: true, - writable: true, - value: function (edgeData) { - if (this.isCollaborative) { - this.addNewEdgeShareDB(edgeData); - } else { - this.addNewEdgetoCy(edgeData); - } - } - }); - ; - Object.defineProperty(EditorActionsManager.prototype, "addEdges", { - enumerable: false, - configurable: true, - writable: true, - value: function (edges) { - for (var i in edges) { - this.addEdge(edges[i].data); - } - } - }); - ; - Object.defineProperty(EditorActionsManager.prototype, "addEdgesCy", { - enumerable: false, - configurable: true, - writable: true, - value: function (edges) { - var newEdges = []; + var offsetY = cellVerticalPadding; + var g = document.createElementNS(svgNameSpace, 'g'); + shapes.forEach(function (shape) { + return g.appendChild(Object(external_oncoprintjs_["shapeToSvg"])(shape, offsetX, offsetY)); + }); + svgElement.appendChild(g); + }); // It seems this should be set according to the node size ! - for (var i in edges) { - var newEdge = { - group: "edges", - data: edges[i].data - }; - newEdges.push(newEdge); - } + svgElement.setAttribute('width', ((cellWidth + cellPadding) * shapesPerDatum.length).toString()); + svgElement.setAttribute('height', (cellHeight + cellVerticalPadding).toString()); // This is important you need to include this to succesfully render in cytoscape.js! - console.log("From addEdgesCy"); - this.cy.add(newEdges); - } - }); - ; - Object.defineProperty(EditorActionsManager.prototype, "addNewEdgeShareDB", { - enumerable: false, - configurable: true, - writable: true, - value: function (edgeData) { - this.shareDBManager.addNewEdge(edgeData); + svgElement.setAttribute('xmlns', svgNameSpace); + return svgElement; } - }); - ; - Object.defineProperty(EditorActionsManager.prototype, "addNewEdgetoCy", { + }); // Mapping of alteration type keys to strings + // See: https://github.com/cBioPortal/cbioportal-frontend/blob/442e108208846255feb1ed5b309218cd44927fb9/src/shared/components/oncoprint/TooltipUtils.ts#L599 + + Object.defineProperty(GenomicDataOverlayManager.prototype, "getCNADisplayString", { enumerable: false, configurable: true, writable: true, - value: function (edgeData) { - var newEdge = { - group: "edges", - data: edgeData + value: function (alterationTypeKey) { + var disp_cna = { + '-2': 'HOMODELETED', + '-1': 'HETLOSS', + '1': 'GAIN', + '2': 'AMPLIFIED' }; - this.undoRedoManager.do("add", newEdge); + return disp_cna[alterationTypeKey]; } }); - ; - Object.defineProperty(EditorActionsManager.prototype, "shareDBEdgeAddRemoveEventCallBack", { + Object.defineProperty(GenomicDataOverlayManager.prototype, "generateSvgIconForSample", { enumerable: false, configurable: true, writable: true, - value: function (op) { - //Get real time node object and sync it to node addition or removal - var isRemove = Object.keys(op)[1] === 'od'; - var edge = op.oi || op.od; //Removal Operation - - if (isRemove) { - var edgeID = op.p[1]; //Remove element from existing graph - - var cyEle = this.cy.$("#" + edgeID); - this.removeElementCy(cyEle); - } //Addition Operation - else { - this.addNewEdgeLocally(edge); - } + value: function (iconColor, iconText) { + var html = '' + '' + '' + '' + '' + '' + iconText + '' + '' + ''; + return html; } }); - ; - Object.defineProperty(EditorActionsManager.prototype, "addNewElementsLocally", { + Object.defineProperty(GenomicDataOverlayManager.prototype, "generateHTMLContentForNodeTooltip", { enumerable: false, configurable: true, writable: true, - value: function (realTimeNodeArray, realTimeEdgeArray) { - var nodeList = []; - var nodeMap = {}; + value: function (ele, patientData) { + var _this = this; - for (var i in realTimeNodeArray) { - var realTimeNode = realTimeNodeArray[i]; - var nodeID = realTimeNode.id; //Added for backward compatibility when width was not defined + var tooltipMaxHeight = '200px'; + var tooltipMaxWidth = '200px'; + var marginBetweenSamples = '10px'; + var sampleIconColorMap = patientData.sampleColors; + var sampleIndexMap = patientData.sampleIndex; + var nodeLabel = ele.data('name'); + var data = patientData[nodeLabel]; // Outer wrapper for the entire tooltip - var nodeWidth = realTimeNode.w == undefined ? 150 : realTimeNode.w; - var nodeHeight = realTimeNode.h == undefined ? 52 : realTimeNode.h; - var compoundMinWidth = realTimeNode.minWidth == undefined ? 0 : realTimeNode.minWidth; - var compoundMinWidthBiasLeft = realTimeNode.minWidthBiasLeft == undefined ? 0 : realTimeNode.minWidthBiasLeft; - var compoundMinWidthBiasRight = realTimeNode.minWidthBiasRight == undefined ? 0 : realTimeNode.minWidthBiasRight; - var compoundMinHeight = realTimeNode.minHeight == undefined ? 0 : realTimeNode.minHeight; - var compoundMinHeightBiasTop = realTimeNode.minHeightBiasTop == undefined ? 0 : realTimeNode.minHeightBiasTop; - var compoundMinHeightBiasBottom = realTimeNode.minHeightBiasBottom == undefined ? 0 : realTimeNode.minHeightBiasBottom; - var nodeData = { - group: 'nodes', - // TODO: Amendment by Ziya - position: {}, - data: { - id: nodeID, - type: realTimeNode.type, - name: realTimeNode.name, - parent: realTimeNode.parent, - w: nodeWidth, - h: nodeHeight - }, - style: { - 'width': nodeWidth, - 'height': nodeHeight, - 'min-width': compoundMinWidth, - 'min-width-bias-left': compoundMinWidthBiasLeft, - 'min-width-bias-right': compoundMinWidthBiasRight, - 'min-height': compoundMinHeight, - 'min-height-bias-top': compoundMinHeightBiasTop, - 'min-height-bias-bottom': compoundMinHeightBiasBottom - } - }; + var wrapper = external_jquery_default()('
'); + wrapper.css({ + 'max-width': tooltipMaxWidth, + 'max-height': tooltipMaxHeight, + 'word-wrap': 'break-word', + 'overflow-y': 'auto' + }); + data.geneticTrackData.forEach(function (sample, sampleIndex) { + var sampleId = sample.sample; + var iconColor = sampleIconColorMap[sampleId]; + var iconText = (sampleIndexMap[sampleId] + 1).toString(); - if (nodeData.data.parent === undefined) { - delete nodeData.data.parent; - } + var sampleIconSvgHTML = _this.generateSvgIconForSample(iconColor, iconText); - if (realTimeNode.x && realTimeNode.y) { - nodeData.position = { - x: realTimeNode.x, - y: realTimeNode.y - }; - } + var margin = sampleIndex > 0 ? marginBetweenSamples : '0px'; // Inner wrapper for a single sample - nodeMap[nodeID] = nodeData; - nodeList.push(nodeData); - } + var sampleWrapper = external_jquery_default()('
'); + sampleWrapper.css({ + 'margin-top': margin + }); + var sampleData = sample.data; + var mutationInfo = []; + var cnaInfo = []; + var fusionInfo = []; + sampleData.forEach(function (data) { + var geneSymbol = data.gene.hugoGeneSymbol; - var edgeList = []; + if (sample.disp_mut && data.proteinChange && data.mutationType !== 'Fusion') { + var proteinChange = data.proteinChange; + mutationInfo.push({ + gene: geneSymbol, + proteinChange: proteinChange + }); + } - for (var i in realTimeEdgeArray) { - var edge = realTimeEdgeArray[i]; - var edgeID = edge.id; //If source and and target is somehow lost in remote model do not create this edge + if (sample.disp_cna && data.alteration) { + var cnaLabelKey = data.alteration; - if (!(edge.source in nodeMap && edge.target in nodeMap)) continue; - var edgeData = { - group: 'edges', - data: { - id: edgeID, - type: edge.type, - source: edge.source, - target: edge.target, - pubmedIDs: edge.pubmedIDs, - name: edge.name, - bendPointPositions: edge.bendPoint - } - }; - edgeList.push(edgeData); - } + var cnaLabel = _this.getCNADisplayString(cnaLabelKey); - this.cy.add(nodeList); - this.cy.add(edgeList); - this.edgeEditing.initBendPoints(this.cy.edges()); - this.cy.nodes().updateCompoundBounds(); + cnaInfo.push({ + gene: geneSymbol, + cnaLabel: cnaLabel + }); + } + + if (sample.disp_fusion && data.proteinChange && data.mutationType === 'Fusion') { + var proteinChange = data.proteinChange; + fusionInfo.push({ + gene: geneSymbol, + proteinChange: proteinChange + }); + } + }); // Prepare HTML for tooltip + + var mutationInfoHTML = mutationInfo.length > 0 ? 'Mutation: ' : ''; + var cnaInfoHTML = cnaInfo.length > 0 ? 'CNA: ' : ''; + var fusionInfoHTML = fusionInfo.length > 0 ? 'Fusion: ' : ''; + mutationInfo.forEach(function (mutation, index) { + mutationInfoHTML += '' + mutation.gene + ' ' + mutation.proteinChange + ''; + + if (index !== mutationInfo.length - 1) { + mutationInfoHTML += ', '; + } else { + mutationInfoHTML += '
'; + } + }); + cnaInfo.forEach(function (cna, index) { + cnaInfoHTML += '' + cna.gene + ' ' + cna.cnaLabel + ''; + + if (index !== cnaInfo.length - 1) { + cnaInfoHTML += ', '; + } else { + cnaInfoHTML += '
'; + } + }); + fusionInfo.forEach(function (fusion, index) { + fusionInfoHTML += '' + fusion.gene + ' ' + fusion.proteinChange + ''; + + if (index !== fusionInfo.length - 1) { + fusionInfoHTML += ', '; + } else { + fusionInfoHTML += '
'; + } + }); + var sampleIdHTML = ' ' + sampleId + '' + '
'; + sampleWrapper.append(external_jquery_default()('
' + sampleIconSvgHTML + sampleIdHTML + mutationInfoHTML + cnaInfoHTML + fusionInfoHTML + +'
')); + wrapper.append(sampleWrapper); + }); + return wrapper; } }); - Object.defineProperty(EditorActionsManager.prototype, "addNewEdgeLocally", { + return GenomicDataOverlayManager; +}(); + +/* harmony default export */ var managers_GenomicDataOverlayManager = (GenomicDataOverlayManager_GenomicDataOverlayManager); +// CONCATENATED MODULE: ./src/managers/EditorActionsManager.tsx +var __assign = undefined && undefined.__assign || function () { + __assign = Object.assign || function (t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + + return t; + }; + + return __assign.apply(this, arguments); +}; + +var EditorActionsManager_decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { + var c = arguments.length, + r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, + d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; + + + + + + +var _ = __webpack_require__(7); + +var EditorActionsManager_EditorActionsManager = +/** @class */ +function () { + function EditorActionsManager(isCollaborative, shareDBManager, cyInst, isCBioPortal, undoRedoManager, portalAccessor, profiles) { + Object.defineProperty(this, "cy", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "genomicDataOverlayManager", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "edgeEditing", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "selectedNodeStack", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "layoutProperties", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "FIT_CONSTANT", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "observers", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "svgExporter", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "undoRedoManager", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "isCbioPortal", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "isCollaborative", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "shareDBManager", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "portalAccessor", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "profiles", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); // Set cy instance and set real time manager reference if collaborative mode + + Object(external_mobx_["makeObservable"])(this); + this.cy = cyInst; + this.isCollaborative = isCollaborative; + this.isCbioPortal = isCBioPortal; + this.profiles = profiles; + var edgeEditingOptions = { + // this function specifies the positions of bend points + bendPositionsFunction: function (ele) { + return ele.data('bendPointPositions'); + }, + // whether to initilize bend points on creation of this extension automatically + initBendPointsAutomatically: true, + // whether the bend editing operations are undoable (requires cytoscape-undo-redo.js) + undoable: true, + // the size of bend shape is obtained by multipling width of edge with this parameter + bendShapeSizeFactor: 6, + // whether to start the plugin in the enabled state + enabled: !this.isCbioPortal, + // title of add bend point menu item (User may need to adjust width of menu items according to length of this option) + addBendMenuItemTitle: "Add Bend Point", + // title of remove bend point menu item (User may need to adjust width of menu items according to length of this option) + removeBendMenuItemTitle: "Remove Bend Point", + handleReconnectEdge: this.reconnectEdge.bind(this) + }; + this.edgeEditing = this.cy.edgeEditing(edgeEditingOptions); + this.portalAccessor = portalAccessor; + + if (this.isCollaborative) { + this.shareDBManager = shareDBManager; + } + + this.FIT_CONSTANT = 50; + this.layoutProperties = _.clone(EditorActionsManager.defaultLayoutProperties); + this.observers = []; + this.genomicDataOverlayManager = new managers_GenomicDataOverlayManager(this.cy); + this.svgExporter = new utils_SVGExporter(this.edgeEditing, this); + this.selectedNodeStack = {}; + this.undoRedoManager = undoRedoManager; + this.undoRedoManager.action("changePositions", this.doChangePosition, this.undoChangePosition); + this.undoRedoManager.action("changeNodeSize", this.doChangeNodeSize, this.undoChangeNodeSize); + this.undoRedoManager.action("changeCompoundSize", this.doChangeCompoundSize, this.undoChangeCompoundSize); + this.undoRedoManager.action("changeName", this.doChangename, this.undoChangeName); + this.undoRedoManager.action("hideNode", this.doHide, this.undoHide); + this.undoRedoManager.action("showAllNodes", this.doShow, this.undoShow); // HighlightOthers is the type of highlight from the menu and by searching, while highlightInvalidGenes is for only invalid genes + + this.undoRedoManager.action("highlightInvalidGenes", this.doHighlightInvalidGenes, this.undoHighlightInvalidGenes); + this.undoRedoManager.action("removeHighlightInvalidGenes", this.undoHighlightInvalidGenes, this.doHighlightInvalidGenes); + this.undoRedoManager.action("highlightOthers", this.doHighlight, this.undoHighlight); + this.undoRedoManager.action("removeOtherHighlight", this.undoHighlight, this.doHighlight); + } + + ; + Object.defineProperty(EditorActionsManager.prototype, "setProfile", { enumerable: false, configurable: true, writable: true, - value: function (edge) { - var edgeData = { - id: edge.id, - type: edge.type, - source: edge.source, - target: edge.target, - pubmedIDs: edge.pubmedIDs, - name: edge.name, - bendPointPositions: edge.bendPoint - }; - this.addNewEdgetoCy(edgeData); - this.edgeEditing.initBendPoints(this.cy.getElementById(edge.id)); + value: function (index, profile) { + this.profiles[index] = profile; } }); - ; - Object.defineProperty(EditorActionsManager.prototype, "reconnectEdge", { + Object.defineProperty(EditorActionsManager.prototype, "addProfile", { enumerable: false, configurable: true, writable: true, - value: function (sourceID, targetID, edgeData) { - if (this.isCollaborative) { - var edge = this.cy.getElementById(edgeData.id); - this.reconnectEdgeInShareDB(sourceID, targetID, edgeData); - } else { - var location = { - source: sourceID, - target: targetID - }; - var edge = this.cy.getElementById(edgeData.id); - edge.move(location); - } - - return this.cy.getElementById(edgeData.id); + value: function (profile) { + this.profiles.push(profile); } }); - ; - Object.defineProperty(EditorActionsManager.prototype, "reconnectEdgeInShareDB", { + Object.defineProperty(EditorActionsManager.prototype, "removeProfiles", { enumerable: false, configurable: true, writable: true, - value: function (sourceID, targetID, edgeData) { - this.shareDBManager.reconnectEdge(sourceID, targetID, edgeData); + value: function () { + this.profiles.length = 0; } }); - ; //Removal functions - - Object.defineProperty(EditorActionsManager.prototype, "removeElement", { + Object.defineProperty(EditorActionsManager.prototype, "handleChangePositionByAlignment", { enumerable: false, configurable: true, writable: true, - value: function (ele) { - if (this.isCollaborative) { - this.removeElementsFromShareDB(ele); - } else { - this.removeElementsCy(ele); - } - } + value: function (movedNodeArr) { + if (this.isCollaborative) this.shareDBManager.changeElementsPositionByAlignment(movedNodeArr);else this.undoRedoManager.do("changePositions", movedNodeArr); + } }); ; - Object.defineProperty(EditorActionsManager.prototype, "removeElementCy", { + /* + * Undo redo for changing positions of nodes via programatically (node.position) + * **/ + + Object.defineProperty(EditorActionsManager.prototype, "doChangePosition", { enumerable: false, configurable: true, writable: true, - value: function (ele) { - this.undoRedoManager.do("remove", ele); + value: function (movedNodes) { + var newMovedNodes = []; + + for (var i = 0; i < movedNodes.length; i++) { + var currentNodePosition = { + x: movedNodes[i].node.position().x, + y: movedNodes[i].node.position().y + }; + newMovedNodes.push({ + node: movedNodes[i].node, + oldPosition: currentNodePosition, + nextPosition: movedNodes[i].nextPosition + }); + movedNodes[i].node.position(movedNodes[i].nextPosition); + } + + return newMovedNodes; } }); ; - Object.defineProperty(EditorActionsManager.prototype, "removeElementsCy", { + Object.defineProperty(EditorActionsManager.prototype, "undoChangePosition", { enumerable: false, configurable: true, writable: true, - value: function (ele) { - this.undoRedoManager.do("remove", ele); + value: function (movedNodes) { + var newMovedNodes = []; + + for (var i = 0; i < movedNodes.length; i++) { + var currentNodePosition = { + x: movedNodes[i].node.position().x, + y: movedNodes[i].node.position().y + }; + newMovedNodes.push({ + node: movedNodes[i].node, + oldPosition: movedNodes[i].oldPosition, + nextPosition: currentNodePosition + }); + movedNodes[i].node.position(movedNodes[i].oldPosition); + } + + return newMovedNodes; } }); ; - Object.defineProperty(EditorActionsManager.prototype, "removeElementsFromShareDB", { + Object.defineProperty(EditorActionsManager.prototype, "changeNodePositionsByArrows", { enumerable: false, configurable: true, writable: true, - value: function (eles) { - var self = this; - eles.forEach(function (ele) { - self.shareDBManager.removeElement(ele.id()); - }); + value: function (selectedNodes) { + if (this.isCollaborative) this.shareDBManager.changeNodePositionsShareDB(selectedNodes); //resize-node extension already deals for the movement in local mode } }); ; - Object.defineProperty(EditorActionsManager.prototype, "removeElementFromShareDB", { + /* + * Undo redo for changing size of nodes + * **/ + + Object.defineProperty(EditorActionsManager.prototype, "doChangeNodeSize", { enumerable: false, configurable: true, writable: true, - value: function (ele) { - this.shareDBManager.removeElement(ele.id()); + value: function (args) { + args.ele.data('w', args.newWidth); + args.ele.data('h', args.newHeight); + args.ele.style('width', args.newWidth); + args.ele.style('height', args.newHeight); + return args; } }); ; - Object.defineProperty(EditorActionsManager.prototype, "changeParents", { + Object.defineProperty(EditorActionsManager.prototype, "undoChangeNodeSize", { enumerable: false, configurable: true, writable: true, - value: function (eles, newParentId) { - if (this.isCollaborative) { - this.changeParentShareDB(eles, newParentId); - } else { - var parentData = newParentId ? newParentId : null; // Old manual way to change parents in local mode - //this.changeParentCy(eles, newParentId); - //Save element's previous width & height in dim array - - var dim_1 = []; - var id_1 = []; - eles.forEach(function (ele) { - var parameters = { - id: ele.id(), - width: ele.style("width"), - height: ele.style("height") - }; - dim_1.push(parameters); - id_1.push(ele.id()); - }); - console.log(parentData); - var parentElem = this.cy.getElementById(parentData); - var param = { - firstTime: true, - parentData: parentData, - nodes: eles, - posDiffX: !parentData ? 0 : parentElem.position('x') - eles[0].position('x'), - posDiffY: !parentData ? 0 : parentElem.position('y') - eles[0].position('y') - }; - this.undoRedoManager.do('changeParent', param); - console.log(this.undoRedoManager.getUndoStack()); //The elements after change parent operation are different so we find them by using the saved ids - // and add them to the collection - - var collection = this.cy.collection(); - - for (var i in id_1) { - var elementById = this.cy.getElementById(id_1[i]); - collection = collection.add(elementById); - } - - console.log(collection); //Set their previous size to the new elements in the collection - - collection.forEach(function (ele, i) { - if (ele.id() == dim_1[i].id) ele.style("width", dim_1[i].width); - ele.style("height", dim_1[i].height); - }); - } + value: function (args) { + args.ele.data('w', args.oldWidth); + args.ele.data('h', args.oldHeight); + args.ele.style('width', args.oldWidth); + args.ele.style('height', args.oldHeight); + return args; } }); ; - Object.defineProperty(EditorActionsManager.prototype, "changeParentShareDB", { + /* + * Undo redo for changing size of compounds + * **/ + + Object.defineProperty(EditorActionsManager.prototype, "doChangeCompoundSize", { enumerable: false, configurable: true, writable: true, - value: function (eles, newParentId) { - var classRef = this; - - function getTopLevelParents(eles) { - var tpMostNodes = classRef.cy.collection(); - var parentMap = {}; //Get all parents - - eles.forEach(function (node) { - if (node.isParent()) parentMap[node.id()] = node; - }); //Get all parents - - eles.forEach(function (node) { - var nodeParent = node.parent(); - if (parentMap[nodeParent.id()] === undefined) tpMostNodes = tpMostNodes.union(node); - }); - return tpMostNodes; - } - - var NodeObj = - /** @class */ - function () { - function NodeObj(nodeObj) { - Object.defineProperty(this, "nodeRef", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(this, "children", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - this.nodeRef = nodeObj; - this.children = []; - } - - return NodeObj; - }(); - - var connectedEdges = eles.connectedEdges(); // Traverses given elements and constructs subgraph relations - // creates a nested structure into rootnodeObj - - function traverseNodes(eles, rootNodeObj) { - eles.forEach(function (ele) { - connectedEdges = connectedEdges.union(ele.connectedEdges()); - - if (ele.isParent()) { - rootNodeObj.children.push(new NodeObj(ele)); - var lengthOfChildrenArray = rootNodeObj.children.length; - traverseNodes(ele.children(), rootNodeObj.children[lengthOfChildrenArray - 1]); - } else { - rootNodeObj.children.push(new NodeObj(ele)); - } - }); - } //Create new collection - - - var topMostNodes = getTopLevelParents(eles); - var rootNodeR = new NodeObj(null); - traverseNodes(topMostNodes, rootNodeR); - this.shareDBManager.changeParent(rootNodeR, newParentId, connectedEdges); + value: function (args) { + args.ele.style('min-width', args.newMinWidth); + args.ele.style('min-width-bias-left', args.newMinWidthBiasLeft); + args.ele.style('min-width-bias-right', args.newMinWidthBiasRight); + args.ele.style('min-height', args.newMinHeight); + args.ele.style('min-height-bias-top', args.newMinHeightBiasTop); + args.ele.style('min-height-bias-bottom', args.newMinHeightBiasBottom); + return args; } }); ; - Object.defineProperty(EditorActionsManager.prototype, "changeParentCy", { + Object.defineProperty(EditorActionsManager.prototype, "undoChangeCompoundSize", { enumerable: false, configurable: true, writable: true, - value: function (eles, newParentId) { - var lockedNodes = {}; - var self = this; - - function removeNodes(nodes) { - //Get removed edges first - var removedEles = nodes.connectedEdges().remove(); - var children = nodes.children(); - - if (children != null && children.length > 0) { - children.forEach(function (childNode) { - lockedNodes[childNode.id()] = true; - }); - removedEles = removedEles.union(removeNodes(children)); - } - - removedEles = removedEles.union(nodes.remove()); - self.cy.nodes().updateCompoundBounds(); - return removedEles; + value: function (args) { + if (args.oldMinWidth == undefined) { + args.ele.style('min-width', 0); + args.ele.style('min-width-bias-left', 0); + args.ele.style('min-width-bias-right', 0); + } else { + args.ele.style('min-width', args.oldMinWidth); + args.ele.style('min-width-bias-left', args.oldMinWidthBiasLeft); + args.ele.style('min-width-bias-right', args.oldMinWidthBiasRight); } - var removedEles = removeNodes(eles); - this.undoRedoManager.do("remove", removedEles); - - for (var i = 0; i < removedEles.length; i++) { - var removedNode = removedEles[i]; //Just alter the parent id of corresponding nodes ! - - if (removedNode.isEdge() || lockedNodes[removedNode.id()]) { - continue; - } - - removedNode._private.data.parent = newParentId; - - if (removedNode._private.parent) { - delete removedNode._private.parent; - } + if (args.oldMinHeight == undefined) { + args.ele.style('min-height', 0); + args.ele.style('min-height-bias-top', 0); + args.ele.style('min-height-bias-bottom', 0); + } else { + args.ele.style('min-height', args.oldMinHeight); + args.ele.style('min-height-bias-top', args.oldMinHeightBiasTop); + args.ele.style('min-height-bias-bottom', args.oldMinHeightBiasBottom); } - self.cy.add(removedEles); - this.undoRedoManager.do("add", removedEles); - self.cy.nodes().updateCompoundBounds(); + return args; } }); ; - Object.defineProperty(EditorActionsManager.prototype, "moveElements", { + Object.defineProperty(EditorActionsManager.prototype, "changeName", { enumerable: false, configurable: true, writable: true, - value: function (eles) { - var classRef = this; //Sync movement to real time api - + value: function (ele, newName) { if (this.isCollaborative) { - eles.forEach(function (ele) { - classRef.shareDBManager.moveElement(ele); - }); + this.shareDBManager.changeName(ele, newName); + } else { + this.changeNameCy(ele, newName); } } }); ; - Object.defineProperty(EditorActionsManager.prototype, "resizeElements", { + Object.defineProperty(EditorActionsManager.prototype, "changeNameCy", { enumerable: false, configurable: true, writable: true, - value: function (ele) { - if (this.isCollaborative) { - if (!ele.isParent()) { - var previousWidth = ele.width(); - var previousHeight = ele.height(); //Sync movement to real time api - - this.shareDBManager.resizeElement(ele, previousWidth, previousHeight); - } else { - var minWidth = ele.style('min-width'); - var minWidthBiasLeft = ele.style('min-width-bias-left'); - var minWidthBiasRight = ele.style('min-width-bias-right'); - var minHeight = ele.style('min-height'); - var minHeightBiasTop = ele.style('min-height-bias-top'); - var minHeightBiasBottom = ele.style('min-height-bias-bottom'); //Sync movement to real time api - - this.shareDBManager.resizeCompound(ele, minWidth, minWidthBiasLeft, minWidthBiasRight, minHeight, minHeightBiasTop, minHeightBiasBottom); - } - } + value: function (ele, newName) { + var currentName = ele.data('name'); + var args = { + ele: ele, + oldName: currentName, + newName: newName + }; + this.undoRedoManager.do('changeName', args); } }); ; - Object.defineProperty(EditorActionsManager.prototype, "mergeGraph", { + /* + * Undo redo for changing name of nodes + * **/ + + Object.defineProperty(EditorActionsManager.prototype, "doChangename", { enumerable: false, configurable: true, writable: true, - value: function (nodes, edges) { - if (this.isCollaborative) { - //Collaborative usage - this.shareDBManager.mergeGraph(nodes, edges); - } else { - //Local usage file load - this.mergeGraphCy(nodes, edges); - } - - this.fitGraph(); + value: function (args) { + var currentName = args.ele.data('name'); + var newArgs = { + ele: args.ele, + newName: args.newName, + oldName: currentName + }; + args.ele.data('name', args.newName); + args.ele.css('content', args.newName); + return newArgs; } }); ; - Object.defineProperty(EditorActionsManager.prototype, "mergeGraphCy", { + Object.defineProperty(EditorActionsManager.prototype, "undoChangeName", { enumerable: false, configurable: true, writable: true, - value: function (nodes, edges) { - //Define arrays and maps - var nodesToBeAdded = []; - var edgesToBeAdded = []; - var nodeMap = {}; //Iterate over nodes and find nodes that does not exist in current graph by looking their name - - for (var index in nodes) { - var ele = nodes[index]; - nodeMap[ele.data.id] = ele; - - if (this.cy.filter('node[name = "' + ele.data.name + '"]').length <= 0) { - delete ele.data.id; //TODO need to update parent ? - - nodesToBeAdded.push(ele); - } - } - - this.cy.add(nodesToBeAdded); //Iterate over all edges - - for (var index in edges) { - //Get corresponding source and target node in merge file - var ele = edges[index]; - var sourceNode = nodeMap[ele.data.source]; - var targetNode = nodeMap[ele.data.target]; //Check if there are nodes with same name in current graph - - var cySourceNode = this.cy.nodes('[name="' + sourceNode.data.name + '"]'); - var targetNode = this.cy.nodes('[name="' + targetNode.data.name + '"]'); - - if (cySourceNode.length > 0) { - ele.data.source = cySourceNode.id(); - } - - if (targetNode.length > 0) { - ele.data.target = targetNode.id(); - } - - if (targetNode.length < 0 && cySourceNode.length < 0) { - continue; - } - - var edgesBtw = this.cy.filter('edge[source = "' + cySourceNode.id() + '"][target = "' + targetNode.id() + '"]'); //We assume there could be one edge between source and target node with same type - - var isFound = false; - edgesBtw.forEach(function (edge) { - if (edge.data().type == ele.data.type) { - isFound = true; - return false; - } //TODO: AMENDMENT by Ziya - - - return true; - }); - - if (!isFound) { - delete ele.data.id; - edgesToBeAdded.push(ele); - } - } - - this.cy.add(edgesToBeAdded); + value: function (args) { + var currentName = args.ele.data('name'); + var newArgs = { + ele: args.ele, + newName: args.newName, + oldName: currentName + }; + args.ele.data('name', args.oldName); + args.ele.css('content', args.oldName); + return newArgs; } }); ; - Object.defineProperty(EditorActionsManager.prototype, "fitGraph", { + Object.defineProperty(EditorActionsManager.prototype, "hideSelectedNodes", { enumerable: false, configurable: true, writable: true, value: function () { - if (this.isCollaborative) { - this.cy.fit(this.FIT_CONSTANT); - var newState = { - zoomLevel: this.cy.zoom(), - panLevel: this.cy.pan() - }; - this.updateGlobalOptions(newState); - } else { - this.cy.fit(this.FIT_CONSTANT); - } + //Hides the selected elements + var sel = this.cy.nodes(":selected"); + var nodesToHide = sel; + var b = true; //Hides the parents if they have no children + + sel.parent().each(function (parent) { + b = true; + parent.children().each(function (ch) { + if (!ch.selected()) { + if (ch.visible()) b = false; + } + }); + if (b) nodesToHide = nodesToHide.add(parent); + }); + this.cy.elements(":selected").unselect(); + if (this.isCollaborative) this.shareDBManager.changeVisibility(nodesToHide, true);else this.undoRedoManager.do('hideNode', nodesToHide); } }); - Object.defineProperty(EditorActionsManager.prototype, "loadFile", { + ; + /* + * Undo redo for hiding nodes + * **/ + + Object.defineProperty(EditorActionsManager.prototype, "doHide", { enumerable: false, configurable: true, writable: true, - value: function (nodes, edges) { - if (this.isCollaborative) { - //Real time load graph - console.log("Real time load graph"); - this.loadfileShareDB(nodes, edges); - } else { - //Local usage file load - this.loadFileCy(nodes, edges); - } - - this.cy.edgeEditing('get').initBendPoints(this.cy.edges()); - this.fitGraph(); + value: function (args) { + args.hide(); + return args; } }); ; - Object.defineProperty(EditorActionsManager.prototype, "loadFileCy", { + Object.defineProperty(EditorActionsManager.prototype, "undoHide", { enumerable: false, configurable: true, writable: true, - value: function (nodes, edges) { - //Remove all elements - this.removeElementCy(this.cy.elements()); - this.addNodesCy(nodes); - this.addEdgesCy(edges); + value: function (args) { + args.show(); + return args; } }); ; - Object.defineProperty(EditorActionsManager.prototype, "loadfileShareDB", { + Object.defineProperty(EditorActionsManager.prototype, "showAllNodes", { enumerable: false, configurable: true, writable: true, - value: function (nodes, edges) { - this.shareDBManager.loadGraph(nodes, edges); + value: function () { + var hid = this.cy.nodes(":hidden"); + if (this.isCollaborative) this.shareDBManager.changeVisibility(hid, false);else this.undoRedoManager.do('showAllNodes', hid); } }); ; - Object.defineProperty(EditorActionsManager.prototype, "removeAllElements", { + /* + * Undo redo for showing all nodes + * **/ + + Object.defineProperty(EditorActionsManager.prototype, "doShow", { enumerable: false, configurable: true, writable: true, - value: function () { - if (this.isCollaborative) { - this.shareDBManager.removeAllElements(); - } else { - this.cy.remove(this.cy.elements()); - } + value: function (args) { + args.show(); + return args; } }); ; - Object.defineProperty(EditorActionsManager.prototype, "updateHighlight", { + Object.defineProperty(EditorActionsManager.prototype, "undoShow", { enumerable: false, configurable: true, writable: true, - value: function (ele, isHighlighted) { - if (isHighlighted) this.undoRedoManager.do('highlightOthers', ele);else this.undoRedoManager.do('removeOtherHighlight', ele); + value: function (args) { + args.hide(); + return args; } }); ; - Object.defineProperty(EditorActionsManager.prototype, "updateVisibility", { + Object.defineProperty(EditorActionsManager.prototype, "highlightElementsInitially", { enumerable: false, configurable: true, writable: true, - value: function (ele, isHidden) { - if (isHidden) ele.hide();else ele.show(); + value: function (invalidHighlightedGenesIDs, invalidGenesIDs, highlightedGenesIDs, highlightedEdgesIDs, hiddenGenesIDs) { + for (var i in invalidHighlightedGenesIDs) { + this.cy.$('#' + invalidHighlightedGenesIDs[i]).addClass('invalidGeneHighlight'); + } + + for (var i in invalidGenesIDs) { + this.cy.$('#' + invalidGenesIDs[i]).addClass('invalidGene'); + } + + for (var i in highlightedGenesIDs) { + this.cy.$('#' + highlightedGenesIDs[i]).addClass('highlightedNode'); + } + + for (var i in highlightedEdgesIDs) { + this.cy.$('#' + highlightedEdgesIDs[i]).addClass('highlightedEdge'); + } + + for (var i in hiddenGenesIDs) { + this.cy.$('#' + hiddenGenesIDs[i]).hide(); + } } }); ; - Object.defineProperty(EditorActionsManager.prototype, "updateElementCallback", { + Object.defineProperty(EditorActionsManager.prototype, "validateGenes", { enumerable: false, configurable: true, writable: true, - value: function (op) { - var ele = op.oi; - var eleID = ele.id; - var cyEle = this.cy.$("#" + eleID); - this.changeNameCy(cyEle, ele.name); - - if (cyEle.isNode()) { - //Width and height of simple nodes and compounds is changed differently - if (cyEle.isParent()) { - cyEle.style("min-width", ele.minWidth); - cyEle.style("min-width-bias-left", ele.minWidthBiasLeft); - cyEle.style("min-width-bias-right", ele.minWidthBiasRight); - cyEle.style("min-height", ele.minHeight); - cyEle.style("min-height-bias-top", ele.minHeightBiasTop); - cyEle.style("min-height-bias-bottom", ele.minHeightBiasBottom); - } else { - cyEle.data.w = ele.w; - cyEle.data.h = ele.h; - cyEle.style("width", ele.w); - cyEle.style("height", ele.h); //Position is changed only for simple nodes because the - //position of compounds is defined by simple nodes' position - - cyEle.position({ - x: ele.x, - y: ele.y - }); - } - - this.updateVisibility(cyEle, ele.isHidden); - this.updateHighlight(cyEle, ele.isHighlighted); - - if (ele.isInvalidGene) { - this.doHighlightInvalidGenes(cyEle); - } else { - this.undoHighlightInvalidGenes(cyEle); - } //Refresh grapples when the node being changed from another collaborator is selected in current window - // this.cy.nodeResize('get').refreshGrapples(); - - } else if (cyEle.isEdge()) { - var pubmedArray = ele.pubmedIDs; - cyEle.data('pubmedIDs', pubmedArray); - this.updateHighlight(cyEle, ele.isHighlighted); - var bendPoint = ele.bendPoint; - var numberOfBendPositions = cyEle.data('bendPointPositions').length; // Holds the number of bend positions in data before being updated - //If edge is reconnected - - if (ele.source !== cyEle.source().id() || ele.target !== cyEle.target().id()) { - var location = { - source: ele.source, - target: ele.target - }; - cyEle.move(location); //make sure that bend points are same - - this.updateEdgeBendPoints(cyEle); - } else { - cyEle.data('bendPointPositions', bendPoint); - if (numberOfBendPositions !== undefined && numberOfBendPositions > 0) this.edgeEditing.deleteSelectedBendPoint(cyEle, 0); - this.edgeEditing.initBendPoints(cyEle); - } - } + value: function () { + var geneSymbols = this.getGeneSymbols(); + this.portalAccessor.validateGenes(geneSymbols, this); } - }); - ; - Object.defineProperty(EditorActionsManager.prototype, "getGenomicDataSVG", { + }); //Get all gene symbols + + Object.defineProperty(EditorActionsManager.prototype, "getGeneSymbols", { enumerable: false, configurable: true, writable: true, - value: function (node) { - // @ts-ignore - return this.genomicDataOverlayManager.generateSVGForNode(node); + value: function () { + var geneSymbols = []; + this.cy.nodes().forEach(function (gene) { + if (gene.data().type === "GENE") geneSymbols.push(gene.data().name); + }); + return geneSymbols; } }); - Object.defineProperty(EditorActionsManager.prototype, "getOncoprintDataSVG", { + Object.defineProperty(EditorActionsManager.prototype, "highlightInvalidGenes", { enumerable: false, configurable: true, writable: true, - value: function (node) { - return this.genomicDataOverlayManager.generateOncoprintForPatientNode(node); + value: function (validGeneSymbols) { + if (this.isCollaborative) { + var invalidGenes = []; + this.cy.nodes().forEach(function (gene) { + if (gene.data().type === "GENE") { + var geneName = gene.data().name; + if (validGeneSymbols.indexOf(geneName) < 0) invalidGenes.push(gene.id()); + } + }); + this.shareDBManager.changeHighlightInvalidGenes(invalidGenes, true); // TODO: Amendment by Ziya + + /* + if (invalidGenes.length > 0) + this.notificationManager.createNotification("Invalid genes are highlighted","fail"); + else + this.notificationManager.createNotification("All gene symbols are valid","success");*/ + } else { + var highlightedGenes = this.cy.collection(); + this.cy.nodes().forEach(function (gene) { + if (gene.data().type === "GENE") { + var geneName = gene.data().name; + if (validGeneSymbols.indexOf(geneName) < 0) highlightedGenes = highlightedGenes.add(gene); + } + }); // TODO: Amendment by Ziya + + /* + if (highlightedGenes.size() > 0) + this.notificationManager.createNotification("Invalid genes are highlighted","fail"); + else + this.notificationManager.createNotification("All gene symbols are valid","success");*/ + + var nodesToAddInvalidHighlight = this.cy.collection(); + highlightedGenes.forEach(function (ele) { + if (!ele.hasClass('invalidGeneHighlight') && !ele.hasClass('invalidGene')) nodesToAddInvalidHighlight = nodesToAddInvalidHighlight.union(ele); + }); + this.undoRedoManager.do('highlightInvalidGenes', nodesToAddInvalidHighlight); + } } }); - Object.defineProperty(EditorActionsManager.prototype, "removeGenomicData", { + Object.defineProperty(EditorActionsManager.prototype, "removeInvalidGeneHighlights", { enumerable: false, configurable: true, writable: true, - value: function () { + value: function (actions) { if (this.isCollaborative) { - this.shareDBManager.clearGenomicData(); + var geneIDs = []; + this.cy.nodes().forEach(function (gene) { + if (gene.data().type === "GENE") { + if (gene.hasClass('invalidGeneHighlight') || gene.hasClass('invalidGene')) geneIDs.push(gene.id()); + } + }); + this.shareDBManager.changeHighlightInvalidGenes(geneIDs, false); } else { - // TODO wrap this in afunction in genomic data overlay manager - this.genomicDataOverlayManager.clearAllGenomicData(); - this.genomicDataOverlayManager.hideGenomicData(); - this.genomicDataOverlayManager.notifyObservers(); + var nodesToRemoveInvalidHighlight = this.cy.collection(); + this.cy.nodes().forEach(function (ele) { + if (ele.hasClass('invalidGeneHighlight') || ele.hasClass('invalidGene')) nodesToRemoveInvalidHighlight = nodesToRemoveInvalidHighlight.union(ele); + }); + actions.push({ + name: "removeHighlightInvalidGenes", + param: nodesToRemoveInvalidHighlight + }); // this.undoRedoManager.do('removeHighlightInvalidGenes', nodesToRemoveInvalidHighlight); } } }); - Object.defineProperty(EditorActionsManager.prototype, "addGenomicData", { + Object.defineProperty(EditorActionsManager.prototype, "doHighlightInvalidGenes", { enumerable: false, configurable: true, writable: true, - value: function (genomicData) { - var groupID = this.getEmptyGroupID(); - console.log("genomicData"); - console.log(genomicData); - - if (this.isCollaborative) { - var parsedGenomicData = this.genomicDataOverlayManager.prepareGenomicDataShareDB(genomicData); - this.shareDBManager.addGenomicData(parsedGenomicData.genomicDataMap); - this.shareDBManager.groupGenomicData(Object.keys(parsedGenomicData.visibilityMap), groupID); - this.shareDBManager.addGenomicVisibilityData(parsedGenomicData.visibilityMap); - } else { - this.genomicDataOverlayManager.addGenomicDataLocally(genomicData, groupID); - } + value: function (args) { + args.each(function (n) { + if (n.hasClass('highlightedNode')) { + n.removeClass('highlightedNode'); + n.addClass("invalidGeneHighlight"); + } else n.addClass("invalidGene"); + }); + return args; } }); - Object.defineProperty(EditorActionsManager.prototype, "adjustVisibilityShareDB", { + ; + Object.defineProperty(EditorActionsManager.prototype, "undoHighlightInvalidGenes", { enumerable: false, configurable: true, writable: true, - value: function (profileId, isEnabled) { - var targetProfileIndex = this.profiles.map(function (profile) { - return profile.profileId; - }).indexOf(profileId); - this.profiles[targetProfileIndex].enabled = isEnabled; + value: function (args) { + args.each(function (n) { + if (n.hasClass('invalidGeneHighlight')) { + n.removeClass('invalidGeneHighlight'); + n.addClass("highlightedNode"); + } else n.removeClass("invalidGene"); + }); + return args; } }); - Object.defineProperty(EditorActionsManager.prototype, "addToProfiles", { + Object.defineProperty(EditorActionsManager.prototype, "highlightSelected", { enumerable: false, configurable: true, writable: true, - value: function (profileId) { - // Check if this profile already exists - if (this.profiles.map(function (profile) { - return profile.profileId; - }).includes(profileId)) { - return; - } - - this.profiles.push({ - profileId: profileId, - enabled: true + value: function () { + var sel = this.cy.elements(":selected"); + sel.unselect(); + var elementsToHighlight = this.cy.collection(); + sel.forEach(function (ele) { + if (!ele.hasClass('invalidGeneHighlight') && !ele.hasClass('highlightedNode') && !ele.hasClass('highlightedEdge')) elementsToHighlight = elementsToHighlight.union(ele); }); + if (this.isCollaborative) this.shareDBManager.changeHighlight(elementsToHighlight, true);else this.undoRedoManager.do('highlightOthers', elementsToHighlight); } }); - Object.defineProperty(EditorActionsManager.prototype, "addPortalGenomicData", { + ; + Object.defineProperty(EditorActionsManager.prototype, "highlightNeighbors", { enumerable: false, configurable: true, writable: true, - value: function (genomicData, groupID) { - if (this.isCollaborative) { - var parsedGenomicData = this.genomicDataOverlayManager.preparePortalGenomicDataShareDB(genomicData); - this.shareDBManager.addGenomicData(parsedGenomicData.genomicDataMap); - this.shareDBManager.groupGenomicData(Object.keys(parsedGenomicData.visibilityMap), groupID); - this.shareDBManager.addGenomicVisibilityData(parsedGenomicData.visibilityMap); - } else { - this.genomicDataOverlayManager.addPortalGenomicData(genomicData, groupID); - } + value: function () { + var sel = this.cy.elements(":selected"); + var neighbors = sel.neighborhood(); + neighbors = neighbors.union(sel); + neighbors.unselect(); + var elementsToHighlight = this.cy.collection(); + neighbors.forEach(function (ele) { + if (!ele.hasClass('invalidGeneHighlight') && !ele.hasClass('highlightedNode') && !ele.hasClass('highlightedEdge')) elementsToHighlight = elementsToHighlight.union(ele); + }); + if (this.isCollaborative) this.shareDBManager.changeHighlight(elementsToHighlight, true);else this.undoRedoManager.do('highlightOthers', elementsToHighlight); } }); - Object.defineProperty(EditorActionsManager.prototype, "shareDBGenomicDataHandler", { + ; + Object.defineProperty(EditorActionsManager.prototype, "highlightBySearch", { enumerable: false, configurable: true, writable: true, - value: function (op) { - var isRemove = Object.keys(op)[1] === 'od'; - var newData = op.oi; - var geneSymbol = op.p[1]; - - if (!isRemove) { - this.genomicDataOverlayManager.addGenomicDataWithGeneSymbol(geneSymbol, newData); - } // Removal - else { - this.genomicDataOverlayManager.removeGenomicDataWithGeneSymbol(geneSymbol); - } + value: function (args) { + if (this.isCollaborative) this.shareDBManager.changeHighlight(args, true);else this.undoRedoManager.do('highlightOthers', args); } }); - Object.defineProperty(EditorActionsManager.prototype, "shareDBGenomicDataGroupChangeHandler", { + ; + Object.defineProperty(EditorActionsManager.prototype, "removeOtherHighlight", { enumerable: false, configurable: true, writable: true, - value: function (op) { - var _this = this; + value: function (actions) { + var nodesToRemoveHighlight = this.cy.collection(); //TODO cytoscape selectors may provide more handy functionality instead of iterating over ! - var isRemove = Object.keys(op)[1] === 'od'; - var data = op.oi; - var key = op.p[1]; // Addition + this.cy.elements().forEach(function (ele) { + if (ele.hasClass('highlightedNode') || ele.hasClass('highlightedEdge') || ele.hasClass('invalidGeneHighlight')) nodesToRemoveHighlight = nodesToRemoveHighlight.add(ele); + }); + if (this.isCollaborative) this.shareDBManager.changeHighlight(nodesToRemoveHighlight, false);else actions.push({ + name: "removeOtherHighlight", + param: nodesToRemoveHighlight + }); // this.undoRedoManager.do('removeOtherHighlight', nodesToRemoveHighlight); + } + }); + ; + /* + * Undo redo for highlighting of nodes + * **/ - if (!isRemove) { - this.genomicDataOverlayManager.addGenomicGroupData(key, data); - console.log("key"); - console.log(key); - console.log(data); - - if (data.length !== 1) { - console.log("Grouped genomic data expected to be of length 1"); + Object.defineProperty(EditorActionsManager.prototype, "doHighlight", { + enumerable: false, + configurable: true, + writable: true, + value: function (args) { + args.each(function (n) { + if (n.isEdge()) n.addClass("highlightedEdge");else { + if (n.hasClass('invalidGene')) { + n.removeClass("invalidGene"); + n.addClass("invalidGeneHighlight"); + } else n.addClass("highlightedNode"); } - - data.forEach(function (profileId) { - _this.addToProfiles(profileId); - }); - } // //Removal - // else - // { - // - // } - - - this.genomicDataOverlayManager.showGenomicData(); - this.genomicDataOverlayManager.notifyObservers(); + }); + return args; } }); - Object.defineProperty(EditorActionsManager.prototype, "shareDBGenomicDataVisibilityHandler", { + ; + Object.defineProperty(EditorActionsManager.prototype, "undoHighlight", { enumerable: false, configurable: true, writable: true, - value: function (op) { - var data = op.oi; - var key = op.p[1]; - var isRemove = Object.keys(op)[1] === 'od'; // Addition - - if (!isRemove) { - this.genomicDataOverlayManager.addGenomicVisData(key, data); - this.adjustVisibilityShareDB(key, data); - } // Removal - else { - console.log("Removal from vis handler"); - this.genomicDataOverlayManager.removeGenomicVisData(); - this.profiles.length = 0; + value: function (args) { + args.each(function (n) { + if (n.isEdge()) n.removeClass("highlightedEdge");else { + if (n.hasClass('invalidGeneHighlight')) { + n.removeClass("invalidGeneHighlight"); + n.addClass("invalidGene"); + } else n.removeClass("highlightedNode"); } - - this.genomicDataOverlayManager.showGenomicData(); - this.genomicDataOverlayManager.notifyObservers(); + }); + return args; } }); - Object.defineProperty(EditorActionsManager.prototype, "resizeNodesToContent", { + ; + Object.defineProperty(EditorActionsManager.prototype, "removeAllHighlight", { enumerable: false, configurable: true, writable: true, - value: function (nodes) { + value: function () { + var actions = []; + this.removeInvalidGeneHighlights(actions); + this.removeOtherHighlight(actions); + this.cy.undoRedo().do("batch", actions); + } + }); + ; + Object.defineProperty(EditorActionsManager.prototype, "postLayout", { + enumerable: false, + configurable: true, + writable: true, + value: function () { if (this.isCollaborative) { - var visibleNumberOfData_1 = this.genomicDataOverlayManager.countVisibleGenomicDataByType(); - var labelWithData_1 = 148 + (visibleNumberOfData_1 - 3) * 36; - var rt_1 = this.shareDBManager; - nodes.forEach(function (ele) { - if (!ele.isParent()) { - var newWidth = 150; - var newHeight = 52; - - if (ele.data('name') != "") { - var labelLength = ele.style('label').length * 10 + 6; - newWidth = labelLength; - newHeight = 24; - } - - if (visibleNumberOfData_1 > 0) { - newHeight = 52; - - if (visibleNumberOfData_1 < 4) { - if (150 > newWidth) newWidth = 150; - } else { - if (labelWithData_1 > newWidth) newWidth = labelWithData_1; - } - } - - rt_1.setSizeOfElement(ele, newWidth, newHeight); - } else { - //Set the minWidth, minHeight and other properties of compound to 0 - rt_1.resizeCompound(ele, 0, 0, 0, 0, 0, 0); - } - }); - } else { - var ur = this.cy.undoRedo(); - var actions_1 = []; - var visibleNumberOfData_2 = this.genomicDataOverlayManager.countVisibleGenomicDataByType(); - var labelWithData_2 = 150 + (visibleNumberOfData_2 - 3) * 36; - nodes.forEach(function (ele) { - if (!ele.isParent()) { - var newWidth = 150; - var newHeight = 52; - - if (ele.data('name') != "") { - var labelLength = ele.style('label').length * 6 + 24; - newWidth = labelLength; - newHeight = 24; - } - - if (visibleNumberOfData_2 > 0) { - newHeight = 52; - - if (visibleNumberOfData_2 < 4) { - if (150 > newWidth) newWidth = 150; - } else { - if (labelWithData_2 > newWidth) newWidth = labelWithData_2; - } - } - - var args = { - ele: ele, - oldWidth: ele.width(), - newWidth: newWidth, - oldHeight: ele.height(), - newHeight: newHeight - }; - actions_1.push({ - name: "changeNodeSize", - param: args - }); - } else { - var args = { - ele: ele, - oldMinWidth: ele.style("min-width"), - newMinWidth: 0, - oldMinWidthBiasLeft: ele.style("min-width-bias-left"), - newMinWidthBiasLeft: 0, - oldMinWidthBiasRight: ele.style("min-width-bias-right"), - newMinWidthBiasRight: 0, - oldMinHeight: ele.style("min-height"), - newMinHeight: 0, - oldMinHeightBiasTop: ele.style("min-height-bias-top"), - newMinHeightBiasTop: 0, - oldMinHeightBiasBottom: ele.style("min-height-bias-bottom"), - newMinHeightBiasBottom: 0 - }; - actions_1.push({ - name: "changeCompoundSize", - param: args - }); - } + //Previously this.cy.nodes() was sent as an argument in moveElements function but it caused a problem when + // the compound node was moved before the child nodes + var movedNodes = this.cy.collection(); + var parentNodes = this.cy.collection(); + this.cy.nodes().forEach(function (node) { + if (!node.isParent()) movedNodes = movedNodes.add(node);else parentNodes = parentNodes.add(node); }); - ur.do("batch", actions_1); + this.moveElements(movedNodes); + this.moveElements(parentNodes); + var newState = { + zoomLevel: this.cy.zoom(), + panLevel: this.cy.pan() + }; + this.updateGlobalOptions(newState); } - - this.cy.nodeResize('get').refreshGrapples(); } }); ; - Object.defineProperty(EditorActionsManager, "defaultLayoutProperties", { - enumerable: true, + /* + * Gets the first empty index from the list in cloud model + * **/ + + Object.defineProperty(EditorActionsManager.prototype, "getEmptyGroupID", { + enumerable: false, configurable: true, writable: true, - value: { - name: 'cose-bilkent', - nodeRepulsion: 4500, - idealEdgeLength: 50, - edgeElasticity: 0.45, - nestingFactor: 0.1, - gravity: 0.25, - numIter: 2500, - tile: true, - animate: true, - randomize: false, - gravityRangeCompound: 1.5, - // Gravity force (constant) for compounds - gravityCompound: 1.0, - // Gravity range (constant) - gravityRange: 3.8, - // Amount of vertical space to put between degree zero nodes during tiling (can also be a function) - tilingPaddingVertical: 10, - // Amount of horizontal space to put between degree zero nodes during tiling (can also be a function) - tilingPaddingHorizontal: 10, - // Initial cooling factor for incremental layout - initialEnergyOnIncremental: 0.5, - animationDuration: 2000, - animationEasing: 'cubic-bezier(0.17,0.72,0.41,0.98)' + value: function () { + if (this.isCollaborative) return this.shareDBManager.getEmptyGroupID();else return this.genomicDataOverlayManager.getEmptyGroupID(); } }); + ; + /* + * Gets the first empty index from the list in cloud model + * **/ - EditorActionsManager_decorate([external_mobx_["observable"]], EditorActionsManager.prototype, "profiles", void 0); - - return EditorActionsManager; -}(); - -/* harmony default export */ var managers_EditorActionsManager = (EditorActionsManager_EditorActionsManager); -// EXTERNAL MODULE: external "jquery-ui-dist/jquery-ui" -var jquery_ui_ = __webpack_require__(53); - -// CONCATENATED MODULE: ./src/utils/DragDropNodeAddPlugin.tsx - - + Object.defineProperty(EditorActionsManager.prototype, "groupGenomicData", { + enumerable: false, + configurable: true, + writable: true, + value: function (cancerNames, groupID) { + return this.shareDBManager.groupGenomicData(cancerNames, groupID); + } + }); + ; + Object.defineProperty(EditorActionsManager.prototype, "addPubmedIDs", { + enumerable: false, + configurable: true, + writable: true, + value: function (edge, pubmedIDs) { + if (this.isCollaborative) { + this.shareDBManager.addPubmedIDs(edge.id(), pubmedIDs); + } else { + var pubmedArray = edge.data('pubmedIDs'); + var validPubmedIDs = _.filter(pubmedIDs, function (id) { + return !isNaN(id); + }); -var DragDropNodeAddPlugin_DragDropNodeAddPlugin = -/** @class */ -function () { - function DragDropNodeAddPlugin(editor, cy, pathwayHandler) { - Object.defineProperty(this, "pathwayHandler", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(this, "cy", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(this, "editor", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - this.editor = editor; - this.cy = cy; - this.pathwayHandler = pathwayHandler; - this.initNodeAdd(); - } //TODO JQUERY IS IGNORED - - - Object.defineProperty(DragDropNodeAddPlugin.prototype, "initNodeAdd", { + pubmedArray.push.apply(pubmedArray, validPubmedIDs); + edge.data('pubmedIDs', _.uniq(pubmedArray)); + } + } + }); + Object.defineProperty(EditorActionsManager.prototype, "removePubmedID", { enumerable: false, configurable: true, writable: true, - value: function () { - var nodeAddClass = this; - var defaults = { - height: 30, - width: 30, - padding: 5, - backgroundColorDiv: '#fbfbfb', - borderColorDiv: '#fff', - borderWidthDiv: '0px', - borderRadiusDiv: '5px', - icon: '', - nodeParams: function () { - // return element object to be passed to cy.add() for adding node - return {}; - } - }; - var self = this; // @ts-ignore - - external_jquery_default.a.fn.cytoscapeNodeadd = function (params) { - var options = external_jquery_default.a.extend(true, {}, defaults, params); - var fn = params; - var functions = { - destroy: function () { - var $this = external_jquery_default()(this); - $this.find(".ui-cytoscape-nodeadd").remove(); - }, - init: function () { - return external_jquery_default()(this).each(function () { - var components = options.components; + value: function (edge, pubmedIDs) { + if (this.isCollaborative) { + this.shareDBManager.removePubmedID(edge.id(), pubmedIDs); + } else { + var pubmedArray = edge.data('pubmedIDs'); + edge.data('pubmedIDs', _.difference(pubmedArray, pubmedIDs)); + } + } + }); + Object.defineProperty(EditorActionsManager.prototype, "updateEdgeBendPoints", { + enumerable: false, + configurable: true, + writable: true, + value: function (edge) { + if (this.isCollaborative) { + var numberOfBendPoints = 0; + if (this.edgeEditing.getSegmentPoints(edge) !== undefined) numberOfBendPoints = this.edgeEditing.getSegmentPoints(edge).length / 2; + var bendPointsArray = []; - for (var _i = 0, components_1 = components; _i < components_1.length; _i++) { - var component = components_1[_i]; - var dragContainer = component.container; //var explanationText = component.explanationText; + for (var j = 0; j < numberOfBendPoints; j++) { + bendPointsArray.push({ + x: this.edgeEditing.getSegmentPoints(edge)[2 * j], + y: this.edgeEditing.getSegmentPoints(edge)[2 * j + 1] + }); + } // edge.data("bendPointPositions", bendPointsArray); + // edgeEditing.initBendPoints(edge); - var $nodeadd = external_jquery_default()('
'); - dragContainer.append($nodeadd); - var $nodeDragHandle = external_jquery_default()('
\ - \ - \ - \ -
'); - $nodeadd.append($nodeDragHandle); - $nodeDragHandle.bind("mousedown", function (e) { - e.stopPropagation(); // don't trigger dragging of nodeadd - e.preventDefault(); // don't cause text selection - }); //Setup UI + this.shareDBManager.updateEdgeBendPoints(edge.id(), bendPointsArray); + } + } + }); //Related to order the nodes according to the selection of user - dragContainer.find(".ui-cytoscape-nodeadd-nodediv").css({ - background: options.backgroundColorDiv, - border: options.borderWidthDiv + ' solid ' + options.borderColorDiv, - 'border-radius': options.borderRadiusDiv - }); //Init Draggable + Object.defineProperty(EditorActionsManager.prototype, "pushSelectedNodeStack", { + enumerable: false, + configurable: true, + writable: true, + value: function (ele) { + this.selectedNodeStack[ele.id()] = ele; + } + }); + Object.defineProperty(EditorActionsManager.prototype, "removeElementFromSelectedNodeStack", { + enumerable: false, + configurable: true, + writable: true, + value: function (ele) { + var nodeID = ele.id(); + if (nodeID in this.selectedNodeStack) delete this.selectedNodeStack[ele.id()]; + } + }); + Object.defineProperty(EditorActionsManager.prototype, "clearSelectedNodeStack", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + this.selectedNodeStack = {}; + } + }); + Object.defineProperty(EditorActionsManager.prototype, "exportSVG", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + return this.svgExporter.exportGraph(this.cy.nodes(), this.cy.edges()); + } + }); //Simple observer-observable pattern for views!!!!! - dragContainer.find("#ui-cytoscape-nodeadd-icon").draggable({ - helper: "clone", - cursor: "pointer" - }); - } // @ts-ignore TODO: AMENDMENT ATTENTION + Object.defineProperty(EditorActionsManager.prototype, "registerObserver", { + enumerable: false, + configurable: true, + writable: true, + value: function (observer) { + this.observers.push(observer); + } + }); + ; + Object.defineProperty(EditorActionsManager.prototype, "notifyObservers", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + for (var i in this.observers) { + var observer = this.observers[i]; + observer.notify(); + } + } + }); + ; + Object.defineProperty(EditorActionsManager.prototype, "registerGenomicDataObserver", { + enumerable: false, + configurable: true, + writable: true, + value: function (observer) { + this.genomicDataOverlayManager.registerObserver(observer); + } + }); + Object.defineProperty(EditorActionsManager.prototype, "updateGenomicDataVisibility", { + enumerable: false, + configurable: true, + writable: true, + value: function (dataMap) { + if (this.isCollaborative) { + //TODO compound OP + // this.shareDBManager.clearGenomicVisData(); + this.shareDBManager.addGenomicVisibilityData(dataMap); + } else { + for (var _key in dataMap) { + this.genomicDataOverlayManager.updateGenomicDataVisibility(_key, dataMap[_key]); + } + this.genomicDataOverlayManager.showGenomicData(); + } + } + }); //Global options related functions, zoom etc.. - var $container = external_jquery_default()(this); //Init Droppable - // @ts-ignore TODO: Droppable is ignored + Object.defineProperty(EditorActionsManager.prototype, "getGlobalOptions", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + return { + zoomLevel: this.cy.zoom(), + panLevel: this.cy.pan() + }; + } + }); + Object.defineProperty(EditorActionsManager.prototype, "changeGlobalOptions", { + enumerable: false, + configurable: true, + writable: true, + value: function (op) { + var globalOptions = op.li; + this.cy.zoom(globalOptions.zoomLevel); + this.cy.pan(globalOptions.panLevel); + } + }); + Object.defineProperty(EditorActionsManager.prototype, "updateGlobalOptions", { + enumerable: false, + configurable: true, + writable: true, + value: function (newOptions) { + if (this.isCollaborative) this.shareDBManager.updateGlobalOptions(newOptions); + } + }); //Layout properties related functions - $container.droppable({ - activeClass: "ui-state-highlight", - // accept: "#ui-cytoscape-nodeadd-icon", - drop: function (event, ui) { - $container.removeClass("ui-state-highlight"); - var currentOffset = $container.offset(); - var relX = event.pageX - currentOffset.left; - var relY = event.pageY - currentOffset.top; - var nodeType = external_jquery_default()(ui.helper).attr('nodeType').toUpperCase(); - var cy = nodeAddClass.cy; //Hold a map for parents and candidate parent nodes for this addition - - var nodeMap = {}; - var parentMap = {}; //Loop through nodes for hit testing about drag position on canvas - - cy.nodes().forEach(function (node) { - var nodeBbox = node.renderedBoundingBox(); //Rectangle point test - - if (relX <= nodeBbox.x2 && relX >= nodeBbox.x1 && relY <= nodeBbox.y2 && relY >= nodeBbox.y1 && node.data().type != 'GENE') { - //If node has a children put an entry to the parentMap - if (node.children().length > 0) { - parentMap[node.id()] = true; - } //If parent of this node is already added to the node map remove it, since our candidate is in deeper level ! + Object.defineProperty(EditorActionsManager.prototype, "saveLayoutProperties", { + enumerable: false, + configurable: true, + writable: true, + value: function (newLayoutProps) { + if (this.isCollaborative) { + // Call a real time function that updated real time object and + // its callback (updateLayoutPropertiesCallback) will handle sync of this object + // across collaborators + this.shareDBManager.updateLayoutProperties(newLayoutProps); + } else { + this.layoutProperties = _.clone(newLayoutProps); + } + } + }); + ; + Object.defineProperty(EditorActionsManager.prototype, "updateLayoutPropertiesCallback", { + enumerable: false, + configurable: true, + writable: true, + value: function (op) { + var newLayoutProps = op.li; + this.layoutProperties = _.clone(newLayoutProps); + modals_LayoutProperties.layoutProperties = _.clone(this.layoutProperties); //Notify observers to reflect changes on colalborative object to the views + this.notifyObservers(); + } + }); + ; + Object.defineProperty(EditorActionsManager.prototype, "performLayout", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + this.undoRedoManager.do("layout", { + options: this.layoutProperties, + eles: null, + zoom: this.cy.zoom(), + pan: this.cy.pan() + }); + } + }); + ; //Node Related Functions - if (parentMap[node._private.data.parent]) { - delete nodeMap[node._private.data.parent]; - } //Add an entry to node map + Object.defineProperty(EditorActionsManager.prototype, "addNode", { + enumerable: false, + configurable: true, + writable: true, + value: function (nodeData, posData) { + if (this.isCollaborative) { + this.addNewNodeToShareDB(nodeData, posData); + } else { + this.addNodetoCy(nodeData, posData); + } + } + }); + ; + Object.defineProperty(EditorActionsManager.prototype, "addNodes", { + enumerable: false, + configurable: true, + writable: true, + value: function (nodes) { + for (var i in nodes) { + this.addNode(nodes[i].data, nodes[i].position); + } + } + }); + ; + Object.defineProperty(EditorActionsManager.prototype, "addNodesCy", { + enumerable: false, + configurable: true, + writable: true, + value: function (nodes) { + var nodeArr = []; + for (var i in nodes) { + var nodeData = nodes[i].data; + var posData = nodes[i].position; + var newNode = { + group: "nodes", + data: nodeData, + position: {} + }; - nodeMap[node.id()] = node; - } - }); //Check if any parent found, if so set parent field + if (nodeData.parent === undefined) { + delete newNode.data.parent; + } - var parent = nodeMap[Object.keys(nodeMap)[0]]; - var nodeData = { - w: "0", - h: "100", - parent: 0, - type: nodeType, - name: 'New ' + external_jquery_default()(ui.helper).attr('nodeType') - }; + if (posData) { + newNode.position = { + x: posData.x, + y: posData.y + }; + } - if (parent) { - if (parent.data().type == "FAMILY" || parent.data().type == "COMPLEX") { - if (nodeType != "COMPARTMENT" && nodeType != "PROCESS") { - nodeData.parent = parent.id(); - } - } else { - nodeData.parent = parent.id(); - } - } //TODO one place access to these + nodeArr[i] = newNode; + } + this.cy.add(nodeArr); + this.cy.nodes().updateCompoundBounds(); + } + }); + ; + Object.defineProperty(EditorActionsManager.prototype, "addNodetoCy", { + enumerable: false, + configurable: true, + writable: true, + value: function (nodeData, posData) { + var newNode = { + group: "nodes", + data: nodeData, + position: {} + }; - nodeData.w = "150"; - nodeData.h = "52"; //Adjust position according to the zoom level and pan ! - //To set rendered position !!! - //TODO refactor this ! + if (nodeData.parent === undefined) { + delete newNode.data.parent; + } - relX = relX / cy.zoom() + cy.extent().x1; - relY = relY / cy.zoom() + cy.extent().y1; - nodeAddClass.editor.addNode(nodeData, { - x: relX, - y: relY - }); - self.pathwayHandler("Additional Pathway"); - } - }); - }); - } + if (posData) { + newNode.position = { + x: posData.x, + y: posData.y }; + } //his.cy.add(newNode); - if (functions[fn]) { - return functions[fn].apply(this, Array.prototype.slice.call(arguments, 1)); - } else if (typeof fn == 'object' || !fn) { - return functions.init.apply(this, arguments); - } else { - external_jquery_default.a.error("No such function `" + fn + "` for jquery.cytoscapenodeadd"); - } - return external_jquery_default()(this); - }; // @ts-ignore + this.cy.nodes().updateCompoundBounds(); + this.undoRedoManager.do("add", newNode); //Width was not properly updated only by changing data property + var thatEle = this.cy.getElementById(nodeData.id); + thatEle.style('width', thatEle.data('w')); + } + }); + ; + Object.defineProperty(EditorActionsManager.prototype, "shareDBNodeAddRemoveEventCallBack", { + enumerable: false, + configurable: true, + writable: true, + value: function (op) { + //Get real time node object and sync it to node addition or removal + var isRemove = Object.keys(op)[1] === 'od'; + var node = op.oi || op.od; //Removal Operation - external_jquery_default.a.fn.cynodeadd = external_jquery_default.a.fn.cytoscapeNodeadd; + if (isRemove) { + var nodeID = op.p[1]; //Remove element from existing graph - try { - /* Adding as an extension to the core functionality of cytoscape.js*/ - external_cytoscape_default()('core', 'nodeadd', function (options) { - // @ts-ignore - external_jquery_default()(this.container()).cytoscapeNodeadd(options); + var cyEle = this.cy.$("#" + nodeID); + this.removeElementCy(cyEle); + this.cy.nodes().updateCompoundBounds(); + } //Addition Operation + else { + this.addNewNodeLocally(node); + } + } + }); + ; + Object.defineProperty(EditorActionsManager.prototype, "addNewNodeLocally", { + enumerable: false, + configurable: true, + writable: true, + value: function (realtimeNode) { + var nodeData = { + id: realtimeNode.id, + type: realtimeNode.type, + name: realtimeNode.name, + parent: realtimeNode.parent, + w: realtimeNode.w, + h: realtimeNode.h + }; + + if (realtimeNode.x != "undefined" && realtimeNode.y != "undefined") { + this.addNodetoCy(nodeData, { + x: realtimeNode.x, + y: realtimeNode.y }); - } catch (err) { - console.log(err); + } else { + // TODO: Amendment by Ziya + this.addNodetoCy(nodeData, null); } + + this.cy.nodes().updateCompoundBounds(); } }); - return DragDropNodeAddPlugin; -}(); + ; + Object.defineProperty(EditorActionsManager.prototype, "addNewNodeToShareDB", { + enumerable: false, + configurable: true, + writable: true, + value: function (nodeData, posData) { + this.shareDBManager.addNewNode(nodeData, posData); + } + }); + ; //Edge related functions -/* harmony default export */ var utils_DragDropNodeAddPlugin = (DragDropNodeAddPlugin_DragDropNodeAddPlugin); -// CONCATENATED MODULE: ./src/managers/ContextMenuManager.tsx + Object.defineProperty(EditorActionsManager.prototype, "addEdge", { + enumerable: false, + configurable: true, + writable: true, + value: function (edgeData) { + if (this.isCollaborative) { + this.addNewEdgeShareDB(edgeData); + } else { + this.addNewEdgetoCy(edgeData); + } + } + }); + ; + Object.defineProperty(EditorActionsManager.prototype, "addEdges", { + enumerable: false, + configurable: true, + writable: true, + value: function (edges) { + for (var i in edges) { + this.addEdge(edges[i].data); + } + } + }); + ; + Object.defineProperty(EditorActionsManager.prototype, "addEdgesCy", { + enumerable: false, + configurable: true, + writable: true, + value: function (edges) { + var newEdges = []; + for (var i in edges) { + var newEdge = { + group: "edges", + data: edges[i].data + }; + newEdges.push(newEdge); + } -var ContextMenuManager_ContextMenuManager = -/** @class */ -function () { - function ContextMenuManager(cy, editor, isCBioPortal, handleOpen, undoRedoManager, isCollaborative) { - Object.defineProperty(this, "cy", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(this, "editor", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(this, "isCBioPortal", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(this, "handleOpen", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(this, "undoRedoManager", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(this, "isCollaborative", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - this.cy = cy; - this.editor = editor; - this.isCBioPortal = isCBioPortal; - this.handleOpen = handleOpen; - this.undoRedoManager = undoRedoManager; - this.isCollaborative = isCollaborative; - this.init(); - } - - Object.defineProperty(ContextMenuManager.prototype, "init", { + this.cy.add(newEdges); + } + }); + ; + Object.defineProperty(EditorActionsManager.prototype, "addNewEdgeShareDB", { enumerable: false, configurable: true, writable: true, - value: function () { - var _this = this; - - var classRef = this; - var ctxMenus = this.cy.contextMenus(); - var menuItems = [{ - id: 'deleteSelected', - content: 'Delete Selected', - // Filters the elements to have this menu item on cxttap - // If the selector is not truthy no elements will have this menu item on cxttap - coreAsWell: true, - onClickFunction: function (event) { - var selectedEles = _this.cy.elements(':selected'); - - classRef.editor.removeElement(selectedEles); - }, - disabled: false, - hasTrailingDivider: true - }, { - id: 'hideSelected', - content: 'Hide Selected', - // Filters the elements to have this menu item on cxttap - // If the selector is not truthy no elements will have this menu item on cxttap - coreAsWell: true, - onClickFunction: function (event) { - classRef.editor.hideSelectedNodes(); - }, - disabled: false, - hasTrailingDivider: true - }, { - id: 'loadFromCBioPortal', - content: 'Load From cBioPortal...', - // Filters the elements to have this menu item on cxttap - // If the selector is not truthy no elements will have this menu item on cxttap - coreAsWell: true, - onClickFunction: function (event) { - _this.handleOpen(EModalType.STUDY); - }, - disabled: false, - hasTrailingDivider: true - }, //Context menu items when clicking on nodes/compounds - { - id: 'remove', - content: 'Delete', - // Filters the elements to have this menu item on cxttap - // If the selector is not truthy no elements will have this menu item on cxttap - selector: 'node, edge', - onClickFunction: function (event) { - var ele = event.target; // The function to be executed on click + value: function (edgeData) { + this.shareDBManager.addNewEdge(edgeData); + } + }); + ; + Object.defineProperty(EditorActionsManager.prototype, "addNewEdgetoCy", { + enumerable: false, + configurable: true, + writable: true, + value: function (edgeData) { + var newEdge = { + group: "edges", + data: edgeData + }; + this.undoRedoManager.do("add", newEdge); + } + }); + ; + Object.defineProperty(EditorActionsManager.prototype, "shareDBEdgeAddRemoveEventCallBack", { + enumerable: false, + configurable: true, + writable: true, + value: function (op) { + //Get real time node object and sync it to node addition or removal + var isRemove = Object.keys(op)[1] === 'od'; + var edge = op.oi || op.od; //Removal Operation - var selectedElements = classRef.cy.nodes(':selected').union(ele); - classRef.editor.removeElement(selectedElements); - }, - disabled: false, - hasTrailingDivider: true, - coreAsWell: false // Whether core instance have this item on cxttap + if (isRemove) { + var edgeID = op.p[1]; //Remove element from existing graph - }, { - id: 'addSelected', - content: 'Add Selected Into This', - // Filters the elements to have this menu item on cxttap - // If the selector is not truthy no elements will have this menu item on cxttap - selector: 'node', - onClickFunction: function (event) { - var ele = event.target; - var selectedNodes = classRef.cy.nodes(':selected'); - var containerType = ele.data('type'); - var validNodes = classRef.cy.collection(); //Do nothing if node is GENE + var cyEle = this.cy.$("#" + edgeID); + this.removeElementCy(cyEle); + } //Addition Operation + else { + this.addNewEdgeLocally(edge); + } + } + }); + ; + Object.defineProperty(EditorActionsManager.prototype, "addNewElementsLocally", { + enumerable: false, + configurable: true, + writable: true, + value: function (realTimeNodeArray, realTimeEdgeArray) { + var nodeList = []; + var nodeMap = {}; - if (ele._private.data['type'] === 'GENE' || selectedNodes.size() < 1) { - return; - } //Prevent actions like adding root node to children & addition to itself - else { - var notValid = false; - selectedNodes.forEach(function (tmpNode, i) { - if (ele.id() == tmpNode.id()) { - notValid = true; - return false; - } + for (var i in realTimeNodeArray) { + var realTimeNode = realTimeNodeArray[i]; + var nodeID = realTimeNode.id; //Added for backward compatibility when width was not defined - if (tmpNode.isParent()) { - notValid = classRef.isChildren(tmpNode, ele); + var nodeWidth = realTimeNode.w == undefined ? 150 : realTimeNode.w; + var nodeHeight = realTimeNode.h == undefined ? 52 : realTimeNode.h; + var compoundMinWidth = realTimeNode.minWidth == undefined ? 0 : realTimeNode.minWidth; + var compoundMinWidthBiasLeft = realTimeNode.minWidthBiasLeft == undefined ? 0 : realTimeNode.minWidthBiasLeft; + var compoundMinWidthBiasRight = realTimeNode.minWidthBiasRight == undefined ? 0 : realTimeNode.minWidthBiasRight; + var compoundMinHeight = realTimeNode.minHeight == undefined ? 0 : realTimeNode.minHeight; + var compoundMinHeightBiasTop = realTimeNode.minHeightBiasTop == undefined ? 0 : realTimeNode.minHeightBiasTop; + var compoundMinHeightBiasBottom = realTimeNode.minHeightBiasBottom == undefined ? 0 : realTimeNode.minHeightBiasBottom; + var nodeData = { + group: 'nodes', + // TODO: Amendment by Ziya + position: {}, + data: { + id: nodeID, + type: realTimeNode.type, + name: realTimeNode.name, + parent: realTimeNode.parent, + w: nodeWidth, + h: nodeHeight + }, + style: { + 'width': nodeWidth, + 'height': nodeHeight, + 'min-width': compoundMinWidth, + 'min-width-bias-left': compoundMinWidthBiasLeft, + 'min-width-bias-right': compoundMinWidthBiasRight, + 'min-height': compoundMinHeight, + 'min-height-bias-top': compoundMinHeightBiasTop, + 'min-height-bias-bottom': compoundMinHeightBiasBottom + } + }; - if (notValid) { - return false; - } - } + if (nodeData.data.parent === undefined) { + delete nodeData.data.parent; + } - return true; - }); + if (realTimeNode.x && realTimeNode.y) { + nodeData.position = { + x: realTimeNode.x, + y: realTimeNode.y + }; + } - if (notValid) { - return; - } - } + nodeMap[nodeID] = nodeData; + nodeList.push(nodeData); + } - selectedNodes.forEach(function (tmpNode, i) { - if (containerType == "FAMILY" || containerType == "COMPLEX") { - if (tmpNode.data('type') != "COMPARTMENT" && tmpNode.data('type') != "PROCESS") { - validNodes = validNodes.add(tmpNode); - } - } else { - validNodes = validNodes.add(tmpNode); - } - }); - var compId = ele.id(); - classRef.editor.changeParents(validNodes, compId); //Unselecting nodes to remove them from selectedNodeStack + var edgeList = []; - selectedNodes.unselect(); - }, - disabled: false, - hasTrailingDivider: true, - coreAsWell: false // Whether core instance have this item on cxttap + for (var i in realTimeEdgeArray) { + var edge = realTimeEdgeArray[i]; + var edgeID = edge.id; //If source and and target is somehow lost in remote model do not create this edge - }, { - id: 'removeSelected', - content: 'Remove Selected From Parent', - // Filters the elements to have this menu item on cxttap - // If the selector is not truthy no elements will have this menu item on cxttap - selector: 'node', - onClickFunction: function (event) { - var ele = event.target; - var selectedNodes = classRef.cy.nodes(':selected'); - var notValid = false; - selectedNodes.forEach(function (tmpNode, i) { - if (tmpNode.isParent()) { - notValid = classRef.isChildren(tmpNode, ele); - - if (notValid) { - return false; - } - } - - return true; - }); - - if (notValid) { - return; + if (!(edge.source in nodeMap && edge.target in nodeMap)) continue; + var edgeData = { + group: 'edges', + data: { + id: edgeID, + type: edge.type, + source: edge.source, + target: edge.target, + pubmedIDs: edge.pubmedIDs, + name: edge.name, + bendPointPositions: edge.bendPoint } - - classRef.editor.changeParents(selectedNodes, null); //Unselecting nodes to remove them from selectedNodeStack - - selectedNodes.unselect(); - }, - disabled: false, - hasTrailingDivider: true, - coreAsWell: false // Whether core instance have this item on cxttap - - }, { - id: 'performLayout', - content: 'Perform Layout', - // Filters the elements to have this menu item on cxttap - // If the selector is not truthy no elements will have this menu item on cxttap - coreAsWell: true, - onClickFunction: function (event) { - _this.editor.performLayout(); - }, - disabled: false, - hasTrailingDivider: true - }]; - var nonCollabItems = [//Context menu items when clicking on blank space - { - id: 'undoAction', - content: 'Undo', - // Filters the elements to have this menu item on cxttap - // If the selector is not truthy no elements will have this menu item on cxttap - coreAsWell: true, - onClickFunction: function (event) { - _this.undoRedoManager.undo(); - }, - disabled: false, - hasTrailingDivider: true - }, { - id: 'redoAction', - content: 'Redo', - // Filters the elements to have this menu item on cxttap - // If the selector is not truthy no elements will have this menu item on cxttap - coreAsWell: true, - onClickFunction: function (event) { - _this.undoRedoManager.redo(); - }, - disabled: false, - hasTrailingDivider: true - }]; - - if (!this.isCollaborative) { - menuItems = menuItems.concat(nonCollabItems); + }; + edgeList.push(edgeData); } - ctxMenus.appendMenuItems(menuItems); + this.cy.add(nodeList); + this.cy.add(edgeList); + this.edgeEditing.initBendPoints(this.cy.edges()); + this.cy.nodes().updateCompoundBounds(); } - }); //TODO ?????? - //window.edgeAddingMode = false; - //TODO better move this to another class - //Utility function to check whether query node is children of given node - - Object.defineProperty(ContextMenuManager.prototype, "isChildren", { + }); + Object.defineProperty(EditorActionsManager.prototype, "addNewEdgeLocally", { enumerable: false, configurable: true, writable: true, - value: function (node, queryNode) { - var parent = queryNode.parent()[0]; - - while (parent) { - if (parent.id() == node.id()) { - return true; - } - - parent = parent.parent()[0]; - } - - return false; + value: function (edge) { + var edgeData = { + id: edge.id, + type: edge.type, + source: edge.source, + target: edge.target, + pubmedIDs: edge.pubmedIDs, + name: edge.name, + bendPointPositions: edge.bendPoint + }; + this.addNewEdgetoCy(edgeData); + this.edgeEditing.initBendPoints(this.cy.getElementById(edge.id)); } }); - return ContextMenuManager; -}(); - -/* harmony default export */ var managers_ContextMenuManager = (ContextMenuManager_ContextMenuManager); -// CONCATENATED MODULE: ./src/managers/QtipManager.tsx - - -var QtipManager_QtipManager = -/** @class */ -function () { - function QtipManager(cy, editor) { - Object.defineProperty(this, "cy", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(this, "editor", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - this.cy = cy; - this.editor = editor; - } - - Object.defineProperty(QtipManager.prototype, "generateEdgeQtipContentHTML", { + ; + Object.defineProperty(EditorActionsManager.prototype, "reconnectEdge", { enumerable: false, configurable: true, writable: true, - value: function (edge) { - var self = this; - var textInput = external_jquery_default()('
'); - var pubmedIDList = external_jquery_default()('
'); - var pubmedURL = 'https://www.ncbi.nlm.nih.gov/pubmed/'; - var pubmedData = edge.data('pubmedIDs'); - console.log("edge.data('pubmedIDs')"); - console.log(edge.data('pubmedIDs')); - var edgeLabelInput = external_jquery_default()('
'); - - function generatePubmedLinks(argData, isInitialDisplay) { - console.log(argData); - console.log(self.cy.edges()); - - for (var key in argData) { - if (!argData.hasOwnProperty(key)) { - continue; - } - - var pubmedID = argData[key]; - if (isNaN(pubmedID)) continue; - var pubmedIDRemoveButton = external_jquery_default()(""); - pubmedIDRemoveButton.on('click', function (event) { - external_jquery_default()(event.target).parent().remove(); - var edge = self.cy.$('#' + external_jquery_default()(event.target).attr('edgeId')); - var pubmedId = [external_jquery_default()(event.target).parent().find('a').text()]; - self.editor.removePubmedID(edge, pubmedId); - - if (external_jquery_default()('.pubmedIDList').children().length < 3) { - external_jquery_default()('.pubmedIDList').children().remove(); - } - }); - var pubmedContent = external_jquery_default()("
\ - \ -
"); - pubmedContent.first().append(pubmedIDRemoveButton); - pubmedIDList.append(pubmedContent); - } - } - - function generatePubmedLinksHeader() { - pubmedIDList.append(external_jquery_default()('
')); - pubmedIDList.append(external_jquery_default()('')); - } - - if (pubmedData.length > 0) { - generatePubmedLinksHeader(); - generatePubmedLinks(pubmedData, true); + value: function (sourceID, targetID, edgeData) { + if (this.isCollaborative) { + var edge = this.cy.getElementById(edgeData.id); + this.reconnectEdgeInShareDB(sourceID, targetID, edgeData); + } else { + var location = { + source: sourceID, + target: targetID + }; + var edge = this.cy.getElementById(edgeData.id); + edge.move(location); } - textInput.change(function () { - var edgeID = external_jquery_default()(this).find('input').attr('edgeid'); - var val = external_jquery_default()(this).find('input').val(); - var pumbedIDs = val.split(';'); - external_jquery_default()(this).find('input').val(""); - - if (external_jquery_default()('.pubmedIDList').children().length === 0) { - generatePubmedLinksHeader(); - } - - self.editor.addPubmedIDs(edge, pumbedIDs); - generatePubmedLinks(pumbedIDs, false); - }); - edgeLabelInput.change(function () { - var edgeID = external_jquery_default()(this).find('input').attr('edgeid'); - var cyEdge = self.cy.$('#' + edgeID)[0]; - var newName = external_jquery_default()(this).find('input').val(); - external_jquery_default()(this).find('input').val(""); //TODO call associated Editor Actions Manager function - - self.editor.changeName(cyEdge, newName); - }); - var wrapper = external_jquery_default()('
'); - var pubmedRow = external_jquery_default()('
\ -
Add PubmedID(s):
\ -
'); - pubmedRow.append(textInput); - var labelRow = external_jquery_default()('
\ -
Label:
\ -
'); - labelRow.append(edgeLabelInput); - wrapper.append(labelRow); - wrapper.append('
'); - pubmedRow.append(textInput); - wrapper.append(pubmedRow); - wrapper.append(pubmedIDList); - return wrapper; + return this.cy.getElementById(edgeData.id); } }); - Object.defineProperty(QtipManager.prototype, "generateNodeQtipContentHTML", { + ; + Object.defineProperty(EditorActionsManager.prototype, "reconnectEdgeInShareDB", { + enumerable: false, + configurable: true, + writable: true, + value: function (sourceID, targetID, edgeData) { + this.shareDBManager.reconnectEdge(sourceID, targetID, edgeData); + } + }); + ; //Removal functions + + Object.defineProperty(EditorActionsManager.prototype, "removeElement", { enumerable: false, configurable: true, writable: true, value: function (ele) { - var self = this; - var nodeData = ele.data(); - var textInput = external_jquery_default()('
'); - textInput.change(function () { - var nodeID = external_jquery_default()(this).find('input').attr('nodeid'); - var cyNode = self.cy.$('#' + nodeID)[0]; - var newName = external_jquery_default()(this).find('input').val(); - self.editor.changeName(cyNode, newName); - }); - var wrapper = external_jquery_default()('
'); - var row = external_jquery_default()('
\ -
Name:
\ -
'); - row.append(textInput); - wrapper.append(row); - - if (ele.data().type === "GENE") { - var entrezGeneButton = external_jquery_default()('
'); - entrezGeneButton.find('button').on('click', function (event) { - event.preventDefault(); - var nodeID = external_jquery_default()(this).attr('nodeid'); - - var nodeSymbol = self.cy.$('#' + nodeID)[0]._private.data['name']; - - var parent = external_jquery_default()(this).parent(); - window.open('https://www.mycancergenome.org/content/gene/' + nodeSymbol); - }); - wrapper.append(entrezGeneButton); + if (this.isCollaborative) { + this.removeElementsFromShareDB(ele); + } else { + this.removeElementsCy(ele); } - - return wrapper; } }); - Object.defineProperty(QtipManager.prototype, "addQtipToElements", { - enumerable: false, - configurable: true, - writable: true, - value: function (eles) { - var self = this; - eles.forEach(function (ele, i) { - var qTipOpts = {}; - - if (ele.isNode()) { - qTipOpts = { - content: { - text: function () { - return self.generateNodeQtipContentHTML(this); - }, - title: function () { - return ele.data().type.toUpperCase() + ' DETAILS'; - } - }, - position: { - my: 'top center', - at: 'bottom center' - }, - style: { - classes: 'qtip-tipsy qtip-rounded', - width: 400 - }, - show: { - event: "showqtipevent" - } - }; - } else if (ele.isEdge()) { - qTipOpts = { - content: { - text: function () { - return self.generateEdgeQtipContentHTML(this); - }, - title: function () { - return 'INTERACTION DETAILS'; - } - }, - position: { - my: 'top center', - at: 'bottom center' - }, - style: { - classes: 'qtip-tipsy qtip-rounded', - width: 400 - }, - show: { - event: "showqtipevent" - } - }; - } - - ele.qtip(qTipOpts); - }); - } - }); //Utility Functions - - Object.defineProperty(QtipManager.prototype, "capitalizeFirstLetter", { + ; + Object.defineProperty(EditorActionsManager.prototype, "removeElementCy", { enumerable: false, configurable: true, writable: true, - value: function (string) { - return string.charAt(0).toUpperCase() + string.slice(1); + value: function (ele) { + this.undoRedoManager.do("remove", ele); } }); - return QtipManager; -}(); - -/* harmony default export */ var managers_QtipManager = (QtipManager_QtipManager); -// EXTERNAL MODULE: external "underscore" -var external_underscore_ = __webpack_require__(9); -var external_underscore_default = /*#__PURE__*/__webpack_require__.n(external_underscore_); - -// CONCATENATED MODULE: ./src/managers/ShareDBManager.tsx - - -var sharedb; -var socket; -var connection; - -var ShareDBManager_ShareDBManager = -/** @class */ -function () { - function ShareDBManager(postFileLoadCallback) { - Object.defineProperty(this, "NODEMAP_NAME", { - enumerable: true, - configurable: true, - writable: true, - value: 'nodes' - }); - Object.defineProperty(this, "EDGEMAP_NAME", { - enumerable: true, - configurable: true, - writable: true, - value: 'edges' - }); - Object.defineProperty(this, "LAYOUT_PROPS_NAME", { - enumerable: true, - configurable: true, - writable: true, - value: 'layoutProperties' - }); - Object.defineProperty(this, "GLOBAL_OPTS_NAME", { - enumerable: true, - configurable: true, - writable: true, - value: 'globalOptions' - }); //For storing genomic data information per gene - - Object.defineProperty(this, "GENOMIC_DATA_MAP_NAME", { - enumerable: true, - configurable: true, - writable: true, - value: 'genomicDataMap' - }); //For storing visibility information of genomic data according to the cancer type - - Object.defineProperty(this, "VISIBLE_GENOMIC_DATA_MAP_NAME", { - enumerable: true, - configurable: true, - writable: true, - value: 'visibleGenomicDataMapByType' - }); - Object.defineProperty(this, "GENOMIC_DATA_GROUP_NAME", { - enumerable: true, - configurable: true, - writable: true, - value: 'genomicDataGroupList' - }); - Object.defineProperty(this, "GENOMIC_DATA_GROUP_COUNT", { - enumerable: true, - configurable: true, - writable: true, - value: 'genomicDataGroupCount' - }); - Object.defineProperty(this, "graphUtilities", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(this, "doc", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(this, "postFileLoad", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(this, "editor", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(this, "reconnectEdge", { - enumerable: true, - configurable: true, - writable: true, - value: function (sourceID, targetID, edgeData) { - var edgeMap = this.doc.data[this.EDGEMAP_NAME]; - var edge = edgeMap[edgeData.id]; - var edgeID = edge.id; - edge.source = sourceID; - edge.target = targetID; - - if (edgeMap.hasOwnProperty(edgeID)) { - this.updateShareDBObject(this.EDGEMAP_NAME, edgeID, edge); - } else { - throw new Error('Element does not exist in Real Time'); - } - } - }); //Doc data maps names and keys - - this.postFileLoad = postFileLoadCallback; - this.graphUtilities = new utils_GraphUtilities(); - } - ; - Object.defineProperty(ShareDBManager.prototype, "getDoc", { + Object.defineProperty(EditorActionsManager.prototype, "removeElementsCy", { enumerable: false, configurable: true, writable: true, - value: function () { - return this.doc; + value: function (ele) { + this.undoRedoManager.do("remove", ele); } }); - Object.defineProperty(ShareDBManager.prototype, "setEditor", { + ; + Object.defineProperty(EditorActionsManager.prototype, "removeElementsFromShareDB", { enumerable: false, configurable: true, writable: true, - value: function (editor) { - this.editor = editor; + value: function (eles) { + var self = this; + eles.forEach(function (ele) { + self.shareDBManager.removeElement(ele.id()); + }); } - }); //Applies any given sharDB opeation to shared document and notifies other clients - - Object.defineProperty(ShareDBManager.prototype, "applyShareDBOperation", { + }); + ; + Object.defineProperty(EditorActionsManager.prototype, "removeElementFromShareDB", { enumerable: false, configurable: true, writable: true, - value: function (op) { - this.doc.submitOp(op, this.shareDBError); + value: function (ele) { + this.shareDBManager.removeElement(ele.id()); } }); - ; //Clears genomic data in shared document and notifies other clients - - Object.defineProperty(ShareDBManager.prototype, "clearShareDBGenomicData", { + ; + Object.defineProperty(EditorActionsManager.prototype, "changeParents", { enumerable: false, configurable: true, writable: true, - value: function () { - var ops = []; - var genomicMap = this.doc.data[this.GENOMIC_DATA_MAP_NAME]; - var visMap = this.doc.data[this.VISIBLE_GENOMIC_DATA_MAP_NAME]; - var genomicDataGroupMap = this.doc.data[this.GENOMIC_DATA_GROUP_NAME]; - var genomicDataGroupCount = this.doc.data[this.GENOMIC_DATA_GROUP_COUNT]; //Reset all genomic maps + value: function (eles, newParentId) { + if (this.isCollaborative) { + this.changeParentShareDB(eles, newParentId); + } else { + var parentData = newParentId ? newParentId : null; // Old manual way to change parents in local mode + //this.changeParentCy(eles, newParentId); + //Save element's previous width & height in dim array - for (var _i = 0, _a = Object.keys(genomicMap); _i < _a.length; _i++) { - var key = _a[_i]; - ops.push({ - p: [this.GENOMIC_DATA_GROUP_NAME, key], - od: genomicMap[key] + var dim_1 = []; + var id_1 = []; + eles.forEach(function (ele) { + var parameters = { + id: ele.id(), + width: ele.style("width"), + height: ele.style("height") + }; + dim_1.push(parameters); + id_1.push(ele.id()); + }); + var parentElem = this.cy.getElementById(parentData); + var param = { + firstTime: true, + parentData: parentData, + nodes: eles, + posDiffX: !parentData ? 0 : parentElem.position('x') - eles[0].position('x'), + posDiffY: !parentData ? 0 : parentElem.position('y') - eles[0].position('y') + }; + this.undoRedoManager.do('changeParent', param); //The elements after change parent operation are different so we find them by using the saved ids + // and add them to the collection + + var collection = this.cy.collection(); + + for (var i in id_1) { + var elementById = this.cy.getElementById(id_1[i]); + collection = collection.add(elementById); + } //Set their previous size to the new elements in the collection + + + collection.forEach(function (ele, i) { + if (ele.id() == dim_1[i].id) ele.style("width", dim_1[i].width); + ele.style("height", dim_1[i].height); }); } + } + }); + ; + Object.defineProperty(EditorActionsManager.prototype, "changeParentShareDB", { + enumerable: false, + configurable: true, + writable: true, + value: function (eles, newParentId) { + var classRef = this; - for (var _b = 0, _c = Object.keys(visMap); _b < _c.length; _b++) { - var key = _c[_b]; - ops.push({ - p: [this.VISIBLE_GENOMIC_DATA_MAP_NAME, key], - od: visMap[key] + function getTopLevelParents(eles) { + var tpMostNodes = classRef.cy.collection(); + var parentMap = {}; //Get all parents + + eles.forEach(function (node) { + if (node.isParent()) parentMap[node.id()] = node; + }); //Get all parents + + eles.forEach(function (node) { + var nodeParent = node.parent(); + if (parentMap[nodeParent.id()] === undefined) tpMostNodes = tpMostNodes.union(node); }); + return tpMostNodes; } - for (var _d = 0, _e = Object.keys(genomicDataGroupMap); _d < _e.length; _d++) { - var key = _e[_d]; - ops.push({ - p: [this.GENOMIC_DATA_GROUP_NAME, key], - od: genomicDataGroupMap[key] + var NodeObj = + /** @class */ + function () { + function NodeObj(nodeObj) { + Object.defineProperty(this, "nodeRef", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "children", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + this.nodeRef = nodeObj; + this.children = []; + } + + return NodeObj; + }(); + + var connectedEdges = eles.connectedEdges(); // Traverses given elements and constructs subgraph relations + // creates a nested structure into rootnodeObj + + function traverseNodes(eles, rootNodeObj) { + eles.forEach(function (ele) { + connectedEdges = connectedEdges.union(ele.connectedEdges()); + + if (ele.isParent()) { + rootNodeObj.children.push(new NodeObj(ele)); + var lengthOfChildrenArray = rootNodeObj.children.length; + traverseNodes(ele.children(), rootNodeObj.children[lengthOfChildrenArray - 1]); + } else { + rootNodeObj.children.push(new NodeObj(ele)); + } }); - } //Reset genomic data group count to 0 + } //Create new collection - ops.push({ - p: [this.GENOMIC_DATA_GROUP_COUNT], - na: -genomicDataGroupCount - }); - this.doc.submitOp(ops, this.shareDBError); + var topMostNodes = getTopLevelParents(eles); + var rootNodeR = new NodeObj(null); + traverseNodes(topMostNodes, rootNodeR); + this.shareDBManager.changeParent(rootNodeR, newParentId, connectedEdges); } }); ; - /* - * Updates shared document object - * @param mapName: map name of the object - * @param objectKey: key of the object - * @param object: new object - * - */ - - Object.defineProperty(ShareDBManager.prototype, "updateShareDBObject", { + Object.defineProperty(EditorActionsManager.prototype, "changeParentCy", { enumerable: false, configurable: true, writable: true, - value: function (mapName, objectKey, object) { - this.doc.submitOp([{ - p: [mapName, objectKey], - od: this.doc.data[mapName][objectKey], - oi: object - }], this.shareDBError); + value: function (eles, newParentId) { + var lockedNodes = {}; + var self = this; + + function removeNodes(nodes) { + //Get removed edges first + var removedEles = nodes.connectedEdges().remove(); + var children = nodes.children(); + + if (children != null && children.length > 0) { + children.forEach(function (childNode) { + lockedNodes[childNode.id()] = true; + }); + removedEles = removedEles.union(removeNodes(children)); + } + + removedEles = removedEles.union(nodes.remove()); + self.cy.nodes().updateCompoundBounds(); + return removedEles; + } + + var removedEles = removeNodes(eles); + this.undoRedoManager.do("remove", removedEles); + + for (var i = 0; i < removedEles.length; i++) { + var removedNode = removedEles[i]; //Just alter the parent id of corresponding nodes ! + + if (removedNode.isEdge() || lockedNodes[removedNode.id()]) { + continue; + } + + removedNode._private.data.parent = newParentId; + + if (removedNode._private.parent) { + delete removedNode._private.parent; + } + } + + self.cy.add(removedEles); + this.undoRedoManager.do("add", removedEles); + self.cy.nodes().updateCompoundBounds(); } }); ; - /* - * Inserts a new shared document object - * @param mapName: map name of the object - * @param objectKey: key of the object - * @param object: new object - * - */ - - Object.defineProperty(ShareDBManager.prototype, "insertShareDBObject", { + Object.defineProperty(EditorActionsManager.prototype, "moveElements", { enumerable: false, configurable: true, writable: true, - value: function (mapName, objectKey, object) { - this.doc.submitOp([{ - p: [mapName, objectKey], - oi: object - }], this.shareDBError); - console.log("this.doc"); - console.log(this.doc); - console.log(mapName, objectKey, object); + value: function (eles) { + var classRef = this; //Sync movement to real time api + + if (this.isCollaborative) { + eles.forEach(function (ele) { + classRef.shareDBManager.moveElement(ele); + }); + } } }); ; - /* - * Deletes a shared document object - * @param mapName: map name of the object - * @param objectKey: key of the object - * - */ - - Object.defineProperty(ShareDBManager.prototype, "deleteShareDBObject", { + Object.defineProperty(EditorActionsManager.prototype, "resizeElements", { enumerable: false, configurable: true, writable: true, - value: function (mapName, objectKey) { - this.doc.submitOp([{ - p: [mapName, objectKey], - od: this.doc.data[mapName][objectKey] - }], this.shareDBError); + value: function (ele) { + if (this.isCollaborative) { + if (!ele.isParent()) { + var previousWidth = ele.width(); + var previousHeight = ele.height(); //Sync movement to real time api + + this.shareDBManager.resizeElement(ele, previousWidth, previousHeight); + } else { + var minWidth = ele.style('min-width'); + var minWidthBiasLeft = ele.style('min-width-bias-left'); + var minWidthBiasRight = ele.style('min-width-bias-right'); + var minHeight = ele.style('min-height'); + var minHeightBiasTop = ele.style('min-height-bias-top'); + var minHeightBiasBottom = ele.style('min-height-bias-bottom'); //Sync movement to real time api + + this.shareDBManager.resizeCompound(ele, minWidth, minWidthBiasLeft, minWidthBiasRight, minHeight, minHeightBiasTop, minHeightBiasBottom); + } + } } }); - ; //Initializes layout properties of the shared document - - Object.defineProperty(ShareDBManager.prototype, "initializeShareDBLayoutProperties", { + ; + Object.defineProperty(EditorActionsManager.prototype, "mergeGraph", { enumerable: false, configurable: true, writable: true, - value: function () { - this.doc.submitOp([{ - p: [this.LAYOUT_PROPS_NAME, 0], - li: [this.editor.layoutProperties] - }], this.shareDBError); + value: function (nodes, edges) { + if (this.isCollaborative) { + //Collaborative usage + this.shareDBManager.mergeGraph(nodes, edges); + } else { + //Local usage file load + this.mergeGraphCy(nodes, edges); + } + + this.fitGraph(); } }); - ; //Initializes global options of the shared document - - Object.defineProperty(ShareDBManager.prototype, "initializeShareDBGlobalOptions", { + ; + Object.defineProperty(EditorActionsManager.prototype, "mergeGraphCy", { enumerable: false, configurable: true, writable: true, - value: function () { - this.doc.submitOp([{ - p: [this.GLOBAL_OPTS_NAME, 0], - li: [this.editor.getGlobalOptions()] - }], this.shareDBError); - } - }); - ; - /* - * Updates layout properties of the shared document and notifies other clients - * @param object: new layout properties object - * - */ + value: function (nodes, edges) { + //Define arrays and maps + var nodesToBeAdded = []; + var edgesToBeAdded = []; + var nodeMap = {}; //Iterate over nodes and find nodes that does not exist in current graph by looking their name - Object.defineProperty(ShareDBManager.prototype, "updateShareDBLayoutProperties", { - enumerable: false, - configurable: true, - writable: true, - value: function (object) { - this.doc.submitOp([{ - p: [this.LAYOUT_PROPS_NAME, 0], - ld: this.doc.data[this.LAYOUT_PROPS_NAME][0], - li: object - }], this.shareDBError); + for (var index in nodes) { + var ele = nodes[index]; + nodeMap[ele.data.id] = ele; + + if (this.cy.filter('node[name = "' + ele.data.name + '"]').length <= 0) { + delete ele.data.id; //TODO need to update parent ? + + nodesToBeAdded.push(ele); + } + } + + this.cy.add(nodesToBeAdded); //Iterate over all edges + + for (var index in edges) { + //Get corresponding source and target node in merge file + var ele = edges[index]; + var sourceNode = nodeMap[ele.data.source]; + var targetNode = nodeMap[ele.data.target]; //Check if there are nodes with same name in current graph + + var cySourceNode = this.cy.nodes('[name="' + sourceNode.data.name + '"]'); + var targetNode = this.cy.nodes('[name="' + targetNode.data.name + '"]'); + + if (cySourceNode.length > 0) { + ele.data.source = cySourceNode.id(); + } + + if (targetNode.length > 0) { + ele.data.target = targetNode.id(); + } + + if (targetNode.length < 0 && cySourceNode.length < 0) { + continue; + } + + var edgesBtw = this.cy.filter('edge[source = "' + cySourceNode.id() + '"][target = "' + targetNode.id() + '"]'); //We assume there could be one edge between source and target node with same type + + var isFound = false; + edgesBtw.forEach(function (edge) { + if (edge.data().type == ele.data.type) { + isFound = true; + return false; + } //TODO: AMENDMENT by Ziya + + + return true; + }); + + if (!isFound) { + delete ele.data.id; + edgesToBeAdded.push(ele); + } + } + + this.cy.add(edgesToBeAdded); } }); ; - /* - * Updates global options of the shared document and notifies other clients - * @param object: new global options object - * - */ - - Object.defineProperty(ShareDBManager.prototype, "updateShareDBGlobalOptions", { + Object.defineProperty(EditorActionsManager.prototype, "fitGraph", { enumerable: false, configurable: true, writable: true, - value: function (object) { - this.doc.submitOp([{ - p: [this.GLOBAL_OPTS_NAME, 0], - ld: this.doc.data[this.GLOBAL_OPTS_NAME][0], - li: object - }], this.shareDBError); + value: function () { + if (this.isCollaborative) { + this.cy.fit(this.FIT_CONSTANT); + var newState = { + zoomLevel: this.cy.zoom(), + panLevel: this.cy.pan() + }; + this.updateGlobalOptions(newState); + } else { + this.cy.fit(this.FIT_CONSTANT); + } } }); - ; //Increments shared data group count - //Use this function to increment and keep the group count synchronized - - Object.defineProperty(ShareDBManager.prototype, "incrementShareDBGroupCount", { + Object.defineProperty(EditorActionsManager.prototype, "loadFile", { enumerable: false, configurable: true, writable: true, - value: function () { - this.doc.submitOp([{ - p: [this.GENOMIC_DATA_GROUP_COUNT], - na: 1 - }], this.shareDBError); + value: function (nodes, edges) { + if (this.isCollaborative) { + //Real time load graph + this.loadfileShareDB(nodes, edges); + } else { + //Local usage file load + this.loadFileCy(nodes, edges); + } + + this.cy.edgeEditing('get').initBendPoints(this.cy.edges()); + this.fitGraph(); } }); - ; //Checks whether given operation is a replace or add/delete operation - - Object.defineProperty(ShareDBManager.prototype, "isShareDBReplaceEvent", { + ; + Object.defineProperty(EditorActionsManager.prototype, "loadFileCy", { enumerable: false, configurable: true, writable: true, - value: function (op) { - return op.hasOwnProperty("oi") && op.hasOwnProperty("od") || op.hasOwnProperty("li") && op.hasOwnProperty("ld"); + value: function (nodes, edges) { + //Remove all elements + this.removeElementCy(this.cy.elements()); + this.addNodesCy(nodes); + this.addEdgesCy(edges); } }); ; - /* - * Gets the initial value of the shared document - * without this function shared document values cannot be reached - */ - - Object.defineProperty(ShareDBManager.prototype, "initializeSharedDBDoc", { + Object.defineProperty(EditorActionsManager.prototype, "loadfileShareDB", { enumerable: false, configurable: true, writable: true, - value: function () { - this.doc.subscribe(); + value: function (nodes, edges) { + this.shareDBManager.loadGraph(nodes, edges); } }); ; - Object.defineProperty(ShareDBManager.prototype, "shareDBError", { + Object.defineProperty(EditorActionsManager.prototype, "removeAllElements", { enumerable: false, configurable: true, writable: true, - value: function (err) { - if (err) { - console.error(err); + value: function () { + if (this.isCollaborative) { + this.shareDBManager.removeAllElements(); + } else { + this.cy.remove(this.cy.elements()); } } }); ; - Object.defineProperty(ShareDBManager.prototype, "initShareDB", { + Object.defineProperty(EditorActionsManager.prototype, "updateHighlight", { enumerable: false, configurable: true, writable: true, - value: function () { - var _this = this; - - sharedb = __webpack_require__(54); - socket = new WebSocket('ws://' + window.location.host); - connection = new sharedb.Connection(socket); - var self = this; - var id = this.getParam('id'); - - var loadFileCallback = function () { - self.onFileLoaded(); - }; //Creates new shared db document and initializes values - - - var createNewDocument = function () { - var new_id = self.getCustomObjId(); - var data = { - nodes: {}, - edges: {}, - layoutProperties: [_this.editor.layoutProperties], - globalOptions: [_this.editor.getGlobalOptions()], - genomicDataMap: {}, - visibleGenomicDataMapByType: {}, - genomicDataGroupList: {}, - genomicDataGroupCount: 0 - }; - window.history.pushState(null, null, '?id=' + new_id); - self.doc = connection.get('cy', new_id); - self.doc.create(data, loadFileCallback); - }; //Check if id exists in parameters - //If exists open the shared document - - - if (id) { - // Check any document exists with given id - this.doc = connection.get('cy', id); - this.doc.fetch(function (err) { - if (err) throw err; - - if (self.doc.type === null) { - createNewDocument(); - return; - } - - self.doc.subscribe(loadFileCallback); - }); - } else { - //Create new shared document - createNewDocument(); - } - - console.log("this.doc"); - console.log(this.doc); + value: function (ele, isHighlighted) { + if (isHighlighted) this.undoRedoManager.do('highlightOthers', ele);else this.undoRedoManager.do('removeOtherHighlight', ele); } }); ; - /* - * After a file has been initialized and loaded, we can access the - * document. We will wire up the data in shared document to the UI. - * - */ - - Object.defineProperty(ShareDBManager.prototype, "onFileLoaded", { + Object.defineProperty(EditorActionsManager.prototype, "updateVisibility", { enumerable: false, configurable: true, writable: true, - value: function () { - this.initializeSharedDBDoc(); - this.syncInitialSharedDocData(); - this.initSharedDocEventHandlers(); - this.postFileLoad(); + value: function (ele, isHidden) { + if (isHidden) ele.hide();else ele.show(); } }); ; - /* - * Synchronizes initial data in the shared document to - * client's application. - */ - - Object.defineProperty(ShareDBManager.prototype, "syncInitialSharedDocData", { + Object.defineProperty(EditorActionsManager.prototype, "updateElementCallback", { enumerable: false, configurable: true, writable: true, - value: function () { - var _this = this; - - var self = this; - var nodeMap = self.doc.data[this.NODEMAP_NAME]; - var edgeMap = self.doc.data[this.EDGEMAP_NAME]; - var shareDBLayoutProperties = self.doc.data[this.LAYOUT_PROPS_NAME][0]; - var globalOptions = self.doc.data[this.GLOBAL_OPTS_NAME][0]; - var genomicDataMap = self.doc.data[this.GENOMIC_DATA_MAP_NAME]; - var visDataMap = self.doc.data[this.VISIBLE_GENOMIC_DATA_MAP_NAME]; - var groupedGenomicDataMap = self.doc.data[this.GENOMIC_DATA_GROUP_NAME]; - var groupedGenomicDataCount = self.doc.data[this.GENOMIC_DATA_GROUP_COUNT]; - var invalidGenes = []; - var highlightedGenes = []; - var invalidHighlightedGenes = []; - var hiddenGenes = []; - - for (var _i = 0, _a = Object.keys(nodeMap); _i < _a.length; _i++) { - var key = _a[_i]; - var tmpNode = nodeMap[key]; - var tmpNodeId = tmpNode.id; + value: function (op) { + var ele = op.oi; + var eleID = ele.id; + var cyEle = this.cy.$("#" + eleID); + this.changeNameCy(cyEle, ele.name); - if (tmpNode.isInvalidGene && tmpNode.isHighlighted) { - invalidHighlightedGenes.push(tmpNodeId); - } else if (tmpNode.isInvalidGene) { - invalidGenes.push(tmpNodeId); - } else if (tmpNode.isHighlighted) { - highlightedGenes.push(tmpNodeId); - } + if (cyEle.isNode()) { + //Width and height of simple nodes and compounds is changed differently + if (cyEle.isParent()) { + cyEle.style("min-width", ele.minWidth); + cyEle.style("min-width-bias-left", ele.minWidthBiasLeft); + cyEle.style("min-width-bias-right", ele.minWidthBiasRight); + cyEle.style("min-height", ele.minHeight); + cyEle.style("min-height-bias-top", ele.minHeightBiasTop); + cyEle.style("min-height-bias-bottom", ele.minHeightBiasBottom); + } else { + cyEle.data.w = ele.w; + cyEle.data.h = ele.h; + cyEle.style("width", ele.w); + cyEle.style("height", ele.h); //Position is changed only for simple nodes because the + //position of compounds is defined by simple nodes' position - if (tmpNode.isHidden) { - hiddenGenes.push(tmpNodeId); + cyEle.position({ + x: ele.x, + y: ele.y + }); } - } - - var highlightedEdges = []; - - for (var _b = 0, _c = Object.keys(edgeMap); _b < _c.length; _b++) { - var key = _c[_b]; - var tmpEdge = edgeMap[key]; - var tmpEdgeId = tmpEdge.id; - if (tmpEdge.isHighlighted) { - highlightedEdges.push(tmpEdgeId); - } - } //TODO Workaround for legacy pathways - // Workaround for backward compatibility of legacy pathways - // Addition of pubmed id field on server if legacy collaborative - // pathways does not have ! + this.updateVisibility(cyEle, ele.isHidden); + this.updateHighlight(cyEle, ele.isHighlighted); + if (ele.isInvalidGene) { + this.doHighlightInvalidGenes(cyEle); + } else { + this.undoHighlightInvalidGenes(cyEle); + } //Refresh grapples when the node being changed from another collaborator is selected in current window + // this.cy.nodeResize('get').refreshGrapples(); - for (var _d = 0, _e = Object.keys(edgeMap); _d < _e.length; _d++) { - var key = _e[_d]; - var tmpEdge = edgeMap[key]; + } else if (cyEle.isEdge()) { + var pubmedArray = ele.pubmedIDs; + cyEle.data('pubmedIDs', pubmedArray); + this.updateHighlight(cyEle, ele.isHighlighted); + var bendPoint = ele.bendPoint; + var numberOfBendPositions = cyEle.data('bendPointPositions').length; // Holds the number of bend positions in data before being updated + //If edge is reconnected - if (tmpEdge.pubmedIDs == undefined || tmpEdge.name == undefined || tmpEdge.bendPoint == undefined) { - var pubmedIDs = tmpEdge.pubmedIDs == undefined ? [] : tmpEdge.pubmedID; - var edgeLabel = tmpEdge.name == undefined ? "" : tmpEdge.name; - var bendPoint = tmpEdge.bendPoint == undefined ? [] : tmpEdge.bendPoint; - var param = { - type: tmpEdge.type, - source: tmpEdge.source, - id: self.getCustomObjId(), - target: tmpEdge.target, - pubmedID: pubmedIDs, - name: edgeLabel, - bendPoint: bendPoint + if (ele.source !== cyEle.source().id() || ele.target !== cyEle.target().id()) { + var location = { + source: ele.source, + target: ele.target }; - var newEdge = self.edgeInitializer(param); - var tmpEdgeID = tmpEdge.id; - var newEdgeID = newEdge.id; - var ops = [{ - p: [self.EDGEMAP_NAME, tmpEdgeID], - od: tmpEdge - }, { - p: [self.EDGEMAP_NAME, newEdgeID], - oi: newEdge - }]; - self.applyShareDBOperation(ops); - } - } //Add real time nodes to local graph - - - this.editor.addNewElementsLocally(nodeMap, edgeMap); //Adds different type of highlight to nodes and hides if their property is hidden - - this.editor.highlightElementsInitially(invalidHighlightedGenes, invalidGenes, highlightedGenes, highlightedEdges, hiddenGenes); //Update layout properties & global options!! - - this.editor.updateLayoutPropertiesCallback({ - li: shareDBLayoutProperties - }); - this.editor.changeGlobalOptions({ - li: globalOptions - }); //Sync already available genomic data ! - - if (!groupedGenomicDataMap) { - self.insertShareDBObject(self.GENOMIC_DATA_MAP_NAME, '0', []); - - for (var _f = 0, _g = Object.keys(visDataMap); _f < _g.length; _f++) { - var key = _g[_f]; - - var currentMap = external_underscore_default.a.clone(groupedGenomicDataMap['0']); // currentMap.push(visibilityMapKeys[key]); - - - self.updateShareDBObject(self.GENOMIC_DATA_MAP_NAME, '0', currentMap); - } - } - - if (!groupedGenomicDataCount) { - var count = self.doc.data[self.GENOMIC_DATA_GROUP_COUNT]; - var op = [{ - p: [self.GENOMIC_DATA_GROUP_COUNT], - na: -count - }]; - self.applyShareDBOperation(op); - groupedGenomicDataCount = self.doc.data[self.GENOMIC_DATA_GROUP_COUNT]; - } - - for (var _h = 0, _j = Object.keys(genomicDataMap); _h < _j.length; _h++) { - var key_g = _j[_h]; - this.editor.genomicDataOverlayManager.genomicDataMap[key_g] = genomicDataMap[key_g]; - } - - console.log("visDataMap"); - console.log(visDataMap); - - for (var _k = 0, _l = Object.keys(groupedGenomicDataMap); _k < _l.length; _k++) { - var key_g = _l[_k]; - this.editor.genomicDataOverlayManager.groupedGenomicDataMap[key_g] = groupedGenomicDataMap[key_g]; - var data = groupedGenomicDataMap[key_g]; + cyEle.move(location); //make sure that bend points are same - if (data.length !== 1) { - console.log("Grouped genomic data expected to be of length 1 (from sync)"); + this.updateEdgeBendPoints(cyEle); + } else { + cyEle.data('bendPointPositions', bendPoint); + if (numberOfBendPositions !== undefined && numberOfBendPositions > 0) this.edgeEditing.deleteSelectedBendPoint(cyEle, 0); + this.edgeEditing.initBendPoints(cyEle); } - - data.forEach(function (profileId) { - _this.editor.addToProfiles(profileId); - }); } - - for (var _m = 0, _o = Object.keys(visDataMap); _m < _o.length; _m++) { - var key_g = _o[_m]; - this.editor.genomicDataOverlayManager.visibleGenomicDataMapByType[key_g] = visDataMap[key_g]; - this.editor.adjustVisibilityShareDB(key_g, visDataMap[key_g]); - } //Does not seem necessary for not but just for sake of completeness - - - this.editor.genomicDataOverlayManager.groupedGenomicDataCount = groupedGenomicDataCount; - this.editor.genomicDataOverlayManager.showGenomicData(); - this.editor.genomicDataOverlayManager.notifyObservers(); - this.editor.cy.fit(50); } }); ; - /* - * Initialize event listeners for any operation coming from shareDB - * - */ - - Object.defineProperty(ShareDBManager.prototype, "initSharedDocEventHandlers", { + Object.defineProperty(EditorActionsManager.prototype, "getGenomicDataSVG", { enumerable: false, configurable: true, writable: true, - value: function () { - var self = this; //Setup event handlers for maps - - var nodeAddRemoveHandler = function (op) { - self.editor.shareDBNodeAddRemoveEventCallBack(op); - }; - - var edgeAddRemoveHandler = function (op) { - self.editor.shareDBEdgeAddRemoveEventCallBack(op); - }; - - var genomicDataAddRemoveHandler = function (op) { - self.editor.shareDBGenomicDataHandler(op); - }; - - var genomicDataVisibilityChangeHandler = function (op) { - self.editor.shareDBGenomicDataVisibilityHandler(op); - self.checkShareDBGenomicData(); - }; - - var genomicDataGroupChangeHandler = function (op) { - self.editor.shareDBGenomicDataGroupChangeHandler(op); - }; - - var updateElementHandler = function (op) { - self.editor.updateElementCallback(op); - }; - - var updateLayoutPropsHandler = function (op) { - self.editor.updateLayoutPropertiesCallback(op); - }; - - var updateGlobalOptionsHandler = function (op) { - self.editor.changeGlobalOptions(op); - }; //Event listeners for maps - - - this.doc.on('op', function (op, source) { - for (var i = 0; i < op.length; i++) { - var handleOp = op[i]; - var path = handleOp.p[0]; - var isReplaceEvent = self.isShareDBReplaceEvent(handleOp); - - if (!isReplaceEvent) { - if (path === self.NODEMAP_NAME) { - nodeAddRemoveHandler(handleOp); - } else if (path === self.EDGEMAP_NAME) { - edgeAddRemoveHandler(handleOp); - } else if (path === self.GENOMIC_DATA_MAP_NAME) { - genomicDataAddRemoveHandler(handleOp); - } else if (path === self.VISIBLE_GENOMIC_DATA_MAP_NAME) { - genomicDataVisibilityChangeHandler(handleOp); - } else if (path === self.GENOMIC_DATA_GROUP_NAME) { - genomicDataGroupChangeHandler(handleOp); - } - } else { - //Then it is update event - if (path === self.NODEMAP_NAME) { - updateElementHandler(handleOp); - } else if (path === self.EDGEMAP_NAME) { - updateElementHandler(handleOp); - } else if (path === self.LAYOUT_PROPS_NAME) { - updateLayoutPropsHandler(handleOp); - } else if (path === self.GLOBAL_OPTS_NAME) { - updateGlobalOptionsHandler(handleOp); - } - } - } - }); + value: function (node) { + // @ts-ignore + return this.genomicDataOverlayManager.generateSVGForNode(node); } }); - ; - /* - * Make sure that genomic cloud data is syncronized - */ - - Object.defineProperty(ShareDBManager.prototype, "checkShareDBGenomicData", { + Object.defineProperty(EditorActionsManager.prototype, "getOncoprintDataSVG", { + enumerable: false, + configurable: true, + writable: true, + value: function (node) { + return this.genomicDataOverlayManager.generateOncoprintForPatientNode(node); + } + }); + Object.defineProperty(EditorActionsManager.prototype, "removeGenomicData", { enumerable: false, configurable: true, writable: true, value: function () { - var self = this; - var genomicDataMap = self.doc.data[this.GENOMIC_DATA_MAP_NAME]; - var visDataMap = self.doc.data[this.VISIBLE_GENOMIC_DATA_MAP_NAME]; - var groupedGenomicDataMap = self.doc.data[this.GENOMIC_DATA_GROUP_NAME]; - var groupedGenomicDataCount = self.doc.data[this.GENOMIC_DATA_GROUP_COUNT]; - - for (var key in genomicDataMap) { - this.editor.genomicDataOverlayManager.genomicDataMap[key] = genomicDataMap[key]; - } - - for (var key in visDataMap) { - this.editor.genomicDataOverlayManager.visibleGenomicDataMapByType[key] = visDataMap[key]; - } - - for (var key in groupedGenomicDataMap) { - this.editor.genomicDataOverlayManager.groupedGenomicDataMap[key] = groupedGenomicDataMap[key]; + if (this.isCollaborative) { + this.shareDBManager.clearGenomicData(); + } else { + // TODO wrap this in afunction in genomic data overlay manager + this.genomicDataOverlayManager.clearAllGenomicData(); + this.genomicDataOverlayManager.hideGenomicData(); + this.genomicDataOverlayManager.notifyObservers(); } - - this.editor.genomicDataOverlayManager.groupedGenomicDataCount = groupedGenomicDataCount; - this.editor.genomicDataOverlayManager.showGenomicData(); - this.editor.genomicDataOverlayManager.notifyObservers(); - } - }); - ; - /* - * Gets the first empty index from the shared document - * genomic data group count and increments counter by 1 - * - */ - - Object.defineProperty(ShareDBManager.prototype, "getEmptyGroupID", { - enumerable: false, - configurable: true, - writable: true, - value: function () { - var returnCount = this.doc.data[this.GENOMIC_DATA_GROUP_COUNT]; - this.incrementShareDBGroupCount(); - return returnCount; } }); - ; - /* - * Gets the first empty index from the shared document - * Initializes & inserts a new genomic data - * by group id or group name - * - */ - - Object.defineProperty(ShareDBManager.prototype, "groupGenomicData", { + Object.defineProperty(EditorActionsManager.prototype, "addGenomicData", { enumerable: false, configurable: true, writable: true, - value: function (cancerNames, inGroupId) { - var genomicGroupMap = this.doc.data[this.GENOMIC_DATA_GROUP_NAME]; - var genomicVisMap = this.doc.data[this.VISIBLE_GENOMIC_DATA_MAP_NAME]; - var groupID = "" + inGroupId; - var currentGroup = []; - if (genomicGroupMap.hasOwnProperty(groupID)) currentGroup = external_underscore_default.a.clone(genomicGroupMap[groupID]); - - for (var i in cancerNames) { - if (!genomicVisMap.hasOwnProperty(cancerNames[i])) currentGroup.push(cancerNames[i]); - } // If group id already exists change existing object - + value: function (genomicData) { + var groupID = this.getEmptyGroupID(); - if (genomicGroupMap.hasOwnProperty(groupID)) { - this.updateShareDBObject(this.GENOMIC_DATA_GROUP_NAME, groupID, currentGroup); + if (this.isCollaborative) { + var parsedGenomicData = this.genomicDataOverlayManager.prepareGenomicDataShareDB(genomicData); + this.shareDBManager.addGenomicData(parsedGenomicData.genomicDataMap); + this.shareDBManager.groupGenomicData(Object.keys(parsedGenomicData.visibilityMap), groupID); + this.shareDBManager.addGenomicVisibilityData(parsedGenomicData.visibilityMap); } else { - //Insert new group - this.insertShareDBObject(this.GENOMIC_DATA_GROUP_NAME, groupID, currentGroup); + this.genomicDataOverlayManager.addGenomicDataLocally(genomicData, groupID); } } }); - ; //Clears genomic data on shared document - - Object.defineProperty(ShareDBManager.prototype, "clearGenomicData", { + Object.defineProperty(EditorActionsManager.prototype, "adjustVisibilityShareDB", { enumerable: false, configurable: true, writable: true, - value: function () { - this.clearShareDBGenomicData(); + value: function (profileId, isEnabled) { + var targetProfileIndex = this.profiles.map(function (profile) { + return profile.profileId; + }).indexOf(profileId); + this.setProfile(targetProfileIndex, __assign(__assign({}, this.profiles[targetProfileIndex]), { + enabled: isEnabled + })); } }); - ; - Object.defineProperty(ShareDBManager.prototype, "addGenomicData", { + Object.defineProperty(EditorActionsManager.prototype, "addToProfiles", { enumerable: false, configurable: true, writable: true, - value: function (geneData) { - var genomicMap = this.doc.data[this.GENOMIC_DATA_MAP_NAME]; //Iterate over all genmoic data which is mapped by geneSymbol to list of alteration values - //that are also mapped by cancer name and associated value - - var ops = []; - - for (var geneSymbol in geneData) { - var genomicMapEntry = {}; - if (genomicMap.hasOwnProperty(geneSymbol)) genomicMapEntry = external_underscore_default.a.clone(genomicMap[geneSymbol]); - - for (var cancerType in geneData[geneSymbol]) { - if (!(cancerType in genomicMapEntry)) genomicMapEntry[cancerType] = parseInt(geneData[geneSymbol][cancerType]).toFixed(2); - } - - ops.push({ - p: [this.GENOMIC_DATA_MAP_NAME, geneSymbol], - oi: genomicMapEntry - }); + value: function (profileId) { + // Check if this profile already exists + if (this.profiles.map(function (profile) { + return profile.profileId; + }).includes(profileId)) { + return; } - this.applyShareDBOperation(ops); + this.addProfile({ + profileId: profileId, + enabled: true + }); } }); - ; - Object.defineProperty(ShareDBManager.prototype, "addGenomicVisibilityData", { + Object.defineProperty(EditorActionsManager.prototype, "addPortalGenomicData", { enumerable: false, configurable: true, writable: true, - value: function (visMap) { - var ops = []; - - for (var cancerStudy in visMap) { - ops.push({ - p: [this.VISIBLE_GENOMIC_DATA_MAP_NAME, cancerStudy], - oi: visMap[cancerStudy] - }); + value: function (genomicData, groupID) { + if (this.isCollaborative) { + var parsedGenomicData = this.genomicDataOverlayManager.preparePortalGenomicDataShareDB(genomicData); + this.shareDBManager.addGenomicData(parsedGenomicData.genomicDataMap); + this.shareDBManager.groupGenomicData(Object.keys(parsedGenomicData.visibilityMap), groupID); + this.shareDBManager.addGenomicVisibilityData(parsedGenomicData.visibilityMap); + } else { + this.genomicDataOverlayManager.addPortalGenomicData(genomicData, groupID); } - - this.applyShareDBOperation(ops); } }); - ; - Object.defineProperty(ShareDBManager.prototype, "changeVisibility", { + Object.defineProperty(EditorActionsManager.prototype, "shareDBGenomicDataHandler", { enumerable: false, configurable: true, writable: true, - value: function (nodesToHide, isHidden) { - var self = this; - var nodeMap = self.doc.data[this.NODEMAP_NAME]; - nodesToHide.forEach(function (ele) { - var nodeID = ele.id(); + value: function (op) { + var isRemove = Object.keys(op)[1] === 'od'; + var newData = op.oi; + var geneSymbol = op.p[1]; - if (nodeMap.hasOwnProperty(nodeID)) { - var realTimeNode = nodeMap[nodeID]; - realTimeNode.isHidden = isHidden; - self.updateShareDBObject(self.NODEMAP_NAME, nodeID, realTimeNode); + if (!isRemove) { + this.genomicDataOverlayManager.addGenomicDataWithGeneSymbol(geneSymbol, newData); + } // Removal + else { + this.genomicDataOverlayManager.removeGenomicDataWithGeneSymbol(geneSymbol); } - }); } }); - ; - Object.defineProperty(ShareDBManager.prototype, "changeHighlight", { + Object.defineProperty(EditorActionsManager.prototype, "shareDBGenomicDataGroupChangeHandler", { enumerable: false, configurable: true, writable: true, - value: function (elementsToHighlight, isHighlighted) { - var self = this; - var nodeMap = self.doc.data[this.NODEMAP_NAME]; - var edgeMap = self.doc.data[this.EDGEMAP_NAME]; - elementsToHighlight.forEach(function (ele) { - var elementID = ele.id(); + value: function (op) { + var _this = this; - if (nodeMap.hasOwnProperty(elementID)) { - var realTimeNode = nodeMap[elementID]; - realTimeNode.isHighlighted = isHighlighted; - self.updateShareDBObject(self.NODEMAP_NAME, elementID, realTimeNode); - } + var isRemove = Object.keys(op)[1] === 'od'; + var data = op.oi; + var key = op.p[1]; // Addition - if (edgeMap.hasOwnProperty(elementID)) { - var realTimeEdge = edgeMap[elementID]; - realTimeEdge.isHighlighted = isHighlighted; - self.updateShareDBObject(self.EDGEMAP_NAME, elementID, realTimeEdge); + if (!isRemove) { + this.genomicDataOverlayManager.addGenomicGroupData(key, data); + + if (data.length !== 1) { + console.log("Grouped genomic data expected to be of length 1"); } - }); + + data.forEach(function (profileId) { + _this.addToProfiles(profileId); + }); + } // //Removal + // else + // { + // + // } + + + this.genomicDataOverlayManager.showGenomicData(); + this.genomicDataOverlayManager.notifyObservers(); } }); - ; - Object.defineProperty(ShareDBManager.prototype, "addNewNode", { + Object.defineProperty(EditorActionsManager.prototype, "shareDBGenomicDataVisibilityHandler", { enumerable: false, configurable: true, writable: true, - value: function (nodeData, posData) { - var realTimeGeneratedID = this.getCustomObjId(); - var params = { - name: nodeData.name, - type: nodeData.type, - id: realTimeGeneratedID, - parent: nodeData.parent, - w: nodeData.w, - h: nodeData.h, - minWidth: nodeData.minWidth, - minWidthBiasLeft: nodeData.minWidthBiasLeft, - minWidthBiasRight: nodeData.minWidthBiasRight, - minHeight: nodeData.minHeight, - minHeightBiasTop: nodeData.minHeightBiasTop, - minHeightBiasBottom: nodeData.minHeightBiasBottom - }; //Ensures new node is compatible with the other nodes - - var newNode = this.nodeInitializer(params); + value: function (op) { + var data = op.oi; + var key = op.p[1]; + var isRemove = Object.keys(op)[1] === 'od'; // Addition - if (posData) { - newNode.x = posData.x; - newNode.y = posData.y; - } + if (!isRemove) { + this.genomicDataOverlayManager.addGenomicVisData(key, data); + this.adjustVisibilityShareDB(key, data); + } // Removal + else { + this.genomicDataOverlayManager.removeGenomicVisData(); + this.removeProfiles(); + } - this.insertShareDBObject(this.NODEMAP_NAME, realTimeGeneratedID, newNode); + this.genomicDataOverlayManager.showGenomicData(); + this.genomicDataOverlayManager.notifyObservers(); } }); - ; - Object.defineProperty(ShareDBManager.prototype, "addNewEdge", { + Object.defineProperty(EditorActionsManager.prototype, "resizeNodesToContent", { enumerable: false, configurable: true, writable: true, - value: function (edgeData) { - var realTimeGeneratedID = this.getCustomObjId(); - var params = { - type: edgeData.type, - id: realTimeGeneratedID, - source: edgeData.source, - target: edgeData.target, - pubmedIDs: edgeData.pubmedIDs, - name: edgeData.name, - bendPoint: edgeData.bendPoint - }; //Ensures new edge is compatible with the other edge - - var newEdge = this.edgeInitializer(params); - this.insertShareDBObject(this.EDGEMAP_NAME, realTimeGeneratedID, newEdge); - } - }); - ; - Object.defineProperty(ShareDBManager.prototype, "removeElement", { - enumerable: false, - configurable: true, - writable: true, - value: function (elementID) { - var edgeMap = this.doc.data[this.EDGEMAP_NAME]; - var nodeMap = this.doc.data[this.NODEMAP_NAME]; + value: function (nodes) { + if (this.isCollaborative) { + var visibleNumberOfData_1 = this.genomicDataOverlayManager.countVisibleGenomicDataByType(); + var labelWithData_1 = 148 + (visibleNumberOfData_1 - 3) * 36; + var rt_1 = this.shareDBManager; + nodes.forEach(function (ele) { + if (!ele.isParent()) { + var newWidth = 150; + var newHeight = 52; - if (nodeMap.hasOwnProperty(elementID)) { - this.deleteShareDBObject(this.NODEMAP_NAME, elementID); - } else if (edgeMap.hasOwnProperty(elementID)) { - this.deleteShareDBObject(this.EDGEMAP_NAME, elementID); + if (ele.data('name') != "") { + var labelLength = ele.style('label').length * 10 + 6; + newWidth = labelLength; + newHeight = 24; + } + + if (visibleNumberOfData_1 > 0) { + newHeight = 52; + + if (visibleNumberOfData_1 < 4) { + if (150 > newWidth) newWidth = 150; + } else { + if (labelWithData_1 > newWidth) newWidth = labelWithData_1; + } + } + + rt_1.setSizeOfElement(ele, newWidth, newHeight); + } else { + //Set the minWidth, minHeight and other properties of compound to 0 + rt_1.resizeCompound(ele, 0, 0, 0, 0, 0, 0); + } + }); } else { - throw new Error('Element does not exist in Real Time'); + var ur = this.cy.undoRedo(); + var actions_1 = []; + var visibleNumberOfData_2 = this.genomicDataOverlayManager.countVisibleGenomicDataByType(); + var labelWithData_2 = 150 + (visibleNumberOfData_2 - 3) * 36; + nodes.forEach(function (ele) { + if (!ele.isParent()) { + var newWidth = 150; + var newHeight = 52; + + if (ele.data('name') != "") { + var labelLength = ele.style('label').length * 6 + 24; + newWidth = labelLength; + newHeight = 24; + } + + if (visibleNumberOfData_2 > 0) { + newHeight = 52; + + if (visibleNumberOfData_2 < 4) { + if (150 > newWidth) newWidth = 150; + } else { + if (labelWithData_2 > newWidth) newWidth = labelWithData_2; + } + } + + var args = { + ele: ele, + oldWidth: ele.width(), + newWidth: newWidth, + oldHeight: ele.height(), + newHeight: newHeight + }; + actions_1.push({ + name: "changeNodeSize", + param: args + }); + } else { + var args = { + ele: ele, + oldMinWidth: ele.style("min-width"), + newMinWidth: 0, + oldMinWidthBiasLeft: ele.style("min-width-bias-left"), + newMinWidthBiasLeft: 0, + oldMinWidthBiasRight: ele.style("min-width-bias-right"), + newMinWidthBiasRight: 0, + oldMinHeight: ele.style("min-height"), + newMinHeight: 0, + oldMinHeightBiasTop: ele.style("min-height-bias-top"), + newMinHeightBiasTop: 0, + oldMinHeightBiasBottom: ele.style("min-height-bias-bottom"), + newMinHeightBiasBottom: 0 + }; + actions_1.push({ + name: "changeCompoundSize", + param: args + }); + } + }); + ur.do("batch", actions_1); } + + this.cy.nodeResize('get').refreshGrapples(); } }); ; - Object.defineProperty(ShareDBManager.prototype, "moveElement", { - enumerable: false, + Object.defineProperty(EditorActionsManager, "defaultLayoutProperties", { + enumerable: true, configurable: true, writable: true, - value: function (ele) { - var nodeMap = this.doc.data[this.NODEMAP_NAME]; - var elementID = ele.id(); - var newPos = ele.position(); - - if (nodeMap.hasOwnProperty(elementID)) { - var tmpNode = nodeMap[elementID]; - tmpNode.x = newPos.x; - tmpNode.y = newPos.y; - this.updateShareDBObject(this.NODEMAP_NAME, elementID, tmpNode); - } else { - throw new Error('Element does not exist in nodes !!! '); - } + value: { + name: 'cose-bilkent', + nodeRepulsion: 4500, + idealEdgeLength: 50, + edgeElasticity: 0.45, + nestingFactor: 0.1, + gravity: 0.25, + numIter: 2500, + tile: true, + animate: true, + randomize: false, + gravityRangeCompound: 1.5, + // Gravity force (constant) for compounds + gravityCompound: 1.0, + // Gravity range (constant) + gravityRange: 3.8, + // Amount of vertical space to put between degree zero nodes during tiling (can also be a function) + tilingPaddingVertical: 10, + // Amount of horizontal space to put between degree zero nodes during tiling (can also be a function) + tilingPaddingHorizontal: 10, + // Initial cooling factor for incremental layout + initialEnergyOnIncremental: 0.5, + animationDuration: 2000, + animationEasing: 'cubic-bezier(0.17,0.72,0.41,0.98)' } }); - ; //This function is used for movements of all selected elements wrt alignment selected - Object.defineProperty(ShareDBManager.prototype, "changeElementsPositionByAlignment", { - enumerable: false, - configurable: true, - writable: true, - value: function (coll) { - var self = this; - var nodeMap = self.doc.data[this.NODEMAP_NAME]; - coll.forEach(function (ele) { - var elementID = ele.node.id(); + EditorActionsManager_decorate([external_mobx_["observable"]], EditorActionsManager.prototype, "profiles", void 0); - if (nodeMap.hasOwnProperty(elementID)) { - var tmpNode = nodeMap[elementID]; - tmpNode.x = ele.nextPosition.x; - tmpNode.y = ele.nextPosition.y; - self.updateShareDBObject(self.NODEMAP_NAME, elementID, tmpNode); - } else { - throw new Error('Element does not exist in nodes !!! '); - } - }); + EditorActionsManager_decorate([external_mobx_["action"].bound], EditorActionsManager.prototype, "setProfile", null); + + EditorActionsManager_decorate([external_mobx_["action"].bound], EditorActionsManager.prototype, "addProfile", null); + + EditorActionsManager_decorate([external_mobx_["action"].bound], EditorActionsManager.prototype, "removeProfiles", null); + + return EditorActionsManager; +}(); + +/* harmony default export */ var managers_EditorActionsManager = (EditorActionsManager_EditorActionsManager); +// CONCATENATED MODULE: ./src/modals/LayoutProperties.tsx +var LayoutProperties_extends = undefined && undefined.__extends || function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || { + __proto__: [] + } instanceof Array && function (d, b) { + d.__proto__ = b; + } || function (d, b) { + for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; + }; + + return extendStatics(d, b); + }; + + return function (d, b) { + extendStatics(d, b); + + function __() { + this.constructor = d; } - }); - ; - Object.defineProperty(ShareDBManager.prototype, "resizeElement", { + + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +}(); + +var LayoutProperties_decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { + var c = arguments.length, + r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, + d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; + + + + + + + + +var LayoutProperties_LayoutProperties = +/** @class */ +function (_super) { + LayoutProperties_extends(LayoutProperties, _super); + + function LayoutProperties(props) { + var _this = _super.call(this, props) || this; + + LayoutProperties_1.layoutProperties = external_lodash_default.a.clone(managers_EditorActionsManager.defaultLayoutProperties); + return _this; + } + + LayoutProperties_1 = LayoutProperties; + Object.defineProperty(LayoutProperties.prototype, "updateLayoutProperties", { enumerable: false, configurable: true, writable: true, - value: function (ele, previousWidth, previousHeight) { - var nodeMap = this.doc.data[this.NODEMAP_NAME]; - var elementID = ele.id(); - var newWidth = ele.width(); - var newHeight = ele.height(); - var currentX = ele.position('x'); - var currentY = ele.position('y'); - - if (nodeMap.hasOwnProperty(elementID)) { - var tmpNode = nodeMap[elementID]; - tmpNode.x = currentX + newWidth - previousWidth; - tmpNode.y = currentY + newHeight - previousHeight; - tmpNode.w = newWidth; - tmpNode.h = newHeight; - this.updateShareDBObject(this.NODEMAP_NAME, elementID, tmpNode); - } else { - throw new Error('Element does not exist in nodes !!! '); - } + value: function (property, val) { + LayoutProperties_1.layoutProperties[property] = val; } }); - ; - Object.defineProperty(ShareDBManager.prototype, "setSizeOfElement", { + Object.defineProperty(LayoutProperties.prototype, "render", { enumerable: false, configurable: true, writable: true, - value: function (ele, newWidth, newHeight) { - var nodeMap = this.doc.data[this.NODEMAP_NAME]; - var elementID = ele.id(); - - if (nodeMap.hasOwnProperty(elementID)) { - var tmpNode = nodeMap[elementID]; - tmpNode.w = newWidth; - tmpNode.h = newHeight; - this.updateShareDBObject(this.NODEMAP_NAME, elementID, tmpNode); - } else { - throw new Error('Element does not exist in nodes !!! '); - } - } - }); - ; - Object.defineProperty(ShareDBManager.prototype, "resizeCompound", { - enumerable: false, - configurable: true, - writable: true, - value: function (ele, minWidth, minWidthBiasLeft, minWidthBiasRight, minHeight, minHeightBiasTop, minHeightBiasBottom) { - var nodeMap = this.doc.data[this.NODEMAP_NAME]; - var elementID = ele.id(); - var currentX = ele.position('x'); - var currentY = ele.position('y'); - - if (nodeMap.hasOwnProperty(elementID)) { - var tmpNode = nodeMap[elementID]; - tmpNode.x = currentX; - tmpNode.y = currentY; - tmpNode.minWidth = minWidth; - tmpNode.minWidthBiasLeft = minWidthBiasLeft; - tmpNode.minWidthBiasRight = minWidthBiasRight; - tmpNode.minHeight = minHeight; - tmpNode.minHeightBiasTop = minHeightBiasTop; - tmpNode.minHeightBiasBottom = minHeightBiasBottom; - this.updateShareDBObject(this.NODEMAP_NAME, elementID, tmpNode); - } else { - throw new Error('Element does not exist in nodes !!! '); - } - } - }); - ; - Object.defineProperty(ShareDBManager.prototype, "changeNodePositionsShareDB", { - enumerable: false, - configurable: true, - writable: true, - value: function (nodes) { - var self = this; - var nodeMap = self.doc.data[self.NODEMAP_NAME]; - nodes.forEach(function (ele) { - var nodeID = ele.id(); + value: function () { + var _this = this; - if (nodeMap.hasOwnProperty(nodeID)) { - var realTimeNode = nodeMap[nodeID]; - realTimeNode.x = ele.position('x'); - realTimeNode.y = ele.position('y'); - self.updateShareDBObject(self.NODEMAP_NAME, nodeID, realTimeNode); - } else { - throw new Error('Element does not exist in nodes !!! '); + return external_react_default.a.createElement(external_react_bootstrap_["Modal"], { + id: "layoutPropertiesDiv", + show: this.props.isModalShown, + onHide: function () { + _this.props.handleClose(EModalType.LAYOUT); } - }); - } - }); - ; - Object.defineProperty(ShareDBManager.prototype, "changeHighlightInvalidGenes", { - enumerable: false, - configurable: true, - writable: true, - value: function (nodeIDs, isInvalid) { - var nodeMap = this.doc.data[this.NODEMAP_NAME]; //TODO check compound operation inside or outside of for ? - - for (var i in nodeIDs) { - var nodeID = nodeIDs[i]; - - if (nodeMap.hasOwnProperty(nodeID)) { - var collaborativeNode = nodeMap[nodeID]; - collaborativeNode.isInvalidGene = isInvalid; - this.updateShareDBObject(this.NODEMAP_NAME, nodeID, collaborativeNode); + }, external_react_default.a.createElement(external_react_bootstrap_["Modal"].Header, { + closeButton: true + }, external_react_default.a.createElement(external_react_bootstrap_["Modal"].Title, null, external_react_default.a.createElement("h3", null, "Layout Properties"))), external_react_default.a.createElement(external_react_bootstrap_["Modal"].Body, { + id: "layoutPropsForm", + className: "leftText" + }, external_react_default.a.createElement(external_react_bootstrap_["Form"], null, external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { + className: "control-label", + sm: 4 + }, "Node Repulsion:"), external_react_default.a.createElement(external_react_bootstrap_["Col"], { + sm: 8 + }, external_react_default.a.createElement(external_react_bootstrap_["FormControl"], { + type: "text", + value: LayoutProperties_1.layoutProperties.nodeRepulsion + "", + onChange: function (e) { + LayoutProperties_1.layoutProperties.nodeRepulsion = Number(e.target.value); } - } - } - }); - ; - Object.defineProperty(ShareDBManager.prototype, "addPubmedIDs", { - enumerable: false, - configurable: true, - writable: true, - value: function (edgeID, pubmedIDs) { - var edgeMap = this.doc.data[this.EDGEMAP_NAME]; - - if (edgeMap.hasOwnProperty(edgeID)) { - var tmpEdge = edgeMap[edgeID]; - var nonDuplicateArray = []; - - for (var i = 0; i < pubmedIDs.length; i++) { - if (tmpEdge.pubmedIDs.indexOf(pubmedIDs[i]) < 0) { - nonDuplicateArray.push(pubmedIDs[i]); - } + }))), external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { + sm: 4 + }, external_react_default.a.createElement(external_react_bootstrap_["ControlLabel"], null, "Ideal Edge Length:")), external_react_default.a.createElement(external_react_bootstrap_["Col"], { + sm: 8 + }, external_react_default.a.createElement(external_react_bootstrap_["FormControl"], { + type: "text", + value: LayoutProperties_1.layoutProperties.idealEdgeLength + "", + onChange: function (e) { + LayoutProperties_1.layoutProperties.idealEdgeLength = Number(e.target.value); } - - tmpEdge.pubmedIDs = tmpEdge.pubmedIDs.concat(nonDuplicateArray); - this.updateShareDBObject(this.EDGEMAP_NAME, edgeID, tmpEdge); - } else { - throw new Error('Edge does not exist in real time !!! '); - } - } - }); - ; - Object.defineProperty(ShareDBManager.prototype, "removePubmedID", { - enumerable: false, - configurable: true, - writable: true, - value: function (edgeID, pubmedIDs) { - var edgeMap = this.doc.data[this.EDGEMAP_NAME]; - - if (edgeMap.hasOwnProperty(edgeID)) { - var tmpEdge = edgeMap[edgeID]; - var removedIndices = []; - - for (var i = 0; i < pubmedIDs.length; i++) { - var tmpID = pubmedIDs[i]; - var index = tmpEdge.pubmedIDs.indexOf(tmpID); - - if (index >= 0) { - removedIndices.push(index); - } + }))), external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { + sm: 4 + }, external_react_default.a.createElement(external_react_bootstrap_["ControlLabel"], null, "Edge Elasticity:")), external_react_default.a.createElement(external_react_bootstrap_["Col"], { + sm: 8 + }, external_react_default.a.createElement(external_react_bootstrap_["FormControl"], { + type: "text", + value: LayoutProperties_1.layoutProperties.edgeElasticity + "", + onChange: function (e) { + LayoutProperties_1.layoutProperties.edgeElasticity = e.target.value; } - - for (var i = 0; i < removedIndices.length; i++) { - tmpEdge.pubmedIDs.remove(removedIndices[i]); + }))), external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { + sm: 4 + }, external_react_default.a.createElement(external_react_bootstrap_["ControlLabel"], null, "Nesting Factor:")), external_react_default.a.createElement(external_react_bootstrap_["Col"], { + sm: 8 + }, external_react_default.a.createElement(external_react_bootstrap_["FormControl"], { + type: "text", + value: LayoutProperties_1.layoutProperties.nestingFactor + "", + onChange: function (e) { + LayoutProperties_1.layoutProperties.nestingFactor = e.target.value; } - - this.updateShareDBObject(this.EDGEMAP_NAME, edgeID, tmpEdge); - } else { - throw new Error('Edge does not exist in real time !!! '); - } - } - }); - ; - Object.defineProperty(ShareDBManager.prototype, "updateEdgeBendPoints", { - enumerable: false, - configurable: true, - writable: true, - value: function (edgeID, bendPointsArray) { - var edgeMap = this.doc.data[this.EDGEMAP_NAME]; - - if (edgeMap.hasOwnProperty(edgeID)) { - var tmpEdge = edgeMap[edgeID]; - tmpEdge.bendPoint = bendPointsArray; - this.updateShareDBObject(this.EDGEMAP_NAME, edgeID, tmpEdge); - } else { - throw new Error('Edge does not exist in real time !!! '); - } - } - }); - ; - Object.defineProperty(ShareDBManager.prototype, "changeName", { - enumerable: false, - configurable: true, - writable: true, - value: function (ele, newName) { - var nodeMap = this.doc.data[this.NODEMAP_NAME]; - var edgeMap = this.doc.data[this.EDGEMAP_NAME]; - var elementID = ele.id(); - - if (ele.isNode()) { - if (nodeMap.hasOwnProperty(elementID)) { - var tmpNode = nodeMap[elementID]; - tmpNode.name = newName; - this.updateShareDBObject(this.NODEMAP_NAME, elementID, tmpNode); - } else { - throw new Error('Element does not exist in nodes !!! '); + }))), external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { + sm: 4 + }, external_react_default.a.createElement(external_react_bootstrap_["ControlLabel"], null, "Gravity:")), external_react_default.a.createElement(external_react_bootstrap_["Col"], { + sm: 8 + }, external_react_default.a.createElement(external_react_bootstrap_["FormControl"], { + type: "text", + value: LayoutProperties_1.layoutProperties.gravity + "", + onChange: function (e) { + LayoutProperties_1.layoutProperties.gravity = e.target.value; } - } else { - if (edgeMap.hasOwnProperty(elementID)) { - var tmpEdge = edgeMap[elementID]; - tmpEdge.name = newName; - this.updateShareDBObject(this.EDGEMAP_NAME, elementID, tmpEdge); - } else { - throw new Error('Element does not exist in edges !!! '); + }))), external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { + sm: 4 + }, external_react_default.a.createElement(external_react_bootstrap_["ControlLabel"], null, "Gravity Range:")), external_react_default.a.createElement(external_react_bootstrap_["Col"], { + sm: 8 + }, external_react_default.a.createElement(external_react_bootstrap_["FormControl"], { + type: "text", + value: LayoutProperties_1.layoutProperties.gravityRange + "", + onChange: function (e) { + LayoutProperties_1.layoutProperties.gravityRange = e.target.value; } - } - } - }); - ; - Object.defineProperty(ShareDBManager.prototype, "changeParent", { - enumerable: false, - configurable: true, - writable: true, - value: function (rootNode, newParentId, connectedEdges) { - var self = this; - var nodeLookupTable = {}; - - function traverseFromRoot(rootNode, parId) { - /* - remove outermost node, - create new real time node with given parentId, - pass id of this real time node to children, - repeat in a recursive manner - after that restore the edges that dissapear by removed nodes - during change parent - */ - var refNode = rootNode.nodeRef; - var children = rootNode.children; - var newParentId = parId; - - if (refNode) { - var refNodeId = refNode.id(); - var nodeData = refNode.data(); - var posData = refNode.position(); - var currentWidth = refNode.data('w'); - var currentHeight = refNode.data('h'); - var newNodeData = { - name: nodeData.name, - type: nodeData.type, - x: posData.x, - y: posData.y, - w: currentWidth, - h: currentHeight, - parent: -1 - }; - - if (parId) { - newNodeData.parent = parId; - } - - self.removeElement(refNodeId); - var newNode = self.nodeInitializer(newNodeData); - var newNodeId = newNode.id; - self.insertShareDBObject(self.NODEMAP_NAME, newNodeId, newNode); - newParentId = newNodeId; - nodeLookupTable[refNodeId] = newNodeId; + }))), external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { + sm: 4 + }, external_react_default.a.createElement(external_react_bootstrap_["ControlLabel"], null, "Compound Gravity:")), external_react_default.a.createElement(external_react_bootstrap_["Col"], { + sm: 8 + }, external_react_default.a.createElement(external_react_bootstrap_["FormControl"], { + type: "text", + value: LayoutProperties_1.layoutProperties.gravityCompound + "", + onChange: function (e) { + LayoutProperties_1.layoutProperties.gravityCompound = e.target.value; } - - for (var _i = 0, children_1 = children; _i < children_1.length; _i++) { - var childNode = children_1[_i]; - traverseFromRoot(childNode, newParentId); + }))), external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { + sm: 4 + }, external_react_default.a.createElement(external_react_bootstrap_["ControlLabel"], null, "Compound Gravity Range:")), external_react_default.a.createElement(external_react_bootstrap_["Col"], { + sm: 8 + }, external_react_default.a.createElement(external_react_bootstrap_["FormControl"], { + type: "text", + value: LayoutProperties_1.layoutProperties.gravityRangeCompound + "", + onChange: function (e) { + LayoutProperties_1.layoutProperties.gravityRangeCompound = e.target.value; } - } //Begin traversing from given root node - - - traverseFromRoot(rootNode, newParentId); //Restore edges that dissapear by the change parent operation - //TODO compound operations ? - - connectedEdges.forEach(function (edge, index) { - var edgeData = edge.data(); - self.removeElement(edge.id()); - var newSource = nodeLookupTable[edgeData.source]; - var newTarget = nodeLookupTable[edgeData.target]; - - if (newSource) { - edgeData.source = newSource; + }))), external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { + sm: 4 + }, external_react_default.a.createElement(external_react_bootstrap_["ControlLabel"], null, "Number of Iterations:")), external_react_default.a.createElement(external_react_bootstrap_["Col"], { + sm: 8 + }, external_react_default.a.createElement(external_react_bootstrap_["FormControl"], { + type: "text", + value: LayoutProperties_1.layoutProperties.numIter + "", + onChange: function (e) { + LayoutProperties_1.layoutProperties.numIter = e.target.value; + } + }))), external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { + sm: 4 + }, external_react_default.a.createElement(external_react_bootstrap_["ControlLabel"], null, "Tiling Vertical Padding:")), external_react_default.a.createElement(external_react_bootstrap_["Col"], { + sm: 8 + }, external_react_default.a.createElement(external_react_bootstrap_["FormControl"], { + type: "text", + value: LayoutProperties_1.layoutProperties.tilingPaddingVertical + "", + onChange: function (e) { + LayoutProperties_1.layoutProperties.tilingPaddingVertical = e.target.value; + } + }))), external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { + sm: 4 + }, external_react_default.a.createElement(external_react_bootstrap_["ControlLabel"], null, "Tiling Horizontal Padding:")), external_react_default.a.createElement(external_react_bootstrap_["Col"], { + sm: 8 + }, external_react_default.a.createElement(external_react_bootstrap_["FormControl"], { + type: "text", + value: LayoutProperties_1.layoutProperties.tilingPaddingHorizontal + "", + onChange: function (e) { + LayoutProperties_1.layoutProperties.tilingPaddingHorizontal = e.target.value; + } + }))), external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { + sm: 4 + }, external_react_default.a.createElement(external_react_bootstrap_["ControlLabel"], null, "Tile Disconnected:")), external_react_default.a.createElement(external_react_bootstrap_["Col"], { + sm: 8 + }, external_react_default.a.createElement(external_react_bootstrap_["Checkbox"], { + className: "layProps", + checked: LayoutProperties_1.layoutProperties.tile, + onChange: function (e) { + LayoutProperties_1.layoutProperties.tile = !LayoutProperties_1.layoutProperties.tile; + } + }))), external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { + className: "control-label", + sm: 4 + }, "Animate:"), external_react_default.a.createElement(external_react_bootstrap_["Col"], { + sm: 8 + }, external_react_default.a.createElement(external_react_bootstrap_["Checkbox"], { + className: "layProps", + checked: LayoutProperties_1.layoutProperties.animate, + onChange: function (e) { + LayoutProperties_1.layoutProperties.animate = !LayoutProperties_1.layoutProperties.animate; + } + }))), external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { + sm: 4 + }, external_react_default.a.createElement(external_react_bootstrap_["ControlLabel"], null, "Incremental:")), external_react_default.a.createElement(external_react_bootstrap_["Col"], { + sm: 8 + }, external_react_default.a.createElement(external_react_bootstrap_["Checkbox"], { + className: "layProps", + checked: !LayoutProperties_1.layoutProperties.randomize, + onChange: function (e) { + LayoutProperties_1.layoutProperties.randomize = !LayoutProperties_1.layoutProperties.randomize; + } + }))), external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { + sm: 4 + }, external_react_default.a.createElement(external_react_bootstrap_["ControlLabel"], null, "Incremental Cooling Factor:")), external_react_default.a.createElement(external_react_bootstrap_["Col"], { + sm: 8 + }, external_react_default.a.createElement(external_react_bootstrap_["FormControl"], { + type: "text", + value: LayoutProperties_1.layoutProperties.initialEnergyOnIncremental + "", + onChange: function (e) { + LayoutProperties_1.layoutProperties.initialEnergyOnIncremental = e.target.value; } + }))))), external_react_default.a.createElement(external_react_bootstrap_["Modal"].Footer, null, external_react_default.a.createElement(external_react_bootstrap_["Button"], { + onClick: function () { + _this.props.pathwayActions.setLayoutProperties(LayoutProperties_1.layoutProperties); - if (newTarget) { - edgeData.target = newTarget; + _this.props.handleClose(EModalType.LAYOUT); } + }, "Save"), external_react_default.a.createElement(external_react_bootstrap_["Button"], { + onClick: function () { + LayoutProperties_1.layoutProperties = external_lodash_default.a.clone(managers_EditorActionsManager.defaultLayoutProperties); - self.addNewEdge(edgeData); - }); + _this.props.pathwayActions.setLayoutProperties(LayoutProperties_1.layoutProperties); + } + }, "Default"))); } }); - ; - Object.defineProperty(ShareDBManager.prototype, "removeAllElements", { - enumerable: false, - configurable: true, - writable: true, - value: function () { - var nodeMap = this.doc.data[this.NODEMAP_NAME]; - var edgeMap = this.doc.data[this.EDGEMAP_NAME]; - var ops = []; //Remove all real time nodes + var LayoutProperties_1; + LayoutProperties = LayoutProperties_1 = LayoutProperties_decorate([external_mobx_react_["observer"]], LayoutProperties); + return LayoutProperties; +}(external_react_default.a.Component); - for (var _i = 0, _a = Object.keys(nodeMap); _i < _a.length; _i++) { - var key = _a[_i]; - ops.push({ - p: [this.NODEMAP_NAME, key], - od: nodeMap[key] - }); - } //Remove all real time edges +/* harmony default export */ var modals_LayoutProperties = (LayoutProperties_LayoutProperties); +// CONCATENATED MODULE: ./src/modals/PathwayDetailsModal.tsx +var PathwayDetailsModal_extends = undefined && undefined.__extends || function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || { + __proto__: [] + } instanceof Array && function (d, b) { + d.__proto__ = b; + } || function (d, b) { + for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; + }; + return extendStatics(d, b); + }; - for (var _b = 0, _c = Object.keys(edgeMap); _b < _c.length; _b++) { - var key = _c[_b]; - ops.push({ - p: [this.EDGEMAP_NAME, key], - od: edgeMap[key] - }); - } + return function (d, b) { + extendStatics(d, b); - this.applyShareDBOperation(ops); + function __() { + this.constructor = d; } - }); - ; - Object.defineProperty(ShareDBManager.prototype, "loadGraph", { - enumerable: false, - configurable: true, - writable: true, - value: function (nodes, edges) { - var self = this; - this.removeAllElements(); //Function that traverses graph tree recursively. - - var oldIdNewIdMap = {}; - - function traverseTree(node, newParentId) { - node.data.x = node.position.x; - node.data.y = node.position.y; //Update parent ! - if (newParentId) { - var parent = node.data.parent; + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +}(); - if (parent) { - node.data.parent = newParentId; - } - } //Create new real time node +var PathwayDetailsModal_decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { + var c = arguments.length, + r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, + d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; - var newNodeId = self.getCustomObjId(); - var params = node.data; - oldIdNewIdMap[params.id] = newNodeId; - var newNode = self.nodeInitializer(params); - newNode.id = newNodeId; - self.insertShareDBObject(self.NODEMAP_NAME, newNodeId, newNode); //If node has children recursively traverse sub graphs and update parent field of child nodes - if (node.children.length > 0) { - for (var _i = 0, _a = node.children; _i < _a.length; _i++) { - var tmpNode = _a[_i]; - traverseTree(tmpNode, newNodeId); - } - } - } //Create graph hierarchy from given list of flat nodes - var tree = this.graphUtilities.createGraphHierarchyRealTime(nodes); - console.log(tree); //Traverse from root nodes of tree - for (var _i = 0, tree_1 = tree; _i < tree_1.length; _i++) { - var rootLevelNode = tree_1[_i]; - traverseTree(rootLevelNode, undefined); - } - /* - Create real time edges, update the source and target fields, since new ids will be generated for the nodes in - real time - */ +var PathwayDetailsModal_PathwayDetailsModal = +/** @class */ +function (_super) { + PathwayDetailsModal_extends(PathwayDetailsModal, _super); + function PathwayDetailsModal(props) { + var _this = _super.call(this, props) || this; - for (var _a = 0, edges_1 = edges; _a < edges_1.length; _a++) { - var edge = edges_1[_a]; - console.log(edge); - edge.data.source = oldIdNewIdMap[edge.data.source]; - edge.data.target = oldIdNewIdMap[edge.data.target]; - var params = edge.data; - var newEdgeID = self.getCustomObjId(); - params.id = newEdgeID; - var newEdge = self.edgeInitializer(params); - self.insertShareDBObject(self.EDGEMAP_NAME, newEdgeID, newEdge); - } - } - }); - ; - Object.defineProperty(ShareDBManager.prototype, "mergeGraph", { + Object.defineProperty(_this, "pathwayInfo", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + return _this; + } + + Object.defineProperty(PathwayDetailsModal.prototype, "render", { enumerable: false, configurable: true, writable: true, - value: function (nodes, edges) { - var self = this; - var nodeMap = self.doc.data[this.NODEMAP_NAME]; - var realTimeNodeMap = nodeMap; - var realTimeNodeLookupTable = {}; - var realTimeNodeNameLookupTable = {}; - var oldIdNewIdMap = {}; //Create lookup table for real time nodes - //items are stored in an array in the resulting array of nodeMap.items() - // [0] - id, [1] - object + value: function () { + var _this = this; - for (var i in realTimeNodeMap) { - var nodeMapItem = realTimeNodeMap[i]; - realTimeNodeLookupTable[nodeMapItem.id] = nodeMapItem; - realTimeNodeNameLookupTable[nodeMapItem.name] = nodeMapItem; - } //Recursive traverse definition + this.pathwayInfo = this.props.pathwayActions.getPathwayInfo; + return external_react_default.a.createElement(external_react_bootstrap_["Modal"], { + id: "pathwayDetailsDiv", + show: this.props.isModalShown, + onHide: function () { + _this.props.handleClose(4); + } + }, external_react_default.a.createElement(external_react_bootstrap_["Modal"].Header, { + closeButton: true + }, external_react_default.a.createElement(external_react_bootstrap_["Modal"].Title, null, "Pathway Properties")), external_react_default.a.createElement(external_react_bootstrap_["Modal"].Body, null, external_react_default.a.createElement(external_react_bootstrap_["Form"], { + id: "pathwayDetailsForm" + }, external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { + style: { + textAlign: "left" + }, + sm: 4 + }, external_react_default.a.createElement(external_react_bootstrap_["ControlLabel"], null, "File Name:")), external_react_default.a.createElement(external_react_bootstrap_["Col"], { + sm: 8 + }, external_react_default.a.createElement(external_react_bootstrap_["FormControl"], { + type: "text", + onChange: function (e) { + _this.pathwayInfo.fileName = e.target.value; + }, + value: this.pathwayInfo.fileName + }))), external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { + style: { + textAlign: "left" + }, + sm: 4 + }, external_react_default.a.createElement(external_react_bootstrap_["ControlLabel"], null, "Pathway Title:")), external_react_default.a.createElement(external_react_bootstrap_["Col"], { + sm: 8 + }, external_react_default.a.createElement(external_react_bootstrap_["FormControl"], { + type: "text", + onChange: function (e) { + _this.pathwayInfo.pathwayTitle = e.target.value; + }, + value: this.pathwayInfo.pathwayTitle + }))), external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { + style: { + textAlign: "left" + }, + sm: 4 + }, external_react_default.a.createElement(external_react_bootstrap_["ControlLabel"], null, "Pathway Description:")), external_react_default.a.createElement(external_react_bootstrap_["Col"], { + sm: 8 + }, external_react_default.a.createElement("textarea", { + className: "form-control", + rows: 3, + onChange: function (e) { + _this.pathwayInfo.pathwayDetails = e.target.value; + }, + value: this.pathwayInfo.pathwayDetails + }))))), external_react_default.a.createElement(external_react_bootstrap_["Modal"].Footer, null, external_react_default.a.createElement(external_react_bootstrap_["Button"], { + onClick: function () { + _this.props.pathwayActions.setPathwayInfo(_this.pathwayInfo); + + _this.props.handleClose(EModalType.PW_DETAILS); + } + }, "Save"))); + } + }); + PathwayDetailsModal = PathwayDetailsModal_decorate([external_mobx_react_["observer"]], PathwayDetailsModal); + return PathwayDetailsModal; +}(external_react_default.a.Component); +/* harmony default export */ var modals_PathwayDetailsModal = (PathwayDetailsModal_PathwayDetailsModal); +// CONCATENATED MODULE: ./src/modals/ProfilesModal.tsx +var ProfilesModal_extends = undefined && undefined.__extends || function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || { + __proto__: [] + } instanceof Array && function (d, b) { + d.__proto__ = b; + } || function (d, b) { + for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; + }; - function traverseTree(node, newParentId) { - //Search by name ! - //We have not found a node that exist in the graph, add normally - if (!(node.data.name in realTimeNodeNameLookupTable)) { - node.data.x = node.position.x; - node.data.y = node.position.y; //Update parent ! + return extendStatics(d, b); + }; - if (newParentId) { - var parent = node.data.parent; + return function (d, b) { + extendStatics(d, b); - if (parent) { - node.data.parent = newParentId; - } - } //Create new real time node + function __() { + this.constructor = d; + } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +}(); - var newNodeId = self.getCustomObjId(); - oldIdNewIdMap[node.data.id] = newNodeId; - var newNode = self.nodeInitializer(node.data); - newNode.id = newNodeId; - self.insertShareDBObject(self.NODEMAP_NAME, newNodeId, newNode); //If node has children recursively traverse sub graphs and update parent field of child nodes +var ProfilesModal_decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { + var c = arguments.length, + r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, + d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; - if (node.children.length > 0) { - for (var _i = 0, _a = node.children; _i < _a.length; _i++) { - var tmpNode = _a[_i]; - traverseTree(tmpNode, newNodeId); - } - } - } // At this point there exists another node in the graph with the same name as 'node' - // we need to update parent field of children of this node if any - else { - var sameNameNode = realTimeNodeNameLookupTable[node.data.name]; - var sameNodeId = sameNameNode.id; - oldIdNewIdMap[node.data.id] = sameNodeId; //If node has children recursively traverse sub graphs and update parent field of child nodes - if (node.children.length > 0) { - for (var _b = 0, _c = node.children; _b < _c.length; _b++) { - var tmpNode = _c[_b]; - traverseTree(tmpNode, sameNodeId); - } - } - } - } //Traverse from root nodes of tree - var tree = this.graphUtilities.createGraphHierarchyRealTime(nodes); - for (var _i = 0, tree_2 = tree; _i < tree_2.length; _i++) { - var rootLevelNode = tree_2[_i]; - traverseTree(rootLevelNode, rootLevelNode.data.id); - } - /* - Create real time edges, update the source and target fields, since new ids will be generated for the nodes in - real time - */ - var ops = []; +var ProfilesModal_ProfilesModal = +/** @class */ +function (_super) { + ProfilesModal_extends(ProfilesModal, _super); - for (var _a = 0, edges_2 = edges; _a < edges_2.length; _a++) { - var edge = edges_2[_a]; - edge.data.source = oldIdNewIdMap[edge.data.source]; - edge.data.target = oldIdNewIdMap[edge.data.target]; - var newEdge = self.edgeInitializer(edge.data); - var newEdgeID = this.getCustomObjId(); - newEdge.id = newEdgeID; - ops.push({ - p: [self.EDGEMAP_NAME, newEdgeID], - oi: newEdge - }); - } + function ProfilesModal(props) { + var _this = _super.call(this, props) || this; - self.applyShareDBOperation(ops); - } - }); - ; - Object.defineProperty(ShareDBManager.prototype, "updateLayoutProperties", { + Object(external_mobx_["makeObservable"])(_this); + return _this; + } + + Object.defineProperty(ProfilesModal.prototype, "profileEnabledMap", { + get: function () { + var profileEnabledMap = {}; + this.props.profiles.forEach(function (profile) { + profileEnabledMap[profile.profileId] = profile.enabled; + }); + return profileEnabledMap; + }, enumerable: false, - configurable: true, - writable: true, - value: function (newLayoutProperties) { - this.updateShareDBLayoutProperties(newLayoutProperties); - } + configurable: true }); - ; - Object.defineProperty(ShareDBManager.prototype, "updateGlobalOptions", { + Object.defineProperty(ProfilesModal.prototype, "handleProfileLabelClicked", { enumerable: false, configurable: true, writable: true, - value: function (newOptions) { - this.updateShareDBGlobalOptions(newOptions); + value: function (index) { + this.props.handleProfileLabelClicked(index); } }); - ; - /* - * Creates graph hierarchy from given flat list of nodes list, nodes list is assumed to have parent-child - * relationship by a field 'parent' which represents to the id of the parent node This function is specific - * for the needs of TCGA Pathway Curation Tool 04/07/2016 - * - * @param nodes {array}: flat list of nodes of a graph - * @return {array}: Tree representation in array, entries are root level nodes. node.children gives children nodes - * of each node in the returned array. - * a node in corresponding level. - * - * */ - - Object.defineProperty(ShareDBManager.prototype, "createGraphHierarchy", { + Object.defineProperty(ProfilesModal.prototype, "render", { enumerable: false, configurable: true, writable: true, - value: function (nodes) { - //Some arrays and maps for creating graph hierarchy - var tree = []; - var mappedArr = {}; // First map the nodes of the array to an object -> create a hash table. - - for (var i = 0, len = nodes.length; i < len; i++) { - var arrElem = nodes[i]; - mappedArr[arrElem.data.id] = arrElem; - mappedArr[arrElem.data.id].children = []; - } + value: function () { + var _this = this; - for (var _i = 0, _a = Object.keys(mappedArr); _i < _a.length; _i++) { - var id = _a[_i]; - var mappedElem = mappedArr[id]; // If the element is not at the root level, add it to its parent array of children. + var profileLabels = this.props.profiles.map(function (profile, i) { + return external_react_default.a.createElement(external_react_default.a.Fragment, { + key: i + }, external_react_default.a.createElement(external_react_bootstrap_["Label"], { + onClick: function () { + _this.handleProfileLabelClicked(i); - if (mappedElem.data.parent) { - mappedArr[mappedElem.data.parent].children.push(mappedElem); - } // If the element is at the root level, add it to first level elements array. - else { - tree.push(mappedElem); - } - } - - return tree; + _this.props.editor.updateGenomicDataVisibility(_this.profileEnabledMap); + }, + onMouseEnter: function () { + document.body.style.cursor = "pointer"; + }, + onMouseLeave: function () { + document.body.style.cursor = "default"; + }, + style: { + fontSize: "85%" + }, + bsStyle: _this.props.profiles[i].enabled ? "primary" : "default" + }, profile.profileId), external_react_default.a.createElement("br", null), external_react_default.a.createElement("br", null)); + }); + return external_react_default.a.createElement(external_react_bootstrap_["Modal"], { + show: this.props.isModalShown, + onHide: function () { + _this.props.handleClose(EModalType.PROFILES); + } + }, external_react_default.a.createElement(external_react_bootstrap_["Modal"].Header, { + closeButton: true + }, external_react_default.a.createElement(external_react_bootstrap_["Modal"].Title, null, "Genomic Data Set(s) to Show")), external_react_default.a.createElement(external_react_bootstrap_["Modal"].Body, null, profileLabels.length > 0 ? profileLabels : external_react_default.a.createElement("h4", { + className: "modal-title" + }, "There is currently no data to show"))); } }); - ; //Makes sure that edge is compatible with edges in shared document - Object.defineProperty(ShareDBManager.prototype, "edgeInitializer", { - enumerable: false, - configurable: true, - writable: true, - value: function (params) { - var edge = {}; - edge.id = params.id || this.getCustomObjId(); - edge.type = params.type || "undefined"; - edge.source = params.source || "undefined"; - edge.target = params.target || "undefined"; - edge.name = params.name || ""; - edge.isHighlighted = params.isHighlighted || false; + ProfilesModal_decorate([external_mobx_["computed"]], ProfilesModal.prototype, "profileEnabledMap", null); - if (params.pubmedIDs) { - if (edge.pubmedIDs == undefined) { - edge.pubmedIDs = []; - } + ProfilesModal = ProfilesModal_decorate([external_mobx_react_["observer"]], ProfilesModal); + return ProfilesModal; +}(external_react_default.a.Component); - if (params.pubmedIDs.length > 0) edge.pubmedIDs.push(params.pubmedIDs); - } else { - edge.pubmedIDs = []; - } +/* harmony default export */ var modals_ProfilesModal = (ProfilesModal_ProfilesModal); +// CONCATENATED MODULE: ./src/modals/QuickHelpModal.tsx +var QuickHelpModal_extends = undefined && undefined.__extends || function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || { + __proto__: [] + } instanceof Array && function (d, b) { + d.__proto__ = b; + } || function (d, b) { + for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; + }; - if (params.bendPoint) { - if (edge.bendPoint == undefined) { - edge.bendPoint = []; - } + return extendStatics(d, b); + }; - edge.bendPoint.push(params.bendPoint); - } else { - edge.bendPoint = []; - } + return function (d, b) { + extendStatics(d, b); - return edge; + function __() { + this.constructor = d; } - }); - ; //Makes sure that node is compatible with nodes in shared document - Object.defineProperty(ShareDBManager.prototype, "nodeInitializer", { - enumerable: false, - configurable: true, - writable: true, - value: function (params) { - var node = {}; - node.id = params.id || this.getCustomObjId(); - node.name = params.name || "undefined"; - node.type = params.type || "undefined"; - node.parent = params.parent || "undefined"; - node.x = params.x || "undefined"; - node.y = params.y || "undefined"; - node.w = params.w || "undefined"; - node.h = params.h || "undefined"; - node.minWidth = params.minWidth || 0; - node.minWidthBiasLeft = params.minWidth || 0; - node.minWidthBiasRight = params.minWidth || 0; - node.minHeight = params.minWidth || 0; - node.minHeightBiasTop = params.minWidth || 0; - node.minHeightBiasBottom = params.minWidth || 0; - node.isHidden = params.isHidden || false; - node.isInvalidGene = params.isInvalidGene || false; - node.isHighlighted = params.isHighlighted || false; - return node; - } - }); - ; //Makes sure that layout properties is compatible with layout properties in shared document + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +}(); - Object.defineProperty(ShareDBManager.prototype, "layoutPropertiesInitializer", { - enumerable: false, - configurable: true, - writable: true, - value: function (params) { - var layoutProperties = {}; - layoutProperties.name = params.name || 'undefined'; - layoutProperties.nodeRepulsion = params.nodeRepulsion || 'undefined'; // this.nodeOverlap = params.nodeOverlap || 'undefined'; - layoutProperties.idealEdgeLength = params.idealEdgeLength || 'undefined'; - layoutProperties.edgeElasticity = params.edgeElasticity || 'undefined'; - layoutProperties.nestingFactor = params.nestingFactor || 'undefined'; - layoutProperties.gravity = params.gravity || 'undefined'; - layoutProperties.numIter = params.numIter || 'undefined'; - layoutProperties.tile = params.tile || 'undefined'; - layoutProperties.animate = params.animate || 'undefined'; - layoutProperties.randomize = params.randomize || false; - layoutProperties.gravityRangeCompound = params.gravityRangeCompound || 'undefined'; - layoutProperties.gravityCompound = params.gravityCompound || 'undefined'; - layoutProperties.gravityRange = params.gravityRange || 'undefined'; - layoutProperties.tilingPaddingVertical = params.tilingPaddingVertical || 'undefined'; - layoutProperties.tilingPaddingHorizontal = params.tilingPaddingHorizontal || 'undefined'; - layoutProperties.initialEnergyOnIncremental = params.initialEnergyOnIncremental || 'undefined'; - return layoutProperties; - } - }); - ; //Makes sure that global options is compatible with global options in shared document - Object.defineProperty(ShareDBManager.prototype, "globalOptionsInitializer", { - enumerable: false, - configurable: true, - writable: true, - value: function (params) { - var globalOptions = {}; - globalOptions.zoomLevel = params.zoomLevel || 'undefined'; - globalOptions.panLevel = params.panLevel || 'undefined'; - return globalOptions; - } - }); - ; //Create unique ID for elements - Object.defineProperty(ShareDBManager.prototype, "getCustomObjId", { - enumerable: false, - configurable: true, - writable: true, - value: function () { - // see http://stackoverflow.com/a/8809472 - // we need to take care of our own IDs because the ones automatically generated by cytoscape (also UUID) - // don't comply with xsd:SID type that must not begin with a number - // Public Domain/MIT - var d = Date.now(); - if (typeof performance !== 'undefined' && typeof performance.now === 'function') { - d += performance.now(); //use high-precision timer if available - } +var QuickHelpModal_QuickHelpModal = +/** @class */ +function (_super) { + QuickHelpModal_extends(QuickHelpModal, _super); - return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { - var r = (d + Math.random() * 16) % 16 | 0; - d = Math.floor(d / 16); - return (c === 'x' ? r : r & 0x3 | 0x8).toString(16); - }); - } - }); - ; - Object.defineProperty(ShareDBManager.prototype, "getParam", { + function QuickHelpModal(props) { + return _super.call(this, props) || this; + } + + Object.defineProperty(QuickHelpModal.prototype, "render", { enumerable: false, configurable: true, writable: true, - value: function (urlParam) { - var regExp = new RegExp(urlParam + '=(.*?)($|&)', 'g'); - var match = window.location.search.match(regExp); - - if (match && match.length) { - match = match[0]; - match = match.replace(urlParam + '=', '').replace('&', ''); - } else { - match = null; - } + value: function () { + var _this = this; - return match; + return external_react_default.a.createElement(external_react_bootstrap_["Modal"], { + id: "quickHelpModal", + show: this.props.isModalShown, + onHide: function () { + _this.props.handleClose(EModalType.HELP); + } + }, external_react_default.a.createElement(external_react_bootstrap_["Modal"].Header, { + closeButton: true + }, external_react_default.a.createElement(external_react_bootstrap_["Modal"].Title, null, "Quick Help")), external_react_default.a.createElement(external_react_bootstrap_["Modal"].Body, null, external_react_default.a.createElement("ul", { + className: "leftText" + }, external_react_default.a.createElement("li", null, external_react_default.a.createElement("strong", null, "To add a node:"), " Drag and drop from node palette"), external_react_default.a.createElement("li", null, external_react_default.a.createElement("strong", null, "To add an interaction:"), " Click on interaction type; then click on small circle on source node and release on target node"), external_react_default.a.createElement("li", null, external_react_default.a.createElement("strong", null, "To add a node into a container (family, complex, compartment or process):"), " Drag the node into its container node or select nodes to be contained and right click on container node and choose \"Add Selected Into This\""), external_react_default.a.createElement("li", null, external_react_default.a.createElement("strong", null, "To delete nodes/interactions:"), " Select and perform Edit > Delete Selected"), external_react_default.a.createElement("li", null, external_react_default.a.createElement("strong", null, "To overlay experiment data:"), " Select Alteration % > Load From cBioPortal...")))); } }); - ; - return ShareDBManager; -}(); - -/* harmony default export */ var managers_ShareDBManager = (ShareDBManager_ShareDBManager); -// EXTERNAL MODULE: external "react-toastify" -var external_react_toastify_ = __webpack_require__(10); + return QuickHelpModal; +}(external_react_default.a.Component); +/* harmony default export */ var modals_QuickHelpModal = (QuickHelpModal_QuickHelpModal); // CONCATENATED MODULE: ./src/utils/CBioPortalAccessor.tsx @@ -12780,9 +11916,7 @@ function () { var numOfTumorSamples = tumorSamples.length - 2; var outData = {}; outData[geneticProfileId] = {}; - var geneticProfileType = CBioPortalAccessor.getDataType(geneticProfileId); - console.log("geneticProfileType"); - console.log(geneticProfileType); // skip meta line and iterate over tumor sample data + var geneticProfileType = CBioPortalAccessor.getDataType(geneticProfileId); // skip meta line and iterate over tumor sample data for (var i = startIndex + 1; i < lines.length; i++) { if (lines[i].length <= 0) continue; //Iterate over samples for each gene to calculate profile data @@ -12796,7 +11930,6 @@ function () { profileDataAlteration++; } else if (geneticProfileType === CBioPortalAccessor.GENE_EXPRESSION && (parseFloat(lineData[j]) >= CBioPortalAccessor.Z_SCORE_UPPER_THRESHOLD || parseFloat(lineData[j]) <= CBioPortalAccessor.Z_SCORE_LOWER_THRESHOLD)) { profileDataAlteration++; - console.log(parseInt(lineData[j]), parseFloat(lineData[j]), lineData[j]); } } } // @@ -12832,8 +11965,6 @@ function () { request.onreadystatechange = function () { if (request.readyState === XMLHttpRequest.DONE && request.status === 200) { - console.log("Query Result"); - console.log(request.responseText); self.calcAlterationPercentages(request.responseText, params.geneticProfileId, callbackFunction); external_react_toastify_["toast"].success(params.geneticProfileId + " is succesfully loaded from cBioPortal"); } @@ -12859,8 +11990,6 @@ function () { queryURL += gene; } - console.log("queryURL"); - console.log(queryURL); request.open("GET", queryURL); request.send(); } @@ -12878,7 +12007,7 @@ function () { if (request.readyState === XMLHttpRequest.DONE && request.status === 200) { var validGeneSymbols = JSON.parse(request.responseText); - var validGeneArray = external_underscore_default.a.map(validGeneSymbols, function (object) { + var validGeneArray = external_lodash_default.a.map(validGeneSymbols, function (object) { return object.hugoGeneSymbol; }); @@ -12980,341 +12109,294 @@ function () { }(); /* harmony default export */ var utils_CBioPortalAccessor = (CBioPortalAccessor_CBioPortalAccessor); -// CONCATENATED MODULE: ./src/utils/SaveLoadUtility.tsx -var SaveLoadUtility = -/** @class */ -function () { - function SaveLoadUtility() {} //Exports given json graph(based on cy.export()) into a string +// CONCATENATED MODULE: ./src/modals/StudyModal.tsx +var StudyModal_extends = undefined && undefined.__extends || function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || { + __proto__: [] + } instanceof Array && function (d, b) { + d.__proto__ = b; + } || function (d, b) { + for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; + }; + return extendStatics(d, b); + }; - Object.defineProperty(SaveLoadUtility, "exportGraph", { - enumerable: false, - configurable: true, - writable: true, - value: function (pathwayDetails, cy, edgeEditing, graphJSON) { - console.log(graphJSON); - var returnString = pathwayDetails.pathwayTitle + '\n\n'; - returnString += pathwayDetails.pathwayDetails + '\n\n'; //Get nodes and edges + return function (d, b) { + extendStatics(d, b); - var nodes = graphJSON.elements.nodes; // var edges = pathwayDetails.graphJSON.elements.edges; + function __() { + this.constructor = d; + } - var edges = cy.edges(); //Prepare Meta Line + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +}(); - returnString += '--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY\tWIDTH\tHEIGHT--' + '\n'; - console.log("Here"); +var StudyModal_assign = undefined && undefined.__assign || function () { + StudyModal_assign = Object.assign || function (t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; - if (nodes) { - for (var i = 0; i < nodes.length; i++) { - console.log("nodes[i]"); - console.log(nodes[i]); - returnString += this.exportNode(nodes[i]); - } - } //Put a blank line between nodes and edges + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; - returnString += '\n'; - returnString += '--EDGE_ID\tSOURCE\tTARGET\tEDGE_TYPE\tINTERACTION_PUBMED_ID\tEDGE_NAME\tEDGE_BENDS\n'; - - if (edges) { - //Write edges - for (var i = 0; i < edges.length; i++) { - var edgeID = edges[i].data('id'); - var edgeType = edges[i].data('type'); - var source = edges[i].data('source'); - var target = edges[i].data('target'); - var pubmedIDs = edges[i].data('pubmedIDs'); - var pubmedString = ""; - var edgeName = edges[i].data('name') ? edges[i].data('name') : ""; - var numberOfBendPoints = 0; - if (edgeEditing.getSegmentPoints(edges[i]) !== undefined) numberOfBendPoints = edgeEditing.getSegmentPoints(edges[i]).length / 2; - var bendPointPositions = ""; + return StudyModal_assign.apply(this, arguments); +}; - for (var j = 0; j < numberOfBendPoints; j++) { - bendPointPositions += "(" + edgeEditing.getSegmentPoints(edges[i])[2 * j] + ";" + edgeEditing.getSegmentPoints(edges[i])[2 * j + 1] + ")"; - } +var StudyModal_decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { + var c = arguments.length, + r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, + d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; - if (pubmedIDs != undefined) { - for (var j = 0; j < pubmedIDs.length; j++) { - pubmedString += pubmedIDs[j]; - if (j != pubmedIDs.length - 1) pubmedString += ";"; - } - } - returnString += edgeID + '\t' + source + '\t' + target + '\t' + edgeType + '\t' + pubmedString + '\t' + edgeName + '\t' + bendPointPositions + '\n'; - } - } //Finally return a string that includes whole graph lovely and peacefully :) - return returnString; - } - }); - Object.defineProperty(SaveLoadUtility, "exportAsSIFNX", { - enumerable: false, - configurable: true, - writable: true, - value: function (pathwayDetails, graphJSON) { - var returnString = ""; //Get nodes and edges - var nodes = graphJSON.elements.nodes; - var edges = graphJSON.elements.edges; - var nodeMap = {}; //Put a blank line between nodes and edges - returnString += '\n'; - returnString += 'PARTICIPANT\tPARTICIPANT_TYPE\tPARENT_ID\tPOSX\tPOSY\tWIDTH\tHEIGHT' + '\n'; - if (nodes) { - for (var i = 0; i < nodes.length; i++) { - returnString += this.exportNode(nodes[i]); - nodeMap[nodes[i].data.id] = nodes[i]; - } - } //Put a blank line between nodes and edges - returnString += '\n'; - returnString += 'PARTICIPANT_A\tPARTICIPANT_B\tTYPE\tPUBMED_IDS\n'; +var StudyModal_StudyModal = +/** @class */ +function (_super) { + StudyModal_extends(StudyModal, _super); - if (edges) { - //Write edges - for (var i = 0; i < edges.length; i++) { - var edgeType = edges[i].data.type; - var source = edges[i].data.source; - var target = edges[i].data.target; - var edgeName = edges[i].data.name; - var pubmedIDs = edges[i].data.pubmedIDs; - var pubmedString = ""; + function StudyModal(props) { + var _this = _super.call(this, props) || this; - if (pubmedIDs != undefined) { - for (var j = 0; j < pubmedIDs.length; j++) { - pubmedString += pubmedIDs[j]; - if (j != pubmedIDs.length - 1) pubmedString += ";"; - } - } + Object.defineProperty(_this, "dataTypes", { + enumerable: true, + configurable: true, + writable: true, + value: {} + }); + Object.defineProperty(_this, "itemArray", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(_this, "selectedStudyData", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(_this, "portalAccessor", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object(external_mobx_["makeObservable"])(_this); + _this.selectedStudyData = []; + _this.portalAccessor = new utils_CBioPortalAccessor(); - returnString += nodeMap[source].data.name + '\t' + nodeMap[target].data.name + '\t' + edgeType + '\t' + pubmedString + '\t' + edgeName + '\n'; - } - } //Finally return a string that includes whole graph lovely and peacefully :) + _this.fetchStudy(); + return _this; + } - return returnString; + Object.defineProperty(StudyModal.prototype, "setSelectedStudyData", { + enumerable: false, + configurable: true, + writable: true, + value: function (data) { + this.selectedStudyData = data; } }); - Object.defineProperty(SaveLoadUtility, "exportNode", { + Object.defineProperty(StudyModal.prototype, "setDataTypeProperties", { enumerable: false, configurable: true, writable: true, - value: function (node) { - //Node specific data fields - var nodeName = node.data.name; - var parentID = node.data.parent; - var nodeID = node.data.id; - var pos = node.position; - var nodeType = node.data.type; - var nodeW = node.data.w; - var nodeH = node.data.h; //Check if node has a parent, if not set parent id -1 - - if (node.data.parent) { - parentID = node.data.parent; - } else { - parentID = -1; - } // Write a line for a node - - - return nodeName + '\t' + nodeID + '\t' + nodeType + '\t' + parentID + '\t' + parseInt(pos.x) + '\t' + parseInt(pos.y) + '\t' + nodeW + '\t' + nodeH + '\n'; + value: function (dataType, properties) { + this.dataTypes[dataType] = properties; } }); - Object.defineProperty(SaveLoadUtility, "parseGraph", { + Object.defineProperty(StudyModal.prototype, "preparePortalAccess", { enumerable: false, configurable: true, writable: true, - value: function (graph, isArray) { - var allEles = []; - var nodes = []; - var edges = []; // By lines - // Match all new line character representations + value: function (studyId) { + var _this = this; - var seperator = /\r?\n|\r/; - var lines = isArray ? graph : graph.split(seperator); - var edgesStartIndex = -1; //console.log(lines); + this.portalAccessor.getSupportedGeneticProfiles(studyId, function (data) { + _this.disableAllDataTypes(); // Iterate through profiles - var title = lines[0]; - var description = lines[2]; // In old version description used to expand in multiple lines - // graphDataIndex holds the line index where the first --NODE_NAME occurs and is used later to load nodes - var graphDataIndex = 3; - var isFound = false; + for (var _i = 0, _a = Object.keys(data); _i < _a.length; _i++) { + var profile = _a[_i]; + var type = utils_CBioPortalAccessor.getDataType(profile); - while (graphDataIndex < lines.length) { - if (lines[graphDataIndex].includes("--NODE_NAME")) { - isFound = true; - break; + if (type !== "") { + _this.setDataTypeProperties(type, StudyModal_assign(StudyModal_assign({}, _this.dataTypes[type]), { + enabled: true, + profile: profile + })); + } } - - description += "\n" + lines[graphDataIndex]; - graphDataIndex++; + }); + } + }); + Object.defineProperty(StudyModal.prototype, "disableAllDataTypes", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + for (var _i = 0, _a = Object.keys(this.dataTypes); _i < _a.length; _i++) { + var dataType = _a[_i]; + this.setDataTypeProperties(dataType, { + enabled: false, + checked: false, + profile: undefined + }); } + } + }); + Object.defineProperty(StudyModal.prototype, "fetchStudy", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + var _this = this; - graphDataIndex++; // TODO AMENDMENT - - if (!isFound) { - graphDataIndex = 2; - } //TODO Legacy pathways workaround - - - if (lines[0].includes("--NODE_NAME")) { - graphDataIndex = 1; - title = "New Pathway"; - description = ""; - } // start from first line skip node meta data - - - for (var i = graphDataIndex; i < lines.length; i++) { - // If we encounter a blank line, that means we need to parse edges from now on ! - // so skip blank line and edge meta line - if (lines[i].length == 0 || lines[i] === "") { - edgesStartIndex = i + 2; - break; - } //Fetch a line for nodes - + this.itemArray = []; + this.portalAccessor.getDataTypes().forEach(function (dataType) { + _this.setDataTypeProperties(dataType, { + enabled: false, + checked: false, + profile: undefined + }); + }); + this.portalAccessor.fetchCancerStudies(function (cancerStudies) { + var _loop_1 = function (study) { + if (!cancerStudies.hasOwnProperty(study)) { + return "continue"; + } - var lineData = lines[i].split('\t'); - var nodeName = lineData[0]; - var nodeID = lineData[1]; - var nodeType = lineData[2]; - var parentID = lineData[3]; - var posX = lineData.length > 4 ? lineData[4] : "0"; - var posY = lineData.length > 5 ? lineData[5] : "0"; - var nodeW = lineData.length > 7 ? lineData[6] : nodeType === 'PROCESS' ? nodeName.length * 6 + 24 : "150"; - var nodeH = lineData.length > 7 ? lineData[7] : nodeType === 'PROCESS' ? "24" : "52"; + var item = external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + key: study, + onClick: function () { + _this.setSelectedStudyData(cancerStudies[study]); - if (nodeName === " " || nodeName === "") { - console.log("Here empty"); //nodeName = "No Name " + (i + 1); - } + _this.preparePortalAccess(cancerStudies[study][0]); + } + }, cancerStudies[study][1]); - var newNode = { - group: 'nodes', - data: { - id: nodeID, - name: nodeName, - type: nodeType, - w: nodeW, - h: nodeH, - parent: -1 - }, - position: { - x: parseInt(posX), - y: parseInt(posY) - } + _this.itemArray.push(item); }; - if (parentID != '-1') { - newNode.data.parent = parentID; - } - - nodes.push(newNode); - } //console.log(edgesStartIndex); - //Read edges - - - for (var i_1 = edgesStartIndex; i_1 < lines.length; i_1++) { - //If we reach EOF we break loop - if (lines[i_1].length == 0) { - break; + for (var study in cancerStudies) { + _loop_1(study); } + }); + } + }); + Object.defineProperty(StudyModal.prototype, "resetModal", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + this.disableAllDataTypes(); + this.setSelectedStudyData([]); + } + }); + Object.defineProperty(StudyModal.prototype, "handleCheckboxClick", { + enumerable: false, + configurable: true, + writable: true, + value: function (dataType) { + this.setDataTypeProperties(dataType, StudyModal_assign(StudyModal_assign({}, this.dataTypes[dataType]), { + checked: !this.dataTypes[dataType].checked + })); + } + }); + Object.defineProperty(StudyModal.prototype, "selectedStudyDataTitle", { + get: function () { + if (this.selectedStudyData.length > 1) { + return this.selectedStudyData[1] || "Choose study"; + } else { + return "Choose study"; + } + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(StudyModal.prototype, "render", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + var _this = this; - if (!isArray) console.log(lines); - var lineData = lines[i_1].split('\t'); - var edgeID = lineData[0]; - var edgeSource = lineData[1]; - var edgeTarget = lineData[2]; - var edgeType = lineData[3]; - var pubmedIDs = lineData.length > 4 ? lineData[4].split(';') : []; - var label = lineData.length > 5 ? lineData[5] : ''; - var bendPoints = lineData.length > 6 ? lineData[6] : ''; - var bendPointPositions = []; - - if (bendPoints) { - var bendPair = bendPoints.split(')'); //The last element of bendPair array is "" + return external_react_default.a.createElement(external_react_bootstrap_["Modal"], { + id: "cbioPortalModal", + show: this.props.isModalShown, + onHide: function () { + _this.props.handleClose(EModalType.STUDY); - for (var j = 0; j < bendPair.length - 1; j++) { - var separatorIndex = bendPair[j].indexOf(";"); - var x = bendPair[j].substring(1, separatorIndex); - var y = bendPair[j].substring(separatorIndex + 1, bendPair[j].length); - bendPointPositions.push({ - x: parseFloat(x), - y: parseFloat(y) - }); - } + _this.resetModal(); } - /* - console.log("From parseGraph"); - console.log(lineData); - console.log(edgeType);*/ - - - var newEdge = { - group: 'edges', - data: { - id: edgeID, - type: edgeType, - source: edgeSource, - target: edgeTarget, - pubmedIDs: pubmedIDs, - name: label, - bendPointPositions: bendPointPositions - /*[{x:100,y:100}]*/ - - } - }; - edges.push(newEdge); - } // edgeEditing.initBendPoints(cy.edges()); - - /* - console.log("Edges and Nodes"); - console.log(edges) - console.log(nodes)*/ + }, external_react_default.a.createElement(external_react_bootstrap_["Modal"].Header, { + closeButton: true + }, external_react_default.a.createElement(external_react_bootstrap_["Modal"].Title, null, "Profile Data from cBioPortal")), external_react_default.a.createElement(external_react_bootstrap_["Modal"].Body, null, external_react_default.a.createElement("div", { + id: "cancerDropDown" + }, external_react_default.a.createElement("h4", null, "Select Cancer Study"), external_react_default.a.createElement(external_react_bootstrap_["DropdownButton"], { + id: "dropdown-study", + title: this.selectedStudyDataTitle + }, this.itemArray)), Object.keys(this.dataTypes).map(function (dataType) { + return external_react_default.a.createElement(external_react_bootstrap_["Checkbox"], { + key: dataType, + disabled: !_this.dataTypes[dataType].enabled, + onClick: function () { + _this.handleCheckboxClick(dataType); + }, + checked: _this.dataTypes[dataType].checked + }, dataType); + }), external_react_default.a.createElement("br", null)), external_react_default.a.createElement(external_react_bootstrap_["Modal"].Footer, null, external_react_default.a.createElement(external_react_bootstrap_["Button"], { + bsClass: "success", + onClick: function () { + _this.props.loadFromCBio(_this.dataTypes, _this.selectedStudyData); + _this.props.handleClose(EModalType.STUDY); - return { - title: title, - description: description, - nodes: nodes, - edges: edges - }; + _this.resetModal(); + } + }, "Load Data"))); } }); - return SaveLoadUtility; -}(); -/* harmony default export */ var utils_SaveLoadUtility = (SaveLoadUtility); -// EXTERNAL MODULE: ./src/data/pathways.json -var pathways = __webpack_require__(7); + StudyModal_decorate([external_mobx_["observable"]], StudyModal.prototype, "dataTypes", void 0); -// EXTERNAL MODULE: ./node_modules/cytoscape-node-resize/resizeCue.svg -var resizeCue = __webpack_require__(26); -var resizeCue_default = /*#__PURE__*/__webpack_require__.n(resizeCue); + StudyModal_decorate([external_mobx_["observable"]], StudyModal.prototype, "selectedStudyData", void 0); -// EXTERNAL MODULE: ./src/images/nodes/gene.svg -var nodes_gene = __webpack_require__(17); -var gene_default = /*#__PURE__*/__webpack_require__.n(nodes_gene); + StudyModal_decorate([external_mobx_["observable"]], StudyModal.prototype, "portalAccessor", void 0); -// EXTERNAL MODULE: ./src/images/nodes/family.svg -var family = __webpack_require__(18); -var family_default = /*#__PURE__*/__webpack_require__.n(family); + StudyModal_decorate([external_mobx_["action"].bound], StudyModal.prototype, "setSelectedStudyData", null); -// EXTERNAL MODULE: ./src/images/nodes/complex.svg -var complex = __webpack_require__(19); -var complex_default = /*#__PURE__*/__webpack_require__.n(complex); + StudyModal_decorate([external_mobx_["action"].bound], StudyModal.prototype, "setDataTypeProperties", null); -// EXTERNAL MODULE: ./src/images/nodes/compartment.svg -var compartment = __webpack_require__(20); -var compartment_default = /*#__PURE__*/__webpack_require__.n(compartment); + StudyModal_decorate([external_autobind_decorator_default.a], StudyModal.prototype, "resetModal", null); -// EXTERNAL MODULE: ./src/images/nodes/process.svg -var process = __webpack_require__(21); -var process_default = /*#__PURE__*/__webpack_require__.n(process); + StudyModal_decorate([external_autobind_decorator_default.a], StudyModal.prototype, "handleCheckboxClick", null); -// CONCATENATED MODULE: ./src/ui/CytoscapeArea.tsx -var CytoscapeArea_extends = undefined && undefined.__extends || function () { + StudyModal_decorate([external_mobx_["computed"]], StudyModal.prototype, "selectedStudyDataTitle", null); + + StudyModal = StudyModal_decorate([external_mobx_react_["observer"]], StudyModal); + return StudyModal; +}(external_react_default.a.Component); + +/* harmony default export */ var modals_StudyModal = (StudyModal_StudyModal); +// CONCATENATED MODULE: ./src/ui/Ranking.tsx +var Ranking_extends = undefined && undefined.__extends || function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || { __proto__: [] @@ -13338,7 +12420,7 @@ var CytoscapeArea_extends = undefined && undefined.__extends || function () { }; }(); -var CytoscapeArea_decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { +var Ranking_decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; @@ -13348,1309 +12430,1341 @@ var CytoscapeArea_decorate = undefined && undefined.__decorate || function (deco - // @ts-ignore - -window.$ = external_jquery_default.a; - - - - - - - // @ts-ignore - - // @ts-ignore - - // @ts-ignore - - // @ts-ignore - - // @ts-ignore - - // @ts-ignore - - - -var edgeHandles = __webpack_require__(55); - -var edgeEditing = __webpack_require__(56); - -var regCose = __webpack_require__(57); +var TCGA_PANCAN_PATHWAY_NAMES = ["Cell Cycle", "HIPPO", "MYC", "NOTCH", "NRF2", "PI3K", "RTK-RAS", "TGF-Beta", "TP53", "WNT"]; -var nodeResize = __webpack_require__(58); - -var undoRedo = __webpack_require__(59); - -var panzoom = __webpack_require__(60); - -var styleSheet = __webpack_require__(61); - -var panzoomOpts = __webpack_require__(62); - -var CytoscapeArea_navigator = __webpack_require__(63); - -var contextMenus = __webpack_require__(64); - -var konva = __webpack_require__(65); - -var viewUtilities = __webpack_require__(66); - -var grid_guide = __webpack_require__(69); - -var cyqtip = __webpack_require__(70); - -var CytoscapeArea_CytoscapeArea = +var Ranking_Ranking = /** @class */ function (_super) { - CytoscapeArea_extends(CytoscapeArea, _super); + Ranking_extends(Ranking, _super); - function CytoscapeArea(props) { + function Ranking(props) { var _this = _super.call(this, props) || this; - Object.defineProperty(_this, "cy", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(_this, "cyDiv", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(_this, "editor", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(_this, "edgeAddingMode", { + Object.defineProperty(_this, "bestPathways", { enumerable: true, configurable: true, writable: true, value: void 0 }); - Object.defineProperty(_this, "viewOperationsManager", { + Object.defineProperty(_this, "shownPathways", { enumerable: true, configurable: true, writable: true, value: void 0 }); - Object.defineProperty(_this, "qtipManager", { + Object.defineProperty(_this, "dropDownTitle", { enumerable: true, configurable: true, writable: true, value: void 0 }); - Object.defineProperty(_this, "genomicDataExplorerView", { + Object.defineProperty(_this, "selectedPathway", { enumerable: true, configurable: true, writable: true, value: void 0 }); - Object.defineProperty(_this, "pathwayDetailsView", { + Object.defineProperty(_this, "isPercentageMatch", { enumerable: true, configurable: true, writable: true, value: void 0 }); - Object.defineProperty(_this, "viewUtilities", { + Object.defineProperty(_this, "isAlterationEnabled", { enumerable: true, configurable: true, writable: true, value: void 0 }); - Object.defineProperty(_this, "isCollaborative", { + Object.defineProperty(_this, "considerOnlyTCGAPanPathways", { enumerable: true, configurable: true, writable: true, value: void 0 }); - Object.defineProperty(_this, "isCbioPortal", { + Object.defineProperty(_this, "isExpanded", { enumerable: true, configurable: true, writable: true, value: void 0 }); - Object.defineProperty(_this, "shareDBManager", { + Object.defineProperty(_this, "COUNT_PERC_EXPLANATION", { enumerable: true, configurable: true, writable: true, - value: void 0 + value: "Whether we should favor the number of genes of interest matching the ones in a pathway or the percentage of such genes in that pathway. For instance, suppose genes of interest are A, B, and C, and the pathway contains genes B, C, D, and E. When we consider count, the score is 2 (for the two genes that match). However, when we consider percentage the score will be 50% as 2 of the 4 genes in the pathway are among genes of interest." }); - Object.defineProperty(_this, "cxtMenuManager", { + Object.defineProperty(_this, "ALTERATION_EXPLANATION", { enumerable: true, configurable: true, writable: true, - value: void 0 + value: "When this is checked, each matching gene will not directly contribute to the score as 1 unit but with the alteration frequency percentage of that gene. For instance, suppose genes of interest are A, B, and C with alteration frequencies of 0.5, 0.2, and 0.3, respectively, and the pathway contains genes B, C, D, and E. When this is option isn't checked, the score will be 2 for match count and 50% for the match percentage. However, when this option is checked, the scores will be 0.2+0.3=0.5 and (0.2+0.3)/4=12.5% for match count and percentage, respectively." }); - Object.defineProperty(_this, "dragDropNodeAddManager", { + Object.defineProperty(_this, "TCGA_PANCAN_EXPLANATION", { enumerable: true, configurable: true, writable: true, - value: void 0 + value: "The pathways listed above were retrieved from PathwayMapper. When this option is checked, only the pathways under TCGA > PanCanAtlas will be shown. Uncheck to show all." }); - Object.defineProperty(_this, "undoRedoManager", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 + Object(external_mobx_["makeObservable"])(_this); + _this.isPercentageMatch = 0; + _this.isAlterationEnabled = 0; + _this.considerOnlyTCGAPanPathways = true; + _this.dropDownTitle = "Match count"; + _this.isExpanded = false; + + _this.setBestPathwayMethod(0); + + _this.shownPathways = _this.bestPathways.filter(function (data) { + if (_this.considerOnlyTCGAPanPathways) { + return TCGA_PANCAN_PATHWAY_NAMES.indexOf(data.pathwayName) > -1; + } + + return true; }); - Object.defineProperty(_this, "portalAccessor", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(_this, "isMountedFirst", { - enumerable: true, - configurable: true, - writable: true, - value: true - }); - Object.defineProperty(_this, "eh", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(_this, "lastSelectedEdge", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - _this.isCollaborative = props.isCollaborative; - _this.edgeAddingMode = 0; - _this.isCbioPortal = props.isCbioPortal; - return _this; // this.init(); - // this.createSampleMenu(); //TODO: AMENDMENT Menu must be react. - // this.createCBioPortalAccessModal(); + _this.selectedPathway = _this.shownPathways[0].pathwayName; + return _this; } - Object.defineProperty(CytoscapeArea.prototype, "componentWillUpdate", { + Object.defineProperty(Ranking.prototype, "setBestPathwayMethod", { enumerable: false, configurable: true, writable: true, - value: function (nextProps) { - console.log("Component will update", nextProps.selectedPathway); - this.getPathway(nextProps.selectedPathway); + value: function (i) { + this.bestPathways = this.props.bestPathwaysAlgos[i]; //this.selectedPathway = this.bestPathways[0].pathwayName; + //this.props.pathwayActions.changePathway(this.selectedPathway); } - }); // This method only opens pathways that are available in pathway.json. Namely, imported or merged pathways are not opened via this method. - // Yet, they individually call parsing method. - - Object.defineProperty(CytoscapeArea.prototype, "getPathway", { + }); + Object.defineProperty(Ranking.prototype, "onPathwayClick", { enumerable: false, configurable: true, writable: true, - value: function (selectedPathway) { - if (!selectedPathway || selectedPathway === '') return; - var data = pathways[selectedPathway]; // It might be non-existent due to pathway being created using collaborative mode, or pathway loaded elsewhere (import vs.) - - if (!data) { - return; - } // TODO Problematic const data = pathways["../samples/BLCA-2014-RTK-RAS-PI(3)K-pathway.txt"]; - - - var parsedGraph = utils_SaveLoadUtility.parseGraph(data, true); - var allEles = parsedGraph; - this.editor.loadFile(allEles.nodes, allEles.edges); + value: function (pathway) { + this.selectedPathway = pathway; + this.props.pathwayActions.changePathway(this.selectedPathway); } }); - Object.defineProperty(CytoscapeArea.prototype, "render", { + Object.defineProperty(Ranking.prototype, "onApplyClick", { enumerable: false, configurable: true, writable: true, value: function () { - return external_react_default.a.createElement("div", { - className: this.props.isCbioPortal ? "" : "cyContainer", - style: { - border: 0 - } - }, external_react_default.a.createElement("div", { - ref: this.cyDivHandler, - id: "cy", - style: { - "border": "3px solid " + (this.isCbioPortal ? "#4389c0" : "#1abc9c"), - "height": this.isCbioPortal ? "800px" : "100%", - "borderRadius": "6px", - marginTop: "0px" - } - }), external_react_default.a.createElement("div", { - className: "cytoscape-navigator-wrapper" - })); + // Mapping from dropdown + checkbox selection to pathway method. + this.setBestPathwayMethod(2 * this.isAlterationEnabled + this.isPercentageMatch); } }); - Object.defineProperty(CytoscapeArea.prototype, "componentDidMount", { + Object.defineProperty(Ranking.prototype, "toggleConsiderOnlyTCGAPanPathways", { enumerable: false, configurable: true, writable: true, value: function () { - if (this.isMountedFirst) { - this.init(); - this.isMountedFirst = false; - } + var _this = this; - this.getPathway(this.props.selectedPathway); + this.considerOnlyTCGAPanPathways = !this.considerOnlyTCGAPanPathways; + this.shownPathways = this.bestPathways.filter(function (data) { + if (_this.considerOnlyTCGAPanPathways) { + return TCGA_PANCAN_PATHWAY_NAMES.indexOf(data.pathwayName) > -1; + } + + return true; + }); // change selected pathway if we are filtered and doesn't exist + + if (this.considerOnlyTCGAPanPathways && TCGA_PANCAN_PATHWAY_NAMES.indexOf(this.selectedPathway) < 0) { + this.selectedPathway = this.shownPathways[0].pathwayName; + this.props.pathwayActions.changePathway(this.selectedPathway); + } } }); - Object.defineProperty(CytoscapeArea.prototype, "cyDivHandler", { + Object.defineProperty(Ranking.prototype, "componentDidMount", { enumerable: false, configurable: true, writable: true, - value: function (div) { - this.cyDiv = div; + value: function () { + this.props.pathwayActions.changePathway(this.selectedPathway); } }); - Object.defineProperty(CytoscapeArea.prototype, "init", { + Object.defineProperty(Ranking.prototype, "render", { enumerable: false, configurable: true, writable: true, value: function () { - // Create portal accessor - this.portalAccessor = new utils_CBioPortalAccessor(); // Initializes cytoscape + var _this = this; - this.initCyJS(); // Initialize cytoscape based handlers here + var lengthThreshold = 13; + return external_react_default.a.createElement("div", { + id: "ranking-bar" + }, this.props.tableComponent && this.props.tableComponent(this.shownPathways.map(function (data) { + return { + name: data.pathwayName, + score: data.score, + genes: data.genesMatched + }; + }), this.selectedPathway, this.onPathwayClick), external_react_default.a.createElement("div", { + className: "indent" + }, external_react_default.a.createElement(external_react_bootstrap_["Checkbox"], { + checked: this.considerOnlyTCGAPanPathways, + id: "tcgaPathwaysCheckbox", + onClick: this.toggleConsiderOnlyTCGAPanPathways, + style: { + fontSize: "13px" + } + }, "Show TCGA PanCancer Atlas pathways only\u00A0", external_react_default.a.createElement("span", { + "data-tip": this.TCGA_PANCAN_EXPLANATION, + "data-border": "true", + "data-type": "light", + "data-place": "left", + "data-effect": "solid", + className: "fa fa-question-circle styles-module__infoIcon__zMiog" + }))), !this.props.patientView && external_react_default.a.createElement("div", { + className: "info-entry" + }, external_react_default.a.createElement("div", { + id: "criteria-title", + className: "info-title" + }, external_react_default.a.createElement("b", { + style: { + display: "inline-block" + } + }, "\u00A0Ranking options")), external_react_default.a.createElement("div", { + className: "indent" + }, external_react_default.a.createElement(external_react_bootstrap_["DropdownButton"], { + title: this.dropDownTitle, + id: "0", + style: { + fontSize: "13px" + } + }, external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + style: { + fontSize: "13px" + }, + onClick: function () { + _this.isPercentageMatch = 0; + _this.dropDownTitle = "Match count"; - this.initCyHandlers(); - this.initKeyboardHandlers(); - this.initUndoRedoFunctionality(); - this.initCBioPortalFunctionalities(); - this.placePanzoomAndOverlay(); //this.appManager = this; + _this.onApplyClick(); + } + }, "Match count"), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + style: { + fontSize: "13px" + }, + onClick: function () { + _this.isPercentageMatch = 1; + _this.dropDownTitle = "Match percentage"; + + _this.onApplyClick(); + } + }, "Match percentage")), "\u00A0", external_react_default.a.createElement("div", { + "data-tip": this.COUNT_PERC_EXPLANATION, + "data-border": "true", + "data-type": "light", + "data-place": "left", + "data-effect": "solid", + className: "fa fa-question-circle styles-module__infoIcon__zMiog" + }), external_react_default.a.createElement(external_react_bootstrap_["Checkbox"], { + id: "alterationCheckBox", + onClick: function () { + _this.isAlterationEnabled = _this.isAlterationEnabled === 1 ? 0 : 1; + + _this.onApplyClick(); + }, + style: { + fontSize: "13px", + marginTop: "18px", + bottom: "4px" + } + }, "Consider alteration frequency\u00A0", external_react_default.a.createElement("span", { + "data-tip": this.ALTERATION_EXPLANATION, + "data-border": "true", + "data-type": "light", + "data-place": "left", + "data-effect": "solid", + className: "fa fa-question-circle styles-module__infoIcon__zMiog" + }))))); } }); - Object.defineProperty(CytoscapeArea.prototype, "placePanzoomAndOverlay", { - enumerable: false, - configurable: true, - writable: true, - value: function () { - //TODO place navigator !!! - var offset = 5; // @ts-ignore - var topCy = external_jquery_default()(this.cyDiv).offset().top; //var bottomCy = $('.cyContainer').offset().bottom; - // @ts-ignore + Ranking_decorate([external_mobx_["observable"]], Ranking.prototype, "bestPathways", void 0); - var leftCy = external_jquery_default()(this.cyDiv).offset().left; //var rightCy = $('.cyContainer').offset().right; - // @ts-ignore + Ranking_decorate([external_mobx_["observable"]], Ranking.prototype, "shownPathways", void 0); - var heightCy = external_jquery_default()(this.cyDiv).outerHeight(); // @ts-ignore + Ranking_decorate([external_mobx_["observable"]], Ranking.prototype, "dropDownTitle", void 0); - var widthCy = external_jquery_default()(this.cyDiv).outerWidth(); - var heightNavigator = external_jquery_default()('.cytoscape-navigator-wrapper').outerHeight(); - var widthNavigator = external_jquery_default()('.cytoscape-navigator-wrapper').outerWidth(); - var heightPatwayNavbar = external_jquery_default()('.pathway-navbar').outerHeight(); - var heightPathwayToolbar = external_jquery_default()('.pathway-toolbar').outerHeight(); - var widthSideBar = external_jquery_default()('.sideBarWrapper').outerWidth(); - var widthcBioPortalSideBar = external_jquery_default()('.cBioPortal-sidebar').outerWidth(); - console.log(widthSideBar, widthCy, leftCy, widthNavigator, offset); //706px 1513.15px - //694px 1391.15px - //var heightPanzoom = $('.cy-panzoom').outerHeight(); - //var widthPanzoom = $('.cy-panzoom').outerWidth(); + Ranking_decorate([external_mobx_["observable"]], Ranking.prototype, "selectedPathway", void 0); - if (!this.isCbioPortal) { - external_jquery_default()('.cytoscape-navigator-wrapper').css('top', heightCy + topCy - heightNavigator - offset + 13); - external_jquery_default()('.cytoscape-navigator-wrapper').css('left', widthCy + leftCy - widthNavigator - offset + 21 - 0.5 + 0.35); //$('.cytoscape-navigator-wrapper').css('left', widthCy + leftCy - widthNavigator - offset); - } else { - external_jquery_default()('.cytoscape-navigator-wrapper').css('bottom', 10.5); - external_jquery_default()('.cytoscape-navigator-wrapper').css('right', 0); //$('.cytoscape-navigator-wrapper').css('left', widthCy + leftCy - widthNavigator + widthcBioPortalSideBar + offset - widthSideBar); - } + Ranking_decorate([external_mobx_["observable"]], Ranking.prototype, "considerOnlyTCGAPanPathways", void 0); - external_jquery_default()('.cytoscape-navigator-wrapper').css('z-index', 1039); //Relative is used so that its position depends on the below properties + Ranking_decorate([external_mobx_["observable"]], Ranking.prototype, "isExpanded", void 0); - external_jquery_default()('.cy-panzoom').css('position', 'relative'); - external_jquery_default()('.cy-panzoom').css('top', 2); - external_jquery_default()('.cy-panzoom').css('left', widthCy - 57); - external_jquery_default()('.cy-panzoom').css('z-index', 1039); //Makes the width of panzoom container to 0 + Ranking_decorate([external_autobind_decorator_default.a], Ranking.prototype, "setBestPathwayMethod", null); - external_jquery_default()('.cy-panzoom').css('width', 200); - } - }); - Object.defineProperty(CytoscapeArea.prototype, "getPathwayData", { - enumerable: false, - configurable: true, - writable: true, - value: function () { - return this.pathwayDetailsView.getPathwayData(); - } - }); - Object.defineProperty(CytoscapeArea.prototype, "initCyJS", { - enumerable: false, - configurable: true, - writable: true, - value: function () { - var _this = this; + Ranking_decorate([external_autobind_decorator_default.a], Ranking.prototype, "onPathwayClick", null); - try { - panzoom(external_cytoscape_default.a, external_jquery_default.a); // register extension - } catch (err) { - console.log(err); - } // cxtmenu( cytoscape, $ ); // register extension + Ranking_decorate([external_autobind_decorator_default.a], Ranking.prototype, "onApplyClick", null); + Ranking_decorate([external_mobx_["action"].bound], Ranking.prototype, "toggleConsiderOnlyTCGAPanPathways", null); - try { - regCose(external_cytoscape_default.a); // register extension - } catch (err) { - console.log(err); - } + Ranking = Ranking_decorate([external_mobx_react_["observer"]], Ranking); + return Ranking; +}(external_react_default.a.Component); - try { - CytoscapeArea_navigator(external_cytoscape_default.a); // register extension - } catch (err) { - console.log(err); - } +/* harmony default export */ var ui_Ranking = (Ranking_Ranking); +// CONCATENATED MODULE: ./src/ui/Toolbar.tsx +var Toolbar_extends = undefined && undefined.__extends || function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || { + __proto__: [] + } instanceof Array && function (d, b) { + d.__proto__ = b; + } || function (d, b) { + for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; + }; - try { - grid_guide(external_cytoscape_default.a, external_jquery_default.a); // register extension - } catch (err) { - console.log(err); - } + return extendStatics(d, b); + }; - try { - undoRedo(external_cytoscape_default.a); // register extension - } catch (err) { - console.log(err); - } + return function (d, b) { + extendStatics(d, b); - try { - contextMenus(external_cytoscape_default.a, external_jquery_default.a); // register extension - } catch (err) { - console.log(err); - } + function __() { + this.constructor = d; + } - try { - nodeResize(external_cytoscape_default.a, external_jquery_default.a, konva); // register extension - } catch (err) { - console.log(err); - } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +}(); - try { - edgeEditing(external_cytoscape_default.a, external_jquery_default.a); // register extension - } catch (err) { - console.log(err); - } +var Toolbar_decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { + var c = arguments.length, + r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, + d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; - try { - viewUtilities(external_cytoscape_default.a, external_jquery_default.a); // register extension - } catch (err) { - console.log(err); - } - try { - cyqtip(external_cytoscape_default.a, external_jquery_default.a); // register extension - } catch (err) { - console.log(err); - } - try { - edgeHandles(external_cytoscape_default.a, external_jquery_default.a); - } catch (err) { - console.log(err); - } + // @ts-ignore - this.edgeAddingMode = 0; // var allEles = SaveLoadUtilities.parseGraph(sampleGraph); + // @ts-ignore - this.cy = external_cytoscape_default()({ - container: this.cyDiv, - boxSelectionEnabled: true, - autounselectify: false, - wheelSensitivity: 0.1, - style: styleSheet, - // elements: allEles, - textureOnViewport: false, - motionBlur: true, - layout: { - name: 'preset' - } - }); - this.undoRedoManager = this.cy.undoRedo(); - console.log("undoRedoManager" + this.undoRedoManager); // Create Manager Classes + // @ts-ignore - this.shareDBManager = new managers_ShareDBManager(function () { - var dbDoc = _this.shareDBManager.getDoc(); - }); - this.editor = new managers_EditorActionsManager(this.isCollaborative, this.shareDBManager, this.cy, this.isCbioPortal, this.undoRedoManager, this.portalAccessor, this.props.profiles); - this.shareDBManager.setEditor(this.editor); + // @ts-ignore - if (this.isCollaborative) { - this.shareDBManager.initShareDB(); - } //@ts-ignore + // @ts-ignore - window.editorActionsManager = this.editor; - this.qtipManager = new managers_QtipManager(this.cy, this.editor); - this.cxtMenuManager = new managers_ContextMenuManager(this.cy, this.editor, this.isCbioPortal, this.props.handleOpen, this.undoRedoManager, this.props.isCollaborative); - this.dragDropNodeAddManager = new utils_DragDropNodeAddPlugin(this.editor, this.cy, this.props.pathwayHandler); // Initialize panzoom +var Toolbar_addSelImage = __webpack_require__(17); // @ts-ignore - this.cy.panzoom(panzoomOpts); // Node Add initialization - this.cy.nodeadd({ - // Once the explanationText is cast to uppercase they will be node types - components: [{ - container: external_jquery_default()('#simpleNodeDiv'), - nodeType: 'Gene', - icon: gene_default.a - }, { - container: external_jquery_default()('#familyNodeDiv'), - nodeType: 'Family', - icon: family_default.a - }, { - container: external_jquery_default()('#complexNodeDiv'), - nodeType: 'Complex', - icon: complex_default.a - }, { - container: external_jquery_default()('#compartmentNodeDiv'), - nodeType: 'Compartment', - icon: compartment_default.a - }, { - container: external_jquery_default()('#processNodeDiv'), - nodeType: 'Process', - icon: process_default.a - }] - }); - var self = this; - var edgeHandleDefaults = { - preview: true, - stackOrder: 4, - handleSize: 10, - handleColor: '#1abc9c', - handleLineType: 'ghost', - handleLineWidth: 1, - handleNodes: 'node', - hoverDelay: 1, - cxt: false, - enabled: false, - toggleOffOnLeave: true, - edgeType: function (sourceNode, targetNode) { - // can return 'flat' for flat edges between nodes or 'node' for intermediate node between them - // returning null/undefined means an edge can't be added between the two nodes - return 'flat'; - }, - handlePosition: function (node) { - return 'middle top'; // sets the position of the handle in the format of "X-AXIS Y-AXIS" such as "left top", "middle top" - }, - loopAllowed: function (node) { - // for the specified node, return whether edges from itself to itself are allowed - return false; - }, - nodeLoopOffset: -50, - nodeParams: function (sourceNode, targetNode) { - // for edges between the specified source and target - // return element object to be passed to cy.add() for intermediary node - return {}; - }, - edgeParams: function (sourceNode, targetNode, i) { - // for edges between the specified source and target - // return element object to be passed to cy.add() for edge - // NB: i indicates edge index in case of edgeType: 'node' - return {}; - }, - start: function (sourceNode) { - console.log("Inside start"); // fired when edgehandles interaction starts (drag on handle) +var Toolbar_addAllImage = __webpack_require__(18); // @ts-ignore - var type = self.getGlobalEdgeType(); - console.log("Type"); - console.log(type); //self.cy.edgehandles('option', 'ghostEdgeType', type); - }, - complete: function (sourceNode, targetNodes, addedEntities) { - // @ts-ignore - console.log(window.edgeAddingMode); // // Remove recently added edge ! - // // FBI takes this case from now on :O - // // We will take care of addition in our manager :) - self.cy.remove(addedEntities); - console.log(addedEntities); - self.editor.addEdge({ - source: sourceNode.id(), - target: targetNodes[0].id(), - // @ts-ignore - type: self.getGlobalEdgeType(window.edgeAddingMode), - pubmedIDs: [], - name: "" - }); - }, - stop: function (sourceNode) { - // fired when edgehandles interaction is stopped (either complete with added edges or incomplete) - //TODO refactor this, so terrible for now - //$('.edge-palette a').blur().removeClass('active'); - self.edgeAddingMode = -1; - self.eh.disable(); - self.eh.hide(); - self.props.setActiveEdge(-1); - } - }; //Edge Handles initialization +var aboutImage = __webpack_require__(16); - console.log("Edge Handles inside Cytoscape ARea"); - this.eh = this.cy.edgehandles(edgeHandleDefaults); - this.eh.disable(); - this.props.editorHandler(this.editor, this.eh, this.undoRedoManager); - if (!this.isCbioPortal) this.cy.nodeResize({ - padding: 5, - undoable: true, - grappleSize: 8, - grappleColor: "#ffc90e", - inactiveGrappleStroke: "inside 1px blue", - boundingRectangle: true, - boundingRectangleLineDash: [4, 8], - boundingRectangleLineColor: "ffc90e", - boundingRectangleLineWidth: 1.5, - zIndex: 999, - moveSelectedNodesOnKeyEvents: function () { - return true; - }, - minWidth: function (node) { - var data = node.data("resizeMinWidth"); - return data ? data : 15; - }, - minHeight: function (node) { - var data = node.data("resizeMinHeight"); - return data ? data : 15; - }, - // Getters for some style properties the defaults returns ele.css('property-name') - // you are encouraged to override these getters - getCompoundMinWidth: function (node) { - return node.style('min-width'); - }, - getCompoundMinHeight: function (node) { - return node.style('min-height'); - }, - getCompoundMinWidthBiasRight: function (node) { - return node.style('min-width-bias-right'); - }, - getCompoundMinWidthBiasLeft: function (node) { - return node.style('min-width-bias-left'); - }, - getCompoundMinHeightBiasTop: function (node) { - return node.style('min-height-bias-top'); - }, - getCompoundMinHeightBiasBottom: function (node) { - return node.style('min-height-bias-bottom'); - }, - isFixedAspectRatioResizeMode: function (node) { - return node.is(".fixedAspectRatioResizeMode"); - }, - isNoResizeMode: function (node) { - return undefined; - }, - // These optional function will be executed to set the width/height of a node in this extension - // Using node.css() is not a recommended way (http://js.cytoscape.org/#eles.style) to do this. Therefore, overriding these defaults - // so that a data field or something like that will be used to set node dimentions instead of directly calling node.css() - // is highly recommended (Of course this will require a proper setting in the stylesheet). - setWidth: function (node, width) { - node.style('width', width); - }, - setHeight: function (node, height) { - node.style('height', height); - }, - setCompoundMinWidth: function (node, minWidth) { - node.style('min-width', minWidth); - }, - setCompoundMinHeight: function (node, minHeight) { - node.style('min-height', minHeight); - }, - setCompoundMinWidthBiasLeft: function (node, minWidthBiasLeft) { - node.style('min-width-bias-left', minWidthBiasLeft); - }, - setCompoundMinWidthBiasRight: function (node, minHeightBiasRight) { - node.style('min-width-bias-right', minHeightBiasRight); - }, - setCompoundMinHeightBiasTop: function (node, minHeightBiasTop) { - node.style('min-height-bias-top', minHeightBiasTop); - }, - setCompoundMinHeightBiasBottom: function (node, minHeightBiasBottom) { - node.style('min-height-bias-bottom', minHeightBiasBottom); - }, - cursors: { - // May take any "cursor" css property - default: "default", - inactive: "not-allowed", - nw: "nw-resize", - n: "n-resize", - ne: "ne-resize", - e: "e-resize", - se: "se-resize", - s: "s-resize", - sw: "sw-resize", - w: "w-resize" - }, - resizeToContentCueImage: resizeCue_default.a, - resizeToContentFunction: this.editor.resizeNodesToContent.bind(this.editor) - }); //Navigator for cytoscape js +var Toolbar_Toolbar = +/** @class */ +function (_super) { + Toolbar_extends(Toolbar, _super); - var navDefaults = { - container: '.cytoscape-navigator-wrapper' // can be a HTML or jQuery element or jQuery selector - , - viewLiveFramerate: 0 // set false to update graph pan only on drag end; set 0 to do it instantly; set a number (frames per second) to update not more than N times per second - , - thumbnailEventFramerate: 10 // max thumbnail's updates per second triggered by graph updates - , - thumbnailLiveFramerate: false // max thumbnail's updates per second. Set false to disable - , - dblClickDelay: 200 // milliseconds - , - removeCustomContainer: true // destroy the container specified by user on plugin destroy - , - rerenderDelay: 100 // ms to throttle rerender updates to the panzoom for performance + function Toolbar(props) { + var _this = _super.call(this, props) || this; + + Object.defineProperty(_this, "selectedGenes", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(_this, "editor", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object(external_mobx_["makeObservable"])(_this); + _this.selectedGenes = []; + return _this; + } + + Object.defineProperty(Toolbar.prototype, "render", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + var _this = this; + + var studyQuery = "q=" + JSON.stringify(this.props.alterationData) + "&g=" + this.props.genes.map(function (gene) { + return gene.hugoGeneSymbol; + }).join("+"); + return external_react_default.a.createElement("div", { + id: "toolbar", + style: { + marginLeft: '0px' + } + }, external_react_default.a.createElement("img", { + height: "22px", + width: "22px", + "data-border": "true", + "data-type": "light", + "data-tip": "Save as PNG", + "data-place": "right", + "data-effect": "solid", + src: save_png_default.a, + onClick: function () { + _this.props.pathwayActions.saveAs("PNG"); + } + }), external_react_default.a.createElement("img", { + height: "22px", + width: "22px", + "data-border": "true", + "data-type": "light", + "data-tip": "Save as SVG", + "data-place": "right", + "data-effect": "solid", + src: save_svg_default.a, + onClick: function () { + _this.props.pathwayActions.saveAs("SVG"); + } + }), external_react_default.a.createElement("img", { + height: "22px", + width: "22px", + "data-border": "true", + "data-type": "light", + "data-tip": "Perform layout", + "data-place": "right", + "data-effect": "solid", + src: layout_cose_default.a, + onClick: this.props.pathwayActions.performLayout + }), !this.props.patientView && [external_react_default.a.createElement("img", { + height: "22px", + width: "22px", + "data-border": "true", + "data-type": "light", + "data-tip": "Add selected genes to query", + "data-place": "right", + "data-effect": "solid", + src: Toolbar_addSelImage, + onClick: function () { + _this.selectedGenes = _this.props.pathwayActions.getSelectedNodes().filter(function (node) { + return node.data().type === "GENE"; + }).map(function (node) { + return node.data().name; + }); + + var noneGeneList = _this.props.pathwayActions.getSelectedNodes().filter(function (node) { + return node.data().type !== "GENE"; + }).map(function (node) { + return node.data().name; + }); + + var invalidGenes = []; + var message = ""; + + if (noneGeneList.length > 0) { + message += "Selection contains nodes that are not genes: " + noneGeneList.join(', ') + ". "; + } + + _this.selectedGenes.forEach(function (gene) { + if (!_this.props.validGenes.hasOwnProperty(gene)) { + invalidGenes.push(gene); + } + }); + + if (invalidGenes.length === 0) { + if (_this.selectedGenes.length > 0 && noneGeneList.length === 0) { + _this.props.onAddGenes(_this.selectedGenes); + } + } else { + message += "Following gene symbols are invalid or already in gene list: " + invalidGenes.join(", ") + "."; + } + + if (message.length > 0) { + _this.props.showMessage(message); + } + } + }), external_react_default.a.createElement("img", { + height: "22px", + width: "22px", + "data-border": "true", + "data-type": "light", + "data-tip": "Add all valid genes to query", + "data-place": "right", + "data-effect": "solid", + src: Toolbar_addAllImage, + onClick: function () { + _this.selectedGenes = _this.props.pathwayGenes.filter(function (gene) { + return _this.props.validGenes.hasOwnProperty(gene); + }); + + if (_this.selectedGenes.length > 0) { + _this.props.onAddGenes(_this.selectedGenes); + } + } + }), external_react_default.a.createElement("img", { + height: "22px", + width: "22px", + "data-border": "true", + "data-type": "light", + "data-tip": "Edit pathway", + "data-place": "right", + "data-effect": "solid", + src: edit_default.a, + onClick: function () { + { + window.open("http://pathwaymapper.org/?pathwayName=" + _this.props.selectedPathway + "&" + studyQuery); + } + } + })], external_react_default.a.createElement("img", { + height: "22px", + width: "22px", + "data-border": "true", + "data-type": "light", + "data-tip": "Help", + "data-place": "right", + "data-effect": "solid", + src: aboutImage, + onClick: function () { + _this.props.handleOpen(EModalType.CHELP); + } + })); + } + }); + + Toolbar_decorate([external_mobx_["observable"]], Toolbar.prototype, "selectedGenes", void 0); + + Toolbar_decorate([external_mobx_["observable"]], Toolbar.prototype, "editor", void 0); + + Toolbar = Toolbar_decorate([external_mobx_react_["observer"]], Toolbar); + return Toolbar; +}(external_react_default.a.Component); + +/* harmony default export */ var ui_Toolbar = (Toolbar_Toolbar); +// CONCATENATED MODULE: ./src/utils/PathwayActions.ts +var PathwayActions_decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { + var c = arguments.length, + r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, + d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; + + + + + + + + +var PathwayActions_PathwayActions = +/** @class */ +function () { + function PathwayActions(pathwayHandler, profiles, fileManager, handleOpen, isCBioPortal, isCollaborative) { + Object.defineProperty(this, "selectedPathway", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "fileManager", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "editor", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "undoRedoManager", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "pathwayHandler", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "handleOpen", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "eh", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "profiles", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "gridOptionsManager", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "uploader", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "merger", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "isCBioPortal", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "isCollaborative", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "viewOperationsManager", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "overlayUploader", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "enabledType", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object(external_mobx_["makeObservable"])(this); + this.pathwayHandler = pathwayHandler; + this.profiles = profiles; + this.fileManager = fileManager; + this.handleOpen = handleOpen; + this.isCBioPortal = isCBioPortal; + this.isCollaborative = isCollaborative; + this.enabledType = EGridType.NONE; + } + + Object.defineProperty(PathwayActions.prototype, "addProfile", { + enumerable: false, + configurable: true, + writable: true, + value: function (profile) { + this.profiles.push(profile); + } + }); + Object.defineProperty(PathwayActions.prototype, "clearProfiles", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + this.profiles.length = 0; + } + }); + Object.defineProperty(PathwayActions.prototype, "emphasiseQueryGenes", { + enumerable: false, + configurable: true, + writable: true, + value: function (queryGenes) { + if (this.editor) this.editor.cy.nodes().forEach(function (node) { + var nodeName = node.data().name; + var nodeType = node.data().type; + + if (queryGenes.includes(nodeName) && nodeType === "GENE") { + node.style({ + "border-width": "4px", + "font-weight": "bold" + }); + } + }); + } + }); + Object.defineProperty(PathwayActions.prototype, "getSelectedNodes", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + return this.editor.cy.nodes(":selected"); + } + }); + Object.defineProperty(PathwayActions.prototype, "setLayoutProperties", { + enumerable: false, + configurable: true, + writable: true, + value: function (layoutProperties) { + this.editor.saveLayoutProperties(layoutProperties); + } + }); + Object.defineProperty(PathwayActions.prototype, "doesCyHaveElements", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + return this.editor.cy.elements().length > 0; + } + }); + Object.defineProperty(PathwayActions.prototype, "toggleGrid", { + enumerable: false, + configurable: true, + writable: true, + value: function (isEnabled) { + this.gridOptionsManager.setSnapToGuidelines(false); + this.gridOptionsManager.setShowGrid(isEnabled); + } + }); + Object.defineProperty(PathwayActions.prototype, "toggleGuide", { + enumerable: false, + configurable: true, + writable: true, + value: function (isEnabled) { + this.gridOptionsManager.setSnapToGuidelines(isEnabled); + this.gridOptionsManager.setShowGrid(false); + } + }); + Object.defineProperty(PathwayActions.prototype, "adjustGridSettings", { + enumerable: false, + configurable: true, + writable: true, + value: function (gridSize, color) { + this.gridOptionsManager.currentProperties.gridSpacing = gridSize; + this.gridOptionsManager.currentProperties.guidelinesStyle.strokeStyle = color; + this.gridOptionsManager.currentProperties.guidelinesStyle.horizontalDistColor = color; + this.gridOptionsManager.currentProperties.guidelinesStyle.verticalDistColor = color; + } + }); + Object.defineProperty(PathwayActions.prototype, "resizeToContent", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + this.editor.resizeNodesToContent(this.editor.cy.nodes()); + } + }); + Object.defineProperty(PathwayActions.prototype, "align", { + enumerable: false, + configurable: true, + writable: true, + value: function (param) { + this.viewOperationsManager.handleNodeAlignment(param); + } + }); + Object.defineProperty(PathwayActions.prototype, "onChangeFile", { + enumerable: false, + configurable: true, + writable: true, + value: function (e, isMerge) { + var file = e.target.files[0]; + this.processFile(file, isMerge); + } + }); + Object.defineProperty(PathwayActions.prototype, "uploadOverlay", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + this.overlayUploader.click(); + } + }); + Object.defineProperty(PathwayActions.prototype, "overlayFromText", { + enumerable: false, + configurable: true, + writable: true, + value: function (file) { + var _this = this; // Create a new FormData object. - }; //TODO: AMENDMENT declaration removed - this.cy.navigator(navDefaults); // get navigator instance, nav + var formData = new FormData(); + formData.append("graphFile", file); + var request = new XMLHttpRequest(); - var viewUtilitiesOpts = { - node: { - highlighted: { - 'border-width': 2, - 'border-color': '#bc1142' - }, - unhighlighted: { - 'opacity': function (ele) { - // We return the same opacity because to override the unhibhlighted ele opacity in view-utilities - return ele.css('opacity'); - } // styles for when nodes are unhighlighted.} + request.onreadystatechange = function () { + if (request.readyState === XMLHttpRequest.DONE && request.status === 200) { + var linesOfData = request.responseText.split("\n"); + if (linesOfData.length > 0) { + var profileIdsFromFile = linesOfData[0].split("\t").slice(1); + profileIdsFromFile.forEach(function (id) { + return _this.addProfile({ + profileId: id, + enabled: true + }); + }); + } else { + console.log("Error: No valid data"); } - }, - edge: { - highlighted: {}, - unhighlighted: { - 'opacity': function (ele) { - // We return the same opacity because to override the unhibhlighted ele opacity in view-utilities - return ele.css('opacity'); - } // styles for when edges are unhighlighted. - } - }, - setVisibilityOnHide: false, - setDisplayOnHide: true, - neighbor: function () { - return false; - }, - neighborSelectTime: 500 //ms, time to taphold to select desired neighbors + _this.editor.addGenomicData(request.responseText); + } + }; + + request.open("POST", "/loadGraph"); + request.send(formData); + } + }); + Object.defineProperty(PathwayActions.prototype, "upload", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + var _this = this; + + if (this.editor.cy.elements().length > 0) { + this.handleOpen(EModalType.CONFIRMATION); + + modals_ConfirmationModal.pendingFunction = function () { + _this.uploader.click(); + }; + } else { + this.uploader.click(); + } + } + }); + Object.defineProperty(PathwayActions.prototype, "merge", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + this.merger.click(); + } + }); + Object.defineProperty(PathwayActions.prototype, "setOverlayUploader", { + enumerable: false, + configurable: true, + writable: true, + value: function (inputRef) { + this.overlayUploader = inputRef; + } + }); + Object.defineProperty(PathwayActions.prototype, "setUploaders", { + enumerable: false, + configurable: true, + writable: true, + value: function (inputRef, isMerge) { + if (isMerge) this.merger = inputRef;else this.uploader = inputRef; + } + }); + Object.defineProperty(PathwayActions.prototype, "getPathwayInfo", { + get: function () { + return this.fileManager.getPathwayInfo; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(PathwayActions.prototype, "setPathwayInfo", { + enumerable: false, + configurable: true, + writable: true, + value: function (other) { + this.fileManager.setPathwayInfo(other); + } + }); + Object.defineProperty(PathwayActions.prototype, "undo", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + this.undoRedoManager.undo(); + } + }); + Object.defineProperty(PathwayActions.prototype, "redo", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + this.undoRedoManager.redo(); + } + }); + Object.defineProperty(PathwayActions.prototype, "export", { + enumerable: false, + configurable: true, + writable: true, + value: function (isSIFNX) { + //this.editor.cy.remove('.eh-handle'); + this.eh.hide(); + this.fileManager.saveGraph(isSIFNX, this.editor); + } + }); + Object.defineProperty(PathwayActions.prototype, "resetUndoStack", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + this.undoRedoManager.reset(); + } + }); + Object.defineProperty(PathwayActions.prototype, "newPathway", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + var _this = this; + + var commitNewPathway = function () { + _this.editor.removeAllElements(); + + _this.fileManager.setPathwayInfo({ + pathwayTitle: "New Pathway", + pathwayDetails: "", + fileName: "pathway.txt" + }); //this.removeAllData() + + _this.resetUndoStack(); + + _this.pathwayHandler("Dummy"); }; - this.viewUtilities = this.cy.viewUtilities(viewUtilitiesOpts); - this.placePanzoomAndOverlay(); + + if (this.editor.cy.elements().length > 0) { + this.handleOpen(EModalType.CONFIRMATION); + modals_ConfirmationModal.pendingFunction = commitNewPathway; + } else { + commitNewPathway(); + } } }); - Object.defineProperty(CytoscapeArea.prototype, "getGlobalEdgeType", { + Object.defineProperty(PathwayActions.prototype, "changePathway", { + enumerable: false, + configurable: true, + writable: true, + value: function (pathwayName) { + this.pathwayHandler(pathwayName); + + if (!this.isCBioPortal) { + this.fileManager.setPathwayInfo({ + pathwayTitle: pathwayName, + pathwayDetails: "", + fileName: pathwayName + ".txt" + }); // At the beginning changePathway is called editor is not ready hence removeData shall not be called + + if (this.editor) { + //this.removeAllData() + this.resetUndoStack(); + } + } + } + }); + Object.defineProperty(PathwayActions.prototype, "highlightNeighbours", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + this.editor.highlightNeighbors(); + } + }); + Object.defineProperty(PathwayActions.prototype, "highlightSelected", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + this.editor.highlightSelected(); + } + }); + Object.defineProperty(PathwayActions.prototype, "validateGenes", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + this.editor.validateGenes(); + } + }); + Object.defineProperty(PathwayActions.prototype, "showAll", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + this.editor.showAllNodes(); + } + }); + Object.defineProperty(PathwayActions.prototype, "hideSelected", { enumerable: false, configurable: true, writable: true, value: function () { - var type = "NONE"; // @ts-ignore - - if (window.edgeAddingMode === 1) { - type = 'ACTIVATES'; - } // @ts-ignore - else if (window.edgeAddingMode === 2) { - type = 'INHIBITS'; - } // @ts-ignore - else if (window.edgeAddingMode === 3) { - type = 'INDUCES'; - } // @ts-ignore - else if (window.edgeAddingMode === 4) { - type = 'REPRESSES'; - } // @ts-ignore - else if (window.edgeAddingMode === 5) { - type = 'BINDS'; - } - - return type; + this.editor.hideSelectedNodes(); } }); - Object.defineProperty(CytoscapeArea.prototype, "initCyHandlers", { + Object.defineProperty(PathwayActions.prototype, "deleteSelected", { enumerable: false, configurable: true, writable: true, value: function () { - var _this = this; - - var that = this; - var tappedBefore; - var tappedTimeout; - this.cy.on('tap', function (event) { - var tappedNow = event.target; - - if (tappedTimeout !== -1 && tappedBefore !== -1) { - clearTimeout(tappedTimeout); - } - - if (tappedBefore === tappedNow) { - tappedNow.trigger('doubleTap'); - tappedBefore = -1; - } else { - // @ts-ignore TODO AMENDMENTsa - tappedTimeout = setTimeout(function () { - tappedBefore = -1; - }, 300); - - if (tappedNow && tappedNow.isNode && tappedNow.isNode()) { - external_jquery_default()(".qtip").remove(); - } - - if (tappedNow && tappedNow.isEdge && tappedNow.isEdge()) { - external_jquery_default()(".qtip").remove(); - } - - tappedBefore = tappedNow; - } - }); - this.cy.on('doubleTap', 'node', function (e) { - // if cBioPortal ignore - if (that.props.isCbioPortal) return; - var eventIsDirect = e.target === this; - - if (eventIsDirect) { - external_jquery_default()(".qtip").remove(); - that.qtipManager.addQtipToElements(e.target); - e.target.trigger("showqtipevent"); - } - }); - this.cy.on('doubleTap', 'edge', function (e) { - // if cBioPortal ignore - if (that.props.isCbioPortal) return; - var eventIsDirect = e.target === this; - - if (eventIsDirect) { - external_jquery_default()(".qtip").remove(); - that.qtipManager.addQtipToElements(e.target); - e.target.trigger("showqtipevent"); - } - }); - this.cy.on('select', 'node', function (e) { - _this.editor.pushSelectedNodeStack(e.target); - }); // this.cy.on('select', 'edge', function( e ) - // { - // var eventIsDirect = (e.target === this); - // $(".qtip").remove(); - // - // if( eventIsDirect ) { - // that.qtipManager.addQtipToElements(e.target); - // } - // }); - - this.cy.on('unselect', 'node', function (e) { - _this.editor.removeElementFromSelectedNodeStack(e.target); - }); - this.cy.on('free', 'node', function (e) { - //Collect all nodes with descendants in case of compounds - var selectedNodes = _this.cy.nodes(':selected'); - - var nodes = e.target; - nodes = nodes.union(nodes.descendants()); - nodes = nodes.union(selectedNodes); - - _this.editor.moveElements(nodes); - }); - this.cy.on('layoutstop', function () { - _this.editor.postLayout(); - }); // //TODO fix this when cytoscape is updated !!! - // //Due to cytoscape.js bug, only workaround that worked :( - // this.cy.on('add', 'node', function(event) - // { - // // event.target.select(); - // this.cy.style().update(); - // this.cy.forceRender(); - // }); - - this.cy.on("noderesize.resizeend", function (_e, _type, node) { - //Updates 'data' properties from 'style' - node.data('w', node.width()); - node.data('h', node.height()); //Used for collaborative mode - - _this.editor.resizeElements(node); - }); - this.cy.on('select', 'edge', function (e) { - _this.lastSelectedEdge = e.target; - }); - this.cy.on('bendPointMovement', function () { - _this.editor.updateEdgeBendPoints(_this.lastSelectedEdge); - }); - this.cy.on('noderesize.moveend', function () { - _this.editor.changeNodePositionsByArrows(_this.cy.nodes(":selected")); - }); + var selectedEles = this.editor.cy.elements(":selected"); + this.editor.removeElement(selectedEles); } }); - Object.defineProperty(CytoscapeArea.prototype, "initKeyboardHandlers", { + Object.defineProperty(PathwayActions.prototype, "addEdge", { enumerable: false, configurable: true, writable: true, - value: function () { - var _this = this; + value: function (edgeTypeIndex) { + // @ts-ignore + window.edgeAddingMode = edgeTypeIndex + 1; - if (!this.isCollaborative && !this.isCbioPortal) { - external_jquery_default()(document).keydown(function (e) { - if (e.which === 89 && (e.ctrlKey || e.metaKey)) { - _this.undoRedoManager.redo(); - } else if (e.which === 90 && (e.ctrlKey || e.metaKey)) { - _this.undoRedoManager.undo(); - } - }); + if (edgeTypeIndex === -1) { + this.eh.disable(); + this.eh.hide(); + return; } else { - external_jquery_default()('a[role="redo"]').hide(); - external_jquery_default()('a[role="undo"]').hide(); + // @ts-ignore + this.eh.enable(); } - - external_jquery_default()(document).keydown(function (e) { - if (e.which === 65 && (e.ctrlKey || e.metaKey)) { - // @ts-ignore - var tn = document.activeElement.tagName; - - if (tn != "TEXTAREA" && tn != "INPUT") { - e.preventDefault(); - - _this.cy.elements().select(); - } - } else if (e.which === 8 || e.which === 46) { - // @ts-ignore - var tn = document.activeElement.tagName; - - if (tn != "TEXTAREA" && tn != "INPUT") { - var selectedElements = _this.cy.$(':selected'); - - _this.editor.removeElement(selectedElements); - } - } - }); } }); - Object.defineProperty(CytoscapeArea.prototype, "initUndoRedoFunctionality", { + Object.defineProperty(PathwayActions.prototype, "changeNodeName", { enumerable: false, configurable: true, writable: true, - value: function () { - if (this.isCollaborative || this.isCbioPortal) { - external_jquery_default()('[role="undo"]').hide(); - external_jquery_default()('[role="redo"]').hide(); - /* TODO: AMENDMENT - document.getElementById("localOrCollaborativeToolbar").style.display = "none"; - */ - } + value: function (oldName, newName) { + var cyNode = this.editor.cy.$('[name="' + oldName + '"]')[0]; + this.editor.changeName(cyNode, newName); } }); - Object.defineProperty(CytoscapeArea.prototype, "initCBioPortalFunctionalities", { + Object.defineProperty(PathwayActions.prototype, "addNode", { + enumerable: false, + configurable: true, + writable: true, + value: function (nodeType) { + var nodeData = { + type: nodeType.toUpperCase(), + name: "New " + nodeType, + w: "150", + h: "52" + }; + var extent = this.editor.cy.extent(); + var posData = { + x: (extent.x1 + extent.x2) / 2, + y: (extent.y1 + extent.y2) / 2 + }; + this.editor.addNode(nodeData, posData); + this.pathwayHandler("Additional Pathway"); + } + }); + Object.defineProperty(PathwayActions.prototype, "searchGene", { + enumerable: false, + configurable: true, + writable: true, + value: function (geneName) { + var selector = "node[name @*= '" + geneName + "']"; + var nodesContainingSearchedGene = this.editor.cy.filter(selector); + var nodesToSelect = this.editor.cy.collection(); + nodesContainingSearchedGene.forEach(function (ele, index) { + if (!ele.hasClass("highlightedNode") && !ele.hasClass("invalidGeneHighlight")) nodesToSelect = nodesToSelect.union(ele); + }); + this.editor.highlightBySearch(nodesToSelect); + } + }); + Object.defineProperty(PathwayActions.prototype, "removeAllData", { enumerable: false, configurable: true, writable: true, value: function () { - if (this.isCbioPortal) { - var contextMenu = this.cy.contextMenus('get'); - contextMenu.destroy(); - } + this.editor.removeGenomicData(); + this.clearProfiles(); } }); - - CytoscapeArea_decorate([external_autobind_decorator_default.a], CytoscapeArea.prototype, "cyDivHandler", null); - - CytoscapeArea = CytoscapeArea_decorate([external_mobx_react_["observer"]], CytoscapeArea); - return CytoscapeArea; -}(external_react_default.a.Component); - -/* harmony default export */ var ui_CytoscapeArea = (CytoscapeArea_CytoscapeArea); -// CONCATENATED MODULE: ./src/ui/Ranking.tsx -var Ranking_extends = undefined && undefined.__extends || function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || { - __proto__: [] - } instanceof Array && function (d, b) { - d.__proto__ = b; - } || function (d, b) { - for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; - }; - - return extendStatics(d, b); - }; - - return function (d, b) { - extendStatics(d, b); - - function __() { - this.constructor = d; + Object.defineProperty(PathwayActions.prototype, "removeAllHighlight", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + this.editor.removeAllHighlight(); } + }); + Object.defineProperty(PathwayActions.prototype, "processFile", { + enumerable: false, + configurable: true, + writable: true, + value: function (file, isMerge) { + var _this = this; // Create a new FormData object. - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -}(); - -var Ranking_decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; + var formData = new FormData(); + formData.append("graphFile", file); + var request = new XMLHttpRequest(); + request.onreadystatechange = function () { + if (request.readyState === XMLHttpRequest.DONE) { + if (request.status === 200) { + var pathwayData = utils_SaveLoadUtility.parseGraph(request.responseText, false); + if (isMerge) { + _this.editor.mergeGraph(pathwayData.nodes, pathwayData.edges); + var graphJSON = _this.editor.cy.json(); //TODO change file name maybe, probabyly not necessary ? + // Pathway nodes and edges are now combination of both previous and new pathway. + pathwayData.nodes = graphJSON.elements.nodes; //this.editor.cy.nodes().map((node) => ({data: node.data()})); -var Ranking_Ranking = -/** @class */ -function (_super) { - Ranking_extends(Ranking, _super); + pathwayData.edges = graphJSON.elements.edges; //this.editor.cy.edges().map((edge) => ({data: edge.data()})); - function Ranking(props) { - var _this = _super.call(this, props) || this; + pathwayData.title = "Additional Pathway"; + } else { + _this.editor.loadFile(pathwayData.nodes, pathwayData.edges); - Object.defineProperty(_this, "bestPathways", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(_this, "dropDownTitle", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(_this, "selectedPathway", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(_this, "isPercentageMatch", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(_this, "isAlterationEnabled", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(_this, "isExpanded", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(_this, "COUNT_PERC_EXPLANATION", { - enumerable: true, - configurable: true, - writable: true, - value: "Whether we should favor the number of genes of interest matching the ones in a pathway or the percentage of such genes in that pathway. For instance, suppose genes of interest are A, B, and C, and the pathway contains genes B, C, D, and E. When we consider count, the score is 2 (for the two genes that match). However, when we consider percentage the score will be 50% as 2 of the 4 genes in the pathway are among genes of interest." - }); - Object.defineProperty(_this, "ALTERATION_EXPLANATION", { - enumerable: true, - configurable: true, - writable: true, - value: "When this is checked, each matching gene will not directly contribute to the score as 1 unit but with the alteration frequency percentage of that gene. For instance, suppose genes of interest are A, B, and C with alteration frequencies of 0.5, 0.2, and 0.3, respectively, and the pathway contains genes B, C, D, and E. When this is option isn't checked, the score will be 2 for match count and 50% for the match percentage. However, when this option is checked, the scores will be 0.2+0.3=0.5 and (0.2+0.3)/4=12.5% for match count and percentage, respectively." - }); - Object(external_mobx_["makeObservable"])(_this); - _this.isPercentageMatch = 0; - _this.isAlterationEnabled = 0; - _this.dropDownTitle = "Match count"; - _this.isExpanded = false; + _this.fileManager.setPathwayInfo({ + pathwayTitle: pathwayData.title, + pathwayDetails: pathwayData.description, + fileName: pathwayData.title + ".txt" + }); + } - _this.setBestPathwayMethod(0); + _this.pathwayHandler(pathwayData.title + "_imported"); - _this.selectedPathway = _this.bestPathways[0].pathwayName; - return _this; - } + _this.resetUndoStack(); + } else { + console.error("Error processing file: " + request.readyState + request.responseText); + } + } + }; - Object.defineProperty(Ranking.prototype, "setBestPathwayMethod", { - enumerable: false, - configurable: true, - writable: true, - value: function (i) { - this.bestPathways = this.props.bestPathwaysAlgos[i]; //this.selectedPathway = this.bestPathways[0].pathwayName; - //this.props.pathwayActions.changePathway(this.selectedPathway); + request.open("POST", "/loadGraph"); + request.send(formData); } }); - Object.defineProperty(Ranking.prototype, "onPathwayClick", { + Object.defineProperty(PathwayActions.prototype, "saveAs", { enumerable: false, configurable: true, writable: true, - value: function (pathway) { - // console.log(pathway); - this.selectedPathway = pathway; - this.props.pathwayActions.changePathway(this.selectedPathway); + value: function (type) { + if (type === "SVG") { + this.fileManager.saveAsSVG(this.editor); + } else if (type === "PNG") { + this.fileManager.saveAsPNG(this.editor.cy); + } else if (type === "JPEG") { + this.fileManager.saveAsJPEG(this.editor.cy); + } } }); - Object.defineProperty(Ranking.prototype, "onApplyClick", { + Object.defineProperty(PathwayActions.prototype, "editorHandler", { enumerable: false, configurable: true, writable: true, - value: function () { - // Mapping from dropdown + checkbox selection to pathway method. - this.setBestPathwayMethod(2 * this.isAlterationEnabled + this.isPercentageMatch); + value: function (editor, eh, undoRedoManager, viewOperationsManager, gridOptionsManager) { + this.editor = editor; + this.eh = eh; + this.undoRedoManager = undoRedoManager; + this.viewOperationsManager = viewOperationsManager; + this.gridOptionsManager = gridOptionsManager; } }); - Object.defineProperty(Ranking.prototype, "componentDidMount", { + Object.defineProperty(PathwayActions.prototype, "loadSampleData", { enumerable: false, configurable: true, writable: true, value: function () { - this.props.pathwayActions.changePathway(this.selectedPathway); + var data = "gene\tlung\tovarian\tbreast\ty\n" + "PTEN\t-7\t-20\t10\t20\n" + "NF1\t-12\t-4\t30\t20\n" + "PIK3CA\t18\t40\t-50\t20\n" + "KRAS\t11\t-5\t0\t20\n" + "ZIYA\t0\t-2\t0\t20\n" + "AKT1\t3\t30\t-10\t20\n" + "AKT2\t6\t-3\t20\t20\n" + "AKT3\t6\t-3\t20\t20\n" + "\n"; + this.editor.addGenomicData(data); + this.addProfile({ + profileId: "lung", + enabled: true + }); + this.addProfile({ + profileId: "ovarian", + enabled: true + }); + this.addProfile({ + profileId: "breast", + enabled: true + }); } }); - Object.defineProperty(Ranking.prototype, "render", { + Object.defineProperty(PathwayActions.prototype, "performLayout", { enumerable: false, configurable: true, writable: true, value: function () { - var _this = this; + this.editor.performLayout(); + } + }); - var lengthThreshold = 13; - return external_react_default.a.createElement("div", { - id: "ranking-bar" - }, this.props.tableComponent && this.props.tableComponent(this.bestPathways.map(function (data) { - return { - name: data.pathwayName, - score: data.score, - genes: data.genesMatched - }; - }), this.selectedPathway, this.onPathwayClick), !this.props.patientView && external_react_default.a.createElement("div", { - className: "info-entry", - style: { - marginTop: "10px" - } - }, external_react_default.a.createElement("div", { - id: "criteria-title", - className: "info-title" - }, external_react_default.a.createElement("b", { - style: { - display: "inline-block" - } - }, "\u00A0Ranking options")), external_react_default.a.createElement("div", { - className: "indent", - style: { - marginTop: "10px" - } - }, external_react_default.a.createElement(external_react_bootstrap_["DropdownButton"], { - title: this.dropDownTitle, - id: "0", - style: { - fontSize: "13px" - } - }, external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - style: { - fontSize: "13px" - }, - onClick: function () { - _this.isPercentageMatch = 0; - _this.dropDownTitle = "Match count"; + PathwayActions_decorate([external_mobx_["observable"]], PathwayActions.prototype, "selectedPathway", void 0); - _this.onApplyClick(); - } - }, "Match count"), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - style: { - fontSize: "13px" - }, - onClick: function () { - _this.isPercentageMatch = 1; - _this.dropDownTitle = "Match percentage"; + PathwayActions_decorate([external_mobx_["observable"]], PathwayActions.prototype, "enabledType", void 0); - _this.onApplyClick(); - } - }, "Match percentage")), "\u00A0", external_react_default.a.createElement("div", { - "data-tip": this.COUNT_PERC_EXPLANATION, - "data-border": "true", - "data-type": "light", - "data-place": "left", - "data-effect": "solid", - className: "fa fa-question-circle styles-module__infoIcon__zMiog" - }), external_react_default.a.createElement(external_react_bootstrap_["Checkbox"], { - id: "alterationCheckBox", - onClick: function () { - _this.isAlterationEnabled = _this.isAlterationEnabled === 1 ? 0 : 1; + PathwayActions_decorate([external_mobx_["action"].bound], PathwayActions.prototype, "addProfile", null); - _this.onApplyClick(); - }, - style: { - fontSize: "13px", - marginTop: "18px", - bottom: "4px" - } - }, "Consider alteration frequency\u00A0", external_react_default.a.createElement("span", { - "data-tip": this.ALTERATION_EXPLANATION, - "data-border": "true", - "data-type": "light", - "data-place": "left", - "data-effect": "solid", - className: "fa fa-question-circle styles-module__infoIcon__zMiog" - }))))); - } - }); + PathwayActions_decorate([external_mobx_["action"].bound], PathwayActions.prototype, "clearProfiles", null); + + PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "toggleGrid", null); + + PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "toggleGuide", null); + + PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "resizeToContent", null); + + PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "align", null); + + PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "onChangeFile", null); + + PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "upload", null); + + PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "merge", null); + + PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "setUploaders", null); + + PathwayActions_decorate([external_mobx_["computed"]], PathwayActions.prototype, "getPathwayInfo", null); + + PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "setPathwayInfo", null); + + PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "undo", null); + + PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "redo", null); + + PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "export", null); + + PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "resetUndoStack", null); + + PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "newPathway", null); + + PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "changePathway", null); + + PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "highlightNeighbours", null); + + PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "highlightSelected", null); + + PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "validateGenes", null); + + PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "showAll", null); + + PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "hideSelected", null); + + PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "deleteSelected", null); + + PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "addEdge", null); - Ranking_decorate([external_mobx_["observable"]], Ranking.prototype, "bestPathways", void 0); + PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "changeNodeName", null); - Ranking_decorate([external_mobx_["observable"]], Ranking.prototype, "dropDownTitle", void 0); + PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "addNode", null); - Ranking_decorate([external_mobx_["observable"]], Ranking.prototype, "selectedPathway", void 0); + PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "searchGene", null); - Ranking_decorate([external_mobx_["observable"]], Ranking.prototype, "isExpanded", void 0); + PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "removeAllData", null); - Ranking_decorate([external_autobind_decorator_default.a], Ranking.prototype, "setBestPathwayMethod", null); + PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "removeAllHighlight", null); - Ranking_decorate([external_autobind_decorator_default.a], Ranking.prototype, "onPathwayClick", null); + PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "processFile", null); - Ranking_decorate([external_autobind_decorator_default.a], Ranking.prototype, "onApplyClick", null); + PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "saveAs", null); - Ranking = Ranking_decorate([external_mobx_react_["observer"]], Ranking); - return Ranking; -}(external_react_default.a.Component); + PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "editorHandler", null); -/* harmony default export */ var ui_Ranking = (Ranking_Ranking); -// EXTERNAL MODULE: external "file-saver" -var external_file_saver_ = __webpack_require__(15); + PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "loadSampleData", null); -// CONCATENATED MODULE: ./src/managers/FileOperationsManager.tsx -var FileOperationsManager_decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; + PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "performLayout", null); + return PathwayActions; +}(); +/* harmony default export */ var utils_PathwayActions = (PathwayActions_PathwayActions); +// EXTERNAL MODULE: ./src/images/toolbar/about.svg +var about = __webpack_require__(16); +var about_default = /*#__PURE__*/__webpack_require__.n(about); +// EXTERNAL MODULE: ./src/images/toolbar/align/align-horizontal-bottom.svg +var align_horizontal_bottom = __webpack_require__(21); +var align_horizontal_bottom_default = /*#__PURE__*/__webpack_require__.n(align_horizontal_bottom); +// EXTERNAL MODULE: ./src/images/toolbar/align/align-horizontal-middle.svg +var align_horizontal_middle = __webpack_require__(22); +var align_horizontal_middle_default = /*#__PURE__*/__webpack_require__.n(align_horizontal_middle); -var FileOperationsManager_FileOperationsManager = -/** @class */ -function () { - function FileOperationsManager() { - Object.defineProperty(this, "pathwayInfo", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object(external_mobx_["makeObservable"])(this); - this.pathwayInfo = { - pathwayTitle: "New Pathway", - pathwayDetails: "", - fileName: "pathway.txt" - }; - } +// EXTERNAL MODULE: ./src/images/toolbar/align/align-horizontal-top.svg +var align_horizontal_top = __webpack_require__(23); +var align_horizontal_top_default = /*#__PURE__*/__webpack_require__.n(align_horizontal_top); - Object.defineProperty(FileOperationsManager.prototype, "getPathwayInfo", { - get: function () { - return this.pathwayInfo; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(FileOperationsManager.prototype, "setPathwayInfo", { - enumerable: false, - configurable: true, - writable: true, - value: function (other) { - this.pathwayInfo = other; - } - }); // see http://stackoverflow.com/questions/16245767/creating-a-blob-from-a-base64-string-in-javascript +// EXTERNAL MODULE: ./src/images/toolbar/align/align-vertical-center.svg +var align_vertical_center = __webpack_require__(24); +var align_vertical_center_default = /*#__PURE__*/__webpack_require__.n(align_vertical_center); - Object.defineProperty(FileOperationsManager.prototype, "b64toBlob", { - enumerable: false, - configurable: true, - writable: true, - value: function (b64Data, contentType, sliceSize) { - if (sliceSize === void 0) { - sliceSize = 512; - } +// EXTERNAL MODULE: ./src/images/toolbar/align/align-vertical-left.svg +var align_vertical_left = __webpack_require__(25); +var align_vertical_left_default = /*#__PURE__*/__webpack_require__.n(align_vertical_left); - contentType = contentType || ''; - var byteCharacters = atob(b64Data); - var byteArrays = []; +// EXTERNAL MODULE: ./src/images/toolbar/align/align-vertical-right.svg +var align_vertical_right = __webpack_require__(26); +var align_vertical_right_default = /*#__PURE__*/__webpack_require__.n(align_vertical_right); - for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) { - var slice = byteCharacters.slice(offset, offset + sliceSize); - var byteNumbers = new Array(slice.length); +// EXTERNAL MODULE: ./src/images/toolbar/delete-simple.svg +var delete_simple = __webpack_require__(27); +var delete_simple_default = /*#__PURE__*/__webpack_require__.n(delete_simple); - for (var i = 0; i < slice.length; i++) { - byteNumbers[i] = slice.charCodeAt(i); - } +// EXTERNAL MODULE: ./src/images/toolbar/grid.svg +var grid = __webpack_require__(28); +var grid_default = /*#__PURE__*/__webpack_require__.n(grid); - var byteArray = new Uint8Array(byteNumbers); - byteArrays.push(byteArray); - } +// EXTERNAL MODULE: ./src/images/toolbar/guidelines.svg +var guidelines = __webpack_require__(29); +var guidelines_default = /*#__PURE__*/__webpack_require__.n(guidelines); - var blob = new Blob(byteArrays, { - type: contentType - }); - return blob; - } - }); - ; - Object.defineProperty(FileOperationsManager.prototype, "saveAsJPEG", { - enumerable: false, - configurable: true, - writable: true, - value: function (cy) { - // var fileName = getFileName(); - var graphData = cy.jpeg(); // this is to remove the beginning of the pngContent: data:img/png;base64, +// EXTERNAL MODULE: ./src/images/toolbar/hide-selected.svg +var hide_selected = __webpack_require__(30); +var hide_selected_default = /*#__PURE__*/__webpack_require__.n(hide_selected); - var b64data = graphData.substr(graphData.indexOf(",") + 1); - var imageData = this.b64toBlob(b64data, "image/jpeg"); - var blob = new Blob([imageData]); - Object(external_file_saver_["saveAs"])(blob, "pathway.jpg"); - } - }); - ; - Object.defineProperty(FileOperationsManager.prototype, "saveAsSVG", { - enumerable: false, - configurable: true, - writable: true, - value: function (editor) { - var returnString = editor.exportSVG(); - var fileName = 'pathway.svg'; - var blob = new Blob([returnString], { - type: "text/plain;charset=utf-8" - }); - Object(external_file_saver_["saveAs"])(blob, fileName); - } - }); - Object.defineProperty(FileOperationsManager.prototype, "saveAsPNG", { - enumerable: false, - configurable: true, - writable: true, - value: function (cy) { - // var fileName = getFileName(); - var graphData = cy.png(); // this is to remove the beginning of the pngContent: data:img/png;base64, +// EXTERNAL MODULE: ./src/images/toolbar/layout-properties.svg +var layout_properties = __webpack_require__(31); +var layout_properties_default = /*#__PURE__*/__webpack_require__.n(layout_properties); - var b64data = graphData.substr(graphData.indexOf(",") + 1); - var imageData = this.b64toBlob(b64data, "image/png"); - var blob = new Blob([imageData]); - Object(external_file_saver_["saveAs"])(blob, "pathway.png"); - } - }); - ; - Object.defineProperty(FileOperationsManager.prototype, "saveGraph", { - enumerable: false, - configurable: true, - writable: true, - value: function (isSIFNX, editor) { - var pathwayData = this.pathwayInfo; - var returnString = isSIFNX ? utils_SaveLoadUtility.exportAsSIFNX(pathwayData, editor.cy.json()) : utils_SaveLoadUtility.exportGraph(pathwayData, editor.cy, editor.edgeEditing, editor.cy.json()); - var blob = new Blob([returnString], { - type: "text/plain;charset=utf-8" - }); - Object(external_file_saver_["saveAs"])(blob, pathwayData.fileName); - } - }); - ; +// EXTERNAL MODULE: ./src/images/toolbar/load.svg +var load = __webpack_require__(32); +var load_default = /*#__PURE__*/__webpack_require__.n(load); + +// EXTERNAL MODULE: ./src/images/toolbar/new.svg +var toolbar_new = __webpack_require__(33); +var new_default = /*#__PURE__*/__webpack_require__.n(toolbar_new); - FileOperationsManager_decorate([external_mobx_["observable"]], FileOperationsManager.prototype, "pathwayInfo", void 0); +// EXTERNAL MODULE: ./src/images/toolbar/portal.svg +var portal = __webpack_require__(34); +var portal_default = /*#__PURE__*/__webpack_require__.n(portal); - FileOperationsManager_decorate([external_mobx_["computed"]], FileOperationsManager.prototype, "getPathwayInfo", null); +// EXTERNAL MODULE: ./src/images/toolbar/quick-help.svg +var quick_help = __webpack_require__(35); +var quick_help_default = /*#__PURE__*/__webpack_require__.n(quick_help); - return FileOperationsManager; -}(); +// EXTERNAL MODULE: ./src/images/toolbar/redo.svg +var redo = __webpack_require__(36); +var redo_default = /*#__PURE__*/__webpack_require__.n(redo); -/* harmony default export */ var managers_FileOperationsManager = (FileOperationsManager_FileOperationsManager); -// CONCATENATED MODULE: ./src/modals/ConfirmationModal.tsx -var ConfirmationModal_extends = undefined && undefined.__extends || function () { +// EXTERNAL MODULE: ./src/images/toolbar/save.svg +var save = __webpack_require__(37); +var save_default = /*#__PURE__*/__webpack_require__.n(save); + +// EXTERNAL MODULE: ./src/images/toolbar/settings.svg +var settings = __webpack_require__(38); +var settings_default = /*#__PURE__*/__webpack_require__.n(settings); + +// EXTERNAL MODULE: ./src/images/toolbar/show-all.svg +var show_all = __webpack_require__(39); +var show_all_default = /*#__PURE__*/__webpack_require__.n(show_all); + +// EXTERNAL MODULE: ./src/images/toolbar/undo.svg +var undo = __webpack_require__(40); +var undo_default = /*#__PURE__*/__webpack_require__.n(undo); + +// CONCATENATED MODULE: ./src/ui/Buttonbar.tsx +var Buttonbar_extends = undefined && undefined.__extends || function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || { __proto__: [] @@ -14674,2515 +13788,3641 @@ var ConfirmationModal_extends = undefined && undefined.__extends || function () }; }(); +var Buttonbar_decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { + var c = arguments.length, + r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, + d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; -var ConfirmationModal_ConfirmationModal = -/** @class */ -function (_super) { - ConfirmationModal_extends(ConfirmationModal, _super); + // @ts-ignore - function ConfirmationModal(props) { - return _super.call(this, props) || this; - } + // @ts-ignore - Object.defineProperty(ConfirmationModal.prototype, "render", { - enumerable: false, - configurable: true, - writable: true, - value: function () { - var _this = this; + // @ts-ignore - return external_react_default.a.createElement(external_react_bootstrap_["Modal"], { - show: this.props.isModalShown, - onHide: function () { - _this.props.handleClose(EModalType.CONFIRMATION); - } - }, external_react_default.a.createElement(external_react_bootstrap_["Modal"].Header, { - closeButton: true - }, external_react_default.a.createElement(external_react_bootstrap_["Modal"].Title, null, external_react_default.a.createElement("h4", null, "Confirmation"))), external_react_default.a.createElement(external_react_bootstrap_["Modal"].Body, null, external_react_default.a.createElement("div", null, "All unsaved changes will be lost. Do you want to continue?")), external_react_default.a.createElement(external_react_bootstrap_["Modal"].Footer, null, external_react_default.a.createElement(external_react_bootstrap_["Button"], { - onClick: function () { - ConfirmationModal.pendingFunction(); + // @ts-ignore - _this.props.handleClose(EModalType.CONFIRMATION); - } - }, "Yes"), external_react_default.a.createElement(external_react_bootstrap_["Button"], { - onClick: function () { - _this.props.handleClose(EModalType.CONFIRMATION); - } - }, "No"))); - } - }); - return ConfirmationModal; -}(external_react_default.a.Component); + // @ts-ignore + + // @ts-ignore + + // @ts-ignore + + // @ts-ignore + + // @ts-ignore + + // @ts-ignore -/* harmony default export */ var modals_ConfirmationModal = (ConfirmationModal_ConfirmationModal); -// CONCATENATED MODULE: ./src/ui/Menubar.tsx -var Menubar_extends = undefined && undefined.__extends || function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || { - __proto__: [] - } instanceof Array && function (d, b) { - d.__proto__ = b; - } || function (d, b) { - for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; - }; + // @ts-ignore - return extendStatics(d, b); - }; + // @ts-ignore - return function (d, b) { - extendStatics(d, b); + // @ts-ignore - function __() { - this.constructor = d; - } + // @ts-ignore - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -}(); + // @ts-ignore + + // @ts-ignore + + // @ts-ignore + + // @ts-ignore + + // @ts-ignore + + // @ts-ignore + // @ts-ignore + // @ts-ignore -var Menubar_Menubar = +var Buttonbar_Buttonbar = /** @class */ function (_super) { - Menubar_extends(Menubar, _super); + Buttonbar_extends(Buttonbar, _super); - function Menubar(props) { - return _super.call(this, props) || this; + function Buttonbar(props) { + var _this = _super.call(this, props) || this; + + Object.defineProperty(_this, "searchedGene", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object(external_mobx_["makeObservable"])(_this); + _this.searchedGene = ""; + _this.props.pathwayActions.enabledType = EGridType.NONE; + return _this; } - Object.defineProperty(Menubar.prototype, "render", { + Object.defineProperty(Buttonbar.prototype, "setEnabledType", { enumerable: false, configurable: true, writable: true, - value: function () { - var _this = this; - - var nodeTypes = ["Gene", "Family", "Complex", "Compartment", "Process"]; - var edgeTypes = ["Activates", "Inhibits", "Induces", "Represses", "Binds"]; - var pathwayDropdownData = {}; - - for (var _i = 0, _a = Object.keys(pathways); _i < _a.length; _i++) { - var pwName = _a[_i]; // If a pathway name ain't include 'pathway' word then it is under pancanatlas. + value: function (newType) { + if (newType === this.props.pathwayActions.enabledType) { + this.props.pathwayActions.enabledType = EGridType.NONE; + } else { + this.props.pathwayActions.enabledType = newType; + } // Enabled type calculated - var isPancanatlas = !pwName.includes('pathway'); - var dashPos = pwName.indexOf('-'); - var pwHead = isPancanatlas ? 'PanCanAtlas' : pwName.substring(0, dashPos); - if (pwHead in pathwayDropdownData) { - pathwayDropdownData[pwHead].push(pwName); - } else { - pathwayDropdownData[pwHead] = [pwName]; - } + if (this.props.pathwayActions.enabledType === EGridType.GRID) { + this.props.pathwayActions.toggleGrid(true); + } else if (this.props.pathwayActions.enabledType === EGridType.GUIDE) { + this.props.pathwayActions.toggleGuide(true); + } else { + this.props.pathwayActions.toggleGrid(false); // This will disable both. } - - return external_react_default.a.createElement(external_react_bootstrap_["Navbar"], { - className: "pathway-navbar" - }, external_react_default.a.createElement(external_react_bootstrap_["Nav"], null, external_react_default.a.createElement(external_react_bootstrap_["NavDropdown"], { - eventKey: 1, - title: "Network", - id: "basic-nav-network" - }, external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - eventKey: 1.1, - onClick: this.props.pathwayActions.newPathway - }, "New"), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - eventKey: 1.1, - onClick: function () { - _this.props.handleOpen(EModalType.PW_DETAILS); - } - }, "Properties..."), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - eventKey: 1.1, - onClick: function () { - _this.props.pathwayActions.upload(); - } - }, "Import"), external_react_default.a.createElement(external_react_bootstrap_["NavDropdown"], { - className: "dropdown-submenu", - eventKey: 1, - title: "TCGA", - id: "basic-nav-TCGA" - }, Object.keys(pathwayDropdownData).map(function (pwHead) { - return external_react_default.a.createElement(external_react_bootstrap_["NavDropdown"], { - id: pwHead + "_dropdown", - className: "dropdown-submenu", - eventKey: 1, - title: pwHead - }, pathwayDropdownData[pwHead].map(function (pwName) { - return external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - onClick: function () { - if (_this.props.pathwayActions.doesCyHaveElements()) { - _this.props.handleOpen(EModalType.CONFIRMATION); - - modals_ConfirmationModal.pendingFunction = function () { - _this.props.pathwayActions.changePathway(pwName); - }; - } else { - _this.props.pathwayActions.changePathway(pwName); - } - } - }, pwName.split('-').join(" ")); - })); - })), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - eventKey: 1.1, - onClick: function () { - _this.props.pathwayActions.merge(); - } - }, "Merge With..."), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - eventKey: 1.1, - onClick: function () { - _this.props.pathwayActions.export(false); - } - }, "Export"), external_react_default.a.createElement(external_react_bootstrap_["NavDropdown"], { - className: "dropdown-submenu", - eventKey: 1, - title: "Export as", - id: "basic-nav-export" - }, external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - eventKey: 1.1, - onClick: function () { - _this.props.pathwayActions.saveAs("JPEG"); - } - }, "JPEG"), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - eventKey: 1.1, - onClick: function () { - _this.props.pathwayActions.saveAs("PNG"); - } - }, "PNG"), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - eventKey: 1.1, - onClick: function () { - _this.props.pathwayActions.saveAs("SVG"); - } - }, "SVG"), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - eventKey: 1.1, - onClick: function () { - _this.props.pathwayActions.export(true); - } - }, "SIFNX"))), external_react_default.a.createElement(external_react_bootstrap_["NavDropdown"], { - eventKey: 2, - title: "Edit", - id: "basic-nav-edit" - }, external_react_default.a.createElement(external_react_bootstrap_["NavDropdown"], { - id: "add-node-submenu", - className: "dropdown-submenu", - eventKey: 2.1, - title: "Add Node" - }, nodeTypes.map(function (nodeType) { - return external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - onClick: function () { - _this.props.pathwayActions.addNode(nodeType); - } - }, nodeType); - })), external_react_default.a.createElement(external_react_bootstrap_["NavDropdown"], { - id: "add-edge-submenu", - className: "dropdown-submenu", - eventKey: 2.1, - title: "Add Edge" - }, edgeTypes.map(function (nodeType, i) { - return external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - onClick: function () { - _this.props.pathwayActions.addEdge(i); - - _this.props.setActiveEdge(i); - } - }, nodeType); - })), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - eventKey: 1.1, - onClick: function () { - _this.props.pathwayActions.deleteSelected(); - } - }, "Delete Selected"), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - eventKey: 1.1, - onClick: function () { - _this.props.pathwayActions.resizeToContent(); - } - }, "Resize Nodes to Content"), !this.props.pathwayActions.isCollaborative && [external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - eventKey: 1.1, - onClick: function () { - _this.props.pathwayActions.undo(); - } - }, "Undo"), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - eventKey: 1.1, - onClick: function () { - _this.props.pathwayActions.redo(); - } - }, "Redo")]), external_react_default.a.createElement(external_react_bootstrap_["NavDropdown"], { - eventKey: 3, - title: "View", - id: "basic-nav-view" - }, external_react_default.a.createElement(external_react_bootstrap_["NavDropdown"], { - id: "align-view-submenu", - className: "dropdown-submenu", - eventKey: 2.1, - title: "Align Selected" - }, external_react_default.a.createElement(external_react_bootstrap_["NavDropdown"], { - id: "align-vertical-submenu", - className: "dropdown-submenu", - eventKey: 2.1, - title: "Vertical" - }, external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - eventKey: 1.1, - onClick: function () { - _this.props.pathwayActions.align("vLeft"); - } - }, "Left"), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - eventKey: 1.1, - onClick: function () { - _this.props.pathwayActions.align("vCen"); - } - }, "Center"), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - eventKey: 1.1, - onClick: function () { - _this.props.pathwayActions.align("vRight"); - } - }, "Right")), external_react_default.a.createElement(external_react_bootstrap_["NavDropdown"], { - id: "align-horizontal-submenu", - className: "dropdown-submenu", - eventKey: 2.1, - title: "Horizontal" - }, external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - eventKey: 1.1, - onClick: function () { + } + }); + Object.defineProperty(Buttonbar.prototype, "render", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + var _this = this; + + var fileFunctions = [{ + svg: new_default.a, + function: this.props.pathwayActions.newPathway, + tooltip: "New Pathway" + }, { + svg: load_default.a, + function: this.props.pathwayActions.upload, + tooltip: "Import Pathway" + }, { + svg: save_default.a, + function: function () { + _this.props.pathwayActions.export(false); + }, + tooltip: "Export Pathway" + }]; + var modFunctions = [{ + svg: delete_simple_default.a, + function: this.props.pathwayActions.deleteSelected, + tooltip: "Delete Selected" + }]; + + if (!this.props.pathwayActions.isCollaborative) { + modFunctions.push({ + svg: undo_default.a, + function: function () { + _this.props.pathwayActions.undo(); + }, + tooltip: "Undo" + }, { + svg: redo_default.a, + function: function () { + _this.props.pathwayActions.redo(); + }, + tooltip: "Redo" + }); + } + + var alignFunctions = [{ + svg: align_horizontal_top_default.a, + function: function () { _this.props.pathwayActions.align("hTop"); - } - }, "Top"), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - eventKey: 1.1, - onClick: function () { + }, + tooltip: "Align Horizontal Top" + }, { + svg: align_horizontal_middle_default.a, + function: function () { _this.props.pathwayActions.align("hMid"); - } - }, "Middle"), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - eventKey: 1.1, - onClick: function () { + }, + tooltip: "Align Horizontal Middle" + }, { + svg: align_horizontal_bottom_default.a, + function: function () { _this.props.pathwayActions.align("hBot"); - } - }, "Bottom"))), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - eventKey: 1.1, - onClick: function () { - _this.props.handleOpen(EModalType.GRID); - } - }, "Grid..."), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - eventKey: 1.1, - onClick: function () { + }, + tooltip: "Align Horizontal Bottom" + }, { + svg: align_vertical_left_default.a, + function: function () { + _this.props.pathwayActions.align("vLeft"); + }, + tooltip: "Align Vertical Left" + }, { + svg: align_vertical_center_default.a, + function: function () { + _this.props.pathwayActions.align("vCen"); + }, + tooltip: "Align Vertical Center" + }, { + svg: align_vertical_right_default.a, + function: function () { + _this.props.pathwayActions.align("vRight"); + }, + tooltip: "Align Vertical Right" + }]; + var utilFunctions = [{ + isFocused: this.props.pathwayActions.enabledType === EGridType.GRID, + svg: grid_default.a, + function: function () { + _this.setEnabledType(EGridType.GRID); + }, + tooltip: "Enable Grid: Show and snap to grid" + }, { + isFocused: this.props.pathwayActions.enabledType === EGridType.GUIDE, + svg: guidelines_default.a, + function: function () { + _this.setEnabledType(EGridType.GUIDE); + }, + tooltip: "Enable Guidelines: Enable and snap to alignment guidelines" + }]; + var visibilityFunctions = [{ + svg: hide_selected_default.a, + function: function () { _this.props.pathwayActions.hideSelected(); - } - }, "Hide Selected Nodes"), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - eventKey: 1.1, - onClick: function () { + }, + tooltip: "Hide Selected" + }, { + svg: show_all_default.a, + function: function () { _this.props.pathwayActions.showAll(); - } - }, "Show All Nodes")), external_react_default.a.createElement(external_react_bootstrap_["NavDropdown"], { - eventKey: 4, - title: "Highlight", - id: "basic-nav-highlight" - }, external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - eventKey: 4.1, - onClick: this.props.pathwayActions.highlightSelected - }, "Highlight Selected"), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - eventKey: 4.1, - onClick: this.props.pathwayActions.highlightNeighbours - }, "Highlight Neighbors Of Selected"), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - eventKey: 4.1, - onClick: this.props.pathwayActions.validateGenes - }, "Identify Invalid Genes"), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - eventKey: 4.1, - onClick: this.props.pathwayActions.removeAllHighlight - }, "Remove All Highlights")), external_react_default.a.createElement(external_react_bootstrap_["NavDropdown"], { - eventKey: 5, - title: "Alteration %", - id: "basic-nav-alteration" - }, external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - eventKey: 5.1, - onClick: function () { - _this.props.pathwayActions.uploadOverlay(); - } - }, "Load From File..."), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - eventKey: 5.1, - onClick: this.props.pathwayActions.loadSampleData - }, "Load Sample Data"), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - eventKey: 5.1, - onClick: function () { + }, + tooltip: "Show All" + }]; + var layoutFunctions = [{ + svg: layout_cose_default.a, + function: function () { + _this.props.pathwayActions.performLayout(); + }, + tooltip: "Perform Layout" + }, { + svg: layout_properties_default.a, + function: function () { + _this.props.handleOpen(EModalType.LAYOUT); + }, + tooltip: "Layout Properties" + }]; + var portalFunctions = [{ + svg: portal_default.a, + function: function () { _this.props.handleOpen(EModalType.STUDY); - } - }, "Load cBioPortal Data..."), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - eventKey: 5.1, - onClick: function () { + }, + tooltip: "Fetch Genomic Data From cBioPortal" + }, { + svg: settings_default.a, + function: function () { _this.props.handleOpen(EModalType.PROFILES); - } - }, "View Settings..."), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - eventKey: 5.1, - onClick: this.props.pathwayActions.removeAllData - }, "Remove All Data")), external_react_default.a.createElement(external_react_bootstrap_["NavDropdown"], { - eventKey: 6, - title: "Layout", - id: "basic-nav-layout" - }, external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - eventKey: 6.1, - onClick: this.props.pathwayActions.performLayout - }, "Perform Layout"), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - eventKey: 6.1, - onClick: function () { - _this.props.handleOpen(EModalType.LAYOUT); - } - }, "Layout Properties...")), external_react_default.a.createElement(external_react_bootstrap_["NavDropdown"], { - eventKey: 7, - title: "Help", - id: "basic-nav-help" - }, external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - eventKey: 7.1, - onClick: function () { + }, + tooltip: "Genomic Data Visibility Settings" + }]; + var infoFunctions = [{ + svg: quick_help_default.a, + function: function () { _this.props.handleOpen(EModalType.HELP); + }, + tooltip: "Quick Help" + }, { + svg: about_default.a, + function: function () { + _this.props.handleOpen(EModalType.ABOUT); + }, + tooltip: "About" + }]; + var allFunctions = [fileFunctions, modFunctions, alignFunctions, utilFunctions, visibilityFunctions, portalFunctions, layoutFunctions, infoFunctions]; + return external_react_default.a.createElement(external_react_bootstrap_["Navbar"], { + fluid: true, + style: { + backgroundColor: "#eff0f2", + minHeight: "0px" + }, + className: "pathway-toolbar" + }, external_react_default.a.createElement(external_react_bootstrap_["ButtonToolbar"], { + className: "toolbar pathway-toolbar", + style: { + marginBottom: "0px", + paddingBottom: "0px" + } + }, allFunctions.map(function (functions, index) { + return external_react_default.a.createElement(external_react_bootstrap_["ButtonGroup"], { + key: index + }, functions.map(function (svg, index) { + return external_react_default.a.createElement(external_react_bootstrap_["Button"], { + key: index, + className: "toolbar-button" + (svg.isFocused ? " toolbar-button-focused" : ""), + style: { + padding: 0 + } + }, external_react_default.a.createElement("img", { + height: "22px", + width: "22px", + src: svg.svg, + "data-tip": svg.tooltip, + "data-place": "bottom", + "data-effect": "solid", + onClick: svg.function + })); + })); + }), external_react_default.a.createElement(external_react_bootstrap_["ButtonGroup"], { + id: "searchGeneToolbar" + }, external_react_default.a.createElement(external_react_bootstrap_["FormGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["FormControl"], { + id: "searchGene", + type: "text", + style: { + maxHeight: '32px', + borderTopRightRadius: 0, + borderBottomRightRadius: 0 + }, + onChange: function (e) { + _this.searchedGene = e.target.value; + }, + placeholder: "Search Genes...", + onKeyPress: function (e) { + if (e.key !== "Enter") return; + + _this.props.pathwayActions.searchGene(_this.searchedGene); } - }, "Quick Help"), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - eventKey: 7.1, - onClick: function () { - window.open("https://github.com/iVis-at-Bilkent/pathway-mapper"); - } - }, "How To Use"), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - eventKey: 7.1, + }), external_react_default.a.createElement(external_react_bootstrap_["InputGroup"].Addon, { + id: "search-gene-input-group-addon", onClick: function () { - _this.props.handleOpen(EModalType.ABOUT); + _this.props.pathwayActions.searchGene(_this.searchedGene); + }, + style: { + cursor: 'pointer' } - }, "About"))), external_react_default.a.createElement(external_react_bootstrap_["Nav"], { - pullRight: true - }, external_react_default.a.createElement(external_react_bootstrap_["Navbar"].Brand, null, external_react_default.a.createElement("a", { - href: "#" - }, "PathwayMapper")))); + }, external_react_default.a.createElement(external_react_bootstrap_["Glyphicon"], { + glyph: "search" + }))))))); } }); - return Menubar; + + Buttonbar_decorate([external_mobx_["observable"]], Buttonbar.prototype, "searchedGene", void 0); + + Buttonbar = Buttonbar_decorate([external_mobx_react_["observer"]], Buttonbar); + return Buttonbar; }(external_react_default.a.Component); -/* harmony default export */ var ui_Menubar = (Menubar_Menubar); -// CONCATENATED MODULE: ./src/managers/GridOptionsManager.tsx +/* harmony default export */ var ui_Buttonbar = (Buttonbar_Buttonbar); +// EXTERNAL MODULE: external "cytoscape" +var external_cytoscape_ = __webpack_require__(6); +var external_cytoscape_default = /*#__PURE__*/__webpack_require__.n(external_cytoscape_); + +// EXTERNAL MODULE: ./node_modules/cytoscape-node-resize/resizeCue.svg +var resizeCue = __webpack_require__(41); +var resizeCue_default = /*#__PURE__*/__webpack_require__.n(resizeCue); +// EXTERNAL MODULE: ./src/images/nodes/compartment.svg +var compartment = __webpack_require__(42); +var compartment_default = /*#__PURE__*/__webpack_require__.n(compartment); -var GridOptionsManager_GridOptionsManager = +// EXTERNAL MODULE: ./src/images/nodes/complex.svg +var complex = __webpack_require__(43); +var complex_default = /*#__PURE__*/__webpack_require__.n(complex); + +// EXTERNAL MODULE: ./src/images/nodes/family.svg +var family = __webpack_require__(44); +var family_default = /*#__PURE__*/__webpack_require__.n(family); + +// EXTERNAL MODULE: ./src/images/nodes/gene.svg +var nodes_gene = __webpack_require__(45); +var gene_default = /*#__PURE__*/__webpack_require__.n(nodes_gene); + +// EXTERNAL MODULE: ./src/images/nodes/process.svg +var process = __webpack_require__(46); +var process_default = /*#__PURE__*/__webpack_require__.n(process); + +// CONCATENATED MODULE: ./src/managers/ContextMenuManager.tsx + + +var ContextMenuManager_ContextMenuManager = /** @class */ function () { - function GridOptionsManager(cy) { - Object.defineProperty(this, "currentProperties", { + function ContextMenuManager(cy, editor, handleOpen, undoRedoManager, isCollaborative) { + Object.defineProperty(this, "cy", { enumerable: true, configurable: true, writable: true, value: void 0 }); - Object.defineProperty(this, "cy", { + Object.defineProperty(this, "editor", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "handleOpen", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "undoRedoManager", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(this, "isCollaborative", { enumerable: true, configurable: true, writable: true, value: void 0 }); this.cy = cy; - this.currentProperties = {}; - this.changeParameters(GridOptionsManager.defaultGridGuideOptions); + this.editor = editor; + this.handleOpen = handleOpen; + this.undoRedoManager = undoRedoManager; + this.isCollaborative = isCollaborative; + this.init(); } - Object.defineProperty(GridOptionsManager.prototype, "changeParameters", { - enumerable: false, - configurable: true, - writable: true, - value: function (params) { - this.currentProperties = external_lodash_default.a.clone(params); - this.refreshGridOptionsExtension(); - } - }); - Object.defineProperty(GridOptionsManager.prototype, "getCurrentOptions", { - enumerable: false, - configurable: true, - writable: true, - value: function () { - return this.currentProperties; - } - }); - Object.defineProperty(GridOptionsManager.prototype, "getDefaultOptions", { - enumerable: false, - configurable: true, - writable: true, - value: function () { - return GridOptionsManager.defaultGridGuideOptions; - } - }); - Object.defineProperty(GridOptionsManager.prototype, "setSnapToGuidelines", { - enumerable: false, - configurable: true, - writable: true, - value: function (state) { - this.currentProperties.geometricGuideline = state; - this.currentProperties.snapToAlignmentLocationDuringDrag = state; - this.currentProperties.distributionGuidelines = state; - this.refreshGridOptionsExtension(); //this.appManager.gridOptionsView.changeParameters(); - } - }); - Object.defineProperty(GridOptionsManager.prototype, "setShowGrid", { - enumerable: false, - configurable: true, - writable: true, - value: function (state) { - this.currentProperties.drawGrid = state; - this.currentProperties.snapToGridDuringDrag = state; - this.refreshGridOptionsExtension(); //window.appManager.gridOptionsView.changeParameters(); - } - }); - Object.defineProperty(GridOptionsManager.prototype, "refreshGridOptionsExtension", { + Object.defineProperty(ContextMenuManager.prototype, "init", { enumerable: false, configurable: true, writable: true, value: function () { - this.cy.gridGuide(this.currentProperties); - } - }); - Object.defineProperty(GridOptionsManager, "defaultGridGuideOptions", { - enumerable: true, - configurable: true, - writable: true, - value: { - // On/Off Modules + var _this = this; - /* From the following four snap options, at most one should be true at a given time */ - snapToGridOnRelease: false, - snapToGridDuringDrag: false, - snapToAlignmentLocationOnRelease: false, - snapToAlignmentLocationDuringDrag: false, - distributionGuidelines: false, - geometricGuideline: false, - initPosAlignment: false, - centerToEdgeAlignment: false, - resize: false, - parentPadding: false, - drawGrid: false, - // General - gridSpacing: 20, - // Draw Grid - zoomDash: true, - panGrid: true, - gridStackOrder: -1, - gridColor: '#dedede', - lineWidth: 1.0, - // Guidelines - guidelinesStackOrder: 4, - guidelinesTolerance: 5.00, - guidelinesStyle: { - strokeStyle: "#4286f4", - geometricGuidelineRange: 750, - range: 500, - minDistRange: 10, - distGuidelineOffset: 10, - horizontalDistColor: "#4286f4", - verticalDistColor: "#4286f4", - initPosAlignmentColor: "#34495E", - lineDash: [6, 8], - horizontalDistLine: [0, 0], - verticalDistLine: [0, 0], - initPosAlignmentLine: [0, 0] - }, - // Parent Padding - parentSpacing: -1 // -1 to set paddings of parents to gridSpacing + var classRef = this; + var ctxMenus = this.cy.contextMenus(); + var menuItems = [{ + id: 'deleteSelected', + content: 'Delete Selected', + // Filters the elements to have this menu item on cxttap + // If the selector is not truthy no elements will have this menu item on cxttap + coreAsWell: true, + onClickFunction: function (event) { + var selectedEles = _this.cy.elements(':selected'); + + classRef.editor.removeElement(selectedEles); + }, + disabled: false, + hasTrailingDivider: true + }, { + id: 'hideSelected', + content: 'Hide Selected', + // Filters the elements to have this menu item on cxttap + // If the selector is not truthy no elements will have this menu item on cxttap + coreAsWell: true, + onClickFunction: function (event) { + classRef.editor.hideSelectedNodes(); + }, + disabled: false, + hasTrailingDivider: true + }, { + id: 'loadFromCBioPortal', + content: 'Load From cBioPortal...', + // Filters the elements to have this menu item on cxttap + // If the selector is not truthy no elements will have this menu item on cxttap + coreAsWell: true, + onClickFunction: function (event) { + _this.handleOpen(EModalType.STUDY); + }, + disabled: false, + hasTrailingDivider: true + }, //Context menu items when clicking on nodes/compounds + { + id: 'remove', + content: 'Delete', + // Filters the elements to have this menu item on cxttap + // If the selector is not truthy no elements will have this menu item on cxttap + selector: 'node, edge', + onClickFunction: function (event) { + var ele = event.target; // The function to be executed on click + + var selectedElements = classRef.cy.nodes(':selected').union(ele); + classRef.editor.removeElement(selectedElements); + }, + disabled: false, + hasTrailingDivider: true, + coreAsWell: false // Whether core instance have this item on cxttap + + }, { + id: 'addSelected', + content: 'Add Selected Into This', + // Filters the elements to have this menu item on cxttap + // If the selector is not truthy no elements will have this menu item on cxttap + selector: 'node', + onClickFunction: function (event) { + var ele = event.target; + var selectedNodes = classRef.cy.nodes(':selected'); + var containerType = ele.data('type'); + var validNodes = classRef.cy.collection(); //Do nothing if node is GENE + + if (ele._private.data['type'] === 'GENE' || selectedNodes.size() < 1) { + return; + } //Prevent actions like adding root node to children & addition to itself + else { + var notValid = false; + selectedNodes.forEach(function (tmpNode, i) { + if (ele.id() == tmpNode.id()) { + notValid = true; + return false; + } + + if (tmpNode.isParent()) { + notValid = classRef.isChildren(tmpNode, ele); + + if (notValid) { + return false; + } + } + + return true; + }); - } - }); - return GridOptionsManager; -}(); + if (notValid) { + return; + } + } -/* harmony default export */ var managers_GridOptionsManager = (GridOptionsManager_GridOptionsManager); -// CONCATENATED MODULE: ./src/modals/GridSettings.tsx -var GridSettings_extends = undefined && undefined.__extends || function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || { - __proto__: [] - } instanceof Array && function (d, b) { - d.__proto__ = b; - } || function (d, b) { - for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; - }; + selectedNodes.forEach(function (tmpNode, i) { + if (containerType == "FAMILY" || containerType == "COMPLEX") { + if (tmpNode.data('type') != "COMPARTMENT" && tmpNode.data('type') != "PROCESS") { + validNodes = validNodes.add(tmpNode); + } + } else { + validNodes = validNodes.add(tmpNode); + } + }); + var compId = ele.id(); + classRef.editor.changeParents(validNodes, compId); //Unselecting nodes to remove them from selectedNodeStack - return extendStatics(d, b); - }; + selectedNodes.unselect(); + }, + disabled: false, + hasTrailingDivider: true, + coreAsWell: false // Whether core instance have this item on cxttap - return function (d, b) { - extendStatics(d, b); + }, { + id: 'removeSelected', + content: 'Remove Selected From Parent', + // Filters the elements to have this menu item on cxttap + // If the selector is not truthy no elements will have this menu item on cxttap + selector: 'node', + onClickFunction: function (event) { + var ele = event.target; + var selectedNodes = classRef.cy.nodes(':selected'); + var notValid = false; + selectedNodes.forEach(function (tmpNode, i) { + if (tmpNode.isParent()) { + notValid = classRef.isChildren(tmpNode, ele); - function __() { - this.constructor = d; - } + if (notValid) { + return false; + } + } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -}(); + return true; + }); -var GridSettings_decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; + if (notValid) { + return; + } + classRef.editor.changeParents(selectedNodes, null); //Unselecting nodes to remove them from selectedNodeStack + + selectedNodes.unselect(); + }, + disabled: false, + hasTrailingDivider: true, + coreAsWell: false // Whether core instance have this item on cxttap + }, { + id: 'performLayout', + content: 'Perform Layout', + // Filters the elements to have this menu item on cxttap + // If the selector is not truthy no elements will have this menu item on cxttap + coreAsWell: true, + onClickFunction: function (event) { + _this.editor.performLayout(); + }, + disabled: false, + hasTrailingDivider: true + }]; + var nonCollabItems = [//Context menu items when clicking on blank space + { + id: 'undoAction', + content: 'Undo', + // Filters the elements to have this menu item on cxttap + // If the selector is not truthy no elements will have this menu item on cxttap + coreAsWell: true, + onClickFunction: function (event) { + _this.undoRedoManager.undo(); + }, + disabled: false, + hasTrailingDivider: true + }, { + id: 'redoAction', + content: 'Redo', + // Filters the elements to have this menu item on cxttap + // If the selector is not truthy no elements will have this menu item on cxttap + coreAsWell: true, + onClickFunction: function (event) { + _this.undoRedoManager.redo(); + }, + disabled: false, + hasTrailingDivider: true + }]; + if (!this.isCollaborative) { + menuItems = menuItems.concat(nonCollabItems); + } + ctxMenus.appendMenuItems(menuItems); + } + }); //TODO ?????? + //window.edgeAddingMode = false; + //TODO better move this to another class + //Utility function to check whether query node is children of given node + Object.defineProperty(ContextMenuManager.prototype, "isChildren", { + enumerable: false, + configurable: true, + writable: true, + value: function (node, queryNode) { + var parent = queryNode.parent()[0]; + while (parent) { + if (parent.id() == node.id()) { + return true; + } -var EGridType; + parent = parent.parent()[0]; + } -(function (EGridType) { - EGridType[EGridType["GRID"] = 0] = "GRID"; - EGridType[EGridType["GUIDE"] = 1] = "GUIDE"; - EGridType[EGridType["NONE"] = 2] = "NONE"; -})(EGridType || (EGridType = {})); + return false; + } + }); + return ContextMenuManager; +}(); -var GridSettings_GridSettings = -/** @class */ -function (_super) { - GridSettings_extends(GridSettings, _super); +/* harmony default export */ var managers_ContextMenuManager = (ContextMenuManager_ContextMenuManager); +// CONCATENATED MODULE: ./src/managers/QtipManager.tsx - function GridSettings(props) { - var _this = _super.call(this, props) || this; - Object.defineProperty(_this, "gridSize", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(_this, "guideColor", { +var QtipManager_QtipManager = +/** @class */ +function () { + function QtipManager(cy, editor) { + Object.defineProperty(this, "cy", { enumerable: true, configurable: true, writable: true, value: void 0 }); - Object.defineProperty(_this, "defaultSettings", { - enumerable: true, - configurable: true, - writable: true, - value: managers_GridOptionsManager.defaultGridGuideOptions - }); - Object.defineProperty(_this, "enabledType", { + Object.defineProperty(this, "editor", { enumerable: true, configurable: true, writable: true, value: void 0 }); - Object(external_mobx_["makeObservable"])(_this); - _this.gridSize = _this.defaultSettings.gridSpacing; - _this.guideColor = _this.defaultSettings.guidelinesStyle.strokeStyle; - return _this; + this.cy = cy; + this.editor = editor; } - Object.defineProperty(GridSettings.prototype, "setEnabledType", { + Object.defineProperty(QtipManager.prototype, "generateEdgeQtipContentHTML", { + enumerable: false, + configurable: true, + writable: true, + value: function (edge) { + var self = this; + var textInput = external_jquery_default()('
'); + var pubmedIDList = external_jquery_default()('
'); + var pubmedURL = 'https://www.ncbi.nlm.nih.gov/pubmed/'; + var pubmedData = edge.data('pubmedIDs'); + var edgeLabelInput = external_jquery_default()('
'); + + function generatePubmedLinks(argData) { + for (var key in argData) { + if (!argData.hasOwnProperty(key)) { + continue; + } + + var pubmedID = argData[key]; + if (isNaN(pubmedID)) continue; + var pubmedIDRemoveButton = external_jquery_default()(""); + pubmedIDRemoveButton.on('click', function (event) { + external_jquery_default()(event.target).parent().remove(); + var edge = self.cy.$('#' + external_jquery_default()(event.target).attr('edgeId')); + var pubmedId = [external_jquery_default()(event.target).parent().find('a').text()]; + self.editor.removePubmedID(edge, pubmedId); + + if (external_jquery_default()('.pubmedIDList').children().length < 3) { + external_jquery_default()('.pubmedIDList').children().remove(); + } + }); + var pubmedContent = external_jquery_default()("
\ + \ +
"); + pubmedContent.first().append(pubmedIDRemoveButton); + pubmedIDList.append(pubmedContent); + } + } + + function generatePubmedLinksHeader() { + pubmedIDList.append(external_jquery_default()('
')); + pubmedIDList.append(external_jquery_default()('')); + } + + if (pubmedData.length > 0) { + generatePubmedLinksHeader(); + generatePubmedLinks(pubmedData); + } + + textInput.change(function () { + var edgeID = external_jquery_default()(this).find('input').attr('edgeid'); + var val = external_jquery_default()(this).find('input').val(); + var pumbedIDs = val.split(';'); + external_jquery_default()(this).find('input').val(""); + + if (external_jquery_default()('.pubmedIDList').children().length === 0) { + generatePubmedLinksHeader(); + } + + self.editor.addPubmedIDs(edge, pumbedIDs); + generatePubmedLinks(pumbedIDs); + }); + edgeLabelInput.change(function () { + var edgeID = external_jquery_default()(this).find('input').attr('edgeid'); + var cyEdge = self.cy.$('#' + edgeID)[0]; + var newName = external_jquery_default()(this).find('input').val(); + external_jquery_default()(this).find('input').val(""); //TODO call associated Editor Actions Manager function + + self.editor.changeName(cyEdge, newName); + }); + var wrapper = external_jquery_default()('
'); + var pubmedRow = external_jquery_default()('
\ +
Add PubmedID(s):
\ +
'); + pubmedRow.append(textInput); + var labelRow = external_jquery_default()('
\ +
Label:
\ +
'); + labelRow.append(edgeLabelInput); + wrapper.append(labelRow); + wrapper.append('
'); + pubmedRow.append(textInput); + wrapper.append(pubmedRow); + wrapper.append(pubmedIDList); + return wrapper; + } + }); + Object.defineProperty(QtipManager.prototype, "generateNodeQtipContentHTML", { enumerable: false, configurable: true, writable: true, - value: function (newType) { - if (newType === this.enabledType) { - this.enabledType = EGridType.NONE; - return; + value: function (ele) { + var self = this; + var nodeData = ele.data(); + var textInput = external_jquery_default()('
'); + textInput.change(function () { + var nodeID = external_jquery_default()(this).find('input').attr('nodeid'); + var cyNode = self.cy.$('#' + nodeID)[0]; + var newName = external_jquery_default()(this).find('input').val(); + self.editor.changeName(cyNode, newName); + }); + var wrapper = external_jquery_default()('
'); + var row = external_jquery_default()('
\ +
Name:
\ +
'); + row.append(textInput); + wrapper.append(row); + + if (ele.data().type === "GENE") { + var entrezGeneButton = external_jquery_default()('
'); + entrezGeneButton.find('button').on('click', function (event) { + event.preventDefault(); + var nodeID = external_jquery_default()(this).attr('nodeid'); + + var nodeSymbol = self.cy.$('#' + nodeID)[0]._private.data['name']; + + var parent = external_jquery_default()(this).parent(); + window.open('https://www.mycancergenome.org/content/gene/' + nodeSymbol); + }); + wrapper.append(entrezGeneButton); } - this.enabledType = newType; + return wrapper; } }); - Object.defineProperty(GridSettings.prototype, "render", { + Object.defineProperty(QtipManager.prototype, "addQtipToElements", { enumerable: false, configurable: true, writable: true, - value: function () { - var _this = this; + value: function (eles) { + var self = this; + eles.forEach(function (ele) { + var qTipOpts = {}; - return external_react_default.a.createElement(external_react_bootstrap_["Modal"], { - dialogClassName: "gridModal", - show: this.props.isModalShown, - onShow: function () { - _this.enabledType = _this.props.pathwayActions.enabledType; - }, - onHide: function () { - _this.props.handleClose(EModalType.GRID); - } - }, external_react_default.a.createElement(external_react_bootstrap_["Modal"].Header, { - closeButton: true - }, external_react_default.a.createElement(external_react_bootstrap_["Modal"].Title, null, external_react_default.a.createElement("h4", null, "Grid Settings"))), external_react_default.a.createElement(external_react_bootstrap_["Modal"].Body, null, external_react_default.a.createElement(external_react_bootstrap_["Form"], { - id: "gripOptionsForm", - className: "leftText" - }, external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { - sm: 8 - }, external_react_default.a.createElement(external_react_bootstrap_["ControlLabel"], null, "Enable Grids:")), external_react_default.a.createElement(external_react_bootstrap_["Col"], { - sm: 4 - }, external_react_default.a.createElement(external_react_bootstrap_["Checkbox"], { - checked: this.enabledType === EGridType.GRID, - onChange: function () { - _this.setEnabledType(EGridType.GRID); - } - }))), external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { - sm: 8 - }, external_react_default.a.createElement(external_react_bootstrap_["ControlLabel"], null, "Enable Guidelines")), external_react_default.a.createElement(external_react_bootstrap_["Col"], { - sm: 4 - }, external_react_default.a.createElement(external_react_bootstrap_["Checkbox"], { - checked: this.enabledType === EGridType.GUIDE, - onChange: function () { - _this.setEnabledType(EGridType.GUIDE); - } - }))), external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { - sm: 8 - }, external_react_default.a.createElement(external_react_bootstrap_["ControlLabel"], null, "Grid Size:")), external_react_default.a.createElement(external_react_bootstrap_["Col"], { - sm: 4 - }, external_react_default.a.createElement(external_react_bootstrap_["FormControl"], { - type: "text", - value: this.gridSize, - onChange: function (e) { - _this.gridSize = e.target.value; - } - }))), external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { - sm: 8 - }, external_react_default.a.createElement(external_react_bootstrap_["ControlLabel"], null, "Guideline Color:")), external_react_default.a.createElement(external_react_bootstrap_["Col"], { - sm: 4 - }, external_react_default.a.createElement("input", { - id: "guidelineColor", - type: "color", - className: "form-control", - value: this.guideColor, - onChange: function (e) { - _this.guideColor = e.target.value; + if (ele.isNode()) { + qTipOpts = { + content: { + text: function () { + return self.generateNodeQtipContentHTML(this); + }, + title: function () { + return ele.data().type.toUpperCase() + ' DETAILS'; + } + }, + position: { + my: 'top center', + at: 'bottom center' + }, + style: { + classes: 'qtip-tipsy qtip-rounded', + width: 400 + }, + show: { + event: "showqtipevent" + } + }; + } else if (ele.isEdge()) { + qTipOpts = { + content: { + text: function () { + return self.generateEdgeQtipContentHTML(this); + }, + title: function () { + return 'INTERACTION DETAILS'; + } + }, + position: { + my: 'top center', + at: 'bottom center' + }, + style: { + classes: 'qtip-tipsy qtip-rounded', + width: 400 + }, + show: { + event: "showqtipevent" + } + }; } - }))))), external_react_default.a.createElement(external_react_bootstrap_["Modal"].Footer, null, external_react_default.a.createElement(external_react_bootstrap_["Button"], { - onClick: function () { - _this.props.pathwayActions.enabledType = _this.enabledType; - - _this.props.pathwayActions.adjustGridSettings(_this.gridSize, _this.guideColor); - - if (_this.props.pathwayActions.enabledType === EGridType.GRID) { - _this.props.pathwayActions.toggleGrid(true); - } else if (_this.props.pathwayActions.enabledType === EGridType.GUIDE) { - _this.props.pathwayActions.toggleGuide(true); - } else { - _this.props.pathwayActions.toggleGrid(false); // This will disable both. - } + ele.qtip(qTipOpts); + }); + } + }); //Utility Functions - _this.props.handleClose(EModalType.GRID); - } - }, "Save"))); + Object.defineProperty(QtipManager.prototype, "capitalizeFirstLetter", { + enumerable: false, + configurable: true, + writable: true, + value: function (string) { + return string.charAt(0).toUpperCase() + string.slice(1); } }); + return QtipManager; +}(); - GridSettings_decorate([external_mobx_["observable"]], GridSettings.prototype, "gridSize", void 0); - - GridSettings_decorate([external_mobx_["observable"]], GridSettings.prototype, "guideColor", void 0); - - GridSettings_decorate([external_mobx_["observable"]], GridSettings.prototype, "enabledType", void 0); - - GridSettings = GridSettings_decorate([external_mobx_react_["observer"]], GridSettings); - return GridSettings; -}(external_react_default.a.Component); - -/* harmony default export */ var modals_GridSettings = (GridSettings_GridSettings); -// CONCATENATED MODULE: ./src/utils/PathwayActions.ts -var PathwayActions_decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; - - - - - +/* harmony default export */ var managers_QtipManager = (QtipManager_QtipManager); +// CONCATENATED MODULE: ./src/managers/ShareDBManager.tsx +var sharedb; +var socket; +var connection; -var PathwayActions_PathwayActions = +var ShareDBManager_ShareDBManager = /** @class */ function () { - function PathwayActions(pathwayHandler, profiles, fileManager, handleOpen, isCBioPortal, isCollaborative) { - Object.defineProperty(this, "selectedPathway", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(this, "fileManager", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(this, "editor", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(this, "undoRedoManager", { + function ShareDBManager(postFileLoadCallback) { + Object.defineProperty(this, "NODEMAP_NAME", { enumerable: true, configurable: true, writable: true, - value: void 0 + value: 'nodes' }); - Object.defineProperty(this, "pathwayHandler", { + Object.defineProperty(this, "EDGEMAP_NAME", { enumerable: true, configurable: true, writable: true, - value: void 0 + value: 'edges' }); - Object.defineProperty(this, "handleOpen", { + Object.defineProperty(this, "LAYOUT_PROPS_NAME", { enumerable: true, configurable: true, writable: true, - value: void 0 + value: 'layoutProperties' }); - Object.defineProperty(this, "eh", { + Object.defineProperty(this, "GLOBAL_OPTS_NAME", { enumerable: true, configurable: true, writable: true, - value: void 0 - }); - Object.defineProperty(this, "profiles", { + value: 'globalOptions' + }); //For storing genomic data information per gene + + Object.defineProperty(this, "GENOMIC_DATA_MAP_NAME", { enumerable: true, configurable: true, writable: true, - value: void 0 - }); - Object.defineProperty(this, "gridOptionsManager", { + value: 'genomicDataMap' + }); //For storing visibility information of genomic data according to the cancer type + + Object.defineProperty(this, "VISIBLE_GENOMIC_DATA_MAP_NAME", { enumerable: true, configurable: true, writable: true, - value: void 0 + value: 'visibleGenomicDataMapByType' }); - Object.defineProperty(this, "uploader", { + Object.defineProperty(this, "GENOMIC_DATA_GROUP_NAME", { enumerable: true, configurable: true, writable: true, - value: void 0 + value: 'genomicDataGroupList' }); - Object.defineProperty(this, "merger", { + Object.defineProperty(this, "GENOMIC_DATA_GROUP_COUNT", { enumerable: true, configurable: true, writable: true, - value: void 0 + value: 'genomicDataGroupCount' }); - Object.defineProperty(this, "isCBioPortal", { + Object.defineProperty(this, "graphUtilities", { enumerable: true, configurable: true, writable: true, value: void 0 }); - Object.defineProperty(this, "isCollaborative", { + Object.defineProperty(this, "doc", { enumerable: true, configurable: true, writable: true, value: void 0 }); - Object.defineProperty(this, "viewOperationsManager", { + Object.defineProperty(this, "postFileLoad", { enumerable: true, configurable: true, writable: true, value: void 0 }); - Object.defineProperty(this, "overlayUploader", { + Object.defineProperty(this, "editor", { enumerable: true, configurable: true, writable: true, value: void 0 }); - Object.defineProperty(this, "enabledType", { + Object.defineProperty(this, "reconnectEdge", { enumerable: true, configurable: true, writable: true, - value: void 0 - }); - this.pathwayHandler = pathwayHandler; - this.profiles = profiles; - this.fileManager = fileManager; - this.handleOpen = handleOpen; - this.isCBioPortal = isCBioPortal; - this.isCollaborative = isCollaborative; - this.enabledType = EGridType.NONE; - Object(external_mobx_["makeObservable"])(this); + value: function (sourceID, targetID, edgeData) { + var edgeMap = this.doc.data[this.EDGEMAP_NAME]; + var edge = edgeMap[edgeData.id]; + var edgeID = edge.id; + edge.source = sourceID; + edge.target = targetID; + + if (edgeMap.hasOwnProperty(edgeID)) { + this.updateShareDBObject(this.EDGEMAP_NAME, edgeID, edge); + } else { + throw new Error('Element does not exist in Real Time'); + } + } + }); //Doc data maps names and keys + + this.postFileLoad = postFileLoadCallback; + this.graphUtilities = new utils_GraphUtilities(); } - Object.defineProperty(PathwayActions.prototype, "emphasiseQueryGenes", { + ; + Object.defineProperty(ShareDBManager.prototype, "getDoc", { enumerable: false, configurable: true, writable: true, - value: function (queryGenes) { - if (this.editor) this.editor.cy.nodes().forEach(function (node) { - var nodeName = node.data().name; - var nodeType = node.data().type; + value: function () { + return this.doc; + } + }); + Object.defineProperty(ShareDBManager.prototype, "setEditor", { + enumerable: false, + configurable: true, + writable: true, + value: function (editor) { + this.editor = editor; + } + }); //Applies any given sharDB opeation to shared document and notifies other clients - if (queryGenes.includes(nodeName) && nodeType === 'GENE') { - node.style({ - 'border-width': '4px', - 'font-weight': 'bold' - }); - } - }); + Object.defineProperty(ShareDBManager.prototype, "applyShareDBOperation", { + enumerable: false, + configurable: true, + writable: true, + value: function (op) { + this.doc.submitOp(op, this.shareDBError); } }); - Object.defineProperty(PathwayActions.prototype, "getSelectedNodes", { + ; //Clears genomic data in shared document and notifies other clients + + Object.defineProperty(ShareDBManager.prototype, "clearShareDBGenomicData", { enumerable: false, configurable: true, writable: true, value: function () { - return this.editor.cy.nodes(':selected'); + var ops = []; + var genomicMap = this.doc.data[this.GENOMIC_DATA_MAP_NAME]; + var visMap = this.doc.data[this.VISIBLE_GENOMIC_DATA_MAP_NAME]; + var genomicDataGroupMap = this.doc.data[this.GENOMIC_DATA_GROUP_NAME]; + var genomicDataGroupCount = this.doc.data[this.GENOMIC_DATA_GROUP_COUNT]; //Reset all genomic maps + + for (var _i = 0, _a = Object.keys(genomicMap); _i < _a.length; _i++) { + var key = _a[_i]; + ops.push({ + p: [this.GENOMIC_DATA_GROUP_NAME, key], + od: genomicMap[key] + }); + } + + for (var _b = 0, _c = Object.keys(visMap); _b < _c.length; _b++) { + var key = _c[_b]; + ops.push({ + p: [this.VISIBLE_GENOMIC_DATA_MAP_NAME, key], + od: visMap[key] + }); + } + + for (var _d = 0, _e = Object.keys(genomicDataGroupMap); _d < _e.length; _d++) { + var key = _e[_d]; + ops.push({ + p: [this.GENOMIC_DATA_GROUP_NAME, key], + od: genomicDataGroupMap[key] + }); + } //Reset genomic data group count to 0 + + + ops.push({ + p: [this.GENOMIC_DATA_GROUP_COUNT], + na: -genomicDataGroupCount + }); + this.doc.submitOp(ops, this.shareDBError); } }); - Object.defineProperty(PathwayActions.prototype, "setLayoutProperties", { + ; + /* + * Updates shared document object + * @param mapName: map name of the object + * @param objectKey: key of the object + * @param object: new object + * + */ + + Object.defineProperty(ShareDBManager.prototype, "updateShareDBObject", { enumerable: false, configurable: true, writable: true, - value: function (layoutProperties) { - this.editor.saveLayoutProperties(layoutProperties); + value: function (mapName, objectKey, object) { + this.doc.submitOp([{ + p: [mapName, objectKey], + od: this.doc.data[mapName][objectKey], + oi: object + }], this.shareDBError); } }); - Object.defineProperty(PathwayActions.prototype, "doesCyHaveElements", { + ; + /* + * Inserts a new shared document object + * @param mapName: map name of the object + * @param objectKey: key of the object + * @param object: new object + * + */ + + Object.defineProperty(ShareDBManager.prototype, "insertShareDBObject", { + enumerable: false, + configurable: true, + writable: true, + value: function (mapName, objectKey, object) { + this.doc.submitOp([{ + p: [mapName, objectKey], + oi: object + }], this.shareDBError); + } + }); + ; + /* + * Deletes a shared document object + * @param mapName: map name of the object + * @param objectKey: key of the object + * + */ + + Object.defineProperty(ShareDBManager.prototype, "deleteShareDBObject", { + enumerable: false, + configurable: true, + writable: true, + value: function (mapName, objectKey) { + this.doc.submitOp([{ + p: [mapName, objectKey], + od: this.doc.data[mapName][objectKey] + }], this.shareDBError); + } + }); + ; //Initializes layout properties of the shared document + + Object.defineProperty(ShareDBManager.prototype, "initializeShareDBLayoutProperties", { enumerable: false, configurable: true, writable: true, value: function () { - return this.editor.cy.elements().length > 0; + this.doc.submitOp([{ + p: [this.LAYOUT_PROPS_NAME, 0], + li: [this.editor.layoutProperties] + }], this.shareDBError); } }); - Object.defineProperty(PathwayActions.prototype, "toggleGrid", { + ; //Initializes global options of the shared document + + Object.defineProperty(ShareDBManager.prototype, "initializeShareDBGlobalOptions", { enumerable: false, configurable: true, writable: true, - value: function (isEnabled) { - this.gridOptionsManager.setSnapToGuidelines(false); - this.gridOptionsManager.setShowGrid(isEnabled); + value: function () { + this.doc.submitOp([{ + p: [this.GLOBAL_OPTS_NAME, 0], + li: [this.editor.getGlobalOptions()] + }], this.shareDBError); } }); - Object.defineProperty(PathwayActions.prototype, "toggleGuide", { + ; + /* + * Updates layout properties of the shared document and notifies other clients + * @param object: new layout properties object + * + */ + + Object.defineProperty(ShareDBManager.prototype, "updateShareDBLayoutProperties", { + enumerable: false, + configurable: true, + writable: true, + value: function (object) { + this.doc.submitOp([{ + p: [this.LAYOUT_PROPS_NAME, 0], + ld: this.doc.data[this.LAYOUT_PROPS_NAME][0], + li: object + }], this.shareDBError); + } + }); + ; + /* + * Updates global options of the shared document and notifies other clients + * @param object: new global options object + * + */ + + Object.defineProperty(ShareDBManager.prototype, "updateShareDBGlobalOptions", { + enumerable: false, + configurable: true, + writable: true, + value: function (object) { + this.doc.submitOp([{ + p: [this.GLOBAL_OPTS_NAME, 0], + ld: this.doc.data[this.GLOBAL_OPTS_NAME][0], + li: object + }], this.shareDBError); + } + }); + ; //Increments shared data group count + //Use this function to increment and keep the group count synchronized + + Object.defineProperty(ShareDBManager.prototype, "incrementShareDBGroupCount", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + this.doc.submitOp([{ + p: [this.GENOMIC_DATA_GROUP_COUNT], + na: 1 + }], this.shareDBError); + } + }); + ; //Checks whether given operation is a replace or add/delete operation + + Object.defineProperty(ShareDBManager.prototype, "isShareDBReplaceEvent", { enumerable: false, configurable: true, writable: true, - value: function (isEnabled) { - this.gridOptionsManager.setSnapToGuidelines(isEnabled); - this.gridOptionsManager.setShowGrid(false); + value: function (op) { + return op.hasOwnProperty("oi") && op.hasOwnProperty("od") || op.hasOwnProperty("li") && op.hasOwnProperty("ld"); } }); - Object.defineProperty(PathwayActions.prototype, "adjustGridSettings", { + ; + /* + * Gets the initial value of the shared document + * without this function shared document values cannot be reached + */ + + Object.defineProperty(ShareDBManager.prototype, "initializeSharedDBDoc", { enumerable: false, configurable: true, writable: true, - value: function (gridSize, color) { - this.gridOptionsManager.currentProperties.gridSpacing = gridSize; - this.gridOptionsManager.currentProperties.guidelinesStyle.strokeStyle = color; - this.gridOptionsManager.currentProperties.guidelinesStyle.horizontalDistColor = color; - this.gridOptionsManager.currentProperties.guidelinesStyle.verticalDistColor = color; + value: function () { + this.doc.subscribe(); } }); - Object.defineProperty(PathwayActions.prototype, "resizeToContent", { + ; + Object.defineProperty(ShareDBManager.prototype, "shareDBError", { enumerable: false, configurable: true, writable: true, - value: function () { - this.editor.resizeNodesToContent(this.editor.cy.nodes()); + value: function (err) { + if (err) { + console.error(err); + } } }); - Object.defineProperty(PathwayActions.prototype, "align", { + ; + Object.defineProperty(ShareDBManager.prototype, "initShareDB", { enumerable: false, configurable: true, writable: true, - value: function (param) { - this.viewOperationsManager.handleNodeAlignment(param); + value: function () { + var _this = this; + + sharedb = __webpack_require__(57); + socket = new WebSocket('ws://' + window.location.host); + connection = new sharedb.Connection(socket); + var self = this; + var id = this.getParam('id'); + + var loadFileCallback = function () { + self.onFileLoaded(); + }; //Creates new shared db document and initializes values + + + var createNewDocument = function () { + var new_id = self.getCustomObjId(); + var data = { + nodes: {}, + edges: {}, + layoutProperties: [_this.editor.layoutProperties], + globalOptions: [_this.editor.getGlobalOptions()], + genomicDataMap: {}, + visibleGenomicDataMapByType: {}, + genomicDataGroupList: {}, + genomicDataGroupCount: 0 + }; + window.history.pushState(null, null, '?id=' + new_id); + self.doc = connection.get('cy', new_id); + self.doc.create(data, loadFileCallback); + }; //Check if id exists in parameters + //If exists open the shared document + + + if (id) { + // Check any document exists with given id + this.doc = connection.get('cy', id); + this.doc.fetch(function (err) { + if (err) throw err; + + if (self.doc.type === null) { + createNewDocument(); + return; + } + + self.doc.subscribe(loadFileCallback); + }); + } else { + //Create new shared document + createNewDocument(); + } } }); - Object.defineProperty(PathwayActions.prototype, "onChangeFile", { + ; + /* + * After a file has been initialized and loaded, we can access the + * document. We will wire up the data in shared document to the UI. + * + */ + + Object.defineProperty(ShareDBManager.prototype, "onFileLoaded", { enumerable: false, configurable: true, writable: true, - value: function (e, isMerge) { - var file = e.target.files[0]; - console.log(file); - this.processFile(file, isMerge); + value: function () { + this.initializeSharedDBDoc(); + this.syncInitialSharedDocData(); + this.initSharedDocEventHandlers(); + this.postFileLoad(); } }); - Object.defineProperty(PathwayActions.prototype, "uploadOverlay", { + ; + /* + * Synchronizes initial data in the shared document to + * client's application. + */ + + Object.defineProperty(ShareDBManager.prototype, "syncInitialSharedDocData", { enumerable: false, configurable: true, writable: true, value: function () { - this.overlayUploader.click(); + var _this = this; + + var self = this; + var nodeMap = self.doc.data[this.NODEMAP_NAME]; + var edgeMap = self.doc.data[this.EDGEMAP_NAME]; + var shareDBLayoutProperties = self.doc.data[this.LAYOUT_PROPS_NAME][0]; + var globalOptions = self.doc.data[this.GLOBAL_OPTS_NAME][0]; + var genomicDataMap = self.doc.data[this.GENOMIC_DATA_MAP_NAME]; + var visDataMap = self.doc.data[this.VISIBLE_GENOMIC_DATA_MAP_NAME]; + var groupedGenomicDataMap = self.doc.data[this.GENOMIC_DATA_GROUP_NAME]; + var groupedGenomicDataCount = self.doc.data[this.GENOMIC_DATA_GROUP_COUNT]; + var invalidGenes = []; + var highlightedGenes = []; + var invalidHighlightedGenes = []; + var hiddenGenes = []; + + for (var _i = 0, _a = Object.keys(nodeMap); _i < _a.length; _i++) { + var key = _a[_i]; + var tmpNode = nodeMap[key]; + var tmpNodeId = tmpNode.id; + + if (tmpNode.isInvalidGene && tmpNode.isHighlighted) { + invalidHighlightedGenes.push(tmpNodeId); + } else if (tmpNode.isInvalidGene) { + invalidGenes.push(tmpNodeId); + } else if (tmpNode.isHighlighted) { + highlightedGenes.push(tmpNodeId); + } + + if (tmpNode.isHidden) { + hiddenGenes.push(tmpNodeId); + } + } + + var highlightedEdges = []; + + for (var _b = 0, _c = Object.keys(edgeMap); _b < _c.length; _b++) { + var key = _c[_b]; + var tmpEdge = edgeMap[key]; + var tmpEdgeId = tmpEdge.id; + + if (tmpEdge.isHighlighted) { + highlightedEdges.push(tmpEdgeId); + } + } //TODO Workaround for legacy pathways + // Workaround for backward compatibility of legacy pathways + // Addition of pubmed id field on server if legacy collaborative + // pathways does not have ! + + + for (var _d = 0, _e = Object.keys(edgeMap); _d < _e.length; _d++) { + var key = _e[_d]; + var tmpEdge = edgeMap[key]; + + if (tmpEdge.pubmedIDs == undefined || tmpEdge.name == undefined || tmpEdge.bendPoint == undefined) { + var pubmedIDs = tmpEdge.pubmedIDs == undefined ? [] : tmpEdge.pubmedID; + var edgeLabel = tmpEdge.name == undefined ? "" : tmpEdge.name; + var bendPoint = tmpEdge.bendPoint == undefined ? [] : tmpEdge.bendPoint; + var param = { + type: tmpEdge.type, + source: tmpEdge.source, + id: self.getCustomObjId(), + target: tmpEdge.target, + pubmedID: pubmedIDs, + name: edgeLabel, + bendPoint: bendPoint + }; + var newEdge = self.edgeInitializer(param); + var tmpEdgeID = tmpEdge.id; + var newEdgeID = newEdge.id; + var ops = [{ + p: [self.EDGEMAP_NAME, tmpEdgeID], + od: tmpEdge + }, { + p: [self.EDGEMAP_NAME, newEdgeID], + oi: newEdge + }]; + self.applyShareDBOperation(ops); + } + } //Add real time nodes to local graph + + + this.editor.addNewElementsLocally(nodeMap, edgeMap); //Adds different type of highlight to nodes and hides if their property is hidden + + this.editor.highlightElementsInitially(invalidHighlightedGenes, invalidGenes, highlightedGenes, highlightedEdges, hiddenGenes); //Update layout properties & global options!! + + this.editor.updateLayoutPropertiesCallback({ + li: shareDBLayoutProperties + }); + this.editor.changeGlobalOptions({ + li: globalOptions + }); //Sync already available genomic data ! + + if (!groupedGenomicDataMap) { + self.insertShareDBObject(self.GENOMIC_DATA_MAP_NAME, '0', []); + + for (var _f = 0, _g = Object.keys(visDataMap); _f < _g.length; _f++) { + var key = _g[_f]; + + var currentMap = external_lodash_default.a.clone(groupedGenomicDataMap['0']); // currentMap.push(visibilityMapKeys[key]); + + + self.updateShareDBObject(self.GENOMIC_DATA_MAP_NAME, '0', currentMap); + } + } + + if (!groupedGenomicDataCount) { + var count = self.doc.data[self.GENOMIC_DATA_GROUP_COUNT]; + var op = [{ + p: [self.GENOMIC_DATA_GROUP_COUNT], + na: -count + }]; + self.applyShareDBOperation(op); + groupedGenomicDataCount = self.doc.data[self.GENOMIC_DATA_GROUP_COUNT]; + } + + for (var _h = 0, _j = Object.keys(genomicDataMap); _h < _j.length; _h++) { + var key_g = _j[_h]; + this.editor.genomicDataOverlayManager.genomicDataMap[key_g] = genomicDataMap[key_g]; + } + + for (var _k = 0, _l = Object.keys(groupedGenomicDataMap); _k < _l.length; _k++) { + var key_g = _l[_k]; + this.editor.genomicDataOverlayManager.groupedGenomicDataMap[key_g] = groupedGenomicDataMap[key_g]; + var data = groupedGenomicDataMap[key_g]; + + if (data.length !== 1) { + console.log("Grouped genomic data expected to be of length 1 (from sync)"); + } + + data.forEach(function (profileId) { + _this.editor.addToProfiles(profileId); + }); + } + + for (var _m = 0, _o = Object.keys(visDataMap); _m < _o.length; _m++) { + var key_g = _o[_m]; + this.editor.genomicDataOverlayManager.visibleGenomicDataMapByType[key_g] = visDataMap[key_g]; + this.editor.adjustVisibilityShareDB(key_g, visDataMap[key_g]); + } //Does not seem necessary for not but just for sake of completeness + + + this.editor.genomicDataOverlayManager.groupedGenomicDataCount = groupedGenomicDataCount; + this.editor.genomicDataOverlayManager.showGenomicData(); + this.editor.genomicDataOverlayManager.notifyObservers(); + this.editor.cy.fit(50); } }); - Object.defineProperty(PathwayActions.prototype, "overlayFromText", { + ; + /* + * Initialize event listeners for any operation coming from shareDB + * + */ + + Object.defineProperty(ShareDBManager.prototype, "initSharedDocEventHandlers", { enumerable: false, configurable: true, writable: true, - value: function (file) { - var _this = this; // Create a new FormData object. + value: function () { + var self = this; //Setup event handlers for maps + var nodeAddRemoveHandler = function (op) { + self.editor.shareDBNodeAddRemoveEventCallBack(op); + }; - var formData = new FormData(); - formData.append('graphFile', file); - var request = new XMLHttpRequest(); + var edgeAddRemoveHandler = function (op) { + self.editor.shareDBEdgeAddRemoveEventCallBack(op); + }; - request.onreadystatechange = function () { - var _a; + var genomicDataAddRemoveHandler = function (op) { + self.editor.shareDBGenomicDataHandler(op); + }; - if (request.readyState === XMLHttpRequest.DONE && request.status === 200) { - console.log('request.responseText'); - console.log(request.responseText); - var linesOfData = request.responseText.split('\n'); + var genomicDataVisibilityChangeHandler = function (op) { + self.editor.shareDBGenomicDataVisibilityHandler(op); + self.checkShareDBGenomicData(); + }; - if (linesOfData.length > 0) { - var profileIdsFromFile = linesOfData[0].split('\t').slice(1); - console.log(profileIdsFromFile); + var genomicDataGroupChangeHandler = function (op) { + self.editor.shareDBGenomicDataGroupChangeHandler(op); + }; - (_a = _this.profiles).push.apply(_a, profileIdsFromFile.map(function (id) { - return { - profileId: id, - enabled: true - }; - })); - } else { - console.log('No valid data'); - } + var updateElementHandler = function (op) { + self.editor.updateElementCallback(op); + }; - _this.editor.addGenomicData(request.responseText); - } + var updateLayoutPropsHandler = function (op) { + self.editor.updateLayoutPropertiesCallback(op); }; - request.open('POST', '/loadGraph'); - request.send(formData); + var updateGlobalOptionsHandler = function (op) { + self.editor.changeGlobalOptions(op); + }; //Event listeners for maps + + + this.doc.on('op', function (op, source) { + for (var i = 0; i < op.length; i++) { + var handleOp = op[i]; + var path = handleOp.p[0]; + var isReplaceEvent = self.isShareDBReplaceEvent(handleOp); + + if (!isReplaceEvent) { + if (path === self.NODEMAP_NAME) { + nodeAddRemoveHandler(handleOp); + } else if (path === self.EDGEMAP_NAME) { + edgeAddRemoveHandler(handleOp); + } else if (path === self.GENOMIC_DATA_MAP_NAME) { + genomicDataAddRemoveHandler(handleOp); + } else if (path === self.VISIBLE_GENOMIC_DATA_MAP_NAME) { + genomicDataVisibilityChangeHandler(handleOp); + } else if (path === self.GENOMIC_DATA_GROUP_NAME) { + genomicDataGroupChangeHandler(handleOp); + } + } else { + //Then it is update event + if (path === self.NODEMAP_NAME) { + updateElementHandler(handleOp); + } else if (path === self.EDGEMAP_NAME) { + updateElementHandler(handleOp); + } else if (path === self.LAYOUT_PROPS_NAME) { + updateLayoutPropsHandler(handleOp); + } else if (path === self.GLOBAL_OPTS_NAME) { + updateGlobalOptionsHandler(handleOp); + } + } + } + }); } }); - Object.defineProperty(PathwayActions.prototype, "upload", { + ; + /* + * Make sure that genomic cloud data is syncronized + */ + + Object.defineProperty(ShareDBManager.prototype, "checkShareDBGenomicData", { enumerable: false, configurable: true, writable: true, value: function () { - var _this = this; + var self = this; + var genomicDataMap = self.doc.data[this.GENOMIC_DATA_MAP_NAME]; + var visDataMap = self.doc.data[this.VISIBLE_GENOMIC_DATA_MAP_NAME]; + var groupedGenomicDataMap = self.doc.data[this.GENOMIC_DATA_GROUP_NAME]; + var groupedGenomicDataCount = self.doc.data[this.GENOMIC_DATA_GROUP_COUNT]; - if (this.editor.cy.elements().length > 0) { - this.handleOpen(EModalType.CONFIRMATION); + for (var key in genomicDataMap) { + this.editor.genomicDataOverlayManager.genomicDataMap[key] = genomicDataMap[key]; + } - modals_ConfirmationModal.pendingFunction = function () { - _this.uploader.click(); - }; - } else { - this.uploader.click(); + for (var key in visDataMap) { + this.editor.genomicDataOverlayManager.visibleGenomicDataMapByType[key] = visDataMap[key]; } + + for (var key in groupedGenomicDataMap) { + this.editor.genomicDataOverlayManager.groupedGenomicDataMap[key] = groupedGenomicDataMap[key]; + } + + this.editor.genomicDataOverlayManager.groupedGenomicDataCount = groupedGenomicDataCount; + this.editor.genomicDataOverlayManager.showGenomicData(); + this.editor.genomicDataOverlayManager.notifyObservers(); } }); - Object.defineProperty(PathwayActions.prototype, "merge", { - enumerable: false, - configurable: true, - writable: true, - value: function () { - this.merger.click(); - } - }); - Object.defineProperty(PathwayActions.prototype, "setOverlayUploader", { - enumerable: false, - configurable: true, - writable: true, - value: function (inputRef) { - this.overlayUploader = inputRef; - } - }); - Object.defineProperty(PathwayActions.prototype, "setUploaders", { - enumerable: false, - configurable: true, - writable: true, - value: function (inputRef, isMerge) { - if (isMerge) this.merger = inputRef;else this.uploader = inputRef; - } - }); - Object.defineProperty(PathwayActions.prototype, "getPathwayInfo", { - get: function () { - return this.fileManager.getPathwayInfo; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(PathwayActions.prototype, "setPathwayInfo", { - enumerable: false, - configurable: true, - writable: true, - value: function (other) { - this.fileManager.setPathwayInfo(other); - } - }); - Object.defineProperty(PathwayActions.prototype, "undo", { - enumerable: false, - configurable: true, - writable: true, - value: function () { - this.undoRedoManager.undo(); - } - }); - Object.defineProperty(PathwayActions.prototype, "redo", { + ; + /* + * Gets the first empty index from the shared document + * genomic data group count and increments counter by 1 + * + */ + + Object.defineProperty(ShareDBManager.prototype, "getEmptyGroupID", { enumerable: false, configurable: true, writable: true, value: function () { - this.undoRedoManager.redo(); + var returnCount = this.doc.data[this.GENOMIC_DATA_GROUP_COUNT]; + this.incrementShareDBGroupCount(); + return returnCount; } }); - Object.defineProperty(PathwayActions.prototype, "export", { + ; + /* + * Gets the first empty index from the shared document + * Initializes & inserts a new genomic data + * by group id or group name + * + */ + + Object.defineProperty(ShareDBManager.prototype, "groupGenomicData", { enumerable: false, configurable: true, writable: true, - value: function (isSIFNX) { - //this.editor.cy.remove('.eh-handle'); - this.eh.hide(); - this.fileManager.saveGraph(isSIFNX, this.editor); + value: function (cancerNames, inGroupId) { + var genomicGroupMap = this.doc.data[this.GENOMIC_DATA_GROUP_NAME]; + var genomicVisMap = this.doc.data[this.VISIBLE_GENOMIC_DATA_MAP_NAME]; + var groupID = "" + inGroupId; + var currentGroup = []; + if (genomicGroupMap.hasOwnProperty(groupID)) currentGroup = external_lodash_default.a.clone(genomicGroupMap[groupID]); + + for (var i in cancerNames) { + if (!genomicVisMap.hasOwnProperty(cancerNames[i])) currentGroup.push(cancerNames[i]); + } // If group id already exists change existing object + + + if (genomicGroupMap.hasOwnProperty(groupID)) { + this.updateShareDBObject(this.GENOMIC_DATA_GROUP_NAME, groupID, currentGroup); + } else { + //Insert new group + this.insertShareDBObject(this.GENOMIC_DATA_GROUP_NAME, groupID, currentGroup); + } } }); - Object.defineProperty(PathwayActions.prototype, "resetUndoStack", { + ; //Clears genomic data on shared document + + Object.defineProperty(ShareDBManager.prototype, "clearGenomicData", { enumerable: false, configurable: true, writable: true, value: function () { - this.undoRedoManager.reset(); + this.clearShareDBGenomicData(); } }); - Object.defineProperty(PathwayActions.prototype, "newPathway", { + ; + Object.defineProperty(ShareDBManager.prototype, "addGenomicData", { enumerable: false, configurable: true, writable: true, - value: function () { - var _this = this; + value: function (geneData) { + var genomicMap = this.doc.data[this.GENOMIC_DATA_MAP_NAME]; //Iterate over all genmoic data which is mapped by geneSymbol to list of alteration values + //that are also mapped by cancer name and associated value - var commitNewPathway = function () { - _this.editor.removeAllElements(); + var ops = []; - _this.fileManager.setPathwayInfo({ - pathwayTitle: 'New Pathway', - pathwayDetails: '', - fileName: 'pathway.txt' - }); //this.removeAllData() + for (var geneSymbol in geneData) { + var genomicMapEntry = {}; + if (genomicMap.hasOwnProperty(geneSymbol)) genomicMapEntry = external_lodash_default.a.clone(genomicMap[geneSymbol]); + for (var cancerType in geneData[geneSymbol]) { + if (!(cancerType in genomicMapEntry)) genomicMapEntry[cancerType] = parseInt(geneData[geneSymbol][cancerType]).toFixed(2); + } - _this.resetUndoStack(); + ops.push({ + p: [this.GENOMIC_DATA_MAP_NAME, geneSymbol], + oi: genomicMapEntry + }); + } - _this.pathwayHandler('Dummy'); - }; + this.applyShareDBOperation(ops); + } + }); + ; + Object.defineProperty(ShareDBManager.prototype, "addGenomicVisibilityData", { + enumerable: false, + configurable: true, + writable: true, + value: function (visMap) { + var ops = []; - if (this.editor.cy.elements().length > 0) { - this.handleOpen(EModalType.CONFIRMATION); - modals_ConfirmationModal.pendingFunction = commitNewPathway; - } else { - commitNewPathway(); + for (var cancerStudy in visMap) { + ops.push({ + p: [this.VISIBLE_GENOMIC_DATA_MAP_NAME, cancerStudy], + oi: visMap[cancerStudy] + }); } + + this.applyShareDBOperation(ops); } }); - Object.defineProperty(PathwayActions.prototype, "changePathway", { + ; + Object.defineProperty(ShareDBManager.prototype, "changeVisibility", { enumerable: false, configurable: true, writable: true, - value: function (pathwayName) { - this.pathwayHandler(pathwayName); - - if (!this.isCBioPortal) { - this.fileManager.setPathwayInfo({ - pathwayTitle: pathwayName, - pathwayDetails: '', - fileName: pathwayName + '.txt' - }); // At the beginning changePathway is called editor is not ready hence removeData shall not be called + value: function (nodesToHide, isHidden) { + var self = this; + var nodeMap = self.doc.data[this.NODEMAP_NAME]; + nodesToHide.forEach(function (ele) { + var nodeID = ele.id(); - if (this.editor) { - //this.removeAllData() - this.resetUndoStack(); + if (nodeMap.hasOwnProperty(nodeID)) { + var realTimeNode = nodeMap[nodeID]; + realTimeNode.isHidden = isHidden; + self.updateShareDBObject(self.NODEMAP_NAME, nodeID, realTimeNode); } - } + }); } }); - Object.defineProperty(PathwayActions.prototype, "highlightNeighbours", { + ; + Object.defineProperty(ShareDBManager.prototype, "changeHighlight", { enumerable: false, configurable: true, writable: true, - value: function () { - this.editor.highlightNeighbors(); + value: function (elementsToHighlight, isHighlighted) { + var self = this; + var nodeMap = self.doc.data[this.NODEMAP_NAME]; + var edgeMap = self.doc.data[this.EDGEMAP_NAME]; + elementsToHighlight.forEach(function (ele) { + var elementID = ele.id(); + + if (nodeMap.hasOwnProperty(elementID)) { + var realTimeNode = nodeMap[elementID]; + realTimeNode.isHighlighted = isHighlighted; + self.updateShareDBObject(self.NODEMAP_NAME, elementID, realTimeNode); + } + + if (edgeMap.hasOwnProperty(elementID)) { + var realTimeEdge = edgeMap[elementID]; + realTimeEdge.isHighlighted = isHighlighted; + self.updateShareDBObject(self.EDGEMAP_NAME, elementID, realTimeEdge); + } + }); } }); - Object.defineProperty(PathwayActions.prototype, "highlightSelected", { + ; + Object.defineProperty(ShareDBManager.prototype, "addNewNode", { enumerable: false, configurable: true, writable: true, - value: function () { - this.editor.highlightSelected(); + value: function (nodeData, posData) { + var realTimeGeneratedID = this.getCustomObjId(); + var params = { + name: nodeData.name, + type: nodeData.type, + id: realTimeGeneratedID, + parent: nodeData.parent, + w: nodeData.w, + h: nodeData.h, + minWidth: nodeData.minWidth, + minWidthBiasLeft: nodeData.minWidthBiasLeft, + minWidthBiasRight: nodeData.minWidthBiasRight, + minHeight: nodeData.minHeight, + minHeightBiasTop: nodeData.minHeightBiasTop, + minHeightBiasBottom: nodeData.minHeightBiasBottom + }; //Ensures new node is compatible with the other nodes + + var newNode = this.nodeInitializer(params); + + if (posData) { + newNode.x = posData.x; + newNode.y = posData.y; + } + + this.insertShareDBObject(this.NODEMAP_NAME, realTimeGeneratedID, newNode); } }); - Object.defineProperty(PathwayActions.prototype, "validateGenes", { + ; + Object.defineProperty(ShareDBManager.prototype, "addNewEdge", { enumerable: false, configurable: true, writable: true, - value: function () { - this.editor.validateGenes(); + value: function (edgeData) { + var realTimeGeneratedID = this.getCustomObjId(); + var params = { + type: edgeData.type, + id: realTimeGeneratedID, + source: edgeData.source, + target: edgeData.target, + pubmedIDs: edgeData.pubmedIDs, + name: edgeData.name, + bendPoint: edgeData.bendPoint + }; //Ensures new edge is compatible with the other edge + + var newEdge = this.edgeInitializer(params); + this.insertShareDBObject(this.EDGEMAP_NAME, realTimeGeneratedID, newEdge); } }); - Object.defineProperty(PathwayActions.prototype, "showAll", { + ; + Object.defineProperty(ShareDBManager.prototype, "removeElement", { enumerable: false, configurable: true, writable: true, - value: function () { - this.editor.showAllNodes(); + value: function (elementID) { + var edgeMap = this.doc.data[this.EDGEMAP_NAME]; + var nodeMap = this.doc.data[this.NODEMAP_NAME]; + + if (nodeMap.hasOwnProperty(elementID)) { + this.deleteShareDBObject(this.NODEMAP_NAME, elementID); + } else if (edgeMap.hasOwnProperty(elementID)) { + this.deleteShareDBObject(this.EDGEMAP_NAME, elementID); + } else { + throw new Error('Element does not exist in Real Time'); + } } }); - Object.defineProperty(PathwayActions.prototype, "hideSelected", { + ; + Object.defineProperty(ShareDBManager.prototype, "moveElement", { enumerable: false, configurable: true, writable: true, - value: function () { - this.editor.hideSelectedNodes(); + value: function (ele) { + var nodeMap = this.doc.data[this.NODEMAP_NAME]; + var elementID = ele.id(); + var newPos = ele.position(); + + if (nodeMap.hasOwnProperty(elementID)) { + var tmpNode = nodeMap[elementID]; + tmpNode.x = newPos.x; + tmpNode.y = newPos.y; + this.updateShareDBObject(this.NODEMAP_NAME, elementID, tmpNode); + } else { + throw new Error('Element does not exist in nodes !!! '); + } } }); - Object.defineProperty(PathwayActions.prototype, "deleteSelected", { + ; //This function is used for movements of all selected elements wrt alignment selected + + Object.defineProperty(ShareDBManager.prototype, "changeElementsPositionByAlignment", { enumerable: false, configurable: true, writable: true, - value: function () { - var selectedEles = this.editor.cy.elements(':selected'); - this.editor.removeElement(selectedEles); + value: function (coll) { + var self = this; + var nodeMap = self.doc.data[this.NODEMAP_NAME]; + coll.forEach(function (ele) { + var elementID = ele.node.id(); + + if (nodeMap.hasOwnProperty(elementID)) { + var tmpNode = nodeMap[elementID]; + tmpNode.x = ele.nextPosition.x; + tmpNode.y = ele.nextPosition.y; + self.updateShareDBObject(self.NODEMAP_NAME, elementID, tmpNode); + } else { + throw new Error('Element does not exist in nodes !!! '); + } + }); } }); - Object.defineProperty(PathwayActions.prototype, "addEdge", { + ; + Object.defineProperty(ShareDBManager.prototype, "resizeElement", { enumerable: false, configurable: true, writable: true, - value: function (edgeTypeIndex) { - // @ts-ignore - window.edgeAddingMode = edgeTypeIndex + 1; - console.log('edgeTypeIndex'); - console.log(edgeTypeIndex); + value: function (ele, previousWidth, previousHeight) { + var nodeMap = this.doc.data[this.NODEMAP_NAME]; + var elementID = ele.id(); + var newWidth = ele.width(); + var newHeight = ele.height(); + var currentX = ele.position('x'); + var currentY = ele.position('y'); - if (edgeTypeIndex === -1) { - this.eh.disable(); - this.eh.hide(); - return; + if (nodeMap.hasOwnProperty(elementID)) { + var tmpNode = nodeMap[elementID]; + tmpNode.x = currentX + newWidth - previousWidth; + tmpNode.y = currentY + newHeight - previousHeight; + tmpNode.w = newWidth; + tmpNode.h = newHeight; + this.updateShareDBObject(this.NODEMAP_NAME, elementID, tmpNode); } else { - // @ts-ignore - this.eh.enable(); + throw new Error('Element does not exist in nodes !!! '); } } }); - Object.defineProperty(PathwayActions.prototype, "changeNodeName", { + ; + Object.defineProperty(ShareDBManager.prototype, "setSizeOfElement", { enumerable: false, configurable: true, writable: true, - value: function (oldName, newName) { - var cyNode = this.editor.cy.$('[name="' + oldName + '"]')[0]; - console.log(this.editor.cy.$('[name="' + oldName + '"]')); - this.editor.changeName(cyNode, newName); + value: function (ele, newWidth, newHeight) { + var nodeMap = this.doc.data[this.NODEMAP_NAME]; + var elementID = ele.id(); + + if (nodeMap.hasOwnProperty(elementID)) { + var tmpNode = nodeMap[elementID]; + tmpNode.w = newWidth; + tmpNode.h = newHeight; + this.updateShareDBObject(this.NODEMAP_NAME, elementID, tmpNode); + } else { + throw new Error('Element does not exist in nodes !!! '); + } } }); - Object.defineProperty(PathwayActions.prototype, "addNode", { + ; + Object.defineProperty(ShareDBManager.prototype, "resizeCompound", { enumerable: false, configurable: true, writable: true, - value: function (nodeType) { - var nodeData = { - type: nodeType.toUpperCase(), - name: 'New ' + nodeType, - w: '150', - h: '52' - }; - var extent = this.editor.cy.extent(); - var posData = { - x: (extent.x1 + extent.x2) / 2, - y: (extent.y1 + extent.y2) / 2 - }; - this.editor.addNode(nodeData, posData); - this.pathwayHandler('Additional Pathway'); + value: function (ele, minWidth, minWidthBiasLeft, minWidthBiasRight, minHeight, minHeightBiasTop, minHeightBiasBottom) { + var nodeMap = this.doc.data[this.NODEMAP_NAME]; + var elementID = ele.id(); + var currentX = ele.position('x'); + var currentY = ele.position('y'); + + if (nodeMap.hasOwnProperty(elementID)) { + var tmpNode = nodeMap[elementID]; + tmpNode.x = currentX; + tmpNode.y = currentY; + tmpNode.minWidth = minWidth; + tmpNode.minWidthBiasLeft = minWidthBiasLeft; + tmpNode.minWidthBiasRight = minWidthBiasRight; + tmpNode.minHeight = minHeight; + tmpNode.minHeightBiasTop = minHeightBiasTop; + tmpNode.minHeightBiasBottom = minHeightBiasBottom; + this.updateShareDBObject(this.NODEMAP_NAME, elementID, tmpNode); + } else { + throw new Error('Element does not exist in nodes !!! '); + } } }); - Object.defineProperty(PathwayActions.prototype, "searchGene", { + ; + Object.defineProperty(ShareDBManager.prototype, "changeNodePositionsShareDB", { enumerable: false, configurable: true, writable: true, - value: function (geneName) { - var selector = "node[name @*= '" + geneName + "']"; - var nodesContainingSearchedGene = this.editor.cy.filter(selector); - var nodesToSelect = this.editor.cy.collection(); - nodesContainingSearchedGene.forEach(function (ele, index) { - if (!ele.hasClass('highlightedNode') && !ele.hasClass('invalidGeneHighlight')) nodesToSelect = nodesToSelect.union(ele); + value: function (nodes) { + var self = this; + var nodeMap = self.doc.data[self.NODEMAP_NAME]; + nodes.forEach(function (ele) { + var nodeID = ele.id(); + + if (nodeMap.hasOwnProperty(nodeID)) { + var realTimeNode = nodeMap[nodeID]; + realTimeNode.x = ele.position('x'); + realTimeNode.y = ele.position('y'); + self.updateShareDBObject(self.NODEMAP_NAME, nodeID, realTimeNode); + } else { + throw new Error('Element does not exist in nodes !!! '); + } }); - this.editor.highlightBySearch(nodesToSelect); } }); - Object.defineProperty(PathwayActions.prototype, "removeAllData", { + ; + Object.defineProperty(ShareDBManager.prototype, "changeHighlightInvalidGenes", { enumerable: false, configurable: true, writable: true, - value: function () { - this.editor.removeGenomicData(); - this.profiles.length = 0; + value: function (nodeIDs, isInvalid) { + var nodeMap = this.doc.data[this.NODEMAP_NAME]; //TODO check compound operation inside or outside of for ? + + for (var i in nodeIDs) { + var nodeID = nodeIDs[i]; + + if (nodeMap.hasOwnProperty(nodeID)) { + var collaborativeNode = nodeMap[nodeID]; + collaborativeNode.isInvalidGene = isInvalid; + this.updateShareDBObject(this.NODEMAP_NAME, nodeID, collaborativeNode); + } + } } }); - Object.defineProperty(PathwayActions.prototype, "removeAllHighlight", { + ; + Object.defineProperty(ShareDBManager.prototype, "addPubmedIDs", { enumerable: false, configurable: true, writable: true, - value: function () { - this.editor.removeAllHighlight(); + value: function (edgeID, pubmedIDs) { + var edgeMap = this.doc.data[this.EDGEMAP_NAME]; + + if (edgeMap.hasOwnProperty(edgeID)) { + var tmpEdge = edgeMap[edgeID]; + var nonDuplicateArray = []; + + for (var i = 0; i < pubmedIDs.length; i++) { + if (tmpEdge.pubmedIDs.indexOf(pubmedIDs[i]) < 0) { + nonDuplicateArray.push(pubmedIDs[i]); + } + } + + tmpEdge.pubmedIDs = tmpEdge.pubmedIDs.concat(nonDuplicateArray); + this.updateShareDBObject(this.EDGEMAP_NAME, edgeID, tmpEdge); + } else { + throw new Error('Edge does not exist in real time !!! '); + } } }); - Object.defineProperty(PathwayActions.prototype, "processFile", { + ; + Object.defineProperty(ShareDBManager.prototype, "removePubmedID", { enumerable: false, configurable: true, writable: true, - value: function (file, isMerge) { - var _this = this; // Create a new FormData object. - - - var formData = new FormData(); - formData.append('graphFile', file); - var request = new XMLHttpRequest(); - - request.onreadystatechange = function () { - if (request.readyState === XMLHttpRequest.DONE && request.status === 200) { - var pathwayData = utils_SaveLoadUtility.parseGraph(request.responseText, false); - console.log('Process File'); - - if (isMerge) { - console.log('It is a merge'); - - _this.editor.mergeGraph(pathwayData.nodes, pathwayData.edges); - - var graphJSON = _this.editor.cy.json(); //TODO change file name maybe, probabyly not necessary ? - // Pathway nodes and edges are now combination of both previous and new pathway. - - - pathwayData.nodes = graphJSON.elements.nodes; //this.editor.cy.nodes().map((node) => ({data: node.data()})); + value: function (edgeID, pubmedIDs) { + var edgeMap = this.doc.data[this.EDGEMAP_NAME]; - pathwayData.edges = graphJSON.elements.edges; //this.editor.cy.edges().map((edge) => ({data: edge.data()})); + if (edgeMap.hasOwnProperty(edgeID)) { + var tmpEdge = edgeMap[edgeID]; + var removedIndices = []; - pathwayData.title = 'Additional Pathway'; - } else { - _this.editor.loadFile(pathwayData.nodes, pathwayData.edges); + for (var i = 0; i < pubmedIDs.length; i++) { + var tmpID = pubmedIDs[i]; + var index = tmpEdge.pubmedIDs.indexOf(tmpID); - _this.fileManager.setPathwayInfo({ - pathwayTitle: pathwayData.title, - pathwayDetails: pathwayData.description, - fileName: pathwayData.title + '.txt' - }); + if (index >= 0) { + removedIndices.push(index); } + } - _this.pathwayHandler(pathwayData.title + '_imported'); - - _this.resetUndoStack(); - } else { - console.error('Process File error: ' + request.status + ', ' + request.responseText); + for (var i = 0; i < removedIndices.length; i++) { + tmpEdge.pubmedIDs.remove(removedIndices[i]); } - }; - request.open('POST', '/loadGraph'); - request.send(formData); - } - }); - Object.defineProperty(PathwayActions.prototype, "saveAs", { - enumerable: false, - configurable: true, - writable: true, - value: function (type) { - if (type === 'SVG') { - this.fileManager.saveAsSVG(this.editor); - } else if (type === 'PNG') { - this.fileManager.saveAsPNG(this.editor.cy); - } else if (type === 'JPEG') { - this.fileManager.saveAsJPEG(this.editor.cy); + this.updateShareDBObject(this.EDGEMAP_NAME, edgeID, tmpEdge); + } else { + throw new Error('Edge does not exist in real time !!! '); } } }); - Object.defineProperty(PathwayActions.prototype, "editorHandler", { + ; + Object.defineProperty(ShareDBManager.prototype, "updateEdgeBendPoints", { enumerable: false, configurable: true, writable: true, - value: function (editor, eh, undoRedoManager, viewOperationsManager, gridOptionsManager) { - this.editor = editor; - this.eh = eh; - this.undoRedoManager = undoRedoManager; - this.viewOperationsManager = viewOperationsManager; - this.gridOptionsManager = gridOptionsManager; + value: function (edgeID, bendPointsArray) { + var edgeMap = this.doc.data[this.EDGEMAP_NAME]; + + if (edgeMap.hasOwnProperty(edgeID)) { + var tmpEdge = edgeMap[edgeID]; + tmpEdge.bendPoint = bendPointsArray; + this.updateShareDBObject(this.EDGEMAP_NAME, edgeID, tmpEdge); + } else { + throw new Error('Edge does not exist in real time !!! '); + } } }); - Object.defineProperty(PathwayActions.prototype, "loadSampleData", { + ; + Object.defineProperty(ShareDBManager.prototype, "changeName", { enumerable: false, configurable: true, writable: true, - value: function () { - var data = 'gene\tlung\tovarian\tbreast\ty\n' + 'PTEN\t-7\t-20\t10\t20\n' + 'NF1\t-12\t-4\t30\t20\n' + 'PIK3CA\t18\t40\t-50\t20\n' + 'KRAS\t11\t-5\t0\t20\n' + 'ZIYA\t0\t-2\t0\t20\n' + 'AKT1\t3\t30\t-10\t20\n' + 'AKT2\t6\t-3\t20\t20\n' + 'AKT3\t6\t-3\t20\t20\n' + '\n'; - this.editor.addGenomicData(data); - this.profiles.push({ - profileId: 'lung', - enabled: true - }, { - profileId: 'ovarian', - enabled: true - }, { - profileId: 'breast', - enabled: true - }); + value: function (ele, newName) { + var nodeMap = this.doc.data[this.NODEMAP_NAME]; + var edgeMap = this.doc.data[this.EDGEMAP_NAME]; + var elementID = ele.id(); + + if (ele.isNode()) { + if (nodeMap.hasOwnProperty(elementID)) { + var tmpNode = nodeMap[elementID]; + tmpNode.name = newName; + this.updateShareDBObject(this.NODEMAP_NAME, elementID, tmpNode); + } else { + throw new Error('Element does not exist in nodes !!! '); + } + } else { + if (edgeMap.hasOwnProperty(elementID)) { + var tmpEdge = edgeMap[elementID]; + tmpEdge.name = newName; + this.updateShareDBObject(this.EDGEMAP_NAME, elementID, tmpEdge); + } else { + throw new Error('Element does not exist in edges !!! '); + } + } } }); - Object.defineProperty(PathwayActions.prototype, "performLayout", { + ; + Object.defineProperty(ShareDBManager.prototype, "changeParent", { enumerable: false, configurable: true, writable: true, - value: function () { - this.editor.performLayout(); - } - }); - - PathwayActions_decorate([external_mobx_["observable"]], PathwayActions.prototype, "selectedPathway", void 0); - - PathwayActions_decorate([external_mobx_["observable"]], PathwayActions.prototype, "enabledType", void 0); - - PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "toggleGrid", null); - - PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "toggleGuide", null); - - PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "resizeToContent", null); - - PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "align", null); - - PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "onChangeFile", null); - - PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "upload", null); - - PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "merge", null); - - PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "setUploaders", null); - - PathwayActions_decorate([external_mobx_["computed"]], PathwayActions.prototype, "getPathwayInfo", null); - - PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "setPathwayInfo", null); - - PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "undo", null); - - PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "redo", null); - - PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "export", null); - - PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "resetUndoStack", null); - - PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "newPathway", null); - - PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "changePathway", null); - - PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "highlightNeighbours", null); + value: function (rootNode, newParentId, connectedEdges) { + var self = this; + var nodeLookupTable = {}; - PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "highlightSelected", null); + function traverseFromRoot(rootNode, parId) { + /* + remove outermost node, + create new real time node with given parentId, + pass id of this real time node to children, + repeat in a recursive manner + after that restore the edges that dissapear by removed nodes + during change parent + */ + var refNode = rootNode.nodeRef; + var children = rootNode.children; + var newParentId = parId; - PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "validateGenes", null); + if (refNode) { + var refNodeId = refNode.id(); + var nodeData = refNode.data(); + var posData = refNode.position(); + var currentWidth = refNode.data('w'); + var currentHeight = refNode.data('h'); + var newNodeData = { + name: nodeData.name, + type: nodeData.type, + x: posData.x, + y: posData.y, + w: currentWidth, + h: currentHeight, + parent: -1 + }; - PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "showAll", null); + if (parId) { + newNodeData.parent = parId; + } - PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "hideSelected", null); + self.removeElement(refNodeId); + var newNode = self.nodeInitializer(newNodeData); + var newNodeId = newNode.id; + self.insertShareDBObject(self.NODEMAP_NAME, newNodeId, newNode); + newParentId = newNodeId; + nodeLookupTable[refNodeId] = newNodeId; + } - PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "deleteSelected", null); + for (var _i = 0, children_1 = children; _i < children_1.length; _i++) { + var childNode = children_1[_i]; + traverseFromRoot(childNode, newParentId); + } + } //Begin traversing from given root node - PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "addEdge", null); - PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "changeNodeName", null); + traverseFromRoot(rootNode, newParentId); //Restore edges that dissapear by the change parent operation + //TODO compound operations ? - PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "addNode", null); + connectedEdges.forEach(function (edge, index) { + var edgeData = edge.data(); + self.removeElement(edge.id()); + var newSource = nodeLookupTable[edgeData.source]; + var newTarget = nodeLookupTable[edgeData.target]; - PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "searchGene", null); + if (newSource) { + edgeData.source = newSource; + } - PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "removeAllData", null); + if (newTarget) { + edgeData.target = newTarget; + } - PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "removeAllHighlight", null); + self.addNewEdge(edgeData); + }); + } + }); + ; + Object.defineProperty(ShareDBManager.prototype, "removeAllElements", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + var nodeMap = this.doc.data[this.NODEMAP_NAME]; + var edgeMap = this.doc.data[this.EDGEMAP_NAME]; + var ops = []; //Remove all real time nodes - PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "processFile", null); + for (var _i = 0, _a = Object.keys(nodeMap); _i < _a.length; _i++) { + var key = _a[_i]; + ops.push({ + p: [this.NODEMAP_NAME, key], + od: nodeMap[key] + }); + } //Remove all real time edges - PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "saveAs", null); - PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "editorHandler", null); + for (var _b = 0, _c = Object.keys(edgeMap); _b < _c.length; _b++) { + var key = _c[_b]; + ops.push({ + p: [this.EDGEMAP_NAME, key], + od: edgeMap[key] + }); + } - PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "loadSampleData", null); + this.applyShareDBOperation(ops); + } + }); + ; + Object.defineProperty(ShareDBManager.prototype, "loadGraph", { + enumerable: false, + configurable: true, + writable: true, + value: function (nodes, edges) { + var self = this; + this.removeAllElements(); //Function that traverses graph tree recursively. - PathwayActions_decorate([external_autobind_decorator_default.a], PathwayActions.prototype, "performLayout", null); + var oldIdNewIdMap = {}; - return PathwayActions; -}(); + function traverseTree(node, newParentId) { + node.data.x = node.position.x; + node.data.y = node.position.y; //Update parent ! -/* harmony default export */ var utils_PathwayActions = (PathwayActions_PathwayActions); -// EXTERNAL MODULE: ./src/images/edges/activates.svg -var activates = __webpack_require__(27); -var activates_default = /*#__PURE__*/__webpack_require__.n(activates); + if (newParentId) { + var parent = node.data.parent; -// EXTERNAL MODULE: ./src/images/edges/inhibits.svg -var inhibits = __webpack_require__(28); -var inhibits_default = /*#__PURE__*/__webpack_require__.n(inhibits); + if (parent) { + node.data.parent = newParentId; + } + } //Create new real time node -// EXTERNAL MODULE: ./src/images/edges/induces.svg -var induces = __webpack_require__(29); -var induces_default = /*#__PURE__*/__webpack_require__.n(induces); -// EXTERNAL MODULE: ./src/images/edges/represses.svg -var represses = __webpack_require__(30); -var represses_default = /*#__PURE__*/__webpack_require__.n(represses); + var newNodeId = self.getCustomObjId(); + var params = node.data; + oldIdNewIdMap[params.id] = newNodeId; + var newNode = self.nodeInitializer(params); + newNode.id = newNodeId; + self.insertShareDBObject(self.NODEMAP_NAME, newNodeId, newNode); //If node has children recursively traverse sub graphs and update parent field of child nodes -// EXTERNAL MODULE: ./src/images/edges/binds.svg -var binds = __webpack_require__(31); -var binds_default = /*#__PURE__*/__webpack_require__.n(binds); + if (node.children.length > 0) { + for (var _i = 0, _a = node.children; _i < _a.length; _i++) { + var tmpNode = _a[_i]; + traverseTree(tmpNode, newNodeId); + } + } + } //Create graph hierarchy from given list of flat nodes -// EXTERNAL MODULE: ./src/css/supp.css -var supp = __webpack_require__(75); -// CONCATENATED MODULE: ./src/ui/Sidebar.tsx -var Sidebar_extends = undefined && undefined.__extends || function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || { - __proto__: [] - } instanceof Array && function (d, b) { - d.__proto__ = b; - } || function (d, b) { - for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; - }; + var tree = this.graphUtilities.createGraphHierarchyRealTime(nodes); //Traverse from root nodes of tree - return extendStatics(d, b); - }; + for (var _i = 0, tree_1 = tree; _i < tree_1.length; _i++) { + var rootLevelNode = tree_1[_i]; + traverseTree(rootLevelNode, undefined); + } + /* + Create real time edges, update the source and target fields, since new ids will be generated for the nodes in + real time + */ - return function (d, b) { - extendStatics(d, b); - function __() { - this.constructor = d; + for (var _a = 0, edges_1 = edges; _a < edges_1.length; _a++) { + var edge = edges_1[_a]; + edge.data.source = oldIdNewIdMap[edge.data.source]; + edge.data.target = oldIdNewIdMap[edge.data.target]; + var params = edge.data; + var newEdgeID = self.getCustomObjId(); + params.id = newEdgeID; + var newEdge = self.edgeInitializer(params); + self.insertShareDBObject(self.EDGEMAP_NAME, newEdgeID, newEdge); + } } + }); + ; + Object.defineProperty(ShareDBManager.prototype, "mergeGraph", { + enumerable: false, + configurable: true, + writable: true, + value: function (nodes, edges) { + var self = this; + var nodeMap = self.doc.data[this.NODEMAP_NAME]; + var realTimeNodeMap = nodeMap; + var realTimeNodeLookupTable = {}; + var realTimeNodeNameLookupTable = {}; + var oldIdNewIdMap = {}; //Create lookup table for real time nodes + //items are stored in an array in the resulting array of nodeMap.items() + // [0] - id, [1] - object - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -}(); + for (var i in realTimeNodeMap) { + var nodeMapItem = realTimeNodeMap[i]; + realTimeNodeLookupTable[nodeMapItem.id] = nodeMapItem; + realTimeNodeNameLookupTable[nodeMapItem.name] = nodeMapItem; + } //Recursive traverse definition -var Sidebar_decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; + function traverseTree(node, newParentId) { + //Search by name ! + //We have not found a node that exist in the graph, add normally + if (!(node.data.name in realTimeNodeNameLookupTable)) { + node.data.x = node.position.x; + node.data.y = node.position.y; //Update parent ! - // @ts-ignore + if (newParentId) { + var parent = node.data.parent; - // @ts-ignore + if (parent) { + node.data.parent = newParentId; + } + } //Create new real time node - // @ts-ignore - // @ts-ignore + var newNodeId = self.getCustomObjId(); + oldIdNewIdMap[node.data.id] = newNodeId; + var newNode = self.nodeInitializer(node.data); + newNode.id = newNodeId; + self.insertShareDBObject(self.NODEMAP_NAME, newNodeId, newNode); //If node has children recursively traverse sub graphs and update parent field of child nodes - // @ts-ignore + if (node.children.length > 0) { + for (var _i = 0, _a = node.children; _i < _a.length; _i++) { + var tmpNode = _a[_i]; + traverseTree(tmpNode, newNodeId); + } + } + } // At this point there exists another node in the graph with the same name as 'node' + // we need to update parent field of children of this node if any + else { + var sameNameNode = realTimeNodeNameLookupTable[node.data.name]; + var sameNodeId = sameNameNode.id; + oldIdNewIdMap[node.data.id] = sameNodeId; //If node has children recursively traverse sub graphs and update parent field of child nodes - // @ts-ignore + if (node.children.length > 0) { + for (var _b = 0, _c = node.children; _b < _c.length; _b++) { + var tmpNode = _c[_b]; + traverseTree(tmpNode, sameNodeId); + } + } + } + } //Traverse from root nodes of tree - // @ts-ignore - // @ts-ignore + var tree = this.graphUtilities.createGraphHierarchyRealTime(nodes); - // @ts-ignore + for (var _i = 0, tree_2 = tree; _i < tree_2.length; _i++) { + var rootLevelNode = tree_2[_i]; + traverseTree(rootLevelNode, rootLevelNode.data.id); + } + /* + Create real time edges, update the source and target fields, since new ids will be generated for the nodes in + real time + */ - // @ts-ignore + var ops = []; + + for (var _a = 0, edges_2 = edges; _a < edges_2.length; _a++) { + var edge = edges_2[_a]; + edge.data.source = oldIdNewIdMap[edge.data.source]; + edge.data.target = oldIdNewIdMap[edge.data.target]; + var newEdge = self.edgeInitializer(edge.data); + var newEdgeID = this.getCustomObjId(); + newEdge.id = newEdgeID; + ops.push({ + p: [self.EDGEMAP_NAME, newEdgeID], + oi: newEdge + }); + } + + self.applyShareDBOperation(ops); + } + }); + ; + Object.defineProperty(ShareDBManager.prototype, "updateLayoutProperties", { + enumerable: false, + configurable: true, + writable: true, + value: function (newLayoutProperties) { + this.updateShareDBLayoutProperties(newLayoutProperties); + } + }); + ; + Object.defineProperty(ShareDBManager.prototype, "updateGlobalOptions", { + enumerable: false, + configurable: true, + writable: true, + value: function (newOptions) { + this.updateShareDBGlobalOptions(newOptions); + } + }); + ; + /* + * Creates graph hierarchy from given flat list of nodes list, nodes list is assumed to have parent-child + * relationship by a field 'parent' which represents to the id of the parent node This function is specific + * for the needs of TCGA Pathway Curation Tool 04/07/2016 + * + * @param nodes {array}: flat list of nodes of a graph + * @return {array}: Tree representation in array, entries are root level nodes. node.children gives children nodes + * of each node in the returned array. + * a node in corresponding level. + * + * */ + Object.defineProperty(ShareDBManager.prototype, "createGraphHierarchy", { + enumerable: false, + configurable: true, + writable: true, + value: function (nodes) { + //Some arrays and maps for creating graph hierarchy + var tree = []; + var mappedArr = {}; // First map the nodes of the array to an object -> create a hash table. + for (var i = 0, len = nodes.length; i < len; i++) { + var arrElem = nodes[i]; + mappedArr[arrElem.data.id] = arrElem; + mappedArr[arrElem.data.id].children = []; + } + for (var _i = 0, _a = Object.keys(mappedArr); _i < _a.length; _i++) { + var id = _a[_i]; + var mappedElem = mappedArr[id]; // If the element is not at the root level, add it to its parent array of children. + if (mappedElem.data.parent) { + mappedArr[mappedElem.data.parent].children.push(mappedElem); + } // If the element is at the root level, add it to first level elements array. + else { + tree.push(mappedElem); + } + } + return tree; + } + }); + ; //Makes sure that edge is compatible with edges in shared document + Object.defineProperty(ShareDBManager.prototype, "edgeInitializer", { + enumerable: false, + configurable: true, + writable: true, + value: function (params) { + var edge = {}; + edge.id = params.id || this.getCustomObjId(); + edge.type = params.type || "undefined"; + edge.source = params.source || "undefined"; + edge.target = params.target || "undefined"; + edge.name = params.name || ""; + edge.isHighlighted = params.isHighlighted || false; -var Sidebar_Sidebar = -/** @class */ -function (_super) { - Sidebar_extends(Sidebar, _super); + if (params.pubmedIDs) { + if (edge.pubmedIDs == undefined) { + edge.pubmedIDs = []; + } - function Sidebar(props) { - var _this = _super.call(this, props) || this; + if (params.pubmedIDs.length > 0) edge.pubmedIDs.push(params.pubmedIDs); + } else { + edge.pubmedIDs = []; + } - Object.defineProperty(_this, "activeEdge", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object(external_mobx_["makeObservable"])(_this); - _this.activeEdge = -1; - props.setActiveEdgeHandler(_this.setActiveEdge); - return _this; - } + if (params.bendPoint) { + if (edge.bendPoint == undefined) { + edge.bendPoint = []; + } - Object.defineProperty(Sidebar.prototype, "addEdge", { - enumerable: false, - configurable: true, - writable: true, - value: function (edgeIndex) { - if (edgeIndex === this.activeEdge) { - this.setActiveEdge(-1); - this.props.pathwayActions.addEdge(-1); - return; + edge.bendPoint.push(params.bendPoint); + } else { + edge.bendPoint = []; } - this.setActiveEdge(edgeIndex); - this.props.pathwayActions.addEdge(edgeIndex); + return edge; } }); - Object.defineProperty(Sidebar.prototype, "setActiveEdge", { + ; //Makes sure that node is compatible with nodes in shared document + + Object.defineProperty(ShareDBManager.prototype, "nodeInitializer", { enumerable: false, configurable: true, writable: true, - value: function (edgeIndex) { - this.activeEdge = edgeIndex; + value: function (params) { + var node = {}; + node.id = params.id || this.getCustomObjId(); + node.name = params.name || "undefined"; + node.type = params.type || "undefined"; + node.parent = params.parent || "undefined"; + node.x = params.x || "undefined"; + node.y = params.y || "undefined"; + node.w = params.w || "undefined"; + node.h = params.h || "undefined"; + node.minWidth = params.minWidth || 0; + node.minWidthBiasLeft = params.minWidth || 0; + node.minWidthBiasRight = params.minWidth || 0; + node.minHeight = params.minWidth || 0; + node.minHeightBiasTop = params.minWidth || 0; + node.minHeightBiasBottom = params.minWidth || 0; + node.isHidden = params.isHidden || false; + node.isInvalidGene = params.isInvalidGene || false; + node.isHighlighted = params.isHighlighted || false; + return node; } }); - Object.defineProperty(Sidebar.prototype, "render", { + ; //Makes sure that layout properties is compatible with layout properties in shared document + + Object.defineProperty(ShareDBManager.prototype, "layoutPropertiesInitializer", { enumerable: false, configurable: true, writable: true, - value: function () { - var _this = this; + value: function (params) { + var layoutProperties = {}; + layoutProperties.name = params.name || 'undefined'; + layoutProperties.nodeRepulsion = params.nodeRepulsion || 'undefined'; // this.nodeOverlap = params.nodeOverlap || 'undefined'; - var nodeTypes = ["Gene", "Family", "Complex", "Compartment", "Process"]; - var edgeTypes = ["Activates", "Inhibits", "Induces", "Represses", "Binds"]; - var nodeImgs = [gene_default.a, family_default.a, complex_default.a, compartment_default.a, process_default.a]; - var edgeImgs = [activates_default.a, inhibits_default.a, induces_default.a, represses_default.a, binds_default.a]; - var nodeIds = ["simpleNodeDiv", "familyNodeDiv", "complexNodeDiv", "compartmentNodeDiv", "processNodeDiv"]; - return external_react_default.a.createElement("div", { - id: "pathway-sidebar", - className: "sideBarWrapper" - }, external_react_default.a.createElement(external_react_bootstrap_["Panel"], { - className: "pnl" - }, external_react_default.a.createElement(external_react_bootstrap_["Panel"].Heading, { - className: "pnl-header" - }, "Network"), external_react_default.a.createElement(external_react_bootstrap_["Panel"].Body, { - className: "pnl-body pathwayPanel" - }, external_react_default.a.createElement("div", { - className: "buttonContainer" - }, external_react_default.a.createElement(external_react_bootstrap_["Button"], { - onClick: function () { - _this.props.handleOpen(EModalType.PW_DETAILS); - } - }, "Properties")), external_react_default.a.createElement("div", { - className: "buttonContainer" - }, external_react_default.a.createElement(external_react_bootstrap_["Button"], { - onClick: function () { - _this.props.pathwayActions.upload(); - } - }, "Import")), external_react_default.a.createElement("div", { - className: "buttonContainer" - }, external_react_default.a.createElement(external_react_bootstrap_["Button"], { - onClick: function () { - _this.props.pathwayActions.export(false); - } - }, "Export")))), external_react_default.a.createElement(external_react_bootstrap_["Panel"], { - className: "pnl" - }, external_react_default.a.createElement(external_react_bootstrap_["Panel"].Heading, { - className: "pnl-header" - }, "Node Palette"), external_react_default.a.createElement(external_react_bootstrap_["Panel"].Body, { - className: "pnl-body" - }, nodeIds.map(function (id) { - return external_react_default.a.createElement("div", { - id: id, - "data-tip": "Click on this and drag to the location on drawing canvas and release!", - "data-effect": "solid", - "data-place": "bottom", - "data-delay-show": "1000", - className: "dragButtonContainer" - }); - }))), external_react_default.a.createElement(external_react_bootstrap_["Panel"], { - className: "pnl edgePanel" - }, external_react_default.a.createElement(external_react_bootstrap_["Panel"].Heading, { - className: "pnl-header" - }, "Interaction Palette"), external_react_default.a.createElement(external_react_bootstrap_["Panel"].Body, { - className: "pnl-body edgePaletteWrapper" - }, external_react_default.a.createElement("div", { - className: "list-group edge-palette" - }, edgeTypes.map(function (edgeType, i) { - return external_react_default.a.createElement("div", { - "data-tip": "Click to activate; then, start the interaction from the little circle on the source node!", - "data-effect": "solid", - "data-place": "bottom", - "data-delay-show": "1000" - }, external_react_default.a.createElement("a", { - style: { - marginBottom: "5px" - }, - className: "list-group-item " + (_this.activeEdge === i ? "active" : ""), - onClick: function () { - _this.addEdge(i); - }, - href: "#" - }, external_react_default.a.createElement("img", { - style: { - width: "30px" - }, - className: "pull-left", - src: edgeImgs[i] - }), ' ', edgeType)); - }))))); + layoutProperties.idealEdgeLength = params.idealEdgeLength || 'undefined'; + layoutProperties.edgeElasticity = params.edgeElasticity || 'undefined'; + layoutProperties.nestingFactor = params.nestingFactor || 'undefined'; + layoutProperties.gravity = params.gravity || 'undefined'; + layoutProperties.numIter = params.numIter || 'undefined'; + layoutProperties.tile = params.tile || 'undefined'; + layoutProperties.animate = params.animate || 'undefined'; + layoutProperties.randomize = params.randomize || false; + layoutProperties.gravityRangeCompound = params.gravityRangeCompound || 'undefined'; + layoutProperties.gravityCompound = params.gravityCompound || 'undefined'; + layoutProperties.gravityRange = params.gravityRange || 'undefined'; + layoutProperties.tilingPaddingVertical = params.tilingPaddingVertical || 'undefined'; + layoutProperties.tilingPaddingHorizontal = params.tilingPaddingHorizontal || 'undefined'; + layoutProperties.initialEnergyOnIncremental = params.initialEnergyOnIncremental || 'undefined'; + return layoutProperties; } }); + ; //Makes sure that global options is compatible with global options in shared document - Sidebar_decorate([external_mobx_["observable"]], Sidebar.prototype, "activeEdge", void 0); - - Sidebar_decorate([external_autobind_decorator_default.a], Sidebar.prototype, "setActiveEdge", null); - - Sidebar = Sidebar_decorate([external_mobx_react_["observer"]], Sidebar); - return Sidebar; -}(external_react_default.a.Component); - -/* harmony default export */ var ui_Sidebar = (Sidebar_Sidebar); -// CONCATENATED MODULE: ./src/modals/StudyModal.tsx -var StudyModal_extends = undefined && undefined.__extends || function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || { - __proto__: [] - } instanceof Array && function (d, b) { - d.__proto__ = b; - } || function (d, b) { - for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; - }; - - return extendStatics(d, b); - }; - - return function (d, b) { - extendStatics(d, b); - - function __() { - this.constructor = d; + Object.defineProperty(ShareDBManager.prototype, "globalOptionsInitializer", { + enumerable: false, + configurable: true, + writable: true, + value: function (params) { + var globalOptions = {}; + globalOptions.zoomLevel = params.zoomLevel || 'undefined'; + globalOptions.panLevel = params.panLevel || 'undefined'; + return globalOptions; } + }); + ; //Create unique ID for elements - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -}(); + Object.defineProperty(ShareDBManager.prototype, "getCustomObjId", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + // see http://stackoverflow.com/a/8809472 + // we need to take care of our own IDs because the ones automatically generated by cytoscape (also UUID) + // don't comply with xsd:SID type that must not begin with a number + // Public Domain/MIT + var d = Date.now(); -var StudyModal_decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; + if (typeof performance !== 'undefined' && typeof performance.now === 'function') { + d += performance.now(); //use high-precision timer if available + } + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { + var r = (d + Math.random() * 16) % 16 | 0; + d = Math.floor(d / 16); + return (c === 'x' ? r : r & 0x3 | 0x8).toString(16); + }); + } + }); + ; + Object.defineProperty(ShareDBManager.prototype, "getParam", { + enumerable: false, + configurable: true, + writable: true, + value: function (urlParam) { + var regExp = new RegExp(urlParam + '=(.*?)($|&)', 'g'); + var match = window.location.search.match(regExp); + if (match && match.length) { + match = match[0]; + match = match.replace(urlParam + '=', '').replace('&', ''); + } else { + match = null; + } + return match; + } + }); + ; + return ShareDBManager; +}(); +/* harmony default export */ var managers_ShareDBManager = (ShareDBManager_ShareDBManager); +// EXTERNAL MODULE: external "jquery-ui-dist/jquery-ui" +var jquery_ui_ = __webpack_require__(58); +// CONCATENATED MODULE: ./src/utils/DragDropNodeAddPlugin.tsx -var StudyModal_StudyModal = +var DragDropNodeAddPlugin_DragDropNodeAddPlugin = /** @class */ -function (_super) { - StudyModal_extends(StudyModal, _super); - - function StudyModal(props) { - var _this = _super.call(this, props) || this; - - Object.defineProperty(_this, "dataTypes", { - enumerable: true, - configurable: true, - writable: true, - value: {} - }); - Object.defineProperty(_this, "itemArray", { +function () { + function DragDropNodeAddPlugin(editor, cy, pathwayHandler) { + Object.defineProperty(this, "pathwayHandler", { enumerable: true, configurable: true, writable: true, value: void 0 }); - Object.defineProperty(_this, "selectedStudyData", { + Object.defineProperty(this, "cy", { enumerable: true, configurable: true, writable: true, value: void 0 }); - Object.defineProperty(_this, "portalAccessor", { + Object.defineProperty(this, "editor", { enumerable: true, configurable: true, writable: true, value: void 0 }); - Object(external_mobx_["makeObservable"])(_this); - _this.selectedStudyData = []; - _this.portalAccessor = new utils_CBioPortalAccessor(); - - _this.fetchStudy(); + this.editor = editor; + this.cy = cy; + this.pathwayHandler = pathwayHandler; + this.initNodeAdd(); + } //TODO JQUERY IS IGNORED - return _this; - } - Object.defineProperty(StudyModal.prototype, "preparePortalAccess", { + Object.defineProperty(DragDropNodeAddPlugin.prototype, "initNodeAdd", { enumerable: false, configurable: true, writable: true, - value: function (studyId) { - var _this = this; + value: function () { + var nodeAddClass = this; + var defaults = { + height: 30, + width: 30, + padding: 5, + backgroundColorDiv: '#fbfbfb', + borderColorDiv: '#fff', + borderWidthDiv: '0px', + borderRadiusDiv: '5px', + icon: '', + nodeParams: function () { + // return element object to be passed to cy.add() for adding node + return {}; + } + }; + var self = this; // @ts-ignore - this.portalAccessor.getSupportedGeneticProfiles(studyId, function (data) { - _this.disableAllDataTypes(); // Iterate through profiles + external_jquery_default.a.fn.cytoscapeNodeadd = function (params) { + var options = external_jquery_default.a.extend(true, {}, defaults, params); + var fn = params; + var functions = { + destroy: function () { + var $this = external_jquery_default()(this); + $this.find(".ui-cytoscape-nodeadd").remove(); + }, + init: function () { + return external_jquery_default()(this).each(function () { + var components = options.components; + for (var _i = 0, components_1 = components; _i < components_1.length; _i++) { + var component = components_1[_i]; + var dragContainer = component.container; //var explanationText = component.explanationText; - for (var _i = 0, _a = Object.keys(data); _i < _a.length; _i++) { - var profile = _a[_i]; - var type = utils_CBioPortalAccessor.getDataType(profile); + var $nodeadd = external_jquery_default()('
'); + dragContainer.append($nodeadd); + var $nodeDragHandle = external_jquery_default()('
\ + \ + \ + \ +
'); + $nodeadd.append($nodeDragHandle); + $nodeDragHandle.bind("mousedown", function (e) { + e.stopPropagation(); // don't trigger dragging of nodeadd - if (type !== "") { - _this.dataTypes[type].enabled = true; - _this.dataTypes[type].profile = profile; - } - } - }); - } - }); - Object.defineProperty(StudyModal.prototype, "disableAllDataTypes", { - enumerable: false, - configurable: true, - writable: true, - value: function () { - for (var _i = 0, _a = Object.keys(this.dataTypes); _i < _a.length; _i++) { - var dataType = _a[_i]; - this.dataTypes[dataType].enabled = false; - this.dataTypes[dataType].checked = false; - this.dataTypes[dataType].profile = undefined; - } - } - }); - Object.defineProperty(StudyModal.prototype, "fetchStudy", { - enumerable: false, - configurable: true, - writable: true, - value: function () { - var _this = this; + e.preventDefault(); // don't cause text selection + }); //Setup UI - this.itemArray = []; - this.portalAccessor.getDataTypes().forEach(function (dataType) { - _this.dataTypes[dataType] = { - enabled: false, - checked: false, - profile: undefined - }; - }); - this.portalAccessor.fetchCancerStudies(function (cancerStudies) { - var _loop_1 = function (study) { - if (!cancerStudies.hasOwnProperty(study)) { - return "continue"; + dragContainer.find(".ui-cytoscape-nodeadd-nodediv").css({ + background: options.backgroundColorDiv, + border: options.borderWidthDiv + ' solid ' + options.borderColorDiv, + 'border-radius': options.borderRadiusDiv + }); //Init Draggable + + dragContainer.find("#ui-cytoscape-nodeadd-icon").draggable({ + helper: "clone", + cursor: "pointer" + }); + } // @ts-ignore TODO: AMENDMENT ATTENTION + + + var $container = external_jquery_default()(this); //Init Droppable + // @ts-ignore TODO: Droppable is ignored + + $container.droppable({ + activeClass: "ui-state-highlight", + // accept: "#ui-cytoscape-nodeadd-icon", + drop: function (event, ui) { + $container.removeClass("ui-state-highlight"); + var currentOffset = $container.offset(); + var relX = event.pageX - currentOffset.left; + var relY = event.pageY - currentOffset.top; + var nodeType = external_jquery_default()(ui.helper).attr('nodeType').toUpperCase(); + var cy = nodeAddClass.cy; //Hold a map for parents and candidate parent nodes for this addition + + var nodeMap = {}; + var parentMap = {}; //Loop through nodes for hit testing about drag position on canvas + + cy.nodes().forEach(function (node) { + var nodeBbox = node.renderedBoundingBox(); //Rectangle point test + + if (relX <= nodeBbox.x2 && relX >= nodeBbox.x1 && relY <= nodeBbox.y2 && relY >= nodeBbox.y1 && node.data().type != 'GENE') { + //If node has a children put an entry to the parentMap + if (node.children().length > 0) { + parentMap[node.id()] = true; + } //If parent of this node is already added to the node map remove it, since our candidate is in deeper level ! + + + if (parentMap[node._private.data.parent]) { + delete nodeMap[node._private.data.parent]; + } //Add an entry to node map + + + nodeMap[node.id()] = node; + } + }); //Check if any parent found, if so set parent field + + var parent = nodeMap[Object.keys(nodeMap)[0]]; + var nodeData = { + w: "0", + h: "100", + parent: 0, + type: nodeType, + name: 'New ' + external_jquery_default()(ui.helper).attr('nodeType') + }; + + if (parent) { + if (parent.data().type == "FAMILY" || parent.data().type == "COMPLEX") { + if (nodeType != "COMPARTMENT" && nodeType != "PROCESS") { + nodeData.parent = parent.id(); + } + } else { + nodeData.parent = parent.id(); + } + } //TODO one place access to these + + + nodeData.w = "150"; + nodeData.h = "52"; //Adjust position according to the zoom level and pan ! + //To set rendered position !!! + //TODO refactor this ! + + relX = relX / cy.zoom() + cy.extent().x1; + relY = relY / cy.zoom() + cy.extent().y1; + nodeAddClass.editor.addNode(nodeData, { + x: relX, + y: relY + }); + self.pathwayHandler("Additional Pathway"); + } + }); + }); } + }; - var item = external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { - key: study, - onClick: function () { - _this.selectedStudyData = cancerStudies[study]; + if (functions[fn]) { + return functions[fn].apply(this, Array.prototype.slice.call(arguments, 1)); + } else if (typeof fn == 'object' || !fn) { + return functions.init.apply(this, arguments); + } else { + external_jquery_default.a.error("No such function `" + fn + "` for jquery.cytoscapenodeadd"); + } + + return external_jquery_default()(this); + }; // @ts-ignore - _this.preparePortalAccess(cancerStudies[study][0]); - } - }, cancerStudies[study][1]); - _this.itemArray.push(item); - }; + external_jquery_default.a.fn.cynodeadd = external_jquery_default.a.fn.cytoscapeNodeadd; - for (var study in cancerStudies) { - _loop_1(study); - } - }); - console.log(this.itemArray); - } - }); - Object.defineProperty(StudyModal.prototype, "resetModal", { - enumerable: false, - configurable: true, - writable: true, - value: function () { - this.disableAllDataTypes(); - this.selectedStudyData = []; - } - }); - Object.defineProperty(StudyModal.prototype, "handleCheckboxClick", { - enumerable: false, - configurable: true, - writable: true, - value: function (dataType) { - this.dataTypes[dataType].checked = !this.dataTypes[dataType].checked; - console.log(this.dataTypes[dataType].checked); + try { + /* Adding as an extension to the core functionality of cytoscape.js*/ + external_cytoscape_default()('core', 'nodeadd', function (options) { + // @ts-ignore + external_jquery_default()(this.container()).cytoscapeNodeadd(options); + }); + } catch (err) { + console.log(err); + } } }); - Object.defineProperty(StudyModal.prototype, "render", { - enumerable: false, - configurable: true, - writable: true, - value: function () { - var _this = this; + return DragDropNodeAddPlugin; +}(); - return external_react_default.a.createElement(external_react_bootstrap_["Modal"], { - id: "cbioPortalModal", - show: this.props.isModalShown, - onHide: function () { - _this.props.handleClose(EModalType.STUDY); +/* harmony default export */ var utils_DragDropNodeAddPlugin = (DragDropNodeAddPlugin_DragDropNodeAddPlugin); +// CONCATENATED MODULE: ./src/ui/CytoscapeArea.tsx +var CytoscapeArea_extends = undefined && undefined.__extends || function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || { + __proto__: [] + } instanceof Array && function (d, b) { + d.__proto__ = b; + } || function (d, b) { + for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; + }; - _this.resetModal(); - } - }, external_react_default.a.createElement(external_react_bootstrap_["Modal"].Header, { - closeButton: true - }, external_react_default.a.createElement(external_react_bootstrap_["Modal"].Title, null, external_react_default.a.createElement("h3", null, "Profile Data from cBioPortal"))), external_react_default.a.createElement(external_react_bootstrap_["Modal"].Body, null, external_react_default.a.createElement("div", { - id: "cancerDropDown" - }, external_react_default.a.createElement("h4", null, "Select Cancer Study"), external_react_default.a.createElement(external_react_bootstrap_["DropdownButton"], { - id: "dropdown-study", - title: this.selectedStudyData[1] || "Choose study" - }, this.itemArray)), Object.keys(this.dataTypes).map(function (dataType) { - return external_react_default.a.createElement(external_react_bootstrap_["Checkbox"], { - key: dataType, - disabled: !_this.dataTypes[dataType].enabled, - onClick: function () { - _this.handleCheckboxClick(dataType); - }, - checked: _this.dataTypes[dataType].checked - }, dataType); - }), external_react_default.a.createElement("br", null)), external_react_default.a.createElement(external_react_bootstrap_["Modal"].Footer, null, external_react_default.a.createElement(external_react_bootstrap_["Button"], { - bsClass: "success", - onClick: function () { - _this.props.loadFromCBio(_this.dataTypes, _this.selectedStudyData); + return extendStatics(d, b); + }; - _this.props.handleClose(EModalType.STUDY); + return function (d, b) { + extendStatics(d, b); - _this.resetModal(); - } - }, "Load Data"))); + function __() { + this.constructor = d; } - }); - StudyModal_decorate([external_mobx_["observable"]], StudyModal.prototype, "dataTypes", void 0); + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +}(); - StudyModal_decorate([external_mobx_["observable"]], StudyModal.prototype, "selectedStudyData", void 0); +var CytoscapeArea_decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { + var c = arguments.length, + r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, + d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; - StudyModal_decorate([external_mobx_["observable"]], StudyModal.prototype, "portalAccessor", void 0); - StudyModal_decorate([external_autobind_decorator_default.a], StudyModal.prototype, "resetModal", null); - StudyModal_decorate([external_autobind_decorator_default.a], StudyModal.prototype, "handleCheckboxClick", null); - StudyModal = StudyModal_decorate([external_mobx_react_["observer"]], StudyModal); - return StudyModal; -}(external_react_default.a.Component); -/* harmony default export */ var modals_StudyModal = (StudyModal_StudyModal); -// EXTERNAL MODULE: ./src/images/toolbar/load.svg -var load = __webpack_require__(32); -var load_default = /*#__PURE__*/__webpack_require__.n(load); + // @ts-ignore -// EXTERNAL MODULE: ./src/images/toolbar/about.svg -var about = __webpack_require__(22); -var about_default = /*#__PURE__*/__webpack_require__.n(about); -// EXTERNAL MODULE: ./src/images/toolbar/new.svg -var toolbar_new = __webpack_require__(33); -var new_default = /*#__PURE__*/__webpack_require__.n(toolbar_new); + // @ts-ignore -// EXTERNAL MODULE: ./src/images/toolbar/save.svg -var save = __webpack_require__(34); -var save_default = /*#__PURE__*/__webpack_require__.n(save); + // @ts-ignore -// EXTERNAL MODULE: ./src/images/toolbar/delete-simple.svg -var delete_simple = __webpack_require__(35); -var delete_simple_default = /*#__PURE__*/__webpack_require__.n(delete_simple); + // @ts-ignore -// EXTERNAL MODULE: ./src/images/toolbar/undo.svg -var undo = __webpack_require__(36); -var undo_default = /*#__PURE__*/__webpack_require__.n(undo); + // @ts-ignore -// EXTERNAL MODULE: ./src/images/toolbar/redo.svg -var redo = __webpack_require__(37); -var redo_default = /*#__PURE__*/__webpack_require__.n(redo); + // @ts-ignore -// EXTERNAL MODULE: ./src/images/toolbar/align/align-horizontal-top.svg -var align_horizontal_top = __webpack_require__(38); -var align_horizontal_top_default = /*#__PURE__*/__webpack_require__.n(align_horizontal_top); -// EXTERNAL MODULE: ./src/images/toolbar/align/align-horizontal-middle.svg -var align_horizontal_middle = __webpack_require__(39); -var align_horizontal_middle_default = /*#__PURE__*/__webpack_require__.n(align_horizontal_middle); -// EXTERNAL MODULE: ./src/images/toolbar/align/align-horizontal-bottom.svg -var align_horizontal_bottom = __webpack_require__(40); -var align_horizontal_bottom_default = /*#__PURE__*/__webpack_require__.n(align_horizontal_bottom); -// EXTERNAL MODULE: ./src/images/toolbar/align/align-vertical-left.svg -var align_vertical_left = __webpack_require__(41); -var align_vertical_left_default = /*#__PURE__*/__webpack_require__.n(align_vertical_left); -// EXTERNAL MODULE: ./src/images/toolbar/align/align-vertical-center.svg -var align_vertical_center = __webpack_require__(42); -var align_vertical_center_default = /*#__PURE__*/__webpack_require__.n(align_vertical_center); -// EXTERNAL MODULE: ./src/images/toolbar/align/align-vertical-right.svg -var align_vertical_right = __webpack_require__(43); -var align_vertical_right_default = /*#__PURE__*/__webpack_require__.n(align_vertical_right); -// EXTERNAL MODULE: ./src/images/toolbar/grid.svg -var grid = __webpack_require__(44); -var grid_default = /*#__PURE__*/__webpack_require__.n(grid); -// EXTERNAL MODULE: ./src/images/toolbar/guidelines.svg -var guidelines = __webpack_require__(45); -var guidelines_default = /*#__PURE__*/__webpack_require__.n(guidelines); + // @ts-ignore -// EXTERNAL MODULE: ./src/images/toolbar/hide-selected.svg -var hide_selected = __webpack_require__(46); -var hide_selected_default = /*#__PURE__*/__webpack_require__.n(hide_selected); +window.$ = external_jquery_default.a; -// EXTERNAL MODULE: ./src/images/toolbar/show-all.svg -var show_all = __webpack_require__(47); -var show_all_default = /*#__PURE__*/__webpack_require__.n(show_all); +var edgeHandles = __webpack_require__(59); -// EXTERNAL MODULE: ./src/images/toolbar/portal.svg -var portal = __webpack_require__(48); -var portal_default = /*#__PURE__*/__webpack_require__.n(portal); +var edgeEditing = __webpack_require__(60); -// EXTERNAL MODULE: ./src/images/toolbar/settings.svg -var settings = __webpack_require__(49); -var settings_default = /*#__PURE__*/__webpack_require__.n(settings); +var regCose = __webpack_require__(61); -// EXTERNAL MODULE: ./src/images/toolbar/layout-properties.svg -var layout_properties = __webpack_require__(50); -var layout_properties_default = /*#__PURE__*/__webpack_require__.n(layout_properties); +var nodeResize = __webpack_require__(62); -// EXTERNAL MODULE: ./src/images/toolbar/quick-help.svg -var quick_help = __webpack_require__(51); -var quick_help_default = /*#__PURE__*/__webpack_require__.n(quick_help); +var undoRedo = __webpack_require__(63); -// CONCATENATED MODULE: ./src/ui/Buttonbar.tsx -var Buttonbar_extends = undefined && undefined.__extends || function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || { - __proto__: [] - } instanceof Array && function (d, b) { - d.__proto__ = b; - } || function (d, b) { - for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; - }; +var panzoom = __webpack_require__(64); - return extendStatics(d, b); - }; +var styleSheet = __webpack_require__(65); - return function (d, b) { - extendStatics(d, b); +var panzoomOpts = __webpack_require__(66); + +var CytoscapeArea_navigator = __webpack_require__(67); + +var contextMenus = __webpack_require__(68); + +var konva = __webpack_require__(69); + +var viewUtilities = __webpack_require__(70); + +var grid_guide = __webpack_require__(73); + +var cyqtip = __webpack_require__(74); + +var CytoscapeArea_CytoscapeArea = +/** @class */ +function (_super) { + CytoscapeArea_extends(CytoscapeArea, _super); + + function CytoscapeArea(props) { + var _this = _super.call(this, props) || this; + + Object.defineProperty(_this, "cy", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(_this, "cyDiv", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(_this, "editor", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(_this, "edgeAddingMode", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(_this, "viewOperationsManager", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(_this, "qtipManager", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(_this, "genomicDataExplorerView", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(_this, "pathwayDetailsView", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(_this, "viewUtilities", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(_this, "isCollaborative", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(_this, "isCbioPortal", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(_this, "shareDBManager", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(_this, "cxtMenuManager", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(_this, "dragDropNodeAddManager", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(_this, "undoRedoManager", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(_this, "portalAccessor", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(_this, "isMountedFirst", { + enumerable: true, + configurable: true, + writable: true, + value: true + }); + Object.defineProperty(_this, "eh", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + Object.defineProperty(_this, "lastSelectedEdge", { + enumerable: true, + configurable: true, + writable: true, + value: void 0 + }); + _this.isCollaborative = props.isCollaborative; + _this.edgeAddingMode = 0; + _this.isCbioPortal = props.isCbioPortal; + return _this; // this.init(); + // this.createSampleMenu(); //TODO: AMENDMENT Menu must be react. + // this.createCBioPortalAccessModal(); + } - function __() { - this.constructor = d; + Object.defineProperty(CytoscapeArea.prototype, "componentWillUpdate", { + enumerable: false, + configurable: true, + writable: true, + value: function (nextProps) { + this.getPathway(nextProps.selectedPathway); } + }); // This method only opens pathways that are available in pathway.json. Namely, imported or merged pathways are not opened via this method. + // Yet, they individually call parsing method. - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -}(); - -var Buttonbar_decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; - - - - // @ts-ignore + Object.defineProperty(CytoscapeArea.prototype, "getPathway", { + enumerable: false, + configurable: true, + writable: true, + value: function (selectedPathway) { + if (!selectedPathway || selectedPathway === '') return; + var data = pathways[selectedPathway]; // It might be non-existent due to pathway being created using collaborative mode, or pathway loaded elsewhere (import vs.) - // @ts-ignore + if (!data) { + return; + } // TODO Problematic const data = pathways["../samples/BLCA-2014-RTK-RAS-PI(3)K-pathway.txt"]; - // @ts-ignore - // @ts-ignore + var parsedGraph = utils_SaveLoadUtility.parseGraph(data, true); + var allEles = parsedGraph; + this.editor.loadFile(allEles.nodes, allEles.edges); + } + }); + Object.defineProperty(CytoscapeArea.prototype, "render", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + return external_react_default.a.createElement("div", { + className: this.props.isCbioPortal ? "" : "cyContainer", + style: { + border: 0 + } + }, external_react_default.a.createElement("div", { + ref: this.cyDivHandler, + id: "cy", + style: { + "border": "3px solid " + (this.isCbioPortal ? "#4389c0" : "#1abc9c"), + "height": this.isCbioPortal ? "800px" : "100%", + "borderRadius": "6px", + marginTop: "0px" + } + }), external_react_default.a.createElement("div", { + className: "cytoscape-navigator-wrapper" + })); + } + }); + Object.defineProperty(CytoscapeArea.prototype, "componentDidMount", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + if (this.isMountedFirst) { + this.init(); + this.isMountedFirst = false; + } - // @ts-ignore + this.getPathway(this.props.selectedPathway); + } + }); + Object.defineProperty(CytoscapeArea.prototype, "cyDivHandler", { + enumerable: false, + configurable: true, + writable: true, + value: function (div) { + this.cyDiv = div; + } + }); + Object.defineProperty(CytoscapeArea.prototype, "init", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + // Create portal accessor + this.portalAccessor = new utils_CBioPortalAccessor(); // Initializes cytoscape - // @ts-ignore + this.initCyJS(); // Initialize cytoscape based handlers here - // @ts-ignore + this.initCyHandlers(); + this.initKeyboardHandlers(); + this.initUndoRedoFunctionality(); + this.initCBioPortalFunctionalities(); + this.placePanzoomAndOverlay(); //this.appManager = this; + } + }); + Object.defineProperty(CytoscapeArea.prototype, "placePanzoomAndOverlay", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + //TODO place navigator !!! + var offset = 5; // @ts-ignore - // @ts-ignore + var topCy = external_jquery_default()(this.cyDiv).offset().top; //var bottomCy = $('.cyContainer').offset().bottom; + // @ts-ignore - // @ts-ignore + var leftCy = external_jquery_default()(this.cyDiv).offset().left; //var rightCy = $('.cyContainer').offset().right; + // @ts-ignore - // @ts-ignore + var heightCy = external_jquery_default()(this.cyDiv).outerHeight(); // @ts-ignore - // @ts-ignore + var widthCy = external_jquery_default()(this.cyDiv).outerWidth(); + var heightNavigator = external_jquery_default()('.cytoscape-navigator-wrapper').outerHeight(); + var widthNavigator = external_jquery_default()('.cytoscape-navigator-wrapper').outerWidth(); + var heightPatwayNavbar = external_jquery_default()('.pathway-navbar').outerHeight(); + var heightPathwayToolbar = external_jquery_default()('.pathway-toolbar').outerHeight(); + var widthSideBar = external_jquery_default()('.sideBarWrapper').outerWidth(); + var widthcBioPortalSideBar = external_jquery_default()('.cBioPortal-sidebar').outerWidth(); //706px 1513.15px + //694px 1391.15px + //var heightPanzoom = $('.cy-panzoom').outerHeight(); + //var widthPanzoom = $('.cy-panzoom').outerWidth(); - // @ts-ignore + if (!this.isCbioPortal) { + external_jquery_default()('.cytoscape-navigator-wrapper').css('top', heightCy + topCy - heightNavigator - offset + 13); + external_jquery_default()('.cytoscape-navigator-wrapper').css('left', widthCy + leftCy - widthNavigator - offset + 21 - 0.5 + 0.35); //$('.cytoscape-navigator-wrapper').css('left', widthCy + leftCy - widthNavigator - offset); + } else { + external_jquery_default()('.cytoscape-navigator-wrapper').css('bottom', 10.5); + external_jquery_default()('.cytoscape-navigator-wrapper').css('right', 0); //$('.cytoscape-navigator-wrapper').css('left', widthCy + leftCy - widthNavigator + widthcBioPortalSideBar + offset - widthSideBar); + } - // @ts-ignore + external_jquery_default()('.cytoscape-navigator-wrapper').css('z-index', 1039); //Relative is used so that its position depends on the below properties - // @ts-ignore + external_jquery_default()('.cy-panzoom').css('position', 'relative'); + external_jquery_default()('.cy-panzoom').css('top', 2); + external_jquery_default()('.cy-panzoom').css('left', widthCy - 57); + external_jquery_default()('.cy-panzoom').css('z-index', 1039); //Makes the width of panzoom container to 0 - // @ts-ignore + external_jquery_default()('.cy-panzoom').css('width', 200); + } + }); + Object.defineProperty(CytoscapeArea.prototype, "getPathwayData", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + return this.pathwayDetailsView.getPathwayData(); + } + }); + Object.defineProperty(CytoscapeArea.prototype, "initCyJS", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + var _this = this; - // @ts-ignore + try { + panzoom(external_cytoscape_default.a, external_jquery_default.a); // register extension + } catch (err) { + console.log(err); + } // cxtmenu( cytoscape, $ ); // register extension - // @ts-ignore - // @ts-ignore + try { + regCose(external_cytoscape_default.a); // register extension + } catch (err) { + console.log(err); + } - // @ts-ignore + try { + CytoscapeArea_navigator(external_cytoscape_default.a); // register extension + } catch (err) { + console.log(err); + } - // @ts-ignore + try { + grid_guide(external_cytoscape_default.a, external_jquery_default.a); // register extension + } catch (err) { + console.log(err); + } - // @ts-ignore + try { + undoRedo(external_cytoscape_default.a); // register extension + } catch (err) { + console.log(err); + } - // @ts-ignore + try { + contextMenus(external_cytoscape_default.a, external_jquery_default.a); // register extension + } catch (err) { + console.log(err); + } + try { + nodeResize(external_cytoscape_default.a, external_jquery_default.a, konva); // register extension + } catch (err) { + console.log(err); + } + try { + edgeEditing(external_cytoscape_default.a, external_jquery_default.a); // register extension + } catch (err) { + console.log(err); + } + try { + viewUtilities(external_cytoscape_default.a, external_jquery_default.a); // register extension + } catch (err) { + console.log(err); + } + try { + cyqtip(external_cytoscape_default.a, external_jquery_default.a); // register extension + } catch (err) { + console.log(err); + } + try { + edgeHandles(external_cytoscape_default.a, external_jquery_default.a); + } catch (err) { + console.log(err); + } -var Buttonbar_Buttonbar = -/** @class */ -function (_super) { - Buttonbar_extends(Buttonbar, _super); + this.edgeAddingMode = 0; // var allEles = SaveLoadUtilities.parseGraph(sampleGraph); - function Buttonbar(props) { - var _this = _super.call(this, props) || this; + this.cy = external_cytoscape_default()({ + container: this.cyDiv, + boxSelectionEnabled: true, + autounselectify: false, + wheelSensitivity: 0.1, + style: styleSheet, + // elements: allEles, + textureOnViewport: false, + motionBlur: true, + layout: { + name: 'preset' + } + }); + this.undoRedoManager = this.cy.undoRedo(); // Create Manager Classes - Object.defineProperty(_this, "searchedGene", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object(external_mobx_["makeObservable"])(_this); - _this.searchedGene = ""; - _this.props.pathwayActions.enabledType = EGridType.NONE; - return _this; - } + this.shareDBManager = new managers_ShareDBManager(function () { + var dbDoc = _this.shareDBManager.getDoc(); + }); + this.editor = new managers_EditorActionsManager(this.isCollaborative, this.shareDBManager, this.cy, this.isCbioPortal, this.undoRedoManager, this.portalAccessor, this.props.profiles); + this.shareDBManager.setEditor(this.editor); - Object.defineProperty(Buttonbar.prototype, "setEnabledType", { - enumerable: false, - configurable: true, - writable: true, - value: function (newType) { - if (newType === this.props.pathwayActions.enabledType) { - this.props.pathwayActions.enabledType = EGridType.NONE; - } else { - this.props.pathwayActions.enabledType = newType; - } // Enabled type calculated + if (this.isCollaborative) { + this.shareDBManager.initShareDB(); + } //@ts-ignore - if (this.props.pathwayActions.enabledType === EGridType.GRID) { - this.props.pathwayActions.toggleGrid(true); - } else if (this.props.pathwayActions.enabledType === EGridType.GUIDE) { - this.props.pathwayActions.toggleGuide(true); - } else { - this.props.pathwayActions.toggleGrid(false); // This will disable both. - } - } - }); - Object.defineProperty(Buttonbar.prototype, "render", { - enumerable: false, - configurable: true, - writable: true, - value: function () { - var _this = this; + window.editorActionsManager = this.editor; + this.qtipManager = new managers_QtipManager(this.cy, this.editor); + this.cxtMenuManager = new managers_ContextMenuManager(this.cy, this.editor, this.props.handleOpen, this.undoRedoManager, this.props.isCollaborative); + this.dragDropNodeAddManager = new utils_DragDropNodeAddPlugin(this.editor, this.cy, this.props.pathwayHandler); // Initialize panzoom - var fileFunctions = [{ - svg: new_default.a, - function: this.props.pathwayActions.newPathway, - tooltip: "New Pathway" - }, { - svg: load_default.a, - function: this.props.pathwayActions.upload, - tooltip: "Import Pathway" - }, { - svg: save_default.a, - function: function () { - _this.props.pathwayActions.export(false); - }, - tooltip: "Export Pathway" - }]; - var modFunctions = [{ - svg: delete_simple_default.a, - function: this.props.pathwayActions.deleteSelected, - tooltip: "Delete Selected" - }]; + this.cy.panzoom(panzoomOpts); // Node Add initialization - if (!this.props.pathwayActions.isCollaborative) { - modFunctions.push({ - svg: undo_default.a, - function: function () { - _this.props.pathwayActions.undo(); - }, - tooltip: "Undo" + this.cy.nodeadd({ + // Once the explanationText is cast to uppercase they will be node types + components: [{ + container: external_jquery_default()('#simpleNodeDiv'), + nodeType: 'Gene', + icon: gene_default.a }, { - svg: redo_default.a, - function: function () { - _this.props.pathwayActions.redo(); - }, - tooltip: "Redo" - }); - } + container: external_jquery_default()('#familyNodeDiv'), + nodeType: 'Family', + icon: family_default.a + }, { + container: external_jquery_default()('#complexNodeDiv'), + nodeType: 'Complex', + icon: complex_default.a + }, { + container: external_jquery_default()('#compartmentNodeDiv'), + nodeType: 'Compartment', + icon: compartment_default.a + }, { + container: external_jquery_default()('#processNodeDiv'), + nodeType: 'Process', + icon: process_default.a + }] + }); + var self = this; + var edgeHandleDefaults = { + preview: true, + stackOrder: 4, + handleSize: 10, + handleColor: '#1abc9c', + handleLineType: 'ghost', + handleLineWidth: 1, + handleNodes: 'node', + hoverDelay: 1, + cxt: false, + enabled: false, + toggleOffOnLeave: true, + edgeType: function (sourceNode, targetNode) { + // can return 'flat' for flat edges between nodes or 'node' for intermediate node between them + // returning null/undefined means an edge can't be added between the two nodes + return 'flat'; + }, + handlePosition: function (node) { + return 'middle top'; // sets the position of the handle in the format of "X-AXIS Y-AXIS" such as "left top", "middle top" + }, + loopAllowed: function (node) { + // for the specified node, return whether edges from itself to itself are allowed + return false; + }, + nodeLoopOffset: -50, + nodeParams: function (sourceNode, targetNode) { + // for edges between the specified source and target + // return element object to be passed to cy.add() for intermediary node + return {}; + }, + edgeParams: function (sourceNode, targetNode, i) { + // for edges between the specified source and target + // return element object to be passed to cy.add() for edge + // NB: i indicates edge index in case of edgeType: 'node' + return {}; + }, + start: function (sourceNode) { + // fired when edgehandles interaction starts (drag on handle) + var type = self.getGlobalEdgeType(); //self.cy.edgehandles('option', 'ghostEdgeType', type); + }, + complete: function (sourceNode, targetNodes, addedEntities) { + // // Remove recently added edge ! + // // FBI takes this case from now on :O + // // We will take care of addition in our manager :) + self.cy.remove(addedEntities); + self.editor.addEdge({ + source: sourceNode.id(), + target: targetNodes[0].id(), + // @ts-ignore + type: self.getGlobalEdgeType(window.edgeAddingMode), + pubmedIDs: [], + name: "" + }); + }, + stop: function (sourceNode) { + // fired when edgehandles interaction is stopped (either complete with added edges or incomplete) + //TODO refactor this, so terrible for now + //$('.edge-palette a').blur().removeClass('active'); + self.edgeAddingMode = -1; + self.eh.disable(); + self.eh.hide(); + self.props.setActiveEdge(-1); + } + }; //Edge Handles initialization - var alignFunctions = [{ - svg: align_horizontal_top_default.a, - function: function () { - _this.props.pathwayActions.align("hTop"); + this.eh = this.cy.edgehandles(edgeHandleDefaults); + this.eh.disable(); + this.props.editorHandler(this.editor, this.eh, this.undoRedoManager); + if (!this.isCbioPortal) this.cy.nodeResize({ + padding: 5, + undoable: true, + grappleSize: 8, + grappleColor: "#ffc90e", + inactiveGrappleStroke: "inside 1px blue", + boundingRectangle: true, + boundingRectangleLineDash: [4, 8], + boundingRectangleLineColor: "ffc90e", + boundingRectangleLineWidth: 1.5, + zIndex: 999, + moveSelectedNodesOnKeyEvents: function () { + return true; }, - tooltip: "Align Horizontal Top" - }, { - svg: align_horizontal_middle_default.a, - function: function () { - _this.props.pathwayActions.align("hMid"); + minWidth: function (node) { + var data = node.data("resizeMinWidth"); + return data ? data : 15; }, - tooltip: "Align Horizontal Middle" - }, { - svg: align_horizontal_bottom_default.a, - function: function () { - _this.props.pathwayActions.align("hBot"); + minHeight: function (node) { + var data = node.data("resizeMinHeight"); + return data ? data : 15; }, - tooltip: "Align Horizontal Bottom" - }, { - svg: align_vertical_left_default.a, - function: function () { - _this.props.pathwayActions.align("vLeft"); + // Getters for some style properties the defaults returns ele.css('property-name') + // you are encouraged to override these getters + getCompoundMinWidth: function (node) { + return node.style('min-width'); }, - tooltip: "Align Vertical Left" - }, { - svg: align_vertical_center_default.a, - function: function () { - _this.props.pathwayActions.align("vCen"); + getCompoundMinHeight: function (node) { + return node.style('min-height'); }, - tooltip: "Align Vertical Center" - }, { - svg: align_vertical_right_default.a, - function: function () { - _this.props.pathwayActions.align("vRight"); + getCompoundMinWidthBiasRight: function (node) { + return node.style('min-width-bias-right'); }, - tooltip: "Align Vertical Right" - }]; - var utilFunctions = [{ - isFocused: this.props.pathwayActions.enabledType === EGridType.GRID, - svg: grid_default.a, - function: function () { - _this.setEnabledType(EGridType.GRID); + getCompoundMinWidthBiasLeft: function (node) { + return node.style('min-width-bias-left'); }, - tooltip: "Enable Grid: Show and snap to grid" - }, { - isFocused: this.props.pathwayActions.enabledType === EGridType.GUIDE, - svg: guidelines_default.a, - function: function () { - _this.setEnabledType(EGridType.GUIDE); + getCompoundMinHeightBiasTop: function (node) { + return node.style('min-height-bias-top'); }, - tooltip: "Enable Guidelines: Enable and snap to alignment guidelines" - }]; - var visibilityFunctions = [{ - svg: hide_selected_default.a, - function: function () { - _this.props.pathwayActions.hideSelected(); + getCompoundMinHeightBiasBottom: function (node) { + return node.style('min-height-bias-bottom'); }, - tooltip: "Hide Selected" - }, { - svg: show_all_default.a, - function: function () { - _this.props.pathwayActions.showAll(); + isFixedAspectRatioResizeMode: function (node) { + return node.is(".fixedAspectRatioResizeMode"); }, - tooltip: "Show All" - }]; - var layoutFunctions = [{ - svg: layout_cose_default.a, - function: function () { - _this.props.pathwayActions.performLayout(); + isNoResizeMode: function (node) { + return undefined; }, - tooltip: "Perform Layout" - }, { - svg: layout_properties_default.a, - function: function () { - _this.props.handleOpen(EModalType.LAYOUT); + // These optional function will be executed to set the width/height of a node in this extension + // Using node.css() is not a recommended way (http://js.cytoscape.org/#eles.style) to do this. Therefore, overriding these defaults + // so that a data field or something like that will be used to set node dimentions instead of directly calling node.css() + // is highly recommended (Of course this will require a proper setting in the stylesheet). + setWidth: function (node, width) { + node.style('width', width); }, - tooltip: "Layout Properties" - }]; - var portalFunctions = [{ - svg: portal_default.a, - function: function () { - _this.props.handleOpen(EModalType.STUDY); + setHeight: function (node, height) { + node.style('height', height); }, - tooltip: "Fetch Genomic Data From cBioPortal" - }, { - svg: settings_default.a, - function: function () { - _this.props.handleOpen(EModalType.PROFILES); + setCompoundMinWidth: function (node, minWidth) { + node.style('min-width', minWidth); }, - tooltip: "Genomic Data Visibility Settings" - }]; - var infoFunctions = [{ - svg: quick_help_default.a, - function: function () { - _this.props.handleOpen(EModalType.HELP); + setCompoundMinHeight: function (node, minHeight) { + node.style('min-height', minHeight); }, - tooltip: "Quick Help" - }, { - svg: about_default.a, - function: function () { - _this.props.handleOpen(EModalType.ABOUT); + setCompoundMinWidthBiasLeft: function (node, minWidthBiasLeft) { + node.style('min-width-bias-left', minWidthBiasLeft); }, - tooltip: "About" - }]; - var allFunctions = [fileFunctions, modFunctions, alignFunctions, utilFunctions, visibilityFunctions, portalFunctions, layoutFunctions, infoFunctions]; - return external_react_default.a.createElement(external_react_bootstrap_["Navbar"], { - style: { - backgroundColor: "#eff0f2", - minHeight: "36px" + setCompoundMinWidthBiasRight: function (node, minHeightBiasRight) { + node.style('min-width-bias-right', minHeightBiasRight); }, - className: "pathway-toolbar" - }, external_react_default.a.createElement(external_react_bootstrap_["Nav"], null, external_react_default.a.createElement(external_react_bootstrap_["ButtonToolbar"], { - style: { - paddingBottom: 0, - paddingTop: "7px" + setCompoundMinHeightBiasTop: function (node, minHeightBiasTop) { + node.style('min-height-bias-top', minHeightBiasTop); }, - className: "toolbar pathway-toolbar" - }, allFunctions.map(function (functions) { - return external_react_default.a.createElement(external_react_bootstrap_["ButtonGroup"], null, functions.map(function (svg) { - return external_react_default.a.createElement("div", { - className: "toolbar-button" + (svg.isFocused ? " toolbar-button-focused" : "") - }, external_react_default.a.createElement("img", { - height: "22px", - width: "22px", - src: svg.svg, - "data-tip": svg.tooltip, - "data-place": "bottom", - "data-effect": "solid", - onClick: svg.function - })); - })); - }))), external_react_default.a.createElement(external_react_bootstrap_["Nav"], { - pullRight: true, - style: { - marginTop: "0", - marginBottom: "0" + setCompoundMinHeightBiasBottom: function (node, minHeightBiasBottom) { + node.style('min-height-bias-bottom', minHeightBiasBottom); }, - className: "toolbar" - }, external_react_default.a.createElement(external_react_bootstrap_["ButtonGroup"], { - id: "searchGeneToolbar" - }, external_react_default.a.createElement(external_react_bootstrap_["FormGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["FormGroup"], { - className: "has-feedback" - }, external_react_default.a.createElement(external_react_bootstrap_["FormControl"], { - id: "searchGene", - type: "text", - onChange: function (e) { - _this.searchedGene = e.target.value; + cursors: { + // May take any "cursor" css property + default: "default", + inactive: "not-allowed", + nw: "nw-resize", + n: "n-resize", + ne: "ne-resize", + e: "e-resize", + se: "se-resize", + s: "s-resize", + sw: "sw-resize", + w: "w-resize" }, - placeholder: "Search Genes...", - onKeyPress: function (e) { - if (e.key !== "Enter") return; + resizeToContentCueImage: resizeCue_default.a, + resizeToContentFunction: this.editor.resizeNodesToContent.bind(this.editor) + }); //Navigator for cytoscape js - _this.props.pathwayActions.searchGene(_this.searchedGene); - } - }), external_react_default.a.createElement(external_react_bootstrap_["Glyphicon"], { - className: "form-control-feedback", - onClick: function () { - _this.props.pathwayActions.searchGene(_this.searchedGene); - }, - glyph: "search" - })))))); - } - }); + var navDefaults = { + container: '.cytoscape-navigator-wrapper' // can be a HTML or jQuery element or jQuery selector + , + viewLiveFramerate: 0 // set false to update graph pan only on drag end; set 0 to do it instantly; set a number (frames per second) to update not more than N times per second + , + thumbnailEventFramerate: 10 // max thumbnail's updates per second triggered by graph updates + , + thumbnailLiveFramerate: false // max thumbnail's updates per second. Set false to disable + , + dblClickDelay: 200 // milliseconds + , + removeCustomContainer: true // destroy the container specified by user on plugin destroy + , + rerenderDelay: 100 // ms to throttle rerender updates to the panzoom for performance - Buttonbar_decorate([external_mobx_["observable"]], Buttonbar.prototype, "searchedGene", void 0); + }; //TODO: AMENDMENT declaration removed - Buttonbar = Buttonbar_decorate([external_mobx_react_["observer"]], Buttonbar); - return Buttonbar; -}(external_react_default.a.Component); + this.cy.navigator(navDefaults); // get navigator instance, nav -/* harmony default export */ var ui_Buttonbar = (Buttonbar_Buttonbar); -// CONCATENATED MODULE: ./src/modals/ProfilesModal.tsx -var ProfilesModal_extends = undefined && undefined.__extends || function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || { - __proto__: [] - } instanceof Array && function (d, b) { - d.__proto__ = b; - } || function (d, b) { - for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; - }; + var viewUtilitiesOpts = { + node: { + highlighted: { + 'border-width': 2, + 'border-color': '#bc1142' + }, + unhighlighted: { + 'opacity': function (ele) { + // We return the same opacity because to override the unhibhlighted ele opacity in view-utilities + return ele.css('opacity'); + } // styles for when nodes are unhighlighted.} - return extendStatics(d, b); - }; + } + }, + edge: { + highlighted: {}, + unhighlighted: { + 'opacity': function (ele) { + // We return the same opacity because to override the unhibhlighted ele opacity in view-utilities + return ele.css('opacity'); + } // styles for when edges are unhighlighted. - return function (d, b) { - extendStatics(d, b); + } + }, + setVisibilityOnHide: false, + setDisplayOnHide: true, + neighbor: function () { + return false; + }, + neighborSelectTime: 500 //ms, time to taphold to select desired neighbors - function __() { - this.constructor = d; + }; + this.viewUtilities = this.cy.viewUtilities(viewUtilitiesOpts); + this.placePanzoomAndOverlay(); + } + }); + Object.defineProperty(CytoscapeArea.prototype, "getGlobalEdgeType", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + var type = "NONE"; // @ts-ignore + + if (window.edgeAddingMode === 1) { + type = 'ACTIVATES'; + } // @ts-ignore + else if (window.edgeAddingMode === 2) { + type = 'INHIBITS'; + } // @ts-ignore + else if (window.edgeAddingMode === 3) { + type = 'INDUCES'; + } // @ts-ignore + else if (window.edgeAddingMode === 4) { + type = 'REPRESSES'; + } // @ts-ignore + else if (window.edgeAddingMode === 5) { + type = 'BINDS'; + } + + return type; } + }); + Object.defineProperty(CytoscapeArea.prototype, "initCyHandlers", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + var _this = this; + + var that = this; + var tappedBefore; + var tappedTimeout; + this.cy.on('tap', function (event) { + var tappedNow = event.target; - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -}(); + if (tappedTimeout !== -1 && tappedBefore !== -1) { + clearTimeout(tappedTimeout); + } -var ProfilesModal_decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; + if (tappedBefore === tappedNow) { + tappedNow.trigger('doubleTap'); + tappedBefore = -1; + } else { + // @ts-ignore TODO AMENDMENTsa + tappedTimeout = setTimeout(function () { + tappedBefore = -1; + }, 300); + if (tappedNow && tappedNow.isNode && tappedNow.isNode()) { + external_jquery_default()(".qtip").remove(); + } + if (tappedNow && tappedNow.isEdge && tappedNow.isEdge()) { + external_jquery_default()(".qtip").remove(); + } + tappedBefore = tappedNow; + } + }); + this.cy.on('doubleTap', 'node', function (e) { + // if cBioPortal ignore + if (that.props.isCbioPortal) return; + var eventIsDirect = e.target === this; + if (eventIsDirect) { + external_jquery_default()(".qtip").remove(); + that.qtipManager.addQtipToElements(e.target); + e.target.trigger("showqtipevent"); + } + }); + this.cy.on('doubleTap', 'edge', function (e) { + // if cBioPortal ignore + if (that.props.isCbioPortal) return; + var eventIsDirect = e.target === this; + if (eventIsDirect) { + external_jquery_default()(".qtip").remove(); + that.qtipManager.addQtipToElements(e.target); + e.target.trigger("showqtipevent"); + } + }); + this.cy.on('select', 'node', function (e) { + _this.editor.pushSelectedNodeStack(e.target); + }); // this.cy.on('select', 'edge', function( e ) + // { + // var eventIsDirect = (e.target === this); + // $(".qtip").remove(); + // + // if( eventIsDirect ) { + // that.qtipManager.addQtipToElements(e.target); + // } + // }); + this.cy.on('unselect', 'node', function (e) { + _this.editor.removeElementFromSelectedNodeStack(e.target); + }); + this.cy.on('free', 'node', function (e) { + //Collect all nodes with descendants in case of compounds + var selectedNodes = _this.cy.nodes(':selected'); -var ProfilesModal_ProfilesModal = -/** @class */ -function (_super) { - ProfilesModal_extends(ProfilesModal, _super); + var nodes = e.target; + nodes = nodes.union(nodes.descendants()); + nodes = nodes.union(selectedNodes); - function ProfilesModal(props) { - var _this = _super.call(this, props) || this; + _this.editor.moveElements(nodes); + }); + this.cy.on('layoutstop', function () { + _this.editor.postLayout(); + }); // //TODO fix this when cytoscape is updated !!! + // //Due to cytoscape.js bug, only workaround that worked :( + // this.cy.on('add', 'node', function(event) + // { + // // event.target.select(); + // this.cy.style().update(); + // this.cy.forceRender(); + // }); - Object(external_mobx_["makeObservable"])(_this); - return _this; - } + this.cy.on("noderesize.resizeend", function (_e, _type, node) { + //Updates 'data' properties from 'style' + node.data('w', node.width()); + node.data('h', node.height()); //Used for collaborative mode - Object.defineProperty(ProfilesModal.prototype, "profileEnabledMap", { - get: function () { - var profileEnabledMap = {}; - this.props.profiles.forEach(function (profile) { - profileEnabledMap[profile.profileId] = profile.enabled; + _this.editor.resizeElements(node); }); - console.log(profileEnabledMap); - return profileEnabledMap; - }, - enumerable: false, - configurable: true + this.cy.on('select', 'edge', function (e) { + _this.lastSelectedEdge = e.target; + }); + this.cy.on('bendPointMovement', function () { + _this.editor.updateEdgeBendPoints(_this.lastSelectedEdge); + }); + this.cy.on('noderesize.moveend', function () { + _this.editor.changeNodePositionsByArrows(_this.cy.nodes(":selected")); + }); + } }); - Object.defineProperty(ProfilesModal.prototype, "render", { + Object.defineProperty(CytoscapeArea.prototype, "initKeyboardHandlers", { enumerable: false, configurable: true, writable: true, value: function () { var _this = this; - var profileLabels = this.props.profiles.map(function (profile, i) { - return [external_react_default.a.createElement(external_react_bootstrap_["Label"], { - onClick: function () { - _this.props.profiles[i].enabled = !_this.props.profiles[i].enabled; - - _this.props.editor.updateGenomicDataVisibility(_this.profileEnabledMap); - }, - onMouseEnter: function () { - document.body.style.cursor = "pointer"; - }, - onMouseLeave: function () { - document.body.style.cursor = "default"; - }, - style: { - fontSize: "85%" - }, - bsStyle: _this.props.profiles[i].enabled ? "primary" : "default" - }, profile.profileId), external_react_default.a.createElement("br", null), external_react_default.a.createElement("br", null)]; - }); - return external_react_default.a.createElement(external_react_bootstrap_["Modal"], { - show: this.props.isModalShown, - onHide: function () { - _this.props.handleClose(EModalType.PROFILES); - } - }, external_react_default.a.createElement(external_react_bootstrap_["Modal"].Header, { - closeButton: true - }, external_react_default.a.createElement(external_react_bootstrap_["Modal"].Title, null, external_react_default.a.createElement("h3", null, "Genomic Data Set(s) to Show"))), external_react_default.a.createElement(external_react_bootstrap_["Modal"].Body, null, profileLabels.length > 0 ? profileLabels : external_react_default.a.createElement("h4", { - className: "modal-title" - }, "There is currently no data to show"))); - } - }); - - ProfilesModal_decorate([external_mobx_["computed"]], ProfilesModal.prototype, "profileEnabledMap", null); + if (!this.isCollaborative && !this.isCbioPortal) { + external_jquery_default()(document).keydown(function (e) { + if (e.which === 89 && (e.ctrlKey || e.metaKey)) { + _this.undoRedoManager.redo(); + } else if (e.which === 90 && (e.ctrlKey || e.metaKey)) { + _this.undoRedoManager.undo(); + } + }); + } else { + external_jquery_default()('a[role="redo"]').hide(); + external_jquery_default()('a[role="undo"]').hide(); + } - ProfilesModal = ProfilesModal_decorate([external_mobx_react_["observer"]], ProfilesModal); - return ProfilesModal; -}(external_react_default.a.Component); + external_jquery_default()(document).keydown(function (e) { + if (e.which === 65 && (e.ctrlKey || e.metaKey)) { + // @ts-ignore + var tn = document.activeElement.tagName; -/* harmony default export */ var modals_ProfilesModal = (ProfilesModal_ProfilesModal); -// CONCATENATED MODULE: ./src/modals/AboutModal.tsx -var AboutModal_extends = undefined && undefined.__extends || function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || { - __proto__: [] - } instanceof Array && function (d, b) { - d.__proto__ = b; - } || function (d, b) { - for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; - }; + if (tn != "TEXTAREA" && tn != "INPUT") { + e.preventDefault(); - return extendStatics(d, b); - }; + _this.cy.elements().select(); + } + } else if (e.which === 8 || e.which === 46) { + // @ts-ignore + var tn = document.activeElement.tagName; - return function (d, b) { - extendStatics(d, b); + if (tn != "TEXTAREA" && tn != "INPUT") { + var selectedElements = _this.cy.$(':selected'); - function __() { - this.constructor = d; + _this.editor.removeElement(selectedElements); + } + } + }); } - - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -}(); - - - - - -var AboutModal_AboutModal = -/** @class */ -function (_super) { - AboutModal_extends(AboutModal, _super); - - function AboutModal(props) { - return _super.call(this, props) || this; - } - - Object.defineProperty(AboutModal.prototype, "render", { + }); + Object.defineProperty(CytoscapeArea.prototype, "initUndoRedoFunctionality", { enumerable: false, configurable: true, writable: true, value: function () { - var _this = this; - - return external_react_default.a.createElement(external_react_bootstrap_["Modal"], { - show: this.props.isModalShown, - onHide: function () { - _this.props.handleClose(EModalType.ABOUT); - } - }, external_react_default.a.createElement(external_react_bootstrap_["Modal"].Header, { - closeButton: true - }, external_react_default.a.createElement(external_react_bootstrap_["Modal"].Title, null, external_react_default.a.createElement("h3", null, "About"))), external_react_default.a.createElement(external_react_bootstrap_["Modal"].Body, null, external_react_default.a.createElement("h3", { - id: "about-model-header" - }, "PathwayMapper 2.1"), external_react_default.a.createElement("div", { - className: "aboutImageContent" - }, external_react_default.a.createElement("img", { - src: __webpack_require__(71), - alt: "", - height: "25px" - })), external_react_default.a.createElement("div", { - className: "aboutImageContent" - }, external_react_default.a.createElement("img", { - src: __webpack_require__(72), - alt: "", - height: "34px" - })), external_react_default.a.createElement("div", { - className: "adressText" - }, external_react_default.a.createElement("p", null, "i-Vis information Visualization Lab"), external_react_default.a.createElement("p", null, "Bilkent University, Ankara, Turkey")), external_react_default.a.createElement("div", { - className: "adressText" - }, external_react_default.a.createElement("p", null, "Memorial Sloan-Kettering Cancer Center"), external_react_default.a.createElement("p", null, "New York, USA"))), external_react_default.a.createElement(external_react_bootstrap_["Modal"].Footer, null, external_react_default.a.createElement("a", { - href: "https://github.com/iVis-at-Bilkent/pathway-mapper" - }, "https://github.com/iVis-at-Bilkent/pathway-mapper"))); + if (this.isCollaborative || this.isCbioPortal) { + external_jquery_default()('[role="undo"]').hide(); + external_jquery_default()('[role="redo"]').hide(); + /* TODO: AMENDMENT + document.getElementById("localOrCollaborativeToolbar").style.display = "none"; + */ + } + } + }); + Object.defineProperty(CytoscapeArea.prototype, "initCBioPortalFunctionalities", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + if (this.isCbioPortal) { + var contextMenu = this.cy.contextMenus('get'); + contextMenu.destroy(); + } } }); - return AboutModal; -}(external_react_default.a.Component); -/* harmony default export */ var modals_AboutModal = (AboutModal_AboutModal); -// EXTERNAL MODULE: external "react-tooltip" -var external_react_tooltip_ = __webpack_require__(52); -var external_react_tooltip_default = /*#__PURE__*/__webpack_require__.n(external_react_tooltip_); + CytoscapeArea_decorate([external_autobind_decorator_default.a], CytoscapeArea.prototype, "cyDivHandler", null); -// CONCATENATED MODULE: ./src/modals/PathwayDetailsModal.tsx -var PathwayDetailsModal_extends = undefined && undefined.__extends || function () { + CytoscapeArea = CytoscapeArea_decorate([external_mobx_react_["observer"]], CytoscapeArea); + return CytoscapeArea; +}(external_react_default.a.Component); + +/* harmony default export */ var ui_CytoscapeArea = (CytoscapeArea_CytoscapeArea); +// CONCATENATED MODULE: ./src/ui/Menubar.tsx +var Menubar_extends = undefined && undefined.__extends || function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || { __proto__: [] @@ -17206,358 +17446,350 @@ var PathwayDetailsModal_extends = undefined && undefined.__extends || function ( }; }(); -var PathwayDetailsModal_decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var PathwayDetailsModal_PathwayDetailsModal = +var Menubar_Menubar = /** @class */ function (_super) { - PathwayDetailsModal_extends(PathwayDetailsModal, _super); - - function PathwayDetailsModal(props) { - var _this = _super.call(this, props) || this; + Menubar_extends(Menubar, _super); - Object.defineProperty(_this, "pathwayInfo", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - return _this; + function Menubar(props) { + return _super.call(this, props) || this; } - Object.defineProperty(PathwayDetailsModal.prototype, "render", { - enumerable: false, - configurable: true, - writable: true, - value: function () { - var _this = this; - - this.pathwayInfo = this.props.pathwayActions.getPathwayInfo; - return external_react_default.a.createElement(external_react_bootstrap_["Modal"], { - id: "pathwayDetailsDiv", - show: this.props.isModalShown, - onHide: function () { - _this.props.handleClose(4); - } - }, external_react_default.a.createElement(external_react_bootstrap_["Modal"].Header, { - closeButton: true - }, external_react_default.a.createElement(external_react_bootstrap_["Modal"].Title, null, external_react_default.a.createElement("h3", null, "Pathway Properties"))), external_react_default.a.createElement(external_react_bootstrap_["Modal"].Body, null, external_react_default.a.createElement(external_react_bootstrap_["Form"], { - id: "pathwayDetailsForm" - }, external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { - style: { - textAlign: "left" - }, - sm: 4 - }, external_react_default.a.createElement(external_react_bootstrap_["ControlLabel"], null, "File Name:")), external_react_default.a.createElement(external_react_bootstrap_["Col"], { - sm: 8 - }, external_react_default.a.createElement(external_react_bootstrap_["FormControl"], { - type: "text", - onChange: function (e) { - _this.pathwayInfo.fileName = e.target.value; - }, - value: this.pathwayInfo.fileName - }))), external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { - style: { - textAlign: "left" - }, - sm: 4 - }, external_react_default.a.createElement(external_react_bootstrap_["ControlLabel"], null, "Pathway Title:")), external_react_default.a.createElement(external_react_bootstrap_["Col"], { - sm: 8 - }, external_react_default.a.createElement(external_react_bootstrap_["FormControl"], { - type: "text", - onChange: function (e) { - _this.pathwayInfo.pathwayTitle = e.target.value; - }, - value: this.pathwayInfo.pathwayTitle - }))), external_react_default.a.createElement(external_react_bootstrap_["InputGroup"], null, external_react_default.a.createElement(external_react_bootstrap_["Col"], { - style: { - textAlign: "left" - }, - sm: 4 - }, external_react_default.a.createElement(external_react_bootstrap_["ControlLabel"], null, "Pathway Description:")), external_react_default.a.createElement(external_react_bootstrap_["Col"], { - sm: 8 - }, external_react_default.a.createElement("textarea", { - className: "form-control", - rows: 3, - onChange: function (e) { - _this.pathwayInfo.pathwayDetails = e.target.value; - }, - value: this.pathwayInfo.pathwayDetails - }))))), external_react_default.a.createElement(external_react_bootstrap_["Modal"].Footer, null, external_react_default.a.createElement(external_react_bootstrap_["Button"], { - onClick: function () { - _this.props.pathwayActions.setPathwayInfo(_this.pathwayInfo); - - _this.props.handleClose(EModalType.PW_DETAILS); - } - }, "Save"))); - } - }); - PathwayDetailsModal = PathwayDetailsModal_decorate([external_mobx_react_["observer"]], PathwayDetailsModal); - return PathwayDetailsModal; -}(external_react_default.a.Component); - -/* harmony default export */ var modals_PathwayDetailsModal = (PathwayDetailsModal_PathwayDetailsModal); -// CONCATENATED MODULE: ./src/managers/ViewOperationsManager.tsx -var ViewOperationsManager = -/** @class */ -function () { - function ViewOperationsManager(editor, cy) { - Object.defineProperty(this, "movedNodes", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(this, "editor", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(this, "cy", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - this.cy = cy; - this.editor = editor; - this.movedNodes = []; - } //TODO use align function from cytoscape.js-grid-guide extension - - - Object.defineProperty(ViewOperationsManager.prototype, "handleNodeAlignment", { - enumerable: false, - configurable: true, - writable: true, - value: function (param) { - var tmpNodes = this.editor.selectedNodeStack; - var nodes = this.cy.collection(); - var nodeMap = {}; - this.movedNodes = []; - - for (var key in tmpNodes) { - nodes = nodes.add(tmpNodes[key]); - } - - nodes.forEach(function (node, index) { - if (node.isParent()) { - nodeMap[node.id()] = node; - } - }); - - if (nodes.length > 0) { - var firstSelected = nodes[0]; - var firstBbox = firstSelected.boundingBox(); //OuterHeight variable added due to miscalculation of boundingBox function in pathwaymapper - - var firstOuterHeight = firstSelected.outerHeight(); - var self = this; - nodes.forEach(function (node, index) { - if (index == 0) { - return; - } //If parent of selected node is in selection do nothing ! - - - if (nodeMap[node.parent().id()] == null) { - var newPosition = self.calculateNewPosition(param, node, firstBbox, firstOuterHeight); //Recursively traverse leaf nodes - - self.changePosition(node, 0, 0, newPosition); - } - }); - this.editor.handleChangePositionByAlignment(self.movedNodes); - } - } - }); - /* - Determine new position according to the alignment - node that node.position works on center positions thats why all calculations - are performed accordingly - */ - - Object.defineProperty(ViewOperationsManager.prototype, "calculateNewPosition", { - enumerable: false, - configurable: true, - writable: true, - value: function (param, node, referenceBbox, referenceOuterHeight) { - var currentPos = node.position(); - var currentBbox = node.boundingBox(); - var newPosition; //This parameter is used to move the compounds less upwards when they contain label - - var moveParam = node.isParent() ? node.outerHeight() - (currentBbox.h - node.outerHeight()) / 2 - (node.outerHeight() - node.height()) / 2 : node.height(); //This param is used only when the node is parent, for simple nodes is 0 - - var labelHeight = node.isParent() ? currentBbox.h - node.outerHeight() : 0; - - if (param === 'vLeft') { - newPosition = { - x: referenceBbox.x1 + currentBbox.w / 2, - y: currentPos.y - }; - } else if (param === 'vCen') { - newPosition = { - x: referenceBbox.x1 + referenceBbox.w / 2, - y: currentPos.y - }; - } else if (param === 'vRight') { - newPosition = { - x: referenceBbox.x2 - currentBbox.w / 2, - y: currentPos.y - }; - } else if (param === 'hTop') { - newPosition = { - x: currentPos.x, - y: referenceBbox.y1 + currentBbox.h / 2 - }; - } //Checks for the case where compounds don't have names (name isn't taken in consideration in that case) - else if (param === 'hMid' && node.isParent() && node.data('name') == "") { - newPosition = { - x: currentPos.x, - y: referenceBbox.y1 + referenceBbox.h / 2 - }; - } else if (param === 'hMid') { - newPosition = { - x: currentPos.x, - y: referenceBbox.y1 + referenceOuterHeight / 2 + labelHeight / 2 - }; - } //Checks for the case where compounds don't have names (name isn't taken in consideration in that case) - else if (param === 'hBot' && node.isParent() && node.data('name') == "") { - newPosition = { - x: currentPos.x, - y: referenceBbox.y2 - currentBbox.h / 2 - }; - } else if (param === 'hBot') { - newPosition = { - x: currentPos.x, - y: referenceBbox.y1 + referenceOuterHeight - moveParam / 2 - }; - } else { - console.log('Error: wrong alignment name ' + param); - return; - } - - return newPosition; - } - }); //Recursively move leaf nodes - - Object.defineProperty(ViewOperationsManager.prototype, "changePosition", { + Object.defineProperty(Menubar.prototype, "render", { enumerable: false, configurable: true, writable: true, - value: function (node, dx, dy, newPos) { - if (node.isParent()) { - var childNodes = node.children(); - var parentBbox = node.boundingBox(); - var self = this; - childNodes.forEach(function (childNode, index) { - var childBbox = childNode.boundingBox(); + value: function () { + var _this = this; - var _dx = -(parentBbox.x1 - childBbox.x1) - parentBbox.w / 2 + childBbox.w / 2; + var nodeTypes = ["Gene", "Family", "Complex", "Compartment", "Process"]; + var edgeTypes = ["Activates", "Inhibits", "Induces", "Represses", "Binds"]; + var pathwayDropdownData = {}; - var _dy = -(parentBbox.y1 - childBbox.y1) - parentBbox.h / 2 + childBbox.h / 2; //If further compound node is found, set position accordingly + for (var _i = 0, _a = Object.keys(pathways); _i < _a.length; _i++) { + var pwName = _a[_i]; // If a pathway name ain't include 'pathway' word then it is under pancanatlas. + var isPancanatlas = !pwName.includes('pathway'); + var dashPos = pwName.indexOf('-'); + var pwHead = isPancanatlas ? 'PanCanAtlas' : pwName.substring(0, dashPos); - if (childNode.isParent()) { - self.changePosition(childNode, 0, 0, { - x: newPos.x + _dx, - y: newPos.y + _dy - }); - } else { - self.changePosition(childNode, _dx, _dy, newPos); - } - }); - } else { - //Move locally and let editor actions manager know a move happened - //If in collaborative mode editor actions manager will update collaborative model - var position = { - x: newPos.x + dx, - y: newPos.y + dy - }; - this.movedNodes.push({ - node: node, - nextPosition: position, - oldPosition: null - }); + if (pwHead in pathwayDropdownData) { + pathwayDropdownData[pwHead].push(pwName); + } else { + pathwayDropdownData[pwHead] = [pwName]; + } } + + return external_react_default.a.createElement(external_react_bootstrap_["Navbar"], { + className: "pathway-navbar" + }, external_react_default.a.createElement(external_react_bootstrap_["Nav"], null, external_react_default.a.createElement(external_react_bootstrap_["NavDropdown"], { + eventKey: 1, + title: "Network", + id: "basic-nav-network" + }, external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + eventKey: 1.1, + onClick: this.props.pathwayActions.newPathway + }, "New"), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + eventKey: 1.1, + onClick: function () { + _this.props.handleOpen(EModalType.PW_DETAILS); + } + }, "Properties..."), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + eventKey: 1.1, + onClick: function () { + _this.props.pathwayActions.upload(); + } + }, "Import"), external_react_default.a.createElement(external_react_bootstrap_["NavDropdown"], { + className: "dropdown-submenu", + eventKey: 1, + title: "TCGA", + id: "basic-nav-TCGA" + }, Object.keys(pathwayDropdownData).map(function (pwHead, index) { + return external_react_default.a.createElement(external_react_bootstrap_["NavDropdown"], { + key: index, + id: pwHead + "_dropdown", + className: "dropdown-submenu", + eventKey: 1, + title: pwHead + }, pathwayDropdownData[pwHead].map(function (pwName, index) { + return external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + key: index, + onClick: function () { + if (_this.props.pathwayActions.doesCyHaveElements()) { + _this.props.handleOpen(EModalType.CONFIRMATION); + + modals_ConfirmationModal.pendingFunction = function () { + _this.props.pathwayActions.changePathway(pwName); + }; + } else { + _this.props.pathwayActions.changePathway(pwName); + } + } + }, pwName.split('-').join(" ")); + })); + })), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + eventKey: 1.1, + onClick: function () { + _this.props.pathwayActions.merge(); + } + }, "Merge With..."), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + eventKey: 1.1, + onClick: function () { + _this.props.pathwayActions.export(false); + } + }, "Export"), external_react_default.a.createElement(external_react_bootstrap_["NavDropdown"], { + className: "dropdown-submenu", + eventKey: 1, + title: "Export as", + id: "basic-nav-export" + }, external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + eventKey: 1.1, + onClick: function () { + _this.props.pathwayActions.saveAs("JPEG"); + } + }, "JPEG"), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + eventKey: 1.1, + onClick: function () { + _this.props.pathwayActions.saveAs("PNG"); + } + }, "PNG"), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + eventKey: 1.1, + onClick: function () { + _this.props.pathwayActions.saveAs("SVG"); + } + }, "SVG"), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + eventKey: 1.1, + onClick: function () { + _this.props.pathwayActions.export(true); + } + }, "SIFNX"))), external_react_default.a.createElement(external_react_bootstrap_["NavDropdown"], { + eventKey: 2, + title: "Edit", + id: "basic-nav-edit" + }, external_react_default.a.createElement(external_react_bootstrap_["NavDropdown"], { + id: "add-node-submenu", + className: "dropdown-submenu", + eventKey: 2.1, + title: "Add Node" + }, nodeTypes.map(function (nodeType, index) { + return external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + key: index, + onClick: function () { + _this.props.pathwayActions.addNode(nodeType); + } + }, nodeType); + })), external_react_default.a.createElement(external_react_bootstrap_["NavDropdown"], { + id: "add-edge-submenu", + className: "dropdown-submenu", + eventKey: 2.1, + title: "Add Edge" + }, edgeTypes.map(function (nodeType, i) { + return external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + key: i, + onClick: function () { + _this.props.pathwayActions.addEdge(i); + + _this.props.setActiveEdge(i); + } + }, nodeType); + })), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + eventKey: 1.1, + onClick: function () { + _this.props.pathwayActions.deleteSelected(); + } + }, "Delete Selected"), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + eventKey: 1.1, + onClick: function () { + _this.props.pathwayActions.resizeToContent(); + } + }, "Resize Nodes to Content"), !this.props.pathwayActions.isCollaborative && external_react_default.a.createElement(external_react_default.a.Fragment, null, external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + eventKey: 1.1, + onClick: function () { + _this.props.pathwayActions.undo(); + } + }, "Undo"), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + eventKey: 1.1, + onClick: function () { + _this.props.pathwayActions.redo(); + } + }, "Redo"))), external_react_default.a.createElement(external_react_bootstrap_["NavDropdown"], { + eventKey: 3, + title: "View", + id: "basic-nav-view" + }, external_react_default.a.createElement(external_react_bootstrap_["NavDropdown"], { + id: "align-view-submenu", + className: "dropdown-submenu", + eventKey: 2.1, + title: "Align Selected" + }, external_react_default.a.createElement(external_react_bootstrap_["NavDropdown"], { + id: "align-vertical-submenu", + className: "dropdown-submenu", + eventKey: 2.1, + title: "Vertical" + }, external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + eventKey: 1.1, + onClick: function () { + _this.props.pathwayActions.align("vLeft"); + } + }, "Left"), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + eventKey: 1.1, + onClick: function () { + _this.props.pathwayActions.align("vCen"); + } + }, "Center"), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + eventKey: 1.1, + onClick: function () { + _this.props.pathwayActions.align("vRight"); + } + }, "Right")), external_react_default.a.createElement(external_react_bootstrap_["NavDropdown"], { + id: "align-horizontal-submenu", + className: "dropdown-submenu", + eventKey: 2.1, + title: "Horizontal" + }, external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + eventKey: 1.1, + onClick: function () { + _this.props.pathwayActions.align("hTop"); + } + }, "Top"), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + eventKey: 1.1, + onClick: function () { + _this.props.pathwayActions.align("hMid"); + } + }, "Middle"), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + eventKey: 1.1, + onClick: function () { + _this.props.pathwayActions.align("hBot"); + } + }, "Bottom"))), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + eventKey: 1.1, + onClick: function () { + _this.props.handleOpen(EModalType.GRID); + } + }, "Grid..."), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + eventKey: 1.1, + onClick: function () { + _this.props.pathwayActions.hideSelected(); + } + }, "Hide Selected Nodes"), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + eventKey: 1.1, + onClick: function () { + _this.props.pathwayActions.showAll(); + } + }, "Show All Nodes")), external_react_default.a.createElement(external_react_bootstrap_["NavDropdown"], { + eventKey: 4, + title: "Highlight", + id: "basic-nav-highlight" + }, external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + eventKey: 4.1, + onClick: this.props.pathwayActions.highlightSelected + }, "Highlight Selected"), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + eventKey: 4.1, + onClick: this.props.pathwayActions.highlightNeighbours + }, "Highlight Neighbors Of Selected"), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + eventKey: 4.1, + onClick: this.props.pathwayActions.validateGenes + }, "Identify Invalid Genes"), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + eventKey: 4.1, + onClick: this.props.pathwayActions.removeAllHighlight + }, "Remove All Highlights")), external_react_default.a.createElement(external_react_bootstrap_["NavDropdown"], { + eventKey: 5, + title: "Alteration %", + id: "basic-nav-alteration" + }, external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + eventKey: 5.1, + onClick: function () { + _this.props.pathwayActions.uploadOverlay(); + } + }, "Load From File..."), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + eventKey: 5.1, + onClick: this.props.pathwayActions.loadSampleData + }, "Load Sample Data"), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + eventKey: 5.1, + onClick: function () { + _this.props.handleOpen(EModalType.STUDY); + } + }, "Load cBioPortal Data..."), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + eventKey: 5.1, + onClick: function () { + _this.props.handleOpen(EModalType.PROFILES); + } + }, "View Settings..."), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + eventKey: 5.1, + onClick: this.props.pathwayActions.removeAllData + }, "Remove All Data")), external_react_default.a.createElement(external_react_bootstrap_["NavDropdown"], { + eventKey: 6, + title: "Layout", + id: "basic-nav-layout" + }, external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + eventKey: 6.1, + onClick: this.props.pathwayActions.performLayout + }, "Perform Layout"), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + eventKey: 6.1, + onClick: function () { + _this.props.handleOpen(EModalType.LAYOUT); + } + }, "Layout Properties...")), external_react_default.a.createElement(external_react_bootstrap_["NavDropdown"], { + eventKey: 7, + title: "Help", + id: "basic-nav-help" + }, external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + eventKey: 7.1, + onClick: function () { + _this.props.handleOpen(EModalType.HELP); + } + }, "Quick Help"), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + eventKey: 7.1, + onClick: function () { + window.open("https://github.com/iVis-at-Bilkent/pathway-mapper"); + } + }, "How To Use"), external_react_default.a.createElement(external_react_bootstrap_["MenuItem"], { + eventKey: 7.1, + onClick: function () { + _this.props.handleOpen(EModalType.ABOUT); + } + }, "About"))), external_react_default.a.createElement(external_react_bootstrap_["Nav"], { + pullRight: true + }, external_react_default.a.createElement(external_react_bootstrap_["Navbar"].Brand, null, external_react_default.a.createElement("a", { + href: "#" + }, "PathwayMapper")))); } }); - return ViewOperationsManager; -}(); - -/* harmony default export */ var managers_ViewOperationsManager = (ViewOperationsManager); -// CONCATENATED MODULE: ./src/modals/QuickHelpModal.tsx -var QuickHelpModal_extends = undefined && undefined.__extends || function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || { - __proto__: [] - } instanceof Array && function (d, b) { - d.__proto__ = b; - } || function (d, b) { - for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; - }; - - return extendStatics(d, b); - }; - - return function (d, b) { - extendStatics(d, b); - - function __() { - this.constructor = d; - } - - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -}(); - - + return Menubar; +}(external_react_default.a.Component); +/* harmony default export */ var ui_Menubar = (Menubar_Menubar); +// EXTERNAL MODULE: ./src/css/supp.css +var supp = __webpack_require__(75); +// EXTERNAL MODULE: ./src/images/edges/activates.svg +var activates = __webpack_require__(47); +var activates_default = /*#__PURE__*/__webpack_require__.n(activates); -var QuickHelpModal_QuickHelpModal = -/** @class */ -function (_super) { - QuickHelpModal_extends(QuickHelpModal, _super); +// EXTERNAL MODULE: ./src/images/edges/binds.svg +var binds = __webpack_require__(48); +var binds_default = /*#__PURE__*/__webpack_require__.n(binds); - function QuickHelpModal(props) { - return _super.call(this, props) || this; - } +// EXTERNAL MODULE: ./src/images/edges/induces.svg +var induces = __webpack_require__(49); +var induces_default = /*#__PURE__*/__webpack_require__.n(induces); - Object.defineProperty(QuickHelpModal.prototype, "render", { - enumerable: false, - configurable: true, - writable: true, - value: function () { - var _this = this; +// EXTERNAL MODULE: ./src/images/edges/inhibits.svg +var inhibits = __webpack_require__(50); +var inhibits_default = /*#__PURE__*/__webpack_require__.n(inhibits); - return external_react_default.a.createElement(external_react_bootstrap_["Modal"], { - id: "quickHelpModal", - show: this.props.isModalShown, - onHide: function () { - _this.props.handleClose(EModalType.HELP); - } - }, external_react_default.a.createElement(external_react_bootstrap_["Modal"].Header, { - closeButton: true - }, external_react_default.a.createElement(external_react_bootstrap_["Modal"].Title, null, external_react_default.a.createElement("h3", null, "Quick Help"))), external_react_default.a.createElement(external_react_bootstrap_["Modal"].Body, null, external_react_default.a.createElement("ul", { - className: "leftText" - }, external_react_default.a.createElement("li", null, external_react_default.a.createElement("strong", null, "To add a node:"), " Drag and drop from node palette"), external_react_default.a.createElement("li", null, external_react_default.a.createElement("strong", null, "To add an interaction:"), " Click on interaction type; then click on small circle on source node and release on target node"), external_react_default.a.createElement("li", null, external_react_default.a.createElement("strong", null, "To add a node into a container (family, complex, compartment or process):"), " Drag the node into its container node or select nodes to be contained and right click on container node and choose \"Add Selected Into This\""), external_react_default.a.createElement("li", null, external_react_default.a.createElement("strong", null, "To delete nodes/interactions:"), " Select and perform Edit > Delete Selected"), external_react_default.a.createElement("li", null, external_react_default.a.createElement("strong", null, "To overlay experiment data:"), " Select Alteration % > Load From cBioPortal...")))); - } - }); - return QuickHelpModal; -}(external_react_default.a.Component); +// EXTERNAL MODULE: ./src/images/edges/represses.svg +var represses = __webpack_require__(51); +var represses_default = /*#__PURE__*/__webpack_require__.n(represses); -/* harmony default export */ var modals_QuickHelpModal = (QuickHelpModal_QuickHelpModal); -// CONCATENATED MODULE: ./src/modals/CBioHelpModal.tsx -var CBioHelpModal_extends = undefined && undefined.__extends || function () { +// CONCATENATED MODULE: ./src/ui/Sidebar.tsx +var Sidebar_extends = undefined && undefined.__extends || function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || { __proto__: [] @@ -17581,298 +17813,171 @@ var CBioHelpModal_extends = undefined && undefined.__extends || function () { }; }(); +var Sidebar_decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { + var c = arguments.length, + r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, + d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; - // @ts-ignore - // @ts-ignore // @ts-ignore // @ts-ignore -var CBioHelpModal_addSelImage = __webpack_require__(23); // @ts-ignore - - -var CBioHelpModal_addAllImage = __webpack_require__(24); // @ts-ignore - - - // https://github.com/cBioPortal/cbioportal-frontend/blob/29a93c5e992ca1affd3d027355015164ae3602bd/src/shared/lib/Colors.ts + // @ts-ignore -var CNA_COLOR_AMP = '#ff0000'; -var CNA_COLOR_GAIN = '#ffb6c1'; -var CNA_COLOR_HETLOSS = '#8fd8d8'; -var CNA_COLOR_HOMDEL = '#0000ff'; -var DEFAULT_GREY = '#bebebe'; -var MRNA_COLOR_HIGH = '#ff9999'; -var MRNA_COLOR_LOW = '#6699cc'; -var MUT_COLOR_MISSENSE = '#008000'; -var MUT_COLOR_MISSENSE_PASSENGER = '#53D400'; -var MUT_COLOR_INFRAME = '#993404'; -var MUT_COLOR_INFRAME_PASSENGER = '#a68028'; -var MUT_COLOR_TRUNC = '#000000'; -var MUT_COLOR_TRUNC_PASSENGER = '#708090'; -var MUT_COLOR_FUSION = '#8B00C9'; -var MUT_COLOR_PROMOTER = '#00B7CE'; -var MUT_COLOR_OTHER = '#cf58bc'; -var MUT_COLOR_GERMLINE = '#FFFFFF'; -var PROT_COLOR_HIGH = '#ff3df8'; -var PROT_COLOR_LOW = '#00E1FF'; // always used shape + // @ts-ignore -var defaultShape = { - type: 'rectangle', - fill: DEFAULT_GREY, - x: 0, - y: 0, - width: 6, - height: 20, - stroke: 'rgba(0,0,0,0)', - 'stroke-width': 0 -}; -var labels = ['Amplification', 'Deep Deletion', 'Fusion', 'Germline Mutation', 'Missense Mutation (putative driver)', 'Missense Mutation (unknown significance)', 'Other Mutation', 'Promoter Mutation', 'Truncating Mutation (putative driver)', 'Truncating Mutation (unknown significance)', 'Inframe Mutation (putative driver)', 'Inframe Mutation (unknown significance)']; // conditional shapes + // @ts-ignore -var shapeBank = [{ - type: 'rectangle', - fill: CNA_COLOR_AMP, - x: 0, - y: 0, - width: 6, - height: 20 -}, { - type: 'rectangle', - fill: CNA_COLOR_HOMDEL, - x: 0, - y: 0, - width: 6, - height: 20 -}, { - type: 'rectangle', - fill: MUT_COLOR_FUSION, - x: 0, - y: 4, - width: 6, - height: 12 -}, { - type: 'rectangle', - fill: MUT_COLOR_GERMLINE, - x: 0, - y: 8.75, - width: 6, - height: 1.6 -}, { - type: 'rectangle', - fill: MUT_COLOR_MISSENSE, - x: 0, - y: 6.66, - width: 6, - height: 6.66 -}, { - type: 'rectangle', - fill: MUT_COLOR_MISSENSE_PASSENGER, - x: 0, - y: 6.66, - width: 6, - height: 6.66 -}, { - type: 'rectangle', - fill: MUT_COLOR_OTHER, - x: 0, - y: 6.66, - width: 6, - height: 6.66 -}, { - type: 'rectangle', - fill: MUT_COLOR_PROMOTER, - x: 0, - y: 6.66, - width: 6, - height: 6.66 -}, { - type: 'rectangle', - fill: MUT_COLOR_TRUNC, - x: 0, - y: 6.66, - width: 6, - height: 6.66 -}, { - type: 'rectangle', - fill: MUT_COLOR_TRUNC_PASSENGER, - x: 0, - y: 6.66, - width: 6, - height: 6.66 -}, { - type: 'rectangle', - fill: MUT_COLOR_INFRAME, - x: 0, - y: 6.66, - width: 6, - height: 6.66 -}, { - type: 'rectangle', - fill: MUT_COLOR_INFRAME_PASSENGER, - x: 0, - y: 6.66, - width: 6, - height: 6.66 -}]; -var CBioHelpModal_CBioHelpModal = + + +var Sidebar_Sidebar = /** @class */ function (_super) { - CBioHelpModal_extends(CBioHelpModal, _super); + Sidebar_extends(Sidebar, _super); - function CBioHelpModal(props) { + function Sidebar(props) { var _this = _super.call(this, props) || this; - console.log("CBioModal", _this.props.patientView); + Object.defineProperty(_this, "activeEdge", { + enumerable: true, + configurable: true, + writable: true, + value: -1 + }); + Object(external_mobx_["makeObservable"])(_this); + props.setActiveEdgeHandler(_this.setActiveEdge); return _this; } - Object.defineProperty(CBioHelpModal.prototype, "generateOncoprintLegend", { + Object.defineProperty(Sidebar.prototype, "addEdge", { enumerable: false, configurable: true, writable: true, - value: function () { - var svgNameSpace = 'http://www.w3.org/2000/svg'; - var svgElement = document.createElementNS(svgNameSpace, 'svg'); - var legendEleWidth = 280; - var cellWidth = 6; - var cellHeight = 23; - var cellVerticalPadding = 15; - var cellMarginRight = cellWidth + 3; - shapeBank.forEach(function (shape, index) { - var offsetX = index % 3 * legendEleWidth; - var textOffsetX = offsetX + cellMarginRight; - var offsetY = Math.floor(index / 3) * (cellHeight + cellVerticalPadding); - var textOffsetY = offsetY + 15; - var g = document.createElementNS(svgNameSpace, 'g'); - - if (!shape["stroke"]) { - shape["stroke"] = 'rgba(0,0,0,0)'; - shape["stroke-width"] = 0; - } - - g.appendChild(Object(external_oncoprintjs_["shapeToSvg"])(defaultShape, offsetX, offsetY)); - g.appendChild(Object(external_oncoprintjs_["shapeToSvg"])(shape, offsetX, offsetY)); - var text = document.createElementNS(svgNameSpace, 'text'); - text.setAttributeNS(null, 'x', textOffsetX.toString()); - text.setAttributeNS(null, 'y', textOffsetY.toString()); - text.setAttributeNS(null, 'font-size', '12'); - text.setAttributeNS(null, 'font-family', 'Arial'); - var textNode = document.createTextNode(labels[index]); - text.appendChild(textNode); - g.appendChild(text); - svgElement.appendChild(g); - }); - svgElement.setAttribute('width', '840'); - svgElement.setAttribute('height', '175'); - svgElement.style.paddingTop = '20px'; // This is important you need to include this to succesfully render in cytoscape.js! + value: function (edgeIndex) { + if (edgeIndex === this.activeEdge) { + this.setActiveEdge(-1); + this.props.pathwayActions.addEdge(-1); + return; + } - svgElement.setAttribute('xmlns', svgNameSpace); - return svgElement; + this.setActiveEdge(edgeIndex); + this.props.pathwayActions.addEdge(edgeIndex); } }); - Object.defineProperty(CBioHelpModal.prototype, "render", { + Object.defineProperty(Sidebar.prototype, "setActiveEdge", { + enumerable: false, + configurable: true, + writable: true, + value: function (edgeIndex) { + this.activeEdge = edgeIndex; + } + }); + Object.defineProperty(Sidebar.prototype, "render", { enumerable: false, configurable: true, writable: true, value: function () { var _this = this; - var legendPadding = '45px'; - return external_react_default.a.createElement(external_react_bootstrap_["Modal"], { - bsSize: "lg", - id: "cBioHelpModal", - className: "pathwayMapper", - show: this.props.isModalShown, - onHide: function () { - _this.props.handleClose(EModalType.CHELP); + var edgeTypes = ["Activates", "Inhibits", "Induces", "Represses", "Binds"]; + var edgeImgs = [activates_default.a, inhibits_default.a, induces_default.a, represses_default.a, binds_default.a]; + var nodeIds = ["simpleNodeDiv", "familyNodeDiv", "complexNodeDiv", "compartmentNodeDiv", "processNodeDiv"]; + return external_react_default.a.createElement("div", { + id: "pathway-sidebar", + className: "sideBarWrapper" + }, external_react_default.a.createElement(external_react_bootstrap_["Panel"], { + className: "pnl" + }, external_react_default.a.createElement(external_react_bootstrap_["Panel"].Heading, { + className: "pnl-header" + }, "Network"), external_react_default.a.createElement(external_react_bootstrap_["Panel"].Body, { + className: "pnl-body pathwayPanel" + }, external_react_default.a.createElement("div", { + className: "buttonContainer" + }, external_react_default.a.createElement(external_react_bootstrap_["Button"], { + onClick: function () { + _this.props.handleOpen(EModalType.PW_DETAILS); } - }, external_react_default.a.createElement(external_react_bootstrap_["Modal"].Header, { - closeButton: true - }, external_react_default.a.createElement(external_react_bootstrap_["Modal"].Title, null, "PathwayMapper cBioPortal Edition 2.0")), !this.props.patientView && external_react_default.a.createElement(external_react_bootstrap_["Modal"].Body, null, external_react_default.a.createElement("p", { - className: "leftText" - }, "PathwayMapper shows you your genes of interest with the alteration frequencies of selected genetic profiles of the chosen study overlaid on a TCGA pathway using a white to red color scale (the more frequently altered a gene is, the more red it's shown). All available TCGA pathways are ranked with the aim to choose the pathway that matches your interest the most. By default we display the pathway with highest ranking with the default ranking options but you may look at your genes of interest in the context of other pathways as well by choosing from the pathway table.", external_react_default.a.createElement("br", null), external_react_default.a.createElement("br", null), "Refer to the documentation ", external_react_default.a.createElement("a", { - href: "https://github.com/iVis-at-Bilkent/pathway-mapper", - target: "_blank" - }, "here"), " for the notation used.", external_react_default.a.createElement("br", null), external_react_default.a.createElement("br", null), "To search for a particular pathway of your interest, use the search field on top of the pathway table. To switch to another pathway, click on the button in the associated row of the pathway table. Ranking criteria might be changed by changing the options at the bottom of the table.", external_react_default.a.createElement("br", null), external_react_default.a.createElement("br", null), "The buttons on top of the pathway are:", external_react_default.a.createElement("ul", null, external_react_default.a.createElement("table", { - cellPadding: 5 - }, external_react_default.a.createElement("tr", null, external_react_default.a.createElement("td", null, external_react_default.a.createElement("img", { - height: "22px", - width: "22px", - src: save_png_default.a - })), " ", external_react_default.a.createElement("td", null, "Save as PNG")), external_react_default.a.createElement("tr", null, external_react_default.a.createElement("td", null, external_react_default.a.createElement("img", { - height: "22px", - width: "22px", - src: save_svg_default.a - })), " ", external_react_default.a.createElement("td", null, "Save as SVG")), external_react_default.a.createElement("tr", null, external_react_default.a.createElement("td", null, external_react_default.a.createElement("img", { - height: "22px", - width: "22px", - src: layout_cose_default.a - })), " ", external_react_default.a.createElement("td", null, "Perform layout: Layout is recalculated taking current node positions into account")), external_react_default.a.createElement("tr", null, external_react_default.a.createElement("td", null, external_react_default.a.createElement("img", { - height: "22px", - width: "22px", - src: CBioHelpModal_addSelImage - })), " ", external_react_default.a.createElement("td", null, "Add selected genes to query: You may select additional genes from the pathway by left clicking (Shift + left click to add more genes)")), external_react_default.a.createElement("tr", null, external_react_default.a.createElement("td", null, external_react_default.a.createElement("img", { - height: "22px", - width: "22px", - src: CBioHelpModal_addAllImage - })), " ", external_react_default.a.createElement("td", null, "Add all valid genes to query: All valid gene symbols will be added to the query; others will be ignored")), external_react_default.a.createElement("tr", null, external_react_default.a.createElement("td", null, external_react_default.a.createElement("img", { - height: "22px", - width: "22px", - src: edit_default.a - })), " ", external_react_default.a.createElement("td", null, "Edit pathway: Edit both the topology and the geometry of the current pathway with the full blown PathwayMapper editor")))))), ",", this.props.patientView && external_react_default.a.createElement(external_react_bootstrap_["Modal"].Body, null, external_react_default.a.createElement("p", { - className: "leftText" - }, "PathwayMapper shows you your genes of interest with the mutation types, copy number alterations and fusions of selected genetic profiles of the chosen study overlaid on a TCGA pathway using the OncoPrint color scheme. All available TCGA pathways are ranked with the aim to choose the pathway that matches your interest the most. By default we display the pathway with the highest number of genes of interest matching the ones in a pathway but you may look at your genes of interest in the context of other pathways as well by choosing from the pathway table.", external_react_default.a.createElement("br", null), external_react_default.a.createElement("br", null), "Refer to the documentation ", external_react_default.a.createElement("a", { - href: "https://github.com/iVis-at-Bilkent/pathway-mapper", - target: "_blank" - }, "here"), " for the notation used.", external_react_default.a.createElement("br", null), external_react_default.a.createElement("br", null), "Genetic alteration legend:", external_react_default.a.createElement("br", null), external_react_default.a.createElement("div", { - className: "container", - style: { - paddingLeft: legendPadding, - width: 'fit-content' - }, - dangerouslySetInnerHTML: { - __html: this.generateOncoprintLegend().outerHTML + }, "Properties")), external_react_default.a.createElement("div", { + className: "buttonContainer" + }, external_react_default.a.createElement(external_react_bootstrap_["Button"], { + onClick: function () { + _this.props.pathwayActions.upload(); } - }), external_react_default.a.createElement("p", { - style: { - paddingLeft: legendPadding + }, "Import")), external_react_default.a.createElement("div", { + className: "buttonContainer" + }, external_react_default.a.createElement(external_react_bootstrap_["Button"], { + onClick: function () { + _this.props.pathwayActions.export(false); } - }, "Putative driver and unknown significance annotations are based on data from OncoKB and CancerHotspots.org."), external_react_default.a.createElement("br", null), "To search for a particular pathway of your interest, use the search field on top of the pathway table. To switch to another pathway, click on the button in the associated row of the pathway table.", external_react_default.a.createElement("br", null), external_react_default.a.createElement("br", null), "The buttons on top of the pathway are:", external_react_default.a.createElement("ul", null, external_react_default.a.createElement("table", { - cellPadding: 5 - }, external_react_default.a.createElement("tr", null, external_react_default.a.createElement("td", null, external_react_default.a.createElement("img", { - height: "22px", - width: "22px", - src: save_png_default.a - })), " ", external_react_default.a.createElement("td", null, "Save as PNG")), external_react_default.a.createElement("tr", null, external_react_default.a.createElement("td", null, external_react_default.a.createElement("img", { - height: "22px", - width: "22px", - src: save_svg_default.a - })), " ", external_react_default.a.createElement("td", null, "Save as SVG")), external_react_default.a.createElement("tr", null, external_react_default.a.createElement("td", null, external_react_default.a.createElement("img", { - height: "22px", - width: "22px", - src: layout_cose_default.a - })), " ", external_react_default.a.createElement("td", null, "Perform layout: Layout is recalculated taking current node positions into account"))))))); + }, "Export")))), external_react_default.a.createElement(external_react_bootstrap_["Panel"], { + className: "pnl" + }, external_react_default.a.createElement(external_react_bootstrap_["Panel"].Heading, { + className: "pnl-header" + }, "Node Palette"), external_react_default.a.createElement(external_react_bootstrap_["Panel"].Body, { + className: "pnl-body" + }, nodeIds.map(function (id) { + return external_react_default.a.createElement("div", { + key: id, + id: id, + "data-tip": "Click on this and drag to the location on drawing canvas and release!", + "data-effect": "solid", + "data-place": "bottom", + "data-delay-show": "1000", + className: "dragButtonContainer" + }); + }))), external_react_default.a.createElement(external_react_bootstrap_["Panel"], { + className: "pnl edgePanel" + }, external_react_default.a.createElement(external_react_bootstrap_["Panel"].Heading, { + className: "pnl-header" + }, "Interaction Palette"), external_react_default.a.createElement(external_react_bootstrap_["Panel"].Body, { + className: "pnl-body edgePaletteWrapper" + }, external_react_default.a.createElement("div", { + className: "list-group edge-palette" + }, edgeTypes.map(function (edgeType, i) { + return external_react_default.a.createElement("div", { + key: i, + "data-tip": "Click to activate; then, start the interaction from the little circle on the source node!", + "data-effect": "solid", + "data-place": "bottom", + "data-delay-show": "1000" + }, external_react_default.a.createElement("a", { + style: { + marginBottom: "5px" + }, + className: "list-group-item " + (_this.activeEdge === i ? "active" : ""), + onClick: function () { + _this.addEdge(i); + }, + href: "#" + }, external_react_default.a.createElement("img", { + style: { + width: "30px" + }, + className: "pull-left", + src: edgeImgs[i] + }), ' ', edgeType)); + }))))); } }); - return CBioHelpModal; -}(external_react_default.a.Component); -/* harmony default export */ var modals_CBioHelpModal = (CBioHelpModal_CBioHelpModal); -// EXTERNAL MODULE: ./src/css/pmv1.css -var pmv1 = __webpack_require__(80); + Sidebar_decorate([external_mobx_["observable"]], Sidebar.prototype, "activeEdge", void 0); -// EXTERNAL MODULE: ./src/css/pmv2.css -var pmv2 = __webpack_require__(82); + Sidebar_decorate([external_mobx_["action"].bound], Sidebar.prototype, "setActiveEdge", null); -// EXTERNAL MODULE: ./src/css/qtip.css -var qtip = __webpack_require__(84); + Sidebar = Sidebar_decorate([external_mobx_react_["observer"]], Sidebar); + return Sidebar; +}(external_react_default.a.Component); +/* harmony default export */ var ui_Sidebar = (Sidebar_Sidebar); // CONCATENATED MODULE: ./src/ui/react-pathway-mapper.tsx -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EModalType", function() { return EModalType; }); var react_pathway_mapper_extends = undefined && undefined.__extends || function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || { @@ -17938,7 +18043,7 @@ var react_pathway_mapper_decorate = undefined && undefined.__decorate || functio -var maxHeapFn = __webpack_require__(73); +var maxHeapFn = __webpack_require__(76); var maxHeap = maxHeapFn(); var EModalType; @@ -18137,6 +18242,22 @@ function (_super) { this.editor = editor; } }); + Object.defineProperty(PathwayMapper.prototype, "addProfile", { + enumerable: false, + configurable: true, + writable: true, + value: function (profile) { + this.profiles.push(profile); + } + }); + Object.defineProperty(PathwayMapper.prototype, "toggleProfileEnabled", { + enumerable: false, + configurable: true, + writable: true, + value: function (index) { + this.profiles[index].enabled = !this.profiles[index].enabled; + } + }); Object.defineProperty(PathwayMapper.prototype, "calculateAlterationData", { enumerable: false, configurable: true, @@ -18374,7 +18495,7 @@ function (_super) { }; }); redirectedProfiles.forEach(function (redirectedProfile) { - _this.profiles.push(redirectedProfile); + _this.addProfile(redirectedProfile); }); this.editor.addPortalGenomicData(this.props.alterationData, this.editor.getEmptyGroupID()); } @@ -18425,7 +18546,7 @@ function (_super) { continue; } - this.profiles.push({ + this.addProfile({ studyId: selectedStudyData[0], profileId: dataTypes[dataType].profile, enabled: true @@ -18487,14 +18608,14 @@ function (_super) { width: window.innerWidth * 0.99 } : {}, className: isCBioPortal ? "cBioMode container" : "customMargins" - }, !isCBioPortal && [external_react_default.a.createElement("div", null, external_react_default.a.createElement(ui_Menubar, { + }, !isCBioPortal && external_react_default.a.createElement(external_react_default.a.Fragment, null, external_react_default.a.createElement("div", null, external_react_default.a.createElement(ui_Menubar, { pathwayActions: this.pathwayActions, handleOpen: this.handleOpen, setActiveEdge: this.setActiveEdge })), external_react_default.a.createElement("div", null, external_react_default.a.createElement(ui_Buttonbar, { pathwayActions: this.pathwayActions, handleOpen: this.handleOpen - }))], isCBioPortal && external_react_default.a.createElement(external_react_bootstrap_["Row"], { + }))), isCBioPortal && external_react_default.a.createElement(external_react_bootstrap_["Row"], { style: { marginBottom: "6px" } @@ -18570,7 +18691,8 @@ function (_super) { profiles: this.profiles, editor: this.editor, isModalShown: this.isModalShown[EModalType.PROFILES], - handleClose: this.handleClose + handleClose: this.handleClose, + handleProfileLabelClicked: this.toggleProfileEnabled }), external_react_default.a.createElement(modals_PathwayDetailsModal, { isModalShown: this.isModalShown[EModalType.PW_DETAILS], handleClose: this.handleClose, @@ -18596,13 +18718,13 @@ function (_super) { }), external_react_default.a.createElement(modals_AboutModal, { isModalShown: this.isModalShown[EModalType.ABOUT], handleClose: this.handleClose - })), !this.props.isCBioPortal && [external_react_default.a.createElement(modals_StudyModal, { + })), !this.props.isCBioPortal && external_react_default.a.createElement(external_react_default.a.Fragment, null, external_react_default.a.createElement(modals_StudyModal, { isModalShown: this.isModalShown[EModalType.STUDY], loadFromCBio: this.loadFromCBio, handleClose: this.handleClose }), external_react_default.a.createElement(external_react_toastify_["ToastContainer"], { className: "pm-toast-container" - })], external_react_default.a.createElement(external_react_tooltip_default.a, { + })), external_react_default.a.createElement(external_react_tooltip_default.a, { className: isCBioPortal ? "" : "pmTip", style: { maxWidth: "350px", @@ -18754,6 +18876,10 @@ function (_super) { react_pathway_mapper_decorate([external_mobx_["action"]], PathwayMapper.prototype, "setEditor", null); + react_pathway_mapper_decorate([external_mobx_["action"]], PathwayMapper.prototype, "addProfile", null); + + react_pathway_mapper_decorate([external_mobx_["action"]], PathwayMapper.prototype, "toggleProfileEnabled", null); + react_pathway_mapper_decorate([external_autobind_decorator_default.a], PathwayMapper.prototype, "includePathway", null); react_pathway_mapper_decorate([external_mobx_["computed"]], PathwayMapper.prototype, "profileEnabledMap", null); @@ -18778,36 +18904,6 @@ function (_super) { /* harmony default export */ var react_pathway_mapper = __webpack_exports__["default"] = (react_pathway_mapper_PathwayMapper); -/***/ }), -/* 75 */ -/***/ (function(module, exports) { - -// removed by extract-text-webpack-plugin - -/***/ }), -/* 76 */, -/* 77 */, -/* 78 */, -/* 79 */, -/* 80 */ -/***/ (function(module, exports) { - -// removed by extract-text-webpack-plugin - -/***/ }), -/* 81 */, -/* 82 */ -/***/ (function(module, exports) { - -// removed by extract-text-webpack-plugin - -/***/ }), -/* 83 */, -/* 84 */ -/***/ (function(module, exports) { - -// removed by extract-text-webpack-plugin - /***/ }) /******/ ]); //# sourceMappingURL=react-pathway-mapper.es5.js.map \ No newline at end of file diff --git a/dist/react-pathway-mapper.es5.js.map b/dist/react-pathway-mapper.es5.js.map index 2aeee0da..bff32ab5 100644 --- a/dist/react-pathway-mapper.es5.js.map +++ b/dist/react-pathway-mapper.es5.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://react-pathway-mapper/webpack/bootstrap","webpack://react-pathway-mapper/external \"react\"","webpack://react-pathway-mapper/external \"react-bootstrap\"","webpack://react-pathway-mapper/external \"jquery\"","webpack://react-pathway-mapper/external \"mobx\"","webpack://react-pathway-mapper/external \"autobind-decorator\"","webpack://react-pathway-mapper/external \"mobx-react\"","webpack://react-pathway-mapper/external \"cytoscape\"","webpack://react-pathway-mapper/./src/images/toolbar/layout-cose.svg","webpack://react-pathway-mapper/external \"underscore\"","webpack://react-pathway-mapper/external \"react-toastify\"","webpack://react-pathway-mapper/external \"oncoprintjs\"","webpack://react-pathway-mapper/./src/images/toolbar/save_png.svg","webpack://react-pathway-mapper/./src/images/toolbar/save_svg.svg","webpack://react-pathway-mapper/external \"lodash\"","webpack://react-pathway-mapper/external \"file-saver\"","webpack://react-pathway-mapper/./src/images/toolbar/edit.svg","webpack://react-pathway-mapper/./src/images/nodes/gene.svg","webpack://react-pathway-mapper/./src/images/nodes/family.svg","webpack://react-pathway-mapper/./src/images/nodes/complex.svg","webpack://react-pathway-mapper/./src/images/nodes/compartment.svg","webpack://react-pathway-mapper/./src/images/nodes/process.svg","webpack://react-pathway-mapper/./src/images/toolbar/about.svg","webpack://react-pathway-mapper/./src/images/toolbar/add-selected.svg","webpack://react-pathway-mapper/./src/images/toolbar/add-all.svg","webpack://react-pathway-mapper/external \"mousetrap\"","webpack://react-pathway-mapper/./node_modules/cytoscape-node-resize/resizeCue.svg","webpack://react-pathway-mapper/./src/images/edges/activates.svg","webpack://react-pathway-mapper/./src/images/edges/inhibits.svg","webpack://react-pathway-mapper/./src/images/edges/induces.svg","webpack://react-pathway-mapper/./src/images/edges/represses.svg","webpack://react-pathway-mapper/./src/images/edges/binds.svg","webpack://react-pathway-mapper/./src/images/toolbar/load.svg","webpack://react-pathway-mapper/./src/images/toolbar/new.svg","webpack://react-pathway-mapper/./src/images/toolbar/save.svg","webpack://react-pathway-mapper/./src/images/toolbar/delete-simple.svg","webpack://react-pathway-mapper/./src/images/toolbar/undo.svg","webpack://react-pathway-mapper/./src/images/toolbar/redo.svg","webpack://react-pathway-mapper/./src/images/toolbar/align/align-horizontal-top.svg","webpack://react-pathway-mapper/./src/images/toolbar/align/align-horizontal-middle.svg","webpack://react-pathway-mapper/./src/images/toolbar/align/align-horizontal-bottom.svg","webpack://react-pathway-mapper/./src/images/toolbar/align/align-vertical-left.svg","webpack://react-pathway-mapper/./src/images/toolbar/align/align-vertical-center.svg","webpack://react-pathway-mapper/./src/images/toolbar/align/align-vertical-right.svg","webpack://react-pathway-mapper/./src/images/toolbar/grid.svg","webpack://react-pathway-mapper/./src/images/toolbar/guidelines.svg","webpack://react-pathway-mapper/./src/images/toolbar/hide-selected.svg","webpack://react-pathway-mapper/./src/images/toolbar/show-all.svg","webpack://react-pathway-mapper/./src/images/toolbar/portal.svg","webpack://react-pathway-mapper/./src/images/toolbar/settings.svg","webpack://react-pathway-mapper/./src/images/toolbar/layout-properties.svg","webpack://react-pathway-mapper/./src/images/toolbar/quick-help.svg","webpack://react-pathway-mapper/external \"react-tooltip\"","webpack://react-pathway-mapper/external \"jquery-ui-dist/jquery-ui\"","webpack://react-pathway-mapper/external \"sharedb/lib/client\"","webpack://react-pathway-mapper/external \"cytoscape-edgehandles\"","webpack://react-pathway-mapper/./node_modules/cytoscape-edge-editing/cytoscape-edge-editing.js","webpack://react-pathway-mapper/external \"cytoscape-cose-bilkent\"","webpack://react-pathway-mapper/./node_modules/cytoscape-node-resize/cytoscape-node-resize.js","webpack://react-pathway-mapper/external \"cytoscape-undo-redo\"","webpack://react-pathway-mapper/external \"cytoscape-panzoom\"","webpack://react-pathway-mapper/./src/utils/GraphStyleSheet.tsx","webpack://react-pathway-mapper/./src/utils/PanzoomOptions.tsx","webpack://react-pathway-mapper/external \"cytoscape-navigator\"","webpack://react-pathway-mapper/./node_modules/cytoscape-context-menus/cytoscape-context-menus.js","webpack://react-pathway-mapper/external \"konva\"","webpack://react-pathway-mapper/./node_modules/cytoscape-view-utilities/src/index.js","webpack://react-pathway-mapper/./node_modules/cytoscape-view-utilities/src/undo-redo.js","webpack://react-pathway-mapper/./node_modules/cytoscape-view-utilities/src/view-utilities.js","webpack://react-pathway-mapper/external \"cytoscape-grid-guide\"","webpack://react-pathway-mapper/external \"cytoscape-qtip\"","webpack://react-pathway-mapper/./src/images/about/i-vis.png","webpack://react-pathway-mapper/./src/images/about/mskcc.png","webpack://react-pathway-mapper/external \"@datastructures-js/max-heap\"","webpack://react-pathway-mapper/./src/ui/Toolbar.tsx","webpack://react-pathway-mapper/./src/utils/GraphUtilities.tsx","webpack://react-pathway-mapper/./src/utils/SVGExporter.ts","webpack://react-pathway-mapper/./src/managers/GenomicDataOverlayManager.ts","webpack://react-pathway-mapper/./src/modals/LayoutProperties.tsx","webpack://react-pathway-mapper/./src/managers/EditorActionsManager.tsx","webpack://react-pathway-mapper/./src/utils/DragDropNodeAddPlugin.tsx","webpack://react-pathway-mapper/./src/managers/ContextMenuManager.tsx","webpack://react-pathway-mapper/./src/managers/QtipManager.tsx","webpack://react-pathway-mapper/./src/managers/ShareDBManager.tsx","webpack://react-pathway-mapper/./src/utils/CBioPortalAccessor.tsx","webpack://react-pathway-mapper/./src/utils/SaveLoadUtility.tsx","webpack://react-pathway-mapper/./src/ui/CytoscapeArea.tsx","webpack://react-pathway-mapper/./src/ui/Ranking.tsx","webpack://react-pathway-mapper/./src/managers/FileOperationsManager.tsx","webpack://react-pathway-mapper/./src/modals/ConfirmationModal.tsx","webpack://react-pathway-mapper/./src/ui/Menubar.tsx","webpack://react-pathway-mapper/./src/managers/GridOptionsManager.tsx","webpack://react-pathway-mapper/./src/modals/GridSettings.tsx","webpack://react-pathway-mapper/./src/utils/PathwayActions.ts","webpack://react-pathway-mapper/./src/ui/Sidebar.tsx","webpack://react-pathway-mapper/./src/modals/StudyModal.tsx","webpack://react-pathway-mapper/./src/ui/Buttonbar.tsx","webpack://react-pathway-mapper/./src/modals/ProfilesModal.tsx","webpack://react-pathway-mapper/./src/modals/AboutModal.tsx","webpack://react-pathway-mapper/./src/modals/PathwayDetailsModal.tsx","webpack://react-pathway-mapper/./src/managers/ViewOperationsManager.tsx","webpack://react-pathway-mapper/./src/modals/QuickHelpModal.tsx","webpack://react-pathway-mapper/./src/modals/CBioHelpModal.tsx","webpack://react-pathway-mapper/./src/ui/react-pathway-mapper.tsx","webpack://react-pathway-mapper/./src/css/supp.css","webpack://react-pathway-mapper/./src/css/pmv1.css","webpack://react-pathway-mapper/./src/css/pmv2.css","webpack://react-pathway-mapper/./src/css/qtip.css"],"names":[],"mappings":";;AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAA0C,gCAAgC;AAC1E;AACA;;AAEA;AACA;AACA;AACA,gEAAwD,kBAAkB;AAC1E;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAyC,iCAAiC;AAC1E,wHAAgH,mBAAmB,EAAE;AACrI;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;;AAGA;AACA;;;;;;;AClFA,kC;;;;;;ACAA,4C;;;;;;ACAA,mC;;;;;;ACAA,iC;;;;;;ACAA,+C;;;;;;ACAA,uC;;;;;;ACAA,sC;;;;;;;;;;;;ACAA,qCAAqC,4oF;;;;;;ACArC,uC;;;;;;ACAA,2C;;;;;;ACAA,wC;;;;;;ACAA,qCAAqC,g/G;;;;;;ACArC,qCAAqC,g6G;;;;;;ACArC,mC;;;;;;ACAA,uC;;;;;;ACAA,qCAAqC,gf;;;;;;ACArC,qCAAqC,onH;;;;;;ACArC,qCAAqC,4nH;;;;;;ACArC,qCAAqC,onH;;;;;;ACArC,qCAAqC,ooH;;;;;;ACArC,qCAAqC,4hG;;;;;;ACArC,qCAAqC,ogF;;;;;;ACArC,qCAAqC,4nG;;;;;;ACArC,qCAAqC,wkD;;;;;;ACArC,sC;;;;;;ACAA,qCAAqC,wiC;;;;;;ACArC,qCAAqC,4zK;;;;;;ACArC,qCAAqC,gvK;;;;;;ACArC,qCAAqC,41K;;;;;;ACArC,qCAAqC,gwK;;;;;;ACArC,qCAAqC,grI;;;;;;ACArC,qCAAqC,osE;;;;;;ACArC,qCAAqC,ouG;;;;;;ACArC,qCAAqC,w8E;;;;;;ACArC,qCAAqC,w4J;;;;;;ACArC,qCAAqC,wxI;;;;;;ACArC,qCAAqC,g3I;;;;;;ACArC,qCAAqC,osC;;;;;;ACArC,qCAAqC,wvC;;;;;;ACArC,qCAAqC,orC;;;;;;ACArC,qCAAqC,wtC;;;;;;ACArC,qCAAqC,gvC;;;;;;ACArC,qCAAqC,otC;;;;;;ACArC,qCAAqC,g7E;;;;;;ACArC,qCAAqC,w+E;;;;;;ACArC,qCAAqC,4sD;;;;;;ACArC,qCAAqC,o+C;;;;;;ACArC,qCAAqC,43S;;;;;;ACArC,qCAAqC,goY;;;;;;ACArC,qCAAqC,onR;;;;;;ACArC,qCAAqC,o/D;;;;;;ACArC,0C;;;;;;ACAA,qD;;;;;;ACAA,+C;;;;;;ACAA,kD;;;;;;ACAA,qCAAa,GAAG,IAAsD,EAAE,mBAAmB,KAAK,UAA6O,CAAC,aAAa,0BAA0B,0BAA0B,gBAAgB,UAAU,UAAU,0CAA0C,gBAAgB,OAAC,OAAO,oBAAoB,8CAA8C,kCAAkC,YAAY,YAAY,mCAAmC,iBAAiB,gBAAgB,sBAAsB,oBAAoB,0CAA0C,YAAY,WAAW,YAAY,SAAS,GAAG;AACxzB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,8BAA8B,eAAe;AAC7C;;AAEA;AACA;AACA;AACA,2C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA;AACA;AACA,SAAS;;AAET,OAAO;;AAEP;AACA;AACA;;AAEA;;AAEA;AACA;AACA,OAAO;;AAEP;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,+DAA+D;AAC/D;;AAEA;AACA;;AAEA;AACA;;AAEA,sBAAsB,6BAA6B;AACnD;AACA;;AAEA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,4DAA4D,yBAAyB;AACrF;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,S;AACA;AACA;AACA;AACA;AACA;AACA,mC;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,+BAA+B;;AAE/B;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;AACA,2DAA2D,2BAA2B;AACtF,2DAA2D,2BAA2B;AACtF;;AAEA,8DAA8D,mCAAmC;AACjG,8DAA8D,mCAAmC;;AAEjG;AACA;;AAEA,4J;AACA;AACA;;;AAGA,4J;AACA;AACA,yI;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4CAA4C,KAAK;AACjD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,0EAA0E;AAC1E;AACA;AACA;AACA;;AAEA,+DAA+D;AAC/D;;AAEA,sBAAsB,6BAA6B;AACnD;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,qCAAqC;AAC9D;AACA,iDAAiD,mGAAmG;AACpJ;AACA;AACA;;AAEA,WAAW;AACX;AACA;AACA;;AAEA,O;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,W;AACA;AACA;AACA;AACA;AACA;;AAEA,yB;AACA,SAAS;AACT,uE;;AAEA;AACA,gD;AACA;;AAEA,SAAS,EAAE;AACX;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;;;AAGA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,+C;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,qBAAqB,IAAI;AAC7E,uDAAuD,0BAA0B,IAAI;;AAErF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,eAAe;AAC/C,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;;AAEA,6CAA6C;;AAE7C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA,gC;AACA;AACA;AACA;AACA,wB;;AAEA,SAAS;AACT;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,OAAO;AACrD,iCAAiC;AACjC;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,UAAU;AAC7C;AACA;AACA;AACA,mCAAmC,SAAS;AAC5C;AACA;AACA;AACA,mCAAmC,UAAU;AAC7C;AACA;AACA;AACA,mCAAmC,SAAS;AAC5C;;AAEA;AACA;AACA,mCAAmC,WAAW;AAC9C;AACA;AACA;AACA,mCAAmC,UAAU;AAC7C;AACA;AACA;AACA,mCAAmC,WAAW;;AAE9C;AACA;AACA;AACA,mCAAmC,UAAU;AAC7C;AACA;AACA;AACA,kCAAkC,YAAY;AAC9C;;AAEA;AACA;AACA,mCAAmC,SAAS;AAC5C;AACA;AACA;AACA,mCAAmC,UAAU;AAC7C;AACA;AACA;AACA,mCAAmC,SAAS;AAC5C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA,CAAC,EAAE,oGAAoG;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,mBAAmB,kBAAkB;AACrC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,wDAAwD;AAC1E;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,GAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,mBAAmB,eAAe;AAClC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;AAIA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB,qCAAqC;AACxD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA,mBAAmB,mCAAmC;AACtD;AACA;;AAEA;AACA,GAAG;AACH;AACA;;AAEA;AACA,mBAAmB,+BAA+B;AAClD;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,gEAAgE,qBAAqB;AACrF,8DAA8D,iBAAiB;AAC/E;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,kCAAkC;AACpD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;;AAEA,CAAC,GAAG;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,SAAS;AACtB,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,aAAa,QAAQ;AACrB;AACA,aAAa,OAAO;AACpB;AACA,aAAa,QAAQ;AACrB;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,kCAAkC;AAC9D;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,EAAE;AACf,eAAe,QAAQ;AACvB;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,CAAC;;AAED;AACA,CAAC,GAAG;AACJ,CAAC,YAAY;;AAEb;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB,QAAQ,EAAE;;AAE/B;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA,eAAe;AACf;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA,SAAS;;AAET;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;;AAEP,sBAAsB;AACtB,KAAK;;AAEL;;AAEA,wDAAwD;AACxD;AACA;;AAEA,oDAAoD;AACpD;AACA;AACA,KAAK;AACL;;AAEA,8CAA8C;AAC9C;AACA;;AAEA,CAAC;;AAED,CAAC,EAAE,0DAA0D;AAC7D;;AAEA;AACA;;AAEA;AACA,mB;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;AACA,aAAa,0BAA0B;AACvC,aAAa;;AAEb;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;;AAEA,CAAC,GAAG;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,qCAAqC;AAC5D;AACA,+CAA+C,mGAAmG;AAClJ;AACA;AACA;AACA,OAAO;;AAEP;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,K;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,CAAC,GAAG,EAAE,GAAG;AACT,CAAC;;AAED,2CAA2C,cAAc;;;;;;;ACtpEzD,mD;;;;;;ACAA,mCAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,SAAS;AAC5B,mBAAmB,OAAO;AAC1B,mBAAmB,OAAO;AAC1B,mBAAmB,QAAQ;AAC3B;AACA,mBAAmB,OAAO;AAC1B;AACA,mBAAmB,QAAQ;AAC3B;AACA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,kCAAkC;AAClE;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,EAAE;AACrB,qBAAqB,QAAQ;AAC7B;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA,eAAe;AACf;AACA;AACA,eAAe;AACf;AACA;AACA,eAAe;AACf;AACA;AACA,eAAe;AACf;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA,eAAe;AACf;AACA;AACA,eAAe;AACf;AACA;AACA,eAAe;AACf;AACA;AACA,eAAe;AACf;AACA;AACA,eAAe;AACf;AACA;AACA,eAAe;AACf;AACA;AACA,eAAe;;AAEf,6DAA6D,gDAAgD;AAC7G,+CAA+C,2CAA2C;AAC1F,iDAAiD,oCAAoC;;AAErF,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+CAA+C;AAC/C;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,iBAAiB;;AAEjB,aAAa;;AAEb;;AAEA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,6BAA6B;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,4BAA4B,0BAA0B;AACtD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,4BAA4B,0BAA0B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC;;AAEhC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC;AAChC;AACA,8CAA8C;AAC9C,6CAA6C;AAC7C;AACA;AACA;AACA,iC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mG;AACA,sG;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C,kDAAkD;AAClD;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yF;;AAEA;AACA,mF;AACA,qF;;AAEA;AACA;AACA,qJ;AACA;AACA;;AAEA;AACA;AACA,uJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,2CAA2C,iBAAiB;AAC5D;;AAEA;AACA;AACA,mF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA,iDAAiD;;AAEjD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uD;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,mG;AACA,sG;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,qB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,+BAA+B,kBAAkB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,OAAO;AAC3D,uCAAuC;AACvC;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,UAAU;AAC9C;AACA;AACA;AACA,oCAAoC,SAAS;AAC7C;AACA;AACA;AACA,oCAAoC,UAAU;AAC9C;AACA;AACA;AACA,oCAAoC,SAAS;AAC7C;;AAEA;AACA;AACA,oCAAoC,WAAW;AAC/C;AACA;AACA;AACA,oCAAoC,UAAU;AAC9C;AACA;AACA;AACA,oCAAoC,WAAW;;AAE/C;AACA;AACA;AACA,oCAAoC,UAAU;AAC9C;;AAEA;AACA;AACA,oCAAoC,UAAU;AAC9C;AACA;AACA;AACA,oCAAoC,SAAS;AAC7C;AACA;AACA;AACA,oCAAoC,UAAU;AAC9C;AACA;AACA;AACA,oCAAoC,SAAS;AAC7C;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,8BAA8B;AAC9B,kCAAkC;AAClC;AACA;AACA,8BAA8B;AAC9B,kCAAkC;;AAElC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA,kCAAkC;AAClC;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;;AAEA,gE;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,0CAA0C;AAC1C;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,yBAAyB;;AAEzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,uBAAuB;AACvB,SAAS;;AAET;;AAEA,QAAQ,KAA6B,qBAAqB;AAC1D;AACA;;AAEA,QAAQ,IAA2C,GAAG;AACtD,QAAQ,mCAAgC;AACxC;AACA,SAAS;AAAA,oGAAC;AACV;;AAEA,4GAA4G;AAC5G;AACA;;AAEA,CAAC;;;;;;;ACzjDD,gD;;;;;;ACAA,8C;;;;;;ACAA,MAAM,CAAC,OAAP,GAAkB;AAEhB,MAAI,UAAU,GAAG,CACf;AACE,YAAQ,EAAE,MADZ;AAEE,SAAK,EACL;AACE,eAAS,YADX;AAEE,qBAAe,QAFjB;AAGE,qBAAe,QAHjB;AAIE,eAAS,SAJX;AAKE,eAAS,UAAU,GAAV,EAAa;AAEpB,eAAO,SAAS,CAAC,GAAD,CAAhB;AACD,OARH;AASE,gBAAU,UAAU,GAAV,EAAa;AAErB,eAAO,SAAS,CAAC,GAAD,CAAhB;AACD,OAZH;AAaE;AACA;AACA;AACA;AACA;AACA,0BAAoB,OAlBtB;AAmBE,eAAS,UAAS,GAAT,EAAY;AAEnB,eAAO,mBAAmB,CAAE,GAAF,CAA1B;AACD,OAtBH;AAuBE,sBAAgB,UAAS,GAAT,EAAY;AAE1B,eAAO,mBAAmB,CAAE,GAAF,CAA1B;AACD,OA1BH;AA2BE,sBAAgB,UAAS,GAAT,EAAY;AAE1B,eAAO,uBAAuB,CAAC,GAAD,CAA9B;AACD,OA9BH;AA+BE,mBAAa;AA/Bf;AAHF,GADe,EAsCf;AACE,YAAQ,EAAE,aADZ;AAEE,SAAK,EACL;AACE,eAAS,UAAS,GAAT,EAAY;AAEnB,eAAO,mBAAmB,CAAE,GAAF,CAA1B;AACD,OAJH;AAKE,qBAAe,UAAS,GAAT,EAAY;AAEzB,eAAO,QAAP;AACD,OARH;AASE,uBAAkB,CATpB;AAUE,sBAAgB,UAAS,GAAT,EAAY;AAAG,eAAO,uBAAuB,CAAC,GAAD,CAA9B;AAAsC,OAVvE;AAWE,uBAAiB,UAAS,GAAT,EAAY;AAAG,eAAO,uBAAuB,CAAC,GAAD,CAA9B;AAAsC,OAXxE;AAYE,wBAAkB,UAAS,GAAT,EAAY;AAAG,eAAO,uBAAuB,CAAC,GAAD,CAA9B;AAAsC,OAZzE;AAaE,qBAAgB,UAAS,GAAT,EAAY;AAAG,eAAO,uBAAuB,CAAC,GAAD,CAA9B;AAAsC,OAbvE;AAcE,4BAAsB,GAdxB;AAeE,sBAAgB,UAAS,GAAT,EAAY;AAE1B,eAAO,yBAAyB,CAAE,GAAF,CAAhC;AACD,OAlBH;AAmBE,sBAAgB,UAAS,GAAT,EAAY;AAE1B,eAAO,uBAAuB,CAAC,GAAD,CAA9B;AACD,OAtBH;AAuBE,0BAAoB,UAAS,GAAT,EAAY;AAC9B,eAAO,2BAA2B,CAAC,GAAD,CAAlC;AACD;AAzBH;AAHF,GAtCe,EAqEf;AACE,YAAQ,EAAE,MADZ;AAEE,SAAK,EACL;AACE,eAAS,YADX;AAEE,qBAAe,GAFjB;AAGE,qBAAe,QAHjB;AAIE,+BAAyB,SAJ3B;AAKE,iCAA2B,CAL7B;AAME,4BAAsB,UAAU,GAAV,EAAa;AAEjC,eAAO,0BAA0B,CAAC,GAAD,CAAjC;AACD,OATH;AAUE,eAAS,CAVX;AAWE,oBAAc,UAAU,GAAV,EAAa;AAEzB,eAAO,gBAAgB,CAAC,GAAD,CAAvB;AACD,OAdH;AAeE,4BAAsB,UAAU,GAAV,EAAa;AAEjC,eAAO,gBAAgB,CAAC,GAAD,CAAvB;AACD,OAlBH;AAmBE,oBAAc,UAAS,GAAT,EAAY;AAExB,eAAO,mBAAmB,CAAC,GAAD,CAA1B;AACD,OAtBH;AAuBE,iBAAW;AAvBb;AAHF,GArEe,EAmGf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AAEA;AACE,YAAQ,EAAE,YADZ;AAEE,SAAK,EAAE;AACL,0BAAoB,SADf;AAEL,eAAS,EAFJ;AAGL,gBAAU,EAHL;AAIL,eAAS,SAJJ;AAKL,yBAAmB,CALd;AAML,sBAAgB,EANX;AAOL,wBAAkB;AAPb;AAFT,GAjHe,EA8Hf;AACE,YAAQ,EAAE,WADZ;AAEE,OAAG,EAAE;AACH,0BAAoB;AADjB;AAFP,GA9He,EAqIf;AACE,YAAQ,EAAE,YADZ;AAEE,OAAG,EAAE;AACH,sBAAgB,CADb;AAEH,sBAAgB;AAFb;AAFP,GArIe,EA6If;AACE,YAAQ,EAAE,YADZ;AAEE,OAAG,EAAE;AACH,sBAAgB,CADb;AAEH,0BAAoB,SAFjB;AAGH,sBAAgB;AAHb;AAFP,GA7Ie,EAsJf;AACE,YAAQ,EAAE,6BADZ;AAEE,OAAG,EAAE;AACH,oBAAc,SADX;AAEH,4BAAsB,SAFnB;AAGH,4BAAsB;AAHnB;AAFP,GAtJe,EA+Jf;AACE,YAAQ,EAAE,kBADZ;AAEE,SAAK,EACD;AACI,eAAS,GADb;AAEI,sBAAe,CAFnB;AAGI,oBAAe,SAHnB;AAII,4BAAsB,SAJ1B;AAKI,qBAAe;AALnB;AAHN,GA/Je,EA0Kf;AACE,YAAQ,EAAE,kBADZ;AAEE,SAAK,EACL;AACI,sBAAgB,UAAS,GAAT,EAAY;AAExB,eAAO,8BAA8B,CAAE,GAAF,CAArC;AACH,OAJL;AAKI,sBAAgB,SALpB;AAMI,0BAAoB;AANxB;AAHF,GA1Ke,EAyLf;AACE,YAAQ,EAAE,cADZ;AAEE,SAAK,EACL;AACI,sBAAgB,CADpB;AAEI,sBAAgB,SAFpB;AAGI,eAAS;AAHb;AAHF,GAzLe,EAkMf;AACE;AACA,YAAQ,EAAE,uBAFZ;AAGE,SAAK,EACL;AACI,sBAAgB,CADpB;AAEI,qBAAgB,MAFpB;AAGI;AACA;AACA,sBAAgB,SALpB;AAMI,eAAS;AANb;AAJF,GAlMe,EAgNf;AACI,YAAQ,EAAE,eADd;AAEI,SAAK,EACD;AACI,sBAAgB,UAAS,GAAT,EAAY;AAExB,eAAO,2BAA2B,CAAE,GAAF,CAAlC;AACH,OAJL;AAKI,sBAAiB;AALrB;AAHR,GAhNe,EA2Nf;AACI,YAAQ,EAAE,2DADd;AAEI,SAAK,EACD;AACI,sBAAgB,UAAS,GAAT,EAAY;AAExB,eAAO,sCAAsC,CAAE,GAAF,CAA7C;AACH;AAJL;AAHR,GA3Ne,EAqOf;AACI,YAAQ,EAAE,eADd;AAEI,SAAK,EACD;AACI,eAAU,CADd;AAEI,oBAAe,SAFnB;AAGI,4BAAsB;AAH1B;AAHR,GArOe,CAAjB;;AAkPA,MAAI,uBAAuB,GAAG,UAAU,GAAV,EAAa;AAEzC,YAAQ,GAAG,CAAC,QAAJ,CAAa,IAAb,CAAkB,MAAlB,CAAR;AAEE,WAAK,QAAL;AAAe,eAAO,CAAP;AAAU;;AACzB,WAAK,SAAL;AAAgB,eAAO,GAAP;AAAY;;AAC5B,WAAK,aAAL;AAAoB,eAAO,EAAP;AAAW;;AAC/B,WAAK,SAAL;AAAgB,eAAO,EAAP;AAAW;;AAC3B;AAAS,eAAO,CAAP;AAAU;AANrB;AAQD,GAVD;;AAYA,MAAI,eAAe,GAAG,UAAU,GAAV,EAAa;AAEjC,QAAI,GAAG,CAAC,QAAJ,CAAa,IAAb,CAAkB,IAAtB,EAA4B;AAC1B,aAAO,GAAG,CAAC,QAAJ,CAAa,IAAb,CAAkB,IAAzB;AACD;;AACD,WAAO,SAAP;AACD,GAND;;AAQA,MAAI,qBAAqB,GAAG,UAAU,GAAV,EAAa;AAEvC,YAAQ,GAAG,CAAC,QAAJ,CAAa,IAAb,CAAkB,MAAlB,CAAR;AAEE,WAAK,MAAL;AAAa,eAAO,QAAP;AAAiB;;AAC9B,WAAK,QAAL;AAAe,eAAO,KAAP;AAAc;;AAC7B,WAAK,SAAL;AAAgB,eAAO,KAAP;AAAc;;AAC9B,WAAK,aAAL;AAAoB,eAAO,KAAP;AAAc;;AAClC;AAAS,eAAO,QAAP;AAAiB;AAN5B;AAQD,GAVD;;AAYA,MAAI,mBAAmB,GAAG,UAAU,GAAV,EAAa;AAErC,YAAQ,GAAG,CAAC,QAAJ,CAAa,IAAb,CAAkB,MAAlB,CAAR;AAEE,WAAK,MAAL;AAAa,eAAO,CAAP;AAAU;;AACvB,WAAK,SAAL;AAAgB,eAAO,CAAP;AAAU;;AAC1B,WAAK,QAAL;AAAe,eAAO,CAAP;AAAU;;AACzB,WAAK,aAAL;AAAoB,eAAO,CAAP;AAAU;;AAC9B;AAAS,eAAO,CAAP;AAAU;AANrB;AAQD,GAVD;;AAYA,MAAI,yBAAyB,GAAG,UAAU,GAAV,EAAa;AAE3C,YAAQ,GAAG,CAAC,QAAJ,CAAa,IAAb,CAAkB,MAAlB,CAAR;AAEE,WAAK,MAAL;AAAa,eAAO,CAAP;AAAU;;AACvB,WAAK,SAAL;AAAgB,eAAO,CAAP;AAAU;;AAC1B,WAAK,QAAL;AAAe,eAAO,CAAP;AAAU;;AACzB,WAAK,SAAL;AAAgB,eAAO,CAAP;AAAU;;AAC1B,WAAK,aAAL;AAAoB,eAAO,CAAP;AAAU;;AAC9B;AAAS,eAAO,CAAP;AAAU;AAPrB;AASD,GAXD;;AAaA,MAAI,8BAA8B,GAAG,UAAU,GAAV,EAAa;AAE9C,YAAQ,GAAG,CAAC,QAAJ,CAAa,IAAb,CAAkB,MAAlB,CAAR;AAEI,WAAK,MAAL;AAAa,eAAO,CAAP;AAAU;;AACvB,WAAK,SAAL;AAAgB,eAAO,CAAP;AAAU;;AAC1B,WAAK,QAAL;AAAe,eAAO,CAAP;AAAU;;AACzB,WAAK,aAAL;AAAoB,eAAO,CAAP;AAAU;;AAC9B;AAAS,eAAO,CAAP;AAAU;AANvB;AAQH,GAVD;;AAYE,MAAI,2BAA2B,GAAG,UAAU,GAAV,EAAa;AAE3C,YAAQ,GAAG,CAAC,QAAJ,CAAa,IAAb,CAAkB,MAAlB,CAAR;AAEI,WAAK,MAAL;AAAa,eAAO,CAAP;AAAU;;AACvB,WAAK,SAAL;AAAgB,eAAO,CAAP;AAAU;;AAC1B,WAAK,QAAL;AAAe,eAAO,CAAP;AAAU;;AACzB,WAAK,aAAL;AAAoB,eAAO,CAAP;AAAU;;AAC9B;AAAS,eAAO,CAAP;AAAU;AANvB;AAQH,GAVD;;AAWA,MAAI,sCAAsC,GAAG,UAAU,GAAV,EAAa;AAEtD,YAAQ,GAAG,CAAC,QAAJ,CAAa,IAAb,CAAkB,MAAlB,CAAR;AAEI,WAAK,MAAL;AAAa,eAAO,CAAP;AAAU;;AACvB,WAAK,SAAL;AAAgB,eAAO,CAAP;AAAU;;AAC1B,WAAK,QAAL;AAAe,eAAO,CAAP;AAAU;;AACzB,WAAK,aAAL;AAAoB,eAAO,CAAP;AAAU;;AAC9B;AAAS,eAAO,CAAP;AAAU;AANvB;AAQH,GAVD;;AAaF,MAAI,mBAAmB,GAAG,UAAU,GAAV,EAAa;AAErC,YAAQ,GAAG,CAAC,QAAJ,CAAa,IAAb,CAAkB,MAAlB,CAAR;AAEE,WAAK,MAAL;AAAa,eAAO,gBAAP;AAAyB;;AACtC,WAAK,SAAL;AAAgB,eAAO,gBAAP;AAAyB;;AACzC,WAAK,QAAL;AAAe,eAAO,WAAP;AAAoB;;AACnC,WAAK,aAAL;AAAoB,eAAO,gBAAP;AAAyB;;AAC7C,WAAK,SAAL;AAAgB,eAAO,WAAP;AAAoB;;AACpC;AAAS,eAAO,gBAAP;AAAyB;AAPpC;AASD,GAXD;;AAaA,MAAI,2BAA2B,GAAG,UAAU,GAAV,EAAa;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAO,MAAP;AACD,GAVD;;AAYA,MAAI,uBAAuB,GAAG,UAAU,GAAV,EAAa;AAEzC,YAAQ,GAAG,CAAC,QAAJ,CAAa,IAAb,CAAkB,MAAlB,CAAR;AAEE,WAAK,MAAL;AAAa,eAAO,SAAP;AAAkB;;AAC/B,WAAK,QAAL;AAAe,eAAO,SAAP;AAAkB;;AACjC,WAAK,SAAL;AAAgB,eAAO,SAAP;AAAkB;;AAClC,WAAK,aAAL;AAAoB,eAAO,SAAP;AAAkB;;AACtC;AAAS,eAAO,SAAP;AAAkB;AAN7B;AAQD,GAVD;;AAYA,MAAI,gBAAgB,GAAG,UAAU,GAAV,EAAa;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAO,SAAP;AACD,GAXD;;AAaA,MAAI,0BAA0B,GAAG,UAAU,GAAV,EAAa;AAE5C,YAAQ,GAAG,CAAC,QAAJ,CAAa,IAAb,CAAkB,MAAlB,CAAR;AACE,WAAK,WAAL;AAAkB,eAAO,UAAP;AAAmB;;AACrC,WAAK,UAAL;AAAiB,eAAO,KAAP;AAAc;;AAC/B,WAAK,SAAL;AAAgB,eAAO,UAAP;AAAmB;;AACnC,WAAK,WAAL;AAAkB,eAAO,KAAP;AAAc;;AAChC,WAAK,OAAL;AAAc,eAAO,MAAP;AAAe;;AAC7B;AAAS,eAAO,MAAP;AAAe;AAN1B;AAQD,GAVD;;AAYA,MAAI,mBAAmB,GAAG,UAAU,GAAV,EAAa;AAErC,YAAQ,GAAG,CAAC,QAAJ,CAAa,IAAb,CAAkB,MAAlB,CAAR;AACE,WAAK,WAAL;AAAkB,eAAO,OAAP;AAAgB;;AAClC,WAAK,UAAL;AAAiB,eAAO,OAAP;AAAgB;;AACjC,WAAK,SAAL;AAAgB,eAAO,QAAP;AAAiB;;AACjC,WAAK,WAAL;AAAkB,eAAO,QAAP;AAAiB;;AACnC,WAAK,OAAL;AAAc,eAAO,OAAP;AAAgB;;AAC9B;AAAS,eAAO,OAAP;AAAgB;AAN3B;AAQD,GAVD;;AAYA,MAAI,SAAS,GAAG,UAAU,GAAV,EAAa;AAE3B,QAAI,GAAG,CAAC,QAAJ,CAAa,IAAb,CAAkB,GAAlB,CAAJ,EACA;AACE,aAAO,GAAG,CAAC,QAAJ,CAAa,IAAb,CAAkB,GAAlB,CAAP;AACD,KAHD,MAKE,OAAO,CAAP;AACH,GARD;;AAUA,MAAI,SAAS,GAAG,UAAU,GAAV,EAAa;AAEzB,QAAI,GAAG,CAAC,QAAJ,CAAa,IAAb,CAAkB,GAAlB,CAAJ,EACA;AACI,aAAO,GAAG,CAAC,QAAJ,CAAa,IAAb,CAAkB,GAAlB,CAAP;AACH,KAHD,MAKI,OAAO,CAAP;AACP,GARD;;AAUA,SAAO,UAAP;AACD,CAhbgB,EAAjB,C;;;;;;ACAA,IAAI,cAAc,GAClB;AACE,YAAU,EAAE,IADd;AAEE,WAAS,EAAE,EAFb;AAGE,SAAO,EAAE,GAHX;AAIE,SAAO,EAAE,EAJX;AAKE,YAAU,EAAE,EALd;AAME,UAAQ,EAAE,EANZ;AAOE,aAAW,EAAE,EAPf;AAQE,iBAAe,EAAE,EARnB;AASE,oBAAkB,EAAE,IATtB;AAUE,iBAAe,EAAE,CAVnB;AAWE,wBAAsB,EAAE,GAX1B;AAYE,UAAQ,EAAE,KAZZ;AAaE,aAAW,EAAE,SAbf;AAcE,cAAY,EAAE;AACZ,WAAO,KAAP;AACD,GAhBH;AAiBE,sBAAoB,EAAE,IAjBxB;AAmBE;AACA,kBAAgB,EAAE,aApBpB;AAqBE,YAAU,EAAE,YArBd;AAsBE,aAAW,EAAE,aAtBf;AAuBE,WAAS,EAAE;AAvBb,CADA;AA2BA,MAAM,CAAC,OAAP,GAAiB,cAAjB,C;;;;;;AC3BA,gD;;;;;;ACAA,mCAAC,YAAY;;AAEb;;AAEA;;AAEA,qBAAqB,QAAQ,EAAE;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB;;AAExB;AACA;AACA;;AAEA;AACA;AACA,uCAAuC;AACvC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,uBAAuB,oBAAoB;AAC3C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;;AAET,kE;AACA;;AAEA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD,yCAAyC;AACzC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,mDAAmD;AACnD;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA,+D;;AAEA;AACA;AACA;AACA,8C;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,OAAO;;AAEP;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mGAAmG;AACnG,2CAA2C,0BAA0B,6BAA6B;AAClG,qCAAqC;AACrC;;AAEA;;AAEA,2D;AACA;AACA,0F;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAK;AACL;;AAEA,MAAM,KAA6B,qBAAqB;AACxD;AACA;;AAEA,MAAM,IAA2C,GAAG;AACpD,IAAI,mCAAkC;AACtC;AACA,KAAK;AAAA,oGAAC;AACN;;AAEA,8CAA8C;AAC9C;AACA;;AAEA,CAAC;;;;;;;AC3gBD,kC;;;;;;ACAA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA,uBAAuB;AACvB,wBAAwB;AACxB;AACA;AACA,OAAO;AACP;AACA,uBAAuB;AACvB,wBAAwB;AACxB;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,+BAA+B;AAC/B;AACA,OAAO;AACP;AACA;;;AAGA,mBAAmB,mBAAO,CAAC,EAAa;AACxC,wBAAwB,mBAAO,CAAC,EAAkB;AAClD,oBAAoB,mBAAO,CAAC,EAAW;;AAEvC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,8CAA8C;AAC9C;;AAEA;AACA;;AAEA;AACA,0C;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA,iD;AACA;AACA;AACA;AACA,8C;AACA;AACA;AACA;AACA;AACA;AACA,6B;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,+D;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;;AAEA;AACA;AACA,KAAK;;AAEL;;AAEA,MAAM,KAA6B,qBAAqB;AACxD;AACA;;AAEA,MAAM,IAA2C,GAAG;AACpD,IAAI,mCAAmC;AACvC;AACA,KAAK;AAAA,oGAAC;AACN;;AAEA,qEAAqE;AACrE;AACA;;AAEA,CAAC;;;;;;;ACpID;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,E;;;;;;AChGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,mBAAO,CAAC,EAAW;AACrC;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB;;AAEpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uCAAuC;AACvC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA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","file":"react-pathway-mapper.es5.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 74);\n","module.exports = require(\"react\");","module.exports = require(\"react-bootstrap\");","module.exports = require(\"jquery\");","module.exports = require(\"mobx\");","module.exports = require(\"autobind-decorator\");","module.exports = require(\"mobx-react\");","module.exports = require(\"cytoscape\");","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iNDdweCIgaGVpZ2h0PSI0N3B4IiB2aWV3Qm94PSIwIDAgNDcgNDciIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQ3IDQ3OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxnPgoJPGcgaWQ9IkxheWVyXzFfMTEwXyI+CgkJPGc+CgkJCTxwYXRoIGQ9Ik0xNy41NjcsMTUuOTM4bC0yLjg1OS0yLjcwMmMwLjMzMy0wLjYwNSwwLjUzOS0xLjI5LDAuNTM5LTIuMDI5YzAtMi4zNDItMS44OTctNC4yMzktNC4yNC00LjIzOQoJCQkJYy0yLjM0MywwLTQuMjQzLDEuODk2LTQuMjQzLDQuMjM5YzAsMi4zNDMsMS45LDQuMjQxLDQuMjQzLDQuMjQxYzAuODI2LDAsMS41OS0wLjI0NiwyLjI0Mi0wLjY1NGwyLjg1NSwyLjY5OQoJCQkJQzE2LjUzNiwxNi45MjIsMTcuMDIzLDE2LjM5OSwxNy41NjcsMTUuOTM4eiIvPgoJCQk8cGF0aCBkPSJNMjkuNjYsMTUuNmwzLjc5OS02LjM5M2MwLjM3NCwwLjEwNywwLjc2MiwwLjE4NCwxLjE2OSwwLjE4NGMyLjM0NywwLDQuMjQ0LTEuODk4LDQuMjQ0LTQuMjQxCgkJCQljMC0yLjM0Mi0xLjg5Ny00LjIzOS00LjI0NC00LjIzOWMtMi4zNDMsMC00LjIzOSwxLjg5Ni00LjIzOSw0LjIzOWMwLDEuMTYzLDAuNDY5LDIuMjE0LDEuMjI3LDIuOTgxbC0zLjc4Nyw2LjM3NQoJCQkJQzI4LjQ4LDE0LjgwMSwyOS4wOTQsMTUuMTY5LDI5LjY2LDE1LjZ6Ii8+CgkJCTxwYXRoIGQ9Ik00Mi43NjIsMjAuOTUyYy0xLjgyNCwwLTMuMzY5LDEuMTU5LTMuOTY4LDIuNzc1bC01LjI3OC0wLjUyMWMwLDAuMDQsMC4wMDYsMC4wNzgsMC4wMDYsMC4xMTcKCQkJCWMwLDAuNjg4LTAuMDc2LDEuMzYtMC4yMTMsMi4wMDlsNS4yNzYsMC41MjFjMC4zMTksMi4wMjQsMi4wNjIsMy41NzYsNC4xNzcsMy41NzZjMi4zNDIsMCw0LjIzOC0xLjg5Niw0LjIzOC00LjIzOAoJCQkJQzQ3LDIyLjg1LDQ1LjEwNCwyMC45NTIsNDIuNzYyLDIwLjk1MnoiLz4KCQkJPHBhdGggZD0iTTI4LjE5NywzNy42MjRsLTEuMTgtNS4xNTZjLTAuNjY2LDAuMjMyLTEuMzU5LDAuMzk4LTIuMDgyLDAuNDgxbDEuMTgyLDUuMTU3Yy0xLjM1NSwwLjcwOS0yLjI5LDIuMTEtMi4yOSwzLjc0NgoJCQkJYzAsMi4zNDIsMS44OTYsNC4yMzcsNC4yNDMsNC4yMzdjMi4zNDIsMCw0LjIzOC0xLjg5Niw0LjIzOC00LjIzN0MzMi4zMTEsMzkuNTUzLDMwLjQ3OSwzNy42OTIsMjguMTk3LDM3LjYyNHoiLz4KCQkJPHBhdGggZD0iTTE0LjM1NywyNS4zN2wtNi41NywyLjIwMWMtMC43NTgtMS4xNTgtMi4wNjMtMS45MjYtMy41NDgtMS45MjZDMS44OTYsMjUuNjQ1LDAsMjcuNTQyLDAsMjkuODg0CgkJCQljMCwyLjM0NSwxLjg5Niw0LjI0Miw0LjIzOSw0LjI0MmMyLjM0MSwwLDQuMjQyLTEuODk3LDQuMjQyLTQuMjQyYzAtMC4wOTgtMC4wMjEtMC4xODgtMC4wMjktMC4yODRsNi41OTEtMi4yMDcKCQkJCUMxNC43NDYsMjYuNzUyLDE0LjUxLDI2LjA3NywxNC4zNTcsMjUuMzd6Ii8+CgkJCTxjaXJjbGUgY3g9IjIzLjgzIiBjeT0iMjMuMzIzIiByPSI3LjI3MSIvPgoJCTwvZz4KCTwvZz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K\"","module.exports = require(\"underscore\");","module.exports = require(\"react-toastify\");","module.exports = require(\"oncoprintjs\");","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iNTUwLjgwMXB4IiBoZWlnaHQ9IjU1MC44MDFweCIgdmlld0JveD0iMCAwIDU1MC44MDEgNTUwLjgwMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTUwLjgwMSA1NTAuODAxOyIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8cGF0aCBkPSJNMTQ2Ljc0NywyNzYuNzA4YzAtMTMuOTk4LTkuNzExLTIyLjM1Mi0yNi44ODctMjIuMzUyYy02Ljk5LDAtMTEuNzI2LDAuNjc1LTE0LjIwNCwxLjM1NXY0NC45MjcKCQljMi45MzIsMC42NzYsNi41MzksMC44OTYsMTEuNTIsMC44OTZDMTM1LjQ0OSwzMDEuNTQ2LDE0Ni43NDcsMjkyLjI4LDE0Ni43NDcsMjc2LjcwOHoiLz4KCTxwYXRoIGQ9Ik00ODguNDI2LDE5Ny4wMTlINDc1LjJ2LTYzLjgxNmMwLTAuMzk4LTAuMDYzLTAuNzk5LTAuMTE2LTEuMjAyYy0wLjAyMS0yLjUzNC0wLjgyNy01LjAyMy0yLjU2Mi02Ljk5NUwzNjYuMzI1LDMuNjk0CgkJYy0wLjAzMi0wLjAzMS0wLjA2My0wLjA0Mi0wLjA4NS0wLjA3NmMtMC42MzMtMC43MDctMS4zNzEtMS4yOTUtMi4xNTEtMS44MDRjLTAuMjMxLTAuMTU1LTAuNDY0LTAuMjg1LTAuNzA2LTAuNDE5CgkJYy0wLjY3Ni0wLjM2OS0xLjM5My0wLjY3NS0yLjEzMS0wLjg5NmMtMC4yLTAuMDU2LTAuMzgtMC4xMzgtMC41OC0wLjE5QzM1OS44NywwLjExOSwzNTkuMDM3LDAsMzU4LjE5MywwSDk3LjIKCQljLTExLjkxOCwwLTIxLjYsOS42OTMtMjEuNiwyMS42MDF2MTc1LjQxM0g2Mi4zNzdjLTE3LjA0OSwwLTMwLjg3MywxMy44MTgtMzAuODczLDMwLjg3M3YxNjAuNTQ1CgkJYzAsMTcuMDQzLDEzLjgyNCwzMC44NywzMC44NzMsMzAuODdoMTMuMjI0VjUyOS4yYzAsMTEuOTA3LDkuNjgyLDIxLjYwMSwyMS42LDIxLjYwMWgzNTYuNGMxMS45MDcsMCwyMS42LTkuNjkzLDIxLjYtMjEuNjAxCgkJVjQxOS4zMDJoMTMuMjI2YzE3LjA0NCwwLDMwLjg3MS0xMy44MjcsMzAuODcxLTMwLjg3di0xNjAuNTRDNTE5LjI5NywyMTAuODM4LDUwNS40NywxOTcuMDE5LDQ4OC40MjYsMTk3LjAxOXogTTk3LjIsMjEuNjA1CgkJaDI1MC4xOTN2MTEwLjUxM2MwLDUuOTY3LDQuODQxLDEwLjgsMTAuOCwxMC44aDk1LjQwN3Y1NC4xMDhIOTcuMlYyMS42MDV6IE0yMzQuMzQ0LDMzNS44NnY0NS44MzFoLTMxLjYwMVYyMjkuNTI0aDQwLjE4NAoJCWwzMS42MTEsNTUuNzU5YzkuMDI1LDE2LjAzMSwxOC4wNjQsMzQuOTgzLDI0LjgyNSw1Mi4xNTRoMC42NzVjLTIuMjU3LTIwLjEwMy0yLjkzMy00MC42NDMtMi45MzMtNjMuNDR2LTQ0LjQ3M2gzMS42MTR2MTUyLjE2NwoJCWgtMzYuMTE3bC0zMi41MTYtNTguNzAzYy05LjA0OS0xNi4yNTMtMTguOTcxLTM1Ljg5Mi0yNi40MzgtNTMuNzI3bC0wLjY2NSwwLjIyMkMyMzMuOTA2LDI4OS41OCwyMzQuMzQ0LDMxMS4wMjcsMjM0LjM0NCwzMzUuODZ6CgkJIE03MS41NTYsMzgxLjY5MVYyMzEuNTZjMTAuNjEzLTEuODA0LDI1LjUxNi0zLjE1OSw0Ni41MDYtMy4xNTljMjEuMjE1LDAsMzYuMzUzLDQuMDYxLDQ2LjUwOSwxMi4xOTIKCQljOS42OTgsNy42NzMsMTYuMjU1LDIwLjMxMywxNi4yNTUsMzUuMjE5YzAsMTQuODk3LTQuOTU5LDI3LjU0OS0xMy45OTksMzYuMTIzYy0xMS43MzgsMTEuMDYzLTI5LjEyMywxNi4wMzEtNDkuNDQxLDE2LjAzMQoJCWMtNC41MjIsMC04LjU5My0wLjIzMS0xMS43MzYtMC42NzV2NTQuNDExSDcxLjU1NlYzODEuNjkxeiBNNDUzLjYwMSw1MjMuMzUzSDk3LjJWNDE5LjMwMmgzNTYuNFY1MjMuMzUzeiBNNDg1LjY1MiwzNzQuNjg4CgkJYy0xMC42MSwzLjYwNy0zMC43MTMsOC41ODUtNTAuODA1LDguNTg1Yy0yNy43NTksMC00Ny44NzItNy4wMDMtNjEuODU3LTIwLjU0NWMtMTMuOTk1LTEzLjEtMjEuNjg0LTMyLjk3LTIxLjQ1Mi01NS4zMTgKCQljMC4yMjItNTAuNTY5LDM3LjAzLTc5LjQ2Myw4Ni45MTctNzkuNDYzYzE5LjY0NCwwLDM0Ljc4MywzLjgyOSw0Mi4yMTksNy40NDZsLTcuMjE0LDI3LjU0M2MtOC4zNjktMy42MTctMTguNzUyLTYuNTUtMzUuNDU4LTYuNTUKCQljLTI4LjY1NiwwLTUwLjM0MSwxNi4yNTYtNTAuMzQxLDQ5LjIyYzAsMzEuMzgyLDE5LjY0OSw0OS44OTIsNDcuODcyLDQ5Ljg5MmM3Ljg5NSwwLDE0LjIxOC0wLjkwMSwxNi45MzQtMi4yNTd2LTMxLjgzNWgtMjMuNDkzCgkJdi0yNi44NjloNTYuNjc5VjM3NC42ODh6Ii8+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPC9zdmc+Cg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iNTUwLjgwMXB4IiBoZWlnaHQ9IjU1MC44MDFweCIgdmlld0JveD0iMCAwIDU1MC44MDEgNTUwLjgwMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTUwLjgwMSA1NTAuODAxOyIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8cGF0aCBkPSJNNDg4LjQyNiwxOTcuMDE5SDQ3NS4ydi02My44MTZjMC0wLjM5OC0wLjA2My0wLjc5OS0wLjExNi0xLjIwMmMtMC4wMjEtMi41MzQtMC44MjctNS4wMjMtMi41NjItNi45OTVMMzY2LjMyNSwzLjY5NAoJCWMtMC4wMzItMC4wMzEtMC4wNjMtMC4wNDItMC4wODUtMC4wNzZjLTAuNjMzLTAuNzA3LTEuMzcxLTEuMjk1LTIuMTUxLTEuODA0Yy0wLjIzMS0wLjE1NS0wLjQ2NC0wLjI4NS0wLjcwNi0wLjQxOQoJCWMtMC42NzYtMC4zNjktMS4zOTMtMC42NzUtMi4xMzEtMC44OTZjLTAuMi0wLjA1Ni0wLjM4LTAuMTM4LTAuNTgtMC4xOUMzNTkuODcsMC4xMTksMzU5LjAzNywwLDM1OC4xOTMsMEg5Ny4yCgkJYy0xMS45MTgsMC0yMS42LDkuNjkzLTIxLjYsMjEuNjAxdjE3NS40MTNINjIuMzc3Yy0xNy4wNDksMC0zMC44NzMsMTMuODE4LTMwLjg3MywzMC44NzN2MTYwLjU0NQoJCWMwLDE3LjA0MywxMy44MjQsMzAuODcsMzAuODczLDMwLjg3aDEzLjIyNFY1MjkuMmMwLDExLjkwNyw5LjY4MiwyMS42MDEsMjEuNiwyMS42MDFoMzU2LjRjMTEuOTA3LDAsMjEuNi05LjY5MywyMS42LTIxLjYwMQoJCVY0MTkuMzAyaDEzLjIyNmMxNy4wNDQsMCwzMC44NzEtMTMuODI3LDMwLjg3MS0zMC44N3YtMTYwLjU0QzUxOS4yOTcsMjEwLjgzOCw1MDUuNDcsMTk3LjAxOSw0ODguNDI2LDE5Ny4wMTl6IE05Ny4yLDIxLjYwNQoJCWgyNTAuMTkzdjExMC41MTNjMCw1Ljk2Nyw0Ljg0MSwxMC44LDEwLjgsMTAuOGg5NS40MDd2NTQuMTA4SDk3LjJWMjEuNjA1eiBNMzM4Ljg3MSwyMjUuNjcyTDI4NC41NDUsMzg2Ljk2aC00Mi41OTEKCQlsLTUxLjY5LTE2MS4yODhoMzkuOTY3bDE5LjYxNyw2OC4xOTZjNS41MDgsMTkuMTQzLDEwLjUzMSwzNy41NjcsMTQuMzYsNTcuNjdoMC43MTdjNC4wNjEtMTkuMzg1LDkuMDg5LTM4LjUyNywxNC41OTItNTYuOTUzCgkJbDIwLjU4NS02OC45MThoMzguNzdWMjI1LjY3MnogTTY4LjQ1OCwzNzkuNTRsNy40MTUtMzAuMTUzYzkuODExLDUuMDIxLDI0Ljg4OCwxMC4wNTEsNDAuNDM5LDEwLjA1MQoJCWMxNi43NTEsMCwyNS42MDctNi45MzUsMjUuNjA3LTE3LjQ2NWMwLTEwLjA1Mi03LjY2Mi0xNS43OTUtMjcuMDUtMjIuNzM0Yy0yNi44LTkuMzI4LTQ0LjI2My0yNC4xNjgtNDQuMjYzLTQ3LjYxMQoJCWMwLTI3LjUyNCwyMi45NzEtNDguNTc5LDYxLjAxNC00OC41NzljMTguMTg4LDAsMzEuNTkxLDMuODIzLDQxLjE1OSw4LjEzMWwtOC4xMjYsMjkuNDM3Yy02LjQ2NS0zLjExNi0xNy45NDUtNy42NTctMzMuNzQ1LTcuNjU3CgkJYy0xNS43OTEsMC0yMy40NTQsNy4xODMtMjMuNDU0LDE1LjU1MmMwLDEwLjI5Niw5LjA4OSwxNC44NDIsMjkuOTE3LDIyLjczMWMyOC40NjgsMTAuNTM2LDQxLjg3MSwyNS4zNjUsNDEuODcxLDQ4LjA5NAoJCWMwLDI3LjA0Mi0yMC44MTIsNTAuMDEzLTY1LjA5LDUwLjAxM0M5NS43MzEsMzg5LjM0OSw3Ny41MzgsMzg0LjU3MSw2OC40NTgsMzc5LjU0eiBNNDUzLjYwMSw1MjMuMzUzSDk3LjJWNDE5LjMwMmgzNTYuNFY1MjMuMzUzegoJCSBNNDg4LjkxMSwzNzkuNTRjLTExLjI0MywzLjgyMy0zMi41MzcsOS4xMDMtNTMuODMxLDkuMTAzYy0yOS40MzcsMC01MC43My03LjQyNi02NS41Ny0yMS43NzkKCQljLTE0LjgzOS0xMy44NzUtMjIuOTcxLTM0Ljk0Mi0yMi43MzgtNTguNjI1YzAuMjUzLTUzLjYwNCwzOS4yNTUtODQuMjM1LDkyLjEzNy04NC4yMzVjMjAuODEsMCwzNi44NTIsNC4wNzMsNDQuNzQsNy44OTYKCQlsLTcuNjU3LDI5LjIwMmMtOC44NTktMy44MjktMTkuODQ5LTYuOTUtMzcuNTY3LTYuOTVjLTMwLjM5NiwwLTUzLjM1NywxNy4yMzMtNTMuMzU3LDUyLjE3M2MwLDMzLjI2NSwyMC44MSw1Mi44ODIsNTAuNzMsNTIuODgyCgkJYzguMzc1LDAsMTUuMDcyLTAuOTYsMTcuOTQtMi4zOTV2LTMzLjc0NWgtMjQuODc1di0yOC40NzFoNjAuMDQ5VjM3OS41NEw0ODguOTExLDM3OS41NHoiLz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K\"","module.exports = require(\"lodash\");","module.exports = require(\"file-saver\");","module.exports = \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItZWRpdCI+PHBhdGggZD0iTTExIDRINGEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoMTRhMiAyIDAgMCAwIDItMnYtNyI+PC9wYXRoPjxwYXRoIGQ9Ik0xOC41IDIuNWEyLjEyMSAyLjEyMSAwIDAgMSAzIDNMMTIgMTVsLTQgMSAxLTQgOS41LTkuNXoiPjwvcGF0aD48L3N2Zz4=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iMTc0IgogICBoZWlnaHQ9IjQ0LjQ0MjgyMiIKICAgdmlld0JveD0iMCAwIDE2My4xMjUgNDEuNjY1MTQ2IgogICBpZD0ic3ZnNDM5OSIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIgogICBzb2RpcG9kaTpkb2NuYW1lPSJnZW5lLnN2ZyI+CiAgPGRlZnMKICAgICBpZD0iZGVmczQ0MDEiIC8+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjEuNCIKICAgICBpbmtzY2FwZTpjeD0iNTUuODIzMzUzIgogICAgIGlua3NjYXBlOmN5PSI5My41MTExNjYiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB4IgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgZml0LW1hcmdpbi10b3A9IjAiCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIgogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiCiAgICAgZml0LW1hcmdpbi1ib3R0b209IjAiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciCiAgICAgaW5rc2NhcGU6d2luZG93LXg9Ii04IgogICAgIGlua3NjYXBlOndpbmRvdy15PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIHVuaXRzPSJweCIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE0NDA0Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjc2LjA2NDk3LC0zMTcuNjY4OTcpIj4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozLjIzMTI2OTg0O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGlkPSJyZWN0Mjk4NSIKICAgICAgIHdpZHRoPSIxNTkuODkzNzQiCiAgICAgICBoZWlnaHQ9IjM4LjQzMzg3NiIKICAgICAgIHg9IjI3Ny42ODA2IgogICAgICAgeT0iMzE5LjI4NDYxIgogICAgICAgcnk9IjkuOTE4NDAzNiIKICAgICAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSI1My45NTk5OTkiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iNTMuOTU5OTk5IgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LWZpbGVuYW1lPSJDOlxVc2Vyc1x1Z3VyXEdvb2dsZSBEcml2ZVx0b29sYmFyXG1hY3JvbW9sZWN1bGUucG5nIiAvPgogICAgPHRleHQKICAgICAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgICAgICBzdHlsZT0iZm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc2l6ZToyOC4xMjVweDtsaW5lLWhlaWdodDoxMjUlO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6MHB4O3dvcmQtc3BhY2luZzowcHg7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjkzNzVweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgeD0iMzM4LjA3NTQ3IgogICAgICAgeT0iMzQzLjk0NzExIgogICAgICAgaWQ9InRleHQ4MTgiPjx0c3BhbgogICAgICAgICBzb2RpcG9kaTpyb2xlPSJsaW5lIgogICAgICAgICBpZD0idHNwYW44MTYiCiAgICAgICAgIHg9IjMzOC4wNzU0NyIKICAgICAgICAgeT0iMzQzLjk0NzExIgogICAgICAgICBzdHlsZT0iZm9udC1zaXplOjE1cHg7c3Ryb2tlLXdpZHRoOjAuOTM3NXB4Ij5HZW5lPC90c3Bhbj48L3RleHQ+CiAgPC9nPgo8L3N2Zz4K\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iMTczLjk5OTM3IgogICBoZWlnaHQ9IjQ1LjA4MjAwMSIKICAgdmlld0JveD0iMCAwIDE2My4xMjQ0MiA0Mi4yNjQzNzYiCiAgIGlkPSJzdmc0Mzk5IgogICB2ZXJzaW9uPSIxLjEiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTIuMSByMTUzNzEiCiAgIHNvZGlwb2RpOmRvY25hbWU9ImZhbWlseS5zdmciPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0NDAxIiAvPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSIxLjQiCiAgICAgaW5rc2NhcGU6Y3g9IjE3MS44OTQ3NyIKICAgICBpbmtzY2FwZTpjeT0iOTMuNTExMTkyIgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGZpdC1tYXJnaW4tdG9wPSIwIgogICAgIGZpdC1tYXJnaW4tbGVmdD0iMCIKICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIwIgogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDE3IgogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIKICAgICB1bml0cz0icHgiIC8+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNDQwNCI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGU+PC9kYzp0aXRsZT4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTI3Ni4wNjQ5OCwtMzE3LjA2OTc3KSI+CiAgICA8cmVjdAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzkzOTM5MztzdHJva2Utd2lkdGg6My4yNTUxMTgzNztzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBpZD0icmVjdDI5ODUiCiAgICAgICB3aWR0aD0iMTU5Ljg2OTI5IgogICAgICAgaGVpZ2h0PSIzOS4wMDkyNTgiCiAgICAgICB4PSIyNzcuNjkyNTQiCiAgICAgICB5PSIzMTguNjk3MzMiCiAgICAgICByeT0iMCIKICAgICAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSI1My45NTk5OTkiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iNTMuOTU5OTk5IgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LWZpbGVuYW1lPSJDOlxVc2Vyc1x1Z3VyXEdvb2dsZSBEcml2ZVx0b29sYmFyXG1hY3JvbW9sZWN1bGUucG5nIiAvPgogICAgPHRleHQKICAgICAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgICAgICBzdHlsZT0iZm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc2l6ZToyOC4xMjVweDtsaW5lLWhlaWdodDoxMjUlO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6MHB4O3dvcmQtc3BhY2luZzowcHg7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjkzNzVweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgeD0iMzMyLjg2MDMyIgogICAgICAgeT0iMzQyLjM5MTQyIgogICAgICAgaWQ9InRleHQ4MTgiPjx0c3BhbgogICAgICAgICBzb2RpcG9kaTpyb2xlPSJsaW5lIgogICAgICAgICBpZD0idHNwYW44MTYiCiAgICAgICAgIHg9IjMzMi44NjAzMiIKICAgICAgICAgeT0iMzQyLjM5MTQyIgogICAgICAgICBzdHlsZT0iZm9udC1zaXplOjE1cHg7c3Ryb2tlLXdpZHRoOjAuOTM3NXB4Ij5GYW1pbHk8L3RzcGFuPjwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iMTc0IgogICBoZWlnaHQ9IjQ0LjQ0MjgyMiIKICAgdmlld0JveD0iMCAwIDE2My4xMjUgNDEuNjY1MTQ2IgogICBpZD0ic3ZnNDM5OSIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIgogICBzb2RpcG9kaTpkb2NuYW1lPSJjb21wbGV4LnN2ZyI+CiAgPGRlZnMKICAgICBpZD0iZGVmczQ0MDEiIC8+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjEuNCIKICAgICBpbmtzY2FwZTpjeD0iNTUuODIzMzUzIgogICAgIGlua3NjYXBlOmN5PSI5My41MTExNjYiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB4IgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgZml0LW1hcmdpbi10b3A9IjAiCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIgogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiCiAgICAgZml0LW1hcmdpbi1ib3R0b209IjAiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciCiAgICAgaW5rc2NhcGU6d2luZG93LXg9Ii04IgogICAgIGlua3NjYXBlOndpbmRvdy15PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIHVuaXRzPSJweCIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE0NDA0Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjc2LjA2NDk3LC0zMTcuNjY4OTcpIj4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozLjIzMTI2OTg0O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGlkPSJyZWN0Mjk4NSIKICAgICAgIHdpZHRoPSIxNTkuODkzNzQiCiAgICAgICBoZWlnaHQ9IjM4LjQzMzg3NiIKICAgICAgIHg9IjI3Ny42ODA2IgogICAgICAgeT0iMzE5LjI4NDYxIgogICAgICAgcnk9IjAiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iNTMuOTU5OTk5IgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjUzLjk1OTk5OSIKICAgICAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iQzpcVXNlcnNcdWd1clxHb29nbGUgRHJpdmVcdG9vbGJhclxtYWNyb21vbGVjdWxlLnBuZyIgLz4KICAgIDx0ZXh0CiAgICAgICB4bWw6c3BhY2U9InByZXNlcnZlIgogICAgICAgc3R5bGU9ImZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXNpemU6MjguMTI1cHg7bGluZS1oZWlnaHQ6MTI1JTtmb250LWZhbWlseTpzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC45Mzc1cHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIHg9IjMyNC43MTYwOSIKICAgICAgIHk9IjM0Mi42OTEwMSIKICAgICAgIGlkPSJ0ZXh0ODE4Ij48dHNwYW4KICAgICAgICAgc29kaXBvZGk6cm9sZT0ibGluZSIKICAgICAgICAgaWQ9InRzcGFuODE2IgogICAgICAgICB4PSIzMjQuNzE2MDkiCiAgICAgICAgIHk9IjM0Mi42OTEwMSIKICAgICAgICAgc3R5bGU9ImZvbnQtc2l6ZToxNXB4O3N0cm9rZS13aWR0aDowLjkzNzVweCI+Q29tcGxleDwvdHNwYW4+PC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iMTc0IgogICBoZWlnaHQ9IjQ3Ljg4NzMxIgogICB2aWV3Qm94PSIwIDAgMTYzLjEyNSA0NC44OTQzNTQiCiAgIGlkPSJzdmc0Mzk5IgogICB2ZXJzaW9uPSIxLjEiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTIuMSByMTUzNzEiCiAgIHNvZGlwb2RpOmRvY25hbWU9ImNvbXBhcnRtZW50LnN2ZyI+CiAgPGRlZnMKICAgICBpZD0iZGVmczQ0MDEiIC8+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjEuNCIKICAgICBpbmtzY2FwZTpjeD0iNTcuNTQ1NjA4IgogICAgIGlua3NjYXBlOmN5PSI5NS4yMzMzOTkiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB4IgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgZml0LW1hcmdpbi10b3A9IjAiCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIgogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiCiAgICAgZml0LW1hcmdpbi1ib3R0b209IjAiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciCiAgICAgaW5rc2NhcGU6d2luZG93LXg9Ii04IgogICAgIGlua3NjYXBlOndpbmRvdy15PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIHVuaXRzPSJweCIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE0NDA0Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjc0LjQ1MDM1LC0zMTYuMDU0MzYpIj4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDo2LjgyOTY5OTA0O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGlkPSJyZWN0Mjk4NSIKICAgICAgIHdpZHRoPSIxNTYuMjk1MyIKICAgICAgIGhlaWdodD0iMzguMDY0NjU1IgogICAgICAgeD0iMjc3Ljg2NTIiCiAgICAgICB5PSIzMTkuNDY5MjEiCiAgICAgICByeT0iOS44MjMxMjExIgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjUzLjk1OTk5OSIKICAgICAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSI1My45NTk5OTkiCiAgICAgICBpbmtzY2FwZTpleHBvcnQtZmlsZW5hbWU9IkM6XFVzZXJzXHVndXJcR29vZ2xlIERyaXZlXHRvb2xiYXJcbWFjcm9tb2xlY3VsZS5wbmciIC8+CiAgICA8dGV4dAogICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIKICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjI4LjEyNXB4O2xpbmUtaGVpZ2h0OjEyNSU7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuOTM3NXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICB4PSIzMDMuODM1MTEiCiAgICAgICB5PSIzNDIuNTQ0NDkiCiAgICAgICBpZD0idGV4dDgxOCI+PHRzcGFuCiAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiCiAgICAgICAgIGlkPSJ0c3BhbjgxNiIKICAgICAgICAgeD0iMzAzLjgzNTExIgogICAgICAgICB5PSIzNDIuNTQ0NDkiCiAgICAgICAgIHN0eWxlPSJmb250LXNpemU6MTVweDtzdHJva2Utd2lkdGg6MC45Mzc1cHgiPkNvbXBhcnRtZW50PC90c3Bhbj48L3RleHQ+CiAgPC9nPgo8L3N2Zz4K\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iMTc0IgogICBoZWlnaHQ9IjQ0LjQ0MjgyMiIKICAgdmlld0JveD0iMCAwIDE2My4xMjUgNDEuNjY1MTQ2IgogICBpZD0ic3ZnNDM5OSIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIgogICBzb2RpcG9kaTpkb2NuYW1lPSJwcm9jZXNzLnN2ZyI+CiAgPGRlZnMKICAgICBpZD0iZGVmczQ0MDEiIC8+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjEuNCIKICAgICBpbmtzY2FwZTpjeD0iLTYwLjI0ODA3NiIKICAgICBpbmtzY2FwZTpjeT0iOTMuNTExMTY2IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGZpdC1tYXJnaW4tdG9wPSIwIgogICAgIGZpdC1tYXJnaW4tbGVmdD0iMCIKICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIwIgogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDE3IgogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIKICAgICB1bml0cz0icHgiIC8+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNDQwNCI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGU+PC9kYzp0aXRsZT4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTI3Ni4wNjQ5NywtMzE3LjY2ODk3KSI+CiAgICA8dGV4dAogICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIKICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjI4LjEyNXB4O2xpbmUtaGVpZ2h0OjEyNSU7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuOTM3NXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICB4PSIzMjguNzE1MTIiCiAgICAgICB5PSIzNDMuODQwOTEiCiAgICAgICBpZD0idGV4dDgxOCI+PHRzcGFuCiAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiCiAgICAgICAgIGlkPSJ0c3BhbjgxNiIKICAgICAgICAgeD0iMzI4LjcxNTEyIgogICAgICAgICB5PSIzNDMuODQwOTEiCiAgICAgICAgIHN0eWxlPSJmb250LXNpemU6MTVweDtzdHJva2Utd2lkdGg6MC45Mzc1cHgiPlByb2Nlc3M8L3RzcGFuPjwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE4LjEuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMjMuNjI1IDIzLjYyNSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMjMuNjI1IDIzLjYyNTsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggc3R5bGU9ImZpbGw6IzAzMDEwNDsiIGQ9Ik0xMS44MTIsMEM1LjI4OSwwLDAsNS4yODksMCwxMS44MTJzNS4yODksMTEuODEzLDExLjgxMiwxMS44MTNzMTEuODEzLTUuMjksMTEuODEzLTExLjgxMw0KCQlTMTguMzM1LDAsMTEuODEyLDB6IE0xNC4yNzEsMTguMzA3Yy0wLjYwOCwwLjI0LTEuMDkyLDAuNDIyLTEuNDU1LDAuNTQ4Yy0wLjM2MiwwLjEyNi0wLjc4MywwLjE4OS0xLjI2MiwwLjE4OQ0KCQljLTAuNzM2LDAtMS4zMDktMC4xOC0xLjcxNy0wLjUzOXMtMC42MTEtMC44MTQtMC42MTEtMS4zNjdjMC0wLjIxNSwwLjAxNS0wLjQzNSwwLjA0NS0wLjY1OWMwLjAzMS0wLjIyNCwwLjA4LTAuNDc2LDAuMTQ3LTAuNzU5DQoJCWwwLjc2MS0yLjY4OGMwLjA2Ny0wLjI1OCwwLjEyNS0wLjUwMywwLjE3MS0wLjczMWMwLjA0Ni0wLjIzLDAuMDY4LTAuNDQxLDAuMDY4LTAuNjMzYzAtMC4zNDItMC4wNzEtMC41ODItMC4yMTItMC43MTcNCgkJYy0wLjE0My0wLjEzNS0wLjQxMi0wLjIwMS0wLjgxMy0wLjIwMWMtMC4xOTYsMC0wLjM5OCwwLjAyOS0wLjYwNSwwLjA5Yy0wLjIwNSwwLjA2My0wLjM4MywwLjEyLTAuNTI5LDAuMTc2bDAuMjAxLTAuODI4DQoJCWMwLjQ5OC0wLjIwMywwLjk3NS0wLjM3NywxLjQzLTAuNTIxYzAuNDU1LTAuMTQ2LDAuODg1LTAuMjE4LDEuMjktMC4yMThjMC43MzEsMCwxLjI5NSwwLjE3OCwxLjY5MiwwLjUzDQoJCWMwLjM5NSwwLjM1MywwLjU5NCwwLjgxMiwwLjU5NCwxLjM3NmMwLDAuMTE3LTAuMDE0LDAuMzIzLTAuMDQxLDAuNjE3Yy0wLjAyNywwLjI5NS0wLjA3OCwwLjU2NC0wLjE1MiwwLjgxMWwtMC43NTcsMi42OA0KCQljLTAuMDYyLDAuMjE1LTAuMTE3LDAuNDYxLTAuMTY3LDAuNzM2Yy0wLjA0OSwwLjI3NS0wLjA3MywwLjQ4NS0wLjA3MywwLjYyNmMwLDAuMzU2LDAuMDc5LDAuNTk5LDAuMjM5LDAuNzI4DQoJCWMwLjE1OCwwLjEyOSwwLjQzNSwwLjE5NCwwLjgyNywwLjE5NGMwLjE4NSwwLDAuMzkyLTAuMDMzLDAuNjI2LTAuMDk3YzAuMjMyLTAuMDY0LDAuNC0wLjEyMSwwLjUwNi0wLjE3TDE0LjI3MSwxOC4zMDd6DQoJCSBNMTQuMTM3LDcuNDI5Yy0wLjM1MywwLjMyOC0wLjc3OCwwLjQ5Mi0xLjI3NSwwLjQ5MmMtMC40OTYsMC0wLjkyNC0wLjE2NC0xLjI4LTAuNDkyYy0wLjM1NC0wLjMyOC0wLjUzMy0wLjcyNy0wLjUzMy0xLjE5Mw0KCQljMC0wLjQ2NSwwLjE4LTAuODY1LDAuNTMzLTEuMTk2YzAuMzU2LTAuMzMyLDAuNzg0LTAuNDk3LDEuMjgtMC40OTdjMC40OTcsMCwwLjkyMywwLjE2NSwxLjI3NSwwLjQ5Nw0KCQljMC4zNTMsMC4zMzEsMC41MywwLjczMSwwLjUzLDEuMTk2QzE0LjY2Nyw2LjcwMywxNC40OSw3LjEwMSwxNC4xMzcsNy40Mjl6Ii8+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxOS4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4KCjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0iQ2FwYV8xIgogICB4PSIwcHgiCiAgIHk9IjBweCIKICAgdmlld0JveD0iMCAwIDU3IDU3IgogICBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1NyA1NzsiCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgIHNvZGlwb2RpOmRvY25hbWU9ImFkZC1zZWxlY3RlZC1uZXcuc3ZnIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjQgKDVkYTY4OWMzMTMsIDIwMTktMDEtMTQpIj48bWV0YWRhdGEKICAgaWQ9Im1ldGFkYXRhNDciPjxyZGY6UkRGPjxjYzpXb3JrCiAgICAgICByZGY6YWJvdXQ9IiI+PGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+PGRjOnR5cGUKICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48ZGM6dGl0bGU+PC9kYzp0aXRsZT48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMKICAgaWQ9ImRlZnM0NSI+CgkKCQoJCgkKPC9kZWZzPjxzb2RpcG9kaTpuYW1lZHZpZXcKICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgYm9yZGVyb3BhY2l0eT0iMSIKICAgb2JqZWN0dG9sZXJhbmNlPSIxMCIKICAgZ3JpZHRvbGVyYW5jZT0iMTAiCiAgIGd1aWRldG9sZXJhbmNlPSIxMCIKICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAiCiAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTA5NyIKICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iNzE5IgogICBpZD0ibmFtZWR2aWV3NDMiCiAgIHNob3dncmlkPSJmYWxzZSIKICAgaW5rc2NhcGU6em9vbT0iNC4xNDAzNTA5IgogICBpbmtzY2FwZTpjeD0iLTEwLjc0Nzg4MSIKICAgaW5rc2NhcGU6Y3k9IjI4LjUiCiAgIGlua3NjYXBlOndpbmRvdy14PSIwIgogICBpbmtzY2FwZTp3aW5kb3cteT0iMCIKICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMCIKICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0iQ2FwYV8xIiAvPgo8cGF0aAogICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICBpZD0icGF0aDIiCiAgIGQ9Ik0gMjguNjYsNiBIIDkuMzQgQyA3LjQ5OCw2IDYsNy40OTggNiw5LjM0IFYgMjguNjYgQyA2LDMwLjUwMiA3LjQ5OCwzMiA5LjM0LDMyIEggMjguNjYgQyAzMC41MDIsMzIgMzIsMzAuNTAyIDMyLDI4LjY2IFYgOS4zNCBDIDMyLDcuNDk4IDMwLjUwMiw2IDI4LjY2LDYgWiIgLz48cGF0aAogICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICBpZD0icGF0aDgiCiAgIGQ9Ik0gNTEsMzcgSCA0MSBWIDI3IGMgMCwtMS4xMDQgLTAuODk2LC0yIC0yLC0yIC0xLjEwNCwwIC0yLDAuODk2IC0yLDIgViAzNyBIIDI3IGMgLTEuMTA0LDAgLTIsMC44OTYgLTIsMiAwLDEuMTA0IDAuODk2LDIgMiwyIGggMTAgdiAxMCBjIDAsMS4xMDQgMC44OTYsMiAyLDIgMS4xMDQsMCAyLC0wLjg5NiAyLC0yIFYgNDEgaCAxMCBjIDEuMTA0LDAgMiwtMC44OTYgMiwtMiAwLC0xLjEwNCAtMC44OTYsLTIgLTIsLTIgeiIgLz4KPGcKICAgaWQ9ImcxMiI+CjwvZz4KPGcKICAgaWQ9ImcxNCI+CjwvZz4KPGcKICAgaWQ9ImcxNiI+CjwvZz4KPGcKICAgaWQ9ImcxOCI+CjwvZz4KPGcKICAgaWQ9ImcyMCI+CjwvZz4KPGcKICAgaWQ9ImcyMiI+CjwvZz4KPGcKICAgaWQ9ImcyNCI+CjwvZz4KPGcKICAgaWQ9ImcyNiI+CjwvZz4KPGcKICAgaWQ9ImcyOCI+CjwvZz4KPGcKICAgaWQ9ImczMCI+CjwvZz4KPGcKICAgaWQ9ImczMiI+CjwvZz4KPGcKICAgaWQ9ImczNCI+CjwvZz4KPGcKICAgaWQ9ImczNiI+CjwvZz4KPGcKICAgaWQ9ImczOCI+CjwvZz4KPGcKICAgaWQ9Imc0MCI+CjwvZz4KPC9zdmc+\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTcgNTciIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDU3IDU3OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8Zz4NCgk8cGF0aCBkPSJNMjIuNjYsMEgzLjM0QzEuNDk4LDAsMCwxLjQ5OCwwLDMuMzR2MTkuMzJDMCwyNC41MDIsMS40OTgsMjYsMy4zNCwyNmgxOS4zMmMxLjg0MiwwLDMuMzQtMS40OTgsMy4zNC0zLjM0VjMuMzQNCgkJQzI2LDEuNDk4LDI0LjUwMiwwLDIyLjY2LDB6Ii8+DQoJPHBhdGggZD0iTTMzLjM0LDI2aDE5LjMyYzEuODQyLDAsMy4zNC0xLjQ5OCwzLjM0LTMuMzRWMy4zNEM1NiwxLjQ5OCw1NC41MDIsMCw1Mi42NiwwSDMzLjM0QzMxLjQ5OCwwLDMwLDEuNDk4LDMwLDMuMzR2MTkuMzINCgkJQzMwLDI0LjUwMiwzMS40OTgsMjYsMzMuMzQsMjZ6Ii8+DQoJPHBhdGggZD0iTTIyLjY2LDMwSDMuMzRDMS40OTgsMzAsMCwzMS40OTgsMCwzMy4zNHYxOS4zMkMwLDU0LjUwMiwxLjQ5OCw1NiwzLjM0LDU2aDE5LjMyYzEuODQyLDAsMy4zNC0xLjQ5OCwzLjM0LTMuMzRWMzMuMzQNCgkJQzI2LDMxLjQ5OCwyNC41MDIsMzAsMjIuNjYsMzB6Ii8+DQoJPHBhdGggZD0iTTU1LDQxSDQ1VjMxYzAtMS4xMDQtMC44OTYtMi0yLTJzLTIsMC44OTYtMiwydjEwSDMxYy0xLjEwNCwwLTIsMC44OTYtMiwyczAuODk2LDIsMiwyaDEwdjEwYzAsMS4xMDQsMC44OTYsMiwyLDINCgkJczItMC44OTYsMi0yVjQ1aDEwYzEuMTA0LDAsMi0wLjg5NiwyLTJTNTYuMTA0LDQxLDU1LDQxeiIvPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPC9zdmc+DQo=\"","module.exports = require(\"mousetrap\");","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0naXNvLTg4NTktMSc/Pgo8c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0gIjQ0IiBoZWlnaHQ9ICI0NCIgdmlld0JveD0iMCAwIDQ0IDQ0IiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgNDQgNDQiPgogIDxjaXJjbGUgY3g9IjIyIiBjeT0iMjIiIHI9IjIyIiBmaWxsPSIjZmZmIi8+CiAgPHBhdGggZD0ibTIyLDBjLTEyLjIsMC0yMiw5LjgtMjIsMjJzOS44LDIyIDIyLDIyIDIyLTkuOCAyMi0yMi05LjgtMjItMjItMjJ6bS0xLjMsMTkuM2wtMS40LDEuNGMtMC40LDAuNC0xLDAuNC0xLjQsMGwtNC00Yy0wLjMtMC4zLTAuOS0wLjEtMC45LDAuNHYxYzAsMC42LTAuNCwxLTEsMWgtMmMtMC42LDAtMS0wLjQtMS0xdi04YzAtMC42IDAuNC0xIDEtMWg4YzAuNiwwIDEsMC40IDEsMXYyYzAsMC42LTAuNCwxLTEsMWgtMWMtMC40LDAtMC43LDAuNS0wLjQsMC45bDQsNGMwLjUsMC4zIDAuNSwwLjkgMC4xLDEuM3ptMTQuMywxNC43YzAsMC42LTAuNCwxLTEsMWgtOGMtMC42LDAtMS0wLjQtMS0xdi0yYzAtMC42IDAuNC0xIDEtMWgxYzAuNCwwIDAuNy0wLjUgMC40LTAuOWwtNC00Yy0wLjQtMC40LTAuNC0xIDAtMS40bDEuNC0xLjRjMC40LTAuNCAxLTAuNCAxLjQsMGw0LDRjMC4zLDAuMyAwLjksMC4xIDAuOS0wLjR2LTFjMC0wLjYgMC40LTEgMS0xaDJjMC42LDAgMSwwLjQgMSwxdjguMWgtMC4xeiIvPgo8L3N2Zz4K\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iNjUiCiAgIGhlaWdodD0iMTkuNzg3MjE4IgogICBpZD0ic3ZnMiIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIgogICBzb2RpcG9kaTpkb2NuYW1lPSJhY3RpdmF0ZXMuc3ZnIgogICBpbmtzY2FwZTpleHBvcnQtZmlsZW5hbWU9IkM6XFVzZXJzXHVndXJcRGVza3RvcFxpbnRlcmFjdGlvbi1sZWdlbmQuMjAxNi4wNC4wMS5wbmciCiAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSIzMDAiCiAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSIzMDAiCiAgIHZpZXdCb3g9IjAgMCA2MC45Mzc1MDEgMTguNTUwNTE2Ij4KICA8ZGVmcwogICAgIGlkPSJkZWZzNCI+CiAgICA8bWFya2VyCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJUcmlhbmdsZU91dEwiCiAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgICByZWZZPSIwIgogICAgICAgcmVmWD0iMCIKICAgICAgIGlkPSJtYXJrZXIxMjAyIgogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiCiAgICAgICBpbmtzY2FwZTppc3N0b2NrPSJ0cnVlIj4KICAgICAgPHBhdGgKICAgICAgICAgaWQ9InBhdGgxMjAwIgogICAgICAgICBkPSJNIDUuNzcsMCAtMi44OCw1IFYgLTUgWiIKICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS4wMDAwMDAwM3B0O3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMC44KSIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgIDwvbWFya2VyPgogICAgPG1hcmtlcgogICAgICAgaW5rc2NhcGU6c3RvY2tpZD0iVHJpYW5nbGVPdXRMIgogICAgICAgb3JpZW50PSJhdXRvIgogICAgICAgcmVmWT0iMCIKICAgICAgIHJlZlg9IjAiCiAgICAgICBpZD0iVHJpYW5nbGVPdXRMIgogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiCiAgICAgICBpbmtzY2FwZTppc3N0b2NrPSJ0cnVlIj4KICAgICAgPHBhdGgKICAgICAgICAgaWQ9InBhdGg5NTkiCiAgICAgICAgIGQ9Ik0gNS43NywwIC0yLjg4LDUgViAtNSBaIgogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjAwMDAwMDAzcHQ7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgwLjgpIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPC9tYXJrZXI+CiAgPC9kZWZzPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSI3LjkxOTU5NTkiCiAgICAgaW5rc2NhcGU6Y3g9Ii00LjgxMTAzNTciCiAgICAgaW5rc2NhcGU6Y3k9IjE4LjQ2ODYyMSIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTAxNyIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04IgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiCiAgICAgZml0LW1hcmdpbi10b3A9IjAiCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIgogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiCiAgICAgZml0LW1hcmdpbi1ib3R0b209IjAiIC8+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNyI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGUgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTI3NS42NDI0NywtMjgxLjI5NjQ5KSI+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6My43NDk5OTk5MztzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJtIDI3NS42NDI0NywyOTAuNTcxNzUgaCA0Ny4zNTA4OSIKICAgICAgIGlkPSJwYXRoNDk0OSIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgPHBhdGgKICAgICAgIHNvZGlwb2RpOnR5cGU9InN0YXIiCiAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6My43NTtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTtwYWludC1vcmRlcjpmaWxsIG1hcmtlcnMgc3Ryb2tlIgogICAgICAgaWQ9InBhdGg0OTUzIgogICAgICAgc29kaXBvZGk6c2lkZXM9IjMiCiAgICAgICBzb2RpcG9kaTpjeD0iMjEyLjQyOTAyIgogICAgICAgc29kaXBvZGk6Y3k9IjI1My43OTgyNiIKICAgICAgIHNvZGlwb2RpOnIxPSIxMS4wNTczNDciCiAgICAgICBzb2RpcG9kaTpyMj0iNS41Mjg2NzM2IgogICAgICAgc29kaXBvZGk6YXJnMT0iMC45MTQ0NDc5NiIKICAgICAgIHNvZGlwb2RpOmFyZzI9IjEuOTYxNjQ1NSIKICAgICAgIGlua3NjYXBlOmZsYXRzaWRlZD0idHJ1ZSIKICAgICAgIGlua3NjYXBlOnJvdW5kZWQ9IjAiCiAgICAgICBpbmtzY2FwZTpyYW5kb21pemVkPSIwIgogICAgICAgZD0ibSAyMTkuMTc2NTIsMjYyLjU1ODE4IC0xNy43MDc1NywtNy4yOTYzNyAxNS4xNzI2MiwtMTEuNjg3MDEgeiIKICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteD0iLTIuNjk0NjIxOSIKICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteT0iMC4wNzg0ODk2NTMiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjM5NDM0MDk4LDAuODk5Nzc1MDQsLTAuOTE4OTY0MTksMC4zODYxMDY2Myw0NzQuOTg1ODMsMS4zNjE3MzI5KSIgLz4KICA8L2c+Cjwvc3ZnPgo=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iNjUiCiAgIGhlaWdodD0iMTkuNzg3MjE4IgogICBpZD0ic3ZnMiIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIgogICBzb2RpcG9kaTpkb2NuYW1lPSJpbmhpYml0cy5zdmciCiAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iQzpcVXNlcnNcdWd1clxEZXNrdG9wXGludGVyYWN0aW9uLWxlZ2VuZC4yMDE2LjA0LjAxLnBuZyIKICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjMwMCIKICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjMwMCIKICAgdmlld0JveD0iMCAwIDYwLjkzNzUwMSAxOC41NTA1MTYiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0Ij4KICAgIDxtYXJrZXIKICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IlN0b3BMIgogICAgICAgb3JpZW50PSJhdXRvIgogICAgICAgcmVmWT0iMC4wIgogICAgICAgcmVmWD0iMC4wIgogICAgICAgaWQ9IlN0b3BMIgogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiCiAgICAgICBpbmtzY2FwZTppc3N0b2NrPSJ0cnVlIj4KICAgICAgPHBhdGgKICAgICAgICAgaWQ9InBhdGg5ODYiCiAgICAgICAgIGQ9Ik0gMC4wLDUuNjUgTCAwLjAsLTUuNjUiCiAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjAuNzU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjFwdDtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuOCkiIC8+CiAgICA8L21hcmtlcj4KICAgIDxtYXJrZXIKICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IlRyaWFuZ2xlT3V0TCIKICAgICAgIG9yaWVudD0iYXV0byIKICAgICAgIHJlZlk9IjAiCiAgICAgICByZWZYPSIwIgogICAgICAgaWQ9Im1hcmtlcjEyMDIiCiAgICAgICBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZSIKICAgICAgIGlua3NjYXBlOmlzc3RvY2s9InRydWUiPgogICAgICA8cGF0aAogICAgICAgICBpZD0icGF0aDEyMDAiCiAgICAgICAgIGQ9Ik0gNS43NywwIC0yLjg4LDUgViAtNSBaIgogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjAwMDAwMDAzcHQ7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgwLjgpIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPC9tYXJrZXI+CiAgICA8bWFya2VyCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJUcmlhbmdsZU91dEwiCiAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgICByZWZZPSIwIgogICAgICAgcmVmWD0iMCIKICAgICAgIGlkPSJUcmlhbmdsZU91dEwiCiAgICAgICBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZSIKICAgICAgIGlua3NjYXBlOmlzc3RvY2s9InRydWUiPgogICAgICA8cGF0aAogICAgICAgICBpZD0icGF0aDk1OSIKICAgICAgICAgZD0iTSA1Ljc3LDAgLTIuODgsNSBWIC01IFoiCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuMDAwMDAwMDNwdDtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuOCkiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8L21hcmtlcj4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjcuOTE5NTk1OSIKICAgICBpbmtzY2FwZTpjeD0iLTQuODExMDM1NyIKICAgICBpbmtzY2FwZTpjeT0iMTMuOTIyOTM0IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDE3IgogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIKICAgICBmaXQtbWFyZ2luLXRvcD0iMCIKICAgICBmaXQtbWFyZ2luLWxlZnQ9IjAiCiAgICAgZml0LW1hcmdpbi1yaWdodD0iMCIKICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMCIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE3Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZSAvPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjc1LjY0MjQ3LC0yODEuMjk2NDkpIj4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozLjc0OTk5OTkzO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Im0gMjc1LjY0MjQ3LDI5MC41NzE3NSBoIDU5Ljc4MDUiCiAgICAgICBpZD0icGF0aDQ5NDkiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC43NDUwOTgwNDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6Mi43NzU5Mzc1NjtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTo4LjMyNzgxMjQ2LCAyLjc3NTkzNzQ5O3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTtwYWludC1vcmRlcjpmaWxsIG1hcmtlcnMgc3Ryb2tlIgogICAgICAgaWQ9InJlY3Q0OTgxIgogICAgICAgd2lkdGg9IjAuOTc0MTY5NTUiCiAgICAgICBoZWlnaHQ9IjE1Ljg4OTcwMyIKICAgICAgIHg9IjMzNC4yMTc4MyIKICAgICAgIHk9IjI4Mi42MjY4OSIgLz4KICA8L2c+Cjwvc3ZnPgo=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iNjUiCiAgIGhlaWdodD0iMTkuNzg3MjE4IgogICBpZD0ic3ZnMiIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIgogICBzb2RpcG9kaTpkb2NuYW1lPSJpbmR1Y2VzLnN2ZyIKICAgaW5rc2NhcGU6ZXhwb3J0LWZpbGVuYW1lPSJDOlxVc2Vyc1x1Z3VyXERlc2t0b3BcaW50ZXJhY3Rpb24tbGVnZW5kLjIwMTYuMDQuMDEucG5nIgogICBpbmtzY2FwZTpleHBvcnQteGRwaT0iMzAwIgogICBpbmtzY2FwZTpleHBvcnQteWRwaT0iMzAwIgogICB2aWV3Qm94PSIwIDAgNjAuOTM3NTAxIDE4LjU1MDUxNiI+CiAgPGRlZnMKICAgICBpZD0iZGVmczQiPgogICAgPG1hcmtlcgogICAgICAgaW5rc2NhcGU6c3RvY2tpZD0iVHJpYW5nbGVPdXRMIgogICAgICAgb3JpZW50PSJhdXRvIgogICAgICAgcmVmWT0iMCIKICAgICAgIHJlZlg9IjAiCiAgICAgICBpZD0ibWFya2VyMTIwMiIKICAgICAgIHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlIgogICAgICAgaW5rc2NhcGU6aXNzdG9jaz0idHJ1ZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIGlkPSJwYXRoMTIwMCIKICAgICAgICAgZD0iTSA1Ljc3LDAgLTIuODgsNSBWIC01IFoiCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuMDAwMDAwMDNwdDtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuOCkiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8L21hcmtlcj4KICAgIDxtYXJrZXIKICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IlRyaWFuZ2xlT3V0TCIKICAgICAgIG9yaWVudD0iYXV0byIKICAgICAgIHJlZlk9IjAiCiAgICAgICByZWZYPSIwIgogICAgICAgaWQ9IlRyaWFuZ2xlT3V0TCIKICAgICAgIHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlIgogICAgICAgaW5rc2NhcGU6aXNzdG9jaz0idHJ1ZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIGlkPSJwYXRoOTU5IgogICAgICAgICBkPSJNIDUuNzcsMCAtMi44OCw1IFYgLTUgWiIKICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS4wMDAwMDAwM3B0O3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMC44KSIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgIDwvbWFya2VyPgogIDwvZGVmcz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iNy45MTk1OTU5IgogICAgIGlua3NjYXBlOmN4PSItNC44MTEwMzU3IgogICAgIGlua3NjYXBlOmN5PSIxOC40Njg2MjEiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB4IgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciCiAgICAgaW5rc2NhcGU6d2luZG93LXg9Ii04IgogICAgIGlua3NjYXBlOndpbmRvdy15PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIGZpdC1tYXJnaW4tdG9wPSIwIgogICAgIGZpdC1tYXJnaW4tbGVmdD0iMCIKICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIwIgogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIiAvPgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTciPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgICAgPGRjOnRpdGxlPjwvZGM6dGl0bGU+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIgogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yNzUuNjQyNDcsLTI4MS4yOTY0OSkiPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjMuNzQ5OTk5OTM7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5OjcuNDk5OTk5ODcsNy40OTk5OTk4NztzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNob2Zmc2V0OjAiCiAgICAgICBkPSJtIDI3NS42NDI0NywyOTAuNTcxNzUgaCA0Ny4zNTA4OSIKICAgICAgIGlkPSJwYXRoNDk0OSIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgPHBhdGgKICAgICAgIHNvZGlwb2RpOnR5cGU9InN0YXIiCiAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6My43NTtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTtwYWludC1vcmRlcjpmaWxsIG1hcmtlcnMgc3Ryb2tlIgogICAgICAgaWQ9InBhdGg0OTUzIgogICAgICAgc29kaXBvZGk6c2lkZXM9IjMiCiAgICAgICBzb2RpcG9kaTpjeD0iMjEyLjQyOTAyIgogICAgICAgc29kaXBvZGk6Y3k9IjI1My43OTgyNiIKICAgICAgIHNvZGlwb2RpOnIxPSIxMS4wNTczNDciCiAgICAgICBzb2RpcG9kaTpyMj0iNS41Mjg2NzM2IgogICAgICAgc29kaXBvZGk6YXJnMT0iMC45MTQ0NDc5NiIKICAgICAgIHNvZGlwb2RpOmFyZzI9IjEuOTYxNjQ1NSIKICAgICAgIGlua3NjYXBlOmZsYXRzaWRlZD0idHJ1ZSIKICAgICAgIGlua3NjYXBlOnJvdW5kZWQ9IjAiCiAgICAgICBpbmtzY2FwZTpyYW5kb21pemVkPSIwIgogICAgICAgZD0ibSAyMTkuMTc2NTIsMjYyLjU1ODE4IC0xNy43MDc1NywtNy4yOTYzNyAxNS4xNzI2MiwtMTEuNjg3MDEgeiIKICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteD0iLTIuNjk0NjIxOSIKICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteT0iMC4wNzg0ODk2NTMiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjM5NDM0MDk4LDAuODk5Nzc1MDQsLTAuOTE4OTY0MTksMC4zODYxMDY2Myw0NzQuOTg1ODMsMS4zNjE3MzI5KSIgLz4KICA8L2c+Cjwvc3ZnPgo=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iNjUiCiAgIGhlaWdodD0iMTkuNzg3MjE4IgogICBpZD0ic3ZnMiIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIgogICBzb2RpcG9kaTpkb2NuYW1lPSJyZXByZXNzZXMuc3ZnIgogICBpbmtzY2FwZTpleHBvcnQtZmlsZW5hbWU9IkM6XFVzZXJzXHVndXJcRGVza3RvcFxpbnRlcmFjdGlvbi1sZWdlbmQuMjAxNi4wNC4wMS5wbmciCiAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSIzMDAiCiAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSIzMDAiCiAgIHZpZXdCb3g9IjAgMCA2MC45Mzc1MDEgMTguNTUwNTE2Ij4KICA8ZGVmcwogICAgIGlkPSJkZWZzNCI+CiAgICA8bWFya2VyCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJTdG9wTCIKICAgICAgIG9yaWVudD0iYXV0byIKICAgICAgIHJlZlk9IjAuMCIKICAgICAgIHJlZlg9IjAuMCIKICAgICAgIGlkPSJTdG9wTCIKICAgICAgIHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlIgogICAgICAgaW5rc2NhcGU6aXNzdG9jaz0idHJ1ZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIGlkPSJwYXRoOTg2IgogICAgICAgICBkPSJNIDAuMCw1LjY1IEwgMC4wLC01LjY1IgogICAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtb3BhY2l0eTowLjc1O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxcHQ7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgwLjgpIiAvPgogICAgPC9tYXJrZXI+CiAgICA8bWFya2VyCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJUcmlhbmdsZU91dEwiCiAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgICByZWZZPSIwIgogICAgICAgcmVmWD0iMCIKICAgICAgIGlkPSJtYXJrZXIxMjAyIgogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiCiAgICAgICBpbmtzY2FwZTppc3N0b2NrPSJ0cnVlIj4KICAgICAgPHBhdGgKICAgICAgICAgaWQ9InBhdGgxMjAwIgogICAgICAgICBkPSJNIDUuNzcsMCAtMi44OCw1IFYgLTUgWiIKICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS4wMDAwMDAwM3B0O3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMC44KSIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgIDwvbWFya2VyPgogICAgPG1hcmtlcgogICAgICAgaW5rc2NhcGU6c3RvY2tpZD0iVHJpYW5nbGVPdXRMIgogICAgICAgb3JpZW50PSJhdXRvIgogICAgICAgcmVmWT0iMCIKICAgICAgIHJlZlg9IjAiCiAgICAgICBpZD0iVHJpYW5nbGVPdXRMIgogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiCiAgICAgICBpbmtzY2FwZTppc3N0b2NrPSJ0cnVlIj4KICAgICAgPHBhdGgKICAgICAgICAgaWQ9InBhdGg5NTkiCiAgICAgICAgIGQ9Ik0gNS43NywwIC0yLjg4LDUgViAtNSBaIgogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjAwMDAwMDAzcHQ7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgwLjgpIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPC9tYXJrZXI+CiAgPC9kZWZzPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSI3LjkxOTU5NTkiCiAgICAgaW5rc2NhcGU6Y3g9Ii0yNS4zMjk3NTkiCiAgICAgaW5rc2NhcGU6Y3k9IjEzLjkyMjkzNCIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTAxNyIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04IgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiCiAgICAgZml0LW1hcmdpbi10b3A9IjAiCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIgogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiCiAgICAgZml0LW1hcmdpbi1ib3R0b209IjAiIC8+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNyI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGUgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTI3NS42NDI0NywtMjgxLjI5NjQ5KSI+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6My43NTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6Ny40OTk5OTk4NywgNy40OTk5OTk4NztzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJtIDI3NS42NDI0NywyOTAuNTcxNzUgaCA1OS43ODA1IgogICAgICAgaWQ9InBhdGg0OTQ5IgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICA8cmVjdAogICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNzQ1MDk4MDQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjIuNzc1OTM3NTY7c3Ryb2tlLWxpbmVjYXA6c3F1YXJlO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6OC4zMjc4MTIzNSwgMi43NzU5Mzc0NTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7cGFpbnQtb3JkZXI6ZmlsbCBtYXJrZXJzIHN0cm9rZSIKICAgICAgIGlkPSJyZWN0NDk4MSIKICAgICAgIHdpZHRoPSIwLjk3NDE2OTU1IgogICAgICAgaGVpZ2h0PSIxNS44ODk3MDMiCiAgICAgICB4PSIzMzIuMzQyODMiCiAgICAgICB5PSIyODIuNjI2ODkiIC8+CiAgPC9nPgo8L3N2Zz4K\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iNjUiCiAgIGhlaWdodD0iMTkuNzg3MjE4IgogICBpZD0ic3ZnMiIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIgogICBzb2RpcG9kaTpkb2NuYW1lPSJiaW5kcy5zdmciCiAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iQzpcVXNlcnNcdWd1clxEZXNrdG9wXGludGVyYWN0aW9uLWxlZ2VuZC4yMDE2LjA0LjAxLnBuZyIKICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjMwMCIKICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjMwMCIKICAgdmlld0JveD0iMCAwIDYwLjkzNzUwMSAxOC41NTA1MTYiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0Ij4KICAgIDxtYXJrZXIKICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IlRyaWFuZ2xlT3V0TCIKICAgICAgIG9yaWVudD0iYXV0byIKICAgICAgIHJlZlk9IjAiCiAgICAgICByZWZYPSIwIgogICAgICAgaWQ9Im1hcmtlcjEyMDIiCiAgICAgICBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZSIKICAgICAgIGlua3NjYXBlOmlzc3RvY2s9InRydWUiPgogICAgICA8cGF0aAogICAgICAgICBpZD0icGF0aDEyMDAiCiAgICAgICAgIGQ9Ik0gNS43NywwIC0yLjg4LDUgViAtNSBaIgogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjAwMDAwMDAzcHQ7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgwLjgpIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPC9tYXJrZXI+CiAgICA8bWFya2VyCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJUcmlhbmdsZU91dEwiCiAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgICByZWZZPSIwIgogICAgICAgcmVmWD0iMCIKICAgICAgIGlkPSJUcmlhbmdsZU91dEwiCiAgICAgICBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZSIKICAgICAgIGlua3NjYXBlOmlzc3RvY2s9InRydWUiPgogICAgICA8cGF0aAogICAgICAgICBpZD0icGF0aDk1OSIKICAgICAgICAgZD0iTSA1Ljc3LDAgLTIuODgsNSBWIC01IFoiCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuMDAwMDAwMDNwdDtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuOCkiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8L21hcmtlcj4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjcuOTE5NTk1OSIKICAgICBpbmtzY2FwZTpjeD0iLTQuODExMDM1NyIKICAgICBpbmtzY2FwZTpjeT0iMTguNDY4NjIxIgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDE3IgogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIKICAgICBmaXQtbWFyZ2luLXRvcD0iMCIKICAgICBmaXQtbWFyZ2luLWxlZnQ9IjAiCiAgICAgZml0LW1hcmdpbi1yaWdodD0iMCIKICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMCIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE3Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjc1LjY0MjQ3LC0yODEuMjk2NDkpIj4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozLjc1O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Im0gMjc1LjY0MjQ3LDI5MC41NzE3NSBoIDYwLjkzNzUiCiAgICAgICBpZD0icGF0aDQ5NDkiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICA8L2c+Cjwvc3ZnPgo=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjQ4OC43OHB4IiBoZWlnaHQ9IjQ4OC43OHB4IiB2aWV3Qm94PSIwIDAgNDg4Ljc4IDQ4OC43OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDg4Ljc4IDQ4OC43ODsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxwYXRoIGQ9Ik0xNDEuNDA4LDExOS44NzJjMTIuMjkzLTEzLjExMiwyOS42NTMtMjAuNzcsNDcuNjI0LTIwLjc3aDI0Ny40MDVWNDcuODI4YzAtMTIuNTY5LTEwLjQ2OC0yMi42NTItMjMuMDM2LTIyLjY1Mkg3NS4zOTcNCgkJCWMtMTIuNTc1LDAtMjIuNDkxLDEwLjA4My0yMi40OTEsMjIuNjUydjEwMS4wNDZoNjEuNDQ1TDE0MS40MDgsMTE5Ljg3MnoiLz4NCgkJPHBhdGggZD0iTTQ4My4wMTksMTQ5LjI1M2MtMS43MDktMS45MjQtMy43MTctMy41NS01LjkyMy00Ljc4Yy0zLjM1Mi0xLjg2MS03LjE1MS0yLjkyLTExLjA3MS0yLjkySDE4OS4wMzJsMCwwDQoJCQljLTYsMC0xMS43MzUsMi40MDktMTUuOTgzLDYuNjAxYy0wLjIxNCwwLjIwOC0wLjQyMywwLjQzOC0wLjYyNiwwLjY1MWwtOS4yNzUsOS45MTFsLTIzLjYyMiwyNS4yMDcNCgkJCWMtMC41NDIsMC41NzMtMS4xMDUsMS4yMTktMS42OTQsMS43MzZjLTQuMTEzLDMuNTcyLTkuNDEsNS42NjctMTQuOTE1LDUuNjY3aC0wLjAwNUgyMi43NjhsMCwwDQoJCQljLTUuNjg0LDAtMTEuMTExLDIuMDIyLTE1LjI3MSw1Ljc5MWMtMC42NjcsMC41ODktMS4yOTMsMS4xNzktMS44ODgsMS44NTdjLTAuNDE3LDAuNDc5LTAuODAzLDAuOTQ4LTEuMTgzLDEuNDU5DQoJCQljLTMuNDgyLDQuNzQ0LTUuMDIsMTAuNjYxLTQuMjE3LDE2LjU0MmwyNi40NzksMTk0LjE4MmMzLjU2NSwyNi4xNCwyMy41NTMsNDYuNjEyLDQ4LjY5Miw1MS4yODQNCgkJCWMzLjU5MiwwLjY2Nyw3LjI4OCwxLjE2MywxMS4wNTgsMS4xNjNoMzE0LjI2MWMyNy43NjEsMCw1MS41MjItMTkuMDAzLDU4LjM1NC00NS4xOTRjMC43MDQtMi43MDYsMS4yMjYtNS41NjcsMS41NTUtOC40Mg0KCQkJbDE1LjI2NS0xMzIuMjg5bDEyLjc3Mi0xMTAuNjc0YzAuMDY3LTAuNjQ3LDAuMTA4LTEuMjkzLDAuMTI1LTEuOTI5QzQ4OC45NDcsMTU5LjI5OSw0ODYuOTA5LDE1My42MjMsNDgzLjAxOSwxNDkuMjUzeiIvPg0KCTwvZz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4KCjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0iQ2FwYV8xIgogICB4PSIwcHgiCiAgIHk9IjBweCIKICAgd2lkdGg9IjQ4OXB4IgogICBoZWlnaHQ9IjQ4OS4wMDFweCIKICAgdmlld0JveD0iMCAwIDQ4OSA0ODkuMDAxIgogICBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA0ODkgNDg5LjAwMTsiCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTEgcjEzNzI1IgogICBzb2RpcG9kaTpkb2NuYW1lPSJuZXcuc3ZnIj48bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE0MSI+PHJkZjpSREY+PGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PjxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMKICAgICBpZD0iZGVmczM5IiAvPjxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMSIKICAgICBvYmplY3R0b2xlcmFuY2U9IjEwIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwIgogICAgIGd1aWRldG9sZXJhbmNlPSIxMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iNjkwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjQ4MCIKICAgICBpZD0ibmFtZWR2aWV3MzciCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOnpvb209IjAuNDgyNjE2NTkiCiAgICAgaW5rc2NhcGU6Y3g9IjI0NC41IgogICAgIGlua3NjYXBlOmN5PSIyNDQuNTAwNSIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIwIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9IkNhcGFfMSIgLz48ZwogICAgIGlkPSJnMyIKICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjk2MTk2NzY5LDAsMCwwLjk2MTk2NzY5LDkuMDEwNzg0OCwxMCkiPjxwYXRoCiAgICAgICBkPSJNIDM1NS43NjgsMCA4Ni4yMTgsMCBDIDUzLjMzLDAgMjYuNTc3LDI2Ljc1MyAyNi41NzcsNTkuNjM2IGwgMCwzNjkuNzI5IGMgMCwzMi44ODMgMjYuNzUyLDU5LjYzNiA1OS42NDEsNTkuNjM2IGwgMzE2LjU2NiwwIGMgMzIuODg5LC0xMGUtNCA1OS42NDEsLTI2Ljc1NCA1OS42NDEsLTU5LjYzNyBsIDAsLTMyMC4yMDQgTCAzNTUuNzY4LDAgWiBtIDQ3LjAxNiw0NDYuNDc5IC0zMTYuNTY2LDAgYyAtOS40MzcsMCAtMTcuMTE5LC03LjY3OCAtMTcuMTE5LC0xNy4xMTMgbCAwLC0zNjkuNzMgYyAwLC05LjQzNyA3LjY4MywtMTcuMTE0IDE3LjExOSwtMTcuMTE0IGwgMjQ4LjY0MiwwIDAsNDcuNjA0IGMgMCwyMS4wNDMgMTcuMTA5LDM4LjE2MiAzOC4xNTIsMzguMzc1IGwgNDYuODkxLDAuNDc3IDAsMzAwLjM4OCBjIDAsOS40MzUgLTcuNjg0LDE3LjExMyAtMTcuMTE5LDE3LjExMyB6IgogICAgICAgaWQ9InBhdGg1IgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz48L2c+PGcKICAgICBpZD0iZzciIC8+PGcKICAgICBpZD0iZzkiIC8+PGcKICAgICBpZD0iZzExIiAvPjxnCiAgICAgaWQ9ImcxMyIgLz48ZwogICAgIGlkPSJnMTUiIC8+PGcKICAgICBpZD0iZzE3IiAvPjxnCiAgICAgaWQ9ImcxOSIgLz48ZwogICAgIGlkPSJnMjEiIC8+PGcKICAgICBpZD0iZzIzIiAvPjxnCiAgICAgaWQ9ImcyNSIgLz48ZwogICAgIGlkPSJnMjciIC8+PGcKICAgICBpZD0iZzI5IiAvPjxnCiAgICAgaWQ9ImczMSIgLz48ZwogICAgIGlkPSJnMzMiIC8+PGcKICAgICBpZD0iZzM1IiAvPjwvc3ZnPg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE4LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgdmlld0JveD0iMCAwIDM5Mi42MiAzOTIuNjIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDM5Mi42MiAzOTIuNjI7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxyZWN0IHg9IjE0NC44NjYiIHk9IjMyMC44OTciIHdpZHRoPSIyMy41MDUiIGhlaWdodD0iMjUiLz4NCgk8cGF0aCBkPSJNMzA5Ljc5NSwwSDI2Ni40OUgxMjYuMTMxSDgyLjgyNUMzNy42NjcsMCwwLjkyOSwzNi43MzgsMC45MjksODEuODk2djIyOC44MjhjMCw0NS4xNTgsMzYuNzM4LDgxLjg5Niw4MS44OTYsODEuODk2aDU4LjMyDQoJCWgxMTMuNDQzaDU1LjIwNmM0NS4xNTcsMCw4MS44OTYtMzYuNzM4LDgxLjg5Ni04MS44OTZWODEuODk2QzM5MS42OTEsMzYuNzM4LDM1NC45NTIsMCwzMDkuNzk1LDB6IE0yNjYuNDksMzANCgkJYzE0LjM1NCwwLDI2LjAzLDkuNTQyLDI2LjAzLDIxLjI3VjE3NC4zM2MwLDExLjcyOS0xMS42NzcsMjEuMjcxLTI2LjAzLDIxLjI3MUgxMjYuMTMxYy0xNC4zNTQsMC0yNi4wMzEtOS41NDItMjYuMDMxLTIxLjI3MQ0KCQlWNTEuMjdjMC0xMS43MjgsMTEuNjc4LTIxLjI3LDI2LjAzMS0yMS4yN0gyNjYuNDl6IE0xNDEuMTQ2LDM2Mi42MmMtNi4yNTksMC0xMS4zNTItNS4wOTItMTEuMzUyLTExLjM1MXYtMzAuMDY2DQoJCWMwLTYuMjU5LDUuMDkzLTExLjM1MSwxMS4zNTItMTEuMzUxaDExMy40NDNjNi4yNTksMCwxMS4zNTEsNS4wOTIsMTEuMzUxLDExLjM1MXYzMC4wNjZjMCw2LjI1OS01LjA5MiwxMS4zNTEtMTEuMzUxLDExLjM1MQ0KCQlIMTQxLjE0NnogTTM2MS42OTEsMzEwLjcyNGMwLDI4LjYxNi0yMy4yOCw1MS44OTYtNTEuODk2LDUxLjg5NmgtMTUuNDUyYzEuMDMyLTMuNjEsMS41OTctNy40MTQsMS41OTctMTEuMzUxdi0zMC4wNjYNCgkJYzAtMjIuODAxLTE4LjU1LTQxLjM1MS00MS4zNTEtNDEuMzUxSDE0MS4xNDZjLTIyLjgwMiwwLTQxLjM1MiwxOC41NS00MS4zNTIsNDEuMzUxdjMwLjA2NmMwLDMuOTM3LDAuNTY1LDcuNzQyLDEuNTk3LDExLjM1MQ0KCQlIODIuODI1Yy0yOC42MTYsMC01MS44OTYtMjMuMjgtNTEuODk2LTUxLjg5NlY4MS44OTZjMC0yNS45MSwxOS4wODctNDcuNDQ0LDQzLjkzOC01MS4yODVDNzEuODExLDM2LjkzNSw3MC4xLDQzLjkyMSw3MC4xLDUxLjI3DQoJCVYxNzQuMzNjMCwyOC4yNzEsMjUuMTM2LDUxLjI3MSw1Ni4wMzEsNTEuMjcxSDI2Ni40OWMzMC44OTYsMCw1Ni4wMy0yMyw1Ni4wMy01MS4yNzFWNTEuMjdjMC03LjM0OC0xLjcxMS0xNC4zMzQtNC43NjctMjAuNjU5DQoJCWMyNC44NTEsMy44NDEsNDMuOTM4LDI1LjM3NSw0My45MzgsNTEuMjg1VjMxMC43MjR6Ii8+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxOC4xLjEsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4KCjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0iQ2FwYV8xIgogICB4PSIwcHgiCiAgIHk9IjBweCIKICAgdmlld0JveD0iMCAwIDYxMiA2MTIiCiAgIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDYxMiA2MTI7IgogICB4bWw6c3BhY2U9InByZXNlcnZlIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkxIHIxMzcyNSIKICAgc29kaXBvZGk6ZG9jbmFtZT0iZGVsZXRlLXNpbXBsZS5zdmciPjxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTQzIj48cmRmOlJERj48Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+PGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+PGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPjwvY2M6V29yaz48L3JkZjpSREY+PC9tZXRhZGF0YT48ZGVmcwogICAgIGlkPSJkZWZzNDEiIC8+PHNvZGlwb2RpOm5hbWVkdmlldwogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxIgogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiCiAgICAgZ3JpZHRvbGVyYW5jZT0iMTAiCiAgICAgZ3VpZGV0b2xlcmFuY2U9IjEwIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciCiAgICAgaWQ9Im5hbWVkdmlldzM5IgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTp6b29tPSIxLjA5MDcwMDciCiAgICAgaW5rc2NhcGU6Y3g9IjI5NS4wMzQwOCIKICAgICBpbmtzY2FwZTpjeT0iMzMwLjg1NDQ4IgogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJDYXBhXzEiIC8+PGcKICAgICBpZD0iZzUiCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC45OTc4ODEzNSwwLDAsMC45OTc4ODEzNSwxLjczMDQwMTIsMC45MjM3Mjg0NykiPjxwYXRoCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgaWQ9InBhdGg3IgogICAgICAgZD0iTSA1ODcuODI2LDE4Ni45NjYgQyA1NzEuNzEsMTQ5LjYzNCA1NDkuODgyLDExNy4xOTggNTIyLjM0Miw4OS42NTggNDk0LjgwMiw2Mi4xMTggNDYyLjM2Niw0MC4yOSA0MjUuMDM0LDI0LjE3NCAzODcuNzAyLDguMDU4IDM0OC4wMjQsMCAzMDYsMCAyNzcuODQ4LDAgMjUwLjcxNiwzLjY3MiAyMjQuNjA0LDExLjAxNiAxOTguNDkyLDE4LjM2IDE3NC4xMTQsMjguNjYyIDE1MS40Nyw0MS45MjIgMTI4LjgyNiw1NS4xODIgMTA4LjIyMiw3MS4wOTQgODkuNjU4LDg5LjY1OCA3MS4wOTQsMTA4LjIyMiA1NS4xODIsMTI4LjgyNiA0MS45MjIsMTUxLjQ3IDI4LjY2MiwxNzQuMTE2IDE4LjM2LDE5OC40OTIgMTEuMDE2LDIyNC42MDQgMy42NzIsMjUwLjcxNiAwLDI3Ny44NDggMCwzMDYgYyAwLDI4LjE1MiAzLjY3Miw1NS4yODQgMTEuMDE2LDgxLjM5NiA3LjM0NCwyNi4xMSAxNy42NDYsNTAuNDg3IDMwLjkwNiw3My4xMzQgMTMuMjYsMjIuNjQ0IDI5LjE3Miw0My4yNDkgNDcuNzM2LDYxLjgxMiAxOC41NjQsMTguNTY0IDM5LjE2OCwzNC40NzggNjEuODEyLDQ3LjczNiAyMi42NDQsMTMuMjYgNDcuMDIyLDIzLjU2MSA3My4xMzQsMzAuOTA2IEMgMjUwLjcxNiw2MDguMzI4IDI3Ny44NDgsNjEyIDMwNiw2MTIgYyAyOC4xNTIsMCA1NS4yODQsLTMuNjcyIDgxLjM5NiwtMTEuMDE2IDI2LjExMSwtNy4zNDYgNTAuNDg4LC0xNy42NDYgNzMuMTM1LC0zMC45MDYgMjIuNjQ0LC0xMy4yNTkgNDMuMjQ5LC0yOS4xNzIgNjEuODEyLC00Ny43MzYgMTguNTY0LC0xOC41NjMgMzQuNDc4LC0zOS4xNjggNDcuNzM2LC02MS44MTIgMTMuMjYsLTIyLjY0NiAyMy41NjEsLTQ3LjAyMyAzMC45MDYsLTczLjEzNSBDIDYwOC4zMjgsMzYxLjI4NCA2MTIsMzM0LjE1MiA2MTIsMzA2IDYxMiwyNjMuOTc2IDYwMy45NDIsMjI0LjI5OCA1ODcuODI2LDE4Ni45NjYgWiBNIDQ2OC4xOCwzOTEuNjggYyAyLjA0LDIuMDQgMy4wNjMsNC4yODQgMy4wNjMsNi43MzIgMCwyLjQ0OCAtMS4wMjEsNC40ODggLTMuMDYzLDYuMTIgbCAtNTkuOTc2LDYwLjU4OCBjIC0xLjYzMSwxLjYzMiAtMy44NzYsMi40NDggLTYuNzMyLDIuNDQ4IC0yLjg1NCwwIC00Ljg5NSwtMC44MTYgLTYuMTIsLTIuNDQ4IEwgMzA5LjA2LDM3OC44MjggMjIzLjM4LDQ2NS4xMiBjIC0yLjQ0OCwxLjYzMiAtNC42OTIsMi40NDggLTYuNzMyLDIuNDQ4IC0xLjYzMiwwIC0zLjY3MiwtMC44MTYgLTYuMTIsLTIuNDQ4IGwgLTU5Ljk3NiwtNjAuNTg4IGMgLTIuMDQsLTEuMjI2IC0zLjA2LC0zLjI2NyAtMy4wNiwtNi4xMiAwLC0yLjQ0OCAxLjAyLC00LjY5MiAzLjA2LC02LjczMiBsIDg1LjY4LC04NS42OCAtODUuNjgsLTg1LjY4IGMgLTIuMDQsLTIuMDQgLTMuMDYsLTQuMjg0IC0zLjA2LC02LjczMiAwLC0yLjg1NiAxLjAyLC00Ljg5NiAzLjA2LC02LjEyIGwgNTkuOTc2LC02MC41ODggYyAxLjYzMiwtMS42MzIgMy42NzIsLTIuNDQ4IDYuMTIsLTIuNDQ4IDIuNDQ4LDAgNC42OTIsMC44MTYgNi43MzIsMi40NDggbCA4NS42OCw4Ni4yOTIgODYuMjkyLC04Ni4yOTIgYyAxLjYzNSwtMS42MzIgMy42NzUsLTIuNDQ4IDYuMTIsLTIuNDQ4IDIuNDQ4LDAgNC42OTIsMC44MTYgNi43MzIsMi40NDggbCA1OS45NzYsNjAuNTg4IGMgMi4wNCwxLjYzMiAzLjA2MywzLjY3MiAzLjA2Myw2LjEyIDAsMi40NDggLTEuMDIxLDQuNjkyIC0zLjA2Myw2LjczMiBMIDM4Mi41LDMwNiBsIDg1LjY4LDg1LjY4IHoiCiAgICAgICBzdHlsZT0iZmlsbDojMDEwMDAyIiAvPjwvZz48ZwogICAgIGlkPSJnOSIgLz48ZwogICAgIGlkPSJnMTEiIC8+PGcKICAgICBpZD0iZzEzIiAvPjxnCiAgICAgaWQ9ImcxNSIgLz48ZwogICAgIGlkPSJnMTciIC8+PGcKICAgICBpZD0iZzE5IiAvPjxnCiAgICAgaWQ9ImcyMSIgLz48ZwogICAgIGlkPSJnMjMiIC8+PGcKICAgICBpZD0iZzI1IiAvPjxnCiAgICAgaWQ9ImcyNyIgLz48ZwogICAgIGlkPSJnMjkiIC8+PGcKICAgICBpZD0iZzMxIiAvPjxnCiAgICAgaWQ9ImczMyIgLz48ZwogICAgIGlkPSJnMzUiIC8+PGcKICAgICBpZD0iZzM3IiAvPjwvc3ZnPg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4KCjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0iQ2FwYV8xIgogICB4PSIwcHgiCiAgIHk9IjBweCIKICAgd2lkdGg9IjQ3MS42MDhweCIKICAgaGVpZ2h0PSI0NzEuNjA4cHgiCiAgIHZpZXdCb3g9IjAgMCA0NzEuNjA4IDQ3MS42MDgiCiAgIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQ3MS42MDggNDcxLjYwODsiCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTEgcjEzNzI1IgogICBzb2RpcG9kaTpkb2NuYW1lPSJ1bmRvLnN2ZyI+PG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNDEiPjxyZGY6UkRGPjxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj48ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD48ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+PC9jYzpXb3JrPjwvcmRmOlJERj48L21ldGFkYXRhPjxkZWZzCiAgICAgaWQ9ImRlZnMzOSIgLz48c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEiCiAgICAgb2JqZWN0dG9sZXJhbmNlPSIxMCIKICAgICBncmlkdG9sZXJhbmNlPSIxMCIKICAgICBndWlkZXRvbGVyYW5jZT0iMTAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjEyMjkiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iODE2IgogICAgIGlkPSJuYW1lZHZpZXczNyIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgaW5rc2NhcGU6em9vbT0iMC41MDA0MTU2IgogICAgIGlua3NjYXBlOmN4PSIyMzUuODA0IgogICAgIGlua3NjYXBlOmN5PSIyMzUuODA0IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjAiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0iQ2FwYV8xIiAvPjxnCiAgICAgaWQ9ImczIj48cGF0aAogICAgICAgZD0ibSAzODQuNTM1MTksOTEuMDY3NzQ0IGMgLTgxLjQ1OTU0LC04MS40NTY4NzkxIC0yMTQuMDA4MDcsLTgxLjQ1Njg3OTEgLTI5NS40NjU4MjgsMCAtODEuNDU3NzY0MSw4MS40NTY4NzYgLTgxLjQ1Njg3ODEsMjE0LjAxMTYwNiAwLDI5NS40NjU4MjYgODEuNDU2ODY4LDgxLjQ1OTUzIDIxNC4wMDU0MDgsODEuNDU5NTMgMjk1LjQ2NTgyOCwwIDgxLjQ1OTUzLC04MS40NTMzNCA4MS40NTk1MywtMjE0LjAwMjc1IDAsLTI5NS40NjU4MjYgeiBNIDM2OC4zMjg4MywzNzAuMzM4NzIgYyAtNzIuNTE4NTksNzIuNTE4NTkgLTE5MC41MzYzLDcyLjUxODU5IC0yNjMuMDY2MzksMCAtNzIuNTE2ODE3LC03Mi41MzAwOSAtNzIuNTE2ODE3LC0xOTAuNTQyNSAwLC0yNjMuMDY3MjcgNzIuNTI5MiwtNzIuNTI2NTU5IDE5MC41MzYyOSwtNzIuNTI2NTU5IDI2My4wNjYzOSwwIDcyLjUyNTY3LDcyLjUyNDc3IDcyLjUyNTY3LDE5MC41MzcxOCAwLDI2My4wNjcyNyB6IG0gMTIuNDQzNDcsLTE5OC4xMjc2IC0xMS42MjA3Niw1Mi4zMjk3MSBjIC0wLjMxMzUsMS40NDcwNiAtMS43NDM3MywyLjM0NjgyIC0zLjE4MjgyLDIuMDM1OTggLTAuNDQwMTQsLTAuMDkzOSAtMTAuOTUwMzYsLTIuMzU4MzQgLTI2LjI5ODU4LC0yLjM1ODM0IC0yNS44ODk0NCwwIC03MS42MjQxMyw2Ljg1MTg0IC0xMDEuODMxNzIsNDkuNTUzMzggbCA2LjI5NjU2LDYuMjk2NTcgNzAuNTAzODYsMzAuNTU5MTcgYyAyLjM2NTQyLDEuMDM3MDMgMy43NTc1OCwzLjUwNjk1IDMuMzkxODMsNi4wNjcyIC0wLjM1MDcsMi41NDk2MiAtMi4zNjEsNC41NTQ2MSAtNC45MzA5OSw0Ljg3MzQyIGwgLTE3NS42MDUxOSwyMi45NTkwMSBjIC0xLjc1ODc5LDAuMjMwMjUgLTMuNTM4ODMsLTAuMzc3MjYgLTQuNzk3MjYsLTEuNjI3NzIgLTEuMjY2NCwtMS4yNjE5NyAtMS44NTUzMiwtMy4wMzY3IC0xLjYzNTY5LC00LjgwNjEyIGwgMjIuOTU5LC0xNzUuNjA3ODUgYyAwLjE2NDczLC0xLjI4NSAwLjc1MzY0LC0yLjQzNjI3IDEuNjIzMywtMy4zMDUwMyAwLjg1ODE0LC0wLjg1OTAzIDEuOTg5MDQsLTEuNDQ3OTUgMy4yNjM0MSwtMS42MzEyNyAyLjU0Njk3LC0wLjM1Nzc4IDUuMDE3NzcsMS4wMzcwMyA2LjA1MzkyLDMuMzk0NDggbCAzMC41NjcxNCw3MC41MDY1MiAwLjE1NzYzLDAuMTU3NjMgYyA0Ny4xNDE5MSwtNTkuNDAxMTcgMTE1LjQxNTg0LC02Ni40ODk0NiAxNDUuMDI4MzEsLTY2LjQ4OTQ2IDEzLjU0NjkzLDAgMjYuNjk2MjIsMS4zNDUyMiAzOC4wMjM4NCwzLjg4Njg3IDEuNDUzMjYsMC4zMzIxIDIuMzYzNjUsMS43NjMyMiAyLjAzNDIxLDMuMjA1ODUgeiIKICAgICAgIGlkPSJwYXRoNSIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PC9nPjxnCiAgICAgaWQ9Imc3IiAvPjxnCiAgICAgaWQ9Imc5IiAvPjxnCiAgICAgaWQ9ImcxMSIgLz48ZwogICAgIGlkPSJnMTMiIC8+PGcKICAgICBpZD0iZzE1IiAvPjxnCiAgICAgaWQ9ImcxNyIgLz48ZwogICAgIGlkPSJnMTkiIC8+PGcKICAgICBpZD0iZzIxIiAvPjxnCiAgICAgaWQ9ImcyMyIgLz48ZwogICAgIGlkPSJnMjUiIC8+PGcKICAgICBpZD0iZzI3IiAvPjxnCiAgICAgaWQ9ImcyOSIgLz48ZwogICAgIGlkPSJnMzEiIC8+PGcKICAgICBpZD0iZzMzIiAvPjxnCiAgICAgaWQ9ImczNSIgLz48L3N2Zz4=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4KCjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0iQ2FwYV8xIgogICB4PSIwcHgiCiAgIHk9IjBweCIKICAgd2lkdGg9IjQ3MS42MDhweCIKICAgaGVpZ2h0PSI0NzEuNjA4cHgiCiAgIHZpZXdCb3g9IjAgMCA0NzEuNjA4IDQ3MS42MDgiCiAgIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQ3MS42MDggNDcxLjYwODsiCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTEgcjEzNzI1IgogICBzb2RpcG9kaTpkb2NuYW1lPSJyZWRvLnN2ZyI+PG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNDEiPjxyZGY6UkRGPjxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj48ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD48ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+PGRjOnRpdGxlPjwvZGM6dGl0bGU+PC9jYzpXb3JrPjwvcmRmOlJERj48L21ldGFkYXRhPjxkZWZzCiAgICAgaWQ9ImRlZnMzOSIgLz48c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEiCiAgICAgb2JqZWN0dG9sZXJhbmNlPSIxMCIKICAgICBncmlkdG9sZXJhbmNlPSIxMCIKICAgICBndWlkZXRvbGVyYW5jZT0iMTAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjEyMjkiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iODE2IgogICAgIGlkPSJuYW1lZHZpZXczNyIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgaW5rc2NhcGU6em9vbT0iMC41MDA0MTU2IgogICAgIGlua3NjYXBlOmN4PSIyMzUuODA0IgogICAgIGlua3NjYXBlOmN5PSIyMzUuODA0IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjAiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0iQ2FwYV8xIiAvPjxnCiAgICAgaWQ9ImczIgogICAgIHRyYW5zZm9ybT0ibWF0cml4KC0xLDAsMCwxLDQ3My42MDYyMSwwKSI+PHBhdGgKICAgICAgIGQ9Im0gMzg0LjUzNTE5LDkxLjA2Nzc0NCBjIC04MS40NTk1NCwtODEuNDU2ODc5MSAtMjE0LjAwODA3LC04MS40NTY4NzkxIC0yOTUuNDY1ODI4LDAgLTgxLjQ1Nzc2NDEsODEuNDU2ODc2IC04MS40NTY4NzgxLDIxNC4wMTE2MDYgMCwyOTUuNDY1ODI2IDgxLjQ1Njg2OCw4MS40NTk1MyAyMTQuMDA1NDA4LDgxLjQ1OTUzIDI5NS40NjU4MjgsMCA4MS40NTk1MywtODEuNDUzMzQgODEuNDU5NTMsLTIxNC4wMDI3NSAwLC0yOTUuNDY1ODI2IHogTSAzNjguMzI4ODMsMzcwLjMzODcyIGMgLTcyLjUxODU5LDcyLjUxODU5IC0xOTAuNTM2Myw3Mi41MTg1OSAtMjYzLjA2NjM5LDAgLTcyLjUxNjgxNywtNzIuNTMwMDkgLTcyLjUxNjgxNywtMTkwLjU0MjUgMCwtMjYzLjA2NzI3IDcyLjUyOTIsLTcyLjUyNjU1OSAxOTAuNTM2MjksLTcyLjUyNjU1OSAyNjMuMDY2MzksMCA3Mi41MjU2Nyw3Mi41MjQ3NyA3Mi41MjU2NywxOTAuNTM3MTggMCwyNjMuMDY3MjcgeiBtIDEyLjQ0MzQ3LC0xOTguMTI3NiAtMTEuNjIwNzYsNTIuMzI5NzEgYyAtMC4zMTM1LDEuNDQ3MDYgLTEuNzQzNzMsMi4zNDY4MiAtMy4xODI4MiwyLjAzNTk4IC0wLjQ0MDE0LC0wLjA5MzkgLTEwLjk1MDM2LC0yLjM1ODM0IC0yNi4yOTg1OCwtMi4zNTgzNCAtMjUuODg5NDQsMCAtNzEuNjI0MTMsNi44NTE4NCAtMTAxLjgzMTcyLDQ5LjU1MzM4IGwgNi4yOTY1Niw2LjI5NjU3IDcwLjUwMzg2LDMwLjU1OTE3IGMgMi4zNjU0MiwxLjAzNzAzIDMuNzU3NTgsMy41MDY5NSAzLjM5MTgzLDYuMDY3MiAtMC4zNTA3LDIuNTQ5NjIgLTIuMzYxLDQuNTU0NjEgLTQuOTMwOTksNC44NzM0MiBsIC0xNzUuNjA1MTksMjIuOTU5MDEgYyAtMS43NTg3OSwwLjIzMDI1IC0zLjUzODgzLC0wLjM3NzI2IC00Ljc5NzI2LC0xLjYyNzcyIC0xLjI2NjQsLTEuMjYxOTcgLTEuODU1MzIsLTMuMDM2NyAtMS42MzU2OSwtNC44MDYxMiBsIDIyLjk1OSwtMTc1LjYwNzg1IGMgMC4xNjQ3MywtMS4yODUgMC43NTM2NCwtMi40MzYyNyAxLjYyMzMsLTMuMzA1MDMgMC44NTgxNCwtMC44NTkwMyAxLjk4OTA0LC0xLjQ0Nzk1IDMuMjYzNDEsLTEuNjMxMjcgMi41NDY5NywtMC4zNTc3OCA1LjAxNzc3LDEuMDM3MDMgNi4wNTM5MiwzLjM5NDQ4IGwgMzAuNTY3MTQsNzAuNTA2NTIgMC4xNTc2MywwLjE1NzYzIGMgNDcuMTQxOTEsLTU5LjQwMTE3IDExNS40MTU4NCwtNjYuNDg5NDYgMTQ1LjAyODMxLC02Ni40ODk0NiAxMy41NDY5MywwIDI2LjY5NjIyLDEuMzQ1MjIgMzguMDIzODQsMy44ODY4NyAxLjQ1MzI2LDAuMzMyMSAyLjM2MzY1LDEuNzYzMjIgMi4wMzQyMSwzLjIwNTg1IHoiCiAgICAgICBpZD0icGF0aDUiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPjwvZz48ZwogICAgIGlkPSJnNyIgLz48ZwogICAgIGlkPSJnOSIgLz48ZwogICAgIGlkPSJnMTEiIC8+PGcKICAgICBpZD0iZzEzIiAvPjxnCiAgICAgaWQ9ImcxNSIgLz48ZwogICAgIGlkPSJnMTciIC8+PGcKICAgICBpZD0iZzE5IiAvPjxnCiAgICAgaWQ9ImcyMSIgLz48ZwogICAgIGlkPSJnMjMiIC8+PGcKICAgICBpZD0iZzI1IiAvPjxnCiAgICAgaWQ9ImcyNyIgLz48ZwogICAgIGlkPSJnMjkiIC8+PGcKICAgICBpZD0iZzMxIiAvPjxnCiAgICAgaWQ9ImczMyIgLz48ZwogICAgIGlkPSJnMzUiIC8+PC9zdmc+\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iNzUuNDA2cHgiIGhlaWdodD0iNzUuNDA2cHgiIHZpZXdCb3g9IjAgMCA3NS40MDYgNzUuNDA2IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA3NS40MDYgNzUuNDA2OyIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8cGF0aCBkPSJNMzUuNDM2LDExLjQ1NEg3Ljc1NXY2My45NTJoMjcuNjgyTDM1LjQzNiwxMS40NTRMMzUuNDM2LDExLjQ1NHogTTMyLjU3Myw3Mi41NDNIMTAuNjE4VjE0LjMxN2gyMS45NTVWNzIuNTQzegoJCSBNNzAuMjc0LDExLjQ1NGgtMjcuNjh2MzcuNDY0aDI3LjY4MlYxMS40NTRINzAuMjc0eiBNNjcuNDEyLDQ2LjA1NUg0NS40NTdWMTQuMzE3aDIxLjk1NVY0Ni4wNTV6IE0wLjgzNSw1LjAxMVYwaDczLjczNnY1LjAxMQoJCUgwLjgzNXoiLz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iOTAuOTU2cHgiIGhlaWdodD0iOTAuOTU3cHgiIHZpZXdCb3g9IjAgMCA5MC45NTYgOTAuOTU3IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA5MC45NTYgOTAuOTU3OyIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8cGF0aCBkPSJNNDEuNjYxLDEzLjUwMUgxMy45Nzl2NjMuOTUzaDI3LjY4MlYxMy41MDF6IE0zOC43OTcsNzQuNTkxSDE2Ljg0MlYxNi4zNjZoMjEuOTU1Vjc0LjU5MXogTTc2LjQ5OSwyNi43NDdINDguODE4djM3LjQ2NQoJCUg3Ni41TDc2LjQ5OSwyNi43NDdMNzYuNDk5LDI2Ljc0N3ogTTczLjYzNyw2MS4zNDdINTEuNjgyVjI5LjYwOWgyMS45NTVWNjEuMzQ3eiBNMTAuOTc4LDQyLjk3M3Y1LjAxMUgwdi01LjAxMUgxMC45Nzh6CgkJIE05MC45NTYsNDIuOTczdjUuMDExSDc5Ljk3OXYtNS4wMTFIOTAuOTU2eiIvPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+Cjwvc3ZnPgo=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iNzUuNDA2cHgiIGhlaWdodD0iNzUuNDA2cHgiIHZpZXdCb3g9IjAgMCA3NS40MDYgNzUuNDA2IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA3NS40MDYgNzUuNDA2OyIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8cGF0aCBkPSJNMzUuNDM2LDBINy43NTV2NjMuOTUyaDI3LjY4MkwzNS40MzYsMEwzNS40MzYsMHogTTMyLjU3Myw2MS4wODlIMTAuNjE4VjIuODYzaDIxLjk1NVY2MS4wODl6IE03MC4yNzQsMjYuNDg4aC0yNy42OAoJCXYzNy40NjRoMjcuNjgyVjI2LjQ4OEg3MC4yNzR6IE02Ny40MTIsNjEuMDg5SDQ1LjQ1N1YyOS4zNTFoMjEuOTU1VjYxLjA4OXogTTc0LjU3MSw3MC4zOTV2NS4wMTJIMC44MzV2LTUuMDEySDc0LjU3MXoiLz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iNzUuNDA2cHgiIGhlaWdodD0iNzUuNDA2cHgiIHZpZXdCb3g9IjAgMCA3NS40MDYgNzUuNDA2IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA3NS40MDYgNzUuNDA2OyIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8cGF0aCBkPSJNNzUuNDA2LDM1LjQzNlY3Ljc1NUgxMS40NTR2MjcuNjgyTDc1LjQwNiwzNS40MzZMNzUuNDA2LDM1LjQzNnogTTE0LjMxNywzMi41NzNWMTAuNjE4aDU4LjIyNnYyMS45NTVIMTQuMzE3egoJCSBNNDguOTE4LDcwLjI3NVY0Mi41OTVIMTEuNDU0djI3LjY4Mkw0OC45MTgsNzAuMjc1TDQ4LjkxOCw3MC4yNzV6IE0xNC4zMTcsNjcuNDEyVjQ1LjQ1N2gzMS43Mzh2MjEuOTU1SDE0LjMxN3ogTTUuMDExLDc0LjU3MUgwCgkJVjAuODM1aDUuMDExVjc0LjU3MXoiLz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iOTAuOTU2cHgiIGhlaWdodD0iOTAuOTU2cHgiIHZpZXdCb3g9IjAgMCA5MC45NTYgOTAuOTU2IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA5MC45NTYgOTAuOTU2OyIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8cGF0aCBkPSJNNzcuNDU0LDQxLjY2MVYxMy45NzlIMTMuNTAydjI3LjY4Mkg3Ny40NTR6IE0xNi4zNjUsMzguNzk3VjE2Ljg0Mmg1OC4yMjZ2MjEuOTU1SDE2LjM2NXogTTY0LjIxLDc2LjQ5OVY0OC44MThIMjYuNzQ2CgkJVjc2LjVMNjQuMjEsNzYuNDk5TDY0LjIxLDc2LjQ5OXogTTI5LjYwOSw3My42MzdWNTEuNjgyaDMxLjczN3YyMS45NTVIMjkuNjA5eiBNNDcuOTgyLDEwLjk3OGgtNS4wMVYwaDUuMDFWMTAuOTc4egoJCSBNNDcuOTgyLDkwLjk1NmgtNS4wMVY3OS45NzloNS4wMVY5MC45NTZ6Ii8+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPC9zdmc+Cg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iNzUuNDA2cHgiIGhlaWdodD0iNzUuNDA2cHgiIHZpZXdCb3g9IjAgMCA3NS40MDYgNzUuNDA2IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA3NS40MDYgNzUuNDA2OyIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8cGF0aCBkPSJNNjMuOTUyLDM1LjQzNlY3Ljc1NUgwdjI3LjY4Mkw2My45NTIsMzUuNDM2TDYzLjk1MiwzNS40MzZ6IE0yLjg2MywzMi41NzNWMTAuNjE4SDYxLjA5djIxLjk1NUgyLjg2M3ogTTYzLjk1Miw3MC4yNzUKCQlWNDIuNTk1SDI2LjQ4OHYyNy42ODJMNjMuOTUyLDcwLjI3NUw2My45NTIsNzAuMjc1eiBNMjkuMzUxLDY3LjQxMlY0NS40NTdoMzEuNzM3djIxLjk1NUgyOS4zNTF6IE03MC4zOTUsMC44MzVoNS4wMTJ2NzMuNzM2CgkJaC01LjAxMlYwLjgzNXoiLz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iNTQxLjkxMXB4IiBoZWlnaHQ9IjU0MS45MTFweCIgdmlld0JveD0iMCAwIDU0MS45MTEgNTQxLjkxMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTQxLjkxMSA1NDEuOTExOyIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8cGF0aCBkPSJNNDY3LjgyNiw4Ljc4MXY0Ny40NTFINzQuMDkxVjguNzgxYzAtNC42MDgtMy43MjktOC4zMzQtOC4zMzQtOC4zMzRjLTQuNjA3LDAtOC4zMzQsMy43MjctOC4zMzQsOC4zMzR2NDkuMDY4SDguMzM0CgkJQzMuNzMsNTcuODQ5LDAsNjEuNTg0LDAsNjYuMTgzYzAsNC42MDcsMy43Myw4LjMzNCw4LjMzNCw4LjMzNGg0OS4wODN2MzkyLjg2OEg4LjMzNGMtNC42MDQsMC04LjMzNCwzLjcyOS04LjMzNCw4LjMzNAoJCWMwLDQuNjEsMy43Myw4LjMzNCw4LjMzNCw4LjMzNGg0OS4wODN2NDkuMDc3YzAsNC42MDQsMy43MjcsOC4zMzQsOC4zMzQsOC4zMzRjNC42MDQsMCw4LjMzNC0zLjcyOSw4LjMzNC04LjMzNHYtNDkuMDc3aDM5My43NAoJCXY0OS4wNzdjMCw0LjYwNCwzLjcyOSw4LjMzNCw4LjMzNCw4LjMzNGM0LjYxLDAsOC4zMzQtMy43MjksOC4zMzQtOC4zMzR2LTQ5LjA3N2g0OS4wODNjNC42MDQsMCw4LjMzNC0zLjcyNCw4LjMzNC04LjMzNAoJCWMwLTQuNjA0LTMuNzI5LTguMzM0LTguMzM0LTguMzM0aC00OC4zMzJWNzQuNTE3aDQ4LjMzMmM0LjYwNCwwLDguMzM0LTMuNzI3LDguMzM0LTguMzM0YzAtNC41OTktMy43MjktOC4zMzQtOC4zMzQtOC4zMzRoLTQ5LjA4MwoJCVY4Ljc4MWMwLTQuNjA4LTMuNzI0LTguMzM0LTguMzM0LTguMzM0QzQ3MS41NTUsMC40NDYsNDY3LjgyNiw0LjE3Myw0NjcuODI2LDguNzgxeiBNNDY4LjIwNCwzNDAuNTI4djEyNi44NTdIMzQwLjQxM1YzNDAuNTI4CgkJSDQ2OC4yMDR6IE0zMzQuODU3LDM0MC41Mjh2MTI2Ljg1N0gyMDcuNDM2VjM0MC41MjhIMzM0Ljg1N3ogTTIwMS41MDQsMzQwLjUyOHYxMjYuODU3SDc0LjA5MVYzNDAuNTI4SDIwMS41MDR6IE00NjguMjA0LDIwNy4xNzIKCQl2MTI3LjhIMzQwLjQxM3YtMTI3LjhINDY4LjIwNHogTTMzNC44NTcsMjA3LjE3MnYxMjcuOEgyMDcuNDM2di0xMjcuOEgzMzQuODU3eiBNMjAxLjUwNCwyMDcuMTcydjEyNy44SDc0LjA5MXYtMTI3LjhIMjAxLjUwNHoKCQkgTTQ2OC4yMDQsNzMuODI5djEyNy43ODhIMzQwLjQxM1Y3My44MjlINDY4LjIwNHogTTMzNC44NTcsNzMuODI5djEyNy43ODhIMjA3LjQzNlY3My44MjlIMzM0Ljg1N3ogTTIwMS41MDQsNzMuODI5djEyNy43ODgKCQlINzQuMDkxVjczLjgyOUgyMDEuNTA0eiBNMzIzLjQxNCw4My44ODVWMTg4Ljc5SDIxOC41MDZWODMuODg1SDMyMy40MTR6Ii8+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPC9zdmc+Cg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iNDE4cHgiIGhlaWdodD0iNDE4cHgiIHZpZXdCb3g9IjAgMCA0MTggNDE4IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA0MTggNDE4OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxnPgoJPGc+CgkJPGc+CgkJCTxwYXRoIGQ9Ik05MS42MDYsMTQzLjcwM2MtMy4xNDYtMy4xNDYtNy44NzctNC4wODctMTEuOTg4LTIuMzg1Yy00LjExLDEuNzAzLTYuNzksNS43MTQtNi43OSwxMC4xNjN2MTE1LjAzNwoJCQkJYzAsNC40NDksMi42OCw4LjQ2MSw2Ljc5LDEwLjE2NGMxLjM2MSwwLjU2MywyLjc5LDAuODM2LDQuMjA4LDAuODM2YzIuODYyLDAsNS42NzYtMS4xMTYsNy43OC0zLjIyMmw1Ny41Mi01Ny41MTkKCQkJCWMyLjA2My0yLjA2MywzLjIyMi00Ljg2MSwzLjIyMi03Ljc3OHMtMS4xNTktNS43MTYtMy4yMjItNy43NzhMOTEuNjA2LDE0My43MDN6Ii8+CgkJCTxwYXRoIGQ9Ik0zMzguMzgyLDE0MS4zMThjLTQuMTA3LTEuNy04Ljg0MS0wLjc2My0xMS45ODcsMi4zODVsLTU3LjUyMSw1Ny41MTljLTIuMDYyLDIuMDYzLTMuMjIyLDQuODYxLTMuMjIyLDcuNzc4CgkJCQlzMS4xNTgsNS43MTYsMy4yMjIsNy43NzdsNTcuNTIxLDU3LjUyYzIuMTA0LDIuMTA0LDQuOTE4LDMuMjIzLDcuNzc5LDMuMjIzYzEuNDE3LDAsMi44NDgtMC4yNzIsNC4yMDgtMC44MzgKCQkJCWM0LjExLTEuNzAzLDYuNzktNS43MTQsNi43OS0xMC4xNjJWMTUxLjQ4MUMzNDUuMTcyLDE0Ny4wMzIsMzQyLjQ5MiwxNDMuMDIxLDMzOC4zODIsMTQxLjMxOHoiLz4KCQkJPHBhdGggZD0iTTIxMiwwaC02Yy02LjA3NSwwLTExLDQuOTI1LTExLDExdjM1YzAsNi4wNzUsNC45MjUsMTEsMTEsMTFoNmM2LjA3NSwwLDExLTQuOTI1LDExLTExVjExQzIyMyw0LjkyNSwyMTguMDc1LDAsMjEyLDB6IgoJCQkJLz4KCQkJPHBhdGggZD0iTTIxMiw5NS4zNTJoLTZjLTYuMDc1LDAtMTEsNC45MjUtMTEsMTF2NzIuNDczYzAsNi4wNzUsNC45MjUsMTEsMTEsMTFoNmM2LjA3NSwwLDExLTQuOTI1LDExLTExdi03Mi40NzMKCQkJCUMyMjMsMTAwLjI3NiwyMTguMDc1LDk1LjM1MiwyMTIsOTUuMzUyeiIvPgoJCQk8cGF0aCBkPSJNMjEyLDIyOC4xNzZoLTZjLTYuMDc1LDAtMTEsNC45MjYtMTEsMTF2NzIuNDc0YzAsNi4wNzUsNC45MjUsMTEsMTEsMTFoNmM2LjA3NSwwLDExLTQuOTI1LDExLTExdi03Mi40NzQKCQkJCUMyMjMsMjMzLjEwMiwyMTguMDc1LDIyOC4xNzYsMjEyLDIyOC4xNzZ6Ii8+CgkJCTxwYXRoIGQ9Ik0yMTIsMzYxaC02Yy02LjA3NSwwLTExLDQuOTI1LTExLDExdjM1YzAsNi4wNzUsNC45MjUsMTEsMTEsMTFoNmM2LjA3NSwwLDExLTQuOTI1LDExLTExdi0zNQoJCQkJQzIyMywzNjUuOTI1LDIxOC4wNzUsMzYxLDIxMiwzNjF6Ii8+CgkJPC9nPgoJPC9nPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+Cjwvc3ZnPgo=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iNDk3LjE5OXB4IiBoZWlnaHQ9IjQ5Ny4xOTlweCIgdmlld0JveD0iMCAwIDQ5Ny4xOTkgNDk3LjE5OSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDk3LjE5OSA0OTcuMTk5OyIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8cGF0aCBkPSJNMTkxLjIsMjQ4LjZjMC0xNS4zLDUuNy0yOC43LDE3LjItNDAuMnMyNC45LTE3LjIsNDAuMi0xNy4yTDE5MS4yLDI0OC42eiBNMTc0LDI2NS44Yy0xLjktNS43LTEuOS0xMS41LTEuOS0xNy4yCgkJYzAtNDIuMSwzNC40LTc2LjUsNzYuNS03Ni41YzUuNzAxLDAsMTEuNSwwLDE3LjIwMSwxLjlsNTEuNi01MS42Yy0yMS01LjctNDQtNy43LTY4LjktNy43Qzc2LjUsMTE0LjcsMCwyNDguNiwwLDI0OC42CgkJczMwLjYsNTMuNSw5Ny41LDkzLjdMMTc0LDI2NS44eiBNMzA2LDI0OC42TDI0OC42LDMwNmMxNS4zLDAsMjguNzAxLTUuNyw0MC4yMDEtMTcuMkMzMDAuMTk5LDI3Ny4zLDMwNiwyNjMuODk5LDMwNiwyNDguNnoKCQkgTTM5OS42OTksMTU0Ljg5OWwtNzYuNSw3Ni41YzEuOSw1LjcsMS45LDExLjUsMS45LDE3LjJjMCw0Mi4xLTM0LjQsNzYuNS03Ni41LDc2LjVjLTUuNywwLTExLjUsMC0xNy4yLTEuOUwxNzkuOCwzNzQuOAoJCWMyMSw1LjcsNDQsNy42LDY4LjgsNy42YzE3Mi4wOTksMCwyNDguNTk5LTEzMy45LDI0OC41OTktMTMzLjlTNDY2LjYsMTk1LjEsMzk5LjY5OSwxNTQuODk5eiBNNDAxLjQsNzYuODk5bC0zMjQuNSwzMjQuNQoJCWwxOC45LDE4LjlMNDIwLjQsOTUuN0w0MDEuNCw3Ni44OTl6Ii8+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPC9zdmc+Cg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iNzMuMDU4cHgiIGhlaWdodD0iNzMuMDU4cHgiIHZpZXdCb3g9IjAgMCA3My4wNTggNzMuMDU4IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA3My4wNTggNzMuMDU4OyIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8ZyBpZD0iRXllIj4KCQk8Zz4KCQkJPHBhdGggZD0iTTcyLjg5MywzNS45NjVjLTAuNTgtMC45MjUtMTQuNDMyLTIyLjU0MS0zNS4xNi0yMi41NDFoLTIuNDA2Yy0yMC43MjksMC0zNC41OCwyMS42MTYtMzUuMTU5LDIyLjU0MQoJCQkJYy0wLjIyMywwLjM0Ny0wLjIyMywwLjc5LDAsMS4xMzdjMC41NzksMC45MTcsMTQuNDMyLDIyLjUzMiwzNS4xNTksMjIuNTMyaDIuNDA2YzIwLjcyOSwwLDM0LjU4LTIxLjYxNSwzNS4xNTktMjIuNTMyCgkJCQlDNzMuMTEzLDM2Ljc1NSw3My4xMTMsMzYuMzEyLDcyLjg5MywzNS45NjV6IE00NS4yNjcsMzYuNTI5YzAsNC42OS0zLjkyLDguNTA2LTguNzM2LDguNTA2Yy00LjgxNywwLTguNzM1LTMuODEyLTguNzM1LTguNTA2CgkJCQljMC00LjY4NywzLjkxOC04LjUwOCw4LjczNS04LjUwOEM0MS4zNDcsMjguMDIyLDQ1LjI2NywzMS44NDQsNDUuMjY3LDM2LjUyOXoiLz4KCQk8L2c+Cgk8L2c+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPC9zdmc+Cg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iMjYuNjMzOTQybW0iCiAgIGhlaWdodD0iMjYuNjIyNzY1bW0iCiAgIHZpZXdCb3g9IjAgMCAyNi42MzM5NDIgMjYuNjIyNzY1IgogICB2ZXJzaW9uPSIxLjEiCiAgIGlkPSJzdmc4IgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIgogICBzb2RpcG9kaTpkb2NuYW1lPSJwb3J0YWwuc3ZnIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzMiI+CiAgICA8Y2xpcFBhdGgKICAgICAgIGlkPSJjbGlwUGF0aDUwMDgiCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNTAwNiIKICAgICAgICAgZD0iTSAwLDAgSCAzMTIuMDQzIFYgNzQuNDQ4MiBIIDAgWiIgLz4KICAgIDwvY2xpcFBhdGg+CiAgICA8Y2xpcFBhdGgKICAgICAgIGlkPSJjbGlwUGF0aDUwMTYiCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNTAxNCIKICAgICAgICAgZD0iTSAwLDc0LjQ0OCBIIDMxMi4wNDMgViAwIEggMCBaIiAvPgogICAgPC9jbGlwUGF0aD4KICAgIDxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoNTExMiIKICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg1MTEwIgogICAgICAgICBkPSJNIDAsMCBIIDMxMi4wNDMgViA3NC40NDgyIEggMCBaIiAvPgogICAgPC9jbGlwUGF0aD4KICAgIDxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoNTEyMCIKICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg1MTE4IgogICAgICAgICBkPSJNIDAsNzQuNDQ4IEggMzEyLjA0MyBWIDAgSCAwIFoiIC8+CiAgICA8L2NsaXBQYXRoPgogICAgPGNsaXBQYXRoCiAgICAgICBpZD0iY2xpcFBhdGg1MzMyIgogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDUzMzAiCiAgICAgICAgIGQ9Ik0gMCw3NC40NDggSCAzMTIuMDQzIFYgMCBIIDAgWiIgLz4KICAgIDwvY2xpcFBhdGg+CiAgPC9kZWZzPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSIxLjk3OTg5OSIKICAgICBpbmtzY2FwZTpjeD0iNTUuNTM1Njg4IgogICAgIGlua3NjYXBlOmN5PSItNTEuMDYwODE5IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJtbSIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDE3IgogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIKICAgICBmaXQtbWFyZ2luLXRvcD0iMCIKICAgICBmaXQtbWFyZ2luLWxlZnQ9IjAiCiAgICAgZml0LW1hcmdpbi1yaWdodD0iMCIKICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMCIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE1Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNDcuNDExNjExLC04OS4yODgwNCkiPgogICAgPHJlY3QKICAgICAgIHJ5PSIwIgogICAgICAgeT0iOTYuMTU3Mzc5IgogICAgICAgeD0iNjEuMTYxNDcyIgogICAgICAgaGVpZ2h0PSI1Ljk5OTk5OTUiCiAgICAgICB3aWR0aD0iNS45OTk5OTk1IgogICAgICAgaWQ9InJlY3Q1NTA0IgogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNzQ1MDk4MDU7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuNTU0MDg2MzM7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4KICAgIDxyZWN0CiAgICAgICByeT0iMCIKICAgICAgIHk9IjEwMy4wMjY3MyIKICAgICAgIHg9IjU0LjI5MjEyMiIKICAgICAgIGhlaWdodD0iNS45OTk5OTk1IgogICAgICAgd2lkdGg9IjUuOTk5OTk5NSIKICAgICAgIGlkPSJyZWN0NTUwNC0zIgogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNzQ1MDk4MDU7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuNTU0MDg2MzM7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4KICAgIDxyZWN0CiAgICAgICByeT0iMCIKICAgICAgIHk9Ijg5LjI4ODA0IgogICAgICAgeD0iNjguMDMwODIzIgogICAgICAgaGVpZ2h0PSI1Ljk5OTk5OTUiCiAgICAgICB3aWR0aD0iNS45OTk5OTk1IgogICAgICAgaWQ9InJlY3Q1NTA0LTMtNSIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuOTg5OTk5OTk7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjU4ODIzNTMyO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjU1NDA4NjMzO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjAiIC8+CiAgICA8cmVjdAogICAgICAgcnk9IjAiCiAgICAgICB5PSIxMDkuODk2MDciCiAgICAgICB4PSI0Ny40MjI3NzkiCiAgICAgICBoZWlnaHQ9IjUuOTk5OTk5NSIKICAgICAgIHdpZHRoPSI1Ljk5OTk5OTUiCiAgICAgICBpZD0icmVjdDU1MDQtMy01LTkiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC41ODgyMzUzMjtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC41NTQwODYzMztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPgogICAgPHBhdGgKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDU1NTEtNyIKICAgICAgIGQ9Im0gNjguMzg0OTY3LDEwMi4xMjA4OSBhIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgNS42MDkzNTQsLTUuNzIxOTI4IDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgLTAuMDA5OSwtMC4yMDUwODcgaCAtNS45MTcwNTMgdiA1LjkxMDcwNSBhIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgMC4zMTc2MzQsMC4wMTYzIHoiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC41ODgyMzUzMjtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC44MDg2MTU1NztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPgogICAgPHBhdGgKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDU2NjMiCiAgICAgICBkPSJtIDQ4LjI3MzAxMSwxMDEuMTk2NDggdiAtNy41ODIwNTMgYyAwLC0xLjkxNDE0NCAxLjQxOTUxMSwtMy40NTUxMzQgMy4xODI3NjEsLTMuNDU1MTM0IHYgMCBoIDE0Ljc2NzI3MSIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojOTg5NDk0O3N0cm9rZS13aWR0aDoxLjcyMjc5OTY2O3N0cm9rZS1saW5lY2FwOnNxdWFyZTtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3BhaW50LW9yZGVyOmZpbGwgbWFya2VycyBzdHJva2UiIC8+CiAgICA8cGF0aAogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIGlkPSJyZWN0NTYxNyIKICAgICAgIGQ9Im0gNzMuMjM3ODEzLDEwMi44MzA0MyA0ZS02LDkuMTU0OTggYyAwLDEuNzI3MTggLTEuMzgzMjYzLDMuMTE3NjYgLTMuMTAxNDg1LDMuMTE3NjYgSCA1NS44NDYwNzciCiAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6bm9uZTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6Izk4OTQ5NDtzdHJva2Utd2lkdGg6MS42MTU0NzExMjtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTtwYWludC1vcmRlcjpmaWxsIG1hcmtlcnMgc3Ryb2tlIiAvPgogICAgPHBhdGgKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDU1NTEtNy00IgogICAgICAgZD0ibSA2MS41MTU2MTgsMTA4Ljk5MDIzIGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCA1LjYwOTM1NCwtNS43MjE5MiA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIC0wLjAwOTksLTAuMjA1MDkgSCA2MS4xOTc5NyB2IDUuOTEwNzEgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIDAuMzE3NjM0LDAuMDE2MyB6IgogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNzQ1MDk4MDU7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuODA4NjE1NTc7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4KICAgIDxwYXRoCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgaWQ9InBhdGg1NTUxLTctNC0zIgogICAgICAgZD0ibSA1OS45Mzc5NzUsOTYuMTkzODc0IGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAtNS42MDkzNTQsNS43MjE5MjYgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAwLjAwOTksMC4yMDUwOSBoIDUuOTE3MDUzIHYgLTUuOTEwNzExIGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAtMC4zMTc2MzQsLTAuMDE2MyB6IgogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuODA4NjE1NTc7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4KICAgIDxwYXRoCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgaWQ9InBhdGg1NTUxLTctNC0zLTAiCiAgICAgICBkPSJtIDUzLjA2ODYzMywxMDMuMDYzMjIgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIC01LjYwOTM1Myw1LjcyMTkzIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgMC4wMDk5LDAuMjA1MDggaCA1LjkxNzA1MyB2IC01LjkxMDcxIGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAtMC4zMTc2MzQsLTAuMDE2MyB6IgogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNTg4MjM1MzI7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuODA4NjE1NTc7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4KICA8L2c+Cjwvc3ZnPgo=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iMjYuNjMzOTQybW0iCiAgIGhlaWdodD0iMjYuNjIyNzY1bW0iCiAgIHZpZXdCb3g9IjAgMCAyNi42MzM5NDIgMjYuNjIyNzY1IgogICB2ZXJzaW9uPSIxLjEiCiAgIGlkPSJzdmc4IgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIgogICBzb2RpcG9kaTpkb2NuYW1lPSJzZXR0aW5ncy5zdmciPgogIDxkZWZzCiAgICAgaWQ9ImRlZnMyIj4KICAgIDxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoNTAwOCIKICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg1MDA2IgogICAgICAgICBkPSJNIDAsMCBIIDMxMi4wNDMgViA3NC40NDgyIEggMCBaIiAvPgogICAgPC9jbGlwUGF0aD4KICAgIDxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoNTAxNiIKICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg1MDE0IgogICAgICAgICBkPSJNIDAsNzQuNDQ4IEggMzEyLjA0MyBWIDAgSCAwIFoiIC8+CiAgICA8L2NsaXBQYXRoPgogICAgPGNsaXBQYXRoCiAgICAgICBpZD0iY2xpcFBhdGg1MTEyIgogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDUxMTAiCiAgICAgICAgIGQ9Ik0gMCwwIEggMzEyLjA0MyBWIDc0LjQ0ODIgSCAwIFoiIC8+CiAgICA8L2NsaXBQYXRoPgogICAgPGNsaXBQYXRoCiAgICAgICBpZD0iY2xpcFBhdGg1MTIwIgogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDUxMTgiCiAgICAgICAgIGQ9Ik0gMCw3NC40NDggSCAzMTIuMDQzIFYgMCBIIDAgWiIgLz4KICAgIDwvY2xpcFBhdGg+CiAgICA8Y2xpcFBhdGgKICAgICAgIGlkPSJjbGlwUGF0aDUzMzIiCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNTMzMCIKICAgICAgICAgZD0iTSAwLDc0LjQ0OCBIIDMxMi4wNDMgViAwIEggMCBaIiAvPgogICAgPC9jbGlwUGF0aD4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjEuOTc5ODk5IgogICAgIGlua3NjYXBlOmN4PSI1NS41MzU2ODgiCiAgICAgaW5rc2NhcGU6Y3k9Ii01MS4wNjA4MTkiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9Im1tIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciCiAgICAgaW5rc2NhcGU6d2luZG93LXg9Ii04IgogICAgIGlua3NjYXBlOndpbmRvdy15PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIGZpdC1tYXJnaW4tdG9wPSIwIgogICAgIGZpdC1tYXJnaW4tbGVmdD0iMCIKICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIwIgogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIiAvPgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTUiPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgICAgPGRjOnRpdGxlPjwvZGM6dGl0bGU+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIgogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC00Ny40MTE2MTEsLTg5LjI4ODA0KSI+CiAgICA8cmVjdAogICAgICAgcnk9IjAiCiAgICAgICB5PSI5Ni4xNTczNzkiCiAgICAgICB4PSI2MS4xNjE0NzIiCiAgICAgICBoZWlnaHQ9IjUuOTk5OTk5NSIKICAgICAgIHdpZHRoPSI1Ljk5OTk5OTUiCiAgICAgICBpZD0icmVjdDU1MDQiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC43NDUwOTgwNTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC41NTQwODYzMztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPgogICAgPHJlY3QKICAgICAgIHJ5PSIwIgogICAgICAgeT0iMTAzLjAyNjczIgogICAgICAgeD0iNTQuMjkyMTIyIgogICAgICAgaGVpZ2h0PSI1Ljk5OTk5OTUiCiAgICAgICB3aWR0aD0iNS45OTk5OTk1IgogICAgICAgaWQ9InJlY3Q1NTA0LTMiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC43NDUwOTgwNTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC41NTQwODYzMztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPgogICAgPHJlY3QKICAgICAgIHJ5PSIwIgogICAgICAgeT0iODkuMjg4MDQiCiAgICAgICB4PSI2OC4wMzA4MjMiCiAgICAgICBoZWlnaHQ9IjUuOTk5OTk5NSIKICAgICAgIHdpZHRoPSI1Ljk5OTk5OTUiCiAgICAgICBpZD0icmVjdDU1MDQtMy01IgogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNTg4MjM1MzI7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuNTU0MDg2MzM7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4KICAgIDxyZWN0CiAgICAgICByeT0iMCIKICAgICAgIHk9IjEwOS44OTYwNyIKICAgICAgIHg9IjQ3LjQyMjc3OSIKICAgICAgIGhlaWdodD0iNS45OTk5OTk1IgogICAgICAgd2lkdGg9IjUuOTk5OTk5NSIKICAgICAgIGlkPSJyZWN0NTUwNC0zLTUtOSIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuOTg5OTk5OTk7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjU4ODIzNTMyO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjU1NDA4NjMzO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjAiIC8+CiAgICA8cGF0aAogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIGlkPSJwYXRoNTU1MS03IgogICAgICAgZD0ibSA2OC4zODQ5NjcsMTAyLjEyMDg5IGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCA1LjYwOTM1NCwtNS43MjE5MjggNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAtMC4wMDk5LC0wLjIwNTA4NyBoIC01LjkxNzA1MyB2IDUuOTEwNzA1IGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAwLjMxNzYzNCwwLjAxNjMgeiIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuOTg5OTk5OTk7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjU4ODIzNTMyO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjgwODYxNTU3O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjAiIC8+CiAgICA8cGF0aAogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIGlkPSJwYXRoNTY2MyIKICAgICAgIGQ9Im0gNDguMjczMDExLDEwMS4xOTY0OCB2IC03LjU4MjA1MyBjIDAsLTEuOTE0MTQ0IDEuNDE5NTExLC0zLjQ1NTEzNCAzLjE4Mjc2MSwtMy40NTUxMzQgdiAwIGggMTQuNzY3MjcxIgogICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiM5ODk0OTQ7c3Ryb2tlLXdpZHRoOjEuNzIyNzk5NjY7c3Ryb2tlLWxpbmVjYXA6c3F1YXJlO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7cGFpbnQtb3JkZXI6ZmlsbCBtYXJrZXJzIHN0cm9rZSIgLz4KICAgIDxwYXRoCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgaWQ9InJlY3Q1NjE3IgogICAgICAgZD0ibSA3My4yMzc4MTMsMTAyLjgzMDQzIDRlLTYsOS4xNTQ5OCBjIDAsMS43MjcxOCAtMS4zODMyNjMsMy4xMTc2NiAtMy4xMDE0ODUsMy4xMTc2NiBIIDU1Ljg0NjA3NyIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojOTg5NDk0O3N0cm9rZS13aWR0aDoxLjYxNTQ3MTEyO3N0cm9rZS1saW5lY2FwOnNxdWFyZTtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3BhaW50LW9yZGVyOmZpbGwgbWFya2VycyBzdHJva2UiIC8+CiAgICA8cGF0aAogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIGlkPSJwYXRoNTU1MS03LTQiCiAgICAgICBkPSJtIDYxLjUxNTYxOCwxMDguOTkwMjMgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIDUuNjA5MzU0LC01LjcyMTkyIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgLTAuMDA5OSwtMC4yMDUwOSBIIDYxLjE5Nzk3IHYgNS45MTA3MSBhIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgMC4zMTc2MzQsMC4wMTYzIHoiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC43NDUwOTgwNTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC44MDg2MTU1NztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPgogICAgPHBhdGgKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDU1NTEtNy00LTMiCiAgICAgICBkPSJtIDU5LjkzNzk3NSw5Ni4xOTM4NzQgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIC01LjYwOTM1NCw1LjcyMTkyNiA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIDAuMDA5OSwwLjIwNTA5IGggNS45MTcwNTMgdiAtNS45MTA3MTEgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIC0wLjMxNzYzNCwtMC4wMTYzIHoiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC44MDg2MTU1NztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPgogICAgPHBhdGgKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDU1NTEtNy00LTMtMCIKICAgICAgIGQ9Im0gNTMuMDY4NjMzLDEwMy4wNjMyMiBhIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgLTUuNjA5MzUzLDUuNzIxOTMgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAwLjAwOTksMC4yMDUwOCBoIDUuOTE3MDUzIHYgLTUuOTEwNzEgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIC0wLjMxNzYzNCwtMC4wMTYzIHoiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC41ODgyMzUzMjtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC44MDg2MTU1NztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPgogICAgPGcKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuMjkzMzQyMzksMCwwLDAuMjkzMzQyMzksNjAuNTUxODAzLDEwMi40MTcwNSkiCiAgICAgICBpZD0iZzU0ODYiPgogICAgICA8ZwogICAgICAgICBpZD0iZzMiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICBkPSJtIDQxLjUzNCwyOC42NiBoIDEuOTU3IEMgNDQuODc3LDI4LjY2IDQ2LDI3LjUzNiA0NiwyNi4xNSB2IC02LjMgYyAwLC0xLjM4NSAtMS4xMjQsLTIuNTA5IC0yLjUwOSwtMi41MDkgSCA0MS41NCB2IDAuMDA2IEMgNDEuMTQ4LDE2LjE0IDQwLjY4NywxNC45ODMgNDAuMTAzLDEzLjg4OSBsIDEuMzgxLC0xLjM4MSBjIDAuOTc5LC0wLjk4IDAuOTc5LC0yLjU2OSAwLC0zLjU0OSBMIDM3LjA0LDQuNTE3IGMgLTAuOTc5LC0wLjk3OSAtMi41NjcsLTAuOTc5IC0zLjU0NywwIGwgLTEuMzgyLDEuMzggQyAzMS4wMTcsNS4zMTMgMjkuODYxLDQuODUyIDI4LjY1NCw0LjQ2MSBIIDI4LjY2IFYgMi41MSBDIDI4LjY2LDEuMTI0IDI3LjUzNywwIDI2LjE1LDAgaCAtNi4zIGMgLTEuMzg2LDAgLTIuNTA5LDEuMTI0IC0yLjUwOSwyLjUxIHYgMS45NTUgbCAwLjAxNCwtMTBlLTQgYyAtMS4yMDcsMC4zNjcgLTIuMzYzLDAuODUgLTMuNDU4LDEuNDM1IEwgMTIuNTE2LDQuNTE4IGMgLTAuOTgsLTAuOTc5IC0yLjU2OCwtMC45NzkgLTMuNTQ4LDAgTCA0LjUyNSw4Ljk2MSBDIDMuNTQ2LDkuOTQgMy41NDUsMTEuNTI3IDQuNTIzLDEyLjUwNyBMIDUuOSwxMy44ODkgQyA1LjMxNiwxNC45ODMgNC44NTEsMTYuMTQgNC40NiwxNy4zNDYgViAxNy4zNDEgSCAyLjUwOSBDIDEuMTI0LDE3LjM0MSAwLDE4LjQ2NSAwLDE5Ljg1IHYgNi4zMDEgYyAwLDEuMzg3IDEuMTI0LDIuNTExIDIuNTA5LDIuNTExIEggNC40NzMgTCA0LjQ2NywyOC42NDcgYyAwLjM2NywxLjIwNyAwLjg1MywyLjM2MiAxLjQzNiwzLjQ1NyBsIC0xLjM4LDEuMzgxIGMgLTAuOTgsMC45NzkgLTAuOTc5LDIuNTY3IDAsMy41NDcgbCA0LjQ0Myw0LjQ0MiBjIDAuOTc5LDAuOTc5IDIuNTY4LDAuOTc5IDMuNTQ4LDAgbCAxLjM4MSwtMS4zODEgYyAxLjA5NCwwLjU4NCAyLjI1MSwxLjA3MiAzLjQ1OCwxLjQzOCBsIC0wLjAxNCwtMC4wMDYgdiAxLjk2NSBjIDAsMS4zODcgMS4xMjMsMi41MSAyLjUwOSwyLjUxIGggNi4zIGMgMS4zODcsMCAyLjUxLC0xLjEyMyAyLjUxLC0yLjUxIHYgLTEuOTUgaCAtMC4wMDYgYyAxLjIwNywtMC4zOTIgMi4zNjMsLTAuODU2IDMuNDU3LC0xLjQ0IGwgMS4zODEsMS4zNzkgYyAwLjk4LDAuOTc5IDIuNTY4LDAuOTc5IDMuNTQ3LDAgbCA0LjQ0MywtNC40NDUgYyAwLjk3OSwtMC45NzkgMC45NzksLTIuNTY2IDAsLTMuNTQ3IGwgLTEuMzgzLC0xLjM4MyBjIDAuNTg0LC0xLjA5NCAxLjA2OCwtMi4yNSAxLjQzNiwtMy40NTcgeiBNIDIzLjAyMSwzNi43MTQgQyAxNS40NDQsMzYuNzIzIDkuMjc4LDMwLjU1NyA5LjI4NywyMi45OCA5LjI5NiwxNS40NDEgMTUuNDUsOS4yODcgMjIuOTg5LDkuMjc4IGMgNy41NzgsLTAuMDA5IDEzLjc0NCw2LjE1NyAxMy43MzQsMTMuNzM0IC0wLjAxLDcuNTM5IC02LjE2MiwxMy42OTMgLTEzLjcwMiwxMy43MDIgeiIKICAgICAgICAgICBpZD0icGF0aDUiIC8+CiAgICAgIDwvZz4KICAgICAgPGcKICAgICAgICAgaWQ9Imc3IiAvPgogICAgICA8ZwogICAgICAgICBpZD0iZzkiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMTEiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMTMiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMTUiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMTciIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMTkiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMjEiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMjMiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMjUiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMjciIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMjkiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMzEiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMzMiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMzUiIC8+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4K\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4KCjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0iQ2FwYV8xIgogICB4PSIwcHgiCiAgIHk9IjBweCIKICAgd2lkdGg9IjQ4NS4yMTVweCIKICAgaGVpZ2h0PSI0ODUuMjE1cHgiCiAgIHZpZXdCb3g9IjAgMCA0ODUuMjE1IDQ4NS4yMTUiCiAgIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQ4NS4yMTUgNDg1LjIxNTsiCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTEgcjEzNzI1IgogICBzb2RpcG9kaTpkb2NuYW1lPSJfbGF5b3V0LXByb3BlcnRpZXMuc3ZnIj48bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE0MSI+PHJkZjpSREY+PGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PjxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48ZGM6dGl0bGUgLz48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMKICAgICBpZD0iZGVmczM5IiAvPjxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMSIKICAgICBvYmplY3R0b2xlcmFuY2U9IjEwIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwIgogICAgIGd1aWRldG9sZXJhbmNlPSIxMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTA4OSIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI2NjYiCiAgICAgaWQ9Im5hbWVkdmlldzM3IgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTp6b29tPSIwLjQ4NjM4MjMzIgogICAgIGlua3NjYXBlOmN4PSItNzYuMzQ1OTcyIgogICAgIGlua3NjYXBlOmN5PSI0MDcuMDg3MTYiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjY0OSIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iNTAiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJDYXBhXzEiIC8+PGcKICAgICBpZD0iZzEwMzQ5IgogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwzMy42MTk5MTksMjAuMDQ5NjkzKSI+PGcKICAgICAgIGlkPSJMYXllcl8xXzExMF8iPjxnCiAgICAgICAgIGlkPSJnMTAzNTIiPjxwYXRoCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICBkPSJtIDE3LjU2NywxNS45MzggLTIuODU5LC0yLjcwMiBjIDAuMzMzLC0wLjYwNSAwLjUzOSwtMS4yOSAwLjUzOSwtMi4wMjkgMCwtMi4zNDIgLTEuODk3LC00LjIzOSAtNC4yNCwtNC4yMzkgLTIuMzQzLDAgLTQuMjQzLDEuODk2IC00LjI0Myw0LjIzOSAwLDIuMzQzIDEuOSw0LjI0MSA0LjI0Myw0LjI0MSAwLjgyNiwwIDEuNTksLTAuMjQ2IDIuMjQyLC0wLjY1NCBsIDIuODU1LDIuNjk5IGMgMC40MzIsLTAuNTcxIDAuOTE5LC0xLjA5NCAxLjQ2MywtMS41NTUgeiIKICAgICAgICAgICBpZD0icGF0aDEwMzU0IiAvPjxwYXRoCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICBkPSJtIDI5LjY2LDE1LjYgMy43OTksLTYuMzkzIGMgMC4zNzQsMC4xMDcgMC43NjIsMC4xODQgMS4xNjksMC4xODQgMi4zNDcsMCA0LjI0NCwtMS44OTggNC4yNDQsLTQuMjQxIDAsLTIuMzQyIC0xLjg5NywtNC4yMzkgLTQuMjQ0LC00LjIzOSAtMi4zNDMsMCAtNC4yMzksMS44OTYgLTQuMjM5LDQuMjM5IDAsMS4xNjMgMC40NjksMi4yMTQgMS4yMjcsMi45ODEgbCAtMy43ODcsNi4zNzUgYyAwLjY1MSwwLjI5NSAxLjI2NSwwLjY2MyAxLjgzMSwxLjA5NCB6IgogICAgICAgICAgIGlkPSJwYXRoMTAzNTYiIC8+PHBhdGgKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgIGQ9Im0gNDIuNzYyLDIwLjk1MiBjIC0xLjgyNCwwIC0zLjM2OSwxLjE1OSAtMy45NjgsMi43NzUgbCAtNS4yNzgsLTAuNTIxIGMgMCwwLjA0IDAuMDA2LDAuMDc4IDAuMDA2LDAuMTE3IDAsMC42ODggLTAuMDc2LDEuMzYgLTAuMjEzLDIuMDA5IGwgNS4yNzYsMC41MjEgYyAwLjMxOSwyLjAyNCAyLjA2MiwzLjU3NiA0LjE3NywzLjU3NiAyLjM0MiwwIDQuMjM4LC0xLjg5NiA0LjIzOCwtNC4yMzggMCwtMi4zNDEgLTEuODk2LC00LjIzOSAtNC4yMzgsLTQuMjM5IHoiCiAgICAgICAgICAgaWQ9InBhdGgxMDM1OCIgLz48cGF0aAogICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgZD0ibSAyOC4xOTcsMzcuNjI0IC0xLjE4LC01LjE1NiBjIC0wLjY2NiwwLjIzMiAtMS4zNTksMC4zOTggLTIuMDgyLDAuNDgxIGwgMS4xODIsNS4xNTcgYyAtMS4zNTUsMC43MDkgLTIuMjksMi4xMSAtMi4yOSwzLjc0NiAwLDIuMzQyIDEuODk2LDQuMjM3IDQuMjQzLDQuMjM3IDIuMzQyLDAgNC4yMzgsLTEuODk2IDQuMjM4LC00LjIzNyAwLjAwMywtMi4yOTkgLTEuODI5LC00LjE2IC00LjExMSwtNC4yMjggeiIKICAgICAgICAgICBpZD0icGF0aDEwMzYwIiAvPjxjaXJjbGUKICAgICAgICAgICBjeD0iMjMuODMiCiAgICAgICAgICAgY3k9IjIzLjMyMyIKICAgICAgICAgICByPSI3LjI3MDk5OTkiCiAgICAgICAgICAgaWQ9ImNpcmNsZTEwMzY0IiAvPjwvZz48L2c+PC9nPjxnCiAgICAgaWQ9ImcxMDM2NiIKICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMTcuNjE5OTE5LDE4LjA0OTY5MykiIC8+PGcKICAgICBpZD0iZzEwMzY4IgogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwxNy42MTk5MTksMTguMDQ5NjkzKSIgLz48ZwogICAgIGlkPSJnMTAzNzAiCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoOS41NTU2NTEsMCwwLDkuNTU1NjUxLDE3LjYxOTkxOSwxOC4wNDk2OTMpIiAvPjxnCiAgICAgaWQ9ImcxMDM3MiIKICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMTcuNjE5OTE5LDE4LjA0OTY5MykiIC8+PGcKICAgICBpZD0iZzEwMzc0IgogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwxNy42MTk5MTksMTguMDQ5NjkzKSIgLz48ZwogICAgIGlkPSJnMTAzNzYiCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoOS41NTU2NTEsMCwwLDkuNTU1NjUxLDE3LjYxOTkxOSwxOC4wNDk2OTMpIiAvPjxnCiAgICAgaWQ9ImcxMDM3OCIKICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMTcuNjE5OTE5LDE4LjA0OTY5MykiIC8+PGcKICAgICBpZD0iZzEwMzgwIgogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwxNy42MTk5MTksMTguMDQ5NjkzKSIgLz48ZwogICAgIGlkPSJnMTAzODIiCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoOS41NTU2NTEsMCwwLDkuNTU1NjUxLDE3LjYxOTkxOSwxOC4wNDk2OTMpIiAvPjxnCiAgICAgaWQ9ImcxMDM4NCIKICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMTcuNjE5OTE5LDE4LjA0OTY5MykiIC8+PGcKICAgICBpZD0iZzEwMzg2IgogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwxNy42MTk5MTksMTguMDQ5NjkzKSIgLz48ZwogICAgIGlkPSJnMTAzODgiCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoOS41NTU2NTEsMCwwLDkuNTU1NjUxLDE3LjYxOTkxOSwxOC4wNDk2OTMpIiAvPjxnCiAgICAgaWQ9ImcxMDM5MCIKICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMTcuNjE5OTE5LDE4LjA0OTY5MykiIC8+PGcKICAgICBpZD0iZzEwMzkyIgogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwxNy42MTk5MTksMTguMDQ5NjkzKSIgLz48ZwogICAgIGlkPSJnMTAzOTQiCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoOS41NTU2NTEsMCwwLDkuNTU1NjUxLDE3LjYxOTkxOSwxOC4wNDk2OTMpIiAvPjxnCiAgICAgaWQ9Imc0MzIwIgogICAgIHRyYW5zZm9ybT0ibWF0cml4KDQuNzU0NDI3MSwwLDAsNC43NTQ0MjcxLDcuODM5OTM2MSwyNjAuNzI3NDEpIj48ZwogICAgICAgaWQ9Imc0MjgwIj48cGF0aAogICAgICAgICBpZD0icGF0aDQyODIiCiAgICAgICAgIGQ9Im0gNDEuNTM0LDI4LjY2IDEuOTU3LDAgQyA0NC44NzcsMjguNjYgNDYsMjcuNTM2IDQ2LDI2LjE1IGwgMCwtNi4zIGMgMCwtMS4zODUgLTEuMTI0LC0yLjUwOSAtMi41MDksLTIuNTA5IGwgLTEuOTUxLDAgMCwwLjAwNiBDIDQxLjE0OCwxNi4xNCA0MC42ODcsMTQuOTgzIDQwLjEwMywxMy44ODkgbCAxLjM4MSwtMS4zODEgYyAwLjk3OSwtMC45OCAwLjk3OSwtMi41NjkgMCwtMy41NDkgTCAzNy4wNCw0LjUxNyBjIC0wLjk3OSwtMC45NzkgLTIuNTY3LC0wLjk3OSAtMy41NDcsMCBsIC0xLjM4MiwxLjM4IEMgMzEuMDE3LDUuMzEzIDI5Ljg2MSw0Ljg1MiAyOC42NTQsNC40NjEgbCAwLjAwNiwwIDAsLTEuOTUxIEMgMjguNjYsMS4xMjQgMjcuNTM3LDAgMjYuMTUsMCBsIC02LjMsMCBjIC0xLjM4NiwwIC0yLjUwOSwxLjEyNCAtMi41MDksMi41MSBsIDAsMS45NTUgMC4wMTQsLTEwZS00IGMgLTEuMjA3LDAuMzY3IC0yLjM2MywwLjg1IC0zLjQ1OCwxLjQzNSBMIDEyLjUxNiw0LjUxOCBjIC0wLjk4LC0wLjk3OSAtMi41NjgsLTAuOTc5IC0zLjU0OCwwIEwgNC41MjUsOC45NjEgQyAzLjU0Niw5Ljk0IDMuNTQ1LDExLjUyNyA0LjUyMywxMi41MDcgTCA1LjksMTMuODg5IEMgNS4zMTYsMTQuOTgzIDQuODUxLDE2LjE0IDQuNDYsMTcuMzQ2IGwgMCwtMC4wMDUgLTEuOTUxLDAgQyAxLjEyNCwxNy4zNDEgMCwxOC40NjUgMCwxOS44NSBsIDAsNi4zMDEgYyAwLDEuMzg3IDEuMTI0LDIuNTExIDIuNTA5LDIuNTExIGwgMS45NjQsMCAtMC4wMDYsLTAuMDE1IGMgMC4zNjcsMS4yMDcgMC44NTMsMi4zNjIgMS40MzYsMy40NTcgbCAtMS4zOCwxLjM4MSBjIC0wLjk4LDAuOTc5IC0wLjk3OSwyLjU2NyAwLDMuNTQ3IGwgNC40NDMsNC40NDIgYyAwLjk3OSwwLjk3OSAyLjU2OCwwLjk3OSAzLjU0OCwwIGwgMS4zODEsLTEuMzgxIGMgMS4wOTQsMC41ODQgMi4yNTEsMS4wNzIgMy40NTgsMS40MzggbCAtMC4wMTQsLTAuMDA2IDAsMS45NjUgYyAwLDEuMzg3IDEuMTIzLDIuNTEgMi41MDksMi41MSBsIDYuMywwIGMgMS4zODcsMCAyLjUxLC0xLjEyMyAyLjUxLC0yLjUxIGwgMCwtMS45NSAtMC4wMDYsMCBjIDEuMjA3LC0wLjM5MiAyLjM2MywtMC44NTYgMy40NTcsLTEuNDQgbCAxLjM4MSwxLjM3OSBjIDAuOTgsMC45NzkgMi41NjgsMC45NzkgMy41NDcsMCBsIDQuNDQzLC00LjQ0NSBjIDAuOTc5LC0wLjk3OSAwLjk3OSwtMi41NjYgMCwtMy41NDcgbCAtMS4zODMsLTEuMzgzIGMgMC41ODQsLTEuMDk0IDEuMDY4LC0yLjI1IDEuNDM2LC0zLjQ1NyBsIDEwZS00LDAuMDEzIHogTSAyMy4wMjEsMzYuNzE0IEMgMTUuNDQ0LDM2LjcyMyA5LjI3OCwzMC41NTcgOS4yODcsMjIuOTggOS4yOTYsMTUuNDQxIDE1LjQ1LDkuMjg3IDIyLjk4OSw5LjI3OCBjIDcuNTc4LC0wLjAwOSAxMy43NDQsNi4xNTcgMTMuNzM0LDEzLjczNCAtMC4wMSw3LjUzOSAtNi4xNjIsMTMuNjkzIC0xMy43MDIsMTMuNzAyIHoiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PC9nPjxnCiAgICAgICBpZD0iZzQyODQiIC8+PGcKICAgICAgIGlkPSJnNDI4NiIgLz48ZwogICAgICAgaWQ9Imc0Mjg4IiAvPjxnCiAgICAgICBpZD0iZzQyOTAiIC8+PGcKICAgICAgIGlkPSJnNDI5MiIgLz48ZwogICAgICAgaWQ9Imc0Mjk0IiAvPjxnCiAgICAgICBpZD0iZzQyOTYiIC8+PGcKICAgICAgIGlkPSJnNDI5OCIgLz48ZwogICAgICAgaWQ9Imc0MzAwIiAvPjxnCiAgICAgICBpZD0iZzQzMDIiIC8+PGcKICAgICAgIGlkPSJnNDMwNCIgLz48ZwogICAgICAgaWQ9Imc0MzA2IiAvPjxnCiAgICAgICBpZD0iZzQzMDgiIC8+PGcKICAgICAgIGlkPSJnNDMxMCIgLz48ZwogICAgICAgaWQ9Imc0MzEyIiAvPjwvZz48L3N2Zz4=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjQ1LjY3OHB4IiBoZWlnaHQ9IjQ1LjY3OHB4IiB2aWV3Qm94PSIwIDAgNDUuNjc4IDQ1LjY3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDUuNjc4IDQ1LjY3ODsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxwYXRoIGQ9Ik0zOC45ODgsNi42ODljLTguOTE5LTguOTE4LTIzLjM4LTguOTE5LTMyLjMsMGMtOC45MTgsOC45MTktOC45MTcsMjMuMzgsMCwzMi4yOTljOC45Miw4LjkxOSwyMy4zODEsOC45MTksMzIuMywwDQoJCQlDNDcuOTA4LDMwLjA2OSw0Ny45MDYsMTUuNjA4LDM4Ljk4OCw2LjY4OXogTTIxLjg5MywzNi4wMTZjLTEuNzMsMC0yLjkwNi0xLjI3Mi0yLjkwNi0yLjk3MWMwLTEuNzMsMS4yMDktMi45NzIsMi45MDYtMi45NzINCgkJCWMxLjc2NCwwLDIuOTA2LDEuMjQxLDIuOTM4LDIuOTcyQzI0LjgzMSwzNC43NDIsMjMuNjU2LDM2LjAxNiwyMS44OTMsMzYuMDE2eiBNMjYuMjE1LDIxLjk4MWMtMS4zMiwxLjQ2Ni0xLjg1NiwyLjg2MS0xLjgyLDQuNDY4DQoJCQljMCwxLjE5My0wLjk2OSwyLjE2Mi0yLjE2MywyLjE2MkgyMS43N2MtMS4xODIsMC0yLjE0NS0wLjk0OS0yLjE2MS0yLjEzMWwtMC4wMDUtMC4zMTdjLTAuMTA3LTEuODIzLDAuNTAxLTMuNjgxLDIuMTA5LTUuNjExDQoJCQljMS4xNDUtMS4zNTksMi4wNzItMi41MDIsMi4wNzItMy43MThjMC0xLjI1LTAuODIyLTIuMDczLTIuNjA3LTIuMTQ2Yy0wLjU0OSwwLTEuMTUsMC4wOTMtMS43MzEsMC4yNTYNCgkJCWMtMS4wNTYsMC4yOTctMi4xNTYtMC4yOTgtMi40ODItMS4zNDVsLTAuMDA2LTAuMDJjLTAuMzI5LTEuMDU0LDAuMjQ3LTIuMTc1LDEuMjk0LTIuNTIzYzEuMTU3LTAuMzg1LDIuNTc0LTAuNjU3LDQuMTQtMC42NTcNCgkJCWM0LjcyLDAsNi44NjQsMi42MDksNi44NjQsNS41NzZDMjkuMjU2LDE4LjY5MiwyNy41NzUsMjAuNDc5LDI2LjIxNSwyMS45ODF6Ii8+DQoJPC9nPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPC9zdmc+DQo=\"","module.exports = require(\"react-tooltip\");","module.exports = require(\"jquery-ui-dist/jquery-ui\");","module.exports = require(\"sharedb/lib/client\");","module.exports = require(\"cytoscape-edgehandles\");","(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.cytoscapeEdgeEditing = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o');\n\n $container.append($canvas);\n\n var cxtAddBendPointFcn = function (event) {\n var edge = event.target || event.cyTarget;\n if(!bendPointUtilities.isIgnoredEdge(edge)) {\n\n var param = {\n edge: edge,\n weights: edge.data('cyedgebendeditingWeights') ? [].concat(edge.data('cyedgebendeditingWeights')) : edge.data('cyedgebendeditingWeights'),\n distances: edge.data('cyedgebendeditingDistances') ? [].concat(edge.data('cyedgebendeditingDistances')) : edge.data('cyedgebendeditingDistances')\n };\n\n bendPointUtilities.addBendPoint();\n\n if (options().undoable) {\n cy.undoRedo().do('changeBendPoints', param);\n }\n }\n \n refreshDraws();\n };\n\n var cxtRemoveBendPointFcn = function (event) {\n var edge = event.target || event.cyTarget;\n \n var param = {\n edge: edge,\n weights: [].concat(edge.data('cyedgebendeditingWeights')),\n distances: [].concat(edge.data('cyedgebendeditingDistances'))\n };\n\n bendPointUtilities.removeBendPoint();\n \n if(options().undoable) {\n cy.undoRedo().do('changeBendPoints', param);\n }\n \n setTimeout(function(){refreshDraws()}, 50) ;\n };\n \n // function to reconnect edge\n var handleReconnectEdge = opts.handleReconnectEdge;\n // function to validate edge source and target on reconnection\n var validateEdge = opts.validateEdge; \n // function to be called on invalid edge reconnection\n var actOnUnsuccessfulReconnection = opts.actOnUnsuccessfulReconnection;\n \n var menuItems = [\n {\n id: addBendPointCxtMenuId,\n title: opts.addBendMenuItemTitle,\n content: 'Add Bend Point',\n selector: 'edge',\n onClickFunction: cxtAddBendPointFcn\n },\n {\n id: removeBendPointCxtMenuId,\n title: opts.removeBendMenuItemTitle,\n content: 'Remove Bend Point',\n selector: 'edge',\n onClickFunction: cxtRemoveBendPointFcn\n }\n ];\n \n if(cy.contextMenus) {\n var menus = cy.contextMenus('get');\n // If context menus is active just append menu items else activate the extension\n // with initial menu items\n if (menus.isActive()) {\n menus.appendMenuItems(menuItems);\n }\n else {\n cy.contextMenus({\n menuItems: menuItems\n });\n }\n }\n \n var _sizeCanvas = debounce(function () {\n $canvas\n .attr('height', $container.height())\n .attr('width', $container.width())\n .css({\n 'position': 'absolute',\n 'top': 0,\n 'left': 0,\n 'z-index': options().zIndex\n })\n ;\n\n setTimeout(function () {\n var canvasBb = $canvas.offset();\n var containerBb = $container.offset();\n\n $canvas\n .css({\n 'top': -(canvasBb.top - containerBb.top),\n 'left': -(canvasBb.left - containerBb.left)\n })\n ;\n\n // redraw on canvas resize\n if(cy){\n refreshDraws();\n }\n }, 0);\n\n }, 250);\n\n function sizeCanvas() {\n _sizeCanvas();\n }\n\n sizeCanvas();\n\n $(window).bind('resize', function () {\n sizeCanvas();\n });\n\n var ctx = $canvas[0].getContext('2d');\n\n // write options to data\n var data = $container.data('cyedgebendediting');\n if (data == null) {\n data = {};\n }\n data.options = opts;\n\n var optCache;\n\n function options() {\n return optCache || (optCache = $container.data('cyedgebendediting').options);\n }\n\n // we will need to convert model positons to rendered positions\n function convertToRenderedPosition(modelPosition) {\n var pan = cy.pan();\n var zoom = cy.zoom();\n\n var x = modelPosition.x * zoom + pan.x;\n var y = modelPosition.y * zoom + pan.y;\n\n return {\n x: x,\n y: y\n };\n }\n \n function refreshDraws() {\n\n var w = $container.width();\n var h = $container.height();\n\n ctx.clearRect(0, 0, w, h);\n \n if( edgeToHighlightBends ) {\n renderBendShapes(edgeToHighlightBends);\n renderEndPointShapes(edgeToHighlightBends);\n }\n }\n \n // render the bend shapes of the given edge\n function renderBendShapes(edge) {\n \n if(!edge.hasClass('edgebendediting-hasbendpoints')) {\n return;\n }\n \n var segpts = bendPointUtilities.getSegmentPoints(edge);//edge._private.rdata.segpts;\n var length = getBendShapesLength(edge) * 0.65;\n \n var srcPos = edge.source().position();\n var tgtPos = edge.target().position();\n \n var weights = edge.data('cyedgebendeditingWeights');\n var distances = edge.data('cyedgebendeditingDistances');\n\n for(var i = 0; segpts && i < segpts.length; i = i + 2){\n var bendX = segpts[i];\n var bendY = segpts[i + 1];\n\n var oldStyle = ctx.fillStyle;\n ctx.fillStyle = \"#000\"; // black\n renderBendShape(bendX, bendY, length);\n ctx.fillStyle = oldStyle;\n }\n }\n \n // render a bend shape with the given parameters\n function renderBendShape(bendX, bendY, length) {\n // get the top left coordinates\n var topLeftX = bendX - length / 2;\n var topLeftY = bendY - length / 2;\n \n // convert to rendered parameters\n var renderedTopLeftPos = convertToRenderedPosition({x: topLeftX, y: topLeftY});\n length *= cy.zoom();\n \n // render bend shape\n ctx.beginPath();\n ctx.rect(renderedTopLeftPos.x, renderedTopLeftPos.y, length, length);\n ctx.fill();\n ctx.closePath();\n }\n \n // render the end points shapes of the given edge\n function renderEndPointShapes(edge) {\n if(!edge){\n return;\n }\n\n var edge_pts = bendPointUtilities.getSegmentPoints(edge);\n if(typeof edge_pts === 'undefined'){\n edge_pts = [];\n } \n var sourcePos = edge.sourceEndpoint();\n var targetPos = edge.targetEndpoint();\n edge_pts.unshift(sourcePos.y);\n edge_pts.unshift(sourcePos.x);\n edge_pts.push(targetPos.x);\n edge_pts.push(targetPos.y); \n\n \n if(!edge_pts)\n return;\n\n var src = {\n x: edge_pts[0],\n y: edge_pts[1]\n }\n\n var target = {\n x: edge_pts[edge_pts.length-2],\n y: edge_pts[edge_pts.length-1]\n }\n\n var nextToSource = {\n x: edge_pts[2],\n y: edge_pts[3]\n }\n var nextToTarget = {\n x: edge_pts[edge_pts.length-4],\n y: edge_pts[edge_pts.length-3]\n }\n var length = getBendShapesLength(edge) * 0.65;\n\n var oldStroke = ctx.strokeStyle;\n var oldWidth = ctx.lineWidth;\n var oldFill = ctx.fillStyle;\n\n ctx.fillStyle = \"#000\"; // black\n \n renderEachEndPointShape(src, target, length,nextToSource,nextToTarget);\n \n ctx.strokeStyle = oldStroke;\n ctx.fillStyle = oldFill;\n ctx.lineWidth = oldWidth;\n }\n\n function renderEachEndPointShape(source, target, length,nextToSource,nextToTarget) {\n // get the top left coordinates of source and target\n var sTopLeftX = source.x - length / 2;\n var sTopLeftY = source.y - length / 2;\n\n var tTopLeftX = target.x - length / 2;\n var tTopLeftY = target.y - length / 2;\n\n var nextToSourceX = nextToSource.x - length /2;\n var nextToSourceY = nextToSource.y - length / 2;\n\n var nextToTargetX = nextToTarget.x - length /2;\n var nextToTargetY = nextToTarget.y - length /2;\n\n\n // convert to rendered parameters\n var renderedSourcePos = convertToRenderedPosition({x: sTopLeftX, y: sTopLeftY});\n var renderedTargetPos = convertToRenderedPosition({x: tTopLeftX, y: tTopLeftY});\n length = length * cy.zoom() / 2;\n\n var renderedNextToSource = convertToRenderedPosition({x: nextToSourceX, y: nextToSourceY});\n var renderedNextToTarget = convertToRenderedPosition({x: nextToTargetX, y: nextToTargetY});\n \n //how far to go from the node along the edge\n var distanceFromNode = length;\n\n var distanceSource = Math.sqrt(Math.pow(renderedNextToSource.x - renderedSourcePos.x,2) + Math.pow(renderedNextToSource.y - renderedSourcePos.y,2)); \n var sourceEndPointX = renderedSourcePos.x + ((distanceFromNode/ distanceSource)* (renderedNextToSource.x - renderedSourcePos.x));\n var sourceEndPointY = renderedSourcePos.y + ((distanceFromNode/ distanceSource)* (renderedNextToSource.y - renderedSourcePos.y));\n\n\n var distanceTarget = Math.sqrt(Math.pow(renderedNextToTarget.x - renderedTargetPos.x,2) + Math.pow(renderedNextToTarget.y - renderedTargetPos.y,2)); \n var targetEndPointX = renderedTargetPos.x + ((distanceFromNode/ distanceTarget)* (renderedNextToTarget.x - renderedTargetPos.x));\n var targetEndPointY = renderedTargetPos.y + ((distanceFromNode/ distanceTarget)* (renderedNextToTarget.y - renderedTargetPos.y)); \n\n // render end point shape for source and target\n ctx.beginPath();\n ctx.arc(sourceEndPointX + length, sourceEndPointY + length, length, 0, 2*Math.PI, false);\n ctx.arc(targetEndPointX + length, targetEndPointY + length, length, 0, 2*Math.PI, false);\n ctx.fill();\n \n // drawDiamondShape(renderedSourcePos.x, renderedSourcePos.y, length);\n // drawDiamondShape(renderedTargetPos.x, renderedTargetPos.y, length);\n\n function drawDiamondShape(topLeftX, topLeftY, length){\n var l = (length) / (3 * 6 + 2);\n\n // Draw all corners\n drawCorner(topLeftX, topLeftY + length/2, l, 'left');\n drawCorner(topLeftX + length/2, topLeftY, l, 'top');\n drawCorner(topLeftX + length/2, topLeftY + length, l, 'bottom');\n drawCorner(topLeftX + length, topLeftY + length/2, l, 'right');\n\n drawDashedLine(topLeftX, topLeftY + length/2, topLeftX + length/2, topLeftY, l);\n drawDashedLine(topLeftX + length/2, topLeftY, topLeftX + length, topLeftY + length/2, l);\n drawDashedLine(topLeftX + length, topLeftY + length/2, topLeftX + length/2, topLeftY + length, l);\n drawDashedLine(topLeftX + length/2, topLeftY + length, topLeftX, topLeftY + length/2, l);\n }\n\n function drawCorner(x, y, l, corner){\n ctx.beginPath();\n ctx.moveTo(x, y);\n switch(corner){\n case 'left': {\n ctx.lineTo(x + l, y - l);\n ctx.lineTo(x, y);\n ctx.lineTo(x + l, y + l);\n break;\n }\n case 'top': {\n ctx.lineTo(x - l, y + l);\n ctx.lineTo(x, y);\n ctx.lineTo(x + l, y + l);\n break;\n }\n case 'right': {\n ctx.lineTo(x - l, y - l);\n ctx.lineTo(x, y);\n ctx.lineTo(x - l, y + l);\n break;\n }\n case 'bottom': {\n ctx.lineTo(x + l, y - l);\n ctx.lineTo(x, y);\n ctx.lineTo(x - l, y - l);\n break;\n }\n case 'default':\n return;\n }\n ctx.stroke();\n }\n\n function drawDashedLine(x1, y1, x2, y2, l){\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.setLineDash([2*l,l]);\n ctx.stroke();\n ctx.setLineDash([]);\n }\n }\n\n // changes color tone\n // https://stackoverflow.com/questions/5560248/programmatically-lighten-or-darken-a-hex-color-or-rgb-and-blend-colors\n function shadeBlend(p,c0,c1) {\n var n=p<0?p*-1:p,u=Math.round,w=parseInt;\n if(c0.length>7){\n var f=c0.split(\",\"),t=(c1?c1:p<0?\"rgb(0,0,0)\":\"rgb(255,255,255)\").split(\",\"),R=w(f[0].slice(4)),G=w(f[1]),B=w(f[2]);\n return \"rgb(\"+(u((w(t[0].slice(4))-R)*n)+R)+\",\"+(u((w(t[1])-G)*n)+G)+\",\"+(u((w(t[2])-B)*n)+B)+\")\"\n }\n else{\n var f=w(c0.slice(1),16),t=w((c1?c1:p<0?\"#000000\":\"#FFFFFF\").slice(1),16),R1=f>>16,G1=f>>8&0x00FF,B1=f&0x0000FF;\n return \"#\"+(0x1000000+(u(((t>>16)-R1)*n)+R1)*0x10000+(u(((t>>8&0x00FF)-G1)*n)+G1)*0x100+(u(((t&0x0000FF)-B1)*n)+B1)).toString(16).slice(1)\n }\n }\n\n // get the length of bend points to be rendered\n function getBendShapesLength(edge) {\n var factor = options().bendShapeSizeFactor;\n if (parseFloat(edge.css('width')) <= 2.5)\n return 2.5 * factor;\n else return parseFloat(edge.css('width'))*factor;\n }\n \n // check if the point represented by {x, y} is inside the bend shape\n function checkIfInsideBendShape(x, y, length, centerX, centerY){\n var minX = centerX - length / 2;\n var maxX = centerX + length / 2;\n var minY = centerY - length / 2;\n var maxY = centerY + length / 2;\n \n var inside = (x >= minX && x <= maxX) && (y >= minY && y <= maxY);\n return inside;\n }\n\n // get the index of bend point containing the point represented by {x, y}\n function getContainingBendShapeIndex(x, y, edge) {\n if(edge.data('cyedgebendeditingWeights') == null || edge.data('cyedgebendeditingWeights').length == 0){\n return -1;\n }\n\n var segpts = bendPointUtilities.getSegmentPoints(edge);//edge._private.rdata.segpts;\n var length = getBendShapesLength(edge);\n\n for(var i = 0; segpts && i < segpts.length; i = i + 2){\n var bendX = segpts[i];\n var bendY = segpts[i + 1];\n\n var inside = checkIfInsideBendShape(x, y, length, bendX, bendY);\n if(inside){\n return i / 2;\n }\n }\n\n return -1;\n };\n\n function getContainingEndPoint(x, y, edge){\n var length = getBendShapesLength(edge);\n var allPts = edge._private.rscratch.allpts;\n var src = {\n x: allPts[0],\n y: allPts[1]\n }\n var target = {\n x: allPts[allPts.length-2],\n y: allPts[allPts.length-1]\n }\n convertToRenderedPosition(src);\n convertToRenderedPosition(target);\n \n // Source:0, Target:1, None:-1\n if(checkIfInsideBendShape(x, y, length, src.x, src.y))\n return 0;\n else if(checkIfInsideBendShape(x, y, length, target.x, target.y))\n return 1;\n else\n return -1;\n }\n \n // store the current status of gestures and set them to false\n function disableGestures() {\n lastPanningEnabled = cy.panningEnabled();\n lastZoomingEnabled = cy.zoomingEnabled();\n lastBoxSelectionEnabled = cy.boxSelectionEnabled();\n\n cy.zoomingEnabled(false)\n .panningEnabled(false)\n .boxSelectionEnabled(false);\n }\n \n // reset the gestures by their latest status\n function resetGestures() {\n cy.zoomingEnabled(lastZoomingEnabled)\n .panningEnabled(lastPanningEnabled)\n .boxSelectionEnabled(lastBoxSelectionEnabled);\n }\n\n function moveBendPoints(positionDiff, edges) {\n edges.forEach(function( edge ){\n var previousBendPointsPosition = bendPointUtilities.getSegmentPoints(edge);\n var nextBendPointsPosition = [];\n if (previousBendPointsPosition != undefined)\n {\n for (i=0; i '40') {\n return;\n }\n\n //Checks if only edges are selected (not any node) and if only 1 edge is selected\n //If the second checking is removed the bend points of multiple edges would move\n if (cy.edges(\":selected\").length != cy.elements(\":selected\").length || cy.edges(\":selected\").length != 1)\n {\n return;\n }\n\n if (!bendPointsMoving)\n {\n selectedEdges = cy.edges(':selected');\n cy.trigger(\"edgebendediting.movestart\", [selectedEdges]);\n bendPointsMoving = true;\n }\n if (e.altKey && e.which == '38') {\n // up arrow and alt\n moveBendPoints ({x:0, y:-1},selectedEdges);\n }\n else if (e.altKey && e.which == '40') {\n // down arrow and alt\n moveBendPoints ({x:0, y:1},selectedEdges);\n }\n else if (e.altKey && e.which == '37') {\n // left arrow and alt\n moveBendPoints ({x:-1, y:0},selectedEdges);\n }\n else if (e.altKey && e.which == '39') {\n // right arrow and alt\n moveBendPoints ({x:1, y:0},selectedEdges);\n }\n\n else if (e.shiftKey && e.which == '38') {\n // up arrow and shift\n moveBendPoints ({x:0, y:-10},selectedEdges);\n }\n else if (e.shiftKey && e.which == '40') {\n // down arrow and shift\n moveBendPoints ({x:0, y:10},selectedEdges);\n }\n else if (e.shiftKey && e.which == '37') {\n // left arrow and shift\n moveBendPoints ({x:-10, y:0},selectedEdges);\n\n }\n else if (e.shiftKey && e.which == '39' ) {\n // right arrow and shift\n moveBendPoints ({x:10, y:0},selectedEdges);\n }\n else if (e.keyCode == '38') {\n // up arrow\n moveBendPoints({x: 0, y: -3}, selectedEdges);\n }\n\n else if (e.keyCode == '40') {\n // down arrow\n moveBendPoints ({x:0, y:3},selectedEdges);\n }\n else if (e.keyCode == '37') {\n // left arrow\n moveBendPoints ({x:-3, y:0},selectedEdges);\n }\n else if (e.keyCode == '39') {\n //right arrow\n moveBendPoints ({x:3, y:0},selectedEdges);\n }\n }\n }\n function keyUp(e) {\n\n if (e.keyCode < '37' || e.keyCode > '40') {\n return;\n }\n\n var shouldMove = typeof options().moveSelectedBendPointsOnKeyEvents === 'function'\n ? options().moveSelectedBendPointsOnKeyEvents() : options().moveSelectedBendPointsOnKeyEvents;\n\n if (!shouldMove) {\n return;\n }\n\n cy.trigger(\"edgebendediting.moveend\", [selectedEdges]);\n selectedEdges = undefined;\n bendPointsMoving = false;\n\n }\n document.addEventListener(\"keydown\",keyDown, true);\n document.addEventListener(\"keyup\",keyUp, true);\n\n $container.data('cyedgebendediting', data);\n },\n unbind: function () {\n cy.off('position', 'node', ePosition)\n .off('remove', 'node', eRemove)\n .off('add', 'node', eAdd)\n .off('style', 'edge.edgebendediting-hasbendpoints:selected', eStyle)\n .off('select', 'edge', eSelect)\n .off('unselect', 'edge', eUnselect)\n .off('tapstart', 'edge', eTapStart)\n .off('tapdrag', eTapDrag)\n .off('tapend', eTapEnd)\n .off('cxttap', eCxtTap);\n\n cy.unbind(\"zoom pan\", eZoom);\n }\n };\n\n if (functions[fn]) {\n return functions[fn].apply($(cy.container()), Array.prototype.slice.call(arguments, 1));\n } else if (typeof fn == 'object' || !fn) {\n return functions.init.apply($(cy.container()), arguments);\n } else {\n $.error('No such function `' + fn + '` for cytoscape.js-edge-editing');\n }\n\n return $(this);\n};\n\n},{\"./bendPointUtilities\":2,\"./debounce\":3,\"./reconnectionUtilities\":5,\"./registerUndoRedoFunctions\":6}],2:[function(_dereq_,module,exports){\nvar bendPointUtilities = {\n currentCtxEdge: undefined,\n currentCtxPos: undefined,\n currentBendIndex: undefined,\n ignoredClasses: undefined,\n setIgnoredClasses: function(_ignoredClasses) {\n this.ignoredClasses = _ignoredClasses;\n },\n // initilize bend points based on bendPositionsFcn\n initBendPoints: function(bendPositionsFcn, edges) {\n for (var i = 0; i < edges.length; i++) {\n var edge = edges[i];\n if(!this.isIgnoredEdge(edge)) {\n\n // get the bend positions by applying the function for this edge\n var bendPositions = bendPositionsFcn.apply(this, edge);\n // calculate relative bend positions\n var result = this.convertToRelativeBendPositions(edge, bendPositions);\n\n // if there are bend points set weights and distances accordingly and add class to enable style changes\n if (result.distances.length > 0) {\n edge.data('cyedgebendeditingWeights', result.weights);\n edge.data('cyedgebendeditingDistances', result.distances);\n edge.addClass('edgebendediting-hasbendpoints');\n }\n }\n }\n },\n\n isIgnoredEdge: function(edge) {\n\n var startX = edge.source().position('x');\n var startY = edge.source().position('y');\n var endX = edge.target().position('x');\n var endY = edge.target().position('y');\n \n if((startX == endX && startY == endY) || (edge.source().id() == edge.target().id())){\n return true;\n }\n for(var i = 0; this.ignoredClasses && i < this.ignoredClasses.length; i++){\n if(edge.hasClass(this.ignoredClasses[i]))\n return true;\n }\n return false;\n },\n //Get the direction of the line from source point to the target point\n getLineDirection: function(srcPoint, tgtPoint){\n if(srcPoint.y == tgtPoint.y && srcPoint.x < tgtPoint.x){\n return 1;\n }\n if(srcPoint.y < tgtPoint.y && srcPoint.x < tgtPoint.x){\n return 2;\n }\n if(srcPoint.y < tgtPoint.y && srcPoint.x == tgtPoint.x){\n return 3;\n }\n if(srcPoint.y < tgtPoint.y && srcPoint.x > tgtPoint.x){\n return 4;\n }\n if(srcPoint.y == tgtPoint.y && srcPoint.x > tgtPoint.x){\n return 5;\n }\n if(srcPoint.y > tgtPoint.y && srcPoint.x > tgtPoint.x){\n return 6;\n }\n if(srcPoint.y > tgtPoint.y && srcPoint.x == tgtPoint.x){\n return 7;\n }\n return 8;//if srcPoint.y > tgtPoint.y and srcPoint.x < tgtPoint.x\n },\n getSrcTgtPointsAndTangents: function (edge) {\n var sourceNode = edge.source();\n var targetNode = edge.target();\n \n var tgtPosition = targetNode.position();\n var srcPosition = sourceNode.position();\n \n var srcPoint = sourceNode.position();\n var tgtPoint = targetNode.position();\n\n\n var m1 = (tgtPoint.y - srcPoint.y) / (tgtPoint.x - srcPoint.x);\n var m2 = -1 / m1;\n\n return {\n m1: m1,\n m2: m2,\n srcPoint: srcPoint,\n tgtPoint: tgtPoint\n };\n },\n getIntersection: function(edge, point, srcTgtPointsAndTangents){\n if (srcTgtPointsAndTangents === undefined) {\n srcTgtPointsAndTangents = this.getSrcTgtPointsAndTangents(edge);\n }\n\n var srcPoint = srcTgtPointsAndTangents.srcPoint;\n var tgtPoint = srcTgtPointsAndTangents.tgtPoint;\n var m1 = srcTgtPointsAndTangents.m1;\n var m2 = srcTgtPointsAndTangents.m2;\n\n var intersectX;\n var intersectY;\n\n if(m1 == Infinity || m1 == -Infinity){\n intersectX = srcPoint.x;\n intersectY = point.y;\n }\n else if(m1 == 0){\n intersectX = point.x;\n intersectY = srcPoint.y;\n }\n else {\n var a1 = srcPoint.y - m1 * srcPoint.x;\n var a2 = point.y - m2 * point.x;\n\n intersectX = (a2 - a1) / (m1 - m2);\n intersectY = m1 * intersectX + a1;\n }\n\n //Intersection point is the intersection of the lines passing through the nodes and\n //passing through the bend point and perpendicular to the other line\n var intersectionPoint = {\n x: intersectX,\n y: intersectY\n };\n \n return intersectionPoint;\n },\n getSegmentPoints: function(edge) {\n \n if( edge.css('curve-style') !== 'segments' ) {\n return undefined;\n }\n \n var segpts = [];\n\n var segmentWs = edge.pstyle( 'segment-weights' ).pfValue;\n var segmentDs = edge.pstyle( 'segment-distances' ).pfValue;\n var segmentsN = Math.min( segmentWs.length, segmentDs.length );\n \n var srcPos = edge.source().position();\n var tgtPos = edge.target().position();\n\n var dy = ( tgtPos.y - srcPos.y );\n var dx = ( tgtPos.x - srcPos.x );\n \n var l = Math.sqrt( dx * dx + dy * dy );\n\n var vector = {\n x: dx,\n y: dy\n };\n\n var vectorNorm = {\n x: vector.x / l,\n y: vector.y / l\n };\n \n var vectorNormInverse = {\n x: -vectorNorm.y,\n y: vectorNorm.x\n };\n\n for( var s = 0; s < segmentsN; s++ ){\n var w = segmentWs[ s ];\n var d = segmentDs[ s ];\n\n // d = swappedDirection ? -d : d;\n //\n // d = Math.abs(d);\n\n // var w1 = !swappedDirection ? (1 - w) : w;\n // var w2 = !swappedDirection ? w : (1 - w);\n\n var w1 = (1 - w);\n var w2 = w;\n\n var posPts = {\n x1: srcPos.x,\n x2: tgtPos.x,\n y1: srcPos.y,\n y2: tgtPos.y\n };\n\n var midptPts = posPts;\n \n \n\n var adjustedMidpt = {\n x: midptPts.x1 * w1 + midptPts.x2 * w2,\n y: midptPts.y1 * w1 + midptPts.y2 * w2\n };\n\n segpts.push(\n adjustedMidpt.x + vectorNormInverse.x * d,\n adjustedMidpt.y + vectorNormInverse.y * d\n );\n }\n \n return segpts;\n },\n convertToRelativeBendPosition: function (edge, bendPoint, srcTgtPointsAndTangents) {\n if (srcTgtPointsAndTangents === undefined) {\n srcTgtPointsAndTangents = this.getSrcTgtPointsAndTangents(edge);\n }\n \n var intersectionPoint = this.getIntersection(edge, bendPoint, srcTgtPointsAndTangents);\n var intersectX = intersectionPoint.x;\n var intersectY = intersectionPoint.y;\n \n var srcPoint = srcTgtPointsAndTangents.srcPoint;\n var tgtPoint = srcTgtPointsAndTangents.tgtPoint;\n \n var weight;\n \n if( intersectX != srcPoint.x ) {\n weight = (intersectX - srcPoint.x) / (tgtPoint.x - srcPoint.x);\n }\n else if( intersectY != srcPoint.y ) {\n weight = (intersectY - srcPoint.y) / (tgtPoint.y - srcPoint.y);\n }\n else {\n weight = 0;\n }\n \n var distance = Math.sqrt(Math.pow((intersectY - bendPoint.y), 2)\n + Math.pow((intersectX - bendPoint.x), 2));\n \n //Get the direction of the line form source point to target point\n var direction1 = this.getLineDirection(srcPoint, tgtPoint);\n //Get the direction of the line from intesection point to bend point\n var direction2 = this.getLineDirection(intersectionPoint, bendPoint);\n \n //If the difference is not -2 and not 6 then the direction of the distance is negative\n if(direction1 - direction2 != -2 && direction1 - direction2 != 6){\n if(distance != 0)\n distance = -1 * distance;\n }\n \n return {\n weight: weight,\n distance: distance\n };\n },\n convertToRelativeBendPositions: function (edge, bendPoints) {\n var srcTgtPointsAndTangents = this.getSrcTgtPointsAndTangents(edge);\n// var bendPoints = edge.data('bendPointPositions');\n //output variables\n var weights = [];\n var distances = [];\n\n for (var i = 0; bendPoints && i < bendPoints.length; i++) {\n var bendPoint = bendPoints[i];\n var relativeBendPosition = this.convertToRelativeBendPosition(edge, bendPoint, srcTgtPointsAndTangents);\n\n weights.push(relativeBendPosition.weight);\n distances.push(relativeBendPosition.distance);\n }\n\n return {\n weights: weights,\n distances: distances\n };\n },\n getSegmentDistancesString: function (edge) {\n var str = \"\";\n\n var distances = edge.data('cyedgebendeditingDistances');\n for (var i = 0; distances && i < distances.length; i++) {\n str = str + \" \" + distances[i];\n }\n \n return str;\n },\n getSegmentWeightsString: function (edge) {\n var str = \"\";\n\n var weights = edge.data('cyedgebendeditingWeights');\n for (var i = 0; weights && i < weights.length; i++) {\n str = str + \" \" + weights[i];\n }\n \n return str;\n },\n addBendPoint: function(edge, newBendPoint) {\n if(edge === undefined || newBendPoint === undefined){\n edge = this.currentCtxEdge;\n newBendPoint = this.currentCtxPos;\n }\n \n var relativeBendPosition = this.convertToRelativeBendPosition(edge, newBendPoint);\n var originalPointWeight = relativeBendPosition.weight;\n \n var startX = edge.source().position('x');\n var startY = edge.source().position('y');\n var endX = edge.target().position('x');\n var endY = edge.target().position('y');\n var startWeight = this.convertToRelativeBendPosition(edge, {x: startX, y: startY}).weight;\n var endWeight = this.convertToRelativeBendPosition(edge, {x: endX, y: endY}).weight;\n var weightsWithTgtSrc = [startWeight].concat(edge.data('cyedgebendeditingWeights')?edge.data('cyedgebendeditingWeights'):[]).concat([endWeight]);\n \n var segPts = this.getSegmentPoints(edge);\n \n var minDist = Infinity;\n var intersection;\n var segptsWithTgtSrc = [startX, startY]\n .concat(segPts?segPts:[])\n .concat([endX, endY]);\n var newBendIndex = -1;\n \n for(var i = 0; i < weightsWithTgtSrc.length - 1; i++){\n var w1 = weightsWithTgtSrc[i];\n var w2 = weightsWithTgtSrc[i + 1];\n \n //check if the weight is between w1 and w2\n const b1 = this.compareWithPrecision(originalPointWeight, w1, true);\n const b2 = this.compareWithPrecision(originalPointWeight, w2);\n const b3 = this.compareWithPrecision(originalPointWeight, w2, true);\n const b4 = this.compareWithPrecision(originalPointWeight, w1);\n if( (b1 && b2) || (b3 && b4)){\n var startX = segptsWithTgtSrc[2 * i];\n var startY = segptsWithTgtSrc[2 * i + 1];\n var endX = segptsWithTgtSrc[2 * i + 2];\n var endY = segptsWithTgtSrc[2 * i + 3];\n \n var start = {\n x: startX,\n y: startY\n };\n \n var end = {\n x: endX,\n y: endY\n };\n \n var m1 = ( startY - endY ) / ( startX - endX );\n var m2 = -1 / m1;\n \n var srcTgtPointsAndTangents = {\n srcPoint: start,\n tgtPoint: end,\n m1: m1,\n m2: m2\n };\n \n //get the intersection of the current segment with the new bend point\n var currentIntersection = this.getIntersection(edge, newBendPoint, srcTgtPointsAndTangents);\n var dist = Math.sqrt( Math.pow( (newBendPoint.x - currentIntersection.x), 2 ) \n + Math.pow( (newBendPoint.y - currentIntersection.y), 2 ));\n \n //Update the minimum distance\n if(dist < minDist){\n minDist = dist;\n intersection = currentIntersection;\n newBendIndex = i;\n }\n }\n }\n \n if(intersection !== undefined){\n newBendPoint = intersection;\n }\n \n relativeBendPosition = this.convertToRelativeBendPosition(edge, newBendPoint);\n \n if(intersection === undefined){\n relativeBendPosition.distance = 0;\n }\n\n var weights = edge.data('cyedgebendeditingWeights');\n var distances = edge.data('cyedgebendeditingDistances');\n \n weights = weights?weights:[];\n distances = distances?distances:[];\n \n if(weights.length === 0) {\n newBendIndex = 0;\n }\n \n// weights.push(relativeBendPosition.weight);\n// distances.push(relativeBendPosition.distance);\n if(newBendIndex != -1){\n weights.splice(newBendIndex, 0, relativeBendPosition.weight);\n distances.splice(newBendIndex, 0, relativeBendPosition.distance);\n }\n \n edge.data('cyedgebendeditingWeights', weights);\n edge.data('cyedgebendeditingDistances', distances);\n \n edge.addClass('edgebendediting-hasbendpoints');\n \n return relativeBendPosition;\n },\n removeBendPoint: function(edge, bendPointIndex){\n if(edge === undefined || bendPointIndex === undefined){\n edge = this.currentCtxEdge;\n bendPointIndex = this.currentBendIndex;\n }\n \n var distances = edge.data('cyedgebendeditingDistances');\n var weights = edge.data('cyedgebendeditingWeights');\n \n distances.splice(bendPointIndex, 1);\n weights.splice(bendPointIndex, 1);\n \n \n if(distances.length == 0 || weights.length == 0){\n edge.removeClass('edgebendediting-hasbendpoints');\n edge.data('cyedgebendeditingDistances', []);\n edge.data('cyedgebendeditingWeights', []);\n }\n else {\n edge.data('cyedgebendeditingDistances', distances);\n edge.data('cyedgebendeditingWeights', weights);\n }\n },\n calculateDistance: function(pt1, pt2) {\n var diffX = pt1.x - pt2.x;\n var diffY = pt1.y - pt2.y;\n \n var dist = Math.sqrt( Math.pow( diffX, 2 ) + Math.pow( diffY, 2 ) );\n return dist;\n },\n /** (Less than or equal to) and (greater then equal to) comparisons with floating point numbers */\n compareWithPrecision: function (n1, n2, isLessThenOrEqual = false, precision = 0.01) {\n const diff = n1 - n2;\n if (Math.abs(diff) <= precision) {\n return true;\n }\n if (isLessThenOrEqual) {\n return n1 < n2;\n } else {\n return n1 > n2;\n }\n }\n};\n\nmodule.exports = bendPointUtilities;\n\n},{}],3:[function(_dereq_,module,exports){\nvar debounce = (function () {\n /**\n * lodash 3.1.1 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n /** Used as the `TypeError` message for \"Functions\" methods. */\n var FUNC_ERROR_TEXT = 'Expected a function';\n\n /* Native method references for those with the same name as other `lodash` methods. */\n var nativeMax = Math.max,\n nativeNow = Date.now;\n\n /**\n * Gets the number of milliseconds that have elapsed since the Unix epoch\n * (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @category Date\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => logs the number of milliseconds it took for the deferred function to be invoked\n */\n var now = nativeNow || function () {\n return new Date().getTime();\n };\n\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed invocations. Provide an options object to indicate that `func`\n * should be invoked on the leading and/or trailing edge of the `wait` timeout.\n * Subsequent calls to the debounced function return the result of the last\n * `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked\n * on the trailing edge of the timeout only if the the debounced function is\n * invoked more than once during the `wait` timeout.\n *\n * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options] The options object.\n * @param {boolean} [options.leading=false] Specify invoking on the leading\n * edge of the timeout.\n * @param {number} [options.maxWait] The maximum time `func` is allowed to be\n * delayed before it's invoked.\n * @param {boolean} [options.trailing=true] Specify invoking on the trailing\n * edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // avoid costly calculations while the window size is in flux\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // invoke `sendMail` when the click event is fired, debouncing subsequent calls\n * jQuery('#postbox').on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // ensure `batchLog` is invoked once after 1 second of debounced calls\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', _.debounce(batchLog, 250, {\n * 'maxWait': 1000\n * }));\n *\n * // cancel a debounced call\n * var todoChanges = _.debounce(batchLog, 1000);\n * Object.observe(models.todo, todoChanges);\n *\n * Object.observe(models, function(changes) {\n * if (_.find(changes, { 'user': 'todo', 'type': 'delete'})) {\n * todoChanges.cancel();\n * }\n * }, ['delete']);\n *\n * // ...at some point `models.todo` is changed\n * models.todo.completed = true;\n *\n * // ...before 1 second has passed `models.todo` is deleted\n * // which cancels the debounced `todoChanges` call\n * delete models.todo;\n */\n function debounce(func, wait, options) {\n var args,\n maxTimeoutId,\n result,\n stamp,\n thisArg,\n timeoutId,\n trailingCall,\n lastCalled = 0,\n maxWait = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = wait < 0 ? 0 : (+wait || 0);\n if (options === true) {\n var leading = true;\n trailing = false;\n } else if (isObject(options)) {\n leading = !!options.leading;\n maxWait = 'maxWait' in options && nativeMax(+options.maxWait || 0, wait);\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function cancel() {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n if (maxTimeoutId) {\n clearTimeout(maxTimeoutId);\n }\n lastCalled = 0;\n maxTimeoutId = timeoutId = trailingCall = undefined;\n }\n\n function complete(isCalled, id) {\n if (id) {\n clearTimeout(id);\n }\n maxTimeoutId = timeoutId = trailingCall = undefined;\n if (isCalled) {\n lastCalled = now();\n result = func.apply(thisArg, args);\n if (!timeoutId && !maxTimeoutId) {\n args = thisArg = undefined;\n }\n }\n }\n\n function delayed() {\n var remaining = wait - (now() - stamp);\n if (remaining <= 0 || remaining > wait) {\n complete(trailingCall, maxTimeoutId);\n } else {\n timeoutId = setTimeout(delayed, remaining);\n }\n }\n\n function maxDelayed() {\n complete(trailing, timeoutId);\n }\n\n function debounced() {\n args = arguments;\n stamp = now();\n thisArg = this;\n trailingCall = trailing && (timeoutId || !leading);\n\n if (maxWait === false) {\n var leadingCall = leading && !timeoutId;\n } else {\n if (!maxTimeoutId && !leading) {\n lastCalled = stamp;\n }\n var remaining = maxWait - (stamp - lastCalled),\n isCalled = remaining <= 0 || remaining > maxWait;\n\n if (isCalled) {\n if (maxTimeoutId) {\n maxTimeoutId = clearTimeout(maxTimeoutId);\n }\n lastCalled = stamp;\n result = func.apply(thisArg, args);\n }\n else if (!maxTimeoutId) {\n maxTimeoutId = setTimeout(maxDelayed, remaining);\n }\n }\n if (isCalled && timeoutId) {\n timeoutId = clearTimeout(timeoutId);\n }\n else if (!timeoutId && wait !== maxWait) {\n timeoutId = setTimeout(delayed, wait);\n }\n if (leadingCall) {\n isCalled = true;\n result = func.apply(thisArg, args);\n }\n if (isCalled && !timeoutId && !maxTimeoutId) {\n args = thisArg = undefined;\n }\n return result;\n }\n\n debounced.cancel = cancel;\n return debounced;\n }\n\n /**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\n function isObject(value) {\n // Avoid a V8 JIT bug in Chrome 19-20.\n // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n }\n\n return debounce;\n\n})();\n\nmodule.exports = debounce;\n},{}],4:[function(_dereq_,module,exports){\n;(function(){ 'use strict';\n \n var bendPointUtilities = _dereq_('./bendPointUtilities');\n var debounce = _dereq_(\"./debounce\");\n \n // registers the extension on a cytoscape lib ref\n var register = function( cytoscape, $ ){\n var uiUtilities = _dereq_('./UIUtilities');\n \n if( !cytoscape ){ return; } // can't register if cytoscape unspecified\n\n var defaults = {\n // this function specifies the poitions of bend points\n bendPositionsFunction: function(ele) {\n return ele.data('bendPointPositions');\n },\n // whether to initilize bend points on creation of this extension automatically\n initBendPointsAutomatically: true,\n // the classes of those edges that should be ignored\n ignoredClasses: [],\n // whether the bend editing operations are undoable (requires cytoscape-undo-redo.js)\n undoable: false,\n // the size of bend shape is obtained by multipling width of edge with this parameter\n bendShapeSizeFactor: 3,\n // z-index value of the canvas in which bend points are drawn\n zIndex: 999, \n // whether to start the plugin in the enabled state\n enabled: true,\n //An option that controls the distance within which a bend point is considered \"near\" the line segment between its two neighbors and will be automatically removed\n bendRemovalSensitivity : 8,\n // title of add bend point menu item (User may need to adjust width of menu items according to length of this option)\n addBendMenuItemTitle: \"Add Bend Point\",\n // title of remove bend point menu item (User may need to adjust width of menu items according to length of this option)\n removeBendMenuItemTitle: \"Remove Bend Point\",\n // whether the bend point can be moved by arrows\n moveSelectedBendPointsOnKeyEvents: function () {\n return true;\n }\n };\n \n var options;\n var initialized = false;\n \n // Merge default options with the ones coming from parameter\n function extend(defaults, options) {\n var obj = {};\n\n for (var i in defaults) {\n obj[i] = defaults[i];\n }\n\n for (var i in options) {\n if(i == \"bendRemovalSensitivity\"){\n var value = options[i];\n if(!isNaN(value))\n {\n if(value >= 0 && value <= 20){\n obj[i] = options[i];\n }else if(value < 0){\n obj[i] = 0\n }else{\n obj[i] = 20\n }\n }\n }else{\n obj[i] = options[i];\n }\n\n }\n\n return obj;\n };\n \n cytoscape( 'core', 'edgeEditing', function(opts){\n var cy = this;\n \n if( opts === 'initialized' ) {\n return initialized;\n }\n \n if( opts !== 'get' ) {\n // merge the options with default ones\n options = extend(defaults, opts);\n initialized = true;\n\n // define edgebendediting-hasbendpoints css class\n cy.style().selector('.edgebendediting-hasbendpoints').css({\n 'curve-style': 'segments',\n 'segment-distances': function (ele) {\n return bendPointUtilities.getSegmentDistancesString(ele);\n },\n 'segment-weights': function (ele) {\n return bendPointUtilities.getSegmentWeightsString(ele);\n },\n 'edge-distances': 'node-position'\n });\n\n bendPointUtilities.setIgnoredClasses(options.ignoredClasses);\n\n // init bend positions conditionally\n if (options.initBendPointsAutomatically) {\n bendPointUtilities.initBendPoints(options.bendPositionsFunction, cy.edges(), options.ignoredClasses);\n }\n\n if(options.enabled)\n uiUtilities(options, cy);\n else\n uiUtilities(\"unbind\", cy);\n }\n \n var instance = initialized ? {\n /*\n * get segment points of the given edge in an array A,\n * A[2 * i] is the x coordinate and A[2 * i + 1] is the y coordinate\n * of the ith bend point. (Returns undefined if the curve style is not segments)\n */\n getSegmentPoints: function(ele) {\n return bendPointUtilities.getSegmentPoints(ele);\n },\n // Initilize bend points for the given edges using 'options.bendPositionsFunction'\n initBendPoints: function(eles) {\n bendPointUtilities.initBendPoints(options.bendPositionsFunction, eles);\n },\n deleteSelectedBendPoint: function(ele, index) {\n bendPointUtilities.removeBendPoint(ele,index);\n }\n } : undefined;\n\n return instance; // chainability\n } );\n\n };\n\n if( typeof module !== 'undefined' && module.exports ){ // expose as a commonjs module\n module.exports = register;\n }\n\n if( typeof define !== 'undefined' && define.amd ){ // expose as an amd/requirejs module\n define('cytoscape-edge-editing', function(){\n return register;\n });\n }\n\n if( typeof cytoscape !== 'undefined' && $ ){ // expose to global cytoscape (i.e. window.cytoscape)\n register( cytoscape, $ );\n }\n\n})();\n\n},{\"./UIUtilities\":1,\"./bendPointUtilities\":2,\"./debounce\":3}],5:[function(_dereq_,module,exports){\nvar reconnectionUtilities = {\n\n // creates and returns a dummy node which is connected to the disconnected edge\n disconnectEdge: function (edge, cy, position, disconnectedEnd) {\n \n var dummyNode = {\n data: { \n id: 'nwt_reconnectEdge_dummy',\n ports: [],\n },\n style: {\n width: 1,\n height: 1,\n 'visibility': 'hidden'\n },\n renderedPosition: position\n };\n cy.add(dummyNode);\n\n var loc = (disconnectedEnd === 'source') ? \n {source: dummyNode.data.id} : \n {target: dummyNode.data.id};\n\n edge = edge.move(loc)[0];\n\n return {\n dummyNode: cy.nodes(\"#\" + dummyNode.data.id)[0],\n edge: edge\n };\n },\n\n connectEdge: function (edge, node, location) {\n if(!edge.isEdge() || !node.isNode())\n return;\n\n var loc = {};\n if(location === 'source')\n loc.source = node.id();\n \n else if(location === 'target')\n loc.target = node.id();\n \n else\n return;\n\n return edge.move(loc)[0];\n },\n\n copyEdge: function (oldEdge, newEdge) {\n this.copyBendPoints(oldEdge, newEdge);\n this.copyStyle(oldEdge, newEdge);\n },\n\n copyStyle: function (oldEdge, newEdge) {\n if(oldEdge && newEdge){\n newEdge.data('line-color', oldEdge.data('line-color'));\n newEdge.data('width', oldEdge.data('width'));\n newEdge.data('cardinality', oldEdge.data('cardinality'));\n }\n },\n\n copyBendPoints: function (oldEdge, newEdge) {\n if(oldEdge.hasClass('edgebendediting-hasbendpoints')){\n var bpDistances = oldEdge.data('cyedgebendeditingDistances');\n var bpWeights = oldEdge.data('cyedgebendeditingWeights');\n \n newEdge.data('cyedgebendeditingDistances', bpDistances);\n newEdge.data('cyedgebendeditingWeights', bpWeights);\n newEdge.addClass('edgebendediting-hasbendpoints');\n }\n },\n};\n \nmodule.exports = reconnectionUtilities;\n \n},{}],6:[function(_dereq_,module,exports){\nmodule.exports = function (cy, bendPointUtilities, params) {\n if (cy.undoRedo == null)\n return;\n\n var ur = cy.undoRedo({\n defaultActions: false,\n isDebug: true\n });\n\n function changeBendPoints(param) {\n var edge = cy.getElementById(param.edge.id());\n var result = {\n edge: edge,\n weights: param.set ? edge.data('cyedgebendeditingWeights') : param.weights,\n distances: param.set ? edge.data('cyedgebendeditingDistances') : param.distances,\n set: true//As the result will not be used for the first function call params should be used to set the data\n };\n\n var hasBend = param.weights && param.weights.length > 0;\n\n //Check if we need to set the weights and distances by the param values\n if (param.set) {\n hasBend ? edge.data('cyedgebendeditingWeights', param.weights) : edge.removeData('cyedgebendeditingWeights');\n hasBend ? edge.data('cyedgebendeditingDistances', param.distances) : edge.removeData('cyedgebendeditingDistances');\n\n //refresh the curve style as the number of bend point would be changed by the previous operation\n if (hasBend) {\n edge.addClass('edgebendediting-hasbendpoints');\n }\n else {\n edge.removeClass('edgebendediting-hasbendpoints');\n }\n }\n \n edge.trigger('cyedgebendediting.changeBendPoints');\n\n return result;\n }\n\n function moveDo(arg) {\n if (arg.firstTime) {\n delete arg.firstTime;\n return arg;\n }\n\n var edges = arg.edges;\n var positionDiff = arg.positionDiff;\n var result = {\n edges: edges,\n positionDiff: {\n x: -positionDiff.x,\n y: -positionDiff.y\n }\n };\n moveBendPointsUndoable(positionDiff, edges);\n\n return result;\n }\n\n function moveBendPointsUndoable(positionDiff, edges) {\n edges.forEach(function( edge ){\n edge = cy.getElementById(param.edge.id());\n var previousBendPointsPosition = bendPointUtilities.getSegmentPoints(edge);\n var nextBendPointsPosition = [];\n if (previousBendPointsPosition != undefined)\n {\n for (i=0; i 0)\n oldEdge = tmp;\n\n var newEdge = param.newEdge;\n var tmp = cy.getElementById(newEdge.data('id'));\n if(tmp && tmp.length > 0)\n newEdge = tmp;\n\n if(oldEdge.inside()){\n oldEdge = oldEdge.remove()[0];\n } \n \n if(newEdge.removed()){\n newEdge = newEdge.restore();\n newEdge.unselect();\n }\n \n return {\n oldEdge: newEdge,\n newEdge: oldEdge\n };\n }\n\n ur.action('changeBendPoints', changeBendPoints, changeBendPoints);\n ur.action('moveBendPoints', moveDo, moveDo);\n ur.action('reconnectEdge', reconnectEdge, reconnectEdge);\n ur.action('removeReconnectedEdge', removeReconnectedEdge, removeReconnectedEdge);\n};\n\n},{}]},{},[4])(4)\n});\n\n//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvVUlVdGlsaXRpZXMuanMiLCJzcmMvYmVuZFBvaW50VXRpbGl0aWVzLmpzIiwic3JjL2RlYm91bmNlLmpzIiwic3JjL2luZGV4LmpzIiwic3JjL3JlY29ubmVjdGlvblV0aWxpdGllcy5qcyIsInNyYy9yZWdpc3RlclVuZG9SZWRvRnVuY3Rpb25zLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxb0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdmJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsInZhciBkZWJvdW5jZSA9IHJlcXVpcmUoJy4vZGVib3VuY2UnKTtcclxudmFyIGJlbmRQb2ludFV0aWxpdGllcyA9IHJlcXVpcmUoJy4vYmVuZFBvaW50VXRpbGl0aWVzJyk7XHJcbnZhciByZWNvbm5lY3Rpb25VdGlsaXRpZXMgPSByZXF1aXJlKCcuL3JlY29ubmVjdGlvblV0aWxpdGllcycpO1xyXG52YXIgcmVnaXN0ZXJVbmRvUmVkb0Z1bmN0aW9ucyA9IHJlcXVpcmUoJy4vcmVnaXN0ZXJVbmRvUmVkb0Z1bmN0aW9ucycpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocGFyYW1zLCBjeSkge1xyXG4gIHZhciBmbiA9IHBhcmFtcztcclxuXHJcbiAgdmFyIGFkZEJlbmRQb2ludEN4dE1lbnVJZCA9ICdjeS1lZGdlLWJlbmQtZWRpdGluZy1jeHQtYWRkLWJlbmQtcG9pbnQnO1xyXG4gIHZhciByZW1vdmVCZW5kUG9pbnRDeHRNZW51SWQgPSAnY3ktZWRnZS1iZW5kLWVkaXRpbmctY3h0LXJlbW92ZS1iZW5kLXBvaW50JztcclxuICB2YXIgZVBvc2l0aW9uLCBlU3R5bGUsIGVSZW1vdmUsIGVBZGQsIGVab29tLCBlU2VsZWN0LCBlVW5zZWxlY3QsIGVUYXBTdGFydCwgZVRhcERyYWcsIGVUYXBFbmQsIGVDeHRUYXA7XHJcbiAgLy8gbGFzdCBzdGF0dXMgb2YgZ2VzdHVyZXNcclxuICB2YXIgbGFzdFBhbm5pbmdFbmFibGVkLCBsYXN0Wm9vbWluZ0VuYWJsZWQsIGxhc3RCb3hTZWxlY3Rpb25FbmFibGVkO1xyXG4gIC8vIHN0YXR1cyBvZiBlZGdlIHRvIGhpZ2hsaWdodCBiZW5kcyBhbmQgc2VsZWN0ZWQgZWRnZXNcclxuICB2YXIgZWRnZVRvSGlnaGxpZ2h0QmVuZHMsIG51bWJlck9mU2VsZWN0ZWRFZGdlcztcclxuICBcclxuICB2YXIgZnVuY3Rpb25zID0ge1xyXG4gICAgaW5pdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAvLyByZWdpc3RlciB1bmRvIHJlZG8gZnVuY3Rpb25zXHJcbiAgICAgIHJlZ2lzdGVyVW5kb1JlZG9GdW5jdGlvbnMoY3ksIGJlbmRQb2ludFV0aWxpdGllcywgcGFyYW1zKTtcclxuICAgICAgXHJcbiAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgdmFyIG9wdHMgPSBwYXJhbXM7XHJcbiAgICAgIHZhciAkY29udGFpbmVyID0gJCh0aGlzKTtcclxuICAgICAgdmFyICRjYW52YXMgPSAkKCc8Y2FudmFzPjwvY2FudmFzPicpO1xyXG5cclxuICAgICAgJGNvbnRhaW5lci5hcHBlbmQoJGNhbnZhcyk7XHJcblxyXG4gICAgICB2YXIgY3h0QWRkQmVuZFBvaW50RmNuID0gZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgdmFyIGVkZ2UgPSBldmVudC50YXJnZXQgfHwgZXZlbnQuY3lUYXJnZXQ7XHJcbiAgICAgICAgaWYoIWJlbmRQb2ludFV0aWxpdGllcy5pc0lnbm9yZWRFZGdlKGVkZ2UpKSB7XHJcblxyXG4gICAgICAgICAgdmFyIHBhcmFtID0ge1xyXG4gICAgICAgICAgICBlZGdlOiBlZGdlLFxyXG4gICAgICAgICAgICB3ZWlnaHRzOiBlZGdlLmRhdGEoJ2N5ZWRnZWJlbmRlZGl0aW5nV2VpZ2h0cycpID8gW10uY29uY2F0KGVkZ2UuZGF0YSgnY3llZGdlYmVuZGVkaXRpbmdXZWlnaHRzJykpIDogZWRnZS5kYXRhKCdjeWVkZ2ViZW5kZWRpdGluZ1dlaWdodHMnKSxcclxuICAgICAgICAgICAgZGlzdGFuY2VzOiBlZGdlLmRhdGEoJ2N5ZWRnZWJlbmRlZGl0aW5nRGlzdGFuY2VzJykgPyBbXS5jb25jYXQoZWRnZS5kYXRhKCdjeWVkZ2ViZW5kZWRpdGluZ0Rpc3RhbmNlcycpKSA6IGVkZ2UuZGF0YSgnY3llZGdlYmVuZGVkaXRpbmdEaXN0YW5jZXMnKVxyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICBiZW5kUG9pbnRVdGlsaXRpZXMuYWRkQmVuZFBvaW50KCk7XHJcblxyXG4gICAgICAgICAgaWYgKG9wdGlvbnMoKS51bmRvYWJsZSkge1xyXG4gICAgICAgICAgICBjeS51bmRvUmVkbygpLmRvKCdjaGFuZ2VCZW5kUG9pbnRzJywgcGFyYW0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICByZWZyZXNoRHJhd3MoKTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHZhciBjeHRSZW1vdmVCZW5kUG9pbnRGY24gPSBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICB2YXIgZWRnZSA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5jeVRhcmdldDtcclxuICAgICAgICBcclxuICAgICAgICB2YXIgcGFyYW0gPSB7XHJcbiAgICAgICAgICBlZGdlOiBlZGdlLFxyXG4gICAgICAgICAgd2VpZ2h0czogW10uY29uY2F0KGVkZ2UuZGF0YSgnY3llZGdlYmVuZGVkaXRpbmdXZWlnaHRzJykpLFxyXG4gICAgICAgICAgZGlzdGFuY2VzOiBbXS5jb25jYXQoZWRnZS5kYXRhKCdjeWVkZ2ViZW5kZWRpdGluZ0Rpc3RhbmNlcycpKVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGJlbmRQb2ludFV0aWxpdGllcy5yZW1vdmVCZW5kUG9pbnQoKTtcclxuICAgICAgICBcclxuICAgICAgICBpZihvcHRpb25zKCkudW5kb2FibGUpIHtcclxuICAgICAgICAgIGN5LnVuZG9SZWRvKCkuZG8oJ2NoYW5nZUJlbmRQb2ludHMnLCBwYXJhbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZWZyZXNoRHJhd3MoKX0sIDUwKSA7XHJcbiAgICAgIH07XHJcbiAgICAgIFxyXG4gICAgICAvLyBmdW5jdGlvbiB0byByZWNvbm5lY3QgZWRnZVxyXG4gICAgICB2YXIgaGFuZGxlUmVjb25uZWN0RWRnZSA9IG9wdHMuaGFuZGxlUmVjb25uZWN0RWRnZTtcclxuICAgICAgLy8gZnVuY3Rpb24gdG8gdmFsaWRhdGUgZWRnZSBzb3VyY2UgYW5kIHRhcmdldCBvbiByZWNvbm5lY3Rpb25cclxuICAgICAgdmFyIHZhbGlkYXRlRWRnZSA9IG9wdHMudmFsaWRhdGVFZGdlOyBcclxuICAgICAgLy8gZnVuY3Rpb24gdG8gYmUgY2FsbGVkIG9uIGludmFsaWQgZWRnZSByZWNvbm5lY3Rpb25cclxuICAgICAgdmFyIGFjdE9uVW5zdWNjZXNzZnVsUmVjb25uZWN0aW9uID0gb3B0cy5hY3RPblVuc3VjY2Vzc2Z1bFJlY29ubmVjdGlvbjtcclxuICAgICAgXHJcbiAgICAgIHZhciBtZW51SXRlbXMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWQ6IGFkZEJlbmRQb2ludEN4dE1lbnVJZCxcclxuICAgICAgICAgIHRpdGxlOiBvcHRzLmFkZEJlbmRNZW51SXRlbVRpdGxlLFxyXG4gICAgICAgICAgY29udGVudDogJ0FkZCBCZW5kIFBvaW50JyxcclxuICAgICAgICAgIHNlbGVjdG9yOiAnZWRnZScsXHJcbiAgICAgICAgICBvbkNsaWNrRnVuY3Rpb246IGN4dEFkZEJlbmRQb2ludEZjblxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWQ6IHJlbW92ZUJlbmRQb2ludEN4dE1lbnVJZCxcclxuICAgICAgICAgIHRpdGxlOiBvcHRzLnJlbW92ZUJlbmRNZW51SXRlbVRpdGxlLFxyXG4gICAgICAgICAgY29udGVudDogJ1JlbW92ZSBCZW5kIFBvaW50JyxcclxuICAgICAgICAgIHNlbGVjdG9yOiAnZWRnZScsXHJcbiAgICAgICAgICBvbkNsaWNrRnVuY3Rpb246IGN4dFJlbW92ZUJlbmRQb2ludEZjblxyXG4gICAgICAgIH1cclxuICAgICAgXTtcclxuICAgICAgXHJcbiAgICAgIGlmKGN5LmNvbnRleHRNZW51cykge1xyXG4gICAgICAgIHZhciBtZW51cyA9IGN5LmNvbnRleHRNZW51cygnZ2V0Jyk7XHJcbiAgICAgICAgLy8gSWYgY29udGV4dCBtZW51cyBpcyBhY3RpdmUganVzdCBhcHBlbmQgbWVudSBpdGVtcyBlbHNlIGFjdGl2YXRlIHRoZSBleHRlbnNpb25cclxuICAgICAgICAvLyB3aXRoIGluaXRpYWwgbWVudSBpdGVtc1xyXG4gICAgICAgIGlmIChtZW51cy5pc0FjdGl2ZSgpKSB7XHJcbiAgICAgICAgICBtZW51cy5hcHBlbmRNZW51SXRlbXMobWVudUl0ZW1zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjeS5jb250ZXh0TWVudXMoe1xyXG4gICAgICAgICAgICBtZW51SXRlbXM6IG1lbnVJdGVtc1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICB2YXIgX3NpemVDYW52YXMgPSBkZWJvdW5jZShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgJGNhbnZhc1xyXG4gICAgICAgICAgLmF0dHIoJ2hlaWdodCcsICRjb250YWluZXIuaGVpZ2h0KCkpXHJcbiAgICAgICAgICAuYXR0cignd2lkdGgnLCAkY29udGFpbmVyLndpZHRoKCkpXHJcbiAgICAgICAgICAuY3NzKHtcclxuICAgICAgICAgICAgJ3Bvc2l0aW9uJzogJ2Fic29sdXRlJyxcclxuICAgICAgICAgICAgJ3RvcCc6IDAsXHJcbiAgICAgICAgICAgICdsZWZ0JzogMCxcclxuICAgICAgICAgICAgJ3otaW5kZXgnOiBvcHRpb25zKCkuekluZGV4XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIDtcclxuXHJcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICB2YXIgY2FudmFzQmIgPSAkY2FudmFzLm9mZnNldCgpO1xyXG4gICAgICAgICAgdmFyIGNvbnRhaW5lckJiID0gJGNvbnRhaW5lci5vZmZzZXQoKTtcclxuXHJcbiAgICAgICAgICAkY2FudmFzXHJcbiAgICAgICAgICAgIC5jc3Moe1xyXG4gICAgICAgICAgICAgICd0b3AnOiAtKGNhbnZhc0JiLnRvcCAtIGNvbnRhaW5lckJiLnRvcCksXHJcbiAgICAgICAgICAgICAgJ2xlZnQnOiAtKGNhbnZhc0JiLmxlZnQgLSBjb250YWluZXJCYi5sZWZ0KVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgO1xyXG5cclxuICAgICAgICAgIC8vIHJlZHJhdyBvbiBjYW52YXMgcmVzaXplXHJcbiAgICAgICAgICBpZihjeSl7XHJcbiAgICAgICAgICAgIHJlZnJlc2hEcmF3cygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sIDApO1xyXG5cclxuICAgICAgfSwgMjUwKTtcclxuXHJcbiAgICAgIGZ1bmN0aW9uIHNpemVDYW52YXMoKSB7XHJcbiAgICAgICAgX3NpemVDYW52YXMoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc2l6ZUNhbnZhcygpO1xyXG5cclxuICAgICAgJCh3aW5kb3cpLmJpbmQoJ3Jlc2l6ZScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBzaXplQ2FudmFzKCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdmFyIGN0eCA9ICRjYW52YXNbMF0uZ2V0Q29udGV4dCgnMmQnKTtcclxuXHJcbiAgICAgIC8vIHdyaXRlIG9wdGlvbnMgdG8gZGF0YVxyXG4gICAgICB2YXIgZGF0YSA9ICRjb250YWluZXIuZGF0YSgnY3llZGdlYmVuZGVkaXRpbmcnKTtcclxuICAgICAgaWYgKGRhdGEgPT0gbnVsbCkge1xyXG4gICAgICAgIGRhdGEgPSB7fTtcclxuICAgICAgfVxyXG4gICAgICBkYXRhLm9wdGlvbnMgPSBvcHRzO1xyXG5cclxuICAgICAgdmFyIG9wdENhY2hlO1xyXG5cclxuICAgICAgZnVuY3Rpb24gb3B0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4gb3B0Q2FjaGUgfHwgKG9wdENhY2hlID0gJGNvbnRhaW5lci5kYXRhKCdjeWVkZ2ViZW5kZWRpdGluZycpLm9wdGlvbnMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyB3ZSB3aWxsIG5lZWQgdG8gY29udmVydCBtb2RlbCBwb3NpdG9ucyB0byByZW5kZXJlZCBwb3NpdGlvbnNcclxuICAgICAgZnVuY3Rpb24gY29udmVydFRvUmVuZGVyZWRQb3NpdGlvbihtb2RlbFBvc2l0aW9uKSB7XHJcbiAgICAgICAgdmFyIHBhbiA9IGN5LnBhbigpO1xyXG4gICAgICAgIHZhciB6b29tID0gY3kuem9vbSgpO1xyXG5cclxuICAgICAgICB2YXIgeCA9IG1vZGVsUG9zaXRpb24ueCAqIHpvb20gKyBwYW4ueDtcclxuICAgICAgICB2YXIgeSA9IG1vZGVsUG9zaXRpb24ueSAqIHpvb20gKyBwYW4ueTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIHg6IHgsXHJcbiAgICAgICAgICB5OiB5XHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgZnVuY3Rpb24gcmVmcmVzaERyYXdzKCkge1xyXG5cclxuICAgICAgICB2YXIgdyA9ICRjb250YWluZXIud2lkdGgoKTtcclxuICAgICAgICB2YXIgaCA9ICRjb250YWluZXIuaGVpZ2h0KCk7XHJcblxyXG4gICAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgdywgaCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYoIGVkZ2VUb0hpZ2hsaWdodEJlbmRzICkge1xyXG4gICAgICAgICAgcmVuZGVyQmVuZFNoYXBlcyhlZGdlVG9IaWdobGlnaHRCZW5kcyk7XHJcbiAgICAgICAgICByZW5kZXJFbmRQb2ludFNoYXBlcyhlZGdlVG9IaWdobGlnaHRCZW5kcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAvLyByZW5kZXIgdGhlIGJlbmQgc2hhcGVzIG9mIHRoZSBnaXZlbiBlZGdlXHJcbiAgICAgIGZ1bmN0aW9uIHJlbmRlckJlbmRTaGFwZXMoZWRnZSkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmKCFlZGdlLmhhc0NsYXNzKCdlZGdlYmVuZGVkaXRpbmctaGFzYmVuZHBvaW50cycpKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHZhciBzZWdwdHMgPSBiZW5kUG9pbnRVdGlsaXRpZXMuZ2V0U2VnbWVudFBvaW50cyhlZGdlKTsvL2VkZ2UuX3ByaXZhdGUucmRhdGEuc2VncHRzO1xyXG4gICAgICAgIHZhciBsZW5ndGggPSBnZXRCZW5kU2hhcGVzTGVuZ3RoKGVkZ2UpICogMC42NTtcclxuICAgICAgICBcclxuICAgICAgICB2YXIgc3JjUG9zID0gZWRnZS5zb3VyY2UoKS5wb3NpdGlvbigpO1xyXG4gICAgICAgIHZhciB0Z3RQb3MgPSBlZGdlLnRhcmdldCgpLnBvc2l0aW9uKCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdmFyIHdlaWdodHMgPSBlZGdlLmRhdGEoJ2N5ZWRnZWJlbmRlZGl0aW5nV2VpZ2h0cycpO1xyXG4gICAgICAgIHZhciBkaXN0YW5jZXMgPSBlZGdlLmRhdGEoJ2N5ZWRnZWJlbmRlZGl0aW5nRGlzdGFuY2VzJyk7XHJcblxyXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IHNlZ3B0cyAmJiBpIDwgc2VncHRzLmxlbmd0aDsgaSA9IGkgKyAyKXtcclxuICAgICAgICAgIHZhciBiZW5kWCA9IHNlZ3B0c1tpXTtcclxuICAgICAgICAgIHZhciBiZW5kWSA9IHNlZ3B0c1tpICsgMV07XHJcblxyXG4gICAgICAgICAgdmFyIG9sZFN0eWxlID0gY3R4LmZpbGxTdHlsZTtcclxuICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBcIiMwMDBcIjsgLy8gYmxhY2tcclxuICAgICAgICAgIHJlbmRlckJlbmRTaGFwZShiZW5kWCwgYmVuZFksIGxlbmd0aCk7XHJcbiAgICAgICAgICBjdHguZmlsbFN0eWxlID0gb2xkU3R5bGU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAvLyByZW5kZXIgYSBiZW5kIHNoYXBlIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnNcclxuICAgICAgZnVuY3Rpb24gcmVuZGVyQmVuZFNoYXBlKGJlbmRYLCBiZW5kWSwgbGVuZ3RoKSB7XHJcbiAgICAgICAgLy8gZ2V0IHRoZSB0b3AgbGVmdCBjb29yZGluYXRlc1xyXG4gICAgICAgIHZhciB0b3BMZWZ0WCA9IGJlbmRYIC0gbGVuZ3RoIC8gMjtcclxuICAgICAgICB2YXIgdG9wTGVmdFkgPSBiZW5kWSAtIGxlbmd0aCAvIDI7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gY29udmVydCB0byByZW5kZXJlZCBwYXJhbWV0ZXJzXHJcbiAgICAgICAgdmFyIHJlbmRlcmVkVG9wTGVmdFBvcyA9IGNvbnZlcnRUb1JlbmRlcmVkUG9zaXRpb24oe3g6IHRvcExlZnRYLCB5OiB0b3BMZWZ0WX0pO1xyXG4gICAgICAgIGxlbmd0aCAqPSBjeS56b29tKCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gcmVuZGVyIGJlbmQgc2hhcGVcclxuICAgICAgICBjdHguYmVnaW5QYXRoKCk7XHJcbiAgICAgICAgY3R4LnJlY3QocmVuZGVyZWRUb3BMZWZ0UG9zLngsIHJlbmRlcmVkVG9wTGVmdFBvcy55LCBsZW5ndGgsIGxlbmd0aCk7XHJcbiAgICAgICAgY3R4LmZpbGwoKTtcclxuICAgICAgICBjdHguY2xvc2VQYXRoKCk7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIC8vIHJlbmRlciB0aGUgZW5kIHBvaW50cyBzaGFwZXMgb2YgdGhlIGdpdmVuIGVkZ2VcclxuICAgICAgZnVuY3Rpb24gcmVuZGVyRW5kUG9pbnRTaGFwZXMoZWRnZSkge1xyXG4gICAgICAgIGlmKCFlZGdlKXtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBlZGdlX3B0cyA9IGJlbmRQb2ludFV0aWxpdGllcy5nZXRTZWdtZW50UG9pbnRzKGVkZ2UpO1xyXG4gICAgICAgIGlmKHR5cGVvZiBlZGdlX3B0cyA9PT0gJ3VuZGVmaW5lZCcpe1xyXG4gICAgICAgICAgZWRnZV9wdHMgPSBbXTtcclxuICAgICAgICB9ICAgICAgIFxyXG4gICAgICAgIHZhciBzb3VyY2VQb3MgPSBlZGdlLnNvdXJjZUVuZHBvaW50KCk7XHJcbiAgICAgICAgdmFyIHRhcmdldFBvcyA9IGVkZ2UudGFyZ2V0RW5kcG9pbnQoKTtcclxuICAgICAgICBlZGdlX3B0cy51bnNoaWZ0KHNvdXJjZVBvcy55KTtcclxuICAgICAgICBlZGdlX3B0cy51bnNoaWZ0KHNvdXJjZVBvcy54KTtcclxuICAgICAgICBlZGdlX3B0cy5wdXNoKHRhcmdldFBvcy54KTtcclxuICAgICAgICBlZGdlX3B0cy5wdXNoKHRhcmdldFBvcy55KTsgXHJcblxyXG4gICAgICAgXHJcbiAgICAgICAgaWYoIWVkZ2VfcHRzKVxyXG4gICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICB2YXIgc3JjID0ge1xyXG4gICAgICAgICAgeDogZWRnZV9wdHNbMF0sXHJcbiAgICAgICAgICB5OiBlZGdlX3B0c1sxXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHRhcmdldCA9IHtcclxuICAgICAgICAgIHg6IGVkZ2VfcHRzW2VkZ2VfcHRzLmxlbmd0aC0yXSxcclxuICAgICAgICAgIHk6IGVkZ2VfcHRzW2VkZ2VfcHRzLmxlbmd0aC0xXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIG5leHRUb1NvdXJjZSA9IHtcclxuICAgICAgICAgIHg6IGVkZ2VfcHRzWzJdLFxyXG4gICAgICAgICAgeTogZWRnZV9wdHNbM11cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG5leHRUb1RhcmdldCA9IHtcclxuICAgICAgICAgIHg6IGVkZ2VfcHRzW2VkZ2VfcHRzLmxlbmd0aC00XSxcclxuICAgICAgICAgIHk6IGVkZ2VfcHRzW2VkZ2VfcHRzLmxlbmd0aC0zXVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbGVuZ3RoID0gZ2V0QmVuZFNoYXBlc0xlbmd0aChlZGdlKSAqIDAuNjU7XHJcblxyXG4gICAgICAgIHZhciBvbGRTdHJva2UgPSBjdHguc3Ryb2tlU3R5bGU7XHJcbiAgICAgICAgdmFyIG9sZFdpZHRoID0gY3R4LmxpbmVXaWR0aDtcclxuICAgICAgICB2YXIgb2xkRmlsbCA9IGN0eC5maWxsU3R5bGU7XHJcblxyXG4gICAgICAgIGN0eC5maWxsU3R5bGUgPSBcIiMwMDBcIjsgLy8gYmxhY2tcclxuICAgICAgICBcclxuICAgICAgICByZW5kZXJFYWNoRW5kUG9pbnRTaGFwZShzcmMsIHRhcmdldCwgbGVuZ3RoLG5leHRUb1NvdXJjZSxuZXh0VG9UYXJnZXQpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IG9sZFN0cm9rZTtcclxuICAgICAgICBjdHguZmlsbFN0eWxlID0gb2xkRmlsbDtcclxuICAgICAgICBjdHgubGluZVdpZHRoID0gb2xkV2lkdGg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZ1bmN0aW9uIHJlbmRlckVhY2hFbmRQb2ludFNoYXBlKHNvdXJjZSwgdGFyZ2V0LCBsZW5ndGgsbmV4dFRvU291cmNlLG5leHRUb1RhcmdldCkge1xyXG4gICAgICAgIC8vIGdldCB0aGUgdG9wIGxlZnQgY29vcmRpbmF0ZXMgb2Ygc291cmNlIGFuZCB0YXJnZXRcclxuICAgICAgICB2YXIgc1RvcExlZnRYID0gc291cmNlLnggLSBsZW5ndGggLyAyO1xyXG4gICAgICAgIHZhciBzVG9wTGVmdFkgPSBzb3VyY2UueSAtIGxlbmd0aCAvIDI7XHJcblxyXG4gICAgICAgIHZhciB0VG9wTGVmdFggPSB0YXJnZXQueCAtIGxlbmd0aCAvIDI7XHJcbiAgICAgICAgdmFyIHRUb3BMZWZ0WSA9IHRhcmdldC55IC0gbGVuZ3RoIC8gMjtcclxuXHJcbiAgICAgICAgdmFyIG5leHRUb1NvdXJjZVggPSBuZXh0VG9Tb3VyY2UueCAtIGxlbmd0aCAvMjtcclxuICAgICAgICB2YXIgbmV4dFRvU291cmNlWSA9IG5leHRUb1NvdXJjZS55IC0gbGVuZ3RoIC8gMjtcclxuXHJcbiAgICAgICAgdmFyIG5leHRUb1RhcmdldFggPSBuZXh0VG9UYXJnZXQueCAtIGxlbmd0aCAvMjtcclxuICAgICAgICB2YXIgbmV4dFRvVGFyZ2V0WSA9IG5leHRUb1RhcmdldC55IC0gbGVuZ3RoIC8yO1xyXG5cclxuXHJcbiAgICAgICAgLy8gY29udmVydCB0byByZW5kZXJlZCBwYXJhbWV0ZXJzXHJcbiAgICAgICAgdmFyIHJlbmRlcmVkU291cmNlUG9zID0gY29udmVydFRvUmVuZGVyZWRQb3NpdGlvbih7eDogc1RvcExlZnRYLCB5OiBzVG9wTGVmdFl9KTtcclxuICAgICAgICB2YXIgcmVuZGVyZWRUYXJnZXRQb3MgPSBjb252ZXJ0VG9SZW5kZXJlZFBvc2l0aW9uKHt4OiB0VG9wTGVmdFgsIHk6IHRUb3BMZWZ0WX0pO1xyXG4gICAgICAgIGxlbmd0aCA9IGxlbmd0aCAqIGN5Lnpvb20oKSAvIDI7XHJcblxyXG4gICAgICAgIHZhciByZW5kZXJlZE5leHRUb1NvdXJjZSA9IGNvbnZlcnRUb1JlbmRlcmVkUG9zaXRpb24oe3g6IG5leHRUb1NvdXJjZVgsIHk6IG5leHRUb1NvdXJjZVl9KTtcclxuICAgICAgICB2YXIgcmVuZGVyZWROZXh0VG9UYXJnZXQgPSBjb252ZXJ0VG9SZW5kZXJlZFBvc2l0aW9uKHt4OiBuZXh0VG9UYXJnZXRYLCB5OiBuZXh0VG9UYXJnZXRZfSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9ob3cgZmFyIHRvIGdvIGZyb20gdGhlIG5vZGUgYWxvbmcgdGhlIGVkZ2VcclxuICAgICAgICB2YXIgZGlzdGFuY2VGcm9tTm9kZSA9IGxlbmd0aDtcclxuXHJcbiAgICAgICAgdmFyIGRpc3RhbmNlU291cmNlID0gTWF0aC5zcXJ0KE1hdGgucG93KHJlbmRlcmVkTmV4dFRvU291cmNlLnggLSByZW5kZXJlZFNvdXJjZVBvcy54LDIpICsgTWF0aC5wb3cocmVuZGVyZWROZXh0VG9Tb3VyY2UueSAtIHJlbmRlcmVkU291cmNlUG9zLnksMikpOyAgICAgICAgXHJcbiAgICAgICAgdmFyIHNvdXJjZUVuZFBvaW50WCA9IHJlbmRlcmVkU291cmNlUG9zLnggKyAoKGRpc3RhbmNlRnJvbU5vZGUvIGRpc3RhbmNlU291cmNlKSogKHJlbmRlcmVkTmV4dFRvU291cmNlLnggLSByZW5kZXJlZFNvdXJjZVBvcy54KSk7XHJcbiAgICAgICAgdmFyIHNvdXJjZUVuZFBvaW50WSA9IHJlbmRlcmVkU291cmNlUG9zLnkgKyAoKGRpc3RhbmNlRnJvbU5vZGUvIGRpc3RhbmNlU291cmNlKSogKHJlbmRlcmVkTmV4dFRvU291cmNlLnkgLSByZW5kZXJlZFNvdXJjZVBvcy55KSk7XHJcblxyXG5cclxuICAgICAgICB2YXIgZGlzdGFuY2VUYXJnZXQgPSBNYXRoLnNxcnQoTWF0aC5wb3cocmVuZGVyZWROZXh0VG9UYXJnZXQueCAtIHJlbmRlcmVkVGFyZ2V0UG9zLngsMikgKyBNYXRoLnBvdyhyZW5kZXJlZE5leHRUb1RhcmdldC55IC0gcmVuZGVyZWRUYXJnZXRQb3MueSwyKSk7ICAgICAgICBcclxuICAgICAgICB2YXIgdGFyZ2V0RW5kUG9pbnRYID0gcmVuZGVyZWRUYXJnZXRQb3MueCArICgoZGlzdGFuY2VGcm9tTm9kZS8gZGlzdGFuY2VUYXJnZXQpKiAocmVuZGVyZWROZXh0VG9UYXJnZXQueCAtIHJlbmRlcmVkVGFyZ2V0UG9zLngpKTtcclxuICAgICAgICB2YXIgdGFyZ2V0RW5kUG9pbnRZID0gcmVuZGVyZWRUYXJnZXRQb3MueSArICgoZGlzdGFuY2VGcm9tTm9kZS8gZGlzdGFuY2VUYXJnZXQpKiAocmVuZGVyZWROZXh0VG9UYXJnZXQueSAtIHJlbmRlcmVkVGFyZ2V0UG9zLnkpKTsgXHJcblxyXG4gICAgICAgIC8vIHJlbmRlciBlbmQgcG9pbnQgc2hhcGUgZm9yIHNvdXJjZSBhbmQgdGFyZ2V0XHJcbiAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xyXG4gICAgICAgIGN0eC5hcmMoc291cmNlRW5kUG9pbnRYICsgbGVuZ3RoLCBzb3VyY2VFbmRQb2ludFkgKyBsZW5ndGgsIGxlbmd0aCwgMCwgMipNYXRoLlBJLCBmYWxzZSk7XHJcbiAgICAgICAgY3R4LmFyYyh0YXJnZXRFbmRQb2ludFggKyBsZW5ndGgsIHRhcmdldEVuZFBvaW50WSArIGxlbmd0aCwgbGVuZ3RoLCAwLCAyKk1hdGguUEksIGZhbHNlKTtcclxuICAgICAgICBjdHguZmlsbCgpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIGRyYXdEaWFtb25kU2hhcGUocmVuZGVyZWRTb3VyY2VQb3MueCwgcmVuZGVyZWRTb3VyY2VQb3MueSwgbGVuZ3RoKTtcclxuICAgICAgICAvLyBkcmF3RGlhbW9uZFNoYXBlKHJlbmRlcmVkVGFyZ2V0UG9zLngsIHJlbmRlcmVkVGFyZ2V0UG9zLnksIGxlbmd0aCk7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGRyYXdEaWFtb25kU2hhcGUodG9wTGVmdFgsIHRvcExlZnRZLCBsZW5ndGgpe1xyXG4gICAgICAgICAgdmFyIGwgPSAobGVuZ3RoKSAvICgzICogNiArIDIpO1xyXG5cclxuICAgICAgICAgIC8vIERyYXcgYWxsIGNvcm5lcnNcclxuICAgICAgICAgIGRyYXdDb3JuZXIodG9wTGVmdFgsIHRvcExlZnRZICsgbGVuZ3RoLzIsIGwsICdsZWZ0Jyk7XHJcbiAgICAgICAgICBkcmF3Q29ybmVyKHRvcExlZnRYICsgbGVuZ3RoLzIsIHRvcExlZnRZLCBsLCAndG9wJyk7XHJcbiAgICAgICAgICBkcmF3Q29ybmVyKHRvcExlZnRYICsgbGVuZ3RoLzIsIHRvcExlZnRZICsgbGVuZ3RoLCBsLCAnYm90dG9tJyk7XHJcbiAgICAgICAgICBkcmF3Q29ybmVyKHRvcExlZnRYICsgbGVuZ3RoLCB0b3BMZWZ0WSArIGxlbmd0aC8yLCBsLCAncmlnaHQnKTtcclxuXHJcbiAgICAgICAgICBkcmF3RGFzaGVkTGluZSh0b3BMZWZ0WCwgdG9wTGVmdFkgKyBsZW5ndGgvMiwgdG9wTGVmdFggKyBsZW5ndGgvMiwgdG9wTGVmdFksIGwpO1xyXG4gICAgICAgICAgZHJhd0Rhc2hlZExpbmUodG9wTGVmdFggKyBsZW5ndGgvMiwgdG9wTGVmdFksIHRvcExlZnRYICsgbGVuZ3RoLCB0b3BMZWZ0WSArIGxlbmd0aC8yLCBsKTtcclxuICAgICAgICAgIGRyYXdEYXNoZWRMaW5lKHRvcExlZnRYICsgbGVuZ3RoLCB0b3BMZWZ0WSArIGxlbmd0aC8yLCB0b3BMZWZ0WCArIGxlbmd0aC8yLCB0b3BMZWZ0WSArIGxlbmd0aCwgbCk7XHJcbiAgICAgICAgICBkcmF3RGFzaGVkTGluZSh0b3BMZWZ0WCArIGxlbmd0aC8yLCB0b3BMZWZ0WSArIGxlbmd0aCwgdG9wTGVmdFgsIHRvcExlZnRZICsgbGVuZ3RoLzIsIGwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gZHJhd0Nvcm5lcih4LCB5LCBsLCBjb3JuZXIpe1xyXG4gICAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xyXG4gICAgICAgICAgY3R4Lm1vdmVUbyh4LCB5KTtcclxuICAgICAgICAgIHN3aXRjaChjb3JuZXIpe1xyXG4gICAgICAgICAgICBjYXNlICdsZWZ0Jzoge1xyXG4gICAgICAgICAgICAgIGN0eC5saW5lVG8oeCArIGwsIHkgLSBsKTtcclxuICAgICAgICAgICAgICBjdHgubGluZVRvKHgsIHkpO1xyXG4gICAgICAgICAgICAgIGN0eC5saW5lVG8oeCArIGwsIHkgKyBsKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICd0b3AnOiB7XHJcbiAgICAgICAgICAgICAgY3R4LmxpbmVUbyh4IC0gbCwgeSArIGwpO1xyXG4gICAgICAgICAgICAgIGN0eC5saW5lVG8oeCwgeSk7XHJcbiAgICAgICAgICAgICAgY3R4LmxpbmVUbyh4ICsgbCwgeSArIGwpO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgJ3JpZ2h0Jzoge1xyXG4gICAgICAgICAgICAgIGN0eC5saW5lVG8oeCAtIGwsIHkgLSBsKTtcclxuICAgICAgICAgICAgICBjdHgubGluZVRvKHgsIHkpO1xyXG4gICAgICAgICAgICAgIGN0eC5saW5lVG8oeCAtIGwsIHkgKyBsKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICdib3R0b20nOiB7XHJcbiAgICAgICAgICAgICAgY3R4LmxpbmVUbyh4ICsgbCwgeSAtIGwpO1xyXG4gICAgICAgICAgICAgIGN0eC5saW5lVG8oeCwgeSk7XHJcbiAgICAgICAgICAgICAgY3R4LmxpbmVUbyh4IC0gbCwgeSAtIGwpO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgJ2RlZmF1bHQnOlxyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGN0eC5zdHJva2UoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGRyYXdEYXNoZWRMaW5lKHgxLCB5MSwgeDIsIHkyLCBsKXtcclxuICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTtcclxuICAgICAgICAgIGN0eC5tb3ZlVG8oeDEsIHkxKTtcclxuICAgICAgICAgIGN0eC5saW5lVG8oeDIsIHkyKTtcclxuICAgICAgICAgIGN0eC5zZXRMaW5lRGFzaChbMipsLGxdKTtcclxuICAgICAgICAgIGN0eC5zdHJva2UoKTtcclxuICAgICAgICAgIGN0eC5zZXRMaW5lRGFzaChbXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBjaGFuZ2VzIGNvbG9yIHRvbmVcclxuICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTU2MDI0OC9wcm9ncmFtbWF0aWNhbGx5LWxpZ2h0ZW4tb3ItZGFya2VuLWEtaGV4LWNvbG9yLW9yLXJnYi1hbmQtYmxlbmQtY29sb3JzXHJcbiAgICAgIGZ1bmN0aW9uIHNoYWRlQmxlbmQocCxjMCxjMSkge1xyXG4gICAgICAgIHZhciBuPXA8MD9wKi0xOnAsdT1NYXRoLnJvdW5kLHc9cGFyc2VJbnQ7XHJcbiAgICAgICAgaWYoYzAubGVuZ3RoPjcpe1xyXG4gICAgICAgICAgdmFyIGY9YzAuc3BsaXQoXCIsXCIpLHQ9KGMxP2MxOnA8MD9cInJnYigwLDAsMClcIjpcInJnYigyNTUsMjU1LDI1NSlcIikuc3BsaXQoXCIsXCIpLFI9dyhmWzBdLnNsaWNlKDQpKSxHPXcoZlsxXSksQj13KGZbMl0pO1xyXG4gICAgICAgICAgcmV0dXJuIFwicmdiKFwiKyh1KCh3KHRbMF0uc2xpY2UoNCkpLVIpKm4pK1IpK1wiLFwiKyh1KCh3KHRbMV0pLUcpKm4pK0cpK1wiLFwiKyh1KCh3KHRbMl0pLUIpKm4pK0IpK1wiKVwiXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICB2YXIgZj13KGMwLnNsaWNlKDEpLDE2KSx0PXcoKGMxP2MxOnA8MD9cIiMwMDAwMDBcIjpcIiNGRkZGRkZcIikuc2xpY2UoMSksMTYpLFIxPWY+PjE2LEcxPWY+PjgmMHgwMEZGLEIxPWYmMHgwMDAwRkY7XHJcbiAgICAgICAgICByZXR1cm4gXCIjXCIrKDB4MTAwMDAwMCsodSgoKHQ+PjE2KS1SMSkqbikrUjEpKjB4MTAwMDArKHUoKCh0Pj44JjB4MDBGRiktRzEpKm4pK0cxKSoweDEwMCsodSgoKHQmMHgwMDAwRkYpLUIxKSpuKStCMSkpLnRvU3RyaW5nKDE2KS5zbGljZSgxKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gZ2V0IHRoZSBsZW5ndGggb2YgYmVuZCBwb2ludHMgdG8gYmUgcmVuZGVyZWRcclxuICAgICAgZnVuY3Rpb24gZ2V0QmVuZFNoYXBlc0xlbmd0aChlZGdlKSB7XHJcbiAgICAgICAgdmFyIGZhY3RvciA9IG9wdGlvbnMoKS5iZW5kU2hhcGVTaXplRmFjdG9yO1xyXG4gICAgICAgIGlmIChwYXJzZUZsb2F0KGVkZ2UuY3NzKCd3aWR0aCcpKSA8PSAyLjUpXHJcbiAgICAgICAgICByZXR1cm4gMi41ICogZmFjdG9yO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuIHBhcnNlRmxvYXQoZWRnZS5jc3MoJ3dpZHRoJykpKmZhY3RvcjtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgLy8gY2hlY2sgaWYgdGhlIHBvaW50IHJlcHJlc2VudGVkIGJ5IHt4LCB5fSBpcyBpbnNpZGUgdGhlIGJlbmQgc2hhcGVcclxuICAgICAgZnVuY3Rpb24gY2hlY2tJZkluc2lkZUJlbmRTaGFwZSh4LCB5LCBsZW5ndGgsIGNlbnRlclgsIGNlbnRlclkpe1xyXG4gICAgICAgIHZhciBtaW5YID0gY2VudGVyWCAtIGxlbmd0aCAvIDI7XHJcbiAgICAgICAgdmFyIG1heFggPSBjZW50ZXJYICsgbGVuZ3RoIC8gMjtcclxuICAgICAgICB2YXIgbWluWSA9IGNlbnRlclkgLSBsZW5ndGggLyAyO1xyXG4gICAgICAgIHZhciBtYXhZID0gY2VudGVyWSArIGxlbmd0aCAvIDI7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdmFyIGluc2lkZSA9ICh4ID49IG1pblggJiYgeCA8PSBtYXhYKSAmJiAoeSA+PSBtaW5ZICYmIHkgPD0gbWF4WSk7XHJcbiAgICAgICAgcmV0dXJuIGluc2lkZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gZ2V0IHRoZSBpbmRleCBvZiBiZW5kIHBvaW50IGNvbnRhaW5pbmcgdGhlIHBvaW50IHJlcHJlc2VudGVkIGJ5IHt4LCB5fVxyXG4gICAgICBmdW5jdGlvbiBnZXRDb250YWluaW5nQmVuZFNoYXBlSW5kZXgoeCwgeSwgZWRnZSkge1xyXG4gICAgICAgIGlmKGVkZ2UuZGF0YSgnY3llZGdlYmVuZGVkaXRpbmdXZWlnaHRzJykgPT0gbnVsbCB8fCBlZGdlLmRhdGEoJ2N5ZWRnZWJlbmRlZGl0aW5nV2VpZ2h0cycpLmxlbmd0aCA9PSAwKXtcclxuICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzZWdwdHMgPSBiZW5kUG9pbnRVdGlsaXRpZXMuZ2V0U2VnbWVudFBvaW50cyhlZGdlKTsvL2VkZ2UuX3ByaXZhdGUucmRhdGEuc2VncHRzO1xyXG4gICAgICAgIHZhciBsZW5ndGggPSBnZXRCZW5kU2hhcGVzTGVuZ3RoKGVkZ2UpO1xyXG5cclxuICAgICAgICBmb3IodmFyIGkgPSAwOyBzZWdwdHMgJiYgaSA8IHNlZ3B0cy5sZW5ndGg7IGkgPSBpICsgMil7XHJcbiAgICAgICAgICB2YXIgYmVuZFggPSBzZWdwdHNbaV07XHJcbiAgICAgICAgICB2YXIgYmVuZFkgPSBzZWdwdHNbaSArIDFdO1xyXG5cclxuICAgICAgICAgIHZhciBpbnNpZGUgPSBjaGVja0lmSW5zaWRlQmVuZFNoYXBlKHgsIHksIGxlbmd0aCwgYmVuZFgsIGJlbmRZKTtcclxuICAgICAgICAgIGlmKGluc2lkZSl7XHJcbiAgICAgICAgICAgIHJldHVybiBpIC8gMjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGZ1bmN0aW9uIGdldENvbnRhaW5pbmdFbmRQb2ludCh4LCB5LCBlZGdlKXtcclxuICAgICAgICB2YXIgbGVuZ3RoID0gZ2V0QmVuZFNoYXBlc0xlbmd0aChlZGdlKTtcclxuICAgICAgICB2YXIgYWxsUHRzID0gZWRnZS5fcHJpdmF0ZS5yc2NyYXRjaC5hbGxwdHM7XHJcbiAgICAgICAgdmFyIHNyYyA9IHtcclxuICAgICAgICAgIHg6IGFsbFB0c1swXSxcclxuICAgICAgICAgIHk6IGFsbFB0c1sxXVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdGFyZ2V0ID0ge1xyXG4gICAgICAgICAgeDogYWxsUHRzW2FsbFB0cy5sZW5ndGgtMl0sXHJcbiAgICAgICAgICB5OiBhbGxQdHNbYWxsUHRzLmxlbmd0aC0xXVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb252ZXJ0VG9SZW5kZXJlZFBvc2l0aW9uKHNyYyk7XHJcbiAgICAgICAgY29udmVydFRvUmVuZGVyZWRQb3NpdGlvbih0YXJnZXQpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIFNvdXJjZTowLCBUYXJnZXQ6MSwgTm9uZTotMVxyXG4gICAgICAgIGlmKGNoZWNrSWZJbnNpZGVCZW5kU2hhcGUoeCwgeSwgbGVuZ3RoLCBzcmMueCwgc3JjLnkpKVxyXG4gICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgZWxzZSBpZihjaGVja0lmSW5zaWRlQmVuZFNoYXBlKHgsIHksIGxlbmd0aCwgdGFyZ2V0LngsIHRhcmdldC55KSlcclxuICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgLy8gc3RvcmUgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIGdlc3R1cmVzIGFuZCBzZXQgdGhlbSB0byBmYWxzZVxyXG4gICAgICBmdW5jdGlvbiBkaXNhYmxlR2VzdHVyZXMoKSB7XHJcbiAgICAgICAgbGFzdFBhbm5pbmdFbmFibGVkID0gY3kucGFubmluZ0VuYWJsZWQoKTtcclxuICAgICAgICBsYXN0Wm9vbWluZ0VuYWJsZWQgPSBjeS56b29taW5nRW5hYmxlZCgpO1xyXG4gICAgICAgIGxhc3RCb3hTZWxlY3Rpb25FbmFibGVkID0gY3kuYm94U2VsZWN0aW9uRW5hYmxlZCgpO1xyXG5cclxuICAgICAgICBjeS56b29taW5nRW5hYmxlZChmYWxzZSlcclxuICAgICAgICAgIC5wYW5uaW5nRW5hYmxlZChmYWxzZSlcclxuICAgICAgICAgIC5ib3hTZWxlY3Rpb25FbmFibGVkKGZhbHNlKTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgLy8gcmVzZXQgdGhlIGdlc3R1cmVzIGJ5IHRoZWlyIGxhdGVzdCBzdGF0dXNcclxuICAgICAgZnVuY3Rpb24gcmVzZXRHZXN0dXJlcygpIHtcclxuICAgICAgICBjeS56b29taW5nRW5hYmxlZChsYXN0Wm9vbWluZ0VuYWJsZWQpXHJcbiAgICAgICAgICAucGFubmluZ0VuYWJsZWQobGFzdFBhbm5pbmdFbmFibGVkKVxyXG4gICAgICAgICAgLmJveFNlbGVjdGlvbkVuYWJsZWQobGFzdEJveFNlbGVjdGlvbkVuYWJsZWQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmdW5jdGlvbiBtb3ZlQmVuZFBvaW50cyhwb3NpdGlvbkRpZmYsIGVkZ2VzKSB7XHJcbiAgICAgICAgICBlZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKCBlZGdlICl7XHJcbiAgICAgICAgICAgICAgdmFyIHByZXZpb3VzQmVuZFBvaW50c1Bvc2l0aW9uID0gYmVuZFBvaW50VXRpbGl0aWVzLmdldFNlZ21lbnRQb2ludHMoZWRnZSk7XHJcbiAgICAgICAgICAgICAgdmFyIG5leHRCZW5kUG9pbnRzUG9zaXRpb24gPSBbXTtcclxuICAgICAgICAgICAgICBpZiAocHJldmlvdXNCZW5kUG9pbnRzUG9zaXRpb24gIT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPHByZXZpb3VzQmVuZFBvaW50c1Bvc2l0aW9uLmxlbmd0aDsgaSs9MilcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBuZXh0QmVuZFBvaW50c1Bvc2l0aW9uLnB1c2goe3g6IHByZXZpb3VzQmVuZFBvaW50c1Bvc2l0aW9uW2ldK3Bvc2l0aW9uRGlmZi54LCB5OiBwcmV2aW91c0JlbmRQb2ludHNQb3NpdGlvbltpKzFdK3Bvc2l0aW9uRGlmZi55fSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlZGdlLmRhdGEoJ2JlbmRQb2ludFBvc2l0aW9ucycsbmV4dEJlbmRQb2ludHNQb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgYmVuZFBvaW50VXRpbGl0aWVzLmluaXRCZW5kUG9pbnRzKG9wdGlvbnMoKS5iZW5kUG9zaXRpb25zRnVuY3Rpb24sIGVkZ2VzKTtcclxuICAgICAgICAgIGN5LnRyaWdnZXIoJ2JlbmRQb2ludE1vdmVtZW50Jyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHsgIFxyXG4gICAgICAgIGxhc3RQYW5uaW5nRW5hYmxlZCA9IGN5LnBhbm5pbmdFbmFibGVkKCk7XHJcbiAgICAgICAgbGFzdFpvb21pbmdFbmFibGVkID0gY3kuem9vbWluZ0VuYWJsZWQoKTtcclxuICAgICAgICBsYXN0Qm94U2VsZWN0aW9uRW5hYmxlZCA9IGN5LmJveFNlbGVjdGlvbkVuYWJsZWQoKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBJbml0aWxpemUgdGhlIGVkZ2VUb0hpZ2hsaWdodEJlbmRzIGFuZCBudW1iZXJPZlNlbGVjdGVkRWRnZXNcclxuICAgICAgICB7XHJcbiAgICAgICAgICB2YXIgc2VsZWN0ZWRFZGdlcyA9IGN5LmVkZ2VzKCc6c2VsZWN0ZWQnKTtcclxuICAgICAgICAgIHZhciBudW1iZXJPZlNlbGVjdGVkRWRnZXMgPSBzZWxlY3RlZEVkZ2VzLmxlbmd0aDtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgaWYgKCBudW1iZXJPZlNlbGVjdGVkRWRnZXMgPT09IDEgKSB7XHJcbiAgICAgICAgICAgIGVkZ2VUb0hpZ2hsaWdodEJlbmRzID0gc2VsZWN0ZWRFZGdlc1swXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgY3kuYmluZCgnem9vbSBwYW4nLCBlWm9vbSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIGlmICggIWVkZ2VUb0hpZ2hsaWdodEJlbmRzICkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIHJlZnJlc2hEcmF3cygpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjeS5vbignZGF0YScsICdlZGdlJywgIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIGlmICggIWVkZ2VUb0hpZ2hsaWdodEJlbmRzICkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIHJlZnJlc2hEcmF3cygpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgY3kub24oJ3Bvc2l0aW9uJywgJ25vZGUnLCBlUG9zaXRpb24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICB2YXIgbm9kZSA9IHRoaXM7XHJcbiAgICAgICAgICBpZihjeS5lZGdlcyhcIjpzZWxlY3RlZFwiKS5sZW5ndGggID09IDEpe1xyXG4gICAgICAgICAgICBjeS5lZGdlcygpLnVuc2VsZWN0KClcclxuICAgICAgICAgIH0gICAgICAgIFxyXG4gICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gZWRnZSB0byBoaWdobGlnaHQgYmVuZHMgb3IgdGhpcyBub2RlIGlzIG5vdCBhbnkgZW5kIG9mIHRoYXQgZWRnZSByZXR1cm4gZGlyZWN0bHlcclxuICAgICAgICAgIGlmICggIWVkZ2VUb0hpZ2hsaWdodEJlbmRzIHx8ICEoIGVkZ2VUb0hpZ2hsaWdodEJlbmRzLmRhdGEoJ3NvdXJjZScpID09PSBub2RlLmlkKCkgXHJcbiAgICAgICAgICAgICAgICAgIHx8IGVkZ2VUb0hpZ2hsaWdodEJlbmRzLmRhdGEoJ3RhcmdldCcpID09PSBub2RlLmlkKCkgKSApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICByZWZyZXNoRHJhd3MoKTsgXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIC8qICAgY3kub24oXCJhZnRlclVuZG9cIiwgZnVuY3Rpb24gKGV2ZW50LCBhY3Rpb25OYW1lLCBhcmdzLCByZXMpIHsgICAgICAgICBcclxuICAgIFxyXG4gICAgICAgICAgaWYoYWN0aW9uTmFtZSA9PSBcImRyYWdcIikge1xyXG4gICAgICAgICAgcmVzLm5vZGVzLmNvbm5lY3RlZEVkZ2VzKCkudW5zZWxlY3QoKTsgICAgICAgICAgXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgIFxyXG4gICAgICAgIH0pOyAqL1xyXG4gICAgICAgIGN5Lm9uKCdzdHlsZScsICdlZGdlLmVkZ2ViZW5kZWRpdGluZy1oYXNiZW5kcG9pbnRzOnNlbGVjdGVkJywgZVN0eWxlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgcmVmcmVzaERyYXdzKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGN5Lm9uKCdyZW1vdmUnLCAnZWRnZScsIGVSZW1vdmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICB2YXIgZWRnZSA9IHRoaXM7XHJcbiAgICAgICAgICBpZiAoZWRnZS5zZWxlY3RlZCgpKSB7XHJcbiAgICAgICAgICAgIG51bWJlck9mU2VsZWN0ZWRFZGdlcyA9IG51bWJlck9mU2VsZWN0ZWRFZGdlcyAtIDE7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjeS5zdGFydEJhdGNoKCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAoZWRnZVRvSGlnaGxpZ2h0QmVuZHMpIHtcclxuICAgICAgICAgICAgICBlZGdlVG9IaWdobGlnaHRCZW5kcy5yZW1vdmVDbGFzcygnY3ktZWRnZS1iZW5kLWVkaXRpbmctaGlnaGxpZ2h0LWJlbmRzJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmIChudW1iZXJPZlNlbGVjdGVkRWRnZXMgPT09IDEpIHtcclxuICAgICAgICAgICAgICB2YXIgc2VsZWN0ZWRFZGdlcyA9IGN5LmVkZ2VzKCc6c2VsZWN0ZWQnKTtcclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAvLyBJZiB1c2VyIHJlbW92ZXMgYWxsIHNlbGVjdGVkIGVkZ2VzIGF0IGEgc2luZ2xlIG9wZXJhdGlvbiB0aGVuIG91ciAnbnVtYmVyT2ZTZWxlY3RlZEVkZ2VzJ1xyXG4gICAgICAgICAgICAgIC8vIG1heSBiZSBtaXNsZWFkaW5nLiBUaGVyZWZvcmUgd2UgbmVlZCB0byBjaGVjayBpZiB0aGUgbnVtYmVyIG9mIGVkZ2VzIHRvIGhpZ2hsaWdodCBpcyByZWFseSAxIGhlcmUuXHJcbiAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkRWRnZXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICBlZGdlVG9IaWdobGlnaHRCZW5kcyA9IHNlbGVjdGVkRWRnZXNbMF07XHJcbiAgICAgICAgICAgICAgICBlZGdlVG9IaWdobGlnaHRCZW5kcy5hZGRDbGFzcygnY3ktZWRnZS1iZW5kLWVkaXRpbmctaGlnaGxpZ2h0LWJlbmRzJyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZWRnZVRvSGlnaGxpZ2h0QmVuZHMgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGVkZ2VUb0hpZ2hsaWdodEJlbmRzID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjeS5lbmRCYXRjaCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmVmcmVzaERyYXdzKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgIGN5Lm9uKCdhZGQnLCAnZWRnZScsIGVBZGQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICB2YXIgZWRnZSA9IHRoaXM7XHJcbiAgICAgICAgICBpZiAoZWRnZS5zZWxlY3RlZCgpKSB7XHJcbiAgICAgICAgICAgIG51bWJlck9mU2VsZWN0ZWRFZGdlcyA9IG51bWJlck9mU2VsZWN0ZWRFZGdlcyArIDE7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjeS5zdGFydEJhdGNoKCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAoZWRnZVRvSGlnaGxpZ2h0QmVuZHMpIHtcclxuICAgICAgICAgICAgICBlZGdlVG9IaWdobGlnaHRCZW5kcy5yZW1vdmVDbGFzcygnY3ktZWRnZS1iZW5kLWVkaXRpbmctaGlnaGxpZ2h0LWJlbmRzJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmIChudW1iZXJPZlNlbGVjdGVkRWRnZXMgPT09IDEpIHtcclxuICAgICAgICAgICAgICBlZGdlVG9IaWdobGlnaHRCZW5kcyA9IGVkZ2U7XHJcbiAgICAgICAgICAgICAgZWRnZVRvSGlnaGxpZ2h0QmVuZHMuYWRkQ2xhc3MoJ2N5LWVkZ2UtYmVuZC1lZGl0aW5nLWhpZ2hsaWdodC1iZW5kcycpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGVkZ2VUb0hpZ2hsaWdodEJlbmRzID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjeS5lbmRCYXRjaCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmVmcmVzaERyYXdzKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY3kub24oJ3NlbGVjdCcsICdlZGdlJywgZVNlbGVjdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIHZhciBlZGdlID0gdGhpcztcclxuXHJcbiAgICAgICAgICBpZihlZGdlLnRhcmdldCgpLmNvbm5lY3RlZEVkZ2VzKCkubGVuZ3RoID09IDAgfHwgZWRnZS5zb3VyY2UoKS5jb25uZWN0ZWRFZGdlcygpLmxlbmd0aCA9PSAwKXtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgXHJcbiAgICAgICAgICBudW1iZXJPZlNlbGVjdGVkRWRnZXMgPSBudW1iZXJPZlNlbGVjdGVkRWRnZXMgKyAxO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICBjeS5zdGFydEJhdGNoKCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgaWYgKGVkZ2VUb0hpZ2hsaWdodEJlbmRzKSB7XHJcbiAgICAgICAgICAgIGVkZ2VUb0hpZ2hsaWdodEJlbmRzLnJlbW92ZUNsYXNzKCdjeS1lZGdlLWJlbmQtZWRpdGluZy1oaWdobGlnaHQtYmVuZHMnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICBpZiAobnVtYmVyT2ZTZWxlY3RlZEVkZ2VzID09PSAxKSB7XHJcbiAgICAgICAgICAgIGVkZ2VUb0hpZ2hsaWdodEJlbmRzID0gZWRnZTtcclxuICAgICAgICAgICAgZWRnZVRvSGlnaGxpZ2h0QmVuZHMuYWRkQ2xhc3MoJ2N5LWVkZ2UtYmVuZC1lZGl0aW5nLWhpZ2hsaWdodC1iZW5kcycpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGVkZ2VUb0hpZ2hsaWdodEJlbmRzID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICBjeS5lbmRCYXRjaCgpO1xyXG4gICAgICAgICAgcmVmcmVzaERyYXdzKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY3kub24oJ3Vuc2VsZWN0JywgJ2VkZ2UnLCBlVW5zZWxlY3QgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBudW1iZXJPZlNlbGVjdGVkRWRnZXMgPSBudW1iZXJPZlNlbGVjdGVkRWRnZXMgLSAxO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgIGN5LnN0YXJ0QmF0Y2goKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICBpZiAoZWRnZVRvSGlnaGxpZ2h0QmVuZHMpIHtcclxuICAgICAgICAgICAgZWRnZVRvSGlnaGxpZ2h0QmVuZHMucmVtb3ZlQ2xhc3MoJ2N5LWVkZ2UtYmVuZC1lZGl0aW5nLWhpZ2hsaWdodC1iZW5kcycpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgIGlmIChudW1iZXJPZlNlbGVjdGVkRWRnZXMgPT09IDEpIHtcclxuICAgICAgICAgICAgdmFyIHNlbGVjdGVkRWRnZXMgPSBjeS5lZGdlcygnOnNlbGVjdGVkJyk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBJZiB1c2VyIHVuc2VsZWN0cyBhbGwgZWRnZXMgYnkgdGFwcGluZyB0byB0aGUgY29yZSBldGMuIHRoZW4gb3VyICdudW1iZXJPZlNlbGVjdGVkRWRnZXMnXHJcbiAgICAgICAgICAgIC8vIG1heSBiZSBtaXNsZWFkaW5nLiBUaGVyZWZvcmUgd2UgbmVlZCB0byBjaGVjayBpZiB0aGUgbnVtYmVyIG9mIGVkZ2VzIHRvIGhpZ2hsaWdodCBpcyByZWFseSAxIGhlcmUuXHJcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZEVkZ2VzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgIGVkZ2VUb0hpZ2hsaWdodEJlbmRzID0gc2VsZWN0ZWRFZGdlc1swXTtcclxuICAgICAgICAgICAgICBlZGdlVG9IaWdobGlnaHRCZW5kcy5hZGRDbGFzcygnY3ktZWRnZS1iZW5kLWVkaXRpbmctaGlnaGxpZ2h0LWJlbmRzJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgZWRnZVRvSGlnaGxpZ2h0QmVuZHMgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBlZGdlVG9IaWdobGlnaHRCZW5kcyA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIFxyXG4gICAgICAgICAgY3kuZW5kQmF0Y2goKTtcclxuICAgICAgICAgIHJlZnJlc2hEcmF3cygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHZhciBtb3ZlZEJlbmRJbmRleDtcclxuICAgICAgICB2YXIgbW92ZWRCZW5kRWRnZTtcclxuICAgICAgICB2YXIgbW92ZUJlbmRQYXJhbTtcclxuICAgICAgICB2YXIgY3JlYXRlQmVuZE9uRHJhZztcclxuICAgICAgICB2YXIgbW92ZWRFbmRQb2ludDtcclxuICAgICAgICB2YXIgZHVtbXlOb2RlO1xyXG4gICAgICAgIHZhciBkZXRhY2hlZE5vZGU7XHJcbiAgICAgICAgdmFyIG5vZGVUb0F0dGFjaDtcclxuICAgICAgICBcclxuICAgICAgICBjeS5vbigndGFwc3RhcnQnLCAnZWRnZScsIGVUYXBTdGFydCA9IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgdmFyIGVkZ2UgPSB0aGlzO1xyXG5cclxuICAgICAgICAgIGlmICghZWRnZVRvSGlnaGxpZ2h0QmVuZHMgfHwgZWRnZVRvSGlnaGxpZ2h0QmVuZHMuaWQoKSAhPT0gZWRnZS5pZCgpKSB7XHJcbiAgICAgICAgICAgIGNyZWF0ZUJlbmRPbkRyYWcgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICBtb3ZlZEJlbmRFZGdlID0gZWRnZTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgbW92ZUJlbmRQYXJhbSA9IHtcclxuICAgICAgICAgICAgZWRnZTogZWRnZSxcclxuICAgICAgICAgICAgd2VpZ2h0czogZWRnZS5kYXRhKCdjeWVkZ2ViZW5kZWRpdGluZ1dlaWdodHMnKSA/IFtdLmNvbmNhdChlZGdlLmRhdGEoJ2N5ZWRnZWJlbmRlZGl0aW5nV2VpZ2h0cycpKSA6IFtdLFxyXG4gICAgICAgICAgICBkaXN0YW5jZXM6IGVkZ2UuZGF0YSgnY3llZGdlYmVuZGVkaXRpbmdEaXN0YW5jZXMnKSA/IFtdLmNvbmNhdChlZGdlLmRhdGEoJ2N5ZWRnZWJlbmRlZGl0aW5nRGlzdGFuY2VzJykpIDogW11cclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIHZhciBjeVBvcyA9IGV2ZW50LnBvc2l0aW9uIHx8IGV2ZW50LmN5UG9zaXRpb247XHJcbiAgICAgICAgICB2YXIgY3lQb3NYID0gY3lQb3MueDtcclxuICAgICAgICAgIHZhciBjeVBvc1kgPSBjeVBvcy55O1xyXG5cclxuICAgICAgICAgIHZhciBpbmRleCA9IGdldENvbnRhaW5pbmdCZW5kU2hhcGVJbmRleChjeVBvc1gsIGN5UG9zWSwgZWRnZSk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIEdldCB3aGljaCBlbmQgcG9pbnQgaGFzIGJlZW4gY2xpY2tlZCAoU291cmNlOjAsIFRhcmdldDoxLCBOb25lOi0xKVxyXG4gICAgICAgICAgdmFyIGVuZFBvaW50ID0gZ2V0Q29udGFpbmluZ0VuZFBvaW50KGN5UG9zWCwgY3lQb3NZLCBlZGdlKTtcclxuXHJcbiAgICAgICAgICBpZihlbmRQb2ludCA9PSAwIHx8IGVuZFBvaW50ID09IDEpe1xyXG4gICAgICAgICAgICBtb3ZlZEVuZFBvaW50ID0gZW5kUG9pbnQ7XHJcbiAgICAgICAgICAgIGRldGFjaGVkTm9kZSA9IChlbmRQb2ludCA9PSAwKSA/IG1vdmVkQmVuZEVkZ2Uuc291cmNlKCkgOiBtb3ZlZEJlbmRFZGdlLnRhcmdldCgpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGRpc2Nvbm5lY3RlZEVuZCA9IChlbmRQb2ludCA9PSAwKSA/ICdzb3VyY2UnIDogJ3RhcmdldCc7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSByZWNvbm5lY3Rpb25VdGlsaXRpZXMuZGlzY29ubmVjdEVkZ2UobW92ZWRCZW5kRWRnZSwgY3ksIGV2ZW50LnJlbmRlcmVkUG9zaXRpb24sIGRpc2Nvbm5lY3RlZEVuZCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBkdW1teU5vZGUgPSByZXN1bHQuZHVtbXlOb2RlO1xyXG4gICAgICAgICAgICBtb3ZlZEJlbmRFZGdlID0gcmVzdWx0LmVkZ2U7XHJcblxyXG4gICAgICAgICAgICBkaXNhYmxlR2VzdHVyZXMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKGluZGV4ICE9IC0xKSB7XHJcbiAgICAgICAgICAgIG1vdmVkQmVuZEluZGV4ID0gaW5kZXg7XHJcbiAgICAgICAgICAgIC8vIG1vdmVkQmVuZEVkZ2UgPSBlZGdlO1xyXG4gICAgICAgICAgICBkaXNhYmxlR2VzdHVyZXMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjcmVhdGVCZW5kT25EcmFnID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBcclxuICAgICAgICBjeS5vbigndGFwZHJhZycsIGVUYXBEcmFnID0gZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICB2YXIgZWRnZSA9IG1vdmVkQmVuZEVkZ2U7XHJcbiAgICAgICAgICBpZihtb3ZlZEJlbmRFZGdlICE9PSB1bmRlZmluZWQgJiYgYmVuZFBvaW50VXRpbGl0aWVzLmlzSWdub3JlZEVkZ2UoZWRnZSkgKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZihjcmVhdGVCZW5kT25EcmFnKSB7XHJcbiAgICAgICAgICAgIHZhciBjeVBvcyA9IGV2ZW50LnBvc2l0aW9uIHx8IGV2ZW50LmN5UG9zaXRpb247XHJcbiAgICAgICAgICAgIGJlbmRQb2ludFV0aWxpdGllcy5hZGRCZW5kUG9pbnQoZWRnZSwgY3lQb3MpO1xyXG4gICAgICAgICAgICBtb3ZlZEJlbmRJbmRleCA9IGdldENvbnRhaW5pbmdCZW5kU2hhcGVJbmRleChjeVBvcy54LCBjeVBvcy55LCBlZGdlKTtcclxuICAgICAgICAgICAgbW92ZWRCZW5kRWRnZSA9IGVkZ2U7XHJcbiAgICAgICAgICAgIGNyZWF0ZUJlbmRPbkRyYWcgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGRpc2FibGVHZXN0dXJlcygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICBpZiAobW92ZWRCZW5kRWRnZSA9PT0gdW5kZWZpbmVkIHx8IChtb3ZlZEJlbmRJbmRleCA9PT0gdW5kZWZpbmVkICYmIG1vdmVkRW5kUG9pbnQgPT09IHVuZGVmaW5lZCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFVwZGF0ZSBlbmQgcG9pbnQgbG9jYXRpb24gKFNvdXJjZTowLCBUYXJnZXQ6MSlcclxuICAgICAgICAgIGlmKG1vdmVkRW5kUG9pbnQgIT0gLTEgJiYgZHVtbXlOb2RlKXtcclxuICAgICAgICAgICAgdmFyIG5ld1BvcyA9IGV2ZW50LnBvc2l0aW9uIHx8IGV2ZW50LmN5UG9zaXRpb247XHJcbiAgICAgICAgICAgIGR1bW15Tm9kZS5wb3NpdGlvbihuZXdQb3MpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gVXBkYXRlIGJlbmQgcG9pbnQgbG9jYXRpb25cclxuICAgICAgICAgIGVsc2UgaWYobW92ZWRCZW5kSW5kZXggIT0gdW5kZWZpbmVkKXsgXHJcbiAgICAgICAgICAgIHZhciB3ZWlnaHRzID0gZWRnZS5kYXRhKCdjeWVkZ2ViZW5kZWRpdGluZ1dlaWdodHMnKTtcclxuICAgICAgICAgICAgdmFyIGRpc3RhbmNlcyA9IGVkZ2UuZGF0YSgnY3llZGdlYmVuZGVkaXRpbmdEaXN0YW5jZXMnKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciByZWxhdGl2ZUJlbmRQb3NpdGlvbiA9IGJlbmRQb2ludFV0aWxpdGllcy5jb252ZXJ0VG9SZWxhdGl2ZUJlbmRQb3NpdGlvbihlZGdlLCBldmVudC5wb3NpdGlvbiB8fCBldmVudC5jeVBvc2l0aW9uKTtcclxuICAgICAgICAgICAgd2VpZ2h0c1ttb3ZlZEJlbmRJbmRleF0gPSByZWxhdGl2ZUJlbmRQb3NpdGlvbi53ZWlnaHQ7XHJcbiAgICAgICAgICAgIGRpc3RhbmNlc1ttb3ZlZEJlbmRJbmRleF0gPSByZWxhdGl2ZUJlbmRQb3NpdGlvbi5kaXN0YW5jZTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGVkZ2UuZGF0YSgnY3llZGdlYmVuZGVkaXRpbmdXZWlnaHRzJywgd2VpZ2h0cyk7XHJcbiAgICAgICAgICAgIGVkZ2UuZGF0YSgnY3llZGdlYmVuZGVkaXRpbmdEaXN0YW5jZXMnLCBkaXN0YW5jZXMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICBpZihldmVudC50YXJnZXQgJiYgZXZlbnQudGFyZ2V0WzBdICYmIGV2ZW50LnRhcmdldC5pc05vZGUoKSl7XHJcbiAgICAgICAgICAgIG5vZGVUb0F0dGFjaCA9IGV2ZW50LnRhcmdldDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgIFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGN5Lm9uKCd0YXBlbmQnLCBlVGFwRW5kID0gZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICB2YXIgZWRnZSA9IG1vdmVkQmVuZEVkZ2U7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIGlmKCBlZGdlICE9PSB1bmRlZmluZWQgKSB7XHJcbiAgICAgICAgICAgIGlmKCBtb3ZlZEJlbmRJbmRleCAhPSB1bmRlZmluZWQgKSB7XHJcbiAgICAgICAgICAgICAgdmFyIHN0YXJ0WCA9IGVkZ2Uuc291cmNlKCkucG9zaXRpb24oJ3gnKTtcclxuICAgICAgICAgICAgICB2YXIgc3RhcnRZID0gZWRnZS5zb3VyY2UoKS5wb3NpdGlvbigneScpO1xyXG4gICAgICAgICAgICAgIHZhciBlbmRYID0gZWRnZS50YXJnZXQoKS5wb3NpdGlvbigneCcpO1xyXG4gICAgICAgICAgICAgIHZhciBlbmRZID0gZWRnZS50YXJnZXQoKS5wb3NpdGlvbigneScpO1xyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIHZhciBzZWdQdHMgPSBiZW5kUG9pbnRVdGlsaXRpZXMuZ2V0U2VnbWVudFBvaW50cyhlZGdlKTtcclxuICAgICAgICAgICAgICB2YXIgYWxsUHRzID0gW3N0YXJ0WCwgc3RhcnRZXS5jb25jYXQoc2VnUHRzKS5jb25jYXQoW2VuZFgsIGVuZFldKTtcclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICB2YXIgcG9pbnRJbmRleCA9IG1vdmVkQmVuZEluZGV4ICsgMTtcclxuICAgICAgICAgICAgICB2YXIgcHJlSW5kZXggPSBwb2ludEluZGV4IC0gMTtcclxuICAgICAgICAgICAgICB2YXIgcG9zSW5kZXggPSBwb2ludEluZGV4ICsgMTtcclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICB2YXIgcG9pbnQgPSB7XHJcbiAgICAgICAgICAgICAgICB4OiBhbGxQdHNbMiAqIHBvaW50SW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgeTogYWxsUHRzWzIgKiBwb2ludEluZGV4ICsgMV1cclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIHZhciBwcmVQb2ludCA9IHtcclxuICAgICAgICAgICAgICAgIHg6IGFsbFB0c1syICogcHJlSW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgeTogYWxsUHRzWzIgKiBwcmVJbmRleCArIDFdXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICB2YXIgcG9zUG9pbnQgPSB7XHJcbiAgICAgICAgICAgICAgICB4OiBhbGxQdHNbMiAqIHBvc0luZGV4XSxcclxuICAgICAgICAgICAgICAgIHk6IGFsbFB0c1syICogcG9zSW5kZXggKyAxXVxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgdmFyIG5lYXJUb0xpbmU7XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgaWYoICggcG9pbnQueCA9PT0gcHJlUG9pbnQueCAmJiBwb2ludC55ID09PSBwcmVQb2ludC55ICkgfHwgKCBwb2ludC54ID09PSBwcmVQb2ludC54ICYmIHBvaW50LnkgPT09IHByZVBvaW50LnkgKSApIHtcclxuICAgICAgICAgICAgICAgIG5lYXJUb0xpbmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciBtMSA9ICggcHJlUG9pbnQueSAtIHBvc1BvaW50LnkgKSAvICggcHJlUG9pbnQueCAtIHBvc1BvaW50LnggKTtcclxuICAgICAgICAgICAgICAgIHZhciBtMiA9IC0xIC8gbTE7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIHNyY1RndFBvaW50c0FuZFRhbmdlbnRzID0ge1xyXG4gICAgICAgICAgICAgICAgICBzcmNQb2ludDogcHJlUG9pbnQsXHJcbiAgICAgICAgICAgICAgICAgIHRndFBvaW50OiBwb3NQb2ludCxcclxuICAgICAgICAgICAgICAgICAgbTE6IG0xLFxyXG4gICAgICAgICAgICAgICAgICBtMjogbTJcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgLy9nZXQgdGhlIGludGVyc2VjdGlvbiBvZiB0aGUgY3VycmVudCBzZWdtZW50IHdpdGggdGhlIG5ldyBiZW5kIHBvaW50XHJcbiAgICAgICAgICAgICAgICB2YXIgY3VycmVudEludGVyc2VjdGlvbiA9IGJlbmRQb2ludFV0aWxpdGllcy5nZXRJbnRlcnNlY3Rpb24oZWRnZSwgcG9pbnQsIHNyY1RndFBvaW50c0FuZFRhbmdlbnRzKTtcclxuICAgICAgICAgICAgICAgIHZhciBkaXN0ID0gTWF0aC5zcXJ0KCBNYXRoLnBvdyggKHBvaW50LnggLSBjdXJyZW50SW50ZXJzZWN0aW9uLngpLCAyICkgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICsgTWF0aC5wb3coIChwb2ludC55IC0gY3VycmVudEludGVyc2VjdGlvbi55KSwgMiApKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy8gdmFyIGxlbmd0aCA9IE1hdGguc3FydCggTWF0aC5wb3coIChwb3NQb2ludC54IC0gcHJlUG9pbnQueCksIDIgKSBcclxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgKyBNYXRoLnBvdyggKHBvc1BvaW50LnkgLSBwcmVQb2ludC55KSwgMiApKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYoIGRpc3QgIDwgb3B0aW9ucygpLmJlbmRSZW1vdmFsU2Vuc2l0aXZpdHkgKSB7XHJcbiAgICAgICAgICAgICAgICAgIG5lYXJUb0xpbmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIGlmKCBuZWFyVG9MaW5lIClcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBiZW5kUG9pbnRVdGlsaXRpZXMucmVtb3ZlQmVuZFBvaW50KGVkZ2UsIG1vdmVkQmVuZEluZGV4KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZihkdW1teU5vZGUgIT0gdW5kZWZpbmVkICYmIChtb3ZlZEVuZFBvaW50ID09IDAgfHwgbW92ZWRFbmRQb2ludCA9PSAxKSApe1xyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIHZhciBuZXdOb2RlID0gZGV0YWNoZWROb2RlO1xyXG4gICAgICAgICAgICAgIHZhciBpc1ZhbGlkID0gJ3ZhbGlkJztcclxuICAgICAgICAgICAgICB2YXIgbG9jYXRpb24gPSAobW92ZWRFbmRQb2ludCA9PSAwKSA/ICdzb3VyY2UnIDogJ3RhcmdldCc7XHJcblxyXG4gICAgICAgICAgICAgIC8vIHZhbGlkYXRlIGVkZ2UgcmVjb25uZWN0aW9uXHJcbiAgICAgICAgICAgICAgaWYobm9kZVRvQXR0YWNoKXtcclxuICAgICAgICAgICAgICAgIHZhciBuZXdTb3VyY2UgPSAobW92ZWRFbmRQb2ludCA9PSAwKSA/IG5vZGVUb0F0dGFjaCA6IGVkZ2Uuc291cmNlKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgbmV3VGFyZ2V0ID0gKG1vdmVkRW5kUG9pbnQgPT0gMSkgPyBub2RlVG9BdHRhY2ggOiBlZGdlLnRhcmdldCgpO1xyXG4gICAgICAgICAgICAgICAgaWYodHlwZW9mIHZhbGlkYXRlRWRnZSA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgICAgICAgICAgICBpc1ZhbGlkID0gdmFsaWRhdGVFZGdlKGVkZ2UsIG5ld1NvdXJjZSwgbmV3VGFyZ2V0KTtcclxuICAgICAgICAgICAgICAgIG5ld05vZGUgPSAoaXNWYWxpZCA9PT0gJ3ZhbGlkJykgPyBub2RlVG9BdHRhY2ggOiBkZXRhY2hlZE5vZGU7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICB2YXIgbmV3U291cmNlID0gKG1vdmVkRW5kUG9pbnQgPT0gMCkgPyBuZXdOb2RlIDogZWRnZS5zb3VyY2UoKTtcclxuICAgICAgICAgICAgICB2YXIgbmV3VGFyZ2V0ID0gKG1vdmVkRW5kUG9pbnQgPT0gMSkgPyBuZXdOb2RlIDogZWRnZS50YXJnZXQoKTtcclxuICAgICAgICAgICAgICBlZGdlID0gcmVjb25uZWN0aW9uVXRpbGl0aWVzLmNvbm5lY3RFZGdlKGVkZ2UsIGRldGFjaGVkTm9kZSwgbG9jYXRpb24pO1xyXG5cclxuICAgICAgICAgICAgICBpZihkZXRhY2hlZE5vZGUuaWQoKSAhPT0gbmV3Tm9kZS5pZCgpKXtcclxuICAgICAgICAgICAgICAgIC8vIHVzZSBnaXZlbiBoYW5kbGVSZWNvbm5lY3RFZGdlIGZ1bmN0aW9uIFxyXG4gICAgICAgICAgICAgICAgaWYodHlwZW9mIGhhbmRsZVJlY29ubmVjdEVkZ2UgPT09ICdmdW5jdGlvbicpe1xyXG4gICAgICAgICAgICAgICAgICB2YXIgcmVjb25uZWN0ZWRFZGdlID0gaGFuZGxlUmVjb25uZWN0RWRnZShuZXdTb3VyY2UuaWQoKSwgbmV3VGFyZ2V0LmlkKCksIGVkZ2UuZGF0YSgpKTtcclxuICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgIGlmKHJlY29ubmVjdGVkRWRnZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVjb25uZWN0aW9uVXRpbGl0aWVzLmNvcHlFZGdlKGVkZ2UsIHJlY29ubmVjdGVkRWRnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYmVuZFBvaW50VXRpbGl0aWVzLmluaXRCZW5kUG9pbnRzKG9wdGlvbnMoKS5iZW5kUG9zaXRpb25zRnVuY3Rpb24sIFtyZWNvbm5lY3RlZEVkZ2VdKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgaWYocmVjb25uZWN0ZWRFZGdlICYmIG9wdGlvbnMoKS51bmRvYWJsZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmFtcyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgIG5ld0VkZ2U6IHJlY29ubmVjdGVkRWRnZSxcclxuICAgICAgICAgICAgICAgICAgICAgIG9sZEVkZ2U6IGVkZ2VcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGN5LnVuZG9SZWRvKCkuZG8oJ3JlbW92ZVJlY29ubmVjdGVkRWRnZScsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWRnZSA9IHJlY29ubmVjdGVkRWRnZTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBlbHNlIGlmKHJlY29ubmVjdGVkRWRnZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgY3kucmVtb3ZlKGVkZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVkZ2UgPSByZWNvbm5lY3RlZEVkZ2U7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICAgIHZhciBsb2MgPSAobW92ZWRFbmRQb2ludCA9PSAwKSA/IHtzb3VyY2U6IG5ld05vZGUuaWQoKX0gOiB7dGFyZ2V0OiBuZXdOb2RlLmlkKCl9O1xyXG4gICAgICAgICAgICAgICAgICB2YXIgb2xkTG9jID0gKG1vdmVkRW5kUG9pbnQgPT0gMCkgPyB7c291cmNlOiBkZXRhY2hlZE5vZGUuaWQoKX0gOiB7dGFyZ2V0OiBkZXRhY2hlZE5vZGUuaWQoKX07XHJcbiAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICBpZihvcHRpb25zKCkudW5kb2FibGUgJiYgbmV3Tm9kZS5pZCgpICE9PSBkZXRhY2hlZE5vZGUuaWQoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwYXJhbSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgIGVkZ2U6IGVkZ2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjogbG9jLFxyXG4gICAgICAgICAgICAgICAgICAgICAgb2xkTG9jOiBvbGRMb2NcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBjeS51bmRvUmVkbygpLmRvKCdyZWNvbm5lY3RFZGdlJywgcGFyYW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGVkZ2UgPSByZXN1bHQuZWRnZTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSAgXHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAvLyBpbnZhbGlkIGVkZ2UgcmVjb25uZWN0aW9uIGNhbGxiYWNrXHJcbiAgICAgICAgICAgICAgaWYoaXNWYWxpZCAhPT0gJ3ZhbGlkJyAmJiB0eXBlb2YgYWN0T25VbnN1Y2Nlc3NmdWxSZWNvbm5lY3Rpb24gPT09ICdmdW5jdGlvbicpe1xyXG4gICAgICAgICAgICAgICAgYWN0T25VbnN1Y2Nlc3NmdWxSZWNvbm5lY3Rpb24oKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWRnZS51bnNlbGVjdCgpO1xyXG4gICAgICAgICAgICAgIGN5LnJlbW92ZShkdW1teU5vZGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIGlmIChlZGdlICE9PSB1bmRlZmluZWQgJiYgbW92ZUJlbmRQYXJhbSAhPT0gdW5kZWZpbmVkICYmIGVkZ2UuZGF0YSgnY3llZGdlYmVuZGVkaXRpbmdXZWlnaHRzJylcclxuICAgICAgICAgICYmIGVkZ2UuZGF0YSgnY3llZGdlYmVuZGVkaXRpbmdXZWlnaHRzJykudG9TdHJpbmcoKSAhPSBtb3ZlQmVuZFBhcmFtLndlaWdodHMudG9TdHJpbmcoKSkge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYob3B0aW9ucygpLnVuZG9hYmxlKSB7XHJcbiAgICAgICAgICAgICAgY3kudW5kb1JlZG8oKS5kbygnY2hhbmdlQmVuZFBvaW50cycsIG1vdmVCZW5kUGFyYW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIG1vdmVkQmVuZEluZGV4ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgbW92ZWRCZW5kRWRnZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIG1vdmVCZW5kUGFyYW0gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICBjcmVhdGVCZW5kT25EcmFnID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgbW92ZWRFbmRQb2ludCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIGR1bW15Tm9kZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIGRldGFjaGVkTm9kZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIG5vZGVUb0F0dGFjaCA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgICByZXNldEdlc3R1cmVzKCk7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmVmcmVzaERyYXdzKCl9LCA1MCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vVmFyaWFibGVzIHVzZWQgZm9yIHN0YXJ0aW5nIGFuZCBlbmRpbmcgdGhlIG1vdmVtZW50IG9mIGJlbmQgcG9pbnRzIHdpdGggYXJyb3dzXHJcbiAgICAgICAgdmFyIG1vdmVwYXJhbTtcclxuICAgICAgICB2YXIgZmlyc3RCZW5kUG9pbnQ7XHJcbiAgICAgICAgdmFyIGVkZ2VDb250YWluaW5nRmlyc3RCZW5kUG9pbnQ7XHJcbiAgICAgICAgdmFyIGZpcnN0QmVuZFBvaW50Rm91bmQ7XHJcbiAgICAgICAgY3kub24oXCJlZGdlYmVuZGVkaXRpbmcubW92ZXN0YXJ0XCIsIGZ1bmN0aW9uIChlLCBlZGdlcykge1xyXG4gICAgICAgICAgICBmaXJzdEJlbmRQb2ludEZvdW5kID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmIChlZGdlc1swXSAhPSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGVkZ2VzLmZvckVhY2goZnVuY3Rpb24oIGVkZ2UgKXtcclxuICAgICAgICAgICAgICAgICAgaWYgKGJlbmRQb2ludFV0aWxpdGllcy5nZXRTZWdtZW50UG9pbnRzKGVkZ2UpICE9IHVuZGVmaW5lZCAmJiAhZmlyc3RCZW5kUG9pbnRGb3VuZClcclxuICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgZmlyc3RCZW5kUG9pbnQgPSB7IHg6IGJlbmRQb2ludFV0aWxpdGllcy5nZXRTZWdtZW50UG9pbnRzKGVkZ2UpWzBdLCB5OiBiZW5kUG9pbnRVdGlsaXRpZXMuZ2V0U2VnbWVudFBvaW50cyhlZGdlKVsxXX07XHJcbiAgICAgICAgICAgICAgICAgICAgICBtb3ZlcGFyYW0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RUaW1lOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0QmVuZFBvaW50UG9zaXRpb246IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogZmlyc3RCZW5kUG9pbnQueCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogZmlyc3RCZW5kUG9pbnQueVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZWRnZXM6IGVkZ2VzXHJcbiAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgZWRnZUNvbnRhaW5pbmdGaXJzdEJlbmRQb2ludCA9IGVkZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICBmaXJzdEJlbmRQb2ludEZvdW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY3kub24oXCJlZGdlYmVuZGVkaXRpbmcubW92ZWVuZFwiLCBmdW5jdGlvbiAoZSwgZWRnZXMpIHtcclxuICAgICAgICAgICAgaWYgKG1vdmVwYXJhbSAhPSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBpbml0aWFsUG9zID0gbW92ZXBhcmFtLmZpcnN0QmVuZFBvaW50UG9zaXRpb247XHJcbiAgICAgICAgICAgICAgICB2YXIgbW92ZWRGaXJzdEJlbmRQb2ludCA9IHtcclxuICAgICAgICAgICAgICAgICAgICB4OiBiZW5kUG9pbnRVdGlsaXRpZXMuZ2V0U2VnbWVudFBvaW50cyhlZGdlQ29udGFpbmluZ0ZpcnN0QmVuZFBvaW50KVswXSxcclxuICAgICAgICAgICAgICAgICAgICB5OiBiZW5kUG9pbnRVdGlsaXRpZXMuZ2V0U2VnbWVudFBvaW50cyhlZGdlQ29udGFpbmluZ0ZpcnN0QmVuZFBvaW50KVsxXVxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgbW92ZXBhcmFtLnBvc2l0aW9uRGlmZiA9IHtcclxuICAgICAgICAgICAgICAgICAgICB4OiAtbW92ZWRGaXJzdEJlbmRQb2ludC54ICsgaW5pdGlhbFBvcy54LFxyXG4gICAgICAgICAgICAgICAgICAgIHk6IC1tb3ZlZEZpcnN0QmVuZFBvaW50LnkgKyBpbml0aWFsUG9zLnlcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBkZWxldGUgbW92ZXBhcmFtLmZpcnN0QmVuZFBvaW50UG9zaXRpb247XHJcblxyXG4gICAgICAgICAgICAgICAgaWYob3B0aW9ucygpLnVuZG9hYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3kudW5kb1JlZG8oKS5kbyhcIm1vdmVCZW5kUG9pbnRzXCIsIG1vdmVwYXJhbSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbW92ZXBhcmFtID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGN5Lm9uKCdjeHR0YXAnLCAnZWRnZScsIGVDeHRUYXAgPSBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgIHZhciBlZGdlID0gdGhpcztcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgdmFyIG1lbnVzID0gY3kuY29udGV4dE1lbnVzKCdnZXQnKTsgLy8gZ2V0IGNvbnRleHQgbWVudXMgaW5zdGFuY2VcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgaWYoIWVkZ2VUb0hpZ2hsaWdodEJlbmRzIHx8IGVkZ2VUb0hpZ2hsaWdodEJlbmRzLmlkKCkgIT0gZWRnZS5pZCgpIHx8IGJlbmRQb2ludFV0aWxpdGllcy5pc0lnbm9yZWRFZGdlKGVkZ2UpKSB7XHJcbiAgICAgICAgICAgIG1lbnVzLmhpZGVNZW51SXRlbShyZW1vdmVCZW5kUG9pbnRDeHRNZW51SWQpO1xyXG4gICAgICAgICAgICBtZW51cy5oaWRlTWVudUl0ZW0oYWRkQmVuZFBvaW50Q3h0TWVudUlkKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHZhciBjeVBvcyA9IGV2ZW50LnBvc2l0aW9uIHx8IGV2ZW50LmN5UG9zaXRpb247XHJcbiAgICAgICAgICB2YXIgc2VsZWN0ZWRCZW5kSW5kZXggPSBnZXRDb250YWluaW5nQmVuZFNoYXBlSW5kZXgoY3lQb3MueCwgY3lQb3MueSwgZWRnZSk7XHJcbiAgICAgICAgICBpZiAoc2VsZWN0ZWRCZW5kSW5kZXggPT0gLTEpIHtcclxuICAgICAgICAgICAgbWVudXMuaGlkZU1lbnVJdGVtKHJlbW92ZUJlbmRQb2ludEN4dE1lbnVJZCk7XHJcbiAgICAgICAgICAgIG1lbnVzLnNob3dNZW51SXRlbShhZGRCZW5kUG9pbnRDeHRNZW51SWQpO1xyXG4gICAgICAgICAgICBiZW5kUG9pbnRVdGlsaXRpZXMuY3VycmVudEN0eFBvcyA9IGN5UG9zO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1lbnVzLmhpZGVNZW51SXRlbShhZGRCZW5kUG9pbnRDeHRNZW51SWQpO1xyXG4gICAgICAgICAgICBtZW51cy5zaG93TWVudUl0ZW0ocmVtb3ZlQmVuZFBvaW50Q3h0TWVudUlkKTtcclxuICAgICAgICAgICAgYmVuZFBvaW50VXRpbGl0aWVzLmN1cnJlbnRCZW5kSW5kZXggPSBzZWxlY3RlZEJlbmRJbmRleDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBiZW5kUG9pbnRVdGlsaXRpZXMuY3VycmVudEN0eEVkZ2UgPSBlZGdlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGN5Lm9uKCdjeWVkZ2ViZW5kZWRpdGluZy5jaGFuZ2VCZW5kUG9pbnRzJywgJ2VkZ2UnLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgIHZhciBlZGdlID0gdGhpcztcclxuICAgICAgICAgIGN5LnN0YXJ0QmF0Y2goKTtcclxuICAgICAgICAgIGN5LmVkZ2VzKCkudW5zZWxlY3QoKTsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgY3kudHJpZ2dlcignYmVuZFBvaW50TW92ZW1lbnQnKTtcclxuICAgICAgICAgIGN5LmVuZEJhdGNoKCk7XHJcbiAgICAgICAgICByZWZyZXNoRHJhd3MoKTtcclxuICAgICAgICAgIGVkZ2Uuc2VsZWN0KCk7ICAgXHJcbiAgICAgICAgICBcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIHNlbGVjdGVkRWRnZXM7XHJcbiAgICAgIHZhciBiZW5kUG9pbnRzTW92aW5nID0gZmFsc2U7XHJcblxyXG4gICAgICBmdW5jdGlvbiBrZXlEb3duKGUpIHtcclxuXHJcbiAgICAgICAgICB2YXIgc2hvdWxkTW92ZSA9IHR5cGVvZiBvcHRpb25zKCkubW92ZVNlbGVjdGVkQmVuZFBvaW50c09uS2V5RXZlbnRzID09PSAnZnVuY3Rpb24nXHJcbiAgICAgICAgICAgICAgPyBvcHRpb25zKCkubW92ZVNlbGVjdGVkQmVuZFBvaW50c09uS2V5RXZlbnRzKCkgOiBvcHRpb25zKCkubW92ZVNlbGVjdGVkQmVuZFBvaW50c09uS2V5RXZlbnRzO1xyXG5cclxuICAgICAgICAgIGlmICghc2hvdWxkTW92ZSkge1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvL0NoZWNrcyBpZiB0aGUgdGFnbmFtZSBpcyB0ZXh0YXJlYSBvciBpbnB1dFxyXG4gICAgICAgICAgdmFyIHRuID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudC50YWdOYW1lO1xyXG4gICAgICAgICAgaWYgKHRuICE9IFwiVEVYVEFSRUFcIiAmJiB0biAhPSBcIklOUFVUXCIpXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgc3dpdGNoKGUua2V5Q29kZSl7XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgMzc6IGNhc2UgMzk6IGNhc2UgMzg6ICBjYXNlIDQwOiAvLyBBcnJvdyBrZXlzXHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgMzI6IGUucHJldmVudERlZmF1bHQoKTsgYnJlYWs7IC8vIFNwYWNlXHJcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrOyAvLyBkbyBub3QgYmxvY2sgb3RoZXIga2V5c1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICAgIGlmIChlLmtleUNvZGUgPCAnMzcnIHx8IGUua2V5Q29kZSA+ICc0MCcpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgLy9DaGVja3MgaWYgb25seSBlZGdlcyBhcmUgc2VsZWN0ZWQgKG5vdCBhbnkgbm9kZSkgYW5kIGlmIG9ubHkgMSBlZGdlIGlzIHNlbGVjdGVkXHJcbiAgICAgICAgICAgICAgLy9JZiB0aGUgc2Vjb25kIGNoZWNraW5nIGlzIHJlbW92ZWQgdGhlIGJlbmQgcG9pbnRzIG9mIG11bHRpcGxlIGVkZ2VzIHdvdWxkIG1vdmVcclxuICAgICAgICAgICAgICBpZiAoY3kuZWRnZXMoXCI6c2VsZWN0ZWRcIikubGVuZ3RoICE9IGN5LmVsZW1lbnRzKFwiOnNlbGVjdGVkXCIpLmxlbmd0aCB8fCBjeS5lZGdlcyhcIjpzZWxlY3RlZFwiKS5sZW5ndGggIT0gMSlcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBpZiAoIWJlbmRQb2ludHNNb3ZpbmcpXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZEVkZ2VzID0gY3kuZWRnZXMoJzpzZWxlY3RlZCcpO1xyXG4gICAgICAgICAgICAgICAgICBjeS50cmlnZ2VyKFwiZWRnZWJlbmRlZGl0aW5nLm1vdmVzdGFydFwiLCBbc2VsZWN0ZWRFZGdlc10pO1xyXG4gICAgICAgICAgICAgICAgICBiZW5kUG9pbnRzTW92aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKGUuYWx0S2V5ICYmIGUud2hpY2ggPT0gJzM4Jykge1xyXG4gICAgICAgICAgICAgICAgICAvLyB1cCBhcnJvdyBhbmQgYWx0XHJcbiAgICAgICAgICAgICAgICAgIG1vdmVCZW5kUG9pbnRzICh7eDowLCB5Oi0xfSxzZWxlY3RlZEVkZ2VzKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSBpZiAoZS5hbHRLZXkgJiYgZS53aGljaCA9PSAnNDAnKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIGRvd24gYXJyb3cgYW5kIGFsdFxyXG4gICAgICAgICAgICAgICAgICBtb3ZlQmVuZFBvaW50cyAoe3g6MCwgeToxfSxzZWxlY3RlZEVkZ2VzKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSBpZiAoZS5hbHRLZXkgJiYgZS53aGljaCA9PSAnMzcnKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIGxlZnQgYXJyb3cgYW5kIGFsdFxyXG4gICAgICAgICAgICAgICAgICBtb3ZlQmVuZFBvaW50cyAoe3g6LTEsIHk6MH0sc2VsZWN0ZWRFZGdlcyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKGUuYWx0S2V5ICYmIGUud2hpY2ggPT0gJzM5Jykge1xyXG4gICAgICAgICAgICAgICAgICAvLyByaWdodCBhcnJvdyBhbmQgYWx0XHJcbiAgICAgICAgICAgICAgICAgIG1vdmVCZW5kUG9pbnRzICh7eDoxLCB5OjB9LHNlbGVjdGVkRWRnZXMpO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgZWxzZSBpZiAoZS5zaGlmdEtleSAmJiBlLndoaWNoID09ICczOCcpIHtcclxuICAgICAgICAgICAgICAgICAgLy8gdXAgYXJyb3cgYW5kIHNoaWZ0XHJcbiAgICAgICAgICAgICAgICAgIG1vdmVCZW5kUG9pbnRzICh7eDowLCB5Oi0xMH0sc2VsZWN0ZWRFZGdlcyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKGUuc2hpZnRLZXkgJiYgZS53aGljaCA9PSAnNDAnKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIGRvd24gYXJyb3cgYW5kIHNoaWZ0XHJcbiAgICAgICAgICAgICAgICAgIG1vdmVCZW5kUG9pbnRzICh7eDowLCB5OjEwfSxzZWxlY3RlZEVkZ2VzKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSBpZiAoZS5zaGlmdEtleSAmJiBlLndoaWNoID09ICczNycpIHtcclxuICAgICAgICAgICAgICAgICAgLy8gbGVmdCBhcnJvdyBhbmQgc2hpZnRcclxuICAgICAgICAgICAgICAgICAgbW92ZUJlbmRQb2ludHMgKHt4Oi0xMCwgeTowfSxzZWxlY3RlZEVkZ2VzKTtcclxuXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKGUuc2hpZnRLZXkgJiYgZS53aGljaCA9PSAnMzknICkge1xyXG4gICAgICAgICAgICAgICAgICAvLyByaWdodCBhcnJvdyBhbmQgc2hpZnRcclxuICAgICAgICAgICAgICAgICAgbW92ZUJlbmRQb2ludHMgKHt4OjEwLCB5OjB9LHNlbGVjdGVkRWRnZXMpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIGlmIChlLmtleUNvZGUgPT0gJzM4Jykge1xyXG4gICAgICAgICAgICAgICAgICAvLyB1cCBhcnJvd1xyXG4gICAgICAgICAgICAgICAgICBtb3ZlQmVuZFBvaW50cyh7eDogMCwgeTogLTN9LCBzZWxlY3RlZEVkZ2VzKTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKGUua2V5Q29kZSA9PSAnNDAnKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIGRvd24gYXJyb3dcclxuICAgICAgICAgICAgICAgICAgbW92ZUJlbmRQb2ludHMgKHt4OjAsIHk6M30sc2VsZWN0ZWRFZGdlcyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKGUua2V5Q29kZSA9PSAnMzcnKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIGxlZnQgYXJyb3dcclxuICAgICAgICAgICAgICAgICAgbW92ZUJlbmRQb2ludHMgKHt4Oi0zLCB5OjB9LHNlbGVjdGVkRWRnZXMpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIGlmIChlLmtleUNvZGUgPT0gJzM5Jykge1xyXG4gICAgICAgICAgICAgICAgICAvL3JpZ2h0IGFycm93XHJcbiAgICAgICAgICAgICAgICAgIG1vdmVCZW5kUG9pbnRzICh7eDozLCB5OjB9LHNlbGVjdGVkRWRnZXMpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBmdW5jdGlvbiBrZXlVcChlKSB7XHJcblxyXG4gICAgICAgICAgaWYgKGUua2V5Q29kZSA8ICczNycgfHwgZS5rZXlDb2RlID4gJzQwJykge1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB2YXIgc2hvdWxkTW92ZSA9IHR5cGVvZiBvcHRpb25zKCkubW92ZVNlbGVjdGVkQmVuZFBvaW50c09uS2V5RXZlbnRzID09PSAnZnVuY3Rpb24nXHJcbiAgICAgICAgICAgICAgPyBvcHRpb25zKCkubW92ZVNlbGVjdGVkQmVuZFBvaW50c09uS2V5RXZlbnRzKCkgOiBvcHRpb25zKCkubW92ZVNlbGVjdGVkQmVuZFBvaW50c09uS2V5RXZlbnRzO1xyXG5cclxuICAgICAgICAgIGlmICghc2hvdWxkTW92ZSkge1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBjeS50cmlnZ2VyKFwiZWRnZWJlbmRlZGl0aW5nLm1vdmVlbmRcIiwgW3NlbGVjdGVkRWRnZXNdKTtcclxuICAgICAgICAgIHNlbGVjdGVkRWRnZXMgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICBiZW5kUG9pbnRzTW92aW5nID0gZmFsc2U7XHJcblxyXG4gICAgICB9XHJcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsa2V5RG93biwgdHJ1ZSk7XHJcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLGtleVVwLCB0cnVlKTtcclxuXHJcbiAgICAgICRjb250YWluZXIuZGF0YSgnY3llZGdlYmVuZGVkaXRpbmcnLCBkYXRhKTtcclxuICAgIH0sXHJcbiAgICB1bmJpbmQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjeS5vZmYoJ3Bvc2l0aW9uJywgJ25vZGUnLCBlUG9zaXRpb24pXHJcbiAgICAgICAgICAub2ZmKCdyZW1vdmUnLCAnbm9kZScsIGVSZW1vdmUpXHJcbiAgICAgICAgICAub2ZmKCdhZGQnLCAnbm9kZScsIGVBZGQpXHJcbiAgICAgICAgICAub2ZmKCdzdHlsZScsICdlZGdlLmVkZ2ViZW5kZWRpdGluZy1oYXNiZW5kcG9pbnRzOnNlbGVjdGVkJywgZVN0eWxlKVxyXG4gICAgICAgICAgLm9mZignc2VsZWN0JywgJ2VkZ2UnLCBlU2VsZWN0KVxyXG4gICAgICAgICAgLm9mZigndW5zZWxlY3QnLCAnZWRnZScsIGVVbnNlbGVjdClcclxuICAgICAgICAgIC5vZmYoJ3RhcHN0YXJ0JywgJ2VkZ2UnLCBlVGFwU3RhcnQpXHJcbiAgICAgICAgICAub2ZmKCd0YXBkcmFnJywgZVRhcERyYWcpXHJcbiAgICAgICAgICAub2ZmKCd0YXBlbmQnLCBlVGFwRW5kKVxyXG4gICAgICAgICAgLm9mZignY3h0dGFwJywgZUN4dFRhcCk7XHJcblxyXG4gICAgICAgIGN5LnVuYmluZChcInpvb20gcGFuXCIsIGVab29tKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBpZiAoZnVuY3Rpb25zW2ZuXSkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uc1tmbl0uYXBwbHkoJChjeS5jb250YWluZXIoKSksIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xyXG4gIH0gZWxzZSBpZiAodHlwZW9mIGZuID09ICdvYmplY3QnIHx8ICFmbikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9ucy5pbml0LmFwcGx5KCQoY3kuY29udGFpbmVyKCkpLCBhcmd1bWVudHMpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICAkLmVycm9yKCdObyBzdWNoIGZ1bmN0aW9uIGAnICsgZm4gKyAnYCBmb3IgY3l0b3NjYXBlLmpzLWVkZ2UtZWRpdGluZycpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuICQodGhpcyk7XHJcbn07XHJcbiIsInZhciBiZW5kUG9pbnRVdGlsaXRpZXMgPSB7XHJcbiAgY3VycmVudEN0eEVkZ2U6IHVuZGVmaW5lZCxcclxuICBjdXJyZW50Q3R4UG9zOiB1bmRlZmluZWQsXHJcbiAgY3VycmVudEJlbmRJbmRleDogdW5kZWZpbmVkLFxyXG4gIGlnbm9yZWRDbGFzc2VzOiB1bmRlZmluZWQsXHJcbiAgc2V0SWdub3JlZENsYXNzZXM6IGZ1bmN0aW9uKF9pZ25vcmVkQ2xhc3Nlcykge1xyXG4gICAgdGhpcy5pZ25vcmVkQ2xhc3NlcyA9IF9pZ25vcmVkQ2xhc3NlcztcclxuICB9LFxyXG4gIC8vIGluaXRpbGl6ZSBiZW5kIHBvaW50cyBiYXNlZCBvbiBiZW5kUG9zaXRpb25zRmNuXHJcbiAgaW5pdEJlbmRQb2ludHM6IGZ1bmN0aW9uKGJlbmRQb3NpdGlvbnNGY24sIGVkZ2VzKSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVkZ2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHZhciBlZGdlID0gZWRnZXNbaV07XHJcbiAgICAgIGlmKCF0aGlzLmlzSWdub3JlZEVkZ2UoZWRnZSkpIHtcclxuXHJcbiAgICAgICAgLy8gZ2V0IHRoZSBiZW5kIHBvc2l0aW9ucyBieSBhcHBseWluZyB0aGUgZnVuY3Rpb24gZm9yIHRoaXMgZWRnZVxyXG4gICAgICAgIHZhciBiZW5kUG9zaXRpb25zID0gYmVuZFBvc2l0aW9uc0Zjbi5hcHBseSh0aGlzLCBlZGdlKTtcclxuICAgICAgICAvLyBjYWxjdWxhdGUgcmVsYXRpdmUgYmVuZCBwb3NpdGlvbnNcclxuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5jb252ZXJ0VG9SZWxhdGl2ZUJlbmRQb3NpdGlvbnMoZWRnZSwgYmVuZFBvc2l0aW9ucyk7XHJcblxyXG4gICAgICAgIC8vIGlmIHRoZXJlIGFyZSBiZW5kIHBvaW50cyBzZXQgd2VpZ2h0cyBhbmQgZGlzdGFuY2VzIGFjY29yZGluZ2x5IGFuZCBhZGQgY2xhc3MgdG8gZW5hYmxlIHN0eWxlIGNoYW5nZXNcclxuICAgICAgICBpZiAocmVzdWx0LmRpc3RhbmNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBlZGdlLmRhdGEoJ2N5ZWRnZWJlbmRlZGl0aW5nV2VpZ2h0cycsIHJlc3VsdC53ZWlnaHRzKTtcclxuICAgICAgICAgIGVkZ2UuZGF0YSgnY3llZGdlYmVuZGVkaXRpbmdEaXN0YW5jZXMnLCByZXN1bHQuZGlzdGFuY2VzKTtcclxuICAgICAgICAgIGVkZ2UuYWRkQ2xhc3MoJ2VkZ2ViZW5kZWRpdGluZy1oYXNiZW5kcG9pbnRzJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgaXNJZ25vcmVkRWRnZTogZnVuY3Rpb24oZWRnZSkge1xyXG5cclxuICAgIHZhciBzdGFydFggPSBlZGdlLnNvdXJjZSgpLnBvc2l0aW9uKCd4Jyk7XHJcbiAgICB2YXIgc3RhcnRZID0gZWRnZS5zb3VyY2UoKS5wb3NpdGlvbigneScpO1xyXG4gICAgdmFyIGVuZFggPSBlZGdlLnRhcmdldCgpLnBvc2l0aW9uKCd4Jyk7XHJcbiAgICB2YXIgZW5kWSA9IGVkZ2UudGFyZ2V0KCkucG9zaXRpb24oJ3knKTtcclxuICAgXHJcbiAgICBpZigoc3RhcnRYID09IGVuZFggJiYgc3RhcnRZID09IGVuZFkpICB8fCAoZWRnZS5zb3VyY2UoKS5pZCgpID09IGVkZ2UudGFyZ2V0KCkuaWQoKSkpe1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGZvcih2YXIgaSA9IDA7IHRoaXMuaWdub3JlZENsYXNzZXMgJiYgaSA8ICB0aGlzLmlnbm9yZWRDbGFzc2VzLmxlbmd0aDsgaSsrKXtcclxuICAgICAgaWYoZWRnZS5oYXNDbGFzcyh0aGlzLmlnbm9yZWRDbGFzc2VzW2ldKSlcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9LFxyXG4gIC8vR2V0IHRoZSBkaXJlY3Rpb24gb2YgdGhlIGxpbmUgZnJvbSBzb3VyY2UgcG9pbnQgdG8gdGhlIHRhcmdldCBwb2ludFxyXG4gIGdldExpbmVEaXJlY3Rpb246IGZ1bmN0aW9uKHNyY1BvaW50LCB0Z3RQb2ludCl7XHJcbiAgICBpZihzcmNQb2ludC55ID09IHRndFBvaW50LnkgJiYgc3JjUG9pbnQueCA8IHRndFBvaW50Lngpe1xyXG4gICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuICAgIGlmKHNyY1BvaW50LnkgPCB0Z3RQb2ludC55ICYmIHNyY1BvaW50LnggPCB0Z3RQb2ludC54KXtcclxuICAgICAgcmV0dXJuIDI7XHJcbiAgICB9XHJcbiAgICBpZihzcmNQb2ludC55IDwgdGd0UG9pbnQueSAmJiBzcmNQb2ludC54ID09IHRndFBvaW50Lngpe1xyXG4gICAgICByZXR1cm4gMztcclxuICAgIH1cclxuICAgIGlmKHNyY1BvaW50LnkgPCB0Z3RQb2ludC55ICYmIHNyY1BvaW50LnggPiB0Z3RQb2ludC54KXtcclxuICAgICAgcmV0dXJuIDQ7XHJcbiAgICB9XHJcbiAgICBpZihzcmNQb2ludC55ID09IHRndFBvaW50LnkgJiYgc3JjUG9pbnQueCA+IHRndFBvaW50Lngpe1xyXG4gICAgICByZXR1cm4gNTtcclxuICAgIH1cclxuICAgIGlmKHNyY1BvaW50LnkgPiB0Z3RQb2ludC55ICYmIHNyY1BvaW50LnggPiB0Z3RQb2ludC54KXtcclxuICAgICAgcmV0dXJuIDY7XHJcbiAgICB9XHJcbiAgICBpZihzcmNQb2ludC55ID4gdGd0UG9pbnQueSAmJiBzcmNQb2ludC54ID09IHRndFBvaW50Lngpe1xyXG4gICAgICByZXR1cm4gNztcclxuICAgIH1cclxuICAgIHJldHVybiA4Oy8vaWYgc3JjUG9pbnQueSA+IHRndFBvaW50LnkgYW5kIHNyY1BvaW50LnggPCB0Z3RQb2ludC54XHJcbiAgfSxcclxuICBnZXRTcmNUZ3RQb2ludHNBbmRUYW5nZW50czogZnVuY3Rpb24gKGVkZ2UpIHtcclxuICAgIHZhciBzb3VyY2VOb2RlID0gZWRnZS5zb3VyY2UoKTtcclxuICAgIHZhciB0YXJnZXROb2RlID0gZWRnZS50YXJnZXQoKTtcclxuICAgIFxyXG4gICAgdmFyIHRndFBvc2l0aW9uID0gdGFyZ2V0Tm9kZS5wb3NpdGlvbigpO1xyXG4gICAgdmFyIHNyY1Bvc2l0aW9uID0gc291cmNlTm9kZS5wb3NpdGlvbigpO1xyXG4gICAgXHJcbiAgICB2YXIgc3JjUG9pbnQgPSBzb3VyY2VOb2RlLnBvc2l0aW9uKCk7XHJcbiAgICB2YXIgdGd0UG9pbnQgPSB0YXJnZXROb2RlLnBvc2l0aW9uKCk7XHJcblxyXG5cclxuICAgIHZhciBtMSA9ICh0Z3RQb2ludC55IC0gc3JjUG9pbnQueSkgLyAodGd0UG9pbnQueCAtIHNyY1BvaW50LngpO1xyXG4gICAgdmFyIG0yID0gLTEgLyBtMTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBtMTogbTEsXHJcbiAgICAgIG0yOiBtMixcclxuICAgICAgc3JjUG9pbnQ6IHNyY1BvaW50LFxyXG4gICAgICB0Z3RQb2ludDogdGd0UG9pbnRcclxuICAgIH07XHJcbiAgfSxcclxuICBnZXRJbnRlcnNlY3Rpb246IGZ1bmN0aW9uKGVkZ2UsIHBvaW50LCBzcmNUZ3RQb2ludHNBbmRUYW5nZW50cyl7XHJcbiAgICBpZiAoc3JjVGd0UG9pbnRzQW5kVGFuZ2VudHMgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBzcmNUZ3RQb2ludHNBbmRUYW5nZW50cyA9IHRoaXMuZ2V0U3JjVGd0UG9pbnRzQW5kVGFuZ2VudHMoZWRnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHNyY1BvaW50ID0gc3JjVGd0UG9pbnRzQW5kVGFuZ2VudHMuc3JjUG9pbnQ7XHJcbiAgICB2YXIgdGd0UG9pbnQgPSBzcmNUZ3RQb2ludHNBbmRUYW5nZW50cy50Z3RQb2ludDtcclxuICAgIHZhciBtMSA9IHNyY1RndFBvaW50c0FuZFRhbmdlbnRzLm0xO1xyXG4gICAgdmFyIG0yID0gc3JjVGd0UG9pbnRzQW5kVGFuZ2VudHMubTI7XHJcblxyXG4gICAgdmFyIGludGVyc2VjdFg7XHJcbiAgICB2YXIgaW50ZXJzZWN0WTtcclxuXHJcbiAgICBpZihtMSA9PSBJbmZpbml0eSB8fCBtMSA9PSAtSW5maW5pdHkpe1xyXG4gICAgICBpbnRlcnNlY3RYID0gc3JjUG9pbnQueDtcclxuICAgICAgaW50ZXJzZWN0WSA9IHBvaW50Lnk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmKG0xID09IDApe1xyXG4gICAgICBpbnRlcnNlY3RYID0gcG9pbnQueDtcclxuICAgICAgaW50ZXJzZWN0WSA9IHNyY1BvaW50Lnk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdmFyIGExID0gc3JjUG9pbnQueSAtIG0xICogc3JjUG9pbnQueDtcclxuICAgICAgdmFyIGEyID0gcG9pbnQueSAtIG0yICogcG9pbnQueDtcclxuXHJcbiAgICAgIGludGVyc2VjdFggPSAoYTIgLSBhMSkgLyAobTEgLSBtMik7XHJcbiAgICAgIGludGVyc2VjdFkgPSBtMSAqIGludGVyc2VjdFggKyBhMTtcclxuICAgIH1cclxuXHJcbiAgICAvL0ludGVyc2VjdGlvbiBwb2ludCBpcyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSBsaW5lcyBwYXNzaW5nIHRocm91Z2ggdGhlIG5vZGVzIGFuZFxyXG4gICAgLy9wYXNzaW5nIHRocm91Z2ggdGhlIGJlbmQgcG9pbnQgYW5kIHBlcnBlbmRpY3VsYXIgdG8gdGhlIG90aGVyIGxpbmVcclxuICAgIHZhciBpbnRlcnNlY3Rpb25Qb2ludCA9IHtcclxuICAgICAgeDogaW50ZXJzZWN0WCxcclxuICAgICAgeTogaW50ZXJzZWN0WVxyXG4gICAgfTtcclxuICAgIFxyXG4gICAgcmV0dXJuIGludGVyc2VjdGlvblBvaW50O1xyXG4gIH0sXHJcbiAgZ2V0U2VnbWVudFBvaW50czogZnVuY3Rpb24oZWRnZSkge1xyXG4gICAgXHJcbiAgICBpZiggZWRnZS5jc3MoJ2N1cnZlLXN0eWxlJykgIT09ICdzZWdtZW50cycgKSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHZhciBzZWdwdHMgPSBbXTtcclxuXHJcbiAgICB2YXIgc2VnbWVudFdzID0gZWRnZS5wc3R5bGUoICdzZWdtZW50LXdlaWdodHMnICkucGZWYWx1ZTtcclxuICAgIHZhciBzZWdtZW50RHMgPSBlZGdlLnBzdHlsZSggJ3NlZ21lbnQtZGlzdGFuY2VzJyApLnBmVmFsdWU7XHJcbiAgICB2YXIgc2VnbWVudHNOID0gTWF0aC5taW4oIHNlZ21lbnRXcy5sZW5ndGgsIHNlZ21lbnREcy5sZW5ndGggKTtcclxuICAgIFxyXG4gICAgdmFyIHNyY1BvcyA9IGVkZ2Uuc291cmNlKCkucG9zaXRpb24oKTtcclxuICAgIHZhciB0Z3RQb3MgPSBlZGdlLnRhcmdldCgpLnBvc2l0aW9uKCk7XHJcblxyXG4gICAgdmFyIGR5ID0gKCB0Z3RQb3MueSAtIHNyY1Bvcy55ICk7XHJcbiAgICB2YXIgZHggPSAoIHRndFBvcy54IC0gc3JjUG9zLnggKTtcclxuICAgIFxyXG4gICAgdmFyIGwgPSBNYXRoLnNxcnQoIGR4ICogZHggKyBkeSAqIGR5ICk7XHJcblxyXG4gICAgdmFyIHZlY3RvciA9IHtcclxuICAgICAgeDogZHgsXHJcbiAgICAgIHk6IGR5XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciB2ZWN0b3JOb3JtID0ge1xyXG4gICAgICB4OiB2ZWN0b3IueCAvIGwsXHJcbiAgICAgIHk6IHZlY3Rvci55IC8gbFxyXG4gICAgfTtcclxuICAgIFxyXG4gICAgdmFyIHZlY3Rvck5vcm1JbnZlcnNlID0ge1xyXG4gICAgICB4OiAtdmVjdG9yTm9ybS55LFxyXG4gICAgICB5OiB2ZWN0b3JOb3JtLnhcclxuICAgIH07XHJcblxyXG4gICAgZm9yKCB2YXIgcyA9IDA7IHMgPCBzZWdtZW50c047IHMrKyApe1xyXG4gICAgICB2YXIgdyA9IHNlZ21lbnRXc1sgcyBdO1xyXG4gICAgICB2YXIgZCA9IHNlZ21lbnREc1sgcyBdO1xyXG5cclxuICAgICAgLy8gZCA9IHN3YXBwZWREaXJlY3Rpb24gPyAtZCA6IGQ7XHJcbiAgICAgIC8vXHJcbiAgICAgIC8vIGQgPSBNYXRoLmFicyhkKTtcclxuXHJcbiAgICAgIC8vIHZhciB3MSA9ICFzd2FwcGVkRGlyZWN0aW9uID8gKDEgLSB3KSA6IHc7XHJcbiAgICAgIC8vIHZhciB3MiA9ICFzd2FwcGVkRGlyZWN0aW9uID8gdyA6ICgxIC0gdyk7XHJcblxyXG4gICAgICB2YXIgdzEgPSAoMSAtIHcpO1xyXG4gICAgICB2YXIgdzIgPSB3O1xyXG5cclxuICAgICAgdmFyIHBvc1B0cyA9IHtcclxuICAgICAgICB4MTogc3JjUG9zLngsXHJcbiAgICAgICAgeDI6IHRndFBvcy54LFxyXG4gICAgICAgIHkxOiBzcmNQb3MueSxcclxuICAgICAgICB5MjogdGd0UG9zLnlcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHZhciBtaWRwdFB0cyA9IHBvc1B0cztcclxuICAgICAgXHJcbiAgICAgIFxyXG5cclxuICAgICAgdmFyIGFkanVzdGVkTWlkcHQgPSB7XHJcbiAgICAgICAgeDogbWlkcHRQdHMueDEgKiB3MSArIG1pZHB0UHRzLngyICogdzIsXHJcbiAgICAgICAgeTogbWlkcHRQdHMueTEgKiB3MSArIG1pZHB0UHRzLnkyICogdzJcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHNlZ3B0cy5wdXNoKFxyXG4gICAgICAgIGFkanVzdGVkTWlkcHQueCArIHZlY3Rvck5vcm1JbnZlcnNlLnggKiBkLFxyXG4gICAgICAgIGFkanVzdGVkTWlkcHQueSArIHZlY3Rvck5vcm1JbnZlcnNlLnkgKiBkXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHJldHVybiBzZWdwdHM7XHJcbiAgfSxcclxuICBjb252ZXJ0VG9SZWxhdGl2ZUJlbmRQb3NpdGlvbjogZnVuY3Rpb24gKGVkZ2UsIGJlbmRQb2ludCwgc3JjVGd0UG9pbnRzQW5kVGFuZ2VudHMpIHtcclxuICAgIGlmIChzcmNUZ3RQb2ludHNBbmRUYW5nZW50cyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHNyY1RndFBvaW50c0FuZFRhbmdlbnRzID0gdGhpcy5nZXRTcmNUZ3RQb2ludHNBbmRUYW5nZW50cyhlZGdlKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgdmFyIGludGVyc2VjdGlvblBvaW50ID0gdGhpcy5nZXRJbnRlcnNlY3Rpb24oZWRnZSwgYmVuZFBvaW50LCBzcmNUZ3RQb2ludHNBbmRUYW5nZW50cyk7XHJcbiAgICB2YXIgaW50ZXJzZWN0WCA9IGludGVyc2VjdGlvblBvaW50Lng7XHJcbiAgICB2YXIgaW50ZXJzZWN0WSA9IGludGVyc2VjdGlvblBvaW50Lnk7XHJcbiAgICBcclxuICAgIHZhciBzcmNQb2ludCA9IHNyY1RndFBvaW50c0FuZFRhbmdlbnRzLnNyY1BvaW50O1xyXG4gICAgdmFyIHRndFBvaW50ID0gc3JjVGd0UG9pbnRzQW5kVGFuZ2VudHMudGd0UG9pbnQ7XHJcbiAgICBcclxuICAgIHZhciB3ZWlnaHQ7XHJcbiAgICBcclxuICAgIGlmKCBpbnRlcnNlY3RYICE9IHNyY1BvaW50LnggKSB7XHJcbiAgICAgIHdlaWdodCA9IChpbnRlcnNlY3RYIC0gc3JjUG9pbnQueCkgLyAodGd0UG9pbnQueCAtIHNyY1BvaW50LngpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiggaW50ZXJzZWN0WSAhPSBzcmNQb2ludC55ICkge1xyXG4gICAgICB3ZWlnaHQgPSAoaW50ZXJzZWN0WSAtIHNyY1BvaW50LnkpIC8gKHRndFBvaW50LnkgLSBzcmNQb2ludC55KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB3ZWlnaHQgPSAwO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICB2YXIgZGlzdGFuY2UgPSBNYXRoLnNxcnQoTWF0aC5wb3coKGludGVyc2VjdFkgLSBiZW5kUG9pbnQueSksIDIpXHJcbiAgICAgICAgKyBNYXRoLnBvdygoaW50ZXJzZWN0WCAtIGJlbmRQb2ludC54KSwgMikpO1xyXG4gICAgXHJcbiAgICAvL0dldCB0aGUgZGlyZWN0aW9uIG9mIHRoZSBsaW5lIGZvcm0gc291cmNlIHBvaW50IHRvIHRhcmdldCBwb2ludFxyXG4gICAgdmFyIGRpcmVjdGlvbjEgPSB0aGlzLmdldExpbmVEaXJlY3Rpb24oc3JjUG9pbnQsIHRndFBvaW50KTtcclxuICAgIC8vR2V0IHRoZSBkaXJlY3Rpb24gb2YgdGhlIGxpbmUgZnJvbSBpbnRlc2VjdGlvbiBwb2ludCB0byBiZW5kIHBvaW50XHJcbiAgICB2YXIgZGlyZWN0aW9uMiA9IHRoaXMuZ2V0TGluZURpcmVjdGlvbihpbnRlcnNlY3Rpb25Qb2ludCwgYmVuZFBvaW50KTtcclxuICAgIFxyXG4gICAgLy9JZiB0aGUgZGlmZmVyZW5jZSBpcyBub3QgLTIgYW5kIG5vdCA2IHRoZW4gdGhlIGRpcmVjdGlvbiBvZiB0aGUgZGlzdGFuY2UgaXMgbmVnYXRpdmVcclxuICAgIGlmKGRpcmVjdGlvbjEgLSBkaXJlY3Rpb24yICE9IC0yICYmIGRpcmVjdGlvbjEgLSBkaXJlY3Rpb24yICE9IDYpe1xyXG4gICAgICBpZihkaXN0YW5jZSAhPSAwKVxyXG4gICAgICAgIGRpc3RhbmNlID0gLTEgKiBkaXN0YW5jZTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgd2VpZ2h0OiB3ZWlnaHQsXHJcbiAgICAgIGRpc3RhbmNlOiBkaXN0YW5jZVxyXG4gICAgfTtcclxuICB9LFxyXG4gIGNvbnZlcnRUb1JlbGF0aXZlQmVuZFBvc2l0aW9uczogZnVuY3Rpb24gKGVkZ2UsIGJlbmRQb2ludHMpIHtcclxuICAgIHZhciBzcmNUZ3RQb2ludHNBbmRUYW5nZW50cyA9IHRoaXMuZ2V0U3JjVGd0UG9pbnRzQW5kVGFuZ2VudHMoZWRnZSk7XHJcbi8vICAgIHZhciBiZW5kUG9pbnRzID0gZWRnZS5kYXRhKCdiZW5kUG9pbnRQb3NpdGlvbnMnKTtcclxuICAgIC8vb3V0cHV0IHZhcmlhYmxlc1xyXG4gICAgdmFyIHdlaWdodHMgPSBbXTtcclxuICAgIHZhciBkaXN0YW5jZXMgPSBbXTtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgYmVuZFBvaW50cyAmJiBpIDwgYmVuZFBvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICB2YXIgYmVuZFBvaW50ID0gYmVuZFBvaW50c1tpXTtcclxuICAgICAgdmFyIHJlbGF0aXZlQmVuZFBvc2l0aW9uID0gdGhpcy5jb252ZXJ0VG9SZWxhdGl2ZUJlbmRQb3NpdGlvbihlZGdlLCBiZW5kUG9pbnQsIHNyY1RndFBvaW50c0FuZFRhbmdlbnRzKTtcclxuXHJcbiAgICAgIHdlaWdodHMucHVzaChyZWxhdGl2ZUJlbmRQb3NpdGlvbi53ZWlnaHQpO1xyXG4gICAgICBkaXN0YW5jZXMucHVzaChyZWxhdGl2ZUJlbmRQb3NpdGlvbi5kaXN0YW5jZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgd2VpZ2h0czogd2VpZ2h0cyxcclxuICAgICAgZGlzdGFuY2VzOiBkaXN0YW5jZXNcclxuICAgIH07XHJcbiAgfSxcclxuICBnZXRTZWdtZW50RGlzdGFuY2VzU3RyaW5nOiBmdW5jdGlvbiAoZWRnZSkge1xyXG4gICAgdmFyIHN0ciA9IFwiXCI7XHJcblxyXG4gICAgdmFyIGRpc3RhbmNlcyA9IGVkZ2UuZGF0YSgnY3llZGdlYmVuZGVkaXRpbmdEaXN0YW5jZXMnKTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBkaXN0YW5jZXMgJiYgaSA8IGRpc3RhbmNlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBzdHIgPSBzdHIgKyBcIiBcIiArIGRpc3RhbmNlc1tpXTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgcmV0dXJuIHN0cjtcclxuICB9LFxyXG4gIGdldFNlZ21lbnRXZWlnaHRzU3RyaW5nOiBmdW5jdGlvbiAoZWRnZSkge1xyXG4gICAgdmFyIHN0ciA9IFwiXCI7XHJcblxyXG4gICAgdmFyIHdlaWdodHMgPSBlZGdlLmRhdGEoJ2N5ZWRnZWJlbmRlZGl0aW5nV2VpZ2h0cycpO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IHdlaWdodHMgJiYgaSA8IHdlaWdodHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgc3RyID0gc3RyICsgXCIgXCIgKyB3ZWlnaHRzW2ldO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICByZXR1cm4gc3RyO1xyXG4gIH0sXHJcbiAgYWRkQmVuZFBvaW50OiBmdW5jdGlvbihlZGdlLCBuZXdCZW5kUG9pbnQpIHtcclxuICAgIGlmKGVkZ2UgPT09IHVuZGVmaW5lZCB8fCBuZXdCZW5kUG9pbnQgPT09IHVuZGVmaW5lZCl7XHJcbiAgICAgIGVkZ2UgPSB0aGlzLmN1cnJlbnRDdHhFZGdlO1xyXG4gICAgICBuZXdCZW5kUG9pbnQgPSB0aGlzLmN1cnJlbnRDdHhQb3M7XHJcbiAgICB9XHJcbiAgXHJcbiAgICB2YXIgcmVsYXRpdmVCZW5kUG9zaXRpb24gPSB0aGlzLmNvbnZlcnRUb1JlbGF0aXZlQmVuZFBvc2l0aW9uKGVkZ2UsIG5ld0JlbmRQb2ludCk7XHJcbiAgICB2YXIgb3JpZ2luYWxQb2ludFdlaWdodCA9IHJlbGF0aXZlQmVuZFBvc2l0aW9uLndlaWdodDtcclxuICAgIFxyXG4gICAgdmFyIHN0YXJ0WCA9IGVkZ2Uuc291cmNlKCkucG9zaXRpb24oJ3gnKTtcclxuICAgIHZhciBzdGFydFkgPSBlZGdlLnNvdXJjZSgpLnBvc2l0aW9uKCd5Jyk7XHJcbiAgICB2YXIgZW5kWCA9IGVkZ2UudGFyZ2V0KCkucG9zaXRpb24oJ3gnKTtcclxuICAgIHZhciBlbmRZID0gZWRnZS50YXJnZXQoKS5wb3NpdGlvbigneScpO1xyXG4gICAgdmFyIHN0YXJ0V2VpZ2h0ID0gdGhpcy5jb252ZXJ0VG9SZWxhdGl2ZUJlbmRQb3NpdGlvbihlZGdlLCB7eDogc3RhcnRYLCB5OiBzdGFydFl9KS53ZWlnaHQ7XHJcbiAgICB2YXIgZW5kV2VpZ2h0ID0gdGhpcy5jb252ZXJ0VG9SZWxhdGl2ZUJlbmRQb3NpdGlvbihlZGdlLCB7eDogZW5kWCwgeTogZW5kWX0pLndlaWdodDtcclxuICAgIHZhciB3ZWlnaHRzV2l0aFRndFNyYyA9IFtzdGFydFdlaWdodF0uY29uY2F0KGVkZ2UuZGF0YSgnY3llZGdlYmVuZGVkaXRpbmdXZWlnaHRzJyk/ZWRnZS5kYXRhKCdjeWVkZ2ViZW5kZWRpdGluZ1dlaWdodHMnKTpbXSkuY29uY2F0KFtlbmRXZWlnaHRdKTtcclxuICAgIFxyXG4gICAgdmFyIHNlZ1B0cyA9IHRoaXMuZ2V0U2VnbWVudFBvaW50cyhlZGdlKTtcclxuICAgIFxyXG4gICAgdmFyIG1pbkRpc3QgPSBJbmZpbml0eTtcclxuICAgIHZhciBpbnRlcnNlY3Rpb247XHJcbiAgICB2YXIgc2VncHRzV2l0aFRndFNyYyA9IFtzdGFydFgsIHN0YXJ0WV1cclxuICAgICAgICAgICAgLmNvbmNhdChzZWdQdHM/c2VnUHRzOltdKVxyXG4gICAgICAgICAgICAuY29uY2F0KFtlbmRYLCBlbmRZXSk7XHJcbiAgICB2YXIgbmV3QmVuZEluZGV4ID0gLTE7XHJcbiAgICBcclxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCB3ZWlnaHRzV2l0aFRndFNyYy5sZW5ndGggLSAxOyBpKyspe1xyXG4gICAgICB2YXIgdzEgPSB3ZWlnaHRzV2l0aFRndFNyY1tpXTtcclxuICAgICAgdmFyIHcyID0gd2VpZ2h0c1dpdGhUZ3RTcmNbaSArIDFdO1xyXG4gICAgICBcclxuICAgICAgLy9jaGVjayBpZiB0aGUgd2VpZ2h0IGlzIGJldHdlZW4gdzEgYW5kIHcyXHJcbiAgICAgIGNvbnN0IGIxID0gdGhpcy5jb21wYXJlV2l0aFByZWNpc2lvbihvcmlnaW5hbFBvaW50V2VpZ2h0LCB3MSwgdHJ1ZSk7XHJcbiAgICAgIGNvbnN0IGIyID0gdGhpcy5jb21wYXJlV2l0aFByZWNpc2lvbihvcmlnaW5hbFBvaW50V2VpZ2h0LCB3Mik7XHJcbiAgICAgIGNvbnN0IGIzID0gdGhpcy5jb21wYXJlV2l0aFByZWNpc2lvbihvcmlnaW5hbFBvaW50V2VpZ2h0LCB3MiwgdHJ1ZSk7XHJcbiAgICAgIGNvbnN0IGI0ID0gdGhpcy5jb21wYXJlV2l0aFByZWNpc2lvbihvcmlnaW5hbFBvaW50V2VpZ2h0LCB3MSk7XHJcbiAgICAgIGlmKCAoYjEgJiYgYjIpIHx8IChiMyAmJiBiNCkpe1xyXG4gICAgICAgIHZhciBzdGFydFggPSBzZWdwdHNXaXRoVGd0U3JjWzIgKiBpXTtcclxuICAgICAgICB2YXIgc3RhcnRZID0gc2VncHRzV2l0aFRndFNyY1syICogaSArIDFdO1xyXG4gICAgICAgIHZhciBlbmRYID0gc2VncHRzV2l0aFRndFNyY1syICogaSArIDJdO1xyXG4gICAgICAgIHZhciBlbmRZID0gc2VncHRzV2l0aFRndFNyY1syICogaSArIDNdO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHZhciBzdGFydCA9IHtcclxuICAgICAgICAgIHg6IHN0YXJ0WCxcclxuICAgICAgICAgIHk6IHN0YXJ0WVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgXHJcbiAgICAgICAgdmFyIGVuZCA9IHtcclxuICAgICAgICAgIHg6IGVuZFgsXHJcbiAgICAgICAgICB5OiBlbmRZXHJcbiAgICAgICAgfTtcclxuICAgICAgICBcclxuICAgICAgICB2YXIgbTEgPSAoIHN0YXJ0WSAtIGVuZFkgKSAvICggc3RhcnRYIC0gZW5kWCApO1xyXG4gICAgICAgIHZhciBtMiA9IC0xIC8gbTE7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdmFyIHNyY1RndFBvaW50c0FuZFRhbmdlbnRzID0ge1xyXG4gICAgICAgICAgc3JjUG9pbnQ6IHN0YXJ0LFxyXG4gICAgICAgICAgdGd0UG9pbnQ6IGVuZCxcclxuICAgICAgICAgIG0xOiBtMSxcclxuICAgICAgICAgIG0yOiBtMlxyXG4gICAgICAgIH07XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9nZXQgdGhlIGludGVyc2VjdGlvbiBvZiB0aGUgY3VycmVudCBzZWdtZW50IHdpdGggdGhlIG5ldyBiZW5kIHBvaW50XHJcbiAgICAgICAgdmFyIGN1cnJlbnRJbnRlcnNlY3Rpb24gPSB0aGlzLmdldEludGVyc2VjdGlvbihlZGdlLCBuZXdCZW5kUG9pbnQsIHNyY1RndFBvaW50c0FuZFRhbmdlbnRzKTtcclxuICAgICAgICB2YXIgZGlzdCA9IE1hdGguc3FydCggTWF0aC5wb3coIChuZXdCZW5kUG9pbnQueCAtIGN1cnJlbnRJbnRlcnNlY3Rpb24ueCksIDIgKSBcclxuICAgICAgICAgICAgICAgICsgTWF0aC5wb3coIChuZXdCZW5kUG9pbnQueSAtIGN1cnJlbnRJbnRlcnNlY3Rpb24ueSksIDIgKSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9VcGRhdGUgdGhlIG1pbmltdW0gZGlzdGFuY2VcclxuICAgICAgICBpZihkaXN0IDwgbWluRGlzdCl7XHJcbiAgICAgICAgICBtaW5EaXN0ID0gZGlzdDtcclxuICAgICAgICAgIGludGVyc2VjdGlvbiA9IGN1cnJlbnRJbnRlcnNlY3Rpb247XHJcbiAgICAgICAgICBuZXdCZW5kSW5kZXggPSBpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBpZihpbnRlcnNlY3Rpb24gIT09IHVuZGVmaW5lZCl7XHJcbiAgICAgIG5ld0JlbmRQb2ludCA9IGludGVyc2VjdGlvbjtcclxuICAgIH1cclxuICAgIFxyXG4gICAgcmVsYXRpdmVCZW5kUG9zaXRpb24gPSB0aGlzLmNvbnZlcnRUb1JlbGF0aXZlQmVuZFBvc2l0aW9uKGVkZ2UsIG5ld0JlbmRQb2ludCk7XHJcbiAgICBcclxuICAgIGlmKGludGVyc2VjdGlvbiA9PT0gdW5kZWZpbmVkKXtcclxuICAgICAgcmVsYXRpdmVCZW5kUG9zaXRpb24uZGlzdGFuY2UgPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciB3ZWlnaHRzID0gZWRnZS5kYXRhKCdjeWVkZ2ViZW5kZWRpdGluZ1dlaWdodHMnKTtcclxuICAgIHZhciBkaXN0YW5jZXMgPSBlZGdlLmRhdGEoJ2N5ZWRnZWJlbmRlZGl0aW5nRGlzdGFuY2VzJyk7XHJcbiAgICBcclxuICAgIHdlaWdodHMgPSB3ZWlnaHRzP3dlaWdodHM6W107XHJcbiAgICBkaXN0YW5jZXMgPSBkaXN0YW5jZXM/ZGlzdGFuY2VzOltdO1xyXG4gICAgXHJcbiAgICBpZih3ZWlnaHRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBuZXdCZW5kSW5kZXggPSAwO1xyXG4gICAgfVxyXG4gICAgXHJcbi8vICAgIHdlaWdodHMucHVzaChyZWxhdGl2ZUJlbmRQb3NpdGlvbi53ZWlnaHQpO1xyXG4vLyAgICBkaXN0YW5jZXMucHVzaChyZWxhdGl2ZUJlbmRQb3NpdGlvbi5kaXN0YW5jZSk7XHJcbiAgICBpZihuZXdCZW5kSW5kZXggIT0gLTEpe1xyXG4gICAgICB3ZWlnaHRzLnNwbGljZShuZXdCZW5kSW5kZXgsIDAsIHJlbGF0aXZlQmVuZFBvc2l0aW9uLndlaWdodCk7XHJcbiAgICAgIGRpc3RhbmNlcy5zcGxpY2UobmV3QmVuZEluZGV4LCAwLCByZWxhdGl2ZUJlbmRQb3NpdGlvbi5kaXN0YW5jZSk7XHJcbiAgICB9XHJcbiAgIFxyXG4gICAgZWRnZS5kYXRhKCdjeWVkZ2ViZW5kZWRpdGluZ1dlaWdodHMnLCB3ZWlnaHRzKTtcclxuICAgIGVkZ2UuZGF0YSgnY3llZGdlYmVuZGVkaXRpbmdEaXN0YW5jZXMnLCBkaXN0YW5jZXMpO1xyXG4gICAgXHJcbiAgICBlZGdlLmFkZENsYXNzKCdlZGdlYmVuZGVkaXRpbmctaGFzYmVuZHBvaW50cycpO1xyXG4gICAgXHJcbiAgICByZXR1cm4gcmVsYXRpdmVCZW5kUG9zaXRpb247XHJcbiAgfSxcclxuICByZW1vdmVCZW5kUG9pbnQ6IGZ1bmN0aW9uKGVkZ2UsIGJlbmRQb2ludEluZGV4KXtcclxuICAgIGlmKGVkZ2UgPT09IHVuZGVmaW5lZCB8fCBiZW5kUG9pbnRJbmRleCA9PT0gdW5kZWZpbmVkKXtcclxuICAgICAgZWRnZSA9IHRoaXMuY3VycmVudEN0eEVkZ2U7XHJcbiAgICAgIGJlbmRQb2ludEluZGV4ID0gdGhpcy5jdXJyZW50QmVuZEluZGV4O1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICB2YXIgZGlzdGFuY2VzID0gZWRnZS5kYXRhKCdjeWVkZ2ViZW5kZWRpdGluZ0Rpc3RhbmNlcycpO1xyXG4gICAgdmFyIHdlaWdodHMgPSBlZGdlLmRhdGEoJ2N5ZWRnZWJlbmRlZGl0aW5nV2VpZ2h0cycpO1xyXG4gICAgXHJcbiAgICBkaXN0YW5jZXMuc3BsaWNlKGJlbmRQb2ludEluZGV4LCAxKTtcclxuICAgIHdlaWdodHMuc3BsaWNlKGJlbmRQb2ludEluZGV4LCAxKTtcclxuICAgIFxyXG4gICAgXHJcbiAgICBpZihkaXN0YW5jZXMubGVuZ3RoID09IDAgfHwgd2VpZ2h0cy5sZW5ndGggPT0gMCl7XHJcbiAgICAgIGVkZ2UucmVtb3ZlQ2xhc3MoJ2VkZ2ViZW5kZWRpdGluZy1oYXNiZW5kcG9pbnRzJyk7XHJcbiAgICAgICAgZWRnZS5kYXRhKCdjeWVkZ2ViZW5kZWRpdGluZ0Rpc3RhbmNlcycsIFtdKTtcclxuICAgICAgICBlZGdlLmRhdGEoJ2N5ZWRnZWJlbmRlZGl0aW5nV2VpZ2h0cycsIFtdKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBlZGdlLmRhdGEoJ2N5ZWRnZWJlbmRlZGl0aW5nRGlzdGFuY2VzJywgZGlzdGFuY2VzKTtcclxuICAgICAgZWRnZS5kYXRhKCdjeWVkZ2ViZW5kZWRpdGluZ1dlaWdodHMnLCB3ZWlnaHRzKTtcclxuICAgIH1cclxuICB9LFxyXG4gIGNhbGN1bGF0ZURpc3RhbmNlOiBmdW5jdGlvbihwdDEsIHB0Mikge1xyXG4gICAgdmFyIGRpZmZYID0gcHQxLnggLSBwdDIueDtcclxuICAgIHZhciBkaWZmWSA9IHB0MS55IC0gcHQyLnk7XHJcbiAgICBcclxuICAgIHZhciBkaXN0ID0gTWF0aC5zcXJ0KCBNYXRoLnBvdyggZGlmZlgsIDIgKSArIE1hdGgucG93KCBkaWZmWSwgMiApICk7XHJcbiAgICByZXR1cm4gZGlzdDtcclxuICB9LFxyXG4gIC8qKiAoTGVzcyB0aGFuIG9yIGVxdWFsIHRvKSBhbmQgKGdyZWF0ZXIgdGhlbiBlcXVhbCB0bykgY29tcGFyaXNvbnMgd2l0aCBmbG9hdGluZyBwb2ludCBudW1iZXJzICovXHJcbiAgY29tcGFyZVdpdGhQcmVjaXNpb246IGZ1bmN0aW9uIChuMSwgbjIsIGlzTGVzc1RoZW5PckVxdWFsID0gZmFsc2UsIHByZWNpc2lvbiA9IDAuMDEpIHtcclxuICAgIGNvbnN0IGRpZmYgPSBuMSAtIG4yO1xyXG4gICAgaWYgKE1hdGguYWJzKGRpZmYpIDw9IHByZWNpc2lvbikge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmIChpc0xlc3NUaGVuT3JFcXVhbCkge1xyXG4gICAgICByZXR1cm4gbjEgPCBuMjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBuMSA+IG4yO1xyXG4gICAgfVxyXG4gIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gYmVuZFBvaW50VXRpbGl0aWVzO1xyXG4iLCJ2YXIgZGVib3VuY2UgPSAoZnVuY3Rpb24gKCkge1xyXG4gIC8qKlxyXG4gICAqIGxvZGFzaCAzLjEuMSAoQ3VzdG9tIEJ1aWxkKSA8aHR0cHM6Ly9sb2Rhc2guY29tLz5cclxuICAgKiBCdWlsZDogYGxvZGFzaCBtb2Rlcm4gbW9kdWxhcml6ZSBleHBvcnRzPVwibnBtXCIgLW8gLi9gXHJcbiAgICogQ29weXJpZ2h0IDIwMTItMjAxNSBUaGUgRG9qbyBGb3VuZGF0aW9uIDxodHRwOi8vZG9qb2ZvdW5kYXRpb24ub3JnLz5cclxuICAgKiBCYXNlZCBvbiBVbmRlcnNjb3JlLmpzIDEuOC4zIDxodHRwOi8vdW5kZXJzY29yZWpzLm9yZy9MSUNFTlNFPlxyXG4gICAqIENvcHlyaWdodCAyMDA5LTIwMTUgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcclxuICAgKiBBdmFpbGFibGUgdW5kZXIgTUlUIGxpY2Vuc2UgPGh0dHBzOi8vbG9kYXNoLmNvbS9saWNlbnNlPlxyXG4gICAqL1xyXG4gIC8qKiBVc2VkIGFzIHRoZSBgVHlwZUVycm9yYCBtZXNzYWdlIGZvciBcIkZ1bmN0aW9uc1wiIG1ldGhvZHMuICovXHJcbiAgdmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcclxuXHJcbiAgLyogTmF0aXZlIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cclxuICB2YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXgsXHJcbiAgICAgICAgICBuYXRpdmVOb3cgPSBEYXRlLm5vdztcclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0aGF0IGhhdmUgZWxhcHNlZCBzaW5jZSB0aGUgVW5peCBlcG9jaFxyXG4gICAqICgxIEphbnVhcnkgMTk3MCAwMDowMDowMCBVVEMpLlxyXG4gICAqXHJcbiAgICogQHN0YXRpY1xyXG4gICAqIEBtZW1iZXJPZiBfXHJcbiAgICogQGNhdGVnb3J5IERhdGVcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqXHJcbiAgICogXy5kZWZlcihmdW5jdGlvbihzdGFtcCkge1xyXG4gICAqICAgY29uc29sZS5sb2coXy5ub3coKSAtIHN0YW1wKTtcclxuICAgKiB9LCBfLm5vdygpKTtcclxuICAgKiAvLyA9PiBsb2dzIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGl0IHRvb2sgZm9yIHRoZSBkZWZlcnJlZCBmdW5jdGlvbiB0byBiZSBpbnZva2VkXHJcbiAgICovXHJcbiAgdmFyIG5vdyA9IG5hdGl2ZU5vdyB8fCBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhIGRlYm91bmNlZCBmdW5jdGlvbiB0aGF0IGRlbGF5cyBpbnZva2luZyBgZnVuY2AgdW50aWwgYWZ0ZXIgYHdhaXRgXHJcbiAgICogbWlsbGlzZWNvbmRzIGhhdmUgZWxhcHNlZCBzaW5jZSB0aGUgbGFzdCB0aW1lIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gd2FzXHJcbiAgICogaW52b2tlZC4gVGhlIGRlYm91bmNlZCBmdW5jdGlvbiBjb21lcyB3aXRoIGEgYGNhbmNlbGAgbWV0aG9kIHRvIGNhbmNlbFxyXG4gICAqIGRlbGF5ZWQgaW52b2NhdGlvbnMuIFByb3ZpZGUgYW4gb3B0aW9ucyBvYmplY3QgdG8gaW5kaWNhdGUgdGhhdCBgZnVuY2BcclxuICAgKiBzaG91bGQgYmUgaW52b2tlZCBvbiB0aGUgbGVhZGluZyBhbmQvb3IgdHJhaWxpbmcgZWRnZSBvZiB0aGUgYHdhaXRgIHRpbWVvdXQuXHJcbiAgICogU3Vic2VxdWVudCBjYWxscyB0byB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBsYXN0XHJcbiAgICogYGZ1bmNgIGludm9jYXRpb24uXHJcbiAgICpcclxuICAgKiAqKk5vdGU6KiogSWYgYGxlYWRpbmdgIGFuZCBgdHJhaWxpbmdgIG9wdGlvbnMgYXJlIGB0cnVlYCwgYGZ1bmNgIGlzIGludm9rZWRcclxuICAgKiBvbiB0aGUgdHJhaWxpbmcgZWRnZSBvZiB0aGUgdGltZW91dCBvbmx5IGlmIHRoZSB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uIGlzXHJcbiAgICogaW52b2tlZCBtb3JlIHRoYW4gb25jZSBkdXJpbmcgdGhlIGB3YWl0YCB0aW1lb3V0LlxyXG4gICAqXHJcbiAgICogU2VlIFtEYXZpZCBDb3JiYWNobydzIGFydGljbGVdKGh0dHA6Ly9kcnVwYWxtb3Rpb24uY29tL2FydGljbGUvZGVib3VuY2UtYW5kLXRocm90dGxlLXZpc3VhbC1leHBsYW5hdGlvbilcclxuICAgKiBmb3IgZGV0YWlscyBvdmVyIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGBfLmRlYm91bmNlYCBhbmQgYF8udGhyb3R0bGVgLlxyXG4gICAqXHJcbiAgICogQHN0YXRpY1xyXG4gICAqIEBtZW1iZXJPZiBfXHJcbiAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gZGVib3VuY2UuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFt3YWl0PTBdIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIGRlbGF5LlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gVGhlIG9wdGlvbnMgb2JqZWN0LlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubGVhZGluZz1mYWxzZV0gU3BlY2lmeSBpbnZva2luZyBvbiB0aGUgbGVhZGluZ1xyXG4gICAqICBlZGdlIG9mIHRoZSB0aW1lb3V0LlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhXYWl0XSBUaGUgbWF4aW11bSB0aW1lIGBmdW5jYCBpcyBhbGxvd2VkIHRvIGJlXHJcbiAgICogIGRlbGF5ZWQgYmVmb3JlIGl0J3MgaW52b2tlZC5cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnRyYWlsaW5nPXRydWVdIFNwZWNpZnkgaW52b2tpbmcgb24gdGhlIHRyYWlsaW5nXHJcbiAgICogIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXHJcbiAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZGVib3VuY2VkIGZ1bmN0aW9uLlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICpcclxuICAgKiAvLyBhdm9pZCBjb3N0bHkgY2FsY3VsYXRpb25zIHdoaWxlIHRoZSB3aW5kb3cgc2l6ZSBpcyBpbiBmbHV4XHJcbiAgICogalF1ZXJ5KHdpbmRvdykub24oJ3Jlc2l6ZScsIF8uZGVib3VuY2UoY2FsY3VsYXRlTGF5b3V0LCAxNTApKTtcclxuICAgKlxyXG4gICAqIC8vIGludm9rZSBgc2VuZE1haWxgIHdoZW4gdGhlIGNsaWNrIGV2ZW50IGlzIGZpcmVkLCBkZWJvdW5jaW5nIHN1YnNlcXVlbnQgY2FsbHNcclxuICAgKiBqUXVlcnkoJyNwb3N0Ym94Jykub24oJ2NsaWNrJywgXy5kZWJvdW5jZShzZW5kTWFpbCwgMzAwLCB7XHJcbiAgICogICAnbGVhZGluZyc6IHRydWUsXHJcbiAgICogICAndHJhaWxpbmcnOiBmYWxzZVxyXG4gICAqIH0pKTtcclxuICAgKlxyXG4gICAqIC8vIGVuc3VyZSBgYmF0Y2hMb2dgIGlzIGludm9rZWQgb25jZSBhZnRlciAxIHNlY29uZCBvZiBkZWJvdW5jZWQgY2FsbHNcclxuICAgKiB2YXIgc291cmNlID0gbmV3IEV2ZW50U291cmNlKCcvc3RyZWFtJyk7XHJcbiAgICogalF1ZXJ5KHNvdXJjZSkub24oJ21lc3NhZ2UnLCBfLmRlYm91bmNlKGJhdGNoTG9nLCAyNTAsIHtcclxuICAgKiAgICdtYXhXYWl0JzogMTAwMFxyXG4gICAqIH0pKTtcclxuICAgKlxyXG4gICAqIC8vIGNhbmNlbCBhIGRlYm91bmNlZCBjYWxsXHJcbiAgICogdmFyIHRvZG9DaGFuZ2VzID0gXy5kZWJvdW5jZShiYXRjaExvZywgMTAwMCk7XHJcbiAgICogT2JqZWN0Lm9ic2VydmUobW9kZWxzLnRvZG8sIHRvZG9DaGFuZ2VzKTtcclxuICAgKlxyXG4gICAqIE9iamVjdC5vYnNlcnZlKG1vZGVscywgZnVuY3Rpb24oY2hhbmdlcykge1xyXG4gICAqICAgaWYgKF8uZmluZChjaGFuZ2VzLCB7ICd1c2VyJzogJ3RvZG8nLCAndHlwZSc6ICdkZWxldGUnfSkpIHtcclxuICAgKiAgICAgdG9kb0NoYW5nZXMuY2FuY2VsKCk7XHJcbiAgICogICB9XHJcbiAgICogfSwgWydkZWxldGUnXSk7XHJcbiAgICpcclxuICAgKiAvLyAuLi5hdCBzb21lIHBvaW50IGBtb2RlbHMudG9kb2AgaXMgY2hhbmdlZFxyXG4gICAqIG1vZGVscy50b2RvLmNvbXBsZXRlZCA9IHRydWU7XHJcbiAgICpcclxuICAgKiAvLyAuLi5iZWZvcmUgMSBzZWNvbmQgaGFzIHBhc3NlZCBgbW9kZWxzLnRvZG9gIGlzIGRlbGV0ZWRcclxuICAgKiAvLyB3aGljaCBjYW5jZWxzIHRoZSBkZWJvdW5jZWQgYHRvZG9DaGFuZ2VzYCBjYWxsXHJcbiAgICogZGVsZXRlIG1vZGVscy50b2RvO1xyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGRlYm91bmNlKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHtcclxuICAgIHZhciBhcmdzLFxyXG4gICAgICAgICAgICBtYXhUaW1lb3V0SWQsXHJcbiAgICAgICAgICAgIHJlc3VsdCxcclxuICAgICAgICAgICAgc3RhbXAsXHJcbiAgICAgICAgICAgIHRoaXNBcmcsXHJcbiAgICAgICAgICAgIHRpbWVvdXRJZCxcclxuICAgICAgICAgICAgdHJhaWxpbmdDYWxsLFxyXG4gICAgICAgICAgICBsYXN0Q2FsbGVkID0gMCxcclxuICAgICAgICAgICAgbWF4V2FpdCA9IGZhbHNlLFxyXG4gICAgICAgICAgICB0cmFpbGluZyA9IHRydWU7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcclxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xyXG4gICAgfVxyXG4gICAgd2FpdCA9IHdhaXQgPCAwID8gMCA6ICgrd2FpdCB8fCAwKTtcclxuICAgIGlmIChvcHRpb25zID09PSB0cnVlKSB7XHJcbiAgICAgIHZhciBsZWFkaW5nID0gdHJ1ZTtcclxuICAgICAgdHJhaWxpbmcgPSBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcclxuICAgICAgbGVhZGluZyA9ICEhb3B0aW9ucy5sZWFkaW5nO1xyXG4gICAgICBtYXhXYWl0ID0gJ21heFdhaXQnIGluIG9wdGlvbnMgJiYgbmF0aXZlTWF4KCtvcHRpb25zLm1heFdhaXQgfHwgMCwgd2FpdCk7XHJcbiAgICAgIHRyYWlsaW5nID0gJ3RyYWlsaW5nJyBpbiBvcHRpb25zID8gISFvcHRpb25zLnRyYWlsaW5nIDogdHJhaWxpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gY2FuY2VsKCkge1xyXG4gICAgICBpZiAodGltZW91dElkKSB7XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG1heFRpbWVvdXRJZCkge1xyXG4gICAgICAgIGNsZWFyVGltZW91dChtYXhUaW1lb3V0SWQpO1xyXG4gICAgICB9XHJcbiAgICAgIGxhc3RDYWxsZWQgPSAwO1xyXG4gICAgICBtYXhUaW1lb3V0SWQgPSB0aW1lb3V0SWQgPSB0cmFpbGluZ0NhbGwgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gY29tcGxldGUoaXNDYWxsZWQsIGlkKSB7XHJcbiAgICAgIGlmIChpZCkge1xyXG4gICAgICAgIGNsZWFyVGltZW91dChpZCk7XHJcbiAgICAgIH1cclxuICAgICAgbWF4VGltZW91dElkID0gdGltZW91dElkID0gdHJhaWxpbmdDYWxsID0gdW5kZWZpbmVkO1xyXG4gICAgICBpZiAoaXNDYWxsZWQpIHtcclxuICAgICAgICBsYXN0Q2FsbGVkID0gbm93KCk7XHJcbiAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcclxuICAgICAgICBpZiAoIXRpbWVvdXRJZCAmJiAhbWF4VGltZW91dElkKSB7XHJcbiAgICAgICAgICBhcmdzID0gdGhpc0FyZyA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBkZWxheWVkKCkge1xyXG4gICAgICB2YXIgcmVtYWluaW5nID0gd2FpdCAtIChub3coKSAtIHN0YW1wKTtcclxuICAgICAgaWYgKHJlbWFpbmluZyA8PSAwIHx8IHJlbWFpbmluZyA+IHdhaXQpIHtcclxuICAgICAgICBjb21wbGV0ZSh0cmFpbGluZ0NhbGwsIG1heFRpbWVvdXRJZCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGltZW91dElkID0gc2V0VGltZW91dChkZWxheWVkLCByZW1haW5pbmcpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gbWF4RGVsYXllZCgpIHtcclxuICAgICAgY29tcGxldGUodHJhaWxpbmcsIHRpbWVvdXRJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZGVib3VuY2VkKCkge1xyXG4gICAgICBhcmdzID0gYXJndW1lbnRzO1xyXG4gICAgICBzdGFtcCA9IG5vdygpO1xyXG4gICAgICB0aGlzQXJnID0gdGhpcztcclxuICAgICAgdHJhaWxpbmdDYWxsID0gdHJhaWxpbmcgJiYgKHRpbWVvdXRJZCB8fCAhbGVhZGluZyk7XHJcblxyXG4gICAgICBpZiAobWF4V2FpdCA9PT0gZmFsc2UpIHtcclxuICAgICAgICB2YXIgbGVhZGluZ0NhbGwgPSBsZWFkaW5nICYmICF0aW1lb3V0SWQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKCFtYXhUaW1lb3V0SWQgJiYgIWxlYWRpbmcpIHtcclxuICAgICAgICAgIGxhc3RDYWxsZWQgPSBzdGFtcDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJlbWFpbmluZyA9IG1heFdhaXQgLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKSxcclxuICAgICAgICAgICAgICAgIGlzQ2FsbGVkID0gcmVtYWluaW5nIDw9IDAgfHwgcmVtYWluaW5nID4gbWF4V2FpdDtcclxuXHJcbiAgICAgICAgaWYgKGlzQ2FsbGVkKSB7XHJcbiAgICAgICAgICBpZiAobWF4VGltZW91dElkKSB7XHJcbiAgICAgICAgICAgIG1heFRpbWVvdXRJZCA9IGNsZWFyVGltZW91dChtYXhUaW1lb3V0SWQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbGFzdENhbGxlZCA9IHN0YW1wO1xyXG4gICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoIW1heFRpbWVvdXRJZCkge1xyXG4gICAgICAgICAgbWF4VGltZW91dElkID0gc2V0VGltZW91dChtYXhEZWxheWVkLCByZW1haW5pbmcpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoaXNDYWxsZWQgJiYgdGltZW91dElkKSB7XHJcbiAgICAgICAgdGltZW91dElkID0gY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoIXRpbWVvdXRJZCAmJiB3YWl0ICE9PSBtYXhXYWl0KSB7XHJcbiAgICAgICAgdGltZW91dElkID0gc2V0VGltZW91dChkZWxheWVkLCB3YWl0KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobGVhZGluZ0NhbGwpIHtcclxuICAgICAgICBpc0NhbGxlZCA9IHRydWU7XHJcbiAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaXNDYWxsZWQgJiYgIXRpbWVvdXRJZCAmJiAhbWF4VGltZW91dElkKSB7XHJcbiAgICAgICAgYXJncyA9IHRoaXNBcmcgPSB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBkZWJvdW5jZWQuY2FuY2VsID0gY2FuY2VsO1xyXG4gICAgcmV0dXJuIGRlYm91bmNlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZSBbbGFuZ3VhZ2UgdHlwZV0oaHR0cHM6Ly9lczUuZ2l0aHViLmlvLyN4OCkgb2YgYE9iamVjdGAuXHJcbiAgICogKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXHJcbiAgICpcclxuICAgKiBAc3RhdGljXHJcbiAgICogQG1lbWJlck9mIF9cclxuICAgKiBAY2F0ZWdvcnkgTGFuZ1xyXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICpcclxuICAgKiBfLmlzT2JqZWN0KHt9KTtcclxuICAgKiAvLyA9PiB0cnVlXHJcbiAgICpcclxuICAgKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XHJcbiAgICogLy8gPT4gdHJ1ZVxyXG4gICAqXHJcbiAgICogXy5pc09iamVjdCgxKTtcclxuICAgKiAvLyA9PiBmYWxzZVxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XHJcbiAgICAvLyBBdm9pZCBhIFY4IEpJVCBidWcgaW4gQ2hyb21lIDE5LTIwLlxyXG4gICAgLy8gU2VlIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0yMjkxIGZvciBtb3JlIGRldGFpbHMuXHJcbiAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcclxuICAgIHJldHVybiAhIXZhbHVlICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZGVib3VuY2U7XHJcblxyXG59KSgpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBkZWJvdW5jZTsiLCI7KGZ1bmN0aW9uKCl7ICd1c2Ugc3RyaWN0JztcclxuICBcclxuICB2YXIgYmVuZFBvaW50VXRpbGl0aWVzID0gcmVxdWlyZSgnLi9iZW5kUG9pbnRVdGlsaXRpZXMnKTtcclxuICB2YXIgZGVib3VuY2UgPSByZXF1aXJlKFwiLi9kZWJvdW5jZVwiKTtcclxuICBcclxuICAvLyByZWdpc3RlcnMgdGhlIGV4dGVuc2lvbiBvbiBhIGN5dG9zY2FwZSBsaWIgcmVmXHJcbiAgdmFyIHJlZ2lzdGVyID0gZnVuY3Rpb24oIGN5dG9zY2FwZSwgJCApe1xyXG4gICAgdmFyIHVpVXRpbGl0aWVzID0gcmVxdWlyZSgnLi9VSVV0aWxpdGllcycpO1xyXG4gICAgXHJcbiAgICBpZiggIWN5dG9zY2FwZSApeyByZXR1cm47IH0gLy8gY2FuJ3QgcmVnaXN0ZXIgaWYgY3l0b3NjYXBlIHVuc3BlY2lmaWVkXHJcblxyXG4gICAgdmFyIGRlZmF1bHRzID0ge1xyXG4gICAgICAvLyB0aGlzIGZ1bmN0aW9uIHNwZWNpZmllcyB0aGUgcG9pdGlvbnMgb2YgYmVuZCBwb2ludHNcclxuICAgICAgYmVuZFBvc2l0aW9uc0Z1bmN0aW9uOiBmdW5jdGlvbihlbGUpIHtcclxuICAgICAgICByZXR1cm4gZWxlLmRhdGEoJ2JlbmRQb2ludFBvc2l0aW9ucycpO1xyXG4gICAgICB9LFxyXG4gICAgICAvLyB3aGV0aGVyIHRvIGluaXRpbGl6ZSBiZW5kIHBvaW50cyBvbiBjcmVhdGlvbiBvZiB0aGlzIGV4dGVuc2lvbiBhdXRvbWF0aWNhbGx5XHJcbiAgICAgIGluaXRCZW5kUG9pbnRzQXV0b21hdGljYWxseTogdHJ1ZSxcclxuICAgICAgLy8gdGhlIGNsYXNzZXMgb2YgdGhvc2UgZWRnZXMgdGhhdCBzaG91bGQgYmUgaWdub3JlZFxyXG4gICAgICBpZ25vcmVkQ2xhc3NlczogW10sXHJcbiAgICAgIC8vIHdoZXRoZXIgdGhlIGJlbmQgZWRpdGluZyBvcGVyYXRpb25zIGFyZSB1bmRvYWJsZSAocmVxdWlyZXMgY3l0b3NjYXBlLXVuZG8tcmVkby5qcylcclxuICAgICAgdW5kb2FibGU6IGZhbHNlLFxyXG4gICAgICAvLyB0aGUgc2l6ZSBvZiBiZW5kIHNoYXBlIGlzIG9idGFpbmVkIGJ5IG11bHRpcGxpbmcgd2lkdGggb2YgZWRnZSB3aXRoIHRoaXMgcGFyYW1ldGVyXHJcbiAgICAgIGJlbmRTaGFwZVNpemVGYWN0b3I6IDMsXHJcbiAgICAgIC8vIHotaW5kZXggdmFsdWUgb2YgdGhlIGNhbnZhcyBpbiB3aGljaCBiZW5kIHBvaW50cyBhcmUgZHJhd25cclxuICAgICAgekluZGV4OiA5OTksICAgICAgXHJcbiAgICAgIC8vIHdoZXRoZXIgdG8gc3RhcnQgdGhlIHBsdWdpbiBpbiB0aGUgZW5hYmxlZCBzdGF0ZVxyXG4gICAgICBlbmFibGVkOiB0cnVlLFxyXG4gICAgICAvL0FuIG9wdGlvbiB0aGF0IGNvbnRyb2xzIHRoZSBkaXN0YW5jZSB3aXRoaW4gd2hpY2ggYSBiZW5kIHBvaW50IGlzIGNvbnNpZGVyZWQgXCJuZWFyXCIgdGhlIGxpbmUgc2VnbWVudCBiZXR3ZWVuIGl0cyB0d28gbmVpZ2hib3JzIGFuZCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZFxyXG4gICAgICBiZW5kUmVtb3ZhbFNlbnNpdGl2aXR5IDogOCxcclxuICAgICAgLy8gdGl0bGUgb2YgYWRkIGJlbmQgcG9pbnQgbWVudSBpdGVtIChVc2VyIG1heSBuZWVkIHRvIGFkanVzdCB3aWR0aCBvZiBtZW51IGl0ZW1zIGFjY29yZGluZyB0byBsZW5ndGggb2YgdGhpcyBvcHRpb24pXHJcbiAgICAgIGFkZEJlbmRNZW51SXRlbVRpdGxlOiBcIkFkZCBCZW5kIFBvaW50XCIsXHJcbiAgICAgIC8vIHRpdGxlIG9mIHJlbW92ZSBiZW5kIHBvaW50IG1lbnUgaXRlbSAoVXNlciBtYXkgbmVlZCB0byBhZGp1c3Qgd2lkdGggb2YgbWVudSBpdGVtcyBhY2NvcmRpbmcgdG8gbGVuZ3RoIG9mIHRoaXMgb3B0aW9uKVxyXG4gICAgICByZW1vdmVCZW5kTWVudUl0ZW1UaXRsZTogXCJSZW1vdmUgQmVuZCBQb2ludFwiLFxyXG4gICAgICAvLyB3aGV0aGVyIHRoZSBiZW5kIHBvaW50IGNhbiBiZSBtb3ZlZCBieSBhcnJvd3NcclxuICAgICAgbW92ZVNlbGVjdGVkQmVuZFBvaW50c09uS2V5RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIFxyXG4gICAgdmFyIG9wdGlvbnM7XHJcbiAgICB2YXIgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICAgIFxyXG4gICAgLy8gTWVyZ2UgZGVmYXVsdCBvcHRpb25zIHdpdGggdGhlIG9uZXMgY29taW5nIGZyb20gcGFyYW1ldGVyXHJcbiAgICBmdW5jdGlvbiBleHRlbmQoZGVmYXVsdHMsIG9wdGlvbnMpIHtcclxuICAgICAgdmFyIG9iaiA9IHt9O1xyXG5cclxuICAgICAgZm9yICh2YXIgaSBpbiBkZWZhdWx0cykge1xyXG4gICAgICAgIG9ialtpXSA9IGRlZmF1bHRzW2ldO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmb3IgKHZhciBpIGluIG9wdGlvbnMpIHtcclxuICAgICAgICBpZihpID09IFwiYmVuZFJlbW92YWxTZW5zaXRpdml0eVwiKXtcclxuICAgICAgICAgIHZhciB2YWx1ZSA9IG9wdGlvbnNbaV07XHJcbiAgICAgICAgICAgaWYoIWlzTmFOKHZhbHVlKSlcclxuICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgaWYodmFsdWUgPj0gMCAmJiB2YWx1ZSA8PSAyMCl7XHJcbiAgICAgICAgICAgICAgICBvYmpbaV0gPSBvcHRpb25zW2ldO1xyXG4gICAgICAgICAgICAgIH1lbHNlIGlmKHZhbHVlIDwgMCl7XHJcbiAgICAgICAgICAgICAgICBvYmpbaV0gPSAwXHJcbiAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBvYmpbaV0gPSAyMFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICB9XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICBvYmpbaV0gPSBvcHRpb25zW2ldO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9O1xyXG4gICAgXHJcbiAgICBjeXRvc2NhcGUoICdjb3JlJywgJ2VkZ2VFZGl0aW5nJywgZnVuY3Rpb24ob3B0cyl7XHJcbiAgICAgIHZhciBjeSA9IHRoaXM7XHJcbiAgICAgIFxyXG4gICAgICBpZiggb3B0cyA9PT0gJ2luaXRpYWxpemVkJyApIHtcclxuICAgICAgICByZXR1cm4gaW5pdGlhbGl6ZWQ7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIGlmKCBvcHRzICE9PSAnZ2V0JyApIHtcclxuICAgICAgICAvLyBtZXJnZSB0aGUgb3B0aW9ucyB3aXRoIGRlZmF1bHQgb25lc1xyXG4gICAgICAgIG9wdGlvbnMgPSBleHRlbmQoZGVmYXVsdHMsIG9wdHMpO1xyXG4gICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy8gZGVmaW5lIGVkZ2ViZW5kZWRpdGluZy1oYXNiZW5kcG9pbnRzIGNzcyBjbGFzc1xyXG4gICAgICAgIGN5LnN0eWxlKCkuc2VsZWN0b3IoJy5lZGdlYmVuZGVkaXRpbmctaGFzYmVuZHBvaW50cycpLmNzcyh7XHJcbiAgICAgICAgICAnY3VydmUtc3R5bGUnOiAnc2VnbWVudHMnLFxyXG4gICAgICAgICAgJ3NlZ21lbnQtZGlzdGFuY2VzJzogZnVuY3Rpb24gKGVsZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gYmVuZFBvaW50VXRpbGl0aWVzLmdldFNlZ21lbnREaXN0YW5jZXNTdHJpbmcoZWxlKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICAnc2VnbWVudC13ZWlnaHRzJzogZnVuY3Rpb24gKGVsZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gYmVuZFBvaW50VXRpbGl0aWVzLmdldFNlZ21lbnRXZWlnaHRzU3RyaW5nKGVsZSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgJ2VkZ2UtZGlzdGFuY2VzJzogJ25vZGUtcG9zaXRpb24nXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGJlbmRQb2ludFV0aWxpdGllcy5zZXRJZ25vcmVkQ2xhc3NlcyhvcHRpb25zLmlnbm9yZWRDbGFzc2VzKTtcclxuXHJcbiAgICAgICAgLy8gaW5pdCBiZW5kIHBvc2l0aW9ucyBjb25kaXRpb25hbGx5XHJcbiAgICAgICAgaWYgKG9wdGlvbnMuaW5pdEJlbmRQb2ludHNBdXRvbWF0aWNhbGx5KSB7XHJcbiAgICAgICAgICBiZW5kUG9pbnRVdGlsaXRpZXMuaW5pdEJlbmRQb2ludHMob3B0aW9ucy5iZW5kUG9zaXRpb25zRnVuY3Rpb24sIGN5LmVkZ2VzKCksIG9wdGlvbnMuaWdub3JlZENsYXNzZXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYob3B0aW9ucy5lbmFibGVkKVxyXG4gICAgICAgICAgdWlVdGlsaXRpZXMob3B0aW9ucywgY3kpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHVpVXRpbGl0aWVzKFwidW5iaW5kXCIsIGN5KTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgdmFyIGluc3RhbmNlID0gaW5pdGlhbGl6ZWQgPyB7XHJcbiAgICAgICAgLypcclxuICAgICAgICAqIGdldCBzZWdtZW50IHBvaW50cyBvZiB0aGUgZ2l2ZW4gZWRnZSBpbiBhbiBhcnJheSBBLFxyXG4gICAgICAgICogQVsyICogaV0gaXMgdGhlIHggY29vcmRpbmF0ZSBhbmQgQVsyICogaSArIDFdIGlzIHRoZSB5IGNvb3JkaW5hdGVcclxuICAgICAgICAqIG9mIHRoZSBpdGggYmVuZCBwb2ludC4gKFJldHVybnMgdW5kZWZpbmVkIGlmIHRoZSBjdXJ2ZSBzdHlsZSBpcyBub3Qgc2VnbWVudHMpXHJcbiAgICAgICAgKi9cclxuICAgICAgICBnZXRTZWdtZW50UG9pbnRzOiBmdW5jdGlvbihlbGUpIHtcclxuICAgICAgICAgIHJldHVybiBiZW5kUG9pbnRVdGlsaXRpZXMuZ2V0U2VnbWVudFBvaW50cyhlbGUpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8gSW5pdGlsaXplIGJlbmQgcG9pbnRzIGZvciB0aGUgZ2l2ZW4gZWRnZXMgdXNpbmcgJ29wdGlvbnMuYmVuZFBvc2l0aW9uc0Z1bmN0aW9uJ1xyXG4gICAgICAgIGluaXRCZW5kUG9pbnRzOiBmdW5jdGlvbihlbGVzKSB7XHJcbiAgICAgICAgICBiZW5kUG9pbnRVdGlsaXRpZXMuaW5pdEJlbmRQb2ludHMob3B0aW9ucy5iZW5kUG9zaXRpb25zRnVuY3Rpb24sIGVsZXMpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGVsZXRlU2VsZWN0ZWRCZW5kUG9pbnQ6IGZ1bmN0aW9uKGVsZSwgaW5kZXgpIHtcclxuICAgICAgICAgIGJlbmRQb2ludFV0aWxpdGllcy5yZW1vdmVCZW5kUG9pbnQoZWxlLGluZGV4KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gOiB1bmRlZmluZWQ7XHJcblxyXG4gICAgICByZXR1cm4gaW5zdGFuY2U7IC8vIGNoYWluYWJpbGl0eVxyXG4gICAgfSApO1xyXG5cclxuICB9O1xyXG5cclxuICBpZiggdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMgKXsgLy8gZXhwb3NlIGFzIGEgY29tbW9uanMgbW9kdWxlXHJcbiAgICBtb2R1bGUuZXhwb3J0cyA9IHJlZ2lzdGVyO1xyXG4gIH1cclxuXHJcbiAgaWYoIHR5cGVvZiBkZWZpbmUgIT09ICd1bmRlZmluZWQnICYmIGRlZmluZS5hbWQgKXsgLy8gZXhwb3NlIGFzIGFuIGFtZC9yZXF1aXJlanMgbW9kdWxlXHJcbiAgICBkZWZpbmUoJ2N5dG9zY2FwZS1lZGdlLWVkaXRpbmcnLCBmdW5jdGlvbigpe1xyXG4gICAgICByZXR1cm4gcmVnaXN0ZXI7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGlmKCB0eXBlb2YgY3l0b3NjYXBlICE9PSAndW5kZWZpbmVkJyAmJiAkICl7IC8vIGV4cG9zZSB0byBnbG9iYWwgY3l0b3NjYXBlIChpLmUuIHdpbmRvdy5jeXRvc2NhcGUpXHJcbiAgICByZWdpc3RlciggY3l0b3NjYXBlLCAkICk7XHJcbiAgfVxyXG5cclxufSkoKTtcclxuIiwidmFyIHJlY29ubmVjdGlvblV0aWxpdGllcyA9IHtcclxuXHJcbiAgICAvLyBjcmVhdGVzIGFuZCByZXR1cm5zIGEgZHVtbXkgbm9kZSB3aGljaCBpcyBjb25uZWN0ZWQgdG8gdGhlIGRpc2Nvbm5lY3RlZCBlZGdlXHJcbiAgICBkaXNjb25uZWN0RWRnZTogZnVuY3Rpb24gKGVkZ2UsIGN5LCBwb3NpdGlvbiwgZGlzY29ubmVjdGVkRW5kKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdmFyIGR1bW15Tm9kZSA9IHtcclxuICAgICAgICAgICAgZGF0YTogeyBcclxuICAgICAgICAgICAgICBpZDogJ253dF9yZWNvbm5lY3RFZGdlX2R1bW15JyxcclxuICAgICAgICAgICAgICBwb3J0czogW10sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgd2lkdGg6IDEsXHJcbiAgICAgICAgICAgICAgaGVpZ2h0OiAxLFxyXG4gICAgICAgICAgICAgICd2aXNpYmlsaXR5JzogJ2hpZGRlbidcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcmVuZGVyZWRQb3NpdGlvbjogcG9zaXRpb25cclxuICAgICAgICB9O1xyXG4gICAgICAgIGN5LmFkZChkdW1teU5vZGUpO1xyXG5cclxuICAgICAgICB2YXIgbG9jID0gKGRpc2Nvbm5lY3RlZEVuZCA9PT0gJ3NvdXJjZScpID8gXHJcbiAgICAgICAgICAgIHtzb3VyY2U6IGR1bW15Tm9kZS5kYXRhLmlkfSA6IFxyXG4gICAgICAgICAgICB7dGFyZ2V0OiBkdW1teU5vZGUuZGF0YS5pZH07XHJcblxyXG4gICAgICAgIGVkZ2UgPSBlZGdlLm1vdmUobG9jKVswXTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZHVtbXlOb2RlOiBjeS5ub2RlcyhcIiNcIiArIGR1bW15Tm9kZS5kYXRhLmlkKVswXSxcclxuICAgICAgICAgICAgZWRnZTogZWRnZVxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIGNvbm5lY3RFZGdlOiBmdW5jdGlvbiAoZWRnZSwgbm9kZSwgbG9jYXRpb24pIHtcclxuICAgICAgICBpZighZWRnZS5pc0VkZ2UoKSB8fCAhbm9kZS5pc05vZGUoKSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICB2YXIgbG9jID0ge307XHJcbiAgICAgICAgaWYobG9jYXRpb24gPT09ICdzb3VyY2UnKVxyXG4gICAgICAgICAgICBsb2Muc291cmNlID0gbm9kZS5pZCgpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGVsc2UgaWYobG9jYXRpb24gPT09ICd0YXJnZXQnKVxyXG4gICAgICAgICAgICBsb2MudGFyZ2V0ID0gbm9kZS5pZCgpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICByZXR1cm4gZWRnZS5tb3ZlKGxvYylbMF07XHJcbiAgICB9LFxyXG5cclxuICAgIGNvcHlFZGdlOiBmdW5jdGlvbiAob2xkRWRnZSwgbmV3RWRnZSkge1xyXG4gICAgICAgIHRoaXMuY29weUJlbmRQb2ludHMob2xkRWRnZSwgbmV3RWRnZSk7XHJcbiAgICAgICAgdGhpcy5jb3B5U3R5bGUob2xkRWRnZSwgbmV3RWRnZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIGNvcHlTdHlsZTogZnVuY3Rpb24gKG9sZEVkZ2UsIG5ld0VkZ2UpIHtcclxuICAgICAgICBpZihvbGRFZGdlICYmIG5ld0VkZ2Upe1xyXG4gICAgICAgICAgICBuZXdFZGdlLmRhdGEoJ2xpbmUtY29sb3InLCBvbGRFZGdlLmRhdGEoJ2xpbmUtY29sb3InKSk7XHJcbiAgICAgICAgICAgIG5ld0VkZ2UuZGF0YSgnd2lkdGgnLCBvbGRFZGdlLmRhdGEoJ3dpZHRoJykpO1xyXG4gICAgICAgICAgICBuZXdFZGdlLmRhdGEoJ2NhcmRpbmFsaXR5Jywgb2xkRWRnZS5kYXRhKCdjYXJkaW5hbGl0eScpKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGNvcHlCZW5kUG9pbnRzOiBmdW5jdGlvbiAob2xkRWRnZSwgbmV3RWRnZSkge1xyXG4gICAgICAgIGlmKG9sZEVkZ2UuaGFzQ2xhc3MoJ2VkZ2ViZW5kZWRpdGluZy1oYXNiZW5kcG9pbnRzJykpe1xyXG4gICAgICAgICAgICB2YXIgYnBEaXN0YW5jZXMgPSBvbGRFZGdlLmRhdGEoJ2N5ZWRnZWJlbmRlZGl0aW5nRGlzdGFuY2VzJyk7XHJcbiAgICAgICAgICAgIHZhciBicFdlaWdodHMgPSBvbGRFZGdlLmRhdGEoJ2N5ZWRnZWJlbmRlZGl0aW5nV2VpZ2h0cycpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgbmV3RWRnZS5kYXRhKCdjeWVkZ2ViZW5kZWRpdGluZ0Rpc3RhbmNlcycsIGJwRGlzdGFuY2VzKTtcclxuICAgICAgICAgICAgbmV3RWRnZS5kYXRhKCdjeWVkZ2ViZW5kZWRpdGluZ1dlaWdodHMnLCBicFdlaWdodHMpO1xyXG4gICAgICAgICAgICBuZXdFZGdlLmFkZENsYXNzKCdlZGdlYmVuZGVkaXRpbmctaGFzYmVuZHBvaW50cycpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbn07XHJcbiAgXHJcbm1vZHVsZS5leHBvcnRzID0gcmVjb25uZWN0aW9uVXRpbGl0aWVzO1xyXG4gICIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGN5LCBiZW5kUG9pbnRVdGlsaXRpZXMsIHBhcmFtcykge1xyXG4gIGlmIChjeS51bmRvUmVkbyA9PSBudWxsKVxyXG4gICAgcmV0dXJuO1xyXG5cclxuICB2YXIgdXIgPSBjeS51bmRvUmVkbyh7XHJcbiAgICBkZWZhdWx0QWN0aW9uczogZmFsc2UsXHJcbiAgICBpc0RlYnVnOiB0cnVlXHJcbiAgfSk7XHJcblxyXG4gIGZ1bmN0aW9uIGNoYW5nZUJlbmRQb2ludHMocGFyYW0pIHtcclxuICAgIHZhciBlZGdlID0gY3kuZ2V0RWxlbWVudEJ5SWQocGFyYW0uZWRnZS5pZCgpKTtcclxuICAgIHZhciByZXN1bHQgPSB7XHJcbiAgICAgIGVkZ2U6IGVkZ2UsXHJcbiAgICAgIHdlaWdodHM6IHBhcmFtLnNldCA/IGVkZ2UuZGF0YSgnY3llZGdlYmVuZGVkaXRpbmdXZWlnaHRzJykgOiBwYXJhbS53ZWlnaHRzLFxyXG4gICAgICBkaXN0YW5jZXM6IHBhcmFtLnNldCA/IGVkZ2UuZGF0YSgnY3llZGdlYmVuZGVkaXRpbmdEaXN0YW5jZXMnKSA6IHBhcmFtLmRpc3RhbmNlcyxcclxuICAgICAgc2V0OiB0cnVlLy9BcyB0aGUgcmVzdWx0IHdpbGwgbm90IGJlIHVzZWQgZm9yIHRoZSBmaXJzdCBmdW5jdGlvbiBjYWxsIHBhcmFtcyBzaG91bGQgYmUgdXNlZCB0byBzZXQgdGhlIGRhdGFcclxuICAgIH07XHJcblxyXG4gICAgdmFyIGhhc0JlbmQgPSBwYXJhbS53ZWlnaHRzICYmIHBhcmFtLndlaWdodHMubGVuZ3RoID4gMDtcclxuXHJcbiAgICAvL0NoZWNrIGlmIHdlIG5lZWQgdG8gc2V0IHRoZSB3ZWlnaHRzIGFuZCBkaXN0YW5jZXMgYnkgdGhlIHBhcmFtIHZhbHVlc1xyXG4gICAgaWYgKHBhcmFtLnNldCkge1xyXG4gICAgICBoYXNCZW5kID8gZWRnZS5kYXRhKCdjeWVkZ2ViZW5kZWRpdGluZ1dlaWdodHMnLCBwYXJhbS53ZWlnaHRzKSA6IGVkZ2UucmVtb3ZlRGF0YSgnY3llZGdlYmVuZGVkaXRpbmdXZWlnaHRzJyk7XHJcbiAgICAgIGhhc0JlbmQgPyBlZGdlLmRhdGEoJ2N5ZWRnZWJlbmRlZGl0aW5nRGlzdGFuY2VzJywgcGFyYW0uZGlzdGFuY2VzKSA6IGVkZ2UucmVtb3ZlRGF0YSgnY3llZGdlYmVuZGVkaXRpbmdEaXN0YW5jZXMnKTtcclxuXHJcbiAgICAgIC8vcmVmcmVzaCB0aGUgY3VydmUgc3R5bGUgYXMgdGhlIG51bWJlciBvZiBiZW5kIHBvaW50IHdvdWxkIGJlIGNoYW5nZWQgYnkgdGhlIHByZXZpb3VzIG9wZXJhdGlvblxyXG4gICAgICBpZiAoaGFzQmVuZCkge1xyXG4gICAgICAgIGVkZ2UuYWRkQ2xhc3MoJ2VkZ2ViZW5kZWRpdGluZy1oYXNiZW5kcG9pbnRzJyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgZWRnZS5yZW1vdmVDbGFzcygnZWRnZWJlbmRlZGl0aW5nLWhhc2JlbmRwb2ludHMnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBlZGdlLnRyaWdnZXIoJ2N5ZWRnZWJlbmRlZGl0aW5nLmNoYW5nZUJlbmRQb2ludHMnKTtcclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gbW92ZURvKGFyZykge1xyXG4gICAgICBpZiAoYXJnLmZpcnN0VGltZSkge1xyXG4gICAgICAgICAgZGVsZXRlIGFyZy5maXJzdFRpbWU7XHJcbiAgICAgICAgICByZXR1cm4gYXJnO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgZWRnZXMgPSBhcmcuZWRnZXM7XHJcbiAgICAgIHZhciBwb3NpdGlvbkRpZmYgPSBhcmcucG9zaXRpb25EaWZmO1xyXG4gICAgICB2YXIgcmVzdWx0ID0ge1xyXG4gICAgICAgICAgZWRnZXM6IGVkZ2VzLFxyXG4gICAgICAgICAgcG9zaXRpb25EaWZmOiB7XHJcbiAgICAgICAgICAgICAgeDogLXBvc2l0aW9uRGlmZi54LFxyXG4gICAgICAgICAgICAgIHk6IC1wb3NpdGlvbkRpZmYueVxyXG4gICAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgICBtb3ZlQmVuZFBvaW50c1VuZG9hYmxlKHBvc2l0aW9uRGlmZiwgZWRnZXMpO1xyXG5cclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIG1vdmVCZW5kUG9pbnRzVW5kb2FibGUocG9zaXRpb25EaWZmLCBlZGdlcykge1xyXG4gICAgICBlZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKCBlZGdlICl7XHJcbiAgICAgICAgICBlZGdlID0gY3kuZ2V0RWxlbWVudEJ5SWQocGFyYW0uZWRnZS5pZCgpKTtcclxuICAgICAgICAgIHZhciBwcmV2aW91c0JlbmRQb2ludHNQb3NpdGlvbiA9IGJlbmRQb2ludFV0aWxpdGllcy5nZXRTZWdtZW50UG9pbnRzKGVkZ2UpO1xyXG4gICAgICAgICAgdmFyIG5leHRCZW5kUG9pbnRzUG9zaXRpb24gPSBbXTtcclxuICAgICAgICAgIGlmIChwcmV2aW91c0JlbmRQb2ludHNQb3NpdGlvbiAhPSB1bmRlZmluZWQpXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgZm9yIChpPTA7IGk8cHJldmlvdXNCZW5kUG9pbnRzUG9zaXRpb24ubGVuZ3RoOyBpKz0yKVxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgbmV4dEJlbmRQb2ludHNQb3NpdGlvbi5wdXNoKHt4OiBwcmV2aW91c0JlbmRQb2ludHNQb3NpdGlvbltpXStwb3NpdGlvbkRpZmYueCwgeTogcHJldmlvdXNCZW5kUG9pbnRzUG9zaXRpb25baSsxXStwb3NpdGlvbkRpZmYueX0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlZGdlLmRhdGEoJ2JlbmRQb2ludFBvc2l0aW9ucycsbmV4dEJlbmRQb2ludHNQb3NpdGlvbik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgYmVuZFBvaW50VXRpbGl0aWVzLmluaXRCZW5kUG9pbnRzKHBhcmFtcy5iZW5kUG9zaXRpb25zRnVuY3Rpb24sIGVkZ2VzKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHJlY29ubmVjdEVkZ2UocGFyYW0pe1xyXG4gICAgdmFyIGVkZ2UgICAgICA9IHBhcmFtLmVkZ2U7XHJcbiAgICB2YXIgbG9jYXRpb24gID0gcGFyYW0ubG9jYXRpb247XHJcbiAgICB2YXIgb2xkTG9jICAgID0gcGFyYW0ub2xkTG9jO1xyXG5cclxuICAgIGVkZ2UgPSBlZGdlLm1vdmUobG9jYXRpb24pWzBdO1xyXG5cclxuICAgIHZhciByZXN1bHQgPSB7XHJcbiAgICAgIGVkZ2U6ICAgICBlZGdlLFxyXG4gICAgICBsb2NhdGlvbjogb2xkTG9jLFxyXG4gICAgICBvbGRMb2M6ICAgbG9jYXRpb25cclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiByZW1vdmVSZWNvbm5lY3RlZEVkZ2UocGFyYW0pe1xyXG4gICAgdmFyIG9sZEVkZ2UgPSBwYXJhbS5vbGRFZGdlO1xyXG4gICAgdmFyIHRtcCA9IGN5LmdldEVsZW1lbnRCeUlkKG9sZEVkZ2UuZGF0YSgnaWQnKSk7XHJcbiAgICBpZih0bXAgJiYgdG1wLmxlbmd0aCA+IDApXHJcbiAgICAgIG9sZEVkZ2UgPSB0bXA7XHJcblxyXG4gICAgdmFyIG5ld0VkZ2UgPSBwYXJhbS5uZXdFZGdlO1xyXG4gICAgdmFyIHRtcCA9IGN5LmdldEVsZW1lbnRCeUlkKG5ld0VkZ2UuZGF0YSgnaWQnKSk7XHJcbiAgICBpZih0bXAgJiYgdG1wLmxlbmd0aCA+IDApXHJcbiAgICAgIG5ld0VkZ2UgPSB0bXA7XHJcblxyXG4gICAgaWYob2xkRWRnZS5pbnNpZGUoKSl7XHJcbiAgICAgIG9sZEVkZ2UgPSBvbGRFZGdlLnJlbW92ZSgpWzBdO1xyXG4gICAgfSBcclxuICAgICAgXHJcbiAgICBpZihuZXdFZGdlLnJlbW92ZWQoKSl7XHJcbiAgICAgIG5ld0VkZ2UgPSBuZXdFZGdlLnJlc3RvcmUoKTtcclxuICAgICAgbmV3RWRnZS51bnNlbGVjdCgpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBvbGRFZGdlOiBuZXdFZGdlLFxyXG4gICAgICBuZXdFZGdlOiBvbGRFZGdlXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgdXIuYWN0aW9uKCdjaGFuZ2VCZW5kUG9pbnRzJywgY2hhbmdlQmVuZFBvaW50cywgY2hhbmdlQmVuZFBvaW50cyk7XHJcbiAgdXIuYWN0aW9uKCdtb3ZlQmVuZFBvaW50cycsIG1vdmVEbywgbW92ZURvKTtcclxuICB1ci5hY3Rpb24oJ3JlY29ubmVjdEVkZ2UnLCByZWNvbm5lY3RFZGdlLCByZWNvbm5lY3RFZGdlKTtcclxuICB1ci5hY3Rpb24oJ3JlbW92ZVJlY29ubmVjdGVkRWRnZScsIHJlbW92ZVJlY29ubmVjdGVkRWRnZSwgcmVtb3ZlUmVjb25uZWN0ZWRFZGdlKTtcclxufTtcclxuIl19\n","module.exports = require(\"cytoscape-cose-bilkent\");",";(function () {\n 'use strict';\n\n var debounce = (function(){\n /**\n * lodash 3.1.1 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n /** Used as the `TypeError` message for \"Functions\" methods. */\n var FUNC_ERROR_TEXT = 'Expected a function';\n\n /* Native method references for those with the same name as other `lodash` methods. */\n var nativeMax = Math.max,\n nativeNow = Date.now;\n\n /**\n * Gets the number of milliseconds that have elapsed since the Unix epoch\n * (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @category Date\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => logs the number of milliseconds it took for the deferred function to be invoked\n */\n var now = nativeNow || function() {\n return new Date().getTime();\n };\n\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed invocations. Provide an options object to indicate that `func`\n * should be invoked on the leading and/or trailing edge of the `wait` timeout.\n * Subsequent calls to the debounced function return the result of the last\n * `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked\n * on the trailing edge of the timeout only if the the debounced function is\n * invoked more than once during the `wait` timeout.\n *\n * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options] The options object.\n * @param {boolean} [options.leading=false] Specify invoking on the leading\n * edge of the timeout.\n * @param {number} [options.maxWait] The maximum time `func` is allowed to be\n * delayed before it's invoked.\n * @param {boolean} [options.trailing=true] Specify invoking on the trailing\n * edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // avoid costly calculations while the window size is in flux\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // invoke `sendMail` when the click event is fired, debouncing subsequent calls\n * jQuery('#postbox').on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // ensure `batchLog` is invoked once after 1 second of debounced calls\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', _.debounce(batchLog, 250, {\n * 'maxWait': 1000\n * }));\n *\n * // cancel a debounced call\n * var todoChanges = _.debounce(batchLog, 1000);\n * Object.observe(models.todo, todoChanges);\n *\n * Object.observe(models, function(changes) {\n * if (_.find(changes, { 'user': 'todo', 'type': 'delete'})) {\n * todoChanges.cancel();\n * }\n * }, ['delete']);\n *\n * // ...at some point `models.todo` is changed\n * models.todo.completed = true;\n *\n * // ...before 1 second has passed `models.todo` is deleted\n * // which cancels the debounced `todoChanges` call\n * delete models.todo;\n */\n function debounce(func, wait, options) {\n var args,\n maxTimeoutId,\n result,\n stamp,\n thisArg,\n timeoutId,\n trailingCall,\n lastCalled = 0,\n maxWait = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = wait < 0 ? 0 : (+wait || 0);\n if (options === true) {\n var leading = true;\n trailing = false;\n } else if (isObject(options)) {\n leading = !!options.leading;\n maxWait = 'maxWait' in options && nativeMax(+options.maxWait || 0, wait);\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function cancel() {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n if (maxTimeoutId) {\n clearTimeout(maxTimeoutId);\n }\n lastCalled = 0;\n maxTimeoutId = timeoutId = trailingCall = undefined;\n }\n\n function complete(isCalled, id) {\n if (id) {\n clearTimeout(id);\n }\n maxTimeoutId = timeoutId = trailingCall = undefined;\n if (isCalled) {\n lastCalled = now();\n result = func.apply(thisArg, args);\n if (!timeoutId && !maxTimeoutId) {\n args = thisArg = undefined;\n }\n }\n }\n\n function delayed() {\n var remaining = wait - (now() - stamp);\n if (remaining <= 0 || remaining > wait) {\n complete(trailingCall, maxTimeoutId);\n } else {\n timeoutId = setTimeout(delayed, remaining);\n }\n }\n\n function maxDelayed() {\n complete(trailing, timeoutId);\n }\n\n function debounced() {\n args = arguments;\n stamp = now();\n thisArg = this;\n trailingCall = trailing && (timeoutId || !leading);\n\n if (maxWait === false) {\n var leadingCall = leading && !timeoutId;\n } else {\n if (!maxTimeoutId && !leading) {\n lastCalled = stamp;\n }\n var remaining = maxWait - (stamp - lastCalled),\n isCalled = remaining <= 0 || remaining > maxWait;\n\n if (isCalled) {\n if (maxTimeoutId) {\n maxTimeoutId = clearTimeout(maxTimeoutId);\n }\n lastCalled = stamp;\n result = func.apply(thisArg, args);\n }\n else if (!maxTimeoutId) {\n maxTimeoutId = setTimeout(maxDelayed, remaining);\n }\n }\n if (isCalled && timeoutId) {\n timeoutId = clearTimeout(timeoutId);\n }\n else if (!timeoutId && wait !== maxWait) {\n timeoutId = setTimeout(delayed, wait);\n }\n if (leadingCall) {\n isCalled = true;\n result = func.apply(thisArg, args);\n }\n if (isCalled && !timeoutId && !maxTimeoutId) {\n args = thisArg = undefined;\n }\n return result;\n }\n debounced.cancel = cancel;\n return debounced;\n }\n\n /**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\n function isObject(value) {\n // Avoid a V8 JIT bug in Chrome 19-20.\n // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n }\n\n return debounce;\n\n })();\n\n // registers the extension on a cytoscape lib ref\n var register = function (cytoscape, $, Konva) {\n\n // can't register if required libraries does not exist\n if (!cytoscape || !$ || !Konva) {\n return;\n }\n\n // var canvas;\n var stageId = 0;\n\n function defaults () {\n return {\n padding: 5, // spacing between node and grapples/rectangle\n undoable: true, // and if cy.undoRedo exists\n\n grappleSize: 8, // size of square dots\n grappleColor: \"green\", // color of grapples\n inactiveGrappleStroke: \"inside 1px blue\",\n //boundingRectangle: true, // enable/disable bounding rectangle\n boundingRectangleLineDash: [4, 8], // line dash of bounding rectangle\n boundingRectangleLineColor: \"red\",\n boundingRectangleLineWidth: 1.5,\n zIndex: 999,\n\n moveSelectedNodesOnKeyEvents: function () {\n return true;\n },\n\n minWidth: function (node) {\n var data = node.data(\"resizeMinWidth\");\n return data ? data : 15;\n }, // a function returns min width of node\n minHeight: function (node) {\n var data = node.data(\"resizeMinHeight\");\n return data ? data : 15;\n }, // a function returns min height of node\n\n // Getters for some style properties the defaults returns ele.css('property-name')\n // you are encouraged to override these getters\n getCompoundMinWidth: function(node) {\n return node.css('min-width');\n },\n getCompoundMinHeight: function(node) {\n return node.css('min-height');\n },\n getCompoundMinWidthBiasRight: function(node) {\n return node.css('min-width-bias-right');\n },\n getCompoundMinWidthBiasLeft: function(node) {\n return node.css('min-width-bias-left');\n },\n getCompoundMinHeightBiasTop: function(node) {\n return node.css('min-height-bias-top');\n },\n getCompoundMinHeightBiasBottom: function(node) {\n return node.css('min-height-bias-bottom');\n },\n\n // These optional function will be executed to set the width/height of a node in this extension\n // Using node.css() is not a recommended way (http://js.cytoscape.org/#eles.style) to do this. Therefore, overriding these defaults\n // so that a data field or something like that will be used to set node dimentions instead of directly calling node.css()\n // is highly recommended (Of course this will require a proper setting in the stylesheet).\n setWidth: function(node, width) {\n node.css('width', width);\n },\n setHeight: function(node, height) {\n node.css('height', height);\n },\n setCompoundMinWidth: function(node, minWidth) {\n node.css('min-width', minWidth);\n },\n setCompoundMinHeight: function(node, minHeight) {\n node.css('min-height', minHeight);\n },\n setCompoundMinWidthBiasLeft: function(node, minWidthBiasLeft) {\n node.css('min-width-bias-left', minWidthBiasLeft);\n },\n setCompoundMinWidthBiasRight: function(node, minHeightBiasRight) {\n node.css('min-width-bias-right', minHeightBiasRight);\n },\n setCompoundMinHeightBiasTop: function(node, minHeightBiasTop) {\n node.css('min-height-bias-top', minHeightBiasTop);\n },\n setCompoundMinHeightBiasBottom: function(node, minHeightBiasBottom) {\n node.css('min-height-bias-bottom', minHeightBiasBottom);\n },\n\n isFixedAspectRatioResizeMode: function (node) { return node.is(\".fixedAspectRatioResizeMode\") },// with only 4 active grapples (at corners)\n isNoResizeMode: function (node) { return node.is(\".noResizeMode, :parent\") }, // no active grapples\n isNoControlsMode: function (node) { return node.is(\".noControlsMode\") }, // no controls - do not draw grapples\n\n cursors: { // See http://www.w3schools.com/cssref/tryit.asp?filename=trycss_cursor\n // May take any \"cursor\" css property\n default: \"default\", // to be set after resizing finished or mouseleave\n inactive: \"not-allowed\",\n nw: \"nw-resize\",\n n: \"n-resize\",\n ne: \"ne-resize\",\n e: \"e-resize\",\n se: \"se-resize\",\n s: \"s-resize\",\n sw: \"sw-resize\",\n w: \"w-resize\"\n },\n\n resizeToContentCueEnabled: function (node) {\n return true;\n },\n resizeToContentFunction: undefined,\n resizeToContentCuePosition: 'bottom-right',\n resizeToContentCueImage: '/node_modules/cytoscape-node-resize/resizeCue.svg',\n };\n }\n\n // Get the whole scratchpad reserved for this extension (on an element or core) or get a single property of it\n function getScratch (cyOrEle, name) {\n if (cyOrEle.scratch('_cyNodeResize') === undefined) {\n cyOrEle.scratch('_cyNodeResize', {});\n }\n\n var scratch = cyOrEle.scratch('_cyNodeResize');\n var retVal = ( name === undefined ) ? scratch : scratch[name];\n return retVal;\n }\n\n // Set a single property on scratchpad of an element or the core\n function setScratch (cyOrEle, name, val) {\n getScratch(cyOrEle)[name] = val;\n }\n\n cytoscape('core', 'nodeResize', function (opts) {\n\n var cy = this;\n\n // If options parameter is 'get' string then just return the api\n if (opts === 'get') {\n return getScratch(cy, 'api');\n }\n\n // the controls object represents the grapples and bounding rectangle\n // only one can exist at any time\n var controls;\n\n // Events to bind and unbind\n var eUnselectNode, ePositionNode, eZoom, ePan, eSelectNode, eRemoveNode, eAddNode, eFreeNode, eUndoRedo;\n\n var options = $.extend(true, defaults(), opts);\n\n var canvasElementId = 'cy-node-resize' + stageId;\n stageId++;\n\n var $canvasElement = $('
');\n var $container = $(cy.container());\n $container.append($canvasElement);\n\n var stage = new Konva.Stage({\n container: canvasElementId, // id of container
\n width: $container.width(),\n height: $container.height()\n });\n // then create layer\n var canvas = new Konva.Layer();\n // add the layer to the stage\n stage.add(canvas);\n\n // Resize the canvas\n var sizeCanvas = debounce( function(){\n $canvasElement\n .attr('height', $container.height())\n .attr('width', $container.width())\n .css({\n 'position': 'absolute',\n 'top': 0,\n 'left': 0,\n 'z-index': options.zIndex\n });\n\n setTimeout(function () {\n var canvasBb = $canvasElement.offset();\n var containerBb = $container.offset();\n\n $canvasElement\n .css({\n 'top': -(canvasBb.top - containerBb.top),\n 'left': -(canvasBb.left - containerBb.left)\n })\n ;\n canvas.getStage().setWidth($container.width());\n canvas.getStage().setHeight($container.height());\n }, 0);\n\n }, 250 );\n\n sizeCanvas();\n\n $(window).on('resize', sizeCanvas);\n\n\n /**\n * ResizeControls is the object representing the graphical controls presented to the user.\n * The controls are composed of:\n * - 1 BoundingRectangle object\n * - 8 Grapple objects\n * \n * It is assumed that only one can exist at any time, and it is sotred in the global variable: controls.\n */\n var ResizeControls = function (node) {\n this.parent = node;\n this.boundingRectangle = new BoundingRectangle(node);\n var grappleLocations = [\"topleft\", \"topcenter\", \"topright\", \"centerright\", \"bottomright\",\n \"bottomcenter\", \"bottomleft\", \"centerleft\"];\n this.grapples = [];\n for(var i=0; i < grappleLocations.length; i++) {\n var location = grappleLocations[i];\n var isActive = true;\n if (options.isNoResizeMode(node) || (options.isFixedAspectRatioResizeMode(node) && location.indexOf(\"center\") >= 0)) {\n isActive = false;\n }\n this.grapples.push(new Grapple(node, this, location, isActive))\n };\n\n if(options.resizeToContentCueEnabled(node) && !options.isNoResizeMode(node))\n this.resizeCue = new ResizeCue(node, this);\n \n canvas.draw();\n };\n\n ResizeControls.prototype.update = function () {\n this.boundingRectangle.update();\n for(var i=0; i < this.grapples.length; i++) {\n this.grapples[i].update();\n };\n\n var node = this.boundingRectangle.parent;\n var rcEnabled = options.resizeToContentCueEnabled(node);\n\n if(this.resizeCue && rcEnabled)\n this.resizeCue.update();\n else if(this.resizeCue && !rcEnabled){\n this.resizeCue.unbindEvents();\n this.resizeCue.shape.destroy();\n delete this.resizeCue;\n }\n else if(!this.resizeCue && rcEnabled)\n this.resizeCue = new ResizeCue(node, this);\n \n canvas.draw();\n };\n\n ResizeControls.prototype.remove = function () {\n this.boundingRectangle.shape.destroy();\n delete this.boundingRectangle;\n for(var i=0; i < this.grapples.length; i++) {\n this.grapples[i].unbindAllEvents();\n this.grapples[i].shape.destroy();\n };\n delete this.grapples;\n if(this.resizeCue){\n this.resizeCue.unbindEvents();\n this.resizeCue.shape.destroy();\n delete this.resizeCue;\n }\n canvas.draw();\n };\n\n var BoundingRectangle = function (node) {\n this.parent = node;\n this.shape = null;\n\n var nodePos = node.renderedPosition();\n var width = node.renderedOuterWidth() + getPadding();\n var height = node.renderedOuterHeight() + getPadding();\n var startPos = {\n x: nodePos.x - width / 2,\n y: nodePos.y - height / 2\n };\n // create our shape\n var rect = new Konva.Rect({\n x: startPos.x,\n y: startPos.y,\n width: width,\n height: height,\n stroke: options.boundingRectangleLineColor,\n strokeWidth: options.boundingRectangleLineWidth,\n dash: options.boundingRectangleLineDash\n });\n // add the shape to the layer\n canvas.add(rect);\n this.shape = rect;\n };\n\n BoundingRectangle.prototype.update = function () {\n var nodePos = this.parent.renderedPosition();\n var width = this.parent.renderedOuterWidth() + getPadding();\n var height = this.parent.renderedOuterHeight() + getPadding();\n var startPos = {\n x: nodePos.x - width / 2,\n y: nodePos.y - height / 2\n };\n this.shape.x(startPos.x);\n this.shape.y(startPos.y);\n this.shape.width(width);\n this.shape.height(height);\n };\n\n var Grapple = function (node, resizeControls, location, isActive) {\n this.parent = node;\n this.location = location;\n this.isActive = isActive;\n this.resizeControls = resizeControls;\n\n var nodePos = node.renderedPosition();\n var width = node.renderedOuterWidth() + getPadding();\n var height = node.renderedOuterHeight() + getPadding();\n var startPos = {\n x: nodePos.x - width / 2,\n y: nodePos.y - height / 2\n };\n\n var gs = getGrappleSize(node);\n\n this.shape = new Konva.Rect({\n width: gs,\n height: gs\n });\n if(this.isActive) {\n this.shape.fill(options.grappleColor);\n }\n else {\n // we need to parse the inactiveGrappleStroke option that is composed of 3 parts\n var parts = options.inactiveGrappleStroke.split(' ');\n var color = parts[2];\n var strokeWidth = parseInt(parts[1].replace(/px/, ''));\n this.shape.stroke(color);\n this.shape.strokeWidth(strokeWidth);\n }\n\n this.updateShapePosition(startPos, width, height, gs);\n canvas.add(this.shape);\n\n if(this.isActive) {\n this.bindActiveEvents();\n }\n else {\n this.bindInactiveEvents();\n }\n };\n\n Grapple.prototype.bindInactiveEvents = function () {\n var self = this; // keep reference to the grapple object inside events\n\n var eMouseEnter = function (event) {\n event.target.getStage().container().style.cursor = options.cursors.inactive;\n };\n\n var eMouseLeave = function (event) {\n if (event.target.getStage() != undefined)\n event.target.getStage().container().style.cursor = options.cursors.default;\n };\n\n var eMouseDown = function (event) {\n cy.boxSelectionEnabled(false);\n cy.panningEnabled(false);\n cy.autounselectify(true);\n cy.autoungrabify(true);\n canvas.getStage().on(\"contentTouchend contentMouseup\", eMouseUp);\n };\n var eMouseUp = function (event) {\n // stage scope\n cy.boxSelectionEnabled(true);\n cy.panningEnabled(true);\n cy.autounselectify(false);\n cy.autoungrabify(false);\n canvas.getStage().off(\"contentTouchend contentMouseup\", eMouseUp);\n };\n\n this.shape.on(\"mouseenter\", eMouseEnter);\n this.shape.on(\"mouseleave\", eMouseLeave);\n this.shape.on(\"touchstart mousedown\", eMouseDown);\n };\n\n Grapple.prototype.bindActiveEvents = function () {\n var self = this; // keep reference to the grapple object inside events\n var node = self.parent;\n var setWidthFcn, setHeightFcn; // Functions to resize the node\n var getWidthFcn,getHeightFcn; // Functions to get node sizes\n var startPos = {};\n var tmpActiveBgOpacity;\n // BBox of children of a node. Of course is valid if the node is a compound.\n var childrenBBox; \n\n // helper object\n var translateLocation = {\n \"topleft\": \"nw\",\n \"topcenter\": \"n\",\n \"topright\": \"ne\",\n \"centerright\": \"e\",\n \"bottomright\": \"se\",\n \"bottomcenter\": \"s\",\n \"bottomleft\": \"sw\",\n \"centerleft\": \"w\"\n };\n\n var eMouseDown = function (event) {\n childrenBBox = node.children().boundingBox();\n // If the node is a compound use setCompoundMinWidth() and setCompoundMinHeight() \n // instead of setWidth() and setHeight() \n setWidthFcn = node.isParent() ? options.setCompoundMinWidth : options.setWidth; \n setHeightFcn = node.isParent() ? options.setCompoundMinHeight : options.setHeight; \n \n getWidthFcn = function(node) {\n if (node.isParent()) {\n return Math.max(parseFloat(options.getCompoundMinWidth(node)), childrenBBox.w);\n }\n \n return node.width();\n };\n \n getHeightFcn = function(node) {\n if (node.isParent()) {\n return Math.max(parseFloat(options.getCompoundMinHeight(node)), childrenBBox.h);\n }\n \n return node.height();\n };\n \n cy.trigger(\"noderesize.resizestart\", [self.location, self.parent]);\n if(cy.style()._private.coreStyle[\"active-bg-opacity\"]){\n tmpActiveBgOpacity = cy.style()._private.coreStyle[\"active-bg-opacity\"].value;\n }\n cy.style()\n .selector(\"core\")\n .style(\"active-bg-opacity\", 0)\n .update();\n event.target.getStage().container().style.cursor = options.cursors[translateLocation[self.location]];\n var currentPointer = event.target.getStage().getPointerPosition();\n startPos.x = currentPointer.x;\n startPos.y = currentPointer.y;\n cy.boxSelectionEnabled(false);\n cy.panningEnabled(false);\n cy.autounselectify(true);\n cy.autoungrabify(true);\n self.shape.off(\"mouseenter\", eMouseEnter);\n self.shape.off(\"mouseleave\", eMouseLeave);\n canvas.getStage().on(\"contentTouchend contentMouseup\", eMouseUp);\n canvas.getStage().on(\"contentTouchmove contentMousemove\", eMouseMove);\n };\n\n var eMouseUp = function (event) {\n cy.style()\n .selector(\"core\")\n .style(\"active-bg-opacity\", tmpActiveBgOpacity)\n .update();\n self.shape.getStage().container().style.cursor = options.cursors.default;\n cy.boxSelectionEnabled(true);\n cy.panningEnabled(true);\n setTimeout(function () { // for some reason, making node unselectable before doesn't work\n cy.autounselectify(false); // think about those 2\n cy.autoungrabify(false);\n }, 0);\n cy.trigger(\"noderesize.resizeend\", [self.location, self.parent]);\n canvas.getStage().off(\"contentTouchend contentMouseup\", eMouseUp);\n canvas.getStage().off(\"contentTouchmove contentMousemove\", eMouseMove);\n self.shape.on(\"mouseenter\", eMouseEnter);\n self.shape.on(\"mouseleave\", eMouseLeave);\n\n };\n\n var eMouseMove = function (event) {\n var currentPointer = self.shape.getStage().getPointerPosition();\n var x = currentPointer.x;\n var y = currentPointer.y;\n\n var xHeight = (y - startPos.y) / cy.zoom();\n var xWidth = (x - startPos.x) / cy.zoom();\n\n var location = self.location;\n cy.batch(function () {\n var isAspectedMode = options.isFixedAspectRatioResizeMode(node);\n if ((isAspectedMode && location.indexOf(\"center\") >= 0) ||\n options.isNoResizeMode(node))\n return;\n\n if (isAspectedMode) {\n var aspectRatio = getHeightFcn(node) / getWidthFcn(node);\n\n var aspectedSize = Math.min(xWidth, xHeight);\n\n var isCrossCorners = (location == \"topright\" || location == \"bottomleft\");\n if (xWidth > xHeight)\n xHeight = xWidth * aspectRatio * (isCrossCorners ? -1 : 1);\n else\n xWidth = xHeight / aspectRatio * (isCrossCorners ? -1 : 1);\n }\n\n var nodePos = node.position();\n var newX = nodePos.x;\n var newY = nodePos.y;\n var isXresized = false;\n var isYresized = false;\n\n // These are valid if the node is a compound\n // Initial (before resize) sizes of compound \n var initialWidth, initialHeight;\n // Extra space between node width and children bbox. Causes by 'min-width' and/or 'min-height'\n var extraLeft = 0, extraRight = 0, extraTop = 0, extraBottom = 0; \n \n if (node.isParent()) {\n var totalExtraWidth = getWidthFcn(node) - childrenBBox.w; \n var totalExtraHeight = getHeightFcn(node) - childrenBBox.h; \n \n if (totalExtraWidth > 0) {\n extraLeft = totalExtraWidth * parseFloat(options.getCompoundMinWidthBiasLeft(node)) / \n ( parseFloat(options.getCompoundMinWidthBiasLeft(node)) + parseFloat(options.getCompoundMinWidthBiasRight(node)) ); \n extraRight = totalExtraWidth - extraLeft;\n }\n \n if (totalExtraHeight > 0) {\n extraTop = totalExtraHeight * parseFloat(options.getCompoundMinHeightBiasTop(node)) / \n ( parseFloat(options.getCompoundMinHeightBiasTop(node)) + parseFloat(options.getCompoundMinHeightBiasBottom(node)) ); \n extraBottom = totalExtraHeight - extraTop;\n }\n }\n\n if (location.startsWith(\"top\")) {\n // Note that xHeight is supposed to be negative\n // If the node is simple min height should not be exceed, else if it is compound\n // then extraTop should not be negative\n if (getHeightFcn(node) - xHeight > options.minHeight(node)\n && ( !node.isParent() || extraTop - xHeight >= 0 ) ) {\n newY = nodePos.y + xHeight / 2;\n isYresized = true;\n setHeightFcn(node, getHeightFcn(node) - xHeight);\n } else if (isAspectedMode)\n return;\n } else if (location.startsWith(\"bottom\")) {\n // Note that xHeight is supposed to be positive\n // If the node is simple min height should not be exceed, else if it is compound\n // then extraBottom should not be negative\n if (getHeightFcn(node) + xHeight > options.minHeight(node)\n && ( !node.isParent() || extraBottom + xHeight >= 0 ) ) {\n newY = nodePos.y + xHeight / 2;\n isYresized = true;\n setHeightFcn(node, getHeightFcn(node) + xHeight);\n } else if (isAspectedMode)\n return;\n }\n\n if (location.endsWith(\"left\") && getWidthFcn(node) - xWidth > options.minWidth(node)\n && ( !node.isParent() || extraLeft - xWidth >= 0 ) ) {\n // Note that xWidth is supposed to be negative\n // If the node is simple min width should not be exceed, else if it is compound\n // then extraLeft should not be negative\n newX = nodePos.x + xWidth / 2;\n isXresized = true;\n setWidthFcn(node, getWidthFcn(node) - xWidth);\n } else if (location.endsWith(\"right\") && getWidthFcn(node) + xWidth > options.minWidth(node)\n && ( !node.isParent() || extraRight + xWidth >= 0 ) ) {\n // Note that xWidth is supposed to be positive\n // If the node is simple min width should not be exceed, else if it is compound\n // then extraRight should not be negative\n newX = nodePos.x + xWidth / 2;\n isXresized = true;\n setWidthFcn(node, getWidthFcn(node) + xWidth);\n }\n\n // this will trigger a position event, leading to useless redraw.\n // TODO find a way to avoid that\n if(!node.isParent() && ( isXresized || isYresized )) {\n node.position({x: newX, y: newY});\n }\n \n // If the node is a compound we need to handle left/right/top/bottom biases conditionally \n if ( node.isParent() ) {\n var totalExtraWidth = getWidthFcn(node) - childrenBBox.w; \n var totalExtraHeight = getHeightFcn(node) - childrenBBox.h;\n \n if (isXresized && totalExtraWidth > 0) {\n // If the location ends with right the left extra space should be fixed\n // else if it ends with left the right extra space should be fixed\n if (location.endsWith('right')) {\n extraRight = totalExtraWidth - extraLeft;\n }\n else if (location.endsWith('left')) {\n extraLeft = totalExtraWidth - extraRight;\n }\n\n var biasLeft = extraLeft / (extraLeft + extraRight) * 100;\n var biasRight = 100 - biasLeft;\n \n if (biasLeft < 0 || biasRight < 0) {\n// console.log('negative horizontal');\n return;\n }\n \n options.setCompoundMinWidthBiasLeft(node, biasLeft + '%');\n options.setCompoundMinWidthBiasRight(node, biasRight + '%');\n }\n \n if (isYresized && totalExtraHeight > 0) {\n // If the location starts with top the bottom extra space should be fixed\n // else if it starst with bottom the top extra space should be fixed\n if (location.startsWith('top')) {\n extraTop = totalExtraHeight - extraBottom;\n }\n else if (location.startsWith('bottom')) {\n extraBottom = totalExtraHeight - extraTop;\n }\n\n var biasTop = extraTop / (extraTop + extraBottom) * 100;\n var biasBottom = 100 - biasTop;\n \n if (biasTop < 0 || biasBottom < 0) {\n// console.log('negative vertical');\n return;\n }\n \n options.setCompoundMinHeightBiasTop(node, biasTop + '%');\n options.setCompoundMinHeightBiasBottom(node, biasBottom + '%');\n }\n }\n });\n\n startPos.x = x;\n startPos.y = y;\n self.resizeControls.update(); // redundant update if the position has changed just before\n\n cy.trigger(\"noderesize.resizedrag\", [location, node]);\n };\n\n var eMouseEnter = function (event) {\n event.target.getStage().container().style.cursor = options.cursors[translateLocation[self.location]];\n };\n\n var eMouseLeave = function (event) {\n if (event.target.getStage() != undefined)\n event.target.getStage().container().style.cursor = options.cursors.default;\n };\n\n this.shape.on(\"mouseenter\", eMouseEnter);\n this.shape.on(\"mouseleave\", eMouseLeave);\n this.shape.on(\"touchstart mousedown\", eMouseDown);\n };\n\n Grapple.prototype.update = function() {\n var nodePos = this.parent.renderedPosition();\n var width = this.parent.renderedOuterWidth() + getPadding();\n var height = this.parent.renderedOuterHeight() + getPadding();\n var startPos = {\n x: nodePos.x - width / 2,\n y: nodePos.y - height / 2\n };\n\n var gs = getGrappleSize(this.parent);\n\n this.shape.width(gs);\n this.shape.height(gs);\n this.updateShapePosition(startPos, width, height, gs);\n };\n\n Grapple.prototype.unbindAllEvents = function () {\n this.shape.off('mouseenter');\n this.shape.off('mouseleave');\n this.shape.off('touchstart mousedown');\n };\n\n Grapple.prototype.updateShapePosition = function (startPos, width, height, gs) {\n switch(this.location) {\n case \"topleft\":\n this.shape.x(startPos.x - gs / 2);\n this.shape.y(startPos.y - gs / 2);\n break;\n case \"topcenter\":\n this.shape.x(startPos.x + width / 2 - gs / 2);\n this.shape.y(startPos.y - gs / 2);\n break;\n case \"topright\":\n this.shape.x(startPos.x + width - gs / 2);\n this.shape.y(startPos.y - gs / 2);\n break;\n case \"centerright\":\n this.shape.x(startPos.x + width - gs / 2);\n this.shape.y(startPos.y + height / 2 - gs / 2);\n break;\n case \"bottomright\":\n this.shape.x(startPos.x + width - gs / 2);\n this.shape.y(startPos.y + height - gs / 2);\n break;\n case \"bottomcenter\":\n this.shape.x(startPos.x + width / 2 - gs / 2);\n this.shape.y(startPos.y + height - gs / 2);\n break;\n case \"bottomleft\":\n this.shape.x(startPos.x - gs / 2);\n this.shape.y(startPos.y + height - gs / 2);\n break;\n case \"centerleft\":\n this.shape.x(startPos.x - gs / 2);\n this.shape.y(startPos.y + height / 2 - gs / 2);\n break;\n }\n };\n\n var ResizeCue = function (node, resizeControls) {\n this.parent = node;\n this.resizeControls = resizeControls;\n\n var nodePos = node.renderedPosition();\n var width = node.renderedOuterWidth() + getPadding();\n var height = node.renderedOuterHeight() + getPadding();\n var startPos = {\n x: nodePos.x - width / 2,\n y: nodePos.y - height / 2\n };\n \n var ch = getResizeCueHeight(node);\n var cw = getResizeCueWidth(node);\n \n var imageObj = new Image();\n imageObj.src = options.resizeToContentCueImage;\n this.shape = new Konva.Image({\n width: cw,\n height: ch,\n image: imageObj\n });\n \n imageObj.onload = function() {\n canvas.draw();\n }\n\n this.updateShapePosition(startPos, width, height, cw, ch);\n this.bindEvents();\n canvas.add(this.shape);\n }\n\n ResizeCue.prototype.update = function() {\n var nodePos = this.parent.renderedPosition();\n var width = this.parent.renderedOuterWidth() + getPadding();\n var height = this.parent.renderedOuterHeight() + getPadding();\n var startPos = {\n x: nodePos.x - width / 2,\n y: nodePos.y - height / 2\n };\n\n var ch = getResizeCueHeight(this.parent);\n var cw = getResizeCueWidth(this.parent);\n\n this.shape.width(cw);\n this.shape.height(ch);\n this.updateShapePosition(startPos, width, height, cw, ch);\n };\n\n ResizeCue.prototype.updateShapePosition = function (startPos, width, height, cw, ch) {\n switch(options.resizeToContentCuePosition) {\n case \"top-left\":\n this.shape.x(startPos.x + 0.4 * cw);\n this.shape.y(startPos.y + 0.4 * ch);\n break;\n case \"top-right\":\n this.shape.x(startPos.x + width - 1.4 * cw);\n this.shape.y(startPos.y + 0.4 * ch);\n break; \n case \"bottom-left\":\n this.shape.x(startPos.x + 0.4 * cw);\n this.shape.y(startPos.y + height - 1.4 * ch);\n break;\n default: // \"bottom-right\" is the default case\n this.shape.x(startPos.x + width - 1.4 * cw);\n this.shape.y(startPos.y + height - 1.4 * ch);\n break;\n }\n };\n\n ResizeCue.prototype.bindEvents = function () {\n var node = this.parent;\n var self = this;\n\n var onClick = function() {\n if(typeof options.resizeToContentFunction === \"function\"){\n options.resizeToContentFunction([node]);\n }\n else if(cy.undoRedo && options.undoable)\n cy.trigger('noderesize.resizetocontent', [self]);\n else{\n var params = {\n self: self,\n firstTime: true\n }\n defaultResizeToContent(params); \n }\n }\n\n this.shape.on(\"click\", onClick);\n };\n\n ResizeCue.prototype.unbindEvents = function () {\n this.shape.off(\"click\");\n };\n\n var getGrappleSize = function (node) {\n return Math.max(1, cy.zoom()) * options.grappleSize * Math.min(node.width()/25, node.height()/25, 1);\n };\n\n var getResizeCueHeight = function (node) {\n return Math.max(1, cy.zoom()) * options.grappleSize * 1.25 * Math.min(node.width()/25, node.height()/25, 1);\n\n };\n\n var getResizeCueWidth = function (node) {\n return Math.max(1, cy.zoom()) * options.grappleSize * 1.25 * Math.min(node.width()/25, node.height()/25, 1);\n };\n\n var getPadding = function () {\n return options.padding*Math.max(1, cy.zoom());\n };\n\n var defaultResizeToContent = function(params) {\n var self = params.self;\n var node = self.parent;\n \n var setWidthFcn = node.isParent() ? options.setCompoundMinWidth : options.setWidth; \n var setHeightFcn = node.isParent() ? options.setCompoundMinHeight : options.setHeight; \n \n if(params.firstTime){\n delete params.firstTime;\n \n params.oldWidth = node.width();\n params.oldHeight = node.height();\n\n var context = document.createElement('canvas').getContext(\"2d\");\n var style = node.style();\n context.font = style['font-size'] + \" \" + style['font-family'];\n \n var labelText = (style['label']).split(\"\\n\");\n \n var minWidth = 0;\n var minHeight = Math.max(context.measureText('M').width * 1.1, 30);\n labelText.forEach(function(text){\n var textWidth = context.measureText(text).width;\n if (minWidth < textWidth)\n minWidth = textWidth;\n });\n \n if(minWidth !== 0){\n if(typeof options.isFixedAspectRatioResizeMode === 'function' && \n options.isFixedAspectRatioResizeMode(node)){\n \n var ratio = node.width() / node.height();\n var tmpW = (minWidth < minHeight) ? minWidth : minHeight * ratio;\n var tmpH = (minWidth < minHeight) ? minWidth / ratio : minHeight;\n\n if(tmpW >= minWidth && tmpH >= minHeight){\n minWidth = tmpW;\n minHeight = tmpH;\n }\n else{\n minWidth = (minWidth < minHeight) ? minHeight * ratio : minWidth;\n minHeight = (minWidth < minHeight) ? minHeight : minWidth / ratio;\n }\n }\n\n setWidthFcn(node, minWidth * 1.1);\n setHeightFcn(node, minHeight * 1.1);\n }\n \n node.unselect();\n\n return params;\n }\n else{ \n var newWidth = params.oldWidth;\n var newHeight = params.oldHeight;\n \n params.oldWidth = node.width();\n params.oldHeight = node.height();\n\n setWidthFcn(node, newWidth);\n setHeightFcn(node, newHeight);\n \n node.unselect();\n\n return params;\n }\n \n }\n\n function getTopMostNodes(nodes) {\n var nodesMap = {};\n for (var i = 0; i < nodes.length; i++) {\n nodesMap[nodes[i].id()] = true;\n }\n var roots = nodes.filter(function (ele, i) {\n if(typeof ele === \"number\") {\n ele = i;\n }\n var parent = ele.parent()[0];\n while(parent != null){\n if(nodesMap[parent.id()]){\n return false;\n }\n parent = parent.parent()[0];\n }\n return true;\n });\n\n return roots;\n }\n\n function moveNodes(positionDiff, nodes) {\n // Get the descendants of top most nodes. Note that node.position() can move just the simple nodes.\n var topMostNodes = getTopMostNodes(nodes);\n var nodesToMove = topMostNodes.union(topMostNodes.descendants());\n\n nodesToMove.positions(function(node, i) {\n if(typeof node === \"number\") {\n node = i;\n }\n var oldX = node.position(\"x\");\n var oldY = node.position(\"y\");\n if (node.isParent())\n {\n return {\n x: oldX,\n y: oldY\n };\n }\n return {\n x: oldX + positionDiff.x,\n y: oldY + positionDiff.y\n };\n });\n }\n\n var selectedNodesToMove;\n var nodesMoving = false;\n\n var keys = {};\n function keyDown(e) {\n\n var shouldMove = typeof options.moveSelectedNodesOnKeyEvents === 'function'\n ? options.moveSelectedNodesOnKeyEvents() : options.moveSelectedNodesOnKeyEvents;\n\n if (!shouldMove) {\n return;\n }\n\n //Checks if the tagname is textarea or input\n var tn = document.activeElement.tagName;\n if (tn != \"TEXTAREA\" && tn != \"INPUT\")\n {\n keys[e.keyCode] = true;\n switch(e.keyCode){\n case 37: case 39: case 38: case 40: // Arrow keys\n case 32: e.preventDefault(); break; // Space\n default: break; // do not block other keys\n }\n\n\t\t\t\t\t\n if (e.keyCode < '37' || e.keyCode > '40') {\n return;\n }\n\n if (!nodesMoving)\n {\n selectedNodesToMove = cy.nodes(':selected');\n cy.trigger(\"noderesize.movestart\", [selectedNodesToMove]);\n nodesMoving = true;\n }\n if (e.altKey && e.which == '38') {\n // up arrow and alt\n moveNodes ({x:0, y:-1},selectedNodesToMove);\n }\n else if (e.altKey && e.which == '40') {\n // down arrow and alt\n moveNodes ({x:0, y:1},selectedNodesToMove);\n }\n else if (e.altKey && e.which == '37') {\n // left arrow and alt\n moveNodes ({x:-1, y:0},selectedNodesToMove);\n }\n else if (e.altKey && e.which == '39') {\n // right arrow and alt\n moveNodes ({x:1, y:0},selectedNodesToMove);\n }\n\n else if (e.shiftKey && e.which == '38') {\n // up arrow and shift\n moveNodes ({x:0, y:-10},selectedNodesToMove);\n }\n else if (e.shiftKey && e.which == '40') {\n // down arrow and shift\n moveNodes ({x:0, y:10},selectedNodesToMove);\n }\n else if (e.shiftKey && e.which == '37') {\n // left arrow and shift\n moveNodes ({x:-10, y:0},selectedNodesToMove);\n\n }\n else if (e.shiftKey && e.which == '39' ) {\n // right arrow and shift\n moveNodes ({x:10, y:0},selectedNodesToMove);\n }\n\n else if (e.keyCode == '38') {\n // up arrow\n moveNodes ({x:0, y:-3},selectedNodesToMove);\n }\n else if (e.keyCode == '40') {\n // down arrow\n moveNodes ({x:0, y:3},selectedNodesToMove);\n }\n else if (e.keyCode == '37') {\n // left arrow\n moveNodes ({x:-3, y:0},selectedNodesToMove);\n }\n else if (e.keyCode == '39') {\n //right arrow\n moveNodes ({x:3, y:0},selectedNodesToMove);\n }\n }\n }\n\n function keyUp(e) {\n if (e.keyCode < '37' || e.keyCode > '40') {\n return;\n }\n\n var shouldMove = typeof options.moveSelectedNodesOnKeyEvents === 'function'\n ? options.moveSelectedNodesOnKeyEvents() : options.moveSelectedNodesOnKeyEvents;\n\n if (!shouldMove) {\n return;\n }\n\n cy.trigger(\"noderesize.moveend\", [selectedNodesToMove]);\n selectedNodesToMove = undefined;\n nodesMoving = false;\n }\n\n var unBindEvents = function() {\n cy.off(\"unselect\", \"node\", eUnselectNode);\n cy.off(\"position\", \"node\", ePositionNode);\n cy.off(\"position\", \"node\", eFreeNode);\n cy.off(\"zoom\", eZoom);\n cy.off(\"pan\", ePan);\n //cy.off(\"style\", \"node\", redraw);\n cy.off(\"select\", \"node\", eSelectNode);\n cy.off(\"remove\", \"node\", eRemoveNode);\n cy.off(\"add\", \"node\", eAddNode);\n cy.off(\"afterUndo afterRedo\", eUndoRedo);\n };\n\n var bindEvents = function() {\n // declare old and current positions\n var oldPos = {x: undefined, y: undefined};\n var currentPos = {x : 0, y : 0};\n cy.on(\"unselect\", \"node\", eUnselectNode = function(e) {\n // reinitialize old and current compound positions\n oldPos = {x: undefined, y: undefined};\n currentPos = {x: 0, y: 0};\n\n if(controls) {\n controls.remove();\n controls = null;\n }\n\n var selectedNodes = cy.nodes(':selected');\n if(selectedNodes.size() == 1) {\n controls = new ResizeControls(selectedNodes);\n }\n });\n\n cy.on(\"select\", \"node\", eSelectNode = function(e) {\n var node = e.target;\n\n if(controls) {\n controls.remove();\n controls = null;\n }\n\n var selectedNodes = cy.nodes(':selected');\n if(selectedNodes.size() == 1 && !options.isNoControlsMode(node)) {\n controls = new ResizeControls(selectedNodes);\n }\n });\n\n cy.on(\"remove\", \"node\", eRemoveNode = function(e) {\n var node = e.target;\n // If a selected node is removed we should regard this event just like an unselect event\n if ( node.selected() ) {\n eUnselectNode(e);\n }\n });\n\n // is this useful ? adding a node never seems to select it, and it causes a bug when changing parent\n cy.on(\"add\", \"node\", eAddNode = function(e) {\n var node = e.target;\n // If a selected node is added we should regard this event just like a select event\n if ( node.selected() ) {\n eSelectNode(e);\n }\n });\n\n // listens for position event and refreshGrapples if necessary\n cy.on(\"position\", \"node\", ePositionNode = function(e) {\n if(controls) {\n // It seems that parent.position() doesn't always give consistent result.\n // But calling it here makes the results consistent, by updating it to the correct value, somehow.\n // Maybe there is some cache on cytoscape side preventing a position update.\n var trash_var = controls.parent.position(); // trash_var isn't used, this line apparently makes position() correct\n if(e.target.id() == controls.parent.id()) {\n controls.update();\n }\n // if the position of compund changes by repositioning its children's\n // Note: position event for compound is not triggered in this case\n else if(currentPos.x != oldPos.x || currentPos.y != oldPos.y) {\n currentPos = controls.parent.position();\n controls.update();\n oldPos = {x : currentPos.x, y : currentPos.y};\n }\n }\n });\n\n cy.on(\"zoom\", eZoom = function() {\n if ( controls ) {\n controls.update();\n }\n });\n\n cy.on(\"pan\", ePan = function() {\n if ( controls ) {\n controls.update();\n }\n });\n\n cy.on(\"afterUndo afterRedo\", eUndoRedo = function() {\n if ( controls ) {\n controls.update();\n oldPos = {x: undefined, y: undefined};\n }\n });\n\n document.addEventListener(\"keydown\",keyDown, true);\n document.addEventListener(\"keyup\",keyUp, true);\n };\n bindEvents();\n\n if (cy.undoRedo && options.undoable) {\n\n var param;\n var moveparam;\n \n // On resize start fill param object to use it on undo/redo\n cy.on(\"noderesize.resizestart\", function (e, type, node) {\n param = {\n node: node,\n css: {\n }\n };\n \n // Some parts of param object are dependant on whether the node is a compound or simple node\n if (node.isParent()) {\n param.css.minWidth = parseFloat(options.getCompoundMinWidth(node));\n param.css.minHeight = parseFloat(options.getCompoundMinHeight(node));\n param.css.biasLeft = options.getCompoundMinWidthBiasLeft(node);\n param.css.biasRight = options.getCompoundMinWidthBiasRight(node);\n param.css.biasTop = options.getCompoundMinHeightBiasTop(node);\n param.css.biasBottom = options.getCompoundMinHeightBiasBottom(node);\n }\n else {\n param.css.width = node.width();\n param.css.height = node.height();\n param.position = $.extend({}, node.position());\n }\n });\n \n // On resize end do the action using param object\n cy.on(\"noderesize.resizeend\", function (e, type, node) {\n param.firstTime = true;\n cy.undoRedo().do(\"resize\", param);\n param = undefined;\n });\n\n cy.on(\"noderesize.movestart\", function (e, nodes) {\n if (nodes[0] != undefined)\n {\n moveparam = {\n firstTime: true,\n firstNodePosition: {\n x: nodes[0].position('x'),\n y: nodes[0].position('y')\n },\n nodes: nodes\n }\n }\n });\n\n cy.on(\"noderesize.moveend\", function (e, nodes) {\n if (moveparam != undefined)\n {\n var initialPos = moveparam.firstNodePosition;\n\n moveparam.positionDiff = {\n x: -nodes[0].position('x') + initialPos.x,\n y: -nodes[0].position('y') + initialPos.y\n }\n\n delete moveparam.firstNodePosition;\n\n cy.undoRedo().do(\"noderesize.move\", moveparam);\n moveparam = undefined;\n }\n });\n\n cy.on(\"noderesize.resizetocontent\", function (e, self) {\n var params = {\n self: self,\n firstTime: true\n }\n\n cy.undoRedo().do(\"resizeToContent\", params); \n });\n\n var resizeDo = function (arg) {\n // If this is the first time it means that resize is already performed through user interaction.\n // In this case just removing the first time parameter is enough.\n if (arg.firstTime) {\n if (controls) {\n controls.update(); // refresh grapplers after node resize\n }\n delete arg.firstTime;\n return arg;\n }\n\n var node = arg.node;\n \n // Result object is to be returned for undo/redo cases\n var result = {\n node: node,\n css: {\n }\n };\n \n // Some parts of result object is dependent on whether the node is simple or compound\n if (node.isParent()) {\n result.css.minWidth = parseFloat(options.getCompoundMinWidth(node));\n result.css.minHeight = parseFloat(options.getCompoundMinHeight(node));\n result.css.biasLeft = options.getCompoundMinWidthBiasLeft(node);\n result.css.biasRight = options.getCompoundMinWidthBiasRight(node);\n result.css.biasTop = options.getCompoundMinHeightBiasTop(node);\n result.css.biasBottom = options.getCompoundMinHeightBiasBottom(node);\n }\n else {\n result.css.width = node.width();\n result.css.height = node.height();\n result.position = $.extend({}, node.position());\n }\n \n // Perform actual undo/redo part using args object\n cy.startBatch();\n \n if (node.isParent()) {\n options.setCompoundMinWidth(node, arg.css.minWidth);\n options.setCompoundMinHeight(node, arg.css.minHeight);\n options.setCompoundMinWidthBiasLeft(node, arg.css.biasLeft);\n options.setCompoundMinWidthBiasRight(node, arg.css.biasRight);\n options.setCompoundMinHeightBiasTop(node, arg.css.biasTop);\n options.setCompoundMinHeightBiasBottom(node, arg.css.biasBottom);\n }\n else {\n node.position(arg.position);\n options.setWidth(node, arg.css.width);\n options.setHeight(node, arg.css.height);\n }\n \n cy.endBatch();\n\n if (controls) {\n controls.update(); // refresh grapplers after node resize\n }\n\n return result;\n };\n\n var moveDo = function (arg) {\n if (arg.firstTime) {\n delete arg.firstTime;\n return arg;\n }\n\n var nodes = arg.nodes;\n\n var positionDiff = arg.positionDiff;\n\n var result = {\n nodes: nodes,\n positionDiff: {\n x: -positionDiff.x,\n y: -positionDiff.y\n }\n };\n\n\n moveNodes (positionDiff,nodes);\n\n return result;\n };\n\n cy.undoRedo().action(\"resize\", resizeDo, resizeDo);\n cy.undoRedo().action(\"noderesize.move\", moveDo, moveDo);\n cy.undoRedo().action(\"resizeToContent\", defaultResizeToContent, defaultResizeToContent);\n }\n\n var api = {}; // The extension api to be exposed\n\n api.refreshGrapples = function() {\n if (controls) {\n // We need to remove old controls and create a new one rather then just updating controls\n // We need this because the parent may change status and become resizable or not-resizable\n var parent = controls.parent;\n controls.remove();\n controls = new ResizeControls(parent);\n }\n }\n // Simply remove grapples even if node is selected\n api.removeGrapples = function() {\n if (controls) {\n controls.remove();\n controls = null;\n }\n }\n\n setScratch(cy, 'api', api);\n\n return api; // Return the api\n });\n\n };\n\n if (typeof module !== 'undefined' && module.exports) { // expose as a commonjs module\n module.exports = register;\n }\n\n if (typeof define !== 'undefined' && define.amd) { // expose as an amd/requirejs module\n define('cytoscape-node-resize', function () {\n return register;\n });\n }\n\n if (typeof cytoscape !== 'undefined' && typeof jQuery !== \"undefined\" && typeof Konva !== \"undefined\") { // expose to global cytoscape (i.e. window.cytoscape)\n register(cytoscape, jQuery, Konva);\n }\n\n})();\n","module.exports = require(\"cytoscape-undo-redo\");","module.exports = require(\"cytoscape-panzoom\");","module.exports = (function()\n{\n var styleSheet = [\n {\n selector: 'node',\n style:\n {\n 'label': 'data(name)',\n 'text-valign': 'center',\n 'text-halign': 'center',\n 'color': '#1e2829',\n 'width': function (ele)\n {\n return nodeWFunc(ele);\n },\n 'height': function (ele)\n {\n return nodeHFunc(ele);\n },\n // 'background-image-opacity': 1,\n // 'background-image': function (ele)\n // {\n // return backgroundImageHandler(ele);\n // },\n 'background-color': 'white',\n 'shape': function(ele)\n {\n return parentNodeShapeFunc( ele );\n },\n 'border-width': function(ele)\n {\n return borderWidthFunction( ele );\n },\n 'border-color': function(ele)\n {\n return nodeBorderColorFunction(ele);\n },\n 'font-size': 14\n }\n },\n {\n selector: 'node:parent',\n style:\n {\n 'shape': function(ele)\n {\n return parentNodeShapeFunc( ele );\n },\n 'text-valign': function(ele)\n {\n return 'bottom';\n },\n 'text-margin-y' : 2,\n 'padding-left': function(ele){ return compoundPaddingFunction(ele); },\n 'padding-right': function(ele){ return compoundPaddingFunction(ele); },\n 'padding-bottom': function(ele){ return compoundPaddingFunction(ele); },\n 'padding-top': function(ele){ return compoundPaddingFunction(ele); },\n 'background-opacity': 0.5,\n 'border-width': function(ele)\n {\n return parentBorderWidthFunction( ele );\n },\n 'border-color': function(ele)\n {\n return nodeBorderColorFunction(ele);\n },\n 'background-color': function(ele){\n return nodeBackgroundColorFunction(ele);\n }\n }\n },\n {\n selector: 'edge',\n style:\n {\n 'label': 'data(name)',\n 'arrow-scale': 1.7,\n 'curve-style': 'bezier',\n 'text-background-color': '#EEEEEE',\n 'text-background-opacity': 0,\n 'target-arrow-shape': function( ele )\n {\n return edgeTargetArrowTypeHandler(ele);\n },\n 'width': 1,\n 'line-color': function( ele )\n {\n return edgeColorHandler(ele);\n },\n 'target-arrow-color': function( ele )\n {\n return edgeColorHandler(ele);\n },\n 'line-style': function(ele)\n {\n return edgeLineTypeHandler(ele);\n },\n 'opacity': 1,\n\n }\n },\n // {\n // selector: 'edge.segments',\n // style:\n // {\n // 'curve-style': 'segments',\n // 'segment-distances': '0 100',\n // 'segment-weights': '0 1'\n // }\n // },\n\n\n\n // some style for the Edge Handles !!!\n\n {\n selector: '.eh-handle',\n style: {\n 'background-color': '#1abc9c',\n 'width': 12,\n 'height': 12,\n 'shape': 'ellipse',\n 'overlay-opacity': 0,\n 'border-width': 12, // makes the handle easier to hit\n 'border-opacity': 0\n }\n },\n\n {\n selector: '.eh-hover',\n css: {\n 'background-color': '#1abc9c'\n }\n },\n\n {\n selector: '.eh-source',\n css: {\n 'border-width': 2,\n 'border-color': '#1abc9c'\n }\n },\n\n {\n selector: '.eh-target',\n css: {\n 'border-width': 2,\n 'background-color': '#1abc9c',\n 'border-color': '#1abc9c'\n }\n },\n\n {\n selector: '.eh-preview, .eh-ghost-edge',\n css: {\n 'line-color': '#1abc9c',\n 'target-arrow-color': '#1abc9c',\n 'source-arrow-color': '#1abc9c'\n }\n },\n\n {\n selector: '.highlightedEdge',\n style:\n {\n 'width': 3.5,\n 'border-width':4,\n 'line-color' : '#1abc9c' ,\n 'target-arrow-color': '#1abc9c',\n 'arrow-scale': 2\n }\n },\n {\n selector: '.highlightedNode',\n style:\n {\n 'border-width': function(ele)\n {\n return highlightedBorderWidthFunction( ele );\n },\n 'border-color': '#1abc9c',\n 'background-color': '#fff',\n // 'shadow-color' : '#1abc9c',\n // 'background-opacity': 0.5,\n // 'shadow-opacity': 1.0\n }\n },\n {\n selector: '.invalidGene',\n style:\n {\n 'border-width': 2,\n 'border-color': '#e94332',\n 'color': '#e94332'\n }\n },\n {\n // The css properties when a node is highlighted and an invalid gene\n selector: '.invalidGeneHighlight',\n style:\n {\n 'border-width': 3,\n 'font-weight' : 'bold',\n // 'shadow-color' : '#e94332',\n // 'background-color': '#e94332',\n 'border-color': '#e94332',\n 'color': '#e94332',\n // 'shadow-opacity': 1.0,\n }\n },\n {\n selector: 'node:selected',\n style:\n {\n 'border-width': function(ele)\n {\n return selectedBorderWidthFunction( ele );\n },\n 'border-color' : '#ffc90e', /*#f1c40f'*/\n }\n },\n {\n selector: '.highlightedNode:selected, .invalidGeneHighlight:selected',\n style:\n {\n 'border-width': function(ele)\n {\n return selectedHighlightedBorderWidthFunction( ele );\n },\n }\n },\n {\n selector: 'edge:selected',\n style:\n {\n 'width' : 3,\n 'line-color' : '#ffc90e',\n 'target-arrow-color': '#ffc90e'\n }\n },\n ];\n\n\n\n var compoundPaddingFunction = function( ele )\n {\n switch (ele._private.data['type'])\n {\n case \"FAMILY\": return 5; break;\n case \"COMPLEX\": return '5'; break;\n case \"COMPARTMENT\": return 10; break;\n case \"PROCESS\": return 10; break;\n default: return 5; break;\n }\n };\n\n var contentFunction = function( ele )\n {\n if (ele._private.data.name) {\n return ele._private.data.name;\n }\n return 'newNode';\n };\n\n var vTextPositionFunction = function( ele )\n {\n switch (ele._private.data['type'])\n {\n case \"GENE\": return 'center'; break;\n case \"FAMILY\": return 'top'; break;\n case \"COMPLEX\": return 'top'; break;\n case \"COMPARTMENT\": return 'top'; break;\n default: return 'center'; break;\n }\n };\n\n var borderWidthFunction = function( ele )\n {\n switch (ele._private.data['type'])\n {\n case \"GENE\": return 1; break;\n case \"PROCESS\": return 0; break;\n case \"FAMILY\": return 2; break;\n case \"COMPARTMENT\": return 4; break;\n default: return 1; break;\n }\n };\n\n var parentBorderWidthFunction = function( ele )\n {\n switch (ele._private.data['type'])\n {\n case \"GENE\": return 1; break;\n case \"PROCESS\": return 0; break;\n case \"FAMILY\": return 2; break;\n case \"COMPLEX\": return 1; break;\n case \"COMPARTMENT\": return 4; break;\n default: return 1; break;\n }\n };\n\n var highlightedBorderWidthFunction = function( ele )\n {\n switch (ele._private.data['type'])\n {\n case \"GENE\": return 3; break;\n case \"PROCESS\": return 0; break;\n case \"FAMILY\": return 4; break;\n case \"COMPARTMENT\": return 6; break;\n default: return 3; break;\n }\n };\n\n var selectedBorderWidthFunction = function( ele )\n {\n switch (ele._private.data['type'])\n {\n case \"GENE\": return 2; break;\n case \"PROCESS\": return 0; break;\n case \"FAMILY\": return 3; break;\n case \"COMPARTMENT\": return 5; break;\n default: return 2; break;\n }\n };\n var selectedHighlightedBorderWidthFunction = function( ele )\n {\n switch (ele._private.data['type'])\n {\n case \"GENE\": return 3; break;\n case \"PROCESS\": return 0; break;\n case \"FAMILY\": return 4; break;\n case \"COMPARTMENT\": return 6; break;\n default: return 3; break;\n }\n };\n\n\n var parentNodeShapeFunc = function( ele )\n {\n switch (ele._private.data['type'])\n {\n case \"GENE\": return \"roundrectangle\"; break;\n case \"PROCESS\": return \"roundrectangle\"; break;\n case \"FAMILY\": return \"rectangle\"; break;\n case \"COMPARTMENT\": return \"roundrectangle\"; break;\n case \"COMPLEX\": return \"rectangle\"; break;\n default: return \"roundrectangle\"; break;\n }\n };\n\n var nodeBackgroundColorFunction = function( ele )\n {\n // switch (ele._private.data['type'])\n // {\n // case \"GENE\": return \"#fff\"; break;\n // case \"FAMILY\": return \"#CCCCCC\"; break;\n // case \"COMPARTMENT\": return \"#fff\"; break;\n // default: return \"#fff\"; break;\n // }\n return \"#fff\";\n };\n\n var nodeBorderColorFunction = function( ele )\n {\n switch (ele._private.data['type'])\n {\n case \"GENE\": return \"#00000a\"; break;\n case \"FAMILY\": return \"#a3a3a3\"; break;\n case \"COMPLEX\": return \"#000000\"; break;\n case \"COMPARTMENT\": return \"#000000\"; break;\n default: return \"#000000\"; break;\n }\n };\n\n var edgeColorHandler = function( ele )\n {\n // switch (ele._private.data['type']){\n // case \"ACTIVATES\": return \"#904930\"; break;\n // case \"INHIBITS\": return \"#7B7EF7\"; break;\n // case \"INDUCES\": return \"#ad47c2\"; break;\n // case \"REPRESSES\": return \"#67C1A9\"; break;\n // case \"BINDS\": return \"#67C1A9\"; break;\n // default: return \"#989898\"; break;\n // }\n return \"#1b1b1b\";\n };\n\n var edgeTargetArrowTypeHandler = function( ele )\n {\n switch (ele._private.data['type']){\n case \"ACTIVATES\": return \"triangle\"; break;\n case \"INHIBITS\": return \"tee\"; break;\n case \"INDUCES\": return \"triangle\"; break;\n case \"REPRESSES\": return \"tee\"; break;\n case \"BINDS\": return \"none\"; break;\n default: return \"none\"; break;\n }\n };\n\n var edgeLineTypeHandler = function( ele )\n {\n switch (ele._private.data['type']){\n case \"ACTIVATES\": return \"solid\"; break;\n case \"INHIBITS\": return \"solid\"; break;\n case \"INDUCES\": return \"dashed\"; break;\n case \"REPRESSES\": return \"dashed\"; break;\n case \"BINDS\": return \"solid\"; break;\n default: return \"solid\"; break;\n }\n };\n\n var nodeWFunc = function( ele )\n {\n if (ele._private.data['w'])\n {\n return ele._private.data['w'];\n }\n else\n return 0;\n };\n\n var nodeHFunc = function( ele )\n {\n if (ele._private.data['h'])\n {\n return ele._private.data['h'];\n }\n else\n return 0;\n };\n\n return styleSheet;\n})();\n","var panzoomOptions =\n{\n zoomFactor: 0.05, // zoom factor per zoom tick\n zoomDelay: 45, // how many ms between zoom ticks\n minZoom: 0.1, // min zoom level\n maxZoom: 10, // max zoom level\n fitPadding: 50, // padding when fitting\n panSpeed: 10, // how many ms in between pan ticks\n panDistance: 10, // max pan distance per tick\n panDragAreaSize: 75, // the length of the pan drag box in which the vector for panning is calculated (bigger = finer control of pan speed and direction)\n panMinPercentSpeed: 0.25, // the slowest speed we can pan by (as a percent of panSpeed)\n panInactiveArea: 8, // radius of inactive area in pan drag box\n panIndicatorMinOpacity: 0.5, // min opacity of pan indicator (the draggable nib); scales from this to 1.0\n zoomOnly: false, // a minimal version of the ui only with zooming (useful on systems with bad mousewheel resolution)\n fitSelector: undefined, // selector of elements to fit\n animateOnFit: function(){ // whether to animate on fit\n return false;\n },\n fitAnimationDuration: 1000, // duration of animation on fit\n\n // icon class names\n sliderHandleIcon: 'fa fa-minus',\n zoomInIcon: 'fa fa-plus',\n zoomOutIcon: 'fa fa-minus',\n resetIcon: 'fa fa-expand'\n};\n\nmodule.exports = panzoomOptions;\n","module.exports = require(\"cytoscape-navigator\");",";(function(){ 'use strict';\n\n var $ = typeof jQuery === typeof undefined ? null : jQuery;\n\n var register = function( cytoscape, $ ){\n \n if( !cytoscape ){ return; } // can't register if cytoscape unspecified\n \n var defaults = {\n // List of initial menu items\n menuItems: [\n /*\n {\n id: 'remove',\n content: 'remove',\n tooltipText: 'remove',\n selector: 'node, edge',\n onClickFunction: function () {\n console.log('remove element');\n },\n hasTrailingDivider: true\n },\n {\n id: 'hide',\n content: 'hide',\n tooltipText: 'remove',\n selector: 'node, edge',\n onClickFunction: function () {\n console.log('hide element');\n },\n disabled: true\n }*/\n ],\n // css classes that menu items will have\n menuItemClasses: [\n // add class names to this list\n ],\n // css classes that context menu will have\n contextMenuClasses: [\n // add class names to this list\n ]\n };\n \n var eventCyTapStart; // The event to be binded on tap start\n \n // To initialize with options.\n cytoscape('core', 'contextMenus', function (opts) {\n var cy = this;\n \n // Initilize scratch pad\n if (!cy.scratch('cycontextmenus')) {\n cy.scratch('cycontextmenus', {});\n }\n \n var options = getScratchProp('options');\n var $cxtMenu = getScratchProp('cxtMenu');\n var menuItemCSSClass = 'cy-context-menus-cxt-menuitem';\n var dividerCSSClass = 'cy-context-menus-divider';\n \n // Merge default options with the ones coming from parameter\n function extend(defaults, options) {\n var obj = {};\n\n for (var i in defaults) {\n obj[i] = defaults[i];\n }\n\n for (var i in options) {\n obj[i] = options[i];\n }\n\n return obj;\n };\n\n function getScratchProp(propname) {\n return cy.scratch('cycontextmenus')[propname];\n };\n \n function setScratchProp(propname, value) {\n cy.scratch('cycontextmenus')[propname] = value;\n };\n\n function preventDefaultContextTap() {\n $(\".cy-context-menus-cxt-menu\").contextmenu( function() {\n return false;\n });\n }\n\n // Get string representation of css classes\n function getMenuItemClassStr(classes, hasTrailingDivider) {\n var str = getClassStr(classes);\n\n str += ' ' + menuItemCSSClass;\n\n if(hasTrailingDivider) {\n str += ' ' + dividerCSSClass;\n }\n\n return str;\n }\n\n // Get string representation of css classes\n function getClassStr(classes) {\n var str = '';\n\n for( var i = 0; i < classes.length; i++ ) {\n var className = classes[i];\n str += className;\n if(i !== classes.length - 1) {\n str += ' ';\n }\n }\n\n return str;\n }\n\n function displayComponent($component) {\n $component.css('display', 'block');\n }\n\n function hideComponent($component) {\n $component.css('display', 'none');\n }\n\n function hideMenuItemComponents() {\n $cxtMenu.children().css('display', 'none');\n }\n\n function bindOnClickFunction($component, onClickFcn) {\n var callOnClickFcn;\n\n $component.on('click', callOnClickFcn = function() {\n onClickFcn(getScratchProp('currentCyEvent'));\n });\n\n $component.data('call-on-click-function', callOnClickFcn); \n }\n\n function bindCyCxttap($component, selector, coreAsWell) {\n function _cxtfcn(event) {\n setScratchProp('currentCyEvent', event);\n adjustCxtMenu(event); // adjust the position of context menu\n if ($component.data('show')) {\n // Now we have a visible element display context menu if it is not visible\n if (!$cxtMenu.is(':visible')) {\n displayComponent($cxtMenu);\n }\n // anyVisibleChild indicates if there is any visible child of context menu if not do not show the context menu\n setScratchProp('anyVisibleChild', true);// there is visible child\n displayComponent($component); // display the component\n }\n\n // If there is no visible element hide the context menu as well(If it is visible)\n if (!getScratchProp('anyVisibleChild') && $cxtMenu.is(':visible')) {\n hideComponent($cxtMenu);\n }\n }\n\n var cxtfcn;\n var cxtCoreFcn;\n\n if(coreAsWell) {\n cy.on('cxttap', cxtCoreFcn = function(event) {\n var target = event.target || event.cyTarget;\n if( target != cy ) {\n return;\n }\n\n _cxtfcn(event);\n });\n }\n\n if(selector) {\n cy.on('cxttap', selector, cxtfcn = function(event) {\n _cxtfcn(event);\n });\n }\n\n // Bind the event to menu item to be able to remove it back\n $component.data('cy-context-menus-cxtfcn', cxtfcn);\n $component.data('cy-context-menus-cxtcorefcn', cxtCoreFcn);\n }\n\n function bindCyEvents() {\n cy.on('tapstart', eventCyTapStart = function(){\n hideComponent($cxtMenu);\n setScratchProp('cxtMenuPosition', undefined);\n setScratchProp('currentCyEvent', undefined);\n });\n }\n\n function performBindings($component, onClickFcn, selector, coreAsWell) {\n bindOnClickFunction($component, onClickFcn);\n bindCyCxttap($component, selector, coreAsWell);\n }\n\n // Adjusts context menu if necessary\n function adjustCxtMenu(event) {\n var currentCxtMenuPosition = getScratchProp('cxtMenuPosition');\n var cyPos = event.position || event.cyPosition;\n\n if( currentCxtMenuPosition != cyPos ) {\n hideMenuItemComponents();\n setScratchProp('anyVisibleChild', false);// we hide all children there is no visible child remaining\n setScratchProp('cxtMenuPosition', cyPos);\n\n var containerPos = $(cy.container()).offset();\n var renderedPos = event.renderedPosition || event.cyRenderedPosition;\n\n var borderThickness = parseInt($(cy.container()).css(\"border-width\").replace(\"px\",\"\"));\n if(borderThickness > 0){\n containerPos.top += borderThickness;\n containerPos.left += borderThickness;\n }\n \n // var left = containerPos.left + renderedPos.x;\n // var top = containerPos.top + renderedPos.y;\n //$cxtMenu.css('left', left);\n //$cxtMenu.css('top', top);\n\n\n var containerHeight = $(cy.container()).innerHeight();\n var containerWidth = $(cy.container()).innerWidth(); \n\n var horizontalSplit = containerHeight/2 ;\n var verticalSplit = containerWidth/2 ;\n var windowHeight = $(window).height();\n var windowWidth = $(window).width(); \n \n \n //When user click on bottom-left part of window\n if(renderedPos.y > horizontalSplit && renderedPos.x <= verticalSplit) {\n $cxtMenu.css(\"left\", renderedPos.x + containerPos.left);\n $cxtMenu.css(\"bottom\", windowHeight - (containerPos.top + renderedPos.y));\n $cxtMenu.css(\"right\", \"auto\");\n $cxtMenu.css(\"top\", \"auto\");\n } else if(renderedPos.y > horizontalSplit && renderedPos.x > verticalSplit) {\n //When user click on bottom-right part of window\n $cxtMenu.css(\"right\", windowWidth - (containerPos.left+ renderedPos.x));\n $cxtMenu.css(\"bottom\", windowHeight - (containerPos.top + renderedPos.y));\n $cxtMenu.css(\"left\", \"auto\");\n $cxtMenu.css(\"top\", \"auto\");\n } else if(renderedPos.y <= horizontalSplit && renderedPos.x <= verticalSplit) {\n //When user click on top-left part of window\n $cxtMenu.css(\"left\", renderedPos.x + containerPos.left);\n $cxtMenu.css(\"top\", renderedPos.y + containerPos.top);\n $cxtMenu.css(\"right\", \"auto\");\n $cxtMenu.css(\"bottom\", \"auto\");\n } else {\n //When user click on top-right part of window\n $cxtMenu.css(\"right\", windowWidth - (renderedPos.x + containerPos.left));\n $cxtMenu.css(\"top\", renderedPos.y + containerPos.top);\n $cxtMenu.css(\"left\", \"auto\");\n $cxtMenu.css(\"bottom\", \"auto\");\n }\n }\n }\n\n function createAndAppendMenuItemComponents(menuItems) {\n for (var i = 0; i < menuItems.length; i++) {\n createAndAppendMenuItemComponent(menuItems[i]);\n }\n }\n\n function createAndAppendMenuItemComponent(menuItem) {\n // Create and append menu item\n var $menuItemComponent = createMenuItemComponent(menuItem);\n appendComponentToCxtMenu($menuItemComponent);\n\n performBindings($menuItemComponent, menuItem.onClickFunction, menuItem.selector, menuItem.coreAsWell);\n }//insertComponentBeforeExistingItem(component, existingItemID)\n\n function createAndInsertMenuItemComponentBeforeExistingComponent(menuItem, existingComponentID) {\n // Create and insert menu item\n var $menuItemComponent = createMenuItemComponent(menuItem);\n insertComponentBeforeExistingItem($menuItemComponent, existingComponentID);\n\n performBindings($menuItemComponent, menuItem.onClickFunction, menuItem.selector, menuItem.coreAsWell);\n }\n\n // create cxtMenu and append it to body\n function createAndAppendCxtMenuComponent() {\n var classes = getClassStr(options.contextMenuClasses);\n// classes += ' cy-context-menus-cxt-menu';\n $cxtMenu = $('
');\n $cxtMenu.addClass('cy-context-menus-cxt-menu');\n setScratchProp('cxtMenu', $cxtMenu);\n\n $('body').append($cxtMenu);\n return $cxtMenu;\n }\n\n // Creates a menu item as an html component\n function createMenuItemComponent(item) {\n var classStr = getMenuItemClassStr(options.menuItemClasses, item.hasTrailingDivider);\n var itemStr = '';\n };\n\n var $menuItemComponent = $(itemStr);\n\n $menuItemComponent.data('selector', item.selector); \n $menuItemComponent.data('on-click-function', item.onClickFunction);\n $menuItemComponent.data('show', (typeof(item.show) === 'undefined' || item.show)); \n return $menuItemComponent;\n }\n\n // Appends the given component to cxtMenu\n function appendComponentToCxtMenu(component) {\n $cxtMenu.append(component);\n bindMenuItemClickFunction(component);\n }\n\n // Insert the given component to cxtMenu just before the existing item with given ID\n function insertComponentBeforeExistingItem(component, existingItemID) {\n var $existingItem = $('#' + existingItemID);\n component.insertBefore($existingItem);\n }\n\n function destroyCxtMenu() {\n if(!getScratchProp('active')) {\n return;\n }\n\n removeAndUnbindMenuItems();\n\n cy.off('tapstart', eventCyTapStart);\n\n $cxtMenu.remove();\n $cxtMenu = undefined;\n setScratchProp($cxtMenu, undefined);\n setScratchProp('active', false);\n setScratchProp('anyVisibleChild', false);\n }\n\n function removeAndUnbindMenuItems() {\n var children = $cxtMenu.children();\n\n $(children).each(function() {\n removeAndUnbindMenuItem($(this));\n });\n }\n\n function removeAndUnbindMenuItem(itemID) {\n var $component = typeof itemID === 'string' ? $('#' + itemID) : itemID;\n var cxtfcn = $component.data('cy-context-menus-cxtfcn');\n var selector = $component.data('selector');\n var callOnClickFcn = $component.data('call-on-click-function');\n var cxtCoreFcn = $component.data('cy-context-menus-cxtcorefcn');\n\n if(cxtfcn) {\n cy.off('cxttap', selector, cxtfcn);\n }\n\n if(cxtCoreFcn) {\n cy.off('cxttap', cxtCoreFcn);\n }\n\n if(callOnClickFcn) {\n $component.off('click', callOnClickFcn);\n }\n\n $component.remove();\n }\n\n function moveBeforeOtherMenuItemComponent(componentID, existingComponentID) {\n if( componentID === existingComponentID ) {\n return;\n }\n\n var $component = $('#' + componentID).detach();\n var $existingComponent = $('#' + existingComponentID);\n\n $component.insertBefore($existingComponent);\n }\n\n function bindMenuItemClickFunction(component) {\n component.click( function() {\n hideComponent($cxtMenu);\n setScratchProp('cxtMenuPosition', undefined);\n });\n }\n\n function disableComponent(componentID) {\n $('#' + componentID).attr('disabled', true);\n }\n\n function enableComponent(componentID) {\n $('#' + componentID).attr('disabled', false);\n }\n\n function setTrailingDivider(componentID, status) {\n var $component = $('#' + componentID);\n if(status) {\n $component.addClass(dividerCSSClass);\n }\n else {\n $component.removeClass(dividerCSSClass);\n }\n }\n\n // Get an extension instance to enable users to access extension methods\n function getInstance(cy) {\n var instance = {\n // Returns whether the extension is active\n isActive: function() {\n return getScratchProp('active');\n },\n // Appends given menu item to the menu items list.\n appendMenuItem: function(item) {\n createAndAppendMenuItemComponent(item);\n return cy;\n },\n // Appends menu items in the given list to the menu items list.\n appendMenuItems: function(items) {\n createAndAppendMenuItemComponents(items);\n return cy;\n },\n // Removes the menu item with given ID.\n removeMenuItem: function(itemID) {\n removeAndUnbindMenuItem(itemID);\n return cy;\n },\n // Sets whether the menuItem with given ID will have a following divider.\n setTrailingDivider: function(itemID, status) {\n setTrailingDivider(itemID, status);\n return cy;\n },\n // Inserts given item before the existingitem.\n insertBeforeMenuItem: function(item, existingItemID) {\n createAndInsertMenuItemComponentBeforeExistingComponent(item, existingItemID);\n return cy;\n },\n // Moves the item with given ID before the existingitem.\n moveBeforeOtherMenuItem: function(itemID, existingItemID) {\n moveBeforeOtherMenuItemComponent(itemID, existingItemID);\n return cy;\n },\n // Disables the menu item with given ID.\n disableMenuItem: function(itemID) {\n disableComponent(itemID);\n return cy;\n },\n // Enables the menu item with given ID.\n enableMenuItem: function(itemID) {\n enableComponent(itemID);\n return cy;\n },\n // Disables the menu item with given ID.\n hideMenuItem: function(itemID) {\n $('#'+itemID).data('show', false);\n hideComponent($('#'+itemID));\n return cy;\n },\n // Enables the menu item with given ID.\n showMenuItem: function(itemID) {\n $('#'+itemID).data('show', true);\n displayComponent($('#'+itemID));\n return cy;\n },\n // Destroys the extension instance\n destroy: function() {\n destroyCxtMenu();\n return cy;\n }\n };\n\n return instance;\n }\n\n if ( opts !== 'get' ) {\n // merge the options with default ones\n options = extend(defaults, opts);\n setScratchProp('options', options);\n\n // Clear old context menu if needed\n if(getScratchProp('active')) {\n destroyCxtMenu();\n }\n\n setScratchProp('active', true);\n\n $cxtMenu = createAndAppendCxtMenuComponent();\n\n var menuItems = options.menuItems;\n createAndAppendMenuItemComponents(menuItems);\n\n bindCyEvents();\n preventDefaultContextTap();\n }\n \n return getInstance(this);\n });\n };\n\n if( typeof module !== 'undefined' && module.exports ){ // expose as a commonjs module\n module.exports = register;\n }\n\n if( typeof define !== 'undefined' && define.amd ){ // expose as an amd/requirejs module\n define('cytoscape-context-menus', function(){\n return register;\n });\n }\n\n if( typeof cytoscape !== 'undefined' && $ ){ // expose to global cytoscape (i.e. window.cytoscape)\n register( cytoscape, $ );\n }\n\n})();\n","module.exports = require(\"konva\");",";\n(function () {\n 'use strict';\n\n // registers the extension on a cytoscape lib ref\n var register = function (cytoscape, $) {\n\n if (!cytoscape || !$) {\n return;\n } // can't register if cytoscape unspecified\n\n var options = {\n node: {\n highlighted: {}, // styles for when nodes are highlighted.\n unhighlighted: {// styles for when nodes are unhighlighted.\n 'opacity': 0.3\n }\n },\n edge: {\n highlighted: {}, // styles for when edges are highlighted.\n unhighlighted: {// styles for when edges are unhighlighted.\n 'opacity': 0.3\n }\n },\n setVisibilityOnHide: false, // whether to set visibility on hide/show\n setDisplayOnHide: true, // whether to set display on hide/show\n zoomAnimationDuration: 1500, //default duration for zoom animation speed\n neighbor: function(node){ // return desired neighbors of tapheld node\n return false;\n },\n neighborSelectTime: 500 //ms, time to taphold to select desired neighbors \n };\n\n\n var undoRedo = require(\"./undo-redo\");\n var viewUtilities = require(\"./view-utilities\");\n var Mousetrap = require('mousetrap');\n \n cytoscape('core', 'viewUtilities', function (opts) {\n var cy = this;\n\n // If 'get' is given as the param then return the extension instance\n if (opts === 'get') {\n return getScratch(cy).instance;\n }\n\n $.extend(true, options, opts);\n\n function getScratch(eleOrCy) {\n if (!eleOrCy.scratch(\"_viewUtilities\")) {\n eleOrCy.scratch(\"_viewUtilities\", {});\n }\n\n return eleOrCy.scratch(\"_viewUtilities\");\n }\n\n if (!getScratch(cy).initialized) {\n getScratch(cy).initialized = true; \n\n // create a view utilities instance\n var instance = viewUtilities(cy, options);\n\n if (cy.undoRedo) {\n var ur = cy.undoRedo(null, true);\n undoRedo(cy, ur, instance);\n }\n\n // set the instance on the scratch pad\n getScratch(cy).instance = instance;\n\n var mt = new Mousetrap();\n var shiftKeyDown = false;\n mt.bind([\"shift\"], function () {\n shiftKeyDown = true;\n }, \"keydown\");\n mt.bind([\"shift\"], function () {\n shiftKeyDown = false;\n }, \"keyup\");\n //Select the desired neighbors after taphold-and-free \n cy.on('taphold', 'node', function(event){ \n var target = event.target || event.cyTarget;\n var tapheld = false;\n var neighborhood;\n var timeout = setTimeout(function(){ \n if(shiftKeyDown == true){\n cy.elements().unselect();\n neighborhood = options.neighbor(target);\n neighborhood.select();\n target.lock();\n tapheld = true; \n }\n }, options.neighborSelectTime - 500);\n cy.on('free', 'node', function(){\n var targetTapheld = event.target || event.cyTarget;\n if(target == targetTapheld && tapheld === true){\n tapheld = false;\n neighborhood.select();\n target.unlock();\n }\n else{\n clearTimeout(timeout);\n }\n });\n cy.on('drag', 'node', function(){\n var targetDragged = event.target || event.cyTarget; \n if(target == targetDragged && tapheld === false){\n clearTimeout(timeout);\n }\n })\n });\n }\n\n // return the instance of extension\n return getScratch(cy).instance;\n });\n\n };\n\n if (typeof module !== 'undefined' && module.exports) { // expose as a commonjs module\n module.exports = register;\n }\n\n if (typeof define !== 'undefined' && define.amd) { // expose as an amd/requirejs module\n define('cytoscape-view-utilities', function () {\n return register;\n });\n }\n\n if (typeof cytoscape !== 'undefined' && typeof $ !== \"undefined\") { // expose to global cytoscape (i.e. window.cytoscape)\n register(cytoscape, $);\n }\n\n})();\n","// Registers ur actions related to highlight\nfunction highlightUR(cy, ur, viewUtilities) {\n function getStatus(eles) {\n eles = eles ? eles : cy.elements();\n return {\n highlighteds: eles.filter(\".highlighted:visible\"),\n unhighlighteds: eles.filter(\".unhighlighted:visible\"),\n notHighlighteds: eles.filter(\":visible\").not(\".highlighted, .unhighlighted\")\n };\n }\n\n function generalUndo(args) {\n\n var current = args.current;\n var highlighteds = viewUtilities.highlight(args.highlighteds);\n var unhighlighteds = viewUtilities.unhighlight(args.unhighlighteds);\n var notHighlighteds = viewUtilities.removeHighlights(args.notHighlighteds);\n\n\n return {\n highlighteds: highlighteds,\n unhighlighteds: unhighlighteds,\n notHighlighteds: notHighlighteds,\n current: current\n };\n }\n\n function generalRedo(args) {\n\n var current = args.current;\n var highlighteds = viewUtilities.highlight(args.current.highlighteds);\n var unhighlighteds = viewUtilities.unhighlight(args.current.unhighlighteds);\n var notHighlighteds = viewUtilities.removeHighlights(args.current.notHighlighteds);\n\n return {\n highlighteds: highlighteds,\n unhighlighteds: unhighlighteds,\n notHighlighteds: notHighlighteds,\n current: current\n };\n }\n\n function generateDoFunc(func) {\n return function (eles) {\n var res = getStatus();\n\n if (eles.firstTime)\n viewUtilities[func](eles);\n else\n generalRedo(eles);\n\n res.current = getStatus();\n\n return res;\n };\n }\n\n function urRemoveHighlights(args) {\n var res = getStatus();\n\n if (args.firstTime)\n viewUtilities.removeHighlights();\n else\n generalRedo(args);\n\n res.current = getStatus();\n\n return res;\n }\n\n ur.action(\"highlightNeighbors\", generateDoFunc(\"highlightNeighbors\"), generalUndo);\n ur.action(\"highlightNeighbours\", generateDoFunc(\"highlightNeighbours\"), generalUndo);\n ur.action(\"highlight\", generateDoFunc(\"highlight\"), generalUndo);\n ur.action(\"unhighlight\", generateDoFunc(\"unhighlight\"), generalUndo);\n ur.action(\"unhighlightNeighbors\", generateDoFunc(\"unhighlightNeighbors\"), generalUndo);\n ur.action(\"unhighlightNeighbours\", generateDoFunc(\"unhighlightNeighbours\"), generalUndo);\n ur.action(\"removeHighlights\", urRemoveHighlights, generalUndo);\n}\n\n// Registers ur actions related to hide/show\nfunction hideShowUR(cy, ur, viewUtilities) {\n function urShow(eles) {\n return viewUtilities.show(eles);\n }\n\n function urHide(eles) {\n return viewUtilities.hide(eles);\n }\n\n ur.action(\"show\", urShow, urHide);\n ur.action(\"hide\", urHide, urShow);\n}\n\nmodule.exports = function (cy, ur, viewUtilities) {\n highlightUR(cy, ur, viewUtilities);\n hideShowUR(cy, ur, viewUtilities);\n};","var viewUtilities = function (cy, options) {\n\n // Set style for highlighted and unhighligthed eles\n cy\n .style()\n .selector(\"node.highlighted\")\n .css(options.node.highlighted)\n .selector(\"node.unhighlighted\")\n .css(options.node.unhighlighted)\n .selector(\"edge.highlighted\")\n .css(options.edge.highlighted)\n .selector(\"edge.unhighlighted\")\n .css(options.edge.unhighlighted)\n .update();\n\n // Helper functions for internal usage (not to be exposed)\n function highlight(eles) {\n eles.removeClass(\"unhighlighted\").addClass(\"highlighted\");\n }\n\n function getWithNeighbors(eles) {\n return eles.add(eles.descendants()).closedNeighborhood();\n }\n // the instance to be returned\n var instance = {};\n var Mousetrap = require('mousetrap');\n // Section hide-show\n\n // hide given eles\n instance.hide = function (eles) {\n eles = eles.filter(\":visible\");\n eles = eles.union(eles.connectedEdges());\n\n eles.unselect();\n\n if (options.setVisibilityOnHide) {\n eles.css('visibility', 'hidden');\n }\n\n if (options.setDisplayOnHide) {\n eles.css('display', 'none');\n }\n\n return eles;\n };\n\n // unhide given eles\n instance.show = function (eles) {\n eles = eles.not(\":visible\");\n eles = eles.union(eles.connectedEdges());\n\n eles.unselect();\n\n if (options.setVisibilityOnHide) {\n eles.css('visibility', 'visible');\n }\n\n if (options.setDisplayOnHide) {\n eles.css('display', 'element');\n }\n\n return eles;\n };\n\n // Section highlight\n\n // Highlights eles & unhighlights others at first use.\n instance.highlight = function (eles) {\n var others = cy.elements().difference(eles.union(eles.ancestors()));\n\n if (cy.$(\".highlighted:visible\").length == 0)\n this.unhighlight(others);\n\n highlight(eles); // Use the helper here\n\n return eles;\n };\n\n // Just unighlights eles.\n instance.unhighlight = function (eles) {\n eles.removeClass(\"highlighted\").addClass(\"unhighlighted\");\n };\n\n // Highlights eles' neighborhood & unhighlights others' neighborhood at first use.\n instance.highlightNeighbors = function (eles) {\n var allEles = getWithNeighbors(eles);\n\n return this.highlight(allEles);\n };\n\n // Aliases: this.highlightNeighbours()\n instance.highlightNeighbours = function (eles) {\n return this.highlightNeighbors(eles);\n };\n\n // Just unhighlights eles and their neighbors.\n instance.unhighlightNeighbors = function (eles) {\n var allEles = getWithNeighbors(eles);\n\n return this.unhighlight(allEles);\n };\n\n // Aliases: this.unhighlightNeighbours()\n instance.unhighlightNeighbours = function (eles) {\n this.unhighlightNeighbors(eles);\n };\n\n // Remove highlights & unhighlights from eles.\n // If eles is not defined considers cy.elements()\n instance.removeHighlights = function (eles) {\n if (!eles) {\n eles = cy.elements();\n }\n\n return eles\n .removeClass(\"highlighted\")\n .removeClass(\"unhighlighted\")\n .removeData(\"highlighted\"); // TODO check if remove data is needed here\n };\n\n // Indicates if the ele is highlighted\n instance.isHighlighted = function (ele) {\n return ele.is(\".highlighted:visible\") ? true : false;\n };\n\n //Zoom selected Nodes\n instance.zoomToSelected = function (eles){\n var boundingBox = eles.boundingBox();\n var diff_x = Math.abs(boundingBox.x1 - boundingBox.x2);\n var diff_y = Math.abs(boundingBox.y1 - boundingBox.y2);\n var padding;\n if( diff_x >= 200 || diff_y >= 200){\n padding = 50;\n }\n else{\n padding = (cy.width() < cy.height()) ?\n ((200 - diff_x)/2 * cy.width() / 200) : ((200 - diff_y)/2 * cy.height() / 200);\n }\n\n cy.animate({\n fit: {\n eles: eles,\n padding: padding\n }\n }, {\n duration: options.zoomAnimationDuration\n });\n return eles;\n };\n\n //Marquee Zoom\n var tabStartHandler;\n var tabEndHandler;\n\n instance.enableMarqueeZoom = function(callback){\n\n var mt = new Mousetrap();\n var shiftKeyDown = false;\n var rect_start_pos_x, rect_start_pos_y, rect_end_pos_x, rect_end_pos_y;\n //Make the cy unselectable\n cy.autounselectify(true);\n\n mt.bind([\"shift\"], function() {\n shiftKeyDown = true;\n }, \"keydown\");\n\n mt.bind([\"shift\"], function(){\n shiftKeyDown = false;\n }, \"keyup\");\n\n cy.one('tapstart', tabStartHandler = function(event){\n if( shiftKeyDown == true){\n rect_start_pos_x = event.position.x;\n rect_start_pos_y = event.position.y;\n rect_end_pos_x = undefined;\n }\n });\n cy.one('tapend', tabEndHandler = function(event){\n rect_end_pos_x = event.position.x;\n rect_end_pos_y = event.position.y;\n //check whether corners of rectangle is undefined\n //abort marquee zoom if one corner is undefined\n if( rect_start_pos_x == undefined || rect_end_pos_x == undefined){\n cy.autounselectify(false);\n if(callback){\n callback();\n }\n return;\n }\n //Reoder rectangle positions\n //Top left of the rectangle (rect_start_pos_x, rect_start_pos_y)\n //right bottom of the rectangle (rect_end_pos_x, rect_end_pos_y)\n if(rect_start_pos_x > rect_end_pos_x){\n var temp = rect_start_pos_x;\n rect_start_pos_x = rect_end_pos_x;\n rect_end_pos_x = temp;\n }\n if(rect_start_pos_y > rect_end_pos_y){\n var temp = rect_start_pos_y;\n rect_start_pos_y = rect_end_pos_y;\n rect_end_pos_y = temp;\n }\n\n //Extend sides of selected rectangle to 200px if less than 100px\n if(rect_end_pos_x - rect_start_pos_x < 200){\n var extendPx = (200 - (rect_end_pos_x - rect_start_pos_x)) / 2;\n rect_start_pos_x -= extendPx;\n rect_end_pos_x += extendPx;\n }\n if(rect_end_pos_y - rect_start_pos_y < 200){\n var extendPx = (200 - (rect_end_pos_y - rect_start_pos_y)) / 2;\n rect_start_pos_y -= extendPx;\n rect_end_pos_y += extendPx;\n }\n\n //Check whether rectangle intersects with bounding box of the graph\n //if not abort marquee zoom\n if((rect_start_pos_x > cy.elements().boundingBox().x2)\n ||(rect_end_pos_x < cy.elements().boundingBox().x1)\n ||(rect_start_pos_y > cy.elements().boundingBox().y2)\n ||(rect_end_pos_y < cy.elements().boundingBox().y1)){\n cy.autounselectify(false);\n if(callback){\n callback();\n }\n return;\n }\n\n //Calculate zoom level\n var zoomLevel = Math.min( cy.width()/ ( Math.abs(rect_end_pos_x- rect_start_pos_x)),\n cy.height() / Math.abs( rect_end_pos_y - rect_start_pos_y));\n\n var diff_x = cy.width() / 2 - (cy.pan().x + zoomLevel * (rect_start_pos_x + rect_end_pos_x) / 2);\n var diff_y = cy.height() / 2 - (cy.pan().y + zoomLevel * (rect_start_pos_y + rect_end_pos_y) / 2);\n\n cy.animate({\n panBy : {x: diff_x, y: diff_y},\n zoom : zoomLevel,\n duration: options.zoomAnimationDuration,\n complete: function(){\n if (callback) {\n callback();\n }\n cy.autounselectify(false);\n }\n });\n });\n };\n\n instance.disableMarqueeZoom = function(){\n cy.off('tapstart', tabStartHandler );\n cy.off('tapend', tabEndHandler);\n cy.autounselectify(false);\n };\n\n // return the instance\n return instance;\n};\n\nmodule.exports = viewUtilities;\n","module.exports = require(\"cytoscape-grid-guide\");","module.exports = require(\"cytoscape-qtip\");","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAh0AAABxCAYAAABxyRHvAAAABGdBTUEAALGPC/xhBQAAQABJREFUeAHt3QeYLEdxAOBBPBtjbIxlA8YEP4GMyME2CAS2HgIEmCSRjEWQSCKDyAgEepgghIgig0GPnDMyGR6YnHMGCRBRIGOwwXlcf0Mtc3Oze7t3t3v33nV93+7szvR0V1dXV1VXV3efrQ1oNin88Ic/bPLzpS99qfnyl7/cfOtb32rOOOOM5sc//nHz05/+tPnlL3/ZZBXOdrazNec85zmb85znPM15z3ve5k//9E+b7du3NwcccEBzyUtesjn/+c/fnO985yvXffbZZ5PWuqJVKVApUClQKVApsFdSYOfZNovR8ZOf/KT5+te/3nz6059uPvKRjxQD4wc/+EExOn7xi1+sC/UZJIyOP/mTP2kufvGLN1e+8pWbK17xis3+++9fDJF1KaRmUilQKVApUClQKVApMESBjTU6vvrVrzbvf//7m7e97W3F2GB0/N///d8QonO9d9GLXrS57GUv2xx66KHNjh07mktd6lJzLa9mXilQKVApUClQKbAFKbB4o+P73/9+8/a3v7155Stf2Xz4wx9uzjrrrE1Fd1MzV7rSlZrDDz+8ud71rlemZzYVghWZSoFKgUqBSoFKgT2TAoszOr7whS80u3btal796lc3p59++qYnl/iQC17wgs0NbnCD5sgjj2yucpWrbHqcK4KVApUClQKVApUCm5gC8zc6Pve5zzUnn3xyMTYEfq4FxGSc+9znbn73d3+3+Z3f+Z3mt37rt5pt27Y1DATwv//7v83//M//NP/xH/9RAkx//vOfNz/72c/WUmR5V3m8Hve4xz3K9MuaM6wZVApUClQKVApUCmw9CszP6Pje977XPOEJT2ie//znl1Ums9D2j//4j5s/+7M/a8RaXPrSl24udrGLNRe5yEWaP/iDPxgZHec4xzma3/7t315idDA40uhgeKTR8aMf/ag57bTTGitgvvKVrzTf+c53yioYaWcBRs/Nbnaz5gEPeECJAZnl3Zq2UqBSoFKgUqBSYItTYP2NDt6GF77whc0//MM/TD2N8nu/93vN5S53ueav//qvm4MPPrisJrHUlSdjHsAIsfT2U5/6VPOud72r+cQnPtF84xvfmKooXhXLce95z3uWD0OoQqVApUClQKVApUClwIoUWF+j49vf/nbzoAc9qHn5y1++Ysm8FAceeGDxHBxyyCFlxchG7Z1x5plnNp/85Ceb17/+9c1b3vKWYpCsVIGzn/3szdWudrXmhBNOaA466KCVktfnlQKVApUClQKVAludAutndFj2KubBstdJwEtgiuI2t7lNMTo2ytAYh+N3v/vd5tRTT21e9KIXNR/4wAdGG4+NS68+xx9/fHOXu9ylYYhUqBSoFKgUqBSoFKgUGKTA+hgdT33qU5tjjz22+fd///fBUtwUp3G7292uufOd71xiNMYm3CQPxIS89a1vbdTt3e9+90SsTAPd8Y53bB772MeWmJOJievDSoFKgUqBSoFKga1JgbUZHQIxH/rQhzYnnXTSWI+A1SVHHHFE8+AHP7hsRb6n0Znx8ZrXvKY58cQTGytxxoF6Xv/612+e8YxnlO3Xx6Wr9ysFKgUqBSoFKgW2KAVWb3T853/+Z3PMMcc0z3rWs8bS7hKXuESJeTjssMPGptkTHjjbRfDpk570pObpT39682//9m+DaJteEQz7ghe8oKy2GUxUb1YKVApUClQKVApsTQqszuj47//+7+Ze97rXRIPjtre9bfEOOOdkbwErc+ym+sAHPrD5/Oc/P1itNDys4LnwhS88mKberBSoFKgUqBSoFNiCFNg581GrPBz3v//9Bw0Oy0n33XffEgdxyimnlIPV9iaiMiiue93rNm9+85vLlJG9QvrAMPnnf/7nEr9iP5AKlQKVApUClQKVApUCv6LATEaHGI4nP/nJzdOe9rRl9GNwOEqesWEVy2ZblbIM4VXeUE8bl4ndsFeHnVH7wPB473vf29zvfvdr/vVf/7X/uP6vFKgUqBSoFKgU2JIUOPvOgGlq7vTXN73pTUXRml7pAkVsKsGUAk/AVgDGxt/8zd8U4+pjH/tY06cJelk+/F//9V9l6/S6nHYrcEWtY6VApUClQKXABArsntro+PKXv9yI0/jxj3+8LD8eDvtaXOMa11j2bG++YcVKHgTnxNz+tuo8Hla8bI/dVS9zmcuMzojZm2lS61YpUClQKVApUCkwhgK7p5pesf+G80ZOHzgd9g//8A+b5zznORt6EBr8NmoaQ1yHGJe73/3ug9u2W+nyiEc8onHKboVKgUqBSoFKgUqBrUyBFY0O0wTPfe5zyy6dfUJRuI9+9KPL/hT9Z4v6z+Cw9fod7nCHQS/MIvBwCu1xxx3X3OQmN1kWy2K5LWPNWTSTNk9bBJ61jEqBSoFKgUqBSoGNpMCKRodplcc97nHLcBQoStHbYXSjgBK3OZm9M2zgZSvyoemfReDn4LfHPOYxzV/8xV8sK860yz/90z81r3jFK8ZuorbspXqjUqBSoFKgUqBSYC+jwNliJN6OqxNledRRRzUveclLliW58pWvXLwftjffCEiD4ylPecqS4m9605uW5bwbgZcYDlum/93f/V3zL//yL0vwEmx7qUtdqtDM6pcKlQLzogA+FMCM58Qd+cwDyAflgL4YEWi9qOBp3lh19fHbsn749HFyXIGDJitUCuypFMDT+p2PgT+e3sNWik7eHMxGWDe84Q1HgiUbylH0b3zjGzcscHScwZH4baThQeA96lGPKjuxEv5dMB113/vetzzfCEYhkH0mAcG9WmWhvn1B3y9LvTei7n089tb/+M9BhXnSs8MVr3nNa666TcfRibFhWbjl89rcfx+ruHj9HvnIRzZXvOIVx70+1X154SkCVr38Puc5z1mMKDzKmHJMwWmnnVb2Bzrf+c7XfOUrXylnIP30pz8dved9RtCtb33rctDkVIVvoUTTyIUkB/mg/7omoO8kyLSrlSuT8t5qz+z9ZBXpRz/60caO34cffnhz8YtffEl7bHKa7Bw7BNKZH//4xy8zODDQ0UcfvWkNDgQ31UIQPvvZzy4HzS2yERgWpnkYbBijC4Tyi1/84uZWt7pVc+lLX7r7aO6/CexPfOITzZlnnjm2LG0rMNiKnBQUYxP3HhA8VvBMCuiVpx1qh6agetnVv6uggDb+0pe+VPjva1/7WmlDnrdXvepVazYA+ugo6wc/+EExPPA1oyANWsqf0l8tyM806fve977iOfziF7/Y/OxnPyvZnetc52r222+/5qCDDmouf/nLFwPr+c9/ftkhWb+TjtEFN/mkQjz3uc/dHHzwwatFaa9975e//GWDV6bdyBD9KTv9GA98//vfLyv0su3HEeo85zlPaS8D1gqrowDe3rVrV9kr66yzzmroGvR3rtkFLnCB1WW6EW+Fch6E8GS0MZIw9bLks//++7dnnHHG4DvzvhkrQdp73/veS/Dp49f9Hx6PNpTsvNFaln+M0NpXv/rVbYyuluEa7t32Pve5Txsddtl787yBdte5znXaYNTSrmEALMPNvYte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\"","module.exports = require(\"@datastructures-js/max-heap\");","import React, { Component } from 'react';\nimport {Row, Col, Image} from \"react-bootstrap\";\nimport autobind from \"autobind-decorator\";\nimport EditorActionsManager from \"../managers/EditorActionsManager\";\nimport {observer} from \"mobx-react\";\nimport {makeObservable, observable} from \"mobx\";\nimport PathwayActions from '../utils/PathwayActions';\n// @ts-ignore\nimport layoutImage from \"../images/toolbar/layout-cose.svg\";\n// @ts-ignore\nimport savePNGImage from \"../images/toolbar/save_png.svg\";\n// @ts-ignore\nimport saveSVGImage from \"../images/toolbar/save_svg.svg\";\n// @ts-ignore\nconst addSelImage = require(\"../images/toolbar/add-selected.svg\");\n// @ts-ignore\nconst addAllImage = require(\"../images/toolbar/add-all.svg\");\n// @ts-ignore\nconst aboutImage = require(\"../images/toolbar/about.svg\");\n// @ts-ignore\nimport openImage from \"../images/toolbar/edit.svg\";\n\nimport { IProfileMetaData, IAlterationData, EModalType } from '../ui/react-pathway-mapper';\n\ninterface IToolbarProps {\n pathwayActions: PathwayActions;\n selectedPathway: string;\n alterationData: IAlterationData;\n handleOpen: (modalId: number) => void;\n genes: any[];\n validGenes: any;\n showMessage: (message: string) => void;\n pathwayGenes: string[];\n onAddGenes: (selectedGenes: string[]) => void;\n patientView ?: boolean;\n}\n\n@observer\nexport default class Toolbar extends React.Component{\n\n\n @observable\n selectedGenes: string[];\n\n @observable\n private editor: EditorActionsManager;\n constructor(props: IToolbarProps){\n super(props);\n makeObservable(this);\n\n this.selectedGenes = [];\n }\n\n \n render(){\n\n\n const studyQuery = \"q=\" + JSON.stringify(this.props.alterationData) + \"&g=\" + this.props.genes.map(gene => gene.hugoGeneSymbol).join(\"+\");\n return (\n
\n {this.props.pathwayActions.saveAs(\"PNG\");}}/>\n\n {this.props.pathwayActions.saveAs(\"SVG\");}}/>\n\n \n {(!this.props.patientView && [\n {\n this.selectedGenes = this.props.pathwayActions.getSelectedNodes()\n .filter((node: any) => node.data().type === \"GENE\")\n .map((node: any) => node.data().name as string);\n\t const noneGeneList = this.props.pathwayActions.getSelectedNodes()\n .filter((node: any) => node.data().type !== \"GENE\")\n .map((node: any) => node.data().name as string);\n const invalidGenes: string[] = [];\n\t let message = \"\";\n if(noneGeneList.length > 0){\n message += \"Selection contains nodes that are not genes: \" + noneGeneList.join(', ') + \". \";\n }\n\n this.selectedGenes.forEach((gene: string) => {\n if(!this.props.validGenes.hasOwnProperty(gene)){\n invalidGenes.push(gene);\n }\n });\n\n if(invalidGenes.length === 0){\n\n if(this.selectedGenes.length > 0 && noneGeneList.length === 0){\n this.props.onAddGenes(this.selectedGenes);\n }\n } else {\n\t message += \"Following gene symbols are invalid or already in gene list: \" + invalidGenes.join(\", \") + \".\";\n }\n\n\t if(message.length > 0) {\n\t this.props.showMessage(message);\n\t }\n }}/>\n ,\n \n {\n\n this.selectedGenes = this.props.pathwayGenes.filter((gene: string) => {\n return this.props.validGenes.hasOwnProperty(gene);\n });\n \n if(this.selectedGenes.length > 0){\n this.props.onAddGenes(this.selectedGenes);\n }\n }}/>,\n \n\n {{window.open(\"http://pathwaymapper.org/?pathwayName=\" + this.props.selectedPathway +\"&\"+ studyQuery )}}}/>\n ])}\n {console.log(\"Here\");this.props.handleOpen(EModalType.CHELP); }}/>\n \n
);\n }\n}\n","/**\n * Created by istemi on 27.09.2016.\n */\n\nexport default class GraphUtilities {\n \n \n createGraphHierarchy(nodes)\n {\n //Some arrays and maps for creating graph hierarchy\n var tree = [];\n var mappedArr = {};\n\n // First map the nodes of the array to an object -> create a hash table.\n for (var i = 0, len = nodes.length; i < len; i++)\n {\n var arrElem = nodes[i];\n mappedArr[arrElem.id()] = arrElem;\n mappedArr[arrElem.id()].childNodes = [];\n }\n\n for (var id in mappedArr)\n {\n var mappedElem = mappedArr[id];\n\n // If the element is not at the root level, add it to its parent array of children.\n if (mappedElem.parent().length > 0)\n {\n mappedArr[mappedElem.parent().id()].childNodes.push(mappedElem);\n }\n // If the element is at the root level, add it to first level elements array.\n else\n {\n tree.push(mappedElem);\n }\n }\n return tree;\n };\n\n /*\n * Creates graph hierarchy from given flat list of nodes list, nodes list is assumed to have parent-child\n * relationship by a field 'parent' which represents to the id of the parent node This function is specific\n * for the needs of TCGA Pathway Curation Tool 04/07/2016\n *\n * @param nodes {array}: flat list of nodes of a graph\n * @return {array}: Tree representation in array, entries are root level nodes. node.children gives children nodes\n * of each node in the returned array.\n * a node in corresponding level.\n *\n * */\n createGraphHierarchyRealTime(nodes)\n {\n //Some arrays and maps for creating graph hierarchy\n var tree = [];\n var mappedArr = {};\n\n // First map the nodes of the array to an object -> create a hash table.\n for (var i = 0, len = nodes.length; i < len; i++)\n {\n var arrElem = nodes[i];\n mappedArr[arrElem.data.id] = arrElem;\n mappedArr[arrElem.data.id].children = [];\n }\n for (var id in mappedArr)\n {\n var mappedElem = mappedArr[id];\n\n // If the element is not at the root level, add it to its parent array of children.\n if (mappedElem.data.parent != -1)\n {\n mappedArr[mappedElem.data.parent].children.push(mappedElem);\n }\n // If the element is at the root level, add it to first level elements array.\n else\n {\n tree.push(mappedElem);\n }\n }\n return tree;\n };\n}","/**\n *\n */\nimport SaveLoadUtility from '../utils/SaveLoadUtility'\nimport EditorActionsManager from '../managers/EditorActionsManager'\nimport GraphUtilities from '../utils/GraphUtilities'\n\nexport default class SVGExporter {\n SVGNameSpace = 'http://www.w3.org/2000/svg'\n svg = document.createElementNS(this.SVGNameSpace, 'svg')\n NODE_FILL_COLOR = 'rgb(255,255,255)'\n FAMILY_FILL_COLOR = 'rgb(255,255,255)'\n FAMILY_STROKE_COLOR = 'rgb(204,204,204)'\n NODE_STROKE_COLOR = 'rgb(0,0,0)'\n COMPARTMENT_STROKE_WIDTH = 2\n NODE_STROKE_WIDTH = 1\n NODE_OPACITY = 0.5\n ROUNDING_FACTOR = 6\n GENOMICDATA_LABEL_Y_OFFSET = -15\n EDGE_WIDTH = 1\n T_WIDTH = 2\n T_HEIGHT = 8\n T_ARROW_HEAD_OFFSET = 2\n TRIANGLE_ARROW_HEAD_HEIGHT = 8\n TRIANGLE_ARROW_HEAD_WIDTH = 8\n DASH_PARAMETERS = '5, 3'\n COMPOUND_MARGIN = 8\n NODE_FONT_SIZE = 14\n\n edgeEditing: any\n editor: EditorActionsManager\n constructor(edgeEditing: any, editor: EditorActionsManager) {\n this.edgeEditing = edgeEditing\n this.editor = editor\n }\n\n resetSVG() {\n this.svg = document.createElementNS(this.SVGNameSpace, 'svg')\n }\n\n exportGraph(nodes, edges) {\n //Reset SVG\n this.resetSVG()\n this.svg.setAttribute('version', '1.1')\n this.svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg')\n //Set viewport of output SVG\n var cyBounds = this.editor.cy.extent()\n this.svg.setAttribute(\n 'viewBox',\n cyBounds.x1 + ' ' + cyBounds.y1 + ' ' + cyBounds.w + ' ' + cyBounds.h\n )\n\n var that = this\n var nodeMap = {}\n\n var nodeTree = new GraphUtilities().createGraphHierarchy(nodes)\n var traverseFunction = function(node) {\n //Create SVG for current node\n nodeMap[node.id()] = node\n var genomicDataSVG = that.editor.getGenomicDataSVG(node).children\n var oncoprintDataSVG = that.editor.getOncoprintDataSVG(node)\n that.svg.appendChild(that.createRect(node))\n var labelOffset =\n (genomicDataSVG && genomicDataSVG.length > 0)\n || (oncoprintDataSVG.outerHTML !== '')\n ? that.GENOMICDATA_LABEL_Y_OFFSET\n : 0\n that.svg.appendChild(that.createText(node, labelOffset))\n\n //Append Genomic Data SVG here\n if (genomicDataSVG) {\n while (genomicDataSVG.length > 0) {\n var elemSVG = genomicDataSVG[0]\n var nodePosition = node.position()\n var svgX = elemSVG.getAttribute('x')\n var svgY = elemSVG.getAttribute('y')\n elemSVG.setAttribute(\n 'x',\n nodePosition.x - node.width() / 2 + parseFloat(svgX)\n )\n elemSVG.setAttribute(\n 'y',\n nodePosition.y - node.height() / 2 + parseFloat(svgY)\n )\n that.svg.appendChild(elemSVG)\n }\n } else if (oncoprintDataSVG.outerHTML !== '') {\n var nodePosition = node.position()\n \n const width = parseInt(oncoprintDataSVG.getAttribute('width'));\n const height = parseInt(oncoprintDataSVG.getAttribute('height'));\n const verticalPadding = 8\n\n const y = nodePosition.y + (node.height() / 2) - (height + verticalPadding)\n oncoprintDataSVG.setAttribute(\n 'x',\n nodePosition.x - (width / 2)\n )\n oncoprintDataSVG.setAttribute(\n 'y', y\n )\n that.svg.appendChild(oncoprintDataSVG);\n }\n\n //Traverse children\n if (node.childNodes) {\n for (var i in node.childNodes) {\n traverseFunction(node.childNodes[i])\n }\n }\n }\n\n //Traverse node hierarchy\n for (var i in nodeTree) {\n var rootLevelNode = nodeTree[i]\n traverseFunction(rootLevelNode)\n }\n\n edges.forEach(function(edge) {\n var source = nodeMap[edge.source().id()]\n var target = nodeMap[edge.target().id()]\n that.drawEdge(edge, source, target)\n })\n\n return this.svg.outerHTML\n }\n\n drawEdge(edge, source, target) {\n var edgeType = edge.data().type\n\n var sourceRectangle = {\n x: source.position().x,\n y: source.position().y,\n width: source.width(),\n height: source.height()\n }\n\n var targetRectangle = {\n x: target.position().x,\n y: target.position().y,\n width: target.width(),\n height: target.height()\n }\n\n //If source or target node is compound node adjust their width and height according to compound margins\n if (source.isParent()) {\n sourceRectangle.width += this.COMPOUND_MARGIN\n sourceRectangle.height += this.COMPOUND_MARGIN\n }\n\n if (target.isParent()) {\n targetRectangle.width += this.COMPOUND_MARGIN\n targetRectangle.height += this.COMPOUND_MARGIN\n }\n\n var numberOfBendPoints = 0\n if (this.edgeEditing.getSegmentPoints(edge) !== undefined)\n numberOfBendPoints = this.edgeEditing.getSegmentPoints(edge).length / 2\n\n var clipPoints\n if (numberOfBendPoints > 0) {\n var lastBendPoint = {\n x: this.edgeEditing.getSegmentPoints(edge)[2 * numberOfBendPoints - 2],\n y: this.edgeEditing.getSegmentPoints(edge)[2 * numberOfBendPoints - 1],\n height: 0,\n width: 0\n }\n //Calculate clipping point of target node with the segment from last bend point by Cohen Sutherland algorithm\n clipPoints = this.findClippingPoints(lastBendPoint, targetRectangle)\n } else {\n //Calculate clipping points of both source and target nodes by Cohen Sutherland algorithm\n clipPoints = this.findClippingPoints(sourceRectangle, targetRectangle)\n }\n\n //Calculate unit vector pointing from source clipping coordinates to target clipping coordinates\n var unitV = this.unitVector({\n x: clipPoints.targetClipPoints.x - clipPoints.sourceClipPoints.x,\n y: clipPoints.targetClipPoints.y - clipPoints.sourceClipPoints.y\n })\n var inverseUnitV = this.scale(unitV, -1)\n\n var targetX = clipPoints.targetClipPoints.x\n var targetY = clipPoints.targetClipPoints.y\n\n //Draw Triangle arrow head\n if (edgeType == 'ACTIVATES' || edgeType == 'INDUCES') {\n targetX =\n clipPoints.targetClipPoints.x +\n this.TRIANGLE_ARROW_HEAD_HEIGHT * inverseUnitV.x\n targetY =\n clipPoints.targetClipPoints.y +\n this.TRIANGLE_ARROW_HEAD_HEIGHT * inverseUnitV.y\n\n var point1Vector = this.rotateVector(unitV, Math.PI / 2)\n var point2Vector = this.rotateVector(unitV, -Math.PI / 2)\n\n point1Vector = this.scale(\n point1Vector,\n this.TRIANGLE_ARROW_HEAD_WIDTH / 2\n )\n point2Vector = this.scale(\n point2Vector,\n this.TRIANGLE_ARROW_HEAD_WIDTH / 2\n )\n\n var point1X = targetX + point1Vector.x\n var point1Y = targetY + point1Vector.y\n\n var point2X = targetX + point2Vector.x\n var point2Y = targetY + point2Vector.y\n\n var polySVG = document.createElementNS(this.SVGNameSpace, 'polygon')\n polySVG.setAttribute(\n 'points',\n point1X +\n ',' +\n point1Y +\n ',' +\n point2X +\n ',' +\n point2Y +\n ',' +\n clipPoints.targetClipPoints.x +\n ',' +\n clipPoints.targetClipPoints.y\n )\n\n this.svg.appendChild(polySVG)\n }\n //Draw T type arrow head\n else if (edgeType === 'INHIBITS' || edgeType === 'REPRESSES') {\n targetX =\n clipPoints.targetClipPoints.x +\n this.T_ARROW_HEAD_OFFSET * inverseUnitV.x\n targetY =\n clipPoints.targetClipPoints.y +\n this.T_ARROW_HEAD_OFFSET * inverseUnitV.y\n\n //Calculate T shape points\n var point1Vector = this.rotateVector(unitV, Math.PI / 2)\n var point2Vector = this.rotateVector(unitV, -Math.PI / 2)\n point1Vector = this.scale(point1Vector, this.T_HEIGHT / 2)\n point2Vector = this.scale(point2Vector, this.T_HEIGHT / 2)\n\n var point1X = targetX + point1Vector.x\n var point1Y = targetY + point1Vector.y\n var point2X = targetX + point2Vector.x\n var point2Y = targetY + point2Vector.y\n\n //Draw edge arrow line here !\n var lineSVG = document.createElementNS(this.SVGNameSpace, 'line')\n lineSVG.setAttribute('x1', point1X)\n lineSVG.setAttribute('y1', point1Y)\n lineSVG.setAttribute('x2', point2X)\n lineSVG.setAttribute('y2', point2Y)\n lineSVG.setAttribute('stroke-width', this.T_WIDTH + '')\n lineSVG.setAttribute('stroke', 'black')\n this.svg.appendChild(lineSVG)\n }\n\n //Draw edge lines here !\n if (numberOfBendPoints > 0) {\n //Calculate initial clipping point of source node with the segment from first bend point\n var firstBendPoint = {\n x: this.edgeEditing.getSegmentPoints(edge)[0],\n y: this.edgeEditing.getSegmentPoints(edge)[1],\n height: 0,\n width: 0\n }\n var initialClipPoint = this.findClippingPoints(\n sourceRectangle,\n firstBendPoint\n )\n\n //Create a copy array of edgeEditing.getSegmentPoints(edge) which contain all the bending points\n // including source and target clipping point. The first elements of the array are source's x and y positions\n // and the last ones are target's x and y positions\n var points = [\n initialClipPoint.sourceClipPoints.x,\n initialClipPoint.sourceClipPoints.y\n ]\n for (var i = 0; i < numberOfBendPoints * 2; i++) {\n points.push(this.edgeEditing.getSegmentPoints(edge)[i])\n }\n points.push(clipPoints.targetClipPoints.x)\n points.push(clipPoints.targetClipPoints.y)\n\n for (var i = 0; i < points.length - 2; i += 2) {\n var lineSVG = document.createElementNS(this.SVGNameSpace, 'line')\n lineSVG.setAttribute('x1', points[i])\n lineSVG.setAttribute('y1', points[i + 1])\n lineSVG.setAttribute('x2', points[i + 2])\n lineSVG.setAttribute('y2', points[i + 3])\n lineSVG.setAttribute('stroke-width', this.EDGE_WIDTH + '')\n lineSVG.setAttribute('stroke', 'black')\n\n //Draw dashed if induces or represses interaction\n if (edgeType == 'INDUCES' || edgeType == 'REPRESSES') {\n lineSVG.setAttribute('stroke-dasharray', this.DASH_PARAMETERS)\n }\n\n this.svg.appendChild(lineSVG)\n }\n } else {\n var lineSVG = document.createElementNS(this.SVGNameSpace, 'line')\n lineSVG.setAttribute('x1', clipPoints.sourceClipPoints.x)\n lineSVG.setAttribute('y1', clipPoints.sourceClipPoints.y)\n lineSVG.setAttribute('x2', targetX)\n lineSVG.setAttribute('y2', targetY)\n lineSVG.setAttribute('stroke-width', this.EDGE_WIDTH + '')\n lineSVG.setAttribute('stroke', 'black')\n\n //Draw dashed if induces or represses interaction\n if (edgeType == 'INDUCES' || edgeType == 'REPRESSES') {\n lineSVG.setAttribute('stroke-dasharray', this.DASH_PARAMETERS)\n }\n\n this.svg.appendChild(lineSVG)\n }\n }\n\n /**\n *\n * **/\n findClippingPoints(sourceRectangle, targetRectangle) {\n var sourceAABB = {\n xMin: sourceRectangle.x - sourceRectangle.width / 2,\n xMax: sourceRectangle.x + sourceRectangle.width / 2,\n yMin: sourceRectangle.y - sourceRectangle.height / 2,\n yMax: sourceRectangle.y + sourceRectangle.height / 2\n }\n\n var targetAABB = {\n xMin: targetRectangle.x - targetRectangle.width / 2,\n xMax: targetRectangle.x + targetRectangle.width / 2,\n yMin: targetRectangle.y - targetRectangle.height / 2,\n yMax: targetRectangle.y + targetRectangle.height / 2\n }\n\n var line1 = {\n x1: sourceRectangle.x,\n y1: sourceRectangle.y,\n x2: targetRectangle.x,\n y2: targetRectangle.y\n }\n\n var line2 = {\n x1: targetRectangle.x,\n y1: targetRectangle.y,\n x2: sourceRectangle.x,\n y2: sourceRectangle.y\n }\n\n var returnObj = {\n sourceClipPoints: this.clipLine(line1, sourceAABB),\n targetClipPoints: this.clipLine(line2, targetAABB)\n }\n\n return returnObj\n }\n\n createRect(node) {\n var nodeRectangle = document.createElementNS(this.SVGNameSpace, 'rect')\n var nodePosition = node.position()\n if (node.isParent()) {\n nodeRectangle.setAttribute(\n 'x',\n nodePosition.x - node.width() / 2 - this.COMPOUND_MARGIN / 2 + ''\n )\n nodeRectangle.setAttribute(\n 'y',\n nodePosition.y - node.height() / 2 - this.COMPOUND_MARGIN / 2 + ''\n )\n nodeRectangle.setAttribute('width', node.width() + this.COMPOUND_MARGIN)\n nodeRectangle.setAttribute('height', node.height() + this.COMPOUND_MARGIN)\n } else {\n nodeRectangle.setAttribute('x', nodePosition.x - node.width() / 2 + '')\n nodeRectangle.setAttribute('y', nodePosition.y - node.height() / 2 + '')\n nodeRectangle.setAttribute('width', node.width())\n nodeRectangle.setAttribute('height', node.height())\n }\n\n nodeRectangle = this.createStyleForNodes(node, nodeRectangle)\n\n return nodeRectangle\n }\n\n createText(node, genomicDataOffset) {\n var verticalTextOffset = 5\n var nodePosition = node.position()\n var svgText = document.createElementNS(this.SVGNameSpace, 'text')\n\n if (node.isParent()) {\n verticalTextOffset = 20\n svgText.setAttribute('x', nodePosition.x)\n svgText.setAttribute(\n 'y',\n nodePosition.y + node.height() / 2 + verticalTextOffset\n )\n } else {\n svgText.setAttribute('x', nodePosition.x)\n svgText.setAttribute(\n 'y',\n nodePosition.y + verticalTextOffset + genomicDataOffset\n )\n }\n\n svgText.setAttribute('font-family', 'Arial')\n svgText.setAttribute('text-anchor', 'middle')\n svgText.setAttribute('font-size', this.NODE_FONT_SIZE + '')\n svgText.innerHTML = node.data().name\n return svgText\n }\n\n createStyleForNodes(node, nodeRectangle) {\n var nodeType = node.data().type\n var strokeWidth = node.css('border-width') || this.NODE_STROKE_WIDTH;\n var strokeColor = this.NODE_STROKE_COLOR\n var fillColor = this.NODE_FILL_COLOR\n var opacity = this.NODE_OPACITY\n var strokeOpacity = 1\n\n if (nodeType == 'GENE' || nodeType == 'COMPARTMENT') {\n nodeRectangle.setAttribute('rx', this.ROUNDING_FACTOR)\n nodeRectangle.setAttribute('ry', this.ROUNDING_FACTOR)\n\n if (nodeType == 'COMPARTMENT') strokeWidth = this.COMPARTMENT_STROKE_WIDTH\n }\n\n if (nodeType == 'PROCESS') {\n opacity = 0\n strokeOpacity = 0\n }\n\n if (nodeType == 'FAMILY') {\n fillColor = this.FAMILY_FILL_COLOR\n strokeColor = this.FAMILY_STROKE_COLOR\n }\n\n var styleString =\n 'stroke-width:' +\n strokeWidth +\n ';' +\n 'stroke:' +\n strokeColor +\n ';' +\n 'fill-opacity:' +\n opacity +\n ';' +\n 'fill:' +\n fillColor +\n ';' +\n 'stroke-opacity:' +\n strokeOpacity +\n ';'\n\n nodeRectangle.setAttribute('style', styleString)\n\n return nodeRectangle\n }\n\n /**\n * Cohen Sutherland Line Clipping algorithm implementation\n * **/\n clipLine(line, rectangle) {\n //Clipping regions encoded with different integers !\n var INSIDE = 0\n var LEFT = 1\n var RIGHT = 2\n var BOTTOM = 4\n var TOP = 8\n\n /*\n * Get outcode of given point compared to the rectangle\n * */\n function getOutCode(point, rectangle) {\n var outcode = INSIDE\n\n if (point.x < rectangle.xMin) outcode = outcode | LEFT\n else if (point.x > rectangle.xMax) outcode = outcode | RIGHT\n\n if (point.y < rectangle.yMin) outcode = outcode | TOP\n else if (point.y > rectangle.yMax) outcode = outcode | BOTTOM\n\n return outcode\n }\n\n var outcode0 = getOutCode({ x: line.x1, y: line.y1 }, rectangle)\n var outcode1 = getOutCode({ x: line.x2, y: line.y2 }, rectangle)\n\n var slope = (line.y2 - line.y1) / (line.x2 - line.x1)\n var returnCoords = { x: line.x1, y: line.y1, slope: slope }\n\n //Main clipping loop\n var accept = false\n while (true) {\n // Bitwise OR is 0. Trivially accept and get out of loop\n if (!(outcode0 | outcode1)) {\n accept = true\n break\n }\n // Bitwise AND is not 0. Trivially reject and get out of loop\n else if (outcode0 & outcode1) {\n break\n } else {\n var outCode = outcode0 ? outcode0 : outcode1\n\n if (outCode & TOP) {\n returnCoords.x = line.x1 + (rectangle.yMin - line.y1) / slope\n returnCoords.y = rectangle.yMin\n } else if (outCode & BOTTOM) {\n returnCoords.x = line.x1 + (rectangle.yMax - line.y1) / slope\n returnCoords.y = rectangle.yMax\n } else if (outCode & RIGHT) {\n returnCoords.x = rectangle.xMax\n returnCoords.y = line.y1 + slope * (rectangle.xMax - line.x1)\n } else if (outCode & LEFT) {\n returnCoords.x = rectangle.xMin\n returnCoords.y = line.y1 + slope * (rectangle.xMin - line.x1)\n }\n\n // Now we move outside point to intersection point to clip\n // and get ready for next pass.\n if (outCode == outcode0) {\n outcode0 = getOutCode(\n { x: returnCoords.x, y: returnCoords.y },\n rectangle\n )\n } else {\n outcode1 = getOutCode(\n { x: returnCoords.x, y: returnCoords.y },\n rectangle\n )\n }\n }\n }\n\n return returnCoords\n }\n\n /**\n * Utility vector functions\n * */\n dotProduct(v1, v2) {\n var newX = v1.x * v2.x\n var newY = v1.y * v2.y\n\n return { x: newX, y: newY }\n }\n\n unitVector(v) {\n var inverseLength = 1 / Math.sqrt(v.x * v.x + v.y * v.y)\n\n return {\n x: v.x * inverseLength,\n y: v.y * inverseLength\n }\n }\n\n rotateVector(v, radians) {\n var newX = v.x * Math.cos(radians) - v.y * Math.sin(radians)\n var newY = v.x * Math.sin(radians) + v.y * Math.cos(radians)\n\n return { x: newX, y: newY }\n }\n\n scale(v, scalar) {\n var newX = v.x * scalar\n var newY = v.y * scalar\n\n return { x: newX, y: newY }\n }\n}\n","import { Console } from 'console'\nimport { GeneticAlterationRuleSet, shapeToSvg } from 'oncoprintjs'\nimport $ from 'jquery'\n\nexport default class GenomicDataOverlayManager {\n public genomicDataMap: {}\n public visibleGenomicDataMapByType: {}\n public groupedGenomicDataCount: number\n public groupedGenomicDataMap: {}\n public patientData: any\n private DEFAULT_VISIBLE_GENOMIC_DATA_COUNT: number\n private MAX_VISIBLE_GENOMIC_DATA_COUNT: number\n private observers: any[]\n private cy: any\n constructor(cy: any) {\n this.cy = cy\n this.genomicDataMap = {}\n this.patientData = {}\n this.visibleGenomicDataMapByType = {}\n this.groupedGenomicDataMap = {}\n this.groupedGenomicDataCount = 0\n this.DEFAULT_VISIBLE_GENOMIC_DATA_COUNT = 3\n this.MAX_VISIBLE_GENOMIC_DATA_COUNT = 6\n\n // Observer-observable pattern related stuff\n this.observers = []\n }\n\n getEmptyGroupID() {\n const oldCount = this.groupedGenomicDataCount\n this.groupedGenomicDataCount++\n return oldCount\n }\n\n addGenomicDataLocally(genomicData, groupID) {\n this.parseGenomicData(genomicData, groupID)\n this.showGenomicData()\n this.notifyObservers()\n }\n\n preparePortalGenomicDataShareDB(genomicData) {\n const geneMap = {}\n const visMap = {}\n\n for (const cancerKey in genomicData) {\n for (const geneSymbol in genomicData[cancerKey]) {\n geneMap[geneSymbol] = {}\n geneMap[geneSymbol][cancerKey] = genomicData[cancerKey][geneSymbol]\n }\n\n visMap[cancerKey] = true\n }\n\n return {\n genomicDataMap: geneMap,\n visibilityMap: visMap\n }\n }\n\n addGenomicData(data) {\n this.genomicDataMap = data\n }\n\n removeGenomicVisData() {\n this.visibleGenomicDataMapByType = {}\n }\n\n addGenomicDataWithGeneSymbol(geneSymbol, data) {\n this.genomicDataMap[geneSymbol] = data\n }\n\n addGenomicGroupData(groupID, data) {\n this.groupedGenomicDataMap[groupID] = data\n }\n\n addPortalGenomicData(data, groupID) {\n for (const cancerStudy of Object.keys(data)) {\n this.visibleGenomicDataMapByType[cancerStudy] = true\n // Group current cancer study according to the groupID\n if (this.groupedGenomicDataMap[groupID] === undefined) {\n this.groupedGenomicDataMap[groupID] = []\n }\n\n this.groupedGenomicDataMap[groupID].push(cancerStudy)\n\n var cancerData = data[cancerStudy]\n\n for (const geneSymbol of Object.keys(cancerData)) {\n if (this.genomicDataMap[geneSymbol] === undefined)\n this.genomicDataMap[geneSymbol] = {}\n\n this.genomicDataMap[geneSymbol][cancerStudy] = data[cancerStudy][\n geneSymbol\n ].toFixed\n ? data[cancerStudy][geneSymbol].toFixed(2)\n : data[cancerStudy][geneSymbol]\n }\n }\n //This parameter is used as flag for PatientView PathwayMapper Functions\n if (data['PatientView'] == 1) {\n this.patientData = data;\n this.showPatientData()\n } else {\n this.showGenomicData()\n }\n this.notifyObservers()\n }\n\n clearAllGenomicData = function() {\n this.genomicDataMap = {}\n this.visibleGenomicDataMapByType = {}\n this.groupedGenomicDataMap = {}\n this.groupedGenomicDataCount = 0\n }\n\n removeGenomicData() {\n this.genomicDataMap = {}\n }\n\n removeGenomicDataWithGeneSymbol(geneSymbol) {\n this.genomicDataMap[geneSymbol] = {}\n }\n\n addGenomicVisData(key, data) {\n this.visibleGenomicDataMapByType[key] = data\n }\n\n prepareGenomicDataShareDB = function(genomicData) {\n const genomicDataMap = {}\n const cancerTypes = []\n const visibleGenomicDataMapByType = {}\n\n // By lines\n const lines = genomicData.split('\\n')\n // First line is meta data !\n const metaLineColumns = lines[0].split('\\t')\n\n // Parse cancer types\n for (let i = 1; i < metaLineColumns.length; i++) {\n cancerTypes.push(metaLineColumns[i])\n // Update initially visible genomic data boxes !\n if (i - 1 < this.DEFAULT_VISIBLE_GENOMIC_DATA_COUNT) {\n visibleGenomicDataMapByType[cancerTypes[i - 1]] = true\n } else {\n visibleGenomicDataMapByType[cancerTypes[i - 1]] = false\n }\n }\n\n // parse genomic data\n for (let i = 1; i < lines.length; i++) {\n // EOF check\n if (lines[i].length === 0) {\n break\n }\n\n // Split each line by tab and parse genomic data content\n const lineContent = lines[i].split('\\t')\n const geneSymbol = lineContent[0]\n\n // If current gene entry is not in genomic data map create new hashmap entry\n if (!(geneSymbol in genomicDataMap)) {\n genomicDataMap[geneSymbol] = {}\n }\n\n // Add each entry of genomic data\n for (let j = 1; j < lineContent.length; j++) {\n genomicDataMap[geneSymbol][cancerTypes[j - 1]] = lineContent[j]\n }\n }\n\n const returnObj = {\n genomicDataMap: genomicDataMap,\n visibilityMap: visibleGenomicDataMapByType\n }\n\n return returnObj\n }\n\n updateGenomicDataVisibility = function(_key, isVisible) {\n if (_key in this.visibleGenomicDataMapByType) {\n this.visibleGenomicDataMapByType[_key] = isVisible\n }\n }\n\n hideGenomicData = function() {\n this.cy\n .style()\n .selector('node[type=\"GENE\"]')\n .style('text-margin-y', 0)\n .style('width', function(ele) {\n return 150\n })\n .style('background-image', function(ele) {\n const dataURI = 'data:image/svg+xml;utf8,'\n return dataURI\n })\n .update()\n }\n\n countVisibleGenomicDataByType() {\n // Count the genomic data that will be displayed on nodes' body\n let genomicDataBoxCount = 0\n for (let cancerType in this.visibleGenomicDataMapByType) {\n if (this.visibleGenomicDataMapByType[cancerType]) {\n genomicDataBoxCount++\n }\n }\n\n return genomicDataBoxCount\n }\n\n generateSVGForNode(ele) {\n const genomicDataBoxCount = this.countVisibleGenomicDataByType()\n\n // Experimental data overlay part !\n const dataURI = 'data:image/svg+xml;utf8,'\n const svgNameSpace = 'http://www.w3.org/2000/svg'\n\n const nodeLabel = ele.data('name')\n // If there is no genomic data for this node return !\n if (!(nodeLabel in this.genomicDataMap)) {\n return dataURI\n }\n\n const eleBBox = ele.boundingBox()\n const reqWidth = this.getRequiredWidthForGenomicData(genomicDataBoxCount)\n const overlayRecBoxW = reqWidth - 10\n const overlayRecBoxH = 25\n const svg: any = document.createElementNS(svgNameSpace, 'svg')\n // It seems this should be set according to the node size !\n svg.setAttribute('width', reqWidth)\n svg.setAttribute('height', eleBBox.h)\n // This is important you need to include this to succesfully render in cytoscape.js!\n svg.setAttribute('xmlns', svgNameSpace)\n\n // Overlay Data Rect\n const overLayRectBBox = {\n w: overlayRecBoxW,\n h: overlayRecBoxH,\n x: reqWidth / 2 - overlayRecBoxW / 2,\n y: eleBBox.h / 2 + overlayRecBoxH / 2 - 18\n }\n\n const genomicFrequencyData = this.genomicDataMap[nodeLabel]\n\n let maxGenomicDataBoxCount = /*(genomicDataBoxCount > 3) ? 3:*/ genomicDataBoxCount\n let genomicBoxCounter = 0\n\n for (let i in this.groupedGenomicDataMap) {\n for (let j in this.groupedGenomicDataMap[i]) {\n const cancerType = this.groupedGenomicDataMap[i][j]\n if (!this.visibleGenomicDataMapByType[cancerType]) {\n continue\n }\n\n if (genomicFrequencyData[cancerType] !== undefined) {\n genomicDataRectangleGenerator(\n overLayRectBBox.x +\n (genomicBoxCounter * overLayRectBBox.w) / maxGenomicDataBoxCount,\n overLayRectBBox.y,\n overLayRectBBox.w / maxGenomicDataBoxCount,\n overLayRectBBox.h,\n genomicFrequencyData[cancerType],\n svg\n )\n } else {\n genomicDataRectangleGenerator(\n overLayRectBBox.x +\n (genomicBoxCounter * overLayRectBBox.w) / maxGenomicDataBoxCount,\n overLayRectBBox.y,\n overLayRectBBox.w / maxGenomicDataBoxCount,\n overLayRectBBox.h,\n null,\n svg\n )\n }\n\n genomicBoxCounter++\n }\n }\n\n function genomicDataRectangleGenerator(x, y, w, h, percent, parentSVG) {\n let colorString = ''\n if (percent) {\n const isNegativePercent = percent < 0\n let _percent = Math.abs(percent)\n // Handle special cases here !\n\n _percent = _percent > 0 && _percent < 0.5 ? 0.5 : _percent\n // _percent = _percent === 1 ? 2 : _percent\n // Here we are using non linear regression\n // Fitting points of (0,0), (25,140), (50,220), (100, 255)\n const percentColor = 255 - (-7.118 + 53.9765 * Math.log(_percent + 0.8))\n\n if (_percent === 0 || percent == -101) {\n colorString = 'rgb(255,255,255)'\n } else if (isNegativePercent) {\n colorString =\n 'rgb(' +\n Math.round(percentColor) +\n ',' +\n Math.round(percentColor) +\n ',255)'\n percent = percent.substring(1)\n } else {\n colorString =\n 'rgb(255,' +\n Math.round(percentColor) +\n ',' +\n Math.round(percentColor) +\n ')'\n }\n // Rectangle Part\n const overlayRect = document.createElementNS(svgNameSpace, 'rect')\n overlayRect.setAttribute('x', x)\n overlayRect.setAttribute('y', y)\n overlayRect.setAttribute('width', w)\n overlayRect.setAttribute('height', h)\n overlayRect.setAttribute(\n 'style',\n 'stroke-width:1;stroke:rgb(0,0,0);opacity:1;fill:' + colorString + ';'\n )\n\n // Text Part\n const textPercent =\n percent < 0.5 && percent > 0 ? '<0.5' : Number(percent).toFixed(1)\n const text = percent == -101 ? 'N/P' : textPercent + '%'\n const fontSize = 14\n const textLength = text.length\n const xOffset = w / 2 - textLength * 4\n const yOffset = fontSize / 3\n\n const svgText = document.createElementNS(svgNameSpace, 'text')\n svgText.setAttribute('x', x + xOffset)\n svgText.setAttribute('y', y + h / 2 + yOffset)\n svgText.setAttribute('font-family', 'Arial')\n svgText.setAttribute('font-size', fontSize + '')\n svgText.innerHTML = text\n\n parentSVG.appendChild(overlayRect)\n parentSVG.appendChild(svgText)\n } else {\n colorString = 'rgb(210,210,210)'\n\n // Rectangle Part\n const overlayRect = document.createElementNS(svgNameSpace, 'rect')\n overlayRect.setAttribute('x', x)\n overlayRect.setAttribute('y', y)\n overlayRect.setAttribute('width', w)\n overlayRect.setAttribute('height', h)\n overlayRect.setAttribute(\n 'style',\n 'stroke-width:1;stroke:rgb(0,0,0);opacity:1;fill:' + colorString + ';'\n )\n\n parentSVG.appendChild(overlayRect)\n }\n }\n\n return svg\n }\n\n // Just an utility function to calculate required width for genes for genomic data !\n getRequiredWidthForGenomicData(genomicDataBoxCount) {\n const term = genomicDataBoxCount > 3 ? genomicDataBoxCount - 3 : 0\n return 150 + term * 35\n }\n\n showGenomicData() {\n const self = this\n\n const genomicDataBoxCount = this.countVisibleGenomicDataByType()\n\n if (genomicDataBoxCount < 1) {\n // Hide all genomic data and return\n this.hideGenomicData()\n return\n }\n\n //console.log('Inside showGenomicData')\n //console.log(this.cy)\n\n this.cy\n .style()\n .selector('node[type=\"GENE\"]')\n // It used to change the width of nodes only locally\n .style('width', ele => {\n return this.getRequiredWidthForGenomicData(genomicDataBoxCount)\n })\n .style('text-margin-y', function(ele) {\n const nodeLabel = ele.data('name')\n // If there is no genomic data for this node return !\n if (!(nodeLabel in self.genomicDataMap)) {\n return 0\n }\n\n // Else shift label in Y axis\n return -15\n })\n .style('background-image', function(ele) {\n const x = encodeURIComponent(self.generateSVGForNode(ele).outerHTML)\n if (x === 'undefined') {\n return 'none'\n }\n const dataURI = 'data:image/svg+xml;utf8,' + x\n return dataURI\n })\n .update()\n }\n\n parseGenomicData(genomicData, groupID) {\n this.genomicDataMap = this.genomicDataMap || {}\n this.visibleGenomicDataMapByType = this.visibleGenomicDataMapByType || {}\n this.groupedGenomicDataMap = this.groupedGenomicDataMap || {}\n const cancerTypes = []\n\n // By lines\n const lines = genomicData.split('\\n')\n // First line is meta data !\n const metaLineColumns = lines[0].split('\\t')\n\n // Parse cancer types\n for (let i = 1; i < metaLineColumns.length; i++) {\n cancerTypes.push(metaLineColumns[i])\n // Update initially visible genomic data boxes !\n if (i - 1 < this.DEFAULT_VISIBLE_GENOMIC_DATA_COUNT) {\n this.visibleGenomicDataMapByType[cancerTypes[i - 1]] = true\n } else {\n this.visibleGenomicDataMapByType[cancerTypes[i - 1]] = false\n }\n\n if (this.groupedGenomicDataMap[groupID] === undefined) {\n this.groupedGenomicDataMap[groupID] = []\n }\n this.groupedGenomicDataMap[groupID].push(cancerTypes[i - 1])\n }\n\n // parse genomic data\n for (let i = 1; i < lines.length; i++) {\n // EOF check\n if (lines[i].length === 0) {\n break\n }\n\n // Split each line by tab and parse genomic data content\n const lineContent = lines[i].split('\\t')\n const geneSymbol = lineContent[0]\n\n // If current gene entry is not in genomic data map create new map\n if (!(geneSymbol in this.genomicDataMap)) {\n this.genomicDataMap[geneSymbol] = {}\n }\n\n // Add each entry of genomic data\n for (let j = 1; j < lineContent.length; j++) {\n this.genomicDataMap[geneSymbol][cancerTypes[j - 1]] = lineContent[j]\n }\n }\n }\n\n // Simple observer-observable pattern for views!!!!!\n registerObserver(observer) {\n this.observers.push(observer)\n }\n\n notifyObservers() {\n for (const observer of this.observers) {\n observer.notify()\n }\n }\n\n //This method is needed to calculate the alteration Types for each gene\n getAlterationCountForPatient(geneData) {\n let count = 0\n for (let altType in geneData) {\n count++\n }\n return count\n }\n\n //These methods are created to be used in CbioPortal PatientView they are not used\n //in ResultView Page or PathwayMapper Editor\n\n showPatientData() {\n const self = this\n\n const data = this.patientData;\n\n // const genomicDataBoxCount = 3 //this.countVisibleGenomicDataByType(); //CHANGE\n const genomicDataBoxCount = data.geneticTrackData\n ? data.geneticTrackData.length\n : 3\n if (genomicDataBoxCount < 1) {\n // Hide all genomic data and return\n this.hideGenomicData()\n return\n }\n\n this.cy\n .style()\n .selector('node[type=\"GENE\"]')\n // It used to change the width of nodes only locally\n .style('width', ele => {\n return this.getRequiredWidthForGenomicData(genomicDataBoxCount)\n })\n .style('text-margin-y', function(ele) {\n const nodeLabel = ele.data('name')\n\n // If there is no genomic data for this node return !\n if (!(nodeLabel in data)) {\n return 0\n }\n\n // Else shift label in Y axis\n return -15\n })\n .style('background-image', function(ele) {\n const x = encodeURIComponent(\n // self.generateSVGForPatientNode(ele, data).outerHTML\n self.generateOncoprintForPatientNode(ele).outerHTML\n )\n if (x === 'undefined') {\n return 'none'\n }\n const dataURI = 'data:image/svg+xml;utf8,' + x\n return dataURI\n })\n .update()\n\n this.cy.on('mouseover', 'node[type=\"GENE\"]', function(event) {\n var node = event.target || event.cyTarget\n const nodeLabel = node.data('name')\n if (!data[nodeLabel]) {\n return\n }\n node.qtip({\n content: {\n text: function() {\n return self.generateHTMLContentForNodeTooltip(node, data)\n }\n },\n style: {\n classes: 'qtip-light qtip-rounded'\n },\n show: {\n event: \"showqtipevent\"\n },\n hide: {\n event: 'mouseout'\n }\n }, event);\n node.trigger(\"showqtipevent\") \n })\n }\n\n //Every mutation type has a unique color coded. This method is used to retrieve the colors\n getOncoprintColors(selectedGene) {\n const oncoprintColors = {\n Missense_Mutation: 'rgb(0,128,0)',\n inframe: '#993404',\n truncating: '#000000',\n Fusion: 'rgb(139,0,201)',\n AMP: 'rgb(255,0,0)',\n gain: '#ffb6c1',\n heatloss: '#8fd8d8',\n homdel: 'rgb(0,0,255)',\n DeepDel: 'rgb(0,0,255)',\n \"5'Flank\": 'rgb(207,88,188)',\n in_frame_del: 'rgb(166,128,40)'\n }\n\n if (oncoprintColors[selectedGene] !== undefined) {\n return oncoprintColors[selectedGene]\n } else {\n //Types are not on the list corresponds to black\n return 'rgb(0,0,0)'\n }\n }\n generateSVGForPatientNode(ele, patientData) {\n //Here we should use the parameter patientData when calculating the expressions\n const genomicDataBoxCount = this.countVisibleGenomicDataByType()\n // Experimental data overlay part !\n const dataURI = 'data:image/svg+xml;utf8,'\n const svgNameSpace = 'http://www.w3.org/2000/svg'\n //nodeLabel refers to the nodeLabels in the overlay data\n const nodeLabel = ele.data('name')\n // If there is no genomic data for this node return !\n if (!(nodeLabel in patientData)) {\n return dataURI\n }\n //this parameter refers to the count of alteration types for each gene\n const alterationBoxCount = this.getAlterationCountForPatient(\n patientData[nodeLabel]\n )\n\n const eleBBox = ele.boundingBox()\n const svg: any = document.createElementNS(svgNameSpace, 'svg')\n //this parameter is set to 12 since there are 12 different possiblities for types\n const term = alterationBoxCount > 12 ? alterationBoxCount - 12 : 0\n const reqWidth = 150 + term * 35\n\n const overlayRecBoxW = reqWidth - 10\n const overlayRecBoxH = 25\n\n // It seems this should be set according to the node size !\n svg.setAttribute('width', reqWidth)\n svg.setAttribute('height', eleBBox.h)\n // This is important you need to include this to succesfully render in cytoscape.js!\n svg.setAttribute('xmlns', svgNameSpace)\n\n // Overlay Data Rect\n const overLayRectBBox = {\n w: overlayRecBoxW,\n h: overlayRecBoxH,\n x: reqWidth / 2 - overlayRecBoxW / 2,\n y: eleBBox.h / 2 + overlayRecBoxH / 2 - 18\n }\n let genomicBoxCounter = 0\n //required width is calculated for each gene since box count is different for each gene\n for (let j in patientData[nodeLabel]) {\n const genomicAlterationData = patientData[nodeLabel]\n const alterationType = j\n\n if (!this.visibleGenomicDataMapByType[nodeLabel]) {\n continue\n }\n //get the color string corresponding to the alterationType\n let colorString = this.getOncoprintColors(alterationType)\n\n if (genomicAlterationData[alterationType] !== undefined) {\n genomicDataRectangleGeneratorPatient(\n overLayRectBBox.x +\n (genomicBoxCounter * overLayRectBBox.w) / alterationBoxCount,\n overLayRectBBox.y,\n overLayRectBBox.w / alterationBoxCount,\n overLayRectBBox.h,\n 100,\n svg,\n alterationType,\n colorString\n )\n } else {\n genomicDataRectangleGeneratorPatient(\n overLayRectBBox.x +\n (genomicBoxCounter * overLayRectBBox.w) / alterationBoxCount,\n overLayRectBBox.y,\n overLayRectBBox.w / alterationBoxCount,\n overLayRectBBox.h,\n null,\n svg,\n '',\n null\n )\n }\n\n genomicBoxCounter++\n }\n //This function differs from genomicRectangleGenerator. genomicDataRectangleGeneratorPatient\n //has an extra parameter text. In patient view alterationTypes of genes are displayed instead of\n //alteration percentage. Hence a text is sent to this method which is alterationType\n function genomicDataRectangleGeneratorPatient(\n x,\n y,\n w,\n h,\n percent,\n parentSVG,\n text,\n colorString\n ) {\n if (percent) {\n const isNegativePercent = percent < 0\n // Rectangle Part\n const overlayRect = document.createElementNS(svgNameSpace, 'rect')\n overlayRect.setAttribute('x', x)\n overlayRect.setAttribute('y', y)\n overlayRect.setAttribute('width', w)\n overlayRect.setAttribute('height', h)\n overlayRect.setAttribute(\n 'style',\n 'stroke-width:1;stroke:rgb(0,0,0);opacity:1;fill:' + colorString + ';'\n )\n\n // Text Part\n const fontSize = 14\n const textLength = 4\n const xOffset = w / 2 - textLength * 4\n const yOffset = fontSize / 3\n\n const svgText = document.createElementNS(svgNameSpace, 'text')\n if (colorString === 'rgb(0,0,0)') {\n svgText.setAttribute('fill', 'white')\n }\n svgText.setAttribute('x', x + xOffset)\n svgText.setAttribute('y', y + h / 2 + yOffset)\n\n svgText.setAttribute('font-family', 'Arial')\n svgText.setAttribute('font-size', fontSize + '')\n\n //first 4 letters of the alterationTypes are used\n svgText.innerHTML = text.substring(0, 4)\n parentSVG.appendChild(overlayRect)\n parentSVG.appendChild(svgText)\n } else {\n //Normally\n colorString = 'rgb(210,210,210)'\n }\n }\n\n return svg\n }\n\n generateOncoprintForPatientNode(ele) {\n // const dataURI = 'data:image/svg+xml;utf8,'\n // nodeLabel refers to the nodeLabels in the overlay data\n const patientData = this.patientData;\n const nodeLabel = ele.data('name')\n const genomicData = patientData[nodeLabel]\n\n const svgNameSpace = 'http://www.w3.org/2000/svg'\n const svgElement: any = document.createElementNS(svgNameSpace, 'svg')\n\n if (!genomicData) {\n return { outerHTML: '' }\n }\n\n const ruleset = new GeneticAlterationRuleSet(\n genomicData.geneticTrackRuleSetParams\n )\n const cellWidth = 6\n const cellPadding = 3\n const cellHeight = 23\n const cellVerticalPadding = 8\n\n const shapesPerDatum = ruleset.apply(\n genomicData.geneticTrackData,\n cellWidth,\n cellHeight\n )\n\n shapesPerDatum.forEach((shapes, index) => {\n const offsetX = index * (cellWidth + cellPadding) // width + padding\n const offsetY = cellVerticalPadding\n const g = document.createElementNS(svgNameSpace, 'g')\n shapes.forEach(shape =>\n g.appendChild(shapeToSvg(shape, offsetX, offsetY))\n )\n svgElement.appendChild(g)\n })\n\n // It seems this should be set according to the node size !\n svgElement.setAttribute(\n 'width',\n ((cellWidth + cellPadding) * shapesPerDatum.length).toString()\n )\n svgElement.setAttribute(\n 'height',\n (cellHeight + cellVerticalPadding).toString()\n )\n // This is important you need to include this to succesfully render in cytoscape.js!\n svgElement.setAttribute('xmlns', svgNameSpace)\n\n return svgElement\n }\n\n // Mapping of alteration type keys to strings\n // See: https://github.com/cBioPortal/cbioportal-frontend/blob/442e108208846255feb1ed5b309218cd44927fb9/src/shared/components/oncoprint/TooltipUtils.ts#L599 \n getCNADisplayString(alterationTypeKey: number) {\n const disp_cna: { [integerCN: string]: string } = {\n '-2': 'HOMODELETED',\n '-1': 'HETLOSS',\n '1': 'GAIN',\n '2': 'AMPLIFIED',\n }\n return disp_cna[alterationTypeKey]\n }\n\n generateSvgIconForSample(iconColor: string, iconText: string) {\n \n var html = '' + \n '' +\n \t'' +\n '' +\n '' +\n '' +\n iconText +'' +\n '' +''\n\n return html;\n }\n\n generateHTMLContentForNodeTooltip(ele, patientData) {\n\n const tooltipMaxHeight = '200px';\n const tooltipMaxWidth = '200px'\n const marginBetweenSamples = '10px';\n const sampleIconColorMap = patientData.sampleColors\n const sampleIndexMap = patientData.sampleIndex\n\n const nodeLabel = ele.data('name') \n const data = patientData[nodeLabel]\n\n // Outer wrapper for the entire tooltip\n var wrapper = $('
')\n wrapper.css({\n 'max-width' : tooltipMaxWidth,\n 'max-height': tooltipMaxHeight,\n 'word-wrap' : 'break-word',\n 'overflow-y': 'auto'\n })\n\n data.geneticTrackData.forEach((sample, sampleIndex) => {\n \n const sampleId = sample.sample\n const iconColor = sampleIconColorMap[sampleId];\n const iconText = (sampleIndexMap[sampleId] + 1).toString();\n const sampleIconSvgHTML = this.generateSvgIconForSample(iconColor, iconText);\n\n const margin = sampleIndex > 0 ? marginBetweenSamples : '0px'\n\n // Inner wrapper for a single sample\n var sampleWrapper = $('
')\n sampleWrapper.css({\n 'margin-top': margin\n })\n \n const sampleData = sample.data\n var mutationInfo = []\n var cnaInfo = []\n var fusionInfo = []\n sampleData.forEach(data => {\n const geneSymbol = data.gene.hugoGeneSymbol\n\n if (sample.disp_mut && data.proteinChange && data.mutationType !== 'Fusion') {\n const proteinChange = data.proteinChange\n mutationInfo.push({\n gene: geneSymbol,\n proteinChange: proteinChange\n })\n }\n\n if (sample.disp_cna && data.alteration) {\n const cnaLabelKey = data.alteration\n const cnaLabel = this.getCNADisplayString(cnaLabelKey)\n cnaInfo.push({\n gene: geneSymbol,\n cnaLabel: cnaLabel\n })\n }\n\n if (sample.disp_fusion && data.proteinChange && data.mutationType === 'Fusion') {\n const proteinChange = data.proteinChange\n fusionInfo.push({\n gene: geneSymbol,\n proteinChange: proteinChange\n })\n }\n\n });\n // Prepare HTML for tooltip\n var mutationInfoHTML = mutationInfo.length > 0 ? 'Mutation: ' : ''\n var cnaInfoHTML = cnaInfo.length > 0 ? 'CNA: ': ''\n var fusionInfoHTML = fusionInfo.length > 0 ? 'Fusion: ' : ''\n\n mutationInfo.forEach((mutation, index) => {\n mutationInfoHTML += \"\" + mutation.gene + \" \" \n + mutation.proteinChange + \"\"\n if (index !== mutationInfo.length - 1) {\n mutationInfoHTML += \", \"\n }\n else {\n mutationInfoHTML += \"
\"\n }\n })\n\n cnaInfo.forEach((cna, index) => {\n cnaInfoHTML += \"\" + cna.gene + \" \" + cna.cnaLabel + \"\"\n if (index !== cnaInfo.length - 1) {\n cnaInfoHTML += \", \"\n }\n else {\n cnaInfoHTML += \"
\"\n }\n })\n\n fusionInfo.forEach((fusion, index) => {\n fusionInfoHTML += \"\" + fusion.gene + \" \" + fusion.proteinChange + \"\"\n if (index !== fusionInfo.length - 1) {\n fusionInfoHTML += \", \"\n }\n else {\n fusionInfoHTML += \"
\"\n }\n })\n const sampleIdHTML = \" \" + sampleId + \"\" + \"
\"\n sampleWrapper.append($('
' + sampleIconSvgHTML + sampleIdHTML \n + mutationInfoHTML + cnaInfoHTML \n + fusionInfoHTML +\n + '
'))\n wrapper.append(sampleWrapper)\n });\n\n return wrapper\n }\n\n}\n","import React from 'react';\nimport { EModalType } from '../ui/react-pathway-mapper';\nimport {Modal, Form, InputGroup, ControlLabel, Col, FormControl, Checkbox, Button} from 'react-bootstrap';\nimport EditorActionsManager from '../managers/EditorActionsManager';\nimport _ from 'lodash';\nimport PathwayActions from '../utils/PathwayActions';\nimport { observable, makeObservable } from 'mobx';\nimport { observer } from 'mobx-react';\n\ninterface ILayoutPropertiesProps{\n isModalShown: boolean;\n handleClose: (modelId: EModalType) => void;\n pathwayActions: PathwayActions;\n}\n\nexport interface ILayoutProperties{\n name: string;\n animationDuration: number;\n animationEasing: string;\n nodeRepulsion: number;\n idealEdgeLength: number;\n edgeElasticity: number;\n nestingFactor: number;\n gravity: number;\n numIter: number;\n gravityRangeCompound: number;\n gravityCompound: number;\n gravityRange: number;\n tilingPaddingVertical: number;\n tilingPaddingHorizontal: number;\n initialEnergyOnIncremental: number;\n tile: boolean;\n animate: boolean;\n randomize: boolean;\n}\n\n@observer\nexport default class LayoutProperties extends React.Component{\n \n static layoutProperties: ILayoutProperties;\n \n constructor(props: ILayoutPropertiesProps){\n super(props);\n LayoutProperties.layoutProperties = _.clone(EditorActionsManager.defaultLayoutProperties);\n }\n \n\n updateLayoutProperties(property: string, val: boolean | number){\n LayoutProperties.layoutProperties[property] = val;\n }\n \n\n render(){\n\n return(\n\n {this.props.handleClose(EModalType.LAYOUT);}}\n >\n \n \n

Layout Properties

\n
\n
\n \n
\n \n \n \n Node Repulsion:\n \n\n \n {LayoutProperties.layoutProperties.nodeRepulsion = Number(e.target.value);}} />\n \n \n \n \n Ideal Edge Length:\n \n\n \n {LayoutProperties.layoutProperties.idealEdgeLength = Number(e.target.value);}}/>\n \n \n \n \n Edge Elasticity:\n \n\n \n {LayoutProperties.layoutProperties.edgeElasticity = e.target.value;}} />\n \n \n \n \n Nesting Factor:\n \n\n \n {LayoutProperties.layoutProperties.nestingFactor = e.target.value;}} />\n \n \n \n \n Gravity:\n \n\n \n {LayoutProperties.layoutProperties.gravity = e.target.value;}} />\n \n \n \n \n Gravity Range:\n \n\n \n {LayoutProperties.layoutProperties.gravityRange = e.target.value;}} />\n \n \n \n \n Compound Gravity:\n \n\n \n {LayoutProperties.layoutProperties.gravityCompound = e.target.value;}}/>\n \n \n \n \n Compound Gravity Range:\n \n\n \n {LayoutProperties.layoutProperties.gravityRangeCompound = e.target.value;}} />\n \n \n \n \n Number of Iterations:\n \n\n \n {LayoutProperties.layoutProperties.numIter = e.target.value;}} />\n \n \n \n \n Tiling Vertical Padding:\n \n\n \n {LayoutProperties.layoutProperties.tilingPaddingVertical = e.target.value;}} />\n \n \n \n \n Tiling Horizontal Padding:\n \n\n \n {LayoutProperties.layoutProperties.tilingPaddingHorizontal = e.target.value;}} />\n \n \n \n \n Tile Disconnected:\n \n\n \n {LayoutProperties.layoutProperties.tile = !LayoutProperties.layoutProperties.tile;}}>\n \n \n \n \n Animate:\n \n\n \n {LayoutProperties.layoutProperties.animate = !LayoutProperties.layoutProperties.animate;}}>\n \n \n \n \n Incremental:\n \n\n \n {LayoutProperties.layoutProperties.randomize = !LayoutProperties.layoutProperties.randomize;}}>\n \n \n \n \n Incremental Cooling Factor:\n \n\n \n {LayoutProperties.layoutProperties.initialEnergyOnIncremental = e.target.value;}} />\n \n \n
\n\n
\n\n\n \n \n\n \n\n \n \n );\n }\n}","import ShareDBManager from \"./ShareDBManager\";\nimport CBioPortalAccessor from \"../utils/CBioPortalAccessor\";\nimport SVGExporter from \"../utils/SVGExporter\";\nimport GenomicDataOverlayManager from \"./GenomicDataOverlayManager\";\nimport { IProfileMetaData, IPathwayData } from \"../ui/react-pathway-mapper\";\nimport { observable, makeObservable } from \"mobx\";\nimport LayoutProperties, { ILayoutProperties } from \"../modals/LayoutProperties\";\n\nconst _ = require('underscore');\n\nexport default class EditorActionsManager{\n\n public static defaultLayoutProperties: ILayoutProperties =\n {\n name: 'cose-bilkent',\n nodeRepulsion: 4500,\n idealEdgeLength: 50,\n edgeElasticity: 0.45,\n nestingFactor: 0.1,\n gravity: 0.25,\n numIter: 2500,\n tile: true,\n animate: true,\n randomize: false,\n gravityRangeCompound: 1.5,\n // Gravity force (constant) for compounds\n gravityCompound: 1.0,\n // Gravity range (constant)\n gravityRange: 3.8,\n // Amount of vertical space to put between degree zero nodes during tiling (can also be a function)\n tilingPaddingVertical: 10,\n // Amount of horizontal space to put between degree zero nodes during tiling (can also be a function)\n tilingPaddingHorizontal: 10,\n // Initial cooling factor for incremental layout\n initialEnergyOnIncremental: 0.5,\n animationDuration: 2000,\n animationEasing: 'cubic-bezier(0.17,0.72,0.41,0.98)',\n };\n \n public cy: any;\n public genomicDataOverlayManager: GenomicDataOverlayManager;\n public edgeEditing: any;\n public selectedNodeStack: any;\n public layoutProperties: ILayoutProperties;\n \n private FIT_CONSTANT: number;\n private observers: any[];\n private svgExporter: SVGExporter;\n private undoRedoManager: any;\n private isCbioPortal: boolean;\n private isCollaborative: boolean;\n private shareDBManager: ShareDBManager;\n private portalAccessor: CBioPortalAccessor;\n\n @observable\n private profiles: IProfileMetaData[];\n private modifyPathwayGeneMap: (pathwayData: IPathwayData, isRemove: boolean) => void;\n\n\n constructor(isCollaborative: boolean, shareDBManager: any, cyInst: any, isCBioPortal: boolean,\n undoRedoManager: any, portalAccessor: CBioPortalAccessor, profiles: IProfileMetaData[])\n {\n // Set cy instance and set real time manager reference if collaborative mode\n makeObservable(this);\n this.cy = cyInst;\n this.isCollaborative = isCollaborative;\n this.isCbioPortal = isCBioPortal;\n this.profiles = profiles;\n const edgeEditingOptions = {\n // this function specifies the positions of bend points\n bendPositionsFunction: function (ele: any) {\n return ele.data('bendPointPositions');\n },\n // whether to initilize bend points on creation of this extension automatically\n initBendPointsAutomatically: true,\n // whether the bend editing operations are undoable (requires cytoscape-undo-redo.js)\n undoable: true,\n // the size of bend shape is obtained by multipling width of edge with this parameter\n bendShapeSizeFactor: 6,\n // whether to start the plugin in the enabled state\n enabled: !this.isCbioPortal,\n // title of add bend point menu item (User may need to adjust width of menu items according to length of this option)\n addBendMenuItemTitle: \"Add Bend Point\",\n // title of remove bend point menu item (User may need to adjust width of menu items according to length of this option)\n removeBendMenuItemTitle: \"Remove Bend Point\",\n \n handleReconnectEdge: this.reconnectEdge.bind(this),\n };\n \n this.edgeEditing = this.cy.edgeEditing(edgeEditingOptions);\n this.portalAccessor = portalAccessor;\n if(this.isCollaborative) {\n this.shareDBManager = shareDBManager;\n }\n\n this.FIT_CONSTANT = 50;\n\n this.layoutProperties = _.clone(EditorActionsManager.defaultLayoutProperties);\n this.observers = [];\n this.genomicDataOverlayManager = new GenomicDataOverlayManager(this.cy);\n this.svgExporter = new SVGExporter(this.edgeEditing, this);\n\n this.selectedNodeStack = {};\n this.undoRedoManager = undoRedoManager;\n this.undoRedoManager.action(\"changePositions\", this.doChangePosition, this.undoChangePosition);\n this.undoRedoManager.action(\"changeNodeSize\", this.doChangeNodeSize, this.undoChangeNodeSize);\n this.undoRedoManager.action(\"changeCompoundSize\", this.doChangeCompoundSize, this.undoChangeCompoundSize);\n this.undoRedoManager.action(\"changeName\", this.doChangename, this.undoChangeName);\n this.undoRedoManager.action(\"hideNode\", this.doHide, this.undoHide);\n this.undoRedoManager.action(\"showAllNodes\", this.doShow, this.undoShow);\n // HighlightOthers is the type of highlight from the menu and by searching, while highlightInvalidGenes is for only invalid genes\n this.undoRedoManager.action(\"highlightInvalidGenes\", this.doHighlightInvalidGenes, this.undoHighlightInvalidGenes);\n this.undoRedoManager.action(\"removeHighlightInvalidGenes\", this.undoHighlightInvalidGenes, this.doHighlightInvalidGenes);\n this.undoRedoManager.action(\"highlightOthers\", this.doHighlight, this.undoHighlight);\n this.undoRedoManager.action(\"removeOtherHighlight\", this.undoHighlight, this.doHighlight);\n\n };\n\n handleChangePositionByAlignment(movedNodeArr: any)\n {\n if (this.isCollaborative)\n this.shareDBManager.changeElementsPositionByAlignment(movedNodeArr);\n else\n this.undoRedoManager.do(\"changePositions\", movedNodeArr)\n };\n\n /*\n * Undo redo for changing positions of nodes via programatically (node.position)\n * **/\n doChangePosition(movedNodes: any)\n {\n const newMovedNodes = [];\n\n for(let i = 0; i < movedNodes.length; i++)\n {\n const currentNodePosition =\n {\n x: movedNodes[i].node.position().x,\n y: movedNodes[i].node.position().y\n };\n newMovedNodes.push({node: movedNodes[i].node, oldPosition: currentNodePosition, nextPosition: movedNodes[i].nextPosition});\n movedNodes[i].node.position(movedNodes[i].nextPosition);\n }\n\n return newMovedNodes;\n };\n\n undoChangePosition(movedNodes: any)\n {\n var newMovedNodes = [];\n\n for(var i = 0; i < movedNodes.length; i++)\n {\n var currentNodePosition =\n {\n x: movedNodes[i].node.position().x,\n y: movedNodes[i].node.position().y\n };\n newMovedNodes.push({node: movedNodes[i].node, oldPosition: movedNodes[i].oldPosition, nextPosition: currentNodePosition});\n movedNodes[i].node.position(movedNodes[i].oldPosition);\n }\n\n return newMovedNodes;\n };\n\n changeNodePositionsByArrows(selectedNodes: any)\n {\n if (this.isCollaborative)\n this.shareDBManager.changeNodePositionsShareDB(selectedNodes);\n //resize-node extension already deals for the movement in local mode\n };\n\n /*\n * Undo redo for changing size of nodes\n * **/\n doChangeNodeSize (args: any)\n {\n args.ele.data('w', args.newWidth);\n args.ele.data('h', args.newHeight);\n args.ele.style('width', args.newWidth);\n args.ele.style('height', args.newHeight);\n\n return args;\n };\n\n undoChangeNodeSize(args: any)\n {\n args.ele.data('w', args.oldWidth);\n args.ele.data('h', args.oldHeight);\n args.ele.style('width', args.oldWidth);\n args.ele.style('height', args.oldHeight);\n\n return args;\n };\n\n /*\n * Undo redo for changing size of compounds\n * **/\n doChangeCompoundSize(args: any)\n {\n args.ele.style('min-width', args.newMinWidth);\n args.ele.style('min-width-bias-left', args.newMinWidthBiasLeft);\n args.ele.style('min-width-bias-right', args.newMinWidthBiasRight);\n args.ele.style('min-height', args.newMinHeight);\n args.ele.style('min-height-bias-top', args.newMinHeightBiasTop);\n args.ele.style('min-height-bias-bottom', args.newMinHeightBiasBottom);\n\n return args;\n };\n\n undoChangeCompoundSize(args: any)\n {\n if (args.oldMinWidth == undefined)\n {\n args.ele.style('min-width', 0);\n args.ele.style('min-width-bias-left', 0);\n args.ele.style('min-width-bias-right', 0);\n\n }\n else {\n args.ele.style('min-width', args.oldMinWidth);\n args.ele.style('min-width-bias-left', args.oldMinWidthBiasLeft);\n args.ele.style('min-width-bias-right', args.oldMinWidthBiasRight);\n }\n if (args.oldMinHeight == undefined)\n {\n args.ele.style('min-height', 0);\n args.ele.style('min-height-bias-top', 0);\n args.ele.style('min-height-bias-bottom', 0);\n }\n else {\n args.ele.style('min-height', args.oldMinHeight);\n args.ele.style('min-height-bias-top', args.oldMinHeightBiasTop);\n args.ele.style('min-height-bias-bottom', args.oldMinHeightBiasBottom);\n }\n\n return args;\n };\n\n changeName(ele: any, newName: any)\n {\n if (this.isCollaborative)\n {\n this.shareDBManager.changeName(ele, newName);\n }\n else\n {\n this.changeNameCy(ele, newName);\n }\n };\n\n changeNameCy(ele: any, newName: any)\n {\n var currentName = ele.data('name');\n var args = {ele: ele, oldName: currentName, newName: newName};\n this.undoRedoManager.do('changeName', args);\n };\n\n /*\n * Undo redo for changing name of nodes\n * **/\n doChangename(args: any)\n {\n\n var currentName = args.ele.data('name');\n var newArgs = {ele: args.ele, newName: args.newName, oldName: currentName};\n args.ele.data('name', args.newName);\n args.ele.css('content', args.newName);\n\n return newArgs;\n };\n\n undoChangeName(args: any)\n {\n\n var currentName = args.ele.data('name');\n var newArgs = {ele: args.ele, newName: args.newName, oldName: currentName};\n args.ele.data('name', args.oldName);\n args.ele.css('content', args.oldName);\n\n return newArgs;\n };\n\n hideSelectedNodes()\n {\n //Hides the selected elements\n var sel = this.cy.nodes(\":selected\");\n var nodesToHide = sel;\n var b = true;\n //Hides the parents if they have no children\n sel.parent().each((parent: any) =>\n {\n b=true;\n parent.children().each(function(ch: any)\n {\n if (!ch.selected())\n {\n if (ch.visible()) b=false;\n }\n }\n );\n if (b) nodesToHide = nodesToHide.add(parent);\n });\n this.cy.elements(\":selected\").unselect();\n if (this.isCollaborative)\n this.shareDBManager.changeVisibility(nodesToHide, true);\n else\n this.undoRedoManager.do('hideNode', nodesToHide);\n };\n\n /*\n * Undo redo for hiding nodes\n * **/\n doHide(args: any)\n {\n args.hide();\n return args;\n };\n\n undoHide(args: any)\n {\n args.show();\n return args;\n };\n\n showAllNodes()\n {\n var hid = this.cy.nodes(\":hidden\");\n if (this.isCollaborative)\n this.shareDBManager.changeVisibility(hid, false);\n else\n this.undoRedoManager.do('showAllNodes', hid);\n };\n\n /*\n * Undo redo for showing all nodes\n * **/\n doShow(args: any)\n {\n args.show();\n return args;\n };\n\n undoShow(args: any)\n {\n args.hide();\n return args;\n };\n\n highlightElementsInitially(invalidHighlightedGenesIDs: string[], invalidGenesIDs: string[],\n highlightedGenesIDs: string[], highlightedEdgesIDs: string[], hiddenGenesIDs: string[])\n {\n for (var i in invalidHighlightedGenesIDs)\n {\n this.cy.$('#'+invalidHighlightedGenesIDs[i]).addClass('invalidGeneHighlight');\n }\n for (var i in invalidGenesIDs)\n {\n this.cy.$('#'+invalidGenesIDs[i]).addClass('invalidGene');\n }\n for (var i in highlightedGenesIDs)\n {\n this.cy.$('#'+highlightedGenesIDs[i]).addClass('highlightedNode');\n }\n for (var i in highlightedEdgesIDs)\n {\n this.cy.$('#'+highlightedEdgesIDs[i]).addClass('highlightedEdge');\n }\n for (var i in hiddenGenesIDs)\n {\n this.cy.$('#'+hiddenGenesIDs[i]).hide();\n }\n };\n\n validateGenes()\n {\n var geneSymbols = this.getGeneSymbols();\n this.portalAccessor.validateGenes(geneSymbols, this);\n }\n\n //Get all gene symbols\n getGeneSymbols()\n {\n var geneSymbols: any[] = [];\n this.cy.nodes().forEach( function (gene: any)\n {\n if(gene.data().type === \"GENE\")\n geneSymbols.push(gene.data().name);\n });\n return geneSymbols;\n }\n\n\n highlightInvalidGenes(validGeneSymbols: any)\n {\n if (this.isCollaborative)\n {\n var invalidGenes: any[] = [];\n this.cy.nodes().forEach( function (gene: any)\n {\n if(gene.data().type === \"GENE\")\n {\n var geneName = gene.data().name;\n if(validGeneSymbols.indexOf(geneName) < 0)\n invalidGenes.push(gene.id());\n }\n });\n this.shareDBManager.changeHighlightInvalidGenes(invalidGenes, true);\n // TODO: Amendment by Ziya\n /*\n if (invalidGenes.length > 0)\n this.notificationManager.createNotification(\"Invalid genes are highlighted\",\"fail\");\n else\n this.notificationManager.createNotification(\"All gene symbols are valid\",\"success\");*/\n }\n else\n {\n var highlightedGenes = this.cy.collection();\n this.cy.nodes().forEach( function (gene: any)\n {\n if(gene.data().type === \"GENE\")\n {\n var geneName = gene.data().name;\n if(validGeneSymbols.indexOf(geneName) < 0)\n highlightedGenes = highlightedGenes.add(gene);\n }\n });\n // TODO: Amendment by Ziya\n /*\n if (highlightedGenes.size() > 0)\n this.notificationManager.createNotification(\"Invalid genes are highlighted\",\"fail\");\n else\n this.notificationManager.createNotification(\"All gene symbols are valid\",\"success\");*/\n\n var nodesToAddInvalidHighlight = this.cy.collection();\n highlightedGenes.forEach(function(ele: any){\n if (!ele.hasClass('invalidGeneHighlight') && !ele.hasClass('invalidGene'))\n nodesToAddInvalidHighlight = nodesToAddInvalidHighlight.union(ele);\n });\n this.undoRedoManager.do('highlightInvalidGenes', nodesToAddInvalidHighlight);\n }\n }\n\n removeInvalidGeneHighlights(actions: any[])\n {\n if (this.isCollaborative)\n {\n var geneIDs: any[] = [];\n this.cy.nodes().forEach( function (gene: any)\n {\n if(gene.data().type === \"GENE\")\n {\n if(gene.hasClass('invalidGeneHighlight') || gene.hasClass('invalidGene'))\n geneIDs.push(gene.id());\n }\n });\n this.shareDBManager.changeHighlightInvalidGenes(geneIDs, false);\n }\n else\n {\n var nodesToRemoveInvalidHighlight = this.cy.collection();\n this.cy.nodes().forEach(function(ele: any){\n if (ele.hasClass('invalidGeneHighlight') || ele.hasClass('invalidGene'))\n nodesToRemoveInvalidHighlight = nodesToRemoveInvalidHighlight.union(ele);\n });\n actions.push({name: \"removeHighlightInvalidGenes\", param: nodesToRemoveInvalidHighlight});\n // this.undoRedoManager.do('removeHighlightInvalidGenes', nodesToRemoveInvalidHighlight);\n }\n }\n\n doHighlightInvalidGenes(args: any)\n {\n args.each(function(n: any)\n {\n if(n.hasClass('highlightedNode'))\n {\n n.removeClass('highlightedNode');\n n.addClass(\"invalidGeneHighlight\");\n }\n else\n n.addClass(\"invalidGene\");\n });\n return args;\n };\n\n undoHighlightInvalidGenes(args: any)\n {\n args.each(function(n: any)\n {\n if(n.hasClass('invalidGeneHighlight'))\n {\n n.removeClass('invalidGeneHighlight');\n n.addClass(\"highlightedNode\");\n }\n else\n n.removeClass(\"invalidGene\");\n });\n return args;\n }\n\n highlightSelected()\n {\n var sel = this.cy.elements(\":selected\");\n sel.unselect();\n var elementsToHighlight = this.cy.collection();\n sel.forEach(function(ele: any){\n if (!ele.hasClass('invalidGeneHighlight') && !ele.hasClass('highlightedNode') && !ele.hasClass('highlightedEdge'))\n elementsToHighlight = elementsToHighlight.union(ele);\n });\n if (this.isCollaborative)\n this.shareDBManager.changeHighlight(elementsToHighlight, true);\n else\n this.undoRedoManager.do('highlightOthers', elementsToHighlight);\n };\n\n highlightNeighbors()\n {\n var sel = this.cy.elements(\":selected\");\n var neighbors = sel.neighborhood();\n neighbors = neighbors.union(sel);\n neighbors.unselect();\n var elementsToHighlight = this.cy.collection();\n neighbors.forEach(function(ele: any){\n if (!ele.hasClass('invalidGeneHighlight') && !ele.hasClass('highlightedNode') && !ele.hasClass('highlightedEdge'))\n elementsToHighlight = elementsToHighlight.union(ele);\n });\n if (this.isCollaborative)\n this.shareDBManager.changeHighlight(elementsToHighlight, true);\n else\n this.undoRedoManager.do('highlightOthers', elementsToHighlight);\n };\n\n highlightBySearch(args: any[])\n {\n if (this.isCollaborative)\n this.shareDBManager.changeHighlight(args, true);\n else\n this.undoRedoManager.do('highlightOthers', args);\n };\n\n removeOtherHighlight(actions: any[])\n {\n var nodesToRemoveHighlight = this.cy.collection();\n //TODO cytoscape selectors may provide more handy functionality instead of iterating over !\n this.cy.elements().forEach(function(ele: any){\n if (ele.hasClass('highlightedNode') || ele.hasClass('highlightedEdge') || ele.hasClass('invalidGeneHighlight'))\n nodesToRemoveHighlight = nodesToRemoveHighlight.add(ele);\n });\n\n if (this.isCollaborative)\n this.shareDBManager.changeHighlight(nodesToRemoveHighlight, false);\n else\n actions.push({name: \"removeOtherHighlight\", param: nodesToRemoveHighlight});\n // this.undoRedoManager.do('removeOtherHighlight', nodesToRemoveHighlight);\n };\n\n /*\n * Undo redo for highlighting of nodes\n * **/\n doHighlight(args: any)\n {\n args.each(function(n: any)\n {\n if (n.isEdge())\n n.addClass(\"highlightedEdge\");\n else\n {\n if(n.hasClass('invalidGene'))\n {\n n.removeClass(\"invalidGene\");\n n.addClass(\"invalidGeneHighlight\");\n }\n else\n n.addClass(\"highlightedNode\");\n }\n });\n return args;\n };\n\n undoHighlight(args: any)\n {\n args.each(function(n: any)\n {\n if (n.isEdge())\n n.removeClass(\"highlightedEdge\");\n else\n {\n if(n.hasClass('invalidGeneHighlight'))\n {\n n.removeClass(\"invalidGeneHighlight\");\n n.addClass(\"invalidGene\");\n }\n else\n n.removeClass(\"highlightedNode\");\n }\n });\n return args;\n };\n\n removeAllHighlight()\n {\n let actions: any[] = [];\n this.removeInvalidGeneHighlights(actions);\n this.removeOtherHighlight(actions);\n this.cy.undoRedo().do(\"batch\", actions);\n };\n\n postLayout()\n {\n if (this.isCollaborative)\n {\n //Previously this.cy.nodes() was sent as an argument in moveElements function but it caused a problem when\n // the compound node was moved before the child nodes\n var movedNodes = this.cy.collection();\n var parentNodes = this.cy.collection();\n this.cy.nodes().forEach(function(node: any)\n {\n if (!node.isParent())\n movedNodes = movedNodes.add(node);\n else\n parentNodes = parentNodes.add(node);\n });\n this.moveElements(movedNodes);\n this.moveElements(parentNodes);\n\n var newState = {\n zoomLevel: this.cy.zoom(),\n panLevel: this.cy.pan()\n };\n this.updateGlobalOptions(newState);\n }\n };\n\n /*\n * Gets the first empty index from the list in cloud model\n * **/\n getEmptyGroupID()\n {\n if(this.isCollaborative)\n return this.shareDBManager.getEmptyGroupID();\n else\n return this.genomicDataOverlayManager.getEmptyGroupID();\n };\n\n /*\n * Gets the first empty index from the list in cloud model\n * **/\n groupGenomicData(cancerNames: any[], groupID: string)\n {\n return this.shareDBManager.groupGenomicData(cancerNames, groupID);\n };\n\n addPubmedIDs(edge: any, pubmedIDs: number[])\n {\n if (this.isCollaborative)\n {\n console.log(edge, pubmedIDs);\n this.shareDBManager.addPubmedIDs(edge.id(), pubmedIDs);\n }\n else\n {\n var pubmedArray = edge.data('pubmedIDs');\n var validPubmedIDs = _.filter(pubmedIDs, function(id: number){\n return !isNaN(id);\n });\n pubmedArray.push.apply(pubmedArray,validPubmedIDs);\n edge.data('pubmedIDs', _.uniq(pubmedArray));\n }\n }\n\n removePubmedID(edge: any, pubmedIDs: number[])\n {\n if (this.isCollaborative)\n {\n this.shareDBManager.removePubmedID(edge.id(), pubmedIDs);\n }\n else\n {\n var pubmedArray = edge.data('pubmedIDs');\n edge.data('pubmedIDs', _.difference(pubmedArray, pubmedIDs));\n }\n }\n\n updateEdgeBendPoints(edge: any)\n {\n if (this.isCollaborative)\n {\n var numberOfBendPoints = 0;\n if (this.edgeEditing.getSegmentPoints(edge) !== undefined)\n numberOfBendPoints = this.edgeEditing.getSegmentPoints(edge).length/2;\n var bendPointsArray = [];\n for (var j = 0; j < numberOfBendPoints; j++)\n {\n bendPointsArray.push(\n {\n x: this.edgeEditing.getSegmentPoints(edge)[2*j],\n y: this.edgeEditing.getSegmentPoints(edge)[2*j+1]\n }\n );\n }\n // edge.data(\"bendPointPositions\", bendPointsArray);\n // edgeEditing.initBendPoints(edge);\n \n this.shareDBManager.updateEdgeBendPoints(edge.id(), bendPointsArray);\n }\n }\n\n //Related to order the nodes according to the selection of user\n pushSelectedNodeStack(ele: any)\n {\n this.selectedNodeStack[ele.id()] = ele;\n }\n\n removeElementFromSelectedNodeStack(ele: any)\n {\n var nodeID = ele.id();\n if (nodeID in this.selectedNodeStack)\n delete this.selectedNodeStack[ele.id()];\n }\n\n clearSelectedNodeStack()\n {\n this.selectedNodeStack = {};\n }\n\n exportSVG()\n {\n return this.svgExporter.exportGraph(this.cy.nodes(), this.cy.edges());\n }\n\n //Simple observer-observable pattern for views!!!!!\n registerObserver(observer: any)\n {\n this.observers.push(observer);\n };\n\n notifyObservers()\n {\n for (var i in this.observers)\n {\n var observer = this.observers[i];\n observer.notify();\n }\n };\n\n registerGenomicDataObserver(observer: any)\n {\n this.genomicDataOverlayManager.registerObserver(observer);\n }\n\n updateGenomicDataVisibility(dataMap: any)\n {\n if(this.isCollaborative)\n {\n //TODO compound OP\n // this.shareDBManager.clearGenomicVisData();\n this.shareDBManager.addGenomicVisibilityData(dataMap);\n }\n else\n {\n for (var _key in dataMap)\n {\n this.genomicDataOverlayManager.updateGenomicDataVisibility(_key, dataMap[_key]);\n }\n this.genomicDataOverlayManager.showGenomicData();\n }\n }\n\n //Global options related functions, zoom etc..\n getGlobalOptions()\n {\n return {\n zoomLevel: this.cy.zoom(),\n panLevel: this.cy.pan()\n };\n }\n\n changeGlobalOptions(op: any)\n {\n var globalOptions = op.li;\n this.cy.zoom(globalOptions.zoomLevel);\n this.cy.pan(globalOptions.panLevel);\n }\n\n updateGlobalOptions(newOptions: any)\n {\n if(this.isCollaborative)\n this.shareDBManager.updateGlobalOptions(newOptions);\n }\n\n //Layout properties related functions\n saveLayoutProperties(newLayoutProps: any)\n {\n if(this.isCollaborative)\n {\n // Call a real time function that updated real time object and\n // its callback (updateLayoutPropertiesCallback) will handle sync of this object\n // across collaborators\n this.shareDBManager.updateLayoutProperties(newLayoutProps);\n }\n else\n {\n this.layoutProperties = _.clone(newLayoutProps);\n }\n };\n\n updateLayoutPropertiesCallback(op: any)\n {\n var newLayoutProps = op.li;\n this.layoutProperties = _.clone(newLayoutProps);\n LayoutProperties.layoutProperties = _.clone(this.layoutProperties);\n //Notify observers to reflect changes on colalborative object to the views\n this.notifyObservers();\n };\n\n performLayout()\n {\n this.undoRedoManager.do(\"layout\", {options: this.layoutProperties, eles: null, zoom: this.cy.zoom(), pan: this.cy.pan()});\n };\n\n //Node Related Functions\n addNode(nodeData: any, posData: any)\n {\n if (this.isCollaborative)\n {\n console.log(\"Add node to DB\");\n this.addNewNodeToShareDB(nodeData, posData);\n }\n else\n {\n this.addNodetoCy(nodeData,posData);\n }\n };\n\n addNodes(nodes: any[])\n {\n for (var i in nodes)\n {\n this.addNode(nodes[i].data, nodes[i].position);\n }\n };\n\n addNodesCy(nodes: any[])\n {\n console.log(\"From EAM/addNodesCy\");\n console.log(nodes);\n var nodeArr: any[] = [];\n for (var i in nodes)\n {\n var nodeData = nodes[i].data;\n var posData = nodes[i].position;\n\n var newNode =\n {\n group: \"nodes\",\n data: nodeData,\n position: {}\n };\n\n if (nodeData.parent === undefined )\n {\n delete newNode.data.parent;\n }\n\n if (posData)\n {\n newNode.position =\n {\n x: posData.x,\n y: posData.y\n }\n }\n nodeArr[i] = newNode;\n }\n\n this.cy.add(nodeArr);\n this.cy.nodes().updateCompoundBounds();\n\n };\n\n addNodetoCy(nodeData: any, posData: any)\n {\n var newNode =\n {\n group: \"nodes\",\n data: nodeData,\n position: {}\n };\n\n if (nodeData.parent === undefined )\n {\n delete newNode.data.parent;\n }\n\n if (posData)\n {\n newNode.position =\n {\n x: posData.x,\n y: posData.y\n }\n }\n\n //his.cy.add(newNode);\n this.cy.nodes().updateCompoundBounds();\n this.undoRedoManager.do(\"add\", newNode);\n //Width was not properly updated only by changing data property\n var thatEle = this.cy.getElementById(nodeData.id);\n thatEle.style('width', thatEle.data('w'));\n };\n\n shareDBNodeAddRemoveEventCallBack(op: any)\n {\n console.log(\"shareDBNodeAddRemoveEventCallBack\");\n console.log(op);\n //Get real time node object and sync it to node addition or removal\n var isRemove = Object.keys(op)[1] === 'od';\n var node = op.oi || op.od;\n //Removal Operation\n if (isRemove)\n {\n var nodeID = op.p[1];\n //Remove element from existing graph\n var cyEle = this.cy.$(\"#\" + nodeID);\n this.removeElementCy(cyEle);\n this.cy.nodes().updateCompoundBounds();\n }\n //Addition Operation\n else\n {\n this.addNewNodeLocally(node);\n }\n };\n\n addNewNodeLocally(realtimeNode: any)\n {\n var nodeData =\n {\n id: realtimeNode.id,\n type: realtimeNode.type,\n name: realtimeNode.name,\n parent: realtimeNode.parent,\n w: realtimeNode.w,\n h: realtimeNode.h\n };\n\n if (realtimeNode.x != \"undefined\" && realtimeNode.y != \"undefined\")\n {\n this.addNodetoCy(nodeData, {x: realtimeNode.x, y: realtimeNode.y});\n }\n else\n {\n // TODO: Amendment by Ziya\n this.addNodetoCy(nodeData, null);\n }\n\n this.cy.nodes().updateCompoundBounds();\n };\n\n addNewNodeToShareDB(nodeData: any, posData: any)\n {\n this.shareDBManager.addNewNode(nodeData,posData);\n };\n\n //Edge related functions\n addEdge(edgeData: any)\n {\n if (this.isCollaborative)\n {\n this.addNewEdgeShareDB(edgeData);\n }\n else\n {\n this.addNewEdgetoCy(edgeData);\n }\n };\n\n addEdges(edges: any[])\n {\n for (var i in edges)\n {\n this.addEdge(edges[i].data);\n }\n };\n\n addEdgesCy(edges: any[])\n {\n const newEdges = [];\n\n\n for (var i in edges)\n {\n const newEdge =\n {\n group: \"edges\",\n data: edges[i].data\n };\n newEdges.push(newEdge);\n }\n console.log(\"From addEdgesCy\");\n this.cy.add(newEdges);\n };\n\n addNewEdgeShareDB(edgeData: any)\n {\n this.shareDBManager.addNewEdge(edgeData);\n };\n\n addNewEdgetoCy(edgeData: any)\n {\n var newEdge =\n {\n group: \"edges\",\n data: edgeData\n };\n this.undoRedoManager.do(\"add\", newEdge);\n };\n\n shareDBEdgeAddRemoveEventCallBack(op: any)\n {\n\n //Get real time node object and sync it to node addition or removal\n var isRemove = Object.keys(op)[1] === 'od';\n var edge = op.oi || op.od;\n\n //Removal Operation\n if (isRemove)\n {\n var edgeID = op.p[1];\n //Remove element from existing graph\n var cyEle = this.cy.$(\"#\" + edgeID);\n this.removeElementCy(cyEle);\n }\n //Addition Operation\n else\n {\n this.addNewEdgeLocally(edge);\n }\n };\n\n addNewElementsLocally(realTimeNodeArray: any[], realTimeEdgeArray: any[])\n {\n const nodeList: any[] = [];\n const nodeMap: any = {};\n\n for (var i in realTimeNodeArray)\n {\n var realTimeNode = realTimeNodeArray[i];\n\n var nodeID = realTimeNode.id;\n\n //Added for backward compatibility when width was not defined\n var nodeWidth = (realTimeNode.w == undefined) ? 150 : realTimeNode.w ;\n var nodeHeight = (realTimeNode.h == undefined) ? 52 : realTimeNode.h ;\n var compoundMinWidth = (realTimeNode.minWidth == undefined) ? 0 : realTimeNode.minWidth ;\n var compoundMinWidthBiasLeft = (realTimeNode.minWidthBiasLeft == undefined) ? 0 : realTimeNode.minWidthBiasLeft ;\n var compoundMinWidthBiasRight = (realTimeNode.minWidthBiasRight == undefined) ? 0 : realTimeNode.minWidthBiasRight ;\n var compoundMinHeight = (realTimeNode.minHeight == undefined) ? 0 : realTimeNode.minHeight ;\n var compoundMinHeightBiasTop = (realTimeNode.minHeightBiasTop == undefined) ? 0 : realTimeNode.minHeightBiasTop ;\n var compoundMinHeightBiasBottom = (realTimeNode.minHeightBiasBottom == undefined) ? 0 : realTimeNode.minHeightBiasBottom;\n\n const nodeData =\n {\n group: 'nodes',\n // TODO: Amendment by Ziya\n position: {},\n data:\n {\n id: nodeID,\n type: realTimeNode.type,\n name: realTimeNode.name,\n parent: realTimeNode.parent,\n w: nodeWidth,\n h: nodeHeight\n },\n style:\n {\n 'width': nodeWidth,\n 'height': nodeHeight,\n 'min-width': compoundMinWidth,\n 'min-width-bias-left': compoundMinWidthBiasLeft,\n 'min-width-bias-right': compoundMinWidthBiasRight,\n 'min-height': compoundMinHeight,\n 'min-height-bias-top': compoundMinHeightBiasTop,\n 'min-height-bias-bottom': compoundMinHeightBiasBottom\n }\n };\n\n if (nodeData.data.parent === undefined )\n {\n delete nodeData.data.parent;\n }\n\n if (realTimeNode.x && realTimeNode.y)\n {\n nodeData.position =\n {\n x: realTimeNode.x,\n y: realTimeNode.y\n }\n }\n\n nodeMap[nodeID] = nodeData;\n nodeList.push(nodeData);\n }\n\n var edgeList = [];\n for (var i in realTimeEdgeArray)\n {\n var edge = realTimeEdgeArray[i];\n var edgeID = edge.id;\n\n //If source and and target is somehow lost in remote model do not create this edge\n if(!(edge.source in nodeMap && edge.target in nodeMap))\n continue\n\n var edgeData =\n {\n group: 'edges',\n data:\n {\n id: edgeID,\n type: edge.type,\n source: edge.source,\n target: edge.target,\n pubmedIDs: edge.pubmedIDs,\n name: edge.name,\n bendPointPositions: edge.bendPoint\n }\n };\n\n edgeList.push(edgeData);\n }\n\n this.cy.add(nodeList);\n this.cy.add(edgeList);\n\n this.edgeEditing.initBendPoints(this.cy.edges());\n\n this.cy.nodes().updateCompoundBounds();\n }\n\n addNewEdgeLocally(edge: any)\n {\n var edgeData =\n {\n id: edge.id,\n type: edge.type,\n source: edge.source,\n target: edge.target,\n pubmedIDs: edge.pubmedIDs,\n name: edge.name,\n bendPointPositions: edge.bendPoint\n };\n this.addNewEdgetoCy(edgeData);\n this.edgeEditing.initBendPoints(this.cy.getElementById( edge.id ));\n };\n\n reconnectEdge(sourceID: string, targetID: string, edgeData: any) {\n\n if(this.isCollaborative){\n var edge = this.cy.getElementById(edgeData.id);\n this.reconnectEdgeInShareDB(sourceID, targetID, edgeData);\n }\n else{\n var location = {\n source: sourceID,\n target: targetID\n };\n\n var edge = this.cy.getElementById(edgeData.id);\n edge.move(location);\n }\n\n return this.cy.getElementById(edgeData.id);\n };\n\n reconnectEdgeInShareDB(sourceID: string, targetID: string, edgeData: any) {\n this.shareDBManager.reconnectEdge(sourceID, targetID, edgeData);\n };\n\n //Removal functions\n removeElement(ele: any)\n {\n if (this.isCollaborative)\n {\n this.removeElementsFromShareDB(ele);\n }\n else\n {\n this.removeElementsCy(ele);\n }\n };\n\n removeElementCy(ele: any)\n {\n this.undoRedoManager.do(\"remove\", ele);\n };\n\n removeElementsCy(ele: any)\n {\n this.undoRedoManager.do(\"remove\", ele);\n };\n\n removeElementsFromShareDB(eles: any[])\n {\n var self = this;\n eles.forEach(function (ele)\n {\n self.shareDBManager.removeElement(ele.id());\n });\n };\n\n removeElementFromShareDB(ele: any)\n {\n this.shareDBManager.removeElement(ele.id());\n };\n\n changeParents(eles: any[], newParentId: string)\n {\n if(this.isCollaborative)\n {\n this.changeParentShareDB(eles, newParentId);\n }\n else\n {\n var parentData = newParentId ? newParentId : null;\n\n // Old manual way to change parents in local mode\n //this.changeParentCy(eles, newParentId);\n\n //Save element's previous width & height in dim array\n const dim : any[]= [];\n const id : any[]= [];\n eles.forEach(function (ele: any)\n {\n var parameters =\n {\n id: ele.id(),\n width: ele.style(\"width\"),\n height: ele.style(\"height\")\n };\n dim.push(parameters);\n id.push(ele.id());\n });\n\n console.log(parentData);\n const parentElem = this.cy.getElementById(parentData);\n var param = {\n firstTime: true,\n parentData: parentData, // It keeps the newParentId (Just an id for each nodes for the first time)\n nodes: eles,\n posDiffX: (!parentData) ? 0 : parentElem.position('x') - eles[0].position('x'),\n posDiffY: (!parentData) ? 0 : parentElem.position('y') - eles[0].position('y')\n };\n this.undoRedoManager.do('changeParent', param);\n console.log(this.undoRedoManager.getUndoStack());\n\n //The elements after change parent operation are different so we find them by using the saved ids\n // and add them to the collection\n var collection = this.cy.collection();\n for (var i in id)\n {\n var elementById = this.cy.getElementById(id[i]);\n collection = collection.add(elementById);\n }\n console.log(collection);\n //Set their previous size to the new elements in the collection\n collection.forEach(function (ele: any, i: number)\n {\n if (ele.id() == dim[i].id)\n ele.style(\"width\", dim[i].width);\n ele.style(\"height\", dim[i].height);\n });\n }\n };\n\n changeParentShareDB (eles: any, newParentId: string)\n {\n\n var classRef = this;\n function getTopLevelParents(eles: any[])\n {\n var tpMostNodes = classRef.cy.collection();\n const parentMap : any = {};\n\n //Get all parents\n eles.forEach(function (node)\n {\n if(node.isParent())\n parentMap[node.id()] = node;\n });\n\n //Get all parents\n eles.forEach(function (node)\n {\n var nodeParent = node.parent();\n\n if(parentMap[nodeParent.id()] === undefined)\n tpMostNodes = tpMostNodes.union(node);\n });\n\n return tpMostNodes;\n }\n\n\n class NodeObj{\n public nodeRef: any;\n public children: any;\n constructor(nodeObj: any){\n this.nodeRef = nodeObj;\n this.children = [];\n }\n }\n var connectedEdges = eles.connectedEdges();\n // Traverses given elements and constructs subgraph relations\n // creates a nested structure into rootnodeObj\n function traverseNodes(eles: any[], rootNodeObj: any)\n {\n eles.forEach(function (ele)\n {\n connectedEdges = connectedEdges.union(ele.connectedEdges());\n\n if(ele.isParent())\n {\n rootNodeObj.children.push(new NodeObj(ele));\n var lengthOfChildrenArray = rootNodeObj.children.length;\n traverseNodes(ele.children(), rootNodeObj.children[lengthOfChildrenArray-1]);\n }\n else\n {\n rootNodeObj.children.push(new NodeObj(ele));\n }\n });\n }\n\n //Create new collection\n var topMostNodes = getTopLevelParents(eles);\n\n var rootNodeR = new NodeObj(null);\n\n traverseNodes(topMostNodes, rootNodeR);\n this.shareDBManager.changeParent(rootNodeR, newParentId, connectedEdges);\n };\n\n changeParentCy(eles: any[], newParentId: string)\n {\n let lockedNodes: any = {};\n const self = this;\n\n function removeNodes(nodes: any)\n {\n //Get removed edges first\n let removedEles = nodes.connectedEdges().remove();\n const children = nodes.children();\n\n if (children != null && children.length > 0)\n {\n children.forEach(function(childNode: any)\n {\n lockedNodes[childNode.id()] = true;\n });\n\n removedEles = removedEles.union(removeNodes(children));\n }\n\n removedEles = removedEles.union(nodes.remove());\n self.cy.nodes().updateCompoundBounds();\n return removedEles;\n }\n\n\n var removedEles = removeNodes(eles);\n this.undoRedoManager.do(\"remove\", removedEles);\n\n for (var i = 0; i < removedEles.length; i++)\n {\n var removedNode = removedEles[i];\n\n //Just alter the parent id of corresponding nodes !\n if (removedNode.isEdge() || lockedNodes[removedNode.id()])\n {\n continue;\n }\n\n removedNode._private.data.parent = newParentId;\n if(removedNode._private.parent){\n delete removedNode._private.parent;\n }\n }\n\n self.cy.add(removedEles);\n this.undoRedoManager.do(\"add\", removedEles);\n self.cy.nodes().updateCompoundBounds();\n };\n\n moveElements(eles: any[])\n {\n var classRef = this;\n //Sync movement to real time api\n if(this.isCollaborative)\n {\n eles.forEach(function (ele: any)\n {\n classRef.shareDBManager.moveElement(ele);\n });\n }\n };\n\n resizeElements(ele: any)\n {\n if(this.isCollaborative) {\n if (!ele.isParent()) {\n var previousWidth = ele.width();\n var previousHeight = ele.height();\n //Sync movement to real time api\n this.shareDBManager.resizeElement(ele, previousWidth, previousHeight);\n }\n else {\n var minWidth = ele.style('min-width');\n var minWidthBiasLeft = ele.style('min-width-bias-left');\n var minWidthBiasRight = ele.style('min-width-bias-right');\n var minHeight = ele.style('min-height');\n var minHeightBiasTop = ele.style('min-height-bias-top');\n var minHeightBiasBottom = ele.style('min-height-bias-bottom');\n\n //Sync movement to real time api\n this.shareDBManager.resizeCompound(ele, minWidth, minWidthBiasLeft, minWidthBiasRight, minHeight, minHeightBiasTop, minHeightBiasBottom);\n }\n }\n };\n\n mergeGraph(nodes: any[], edges: any[])\n {\n if (this.isCollaborative)\n {\n //Collaborative usage\n this.shareDBManager.mergeGraph(nodes,edges);\n }\n else\n {\n //Local usage file load\n this.mergeGraphCy(nodes,edges);\n }\n this.fitGraph();\n };\n\n mergeGraphCy(nodes: any[], edges: any[])\n {\n //Define arrays and maps\n const nodesToBeAdded = [];\n const edgesToBeAdded = [];\n const nodeMap : any= {};\n\n //Iterate over nodes and find nodes that does not exist in current graph by looking their name\n for (var index in nodes)\n {\n var ele = nodes[index];\n nodeMap[ele.data.id] = ele;\n\n if (this.cy.filter('node[name = \"'+ele.data.name+'\"]').length <= 0)\n {\n delete ele.data.id;\n //TODO need to update parent ?\n nodesToBeAdded.push(ele);\n }\n }\n\n this.cy.add(nodesToBeAdded);\n\n //Iterate over all edges\n for (var index in edges)\n {\n //Get corresponding source and target node in merge file\n var ele = edges[index];\n var sourceNode = nodeMap[ele.data.source];\n var targetNode = nodeMap[ele.data.target];\n\n //Check if there are nodes with same name in current graph\n var cySourceNode = this.cy.nodes('[name=\"'+sourceNode.data.name+'\"]');\n var targetNode = this.cy.nodes('[name=\"'+targetNode.data.name+'\"]');\n\n if (cySourceNode.length > 0)\n {\n ele.data.source = cySourceNode.id();\n }\n\n if (targetNode.length > 0)\n {\n ele.data.target = targetNode.id();\n }\n\n if (targetNode.length < 0 && cySourceNode.length < 0 ) {\n continue;\n }\n\n var edgesBtw = this.cy.filter('edge[source = \"'+cySourceNode.id()+'\"][target = \"'+targetNode.id()+'\"]');\n\n //We assume there could be one edge between source and target node with same type\n var isFound = false;\n edgesBtw.forEach(function(edge: any)\n {\n if (edge.data().type == ele.data.type)\n {\n isFound = true;\n return false;\n }\n //TODO: AMENDMENT by Ziya\n return true;\n });\n\n if (!isFound)\n {\n delete ele.data.id;\n edgesToBeAdded.push(ele);\n }\n }\n\n this.cy.add(edgesToBeAdded);\n };\n\n fitGraph()\n {\n if(this.isCollaborative)\n {\n this.cy.fit(this.FIT_CONSTANT);\n var newState =\n {\n zoomLevel: this.cy.zoom(),\n panLevel: this.cy.pan()\n };\n this.updateGlobalOptions(newState);\n }\n else\n {\n this.cy.fit(this.FIT_CONSTANT);\n }\n }\n\n loadFile(nodes: any[], edges: any[])\n {\n if (this.isCollaborative)\n {\n //Real time load graph\n console.log(\"Real time load graph\");\n this.loadfileShareDB(nodes, edges);\n }\n else\n {\n //Local usage file load\n this.loadFileCy(nodes,edges);\n }\n this.cy.edgeEditing('get').initBendPoints(this.cy.edges());\n this.fitGraph();\n };\n\n loadFileCy(nodes: any[], edges: any[])\n {\n //Remove all elements\n this.removeElementCy(this.cy.elements());\n\n this.addNodesCy(nodes);\n this.addEdgesCy(edges);\n };\n\n loadfileShareDB(nodes: any[], edges: any[])\n {\n this.shareDBManager.loadGraph(nodes,edges);\n };\n\n removeAllElements()\n {\n if (this.isCollaborative)\n {\n this.shareDBManager.removeAllElements();\n }\n else\n {\n this.cy.remove(this.cy.elements());\n }\n };\n\n updateHighlight(ele: any, isHighlighted: boolean)\n {\n if (isHighlighted)\n this.undoRedoManager.do('highlightOthers', ele);\n else\n this.undoRedoManager.do('removeOtherHighlight', ele);\n };\n\n\n updateVisibility(ele: any, isHidden: boolean)\n {\n if (isHidden)\n ele.hide();\n else\n ele.show();\n };\n\n updateElementCallback(op: any)\n {\n var ele = op.oi;\n var eleID = ele.id;\n var cyEle = this.cy.$(\"#\" + eleID);\n this.changeNameCy(cyEle, ele.name);\n\n if (cyEle.isNode())\n {\n //Width and height of simple nodes and compounds is changed differently\n if (cyEle.isParent())\n {\n cyEle.style(\"min-width\", ele.minWidth);\n cyEle.style(\"min-width-bias-left\", ele.minWidthBiasLeft);\n cyEle.style(\"min-width-bias-right\", ele.minWidthBiasRight);\n cyEle.style(\"min-height\", ele.minHeight);\n cyEle.style(\"min-height-bias-top\", ele.minHeightBiasTop);\n cyEle.style(\"min-height-bias-bottom\", ele.minHeightBiasBottom);\n }\n else\n {\n cyEle.data.w = ele.w;\n cyEle.data.h = ele.h;\n cyEle.style(\"width\", ele.w);\n cyEle.style(\"height\", ele.h);\n //Position is changed only for simple nodes because the\n //position of compounds is defined by simple nodes' position\n cyEle.position({x: ele.x, y: ele.y});\n }\n\n this.updateVisibility(cyEle, ele.isHidden);\n this.updateHighlight(cyEle, ele.isHighlighted);\n\n if(ele.isInvalidGene)\n {\n this.doHighlightInvalidGenes(cyEle);\n }\n else\n {\n this.undoHighlightInvalidGenes(cyEle);\n }\n //Refresh grapples when the node being changed from another collaborator is selected in current window\n // this.cy.nodeResize('get').refreshGrapples();\n }\n else if(cyEle.isEdge())\n {\n var pubmedArray = ele.pubmedIDs;\n cyEle.data('pubmedIDs', pubmedArray);\n this.updateHighlight(cyEle, ele.isHighlighted);\n\n var bendPoint = ele.bendPoint;\n var numberOfBendPositions = cyEle.data('bendPointPositions').length; // Holds the number of bend positions in data before being updated\n\n\n\n //If edge is reconnected\n if ( ele.source !== cyEle.source().id() || ele.target !== cyEle.target().id()){\n var location = {\n source: ele.source,\n target: ele.target\n };\n cyEle.move(location);\n //make sure that bend points are same\n this.updateEdgeBendPoints(cyEle);\n }\n else {\n cyEle.data('bendPointPositions', bendPoint);\n if (numberOfBendPositions !== undefined && numberOfBendPositions > 0)\n this.edgeEditing.deleteSelectedBendPoint(cyEle,0);\n this.edgeEditing.initBendPoints(cyEle);\n }\n }\n };\n\n getGenomicDataSVG(node: any)\n {\n // @ts-ignore\n return this.genomicDataOverlayManager.generateSVGForNode(node);\n }\n\n getOncoprintDataSVG(node: any) \n {\n return this.genomicDataOverlayManager.generateOncoprintForPatientNode(node);\n }\n\n removeGenomicData()\n {\n if(this.isCollaborative)\n {\n this.shareDBManager.clearGenomicData();\n }\n else\n {\n // TODO wrap this in afunction in genomic data overlay manager\n this.genomicDataOverlayManager.clearAllGenomicData();\n this.genomicDataOverlayManager.hideGenomicData();\n this.genomicDataOverlayManager.notifyObservers();\n }\n\n }\n\n addGenomicData(genomicData: any)\n {\n const groupID = this.getEmptyGroupID();\n \n console.log(\"genomicData\");\n console.log(genomicData);\n\n\n if(this.isCollaborative)\n {\n var parsedGenomicData = this.genomicDataOverlayManager.prepareGenomicDataShareDB(genomicData);\n this.shareDBManager.addGenomicData(parsedGenomicData.genomicDataMap);\n this.shareDBManager.groupGenomicData(Object.keys(parsedGenomicData.visibilityMap),\n groupID);\n this.shareDBManager.addGenomicVisibilityData(parsedGenomicData.visibilityMap);\n }\n else\n {\n this.genomicDataOverlayManager.addGenomicDataLocally(genomicData, groupID);\n }\n }\n\n adjustVisibilityShareDB(profileId: string, isEnabled: boolean){\n const targetProfileIndex = this.profiles.map(profile => profile.profileId).indexOf(profileId);\n this.profiles[targetProfileIndex].enabled = isEnabled; \n }\n\n addToProfiles(profileId: string){\n // Check if this profile already exists\n if(this.profiles.map(profile => profile.profileId).includes(profileId)){\n return;\n }\n\n this.profiles.push({profileId: profileId, enabled: true});\n }\n\n addPortalGenomicData(genomicData: any, groupID: any)\n {\n \n if(this.isCollaborative)\n {\n var parsedGenomicData = this.genomicDataOverlayManager.preparePortalGenomicDataShareDB(genomicData);\n this.shareDBManager.addGenomicData(parsedGenomicData.genomicDataMap);\n this.shareDBManager.groupGenomicData(Object.keys(parsedGenomicData.visibilityMap),\n groupID);\n this.shareDBManager.addGenomicVisibilityData(parsedGenomicData.visibilityMap);\n }\n else\n {\n this.genomicDataOverlayManager.addPortalGenomicData(genomicData, groupID);\n }\n }\n\n shareDBGenomicDataHandler(op: any)\n {\n var isRemove = Object.keys(op)[1] === 'od';\n var newData = op.oi;\n var geneSymbol = op.p[1];\n\n\n if(!isRemove)\n {\n this.genomicDataOverlayManager.addGenomicDataWithGeneSymbol(geneSymbol, newData);\n\n }\n // Removal\n else\n {\n this.genomicDataOverlayManager.removeGenomicDataWithGeneSymbol(geneSymbol);\n }\n }\n\n\n shareDBGenomicDataGroupChangeHandler(op: any)\n {\n\n var isRemove = Object.keys(op)[1] === 'od';\n var data = op.oi;\n var key = op.p[1];\n\n // Addition\n if(!isRemove)\n {\n this.genomicDataOverlayManager.addGenomicGroupData(key, data);\n console.log(\"key\");\n console.log(key);\n console.log(data);\n if(data.length !== 1){\n console.log(\"Grouped genomic data expected to be of length 1\");\n }\n data.forEach((profileId: any) => {this.addToProfiles(profileId)});\n }\n // //Removal\n // else\n // {\n //\n // }\n this.genomicDataOverlayManager.showGenomicData();\n this.genomicDataOverlayManager.notifyObservers();\n }\n\n shareDBGenomicDataVisibilityHandler(op: any)\n {\n var data = op.oi;\n var key = op.p[1];\n var isRemove = Object.keys(op)[1] === 'od';\n // Addition\n if(!isRemove)\n {\n this.genomicDataOverlayManager.addGenomicVisData(key, data);\n\n this.adjustVisibilityShareDB(key, data);\n }\n // Removal\n else\n {\n console.log(\"Removal from vis handler\");\n this.genomicDataOverlayManager.removeGenomicVisData();\n this.profiles.length = 0;\n }\n\n this.genomicDataOverlayManager.showGenomicData();\n this.genomicDataOverlayManager.notifyObservers();\n }\n\n resizeNodesToContent(nodes: any[])\n {\n if(this.isCollaborative)\n {\n const visibleNumberOfData = this.genomicDataOverlayManager.countVisibleGenomicDataByType();\n const labelWithData = 148 + (visibleNumberOfData-3) * 36;\n const rt = this.shareDBManager;\n nodes.forEach(function( ele ){\n if (!ele.isParent())\n {\n var newWidth = 150;\n var newHeight = 52;\n if (ele.data('name') != \"\")\n {\n var labelLength = ele.style('label').length*10 + 6;\n newWidth = labelLength;\n newHeight = 24;\n }\n if (visibleNumberOfData > 0)\n {\n newHeight = 52;\n if (visibleNumberOfData < 4)\n {\n if (150 > newWidth)\n newWidth = 150;\n }\n else\n {\n if (labelWithData > newWidth)\n newWidth = labelWithData;\n }\n }\n rt.setSizeOfElement(ele, newWidth, newHeight);\n }\n else\n {\n //Set the minWidth, minHeight and other properties of compound to 0\n rt.resizeCompound(ele, 0, 0, 0, 0, 0, 0);\n }\n });\n }\n else\n {\n const ur = this.cy.undoRedo();\n const actions: any[] = [];\n\n const visibleNumberOfData = this.genomicDataOverlayManager.countVisibleGenomicDataByType();\n const labelWithData = 150 + (visibleNumberOfData-3) * 36;\n nodes.forEach(function( ele: any){\n if (!ele.isParent())\n {\n let newWidth = 150;\n let newHeight = 52;\n if (ele.data('name') != \"\") {\n var labelLength = ele.style('label').length * 6 + 24;\n newWidth = labelLength;\n newHeight = 24;\n }\n if (visibleNumberOfData > 0) {\n newHeight = 52;\n if (visibleNumberOfData < 4) {\n if (150 > newWidth)\n newWidth = 150;\n }\n else {\n if (labelWithData > newWidth)\n newWidth = labelWithData;\n }\n }\n const args = {\n ele: ele,\n oldWidth: ele.width(),\n newWidth: newWidth,\n oldHeight: ele.height(),\n newHeight: newHeight\n };\n actions.push({name: \"changeNodeSize\", param: args});\n }\n else\n {\n const args = {\n ele: ele,\n oldMinWidth: ele.style(\"min-width\"),\n newMinWidth: 0,\n oldMinWidthBiasLeft: ele.style(\"min-width-bias-left\"),\n newMinWidthBiasLeft: 0,\n oldMinWidthBiasRight: ele.style(\"min-width-bias-right\"),\n newMinWidthBiasRight: 0,\n oldMinHeight: ele.style(\"min-height\"),\n newMinHeight: 0,\n oldMinHeightBiasTop: ele.style(\"min-height-bias-top\"),\n newMinHeightBiasTop: 0,\n oldMinHeightBiasBottom: ele.style(\"min-height-bias-bottom\"),\n newMinHeightBiasBottom: 0\n };\n actions.push({name: \"changeCompoundSize\", param: args});\n }\n });\n\n ur.do(\"batch\", actions);\n }\n this.cy.nodeResize('get').refreshGrapples();\n };\n\n\n\n}\n","import EditorActionsManager from \"../managers/EditorActionsManager\";\nimport $ from \"jquery\";\nimport 'jquery-ui-dist/jquery-ui';\nimport cytoscape from 'cytoscape';\n\n\nexport default class DragDropNodeAddPlugin {\n\n\n\n pathwayHandler: (pathwayName: string) => void;\n\n private cy: any;\n private editor: EditorActionsManager;\n\n constructor(editor: EditorActionsManager, cy: any, pathwayHandler: (pathwayName: string) => void)\n {\n this.editor = editor;\n this.cy = cy;\n this.pathwayHandler = pathwayHandler;\n this.initNodeAdd();\n }\n\n //TODO JQUERY IS IGNORED\n initNodeAdd()\n {\n var nodeAddClass = this;\n var defaults = {\n height: 30, //height of the icon container\n width: 30, //width of the icon container\n padding: 5, //padding of the icon container(from right & top)\n backgroundColorDiv: '#fbfbfb', //background color of the icon container\n borderColorDiv: '#fff', //border color of the icon container\n borderWidthDiv: '0px', //border width of the icon container\n borderRadiusDiv: '5px', //border radius of the icon container\n\n icon: '', //icon class name\n\n nodeParams: function(){\n // return element object to be passed to cy.add() for adding node\n return {};\n }\n };\n\n const self = this;\n\n // @ts-ignore\n $.fn.cytoscapeNodeadd = function(params: any) {\n var options = $.extend(true, {}, defaults, params);\n var fn = params;\n\n var functions = {\n destroy: function() {\n var $this = $(this);\n\n $this.find(\".ui-cytoscape-nodeadd\").remove();\n },\n init: function()\n {\n return $(this).each(function()\n {\n var components = options.components;\n for (const component of components)\n {\n var dragContainer = component.container;\n //var explanationText = component.explanationText;\n\n var $nodeadd = $('
');\n dragContainer.append($nodeadd);\n var $nodeDragHandle = $('
\\\n \\\n \\\n \\\n
');\n $nodeadd.append($nodeDragHandle);\n\n $nodeDragHandle.bind(\"mousedown\", function(e: any)\n {\n e.stopPropagation(); // don't trigger dragging of nodeadd\n e.preventDefault(); // don't cause text selection\n });\n\n //Setup UI\n dragContainer.find(\".ui-cytoscape-nodeadd-nodediv\").css({\n background: options.backgroundColorDiv,\n border: options.borderWidthDiv + ' solid ' + options.borderColorDiv,\n 'border-radius': options.borderRadiusDiv\n });\n\n //Init Draggable\n dragContainer.find(\"#ui-cytoscape-nodeadd-icon\").draggable({\n helper: \"clone\",\n cursor: \"pointer\"\n });\n }\n\n // @ts-ignore TODO: AMENDMENT ATTENTION\n var $container = $(this);\n //Init Droppable\n // @ts-ignore TODO: Droppable is ignored\n $container.droppable({\n activeClass: \"ui-state-highlight\",\n // accept: \"#ui-cytoscape-nodeadd-icon\",\n drop: function(event: any, ui: any) {\n $container.removeClass(\"ui-state-highlight\");\n\n var currentOffset = $container.offset();\n var relX = event.pageX - currentOffset.left;\n var relY = event.pageY - currentOffset.top;\n\n var nodeType = $(ui.helper).attr('nodeType').toUpperCase();\n\n var cy = nodeAddClass.cy;\n\n //Hold a map for parents and candidate parent nodes for this addition\n var nodeMap = {};\n var parentMap = {};\n //Loop through nodes for hit testing about drag position on canvas\n cy.nodes().forEach(function(node: any)\n {\n var nodeBbox = node.renderedBoundingBox();\n //Rectangle point test\n if ( (relX <= nodeBbox.x2 && relX >= nodeBbox.x1) && (relY <= nodeBbox.y2 && relY >= nodeBbox.y1) && node.data().type != 'GENE' )\n {\n //If node has a children put an entry to the parentMap\n if (node.children().length > 0)\n {\n parentMap[node.id()] = true;\n }\n\n //If parent of this node is already added to the node map remove it, since our candidate is in deeper level !\n if (parentMap[node._private.data.parent])\n {\n delete nodeMap[node._private.data.parent];\n }\n\n //Add an entry to node map\n nodeMap[node.id()] = node;\n }\n });\n\n //Check if any parent found, if so set parent field\n var parent = nodeMap[Object.keys(nodeMap)[0]];\n var nodeData = {w: \"0\", h: \"100\", parent: 0, type: nodeType, name:'New '+ $(ui.helper).attr('nodeType')};\n if (parent)\n {\n if(parent.data().type == \"FAMILY\" || parent.data().type == \"COMPLEX\")\n {\n if(nodeType != \"COMPARTMENT\" && nodeType != \"PROCESS\")\n {\n nodeData.parent = parent.id();\n }\n }\n else\n {\n nodeData.parent = parent.id();\n }\n }\n //TODO one place access to these\n nodeData.w = \"150\";\n nodeData.h = \"52\";\n\n //Adjust position according to the zoom level and pan !\n //To set rendered position !!!\n //TODO refactor this !\n relX = relX / cy.zoom() + cy.extent().x1;\n relY = relY / cy.zoom() + cy.extent().y1;\n nodeAddClass.editor.addNode(nodeData,{x: relX,y: relY});\n self.pathwayHandler(\"Additional Pathway\");\n\n }\n });\n\n });\n }\n };\n\n if (functions[fn]) {\n return functions[fn].apply(this, Array.prototype.slice.call(arguments, 1));\n } else if (typeof fn == 'object' || !fn) {\n return functions.init.apply(this, arguments);\n } else {\n $.error(\"No such function `\" + fn + \"` for jquery.cytoscapenodeadd\");\n }\n\n return $(this);\n };\n\n // @ts-ignore\n $.fn.cynodeadd = $.fn.cytoscapeNodeadd;\n try{\n /* Adding as an extension to the core functionality of cytoscape.js*/\n cytoscape('core', 'nodeadd', function(options: any) {\n\n // @ts-ignore\n $(this.container()).cytoscapeNodeadd(options);\n });\n } catch(err){\n console.log(err);\n }\n }\n\n\n\n\n}\n","import EditorActionsManager from \"./EditorActionsManager\";\nimport { EModalType } from \"../ui/react-pathway-mapper\";\n\nexport default class ContextMenuManager {\n private cy: any;\n private editor: EditorActionsManager;\n private isCBioPortal: boolean;\n private handleOpen: (modalId: EModalType) => void;\n private undoRedoManager: any;\n private isCollaborative: any;\n constructor(cy: any, editor: EditorActionsManager, isCBioPortal: boolean,\n handleOpen: (modalId: EModalType) => void, undoRedoManager: any,\n isCollaborative: boolean){\n this.cy = cy;\n this.editor = editor;\n this.isCBioPortal = isCBioPortal;\n this.handleOpen = handleOpen;\n this.undoRedoManager = undoRedoManager;\n this.isCollaborative = isCollaborative;\n this.init();\n }\n\n init() {\n const classRef = this;\n\n const ctxMenus = this.cy.contextMenus();\n\n let menuItems = [\n {\n id: 'deleteSelected', // ID of menu item\n content: 'Delete Selected', // content of menu item\n // Filters the elements to have this menu item on cxttap\n // If the selector is not truthy no elements will have this menu item on cxttap\n coreAsWell: true,\n onClickFunction: (event) => {\n const selectedEles = this.cy.elements(':selected');\n classRef.editor.removeElement(selectedEles);\n },\n disabled: false, // Whether the item will be created as disabled\n hasTrailingDivider: true, // Whether the item will have a trailing divider\n },\n {\n id: 'hideSelected', // ID of menu item\n content: 'Hide Selected', // content of menu item\n // Filters the elements to have this menu item on cxttap\n // If the selector is not truthy no elements will have this menu item on cxttap\n coreAsWell: true,\n onClickFunction: function (event) {\n classRef.editor.hideSelectedNodes();\n },\n disabled: false, // Whether the item will be created as disabled\n hasTrailingDivider: true, // Whether the item will have a trailing divider\n },\n {\n id: 'loadFromCBioPortal', // ID of menu item\n content: 'Load From cBioPortal...', // content of menu item\n // Filters the elements to have this menu item on cxttap\n // If the selector is not truthy no elements will have this menu item on cxttap\n coreAsWell: true,\n onClickFunction: (event) => {\n this.handleOpen(EModalType.STUDY);\n },\n disabled: false, // Whether the item will be created as disabled\n hasTrailingDivider: true, // Whether the item will have a trailing divider\n },\n //Context menu items when clicking on nodes/compounds\n {\n id: 'remove', // ID of menu item\n content: 'Delete', // content of menu item\n // Filters the elements to have this menu item on cxttap\n // If the selector is not truthy no elements will have this menu item on cxttap\n selector: 'node, edge',\n onClickFunction: function (event) {\n var ele = event.target;\n // The function to be executed on click\n var selectedElements = classRef.cy.nodes(':selected').union(ele);\n classRef.editor.removeElement(selectedElements);\n },\n disabled: false, // Whether the item will be created as disabled\n hasTrailingDivider: true, // Whether the item will have a trailing divider\n coreAsWell: false // Whether core instance have this item on cxttap\n },\n {\n id: 'addSelected', // ID of menu item\n content: 'Add Selected Into This', // content of menu item\n // Filters the elements to have this menu item on cxttap\n // If the selector is not truthy no elements will have this menu item on cxttap\n selector: 'node',\n onClickFunction: function (event)\n {\n var ele = event.target;\n var selectedNodes = classRef.cy.nodes(':selected');\n var containerType = ele.data('type');\n var validNodes = classRef.cy.collection();\n\n //Do nothing if node is GENE\n if (ele._private.data['type'] === 'GENE' || selectedNodes.size() < 1) {\n return;\n }\n //Prevent actions like adding root node to children & addition to itself\n else\n {\n var notValid = false;\n selectedNodes.forEach(function (tmpNode, i)\n {\n if (ele.id() == tmpNode.id()) {\n notValid = true;\n return false;\n }\n\n if (tmpNode.isParent()) {\n notValid = classRef.isChildren(tmpNode, ele);\n if (notValid) {\n return false;\n }\n }\n\n return true;\n });\n\n if (notValid) {\n return;\n }\n }\n\n\n selectedNodes.forEach(function (tmpNode, i)\n {\n\n if(containerType == \"FAMILY\" || containerType == \"COMPLEX\")\n {\n if(tmpNode.data('type') != \"COMPARTMENT\" && tmpNode.data('type') != \"PROCESS\")\n {\n validNodes = validNodes.add(tmpNode);\n }\n }\n else\n {\n validNodes = validNodes.add(tmpNode);\n }\n\n });\n\n var compId = ele.id();\n classRef.editor.changeParents(validNodes, compId);\n //Unselecting nodes to remove them from selectedNodeStack\n selectedNodes.unselect();\n\n },\n disabled: false, // Whether the item will be created as disabled\n hasTrailingDivider: true, // Whether the item will have a trailing divider\n coreAsWell: false // Whether core instance have this item on cxttap\n },\n {\n id: 'removeSelected', // ID of menu item\n content: 'Remove Selected From Parent', // content of menu item\n // Filters the elements to have this menu item on cxttap\n // If the selector is not truthy no elements will have this menu item on cxttap\n selector: 'node',\n onClickFunction: function (event) {\n const ele = event.target;\n const selectedNodes = classRef.cy.nodes(':selected');\n\n let notValid = false;\n selectedNodes.forEach(function (tmpNode, i) {\n\n if (tmpNode.isParent()) {\n notValid = classRef.isChildren(tmpNode, ele);\n if (notValid) {\n return false;\n }\n }\n\n return true;\n });\n\n if (notValid) {\n return;\n }\n\n classRef.editor.changeParents(selectedNodes, null);\n //Unselecting nodes to remove them from selectedNodeStack\n selectedNodes.unselect();\n },\n disabled: false, // Whether the item will be created as disabled\n hasTrailingDivider: true, // Whether the item will have a trailing divider\n coreAsWell: false // Whether core instance have this item on cxttap\n },\n {\n id: 'performLayout', // ID of menu item\n content: 'Perform Layout', // content of menu item\n // Filters the elements to have this menu item on cxttap\n // If the selector is not truthy no elements will have this menu item on cxttap\n coreAsWell: true,\n onClickFunction: (event) => {\n this.editor.performLayout();\n },\n disabled: false, // Whether the item will be created as disabled\n hasTrailingDivider: true, // Whether the item will have a trailing divider\n }\n\n ];\n let nonCollabItems = [ \n //Context menu items when clicking on blank space\n {\n id: 'undoAction', // ID of menu item\n content: 'Undo', // content of menu item\n // Filters the elements to have this menu item on cxttap\n // If the selector is not truthy no elements will have this menu item on cxttap\n coreAsWell: true,\n onClickFunction: (event) => {\n this.undoRedoManager.undo();\n },\n disabled: false, // Whether the item will be created as disabled\n hasTrailingDivider: true, // Whether the item will have a trailing divider\n },\n {\n id: 'redoAction', // ID of menu item\n content: 'Redo', // content of menu item\n // Filters the elements to have this menu item on cxttap\n // If the selector is not truthy no elements will have this menu item on cxttap\n coreAsWell: true,\n onClickFunction: (event) => {\n this.undoRedoManager.redo();\n },\n disabled: false, // Whether the item will be created as disabled\n hasTrailingDivider: true, // Whether the item will have a trailing divider\n }\n ];\n\n if(!this.isCollaborative){\n menuItems = menuItems.concat(nonCollabItems);\n }\n ctxMenus.appendMenuItems(menuItems);\n }\n\n\n //TODO ??????\n //window.edgeAddingMode = false;\n\n //TODO better move this to another class\n //Utility function to check whether query node is children of given node\n isChildren(node, queryNode)\n {\n var parent = queryNode.parent()[0];\n while(parent)\n {\n if (parent.id() == node.id()) {\n return true;\n }\n parent = parent.parent()[0];\n }\n return false;\n }\n}\n","import EditorActionsManager from \"./EditorActionsManager\";\nimport $ from 'jquery';\nexport default class QtipManager{\n private cy: any;\n private editor: any;\n constructor(cy: any, editor: EditorActionsManager)\n {\n this.cy = cy;\n this.editor = editor;\n }\n\n generateEdgeQtipContentHTML(edge)\n {\n var self = this;\n var textInput = $('
');\n var pubmedIDList = $('
');\n var pubmedURL = 'https://www.ncbi.nlm.nih.gov/pubmed/';\n var pubmedData = edge.data('pubmedIDs');\n console.log(\"edge.data('pubmedIDs')\");\n console.log(edge.data('pubmedIDs'));\n var edgeLabelInput = $('
');\n\n function generatePubmedLinks(argData, isInitialDisplay)\n {\n console.log(argData);\n console.log(self.cy.edges());\n for (var key in argData)\n {\n if(!argData.hasOwnProperty(key)){\n continue;\n }\n var pubmedID = argData[key];\n\n if (isNaN(pubmedID))\n continue;\n\n const pubmedIDRemoveButton = $(\"\");\n pubmedIDRemoveButton.on('click', function(event)\n {\n $(event.target).parent().remove();\n var edge = self.cy.$('#'+$(event.target).attr('edgeId'));\n var pubmedId = [$(event.target).parent().find('a').text()];\n self.editor.removePubmedID(edge, pubmedId);\n if($('.pubmedIDList').children().length < 3)\n {\n $('.pubmedIDList').children().remove();\n }\n });\n\n const pubmedContent = $(\"
\\\n \\\n
\");\n pubmedContent.first().append(pubmedIDRemoveButton);\n pubmedIDList.append(pubmedContent);\n }\n }\n\n function generatePubmedLinksHeader()\n {\n pubmedIDList.append($('
'));\n pubmedIDList.append($(''));\n }\n\n if (pubmedData.length > 0)\n {\n generatePubmedLinksHeader();\n generatePubmedLinks(pubmedData, true);\n }\n\n textInput.change(function()\n {\n var edgeID = $(this).find('input').attr('edgeid');\n const val: string = $(this).find('input').val() as string;\n var pumbedIDs = val.split(';');\n $(this).find('input').val(\"\");\n\n if($('.pubmedIDList').children().length === 0)\n {\n generatePubmedLinksHeader();\n }\n\n self.editor.addPubmedIDs(edge, pumbedIDs);\n\n generatePubmedLinks(pumbedIDs, false);\n\n });\n\n edgeLabelInput.change(function()\n {\n var edgeID = $(this).find('input').attr('edgeid');\n\n var cyEdge = self.cy.$('#'+edgeID)[0];\n var newName = $(this).find('input').val();\n $(this).find('input').val(\"\");\n\n //TODO call associated Editor Actions Manager function\n self.editor.changeName(cyEdge, newName);\n });\n\n var wrapper = $('
');\n var pubmedRow = $('
\\\n
Add PubmedID(s):
\\\n
');\n\n pubmedRow.append(textInput);\n var labelRow = $('
\\\n
Label:
\\\n
');\n\n labelRow.append(edgeLabelInput);\n wrapper.append(labelRow);\n wrapper.append('
');\n pubmedRow.append(textInput);\n wrapper.append(pubmedRow);\n wrapper.append(pubmedIDList);\n return wrapper;\n }\n\n generateNodeQtipContentHTML(ele)\n {\n const self = this;\n const nodeData = ele.data();\n const textInput = $('
');\n textInput.change(function()\n {\n const nodeID = $(this).find('input').attr('nodeid');\n\n const cyNode = self.cy.$('#'+nodeID)[0];\n const newName = $(this).find('input').val();\n self.editor.changeName(cyNode, newName);\n });\n\n var wrapper = $('
');\n var row = $('
\\\n
Name:
\\\n
');\n\n row.append(textInput);\n wrapper.append(row);\n\n if (ele.data().type === \"GENE\")\n {\n var entrezGeneButton = $('
');\n entrezGeneButton.find('button').on('click', function(event)\n {\n event.preventDefault();\n var nodeID = $(this).attr('nodeid');\n var nodeSymbol = self.cy.$('#'+nodeID)[0]._private.data['name'];\n var parent = $(this).parent();\n window.open('https://www.mycancergenome.org/content/gene/' + nodeSymbol);\n\n\n });\n wrapper.append(entrezGeneButton);\n }\n\n return wrapper;\n }\n\n addQtipToElements(eles)\n {\n var self = this;\n eles.forEach(function(ele,i)\n {\n var qTipOpts = {};\n if (ele.isNode())\n {\n qTipOpts =\n {\n content:\n {\n text: function()\n {\n return self.generateNodeQtipContentHTML(this);\n },\n title: function()\n {\n return ele.data().type.toUpperCase() + ' DETAILS';\n }\n },\n position: {\n my: 'top center',\n at: 'bottom center'\n },\n style:\n {\n classes: 'qtip-tipsy qtip-rounded',\n width: 400\n } ,\n show:{\n event :\"showqtipevent\"\n } \n };\n\n }\n else if(ele.isEdge())\n {\n qTipOpts =\n {\n content:\n {\n text: function()\n {\n return self.generateEdgeQtipContentHTML(this);\n },\n title: function()\n {\n return 'INTERACTION DETAILS';\n }\n },\n position: {\n my: 'top center',\n at: 'bottom center'\n },\n style:\n {\n classes: 'qtip-tipsy qtip-rounded',\n width: 400\n } ,\n show:{\n event :\"showqtipevent\"\n } \n };\n }\n ele.qtip(qTipOpts);\n });\n }\n\n\n //Utility Functions\n capitalizeFirstLetter(string)\n {\n return string.charAt(0).toUpperCase() + string.slice(1);\n }\n\n\n}\n","import EditorActionsManager from \"./EditorActionsManager\";\nimport _ from \"underscore\";\nimport GraphUtilities from \"../utils/GraphUtilities\";\n\nlet sharedb;\nlet socket;\nlet connection;\n\nexport default class ShareDBManager {\n\n readonly NODEMAP_NAME = 'nodes';\n readonly EDGEMAP_NAME = 'edges';\n readonly LAYOUT_PROPS_NAME = 'layoutProperties';\n readonly GLOBAL_OPTS_NAME = 'globalOptions';\n //For storing genomic data information per gene\n readonly GENOMIC_DATA_MAP_NAME = 'genomicDataMap';\n //For storing visibility information of genomic data according to the cancer type\n readonly VISIBLE_GENOMIC_DATA_MAP_NAME = 'visibleGenomicDataMapByType';\n readonly GENOMIC_DATA_GROUP_NAME = 'genomicDataGroupList';\n readonly GENOMIC_DATA_GROUP_COUNT = 'genomicDataGroupCount';\n \n graphUtilities: GraphUtilities;\n doc: any;\n postFileLoad: any;\n editor: EditorActionsManager;\n constructor(postFileLoadCallback) {\n //Doc data maps names and keys\n this.postFileLoad = postFileLoadCallback;\n this.graphUtilities = new GraphUtilities();\n };\n\n\n\n getDoc(){\n return this.doc;\n }\n\n setEditor(editor: EditorActionsManager){\n this.editor = editor;\n }\n\n //Applies any given sharDB opeation to shared document and notifies other clients\n applyShareDBOperation(op) {\n this.doc.submitOp(op, this.shareDBError);\n };\n\n //Clears genomic data in shared document and notifies other clients\n clearShareDBGenomicData() {\n var ops = [];\n var genomicMap = this.doc.data[this.GENOMIC_DATA_MAP_NAME];\n var visMap = this.doc.data[this.VISIBLE_GENOMIC_DATA_MAP_NAME];\n var genomicDataGroupMap = this.doc.data[this.GENOMIC_DATA_GROUP_NAME];\n var genomicDataGroupCount = this.doc.data[this.GENOMIC_DATA_GROUP_COUNT];\n //Reset all genomic maps\n for (const key of Object.keys(genomicMap)) {\n ops.push({p: [this.GENOMIC_DATA_GROUP_NAME, key], od: genomicMap[key]});\n }\n for (const key of Object.keys(visMap)) {\n ops.push({p: [this.VISIBLE_GENOMIC_DATA_MAP_NAME, key], od: visMap[key]});\n }\n for (const key of Object.keys(genomicDataGroupMap)) {\n ops.push({p: [this.GENOMIC_DATA_GROUP_NAME, key], od: genomicDataGroupMap[key]});\n }\n //Reset genomic data group count to 0\n ops.push({p: [this.GENOMIC_DATA_GROUP_COUNT], na: -genomicDataGroupCount});\n this.doc.submitOp(ops, this.shareDBError);\n };\n\n /*\n * Updates shared document object\n * @param mapName: map name of the object\n * @param objectKey: key of the object\n * @param object: new object\n *\n */\n updateShareDBObject(mapName, objectKey, object) {\n this.doc.submitOp([{\n p: [mapName, objectKey],\n od: this.doc.data[mapName][objectKey],\n oi: object\n }], this.shareDBError);\n };\n\n /*\n * Inserts a new shared document object\n * @param mapName: map name of the object\n * @param objectKey: key of the object\n * @param object: new object\n *\n */\n insertShareDBObject(mapName, objectKey, object) {\n this.doc.submitOp([{p: [mapName, objectKey], oi: object}], this.shareDBError);\n console.log(\"this.doc\");\n console.log(this.doc); \n console.log(mapName, objectKey, object);\n };\n\n /*\n * Deletes a shared document object\n * @param mapName: map name of the object\n * @param objectKey: key of the object\n *\n */\n deleteShareDBObject(mapName, objectKey) {\n this.doc.submitOp([{p: [mapName, objectKey], od: this.doc.data[mapName][objectKey]}], this.shareDBError);\n };\n\n //Initializes layout properties of the shared document\n initializeShareDBLayoutProperties() {\n this.doc.submitOp([{\n p: [this.LAYOUT_PROPS_NAME, 0],\n li: [this.editor.layoutProperties]\n }], this.shareDBError);\n };\n\n //Initializes global options of the shared document\n initializeShareDBGlobalOptions() {\n this.doc.submitOp([{\n p: [this.GLOBAL_OPTS_NAME, 0],\n li: [this.editor.getGlobalOptions()]\n }], this.shareDBError);\n };\n\n /*\n * Updates layout properties of the shared document and notifies other clients\n * @param object: new layout properties object\n *\n */\n updateShareDBLayoutProperties(object) {\n this.doc.submitOp([{\n p: [this.LAYOUT_PROPS_NAME, 0],\n ld: this.doc.data[this.LAYOUT_PROPS_NAME][0],\n li: object\n }], this.shareDBError);\n };\n\n /*\n * Updates global options of the shared document and notifies other clients\n * @param object: new global options object\n *\n */\n updateShareDBGlobalOptions(object) {\n this.doc.submitOp([{\n p: [this.GLOBAL_OPTS_NAME, 0],\n ld: this.doc.data[this.GLOBAL_OPTS_NAME][0],\n li: object\n }], this.shareDBError);\n };\n\n //Increments shared data group count\n //Use this function to increment and keep the group count synchronized\n incrementShareDBGroupCount() {\n this.doc.submitOp([{p: [this.GENOMIC_DATA_GROUP_COUNT], na: 1}], this.shareDBError);\n };\n\n //Checks whether given operation is a replace or add/delete operation\n isShareDBReplaceEvent(op) {\n return (op.hasOwnProperty(\"oi\") && op.hasOwnProperty(\"od\"))\n || (op.hasOwnProperty(\"li\") && op.hasOwnProperty(\"ld\"));\n };\n\n /*\n * Gets the initial value of the shared document\n * without this function shared document values cannot be reached\n */\n initializeSharedDBDoc() {\n this.doc.subscribe();\n };\n\n shareDBError(err) {\n if (err) {\n console.error(err);\n }\n };\n\n initShareDB() {\n sharedb = require('sharedb/lib/client');\n socket = new WebSocket('ws://' + window.location.host);\n connection = new sharedb.Connection(socket);\n\n var self = this;\n\n var id = this.getParam('id');\n\n var loadFileCallback = function () {\n self.onFileLoaded();\n };\n\n //Creates new shared db document and initializes values\n var createNewDocument = () => {\n var new_id = self.getCustomObjId();\n var data = {\n nodes: {},\n edges: {},\n layoutProperties: [this.editor.layoutProperties],\n globalOptions: [this.editor.getGlobalOptions()],\n genomicDataMap: {},\n visibleGenomicDataMapByType: {},\n genomicDataGroupList: {},\n genomicDataGroupCount: 0\n };\n window.history.pushState(null, null, '?id=' + new_id);\n self.doc = connection.get('cy', new_id);\n self.doc.create(data, loadFileCallback);\n };\n\n //Check if id exists in parameters\n //If exists open the shared document\n if (id) {\n // Check any document exists with given id\n this.doc = connection.get('cy', id);\n this.doc.fetch(function (err) {\n if (err)\n throw err;\n\n if (self.doc.type === null) {\n createNewDocument();\n return;\n }\n self.doc.subscribe(loadFileCallback);\n });\n }\n else {\n //Create new shared document\n createNewDocument();\n }\n\n console.log(\"this.doc\");\n console.log(this.doc);\n };\n\n /*\n * After a file has been initialized and loaded, we can access the\n * document. We will wire up the data in shared document to the UI.\n *\n */\n onFileLoaded() {\n this.initializeSharedDBDoc();\n this.syncInitialSharedDocData();\n this.initSharedDocEventHandlers();\n\n this.postFileLoad();\n };\n\n /*\n * Synchronizes initial data in the shared document to\n * client's application.\n */\n syncInitialSharedDocData() {\n var self = this;\n var nodeMap = self.doc.data[this.NODEMAP_NAME];\n var edgeMap = self.doc.data[this.EDGEMAP_NAME];\n var shareDBLayoutProperties = self.doc.data[this.LAYOUT_PROPS_NAME][0];\n var globalOptions = self.doc.data[this.GLOBAL_OPTS_NAME][0];\n var genomicDataMap = self.doc.data[this.GENOMIC_DATA_MAP_NAME];\n var visDataMap = self.doc.data[this.VISIBLE_GENOMIC_DATA_MAP_NAME];\n var groupedGenomicDataMap = self.doc.data[this.GENOMIC_DATA_GROUP_NAME];\n var groupedGenomicDataCount = self.doc.data[this.GENOMIC_DATA_GROUP_COUNT];\n\n\n var invalidGenes = [];\n var highlightedGenes = [];\n var invalidHighlightedGenes = [];\n var hiddenGenes = [];\n for (const key of Object.keys(nodeMap)) {\n var tmpNode = nodeMap[key];\n var tmpNodeId = tmpNode.id;\n\n if (tmpNode.isInvalidGene && tmpNode.isHighlighted) {\n invalidHighlightedGenes.push(tmpNodeId);\n }\n else if (tmpNode.isInvalidGene) {\n invalidGenes.push(tmpNodeId);\n }\n else if (tmpNode.isHighlighted) {\n highlightedGenes.push(tmpNodeId);\n }\n if (tmpNode.isHidden) {\n hiddenGenes.push(tmpNodeId);\n }\n }\n var highlightedEdges = [];\n for (const key of Object.keys(edgeMap)) {\n var tmpEdge = edgeMap[key];\n var tmpEdgeId = tmpEdge.id;\n if (tmpEdge.isHighlighted) {\n highlightedEdges.push(tmpEdgeId);\n }\n }\n\n //TODO Workaround for legacy pathways\n\n // Workaround for backward compatibility of legacy pathways\n // Addition of pubmed id field on server if legacy collaborative\n // pathways does not have !\n for (const key of Object.keys(edgeMap)) {\n var tmpEdge = edgeMap[key];\n\n if (tmpEdge.pubmedIDs == undefined || tmpEdge.name == undefined || tmpEdge.bendPoint == undefined) {\n var pubmedIDs = (tmpEdge.pubmedIDs == undefined) ? [] : tmpEdge.pubmedID;\n var edgeLabel = (tmpEdge.name == undefined) ? \"\" : tmpEdge.name;\n var bendPoint = (tmpEdge.bendPoint == undefined) ? [] : tmpEdge.bendPoint;\n\n var param = {\n type: tmpEdge.type,\n source: tmpEdge.source,\n id: self.getCustomObjId(),\n target: tmpEdge.target,\n pubmedID: pubmedIDs,\n name: edgeLabel,\n bendPoint: bendPoint\n };\n\n var newEdge: any = self.edgeInitializer(param);\n\n\n var tmpEdgeID = tmpEdge.id;\n var newEdgeID = newEdge.id;\n\n var ops = [\n {p: [self.EDGEMAP_NAME, tmpEdgeID], od: tmpEdge},\n {p: [self.EDGEMAP_NAME, newEdgeID], oi: newEdge}\n ]\n self.applyShareDBOperation(ops);\n }\n\n }\n\n //Add real time nodes to local graph\n this.editor.addNewElementsLocally(nodeMap, edgeMap);\n //Adds different type of highlight to nodes and hides if their property is hidden\n this.editor.highlightElementsInitially(invalidHighlightedGenes, invalidGenes, highlightedGenes, highlightedEdges, hiddenGenes);\n\n //Update layout properties & global options!!\n this.editor.updateLayoutPropertiesCallback({li: shareDBLayoutProperties});\n this.editor.changeGlobalOptions({li: globalOptions});\n\n //Sync already available genomic data !\n\n if (!groupedGenomicDataMap) {\n\n self.insertShareDBObject(self.GENOMIC_DATA_MAP_NAME, '0', []);\n for (const key of Object.keys(visDataMap)) {\n var currentMap = _.clone(groupedGenomicDataMap['0']);\n // currentMap.push(visibilityMapKeys[key]);\n self.updateShareDBObject(self.GENOMIC_DATA_MAP_NAME, '0', currentMap);\n }\n }\n\n if (!groupedGenomicDataCount) {\n var count = self.doc.data[self.GENOMIC_DATA_GROUP_COUNT];\n var op = [{\n p: [self.GENOMIC_DATA_GROUP_COUNT],\n na: -count\n }];\n self.applyShareDBOperation(op);\n groupedGenomicDataCount = self.doc.data[self.GENOMIC_DATA_GROUP_COUNT];\n }\n\n\n for (const key_g of Object.keys(genomicDataMap)) {\n this.editor.genomicDataOverlayManager.genomicDataMap[key_g] =\n genomicDataMap[key_g];\n\n }\n\n console.log(\"visDataMap\");\n console.log(visDataMap);\n\n for (const key_g of Object.keys(groupedGenomicDataMap)) {\n this.editor.genomicDataOverlayManager.groupedGenomicDataMap[key_g] =\n groupedGenomicDataMap[key_g];\n const data = groupedGenomicDataMap[key_g];\n if(data.length !== 1){\n console.log(\"Grouped genomic data expected to be of length 1 (from sync)\");\n }\n data.forEach((profileId: any) => {this.editor.addToProfiles(profileId)});\n }\n\n for (const key_g of Object.keys(visDataMap)) {\n this.editor.genomicDataOverlayManager.visibleGenomicDataMapByType[key_g] =\n visDataMap[key_g];\n this.editor.adjustVisibilityShareDB(key_g, visDataMap[key_g]);\n \n }\n\n //Does not seem necessary for not but just for sake of completeness\n this.editor.genomicDataOverlayManager.groupedGenomicDataCount = groupedGenomicDataCount;\n\n this.editor.genomicDataOverlayManager.showGenomicData();\n this.editor.genomicDataOverlayManager.notifyObservers();\n this.editor.cy.fit(50);\n };\n\n /*\n * Initialize event listeners for any operation coming from shareDB\n *\n */\n initSharedDocEventHandlers () {\n\n var self = this;\n\n //Setup event handlers for maps\n var nodeAddRemoveHandler = function (op) {\n self.editor.shareDBNodeAddRemoveEventCallBack(op);\n };\n\n var edgeAddRemoveHandler = function (op) {\n self.editor.shareDBEdgeAddRemoveEventCallBack(op);\n };\n\n var genomicDataAddRemoveHandler = function (op) {\n self.editor.shareDBGenomicDataHandler(op);\n };\n\n var genomicDataVisibilityChangeHandler = function (op) {\n self.editor.shareDBGenomicDataVisibilityHandler(op);\n self.checkShareDBGenomicData();\n };\n\n var genomicDataGroupChangeHandler = function (op) {\n self.editor.shareDBGenomicDataGroupChangeHandler(op);\n };\n\n var updateElementHandler = function (op) {\n self.editor.updateElementCallback(op);\n };\n\n var updateLayoutPropsHandler = function (op) {\n self.editor.updateLayoutPropertiesCallback(op);\n };\n\n var updateGlobalOptionsHandler = function (op) {\n self.editor.changeGlobalOptions(op);\n };\n\n\n //Event listeners for maps\n this.doc.on('op', function (op, source) {\n for (var i = 0; i < op.length; i++) {\n var handleOp = op[i];\n var path = handleOp.p[0];\n var isReplaceEvent = self.isShareDBReplaceEvent(handleOp);\n\n if (!isReplaceEvent) {\n if (path === self.NODEMAP_NAME) {\n nodeAddRemoveHandler(handleOp);\n }\n else if (path === self.EDGEMAP_NAME) {\n edgeAddRemoveHandler(handleOp);\n }\n else if (path === self.GENOMIC_DATA_MAP_NAME) {\n genomicDataAddRemoveHandler(handleOp);\n }\n else if (path === self.VISIBLE_GENOMIC_DATA_MAP_NAME) {\n genomicDataVisibilityChangeHandler(handleOp);\n }\n else if (path === self.GENOMIC_DATA_GROUP_NAME) {\n genomicDataGroupChangeHandler(handleOp);\n }\n }\n else { //Then it is update event\n if (path === self.NODEMAP_NAME) {\n updateElementHandler(handleOp);\n }\n else if (path === self.EDGEMAP_NAME) {\n updateElementHandler(handleOp);\n }\n else if (path === self.LAYOUT_PROPS_NAME) {\n updateLayoutPropsHandler(handleOp);\n }\n else if (path === self.GLOBAL_OPTS_NAME) {\n updateGlobalOptionsHandler(handleOp);\n }\n }\n }\n });\n };\n\n /*\n * Make sure that genomic cloud data is syncronized\n */\n checkShareDBGenomicData () {\n\n var self = this;\n var genomicDataMap = self.doc.data[this.GENOMIC_DATA_MAP_NAME];\n var visDataMap = self.doc.data[this.VISIBLE_GENOMIC_DATA_MAP_NAME];\n var groupedGenomicDataMap = self.doc.data[this.GENOMIC_DATA_GROUP_NAME];\n var groupedGenomicDataCount = self.doc.data[this.GENOMIC_DATA_GROUP_COUNT];\n\n for (var key in genomicDataMap) {\n this.editor.genomicDataOverlayManager.genomicDataMap[key] =\n genomicDataMap[key];\n }\n\n for (var key in visDataMap) {\n this.editor.genomicDataOverlayManager.visibleGenomicDataMapByType[key] =\n visDataMap[key];\n }\n\n for (var key in groupedGenomicDataMap) {\n this.editor.genomicDataOverlayManager.groupedGenomicDataMap[key] =\n groupedGenomicDataMap[key];\n }\n this.editor.genomicDataOverlayManager.groupedGenomicDataCount = groupedGenomicDataCount;\n this.editor.genomicDataOverlayManager.showGenomicData();\n this.editor.genomicDataOverlayManager.notifyObservers();\n };\n \n /*\n * Gets the first empty index from the shared document\n * genomic data group count and increments counter by 1\n *\n */\n\n getEmptyGroupID() {\n var returnCount = this.doc.data[this.GENOMIC_DATA_GROUP_COUNT];\n this.incrementShareDBGroupCount();\n return returnCount;\n };\n\n /*\n * Gets the first empty index from the shared document\n * Initializes & inserts a new genomic data\n * by group id or group name\n *\n */\n groupGenomicData(cancerNames, inGroupId) {\n var genomicGroupMap = this.doc.data[this.GENOMIC_DATA_GROUP_NAME];\n var genomicVisMap = this.doc.data[this.VISIBLE_GENOMIC_DATA_MAP_NAME];\n\n var groupID = \"\" + inGroupId;\n var currentGroup = [];\n\n if (genomicGroupMap.hasOwnProperty(groupID))\n currentGroup = _.clone(genomicGroupMap[groupID]);\n\n for (var i in cancerNames) {\n if (!genomicVisMap.hasOwnProperty(cancerNames[i]))\n currentGroup.push(cancerNames[i]);\n }\n\n // If group id already exists change existing object\n if (genomicGroupMap.hasOwnProperty(groupID)) {\n this.updateShareDBObject(this.GENOMIC_DATA_GROUP_NAME, groupID, currentGroup);\n }\n else {\n //Insert new group\n this.insertShareDBObject(this.GENOMIC_DATA_GROUP_NAME, groupID, currentGroup);\n }\n\n };\n\n //Clears genomic data on shared document\n clearGenomicData() {\n this.clearShareDBGenomicData();\n };\n\n addGenomicData(geneData) {\n var genomicMap = this.doc.data[this.GENOMIC_DATA_MAP_NAME];\n\n //Iterate over all genmoic data which is mapped by geneSymbol to list of alteration values\n //that are also mapped by cancer name and associated value\n var ops = [];\n for (var geneSymbol in geneData) {\n var genomicMapEntry = {};\n if (genomicMap.hasOwnProperty(geneSymbol))\n genomicMapEntry = _.clone(genomicMap[geneSymbol]);\n\n for (var cancerType in geneData[geneSymbol]) {\n if (!(cancerType in genomicMapEntry))\n genomicMapEntry[cancerType] = parseInt(geneData[geneSymbol][cancerType]).toFixed(2);\n }\n ops.push({\n p: [this.GENOMIC_DATA_MAP_NAME, geneSymbol],\n oi: genomicMapEntry\n });\n }\n this.applyShareDBOperation(ops);\n };\n\n addGenomicVisibilityData(visMap) {\n var ops = [];\n for (var cancerStudy in visMap) {\n ops.push({\n p: [this.VISIBLE_GENOMIC_DATA_MAP_NAME, cancerStudy],\n oi: visMap[cancerStudy]\n });\n }\n this.applyShareDBOperation(ops);\n };\n\n changeVisibility(nodesToHide, isHidden) {\n var self = this;\n var nodeMap = self.doc.data[this.NODEMAP_NAME];\n\n nodesToHide.forEach(function (ele) {\n var nodeID = ele.id();\n if (nodeMap.hasOwnProperty(nodeID)) {\n var realTimeNode = nodeMap[nodeID];\n realTimeNode.isHidden = isHidden;\n self.updateShareDBObject(self.NODEMAP_NAME, nodeID, realTimeNode);\n }\n });\n };\n\n changeHighlight(elementsToHighlight, isHighlighted) {\n var self = this;\n var nodeMap = self.doc.data[this.NODEMAP_NAME];\n var edgeMap = self.doc.data[this.EDGEMAP_NAME];\n\n elementsToHighlight.forEach(function (ele) {\n var elementID = ele.id();\n if (nodeMap.hasOwnProperty(elementID)) {\n var realTimeNode = nodeMap[elementID];\n realTimeNode.isHighlighted = isHighlighted;\n self.updateShareDBObject(self.NODEMAP_NAME, elementID, realTimeNode);\n }\n if (edgeMap.hasOwnProperty(elementID)) {\n var realTimeEdge = edgeMap[elementID];\n realTimeEdge.isHighlighted = isHighlighted;\n self.updateShareDBObject(self.EDGEMAP_NAME, elementID, realTimeEdge);\n }\n });\n };\n\n addNewNode(nodeData, posData) {\n var realTimeGeneratedID = this.getCustomObjId();\n var params = {\n name: nodeData.name,\n type: nodeData.type,\n id: realTimeGeneratedID,\n parent: nodeData.parent,\n w: nodeData.w,\n h: nodeData.h,\n minWidth: nodeData.minWidth,\n minWidthBiasLeft: nodeData.minWidthBiasLeft,\n minWidthBiasRight: nodeData.minWidthBiasRight,\n minHeight: nodeData.minHeight,\n minHeightBiasTop: nodeData.minHeightBiasTop,\n minHeightBiasBottom: nodeData.minHeightBiasBottom\n };\n\n //Ensures new node is compatible with the other nodes\n var newNode = this.nodeInitializer(params);\n if (posData) {\n newNode.x = posData.x;\n newNode.y = posData.y;\n }\n this.insertShareDBObject(this.NODEMAP_NAME, realTimeGeneratedID, newNode);\n };\n\n addNewEdge(edgeData) {\n var realTimeGeneratedID = this.getCustomObjId();\n var params = {\n type: edgeData.type,\n id: realTimeGeneratedID,\n source: edgeData.source,\n target: edgeData.target,\n pubmedIDs: edgeData.pubmedIDs,\n name: edgeData.name,\n bendPoint: edgeData.bendPoint\n };\n\n //Ensures new edge is compatible with the other edge\n var newEdge = this.edgeInitializer(params);\n this.insertShareDBObject(this.EDGEMAP_NAME, realTimeGeneratedID, newEdge);\n };\n\n reconnectEdge = function(sourceID, targetID, edgeData) {\n var edgeMap = this.doc.data[this.EDGEMAP_NAME];\n var edge = edgeMap[edgeData.id];\n var edgeID = edge.id;\n\n edge.source = sourceID;\n edge.target = targetID;\n\n if(edgeMap.hasOwnProperty(edgeID)) {\n this.updateShareDBObject(this.EDGEMAP_NAME, edgeID, edge);\n }\n else {\n throw new Error('Element does not exist in Real Time');\n }\n };\n\n\n removeElement (elementID) {\n var edgeMap = this.doc.data[this.EDGEMAP_NAME];\n var nodeMap = this.doc.data[this.NODEMAP_NAME];\n\n if (nodeMap.hasOwnProperty(elementID)) {\n this.deleteShareDBObject(this.NODEMAP_NAME, elementID);\n }\n else if (edgeMap.hasOwnProperty(elementID)) {\n this.deleteShareDBObject(this.EDGEMAP_NAME, elementID);\n }\n else {\n throw new Error('Element does not exist in Real Time');\n }\n };\n\n moveElement (ele) {\n var nodeMap = this.doc.data[this.NODEMAP_NAME];\n\n var elementID = ele.id();\n var newPos = ele.position();\n\n if (nodeMap.hasOwnProperty(elementID)) {\n var tmpNode = nodeMap[elementID];\n tmpNode.x = newPos.x;\n tmpNode.y = newPos.y;\n this.updateShareDBObject(this.NODEMAP_NAME, elementID, tmpNode);\n }\n else {\n throw new Error('Element does not exist in nodes !!! ');\n }\n };\n\n //This function is used for movements of all selected elements wrt alignment selected\n changeElementsPositionByAlignment (coll) {\n var self = this;\n var nodeMap = self.doc.data[this.NODEMAP_NAME];\n\n coll.forEach(function (ele) {\n var elementID = ele.node.id();\n if (nodeMap.hasOwnProperty(elementID)) {\n var tmpNode = nodeMap[elementID];\n tmpNode.x = ele.nextPosition.x;\n tmpNode.y = ele.nextPosition.y;\n self.updateShareDBObject(self.NODEMAP_NAME, elementID, tmpNode);\n }\n else {\n throw new Error('Element does not exist in nodes !!! ');\n }\n });\n };\n\n resizeElement (ele, previousWidth, previousHeight) {\n var nodeMap = this.doc.data[this.NODEMAP_NAME];\n\n var elementID = ele.id();\n var newWidth = ele.width();\n var newHeight = ele.height();\n var currentX = ele.position('x');\n var currentY = ele.position('y');\n\n if (nodeMap.hasOwnProperty(elementID)) {\n var tmpNode = nodeMap[elementID];\n tmpNode.x = currentX + newWidth - previousWidth;\n tmpNode.y = currentY + newHeight - previousHeight;\n tmpNode.w = newWidth;\n tmpNode.h = newHeight;\n this.updateShareDBObject(this.NODEMAP_NAME, elementID, tmpNode);\n }\n else {\n throw new Error('Element does not exist in nodes !!! ');\n }\n };\n\n setSizeOfElement (ele, newWidth, newHeight) {\n var nodeMap = this.doc.data[this.NODEMAP_NAME];\n\n var elementID = ele.id();\n\n if (nodeMap.hasOwnProperty(elementID)) {\n var tmpNode = nodeMap[elementID];\n tmpNode.w = newWidth;\n tmpNode.h = newHeight;\n this.updateShareDBObject(this.NODEMAP_NAME, elementID, tmpNode);\n }\n else {\n throw new Error('Element does not exist in nodes !!! ');\n }\n };\n\n resizeCompound (ele, minWidth, minWidthBiasLeft, minWidthBiasRight, minHeight, minHeightBiasTop, minHeightBiasBottom) {\n var nodeMap = this.doc.data[this.NODEMAP_NAME];\n\n var elementID = ele.id();\n var currentX = ele.position('x');\n var currentY = ele.position('y');\n\n if (nodeMap.hasOwnProperty(elementID)) {\n var tmpNode = nodeMap[elementID];\n tmpNode.x = currentX;\n tmpNode.y = currentY;\n tmpNode.minWidth = minWidth;\n tmpNode.minWidthBiasLeft = minWidthBiasLeft;\n tmpNode.minWidthBiasRight = minWidthBiasRight;\n tmpNode.minHeight = minHeight;\n tmpNode.minHeightBiasTop = minHeightBiasTop;\n tmpNode.minHeightBiasBottom = minHeightBiasBottom;\n this.updateShareDBObject(this.NODEMAP_NAME, elementID, tmpNode);\n }\n else {\n throw new Error('Element does not exist in nodes !!! ');\n }\n };\n\n changeNodePositionsShareDB (nodes) {\n var self = this;\n var nodeMap = self.doc.data[self.NODEMAP_NAME];\n\n nodes.forEach(function (ele) {\n var nodeID = ele.id();\n if (nodeMap.hasOwnProperty(nodeID)) {\n var realTimeNode = nodeMap[nodeID];\n realTimeNode.x = ele.position('x');\n realTimeNode.y = ele.position('y');\n self.updateShareDBObject(self\n .NODEMAP_NAME, nodeID, realTimeNode);\n }\n else {\n throw new Error('Element does not exist in nodes !!! ');\n }\n });\n };\n\n changeHighlightInvalidGenes (nodeIDs, isInvalid) {\n var nodeMap = this.doc.data[this.NODEMAP_NAME];\n\n //TODO check compound operation inside or outside of for ?\n for (var i in nodeIDs) {\n var nodeID = nodeIDs[i];\n if (nodeMap.hasOwnProperty(nodeID)) {\n var collaborativeNode = nodeMap[nodeID];\n collaborativeNode.isInvalidGene = isInvalid;\n this.updateShareDBObject(this.NODEMAP_NAME, nodeID, collaborativeNode);\n }\n }\n\n };\n\n addPubmedIDs (edgeID, pubmedIDs) {\n var edgeMap = this.doc.data[this.EDGEMAP_NAME];\n\n\n if (edgeMap.hasOwnProperty(edgeID)) {\n var tmpEdge = edgeMap[edgeID];\n var nonDuplicateArray = [];\n for (var i = 0; i < pubmedIDs.length; i++) {\n if (tmpEdge.pubmedIDs.indexOf(pubmedIDs[i]) < 0) {\n nonDuplicateArray.push(pubmedIDs[i]);\n }\n }\n tmpEdge.pubmedIDs = tmpEdge.pubmedIDs.concat(nonDuplicateArray);\n this.updateShareDBObject(this.EDGEMAP_NAME, edgeID, tmpEdge);\n }\n else {\n throw new Error('Edge does not exist in real time !!! ');\n }\n };\n\n removePubmedID(edgeID, pubmedIDs) {\n var edgeMap = this.doc.data[this.EDGEMAP_NAME];\n\n if (edgeMap.hasOwnProperty(edgeID)) {\n var tmpEdge = edgeMap[edgeID];\n var removedIndices = [];\n for (var i = 0; i < pubmedIDs.length; i++) {\n var tmpID = pubmedIDs[i];\n var index = tmpEdge.pubmedIDs.indexOf(tmpID);\n if (index >= 0) {\n removedIndices.push(index);\n }\n }\n for (var i = 0; i < removedIndices.length; i++) {\n tmpEdge.pubmedIDs.remove(removedIndices[i]);\n }\n this.updateShareDBObject(this.EDGEMAP_NAME, edgeID, tmpEdge);\n\n }\n else {\n throw new Error('Edge does not exist in real time !!! ');\n }\n };\n\n updateEdgeBendPoints(edgeID, bendPointsArray) {\n\n var edgeMap = this.doc.data[this.EDGEMAP_NAME];\n \n if (edgeMap.hasOwnProperty(edgeID)) {\n var tmpEdge = edgeMap[edgeID];\n tmpEdge.bendPoint = bendPointsArray;\n this.updateShareDBObject(this.EDGEMAP_NAME, edgeID, tmpEdge);\n }\n else {\n throw new Error('Edge does not exist in real time !!! ');\n }\n };\n\n changeName(ele, newName) {\n var nodeMap = this.doc.data[this.NODEMAP_NAME];\n var edgeMap = this.doc.data[this.EDGEMAP_NAME];\n\n var elementID = ele.id();\n\n if (ele.isNode()) {\n if (nodeMap.hasOwnProperty(elementID)) {\n var tmpNode = nodeMap[elementID];\n tmpNode.name = newName;\n this.updateShareDBObject(this.NODEMAP_NAME, elementID, tmpNode);\n }\n else {\n throw new Error('Element does not exist in nodes !!! ');\n }\n }\n else {\n if (edgeMap.hasOwnProperty(elementID)) {\n var tmpEdge = edgeMap[elementID];\n tmpEdge.name = newName;\n this.updateShareDBObject(this.EDGEMAP_NAME, elementID, tmpEdge);\n }\n else {\n throw new Error('Element does not exist in edges !!! ');\n }\n }\n };\n\n changeParent(rootNode, newParentId, connectedEdges) {\n var self = this;\n var nodeLookupTable = {};\n\n function traverseFromRoot(rootNode, parId) {\n /*\n remove outermost node,\n create new real time node with given parentId,\n pass id of this real time node to children,\n repeat in a recursive manner\n after that restore the edges that dissapear by removed nodes\n during change parent\n */\n\n var refNode = rootNode.nodeRef;\n var children = rootNode.children;\n var newParentId = parId;\n\n if (refNode) {\n var refNodeId = refNode.id();\n var nodeData = refNode.data();\n var posData = refNode.position();\n var currentWidth = refNode.data('w');\n var currentHeight = refNode.data('h');\n\n var newNodeData =\n {\n name: nodeData.name,\n type: nodeData.type,\n x: posData.x,\n y: posData.y,\n w: currentWidth,\n h: currentHeight,\n parent: -1\n };\n\n if (parId) {\n newNodeData.parent = parId;\n }\n\n self.removeElement(refNodeId);\n var newNode = self.nodeInitializer(newNodeData);\n var newNodeId = newNode.id;\n self.insertShareDBObject(self.NODEMAP_NAME, newNodeId, newNode);\n newParentId = newNodeId;\n nodeLookupTable[refNodeId] = newNodeId;\n }\n\n for (const childNode of children) {\n traverseFromRoot(childNode, newParentId);\n }\n }\n\n //Begin traversing from given root node\n traverseFromRoot(rootNode, newParentId);\n\n //Restore edges that dissapear by the change parent operation\n //TODO compound operations ?\n connectedEdges.forEach(function (edge, index) {\n var edgeData = edge.data();\n self.removeElement(edge.id());\n\n var newSource = nodeLookupTable[edgeData.source];\n var newTarget = nodeLookupTable[edgeData.target];\n\n if (newSource) {\n edgeData.source = newSource;\n }\n\n if (newTarget) {\n edgeData.target = newTarget;\n }\n\n self.addNewEdge(edgeData);\n });\n };\n\n removeAllElements() {\n var nodeMap = this.doc.data[this.NODEMAP_NAME];\n var edgeMap = this.doc.data[this.EDGEMAP_NAME];\n var ops = [];\n\n //Remove all real time nodes\n for (const key of Object.keys(nodeMap)) {\n ops.push({\n p: [this.NODEMAP_NAME, key],\n od: nodeMap[key]\n });\n }\n\n //Remove all real time edges\n for (const key of Object.keys(edgeMap)) {\n ops.push({\n p: [this.EDGEMAP_NAME, key],\n od: edgeMap[key]\n });\n }\n\n this.applyShareDBOperation(ops);\n };\n\n loadGraph(nodes, edges) {\n var self = this;\n this.removeAllElements();\n\n //Function that traverses graph tree recursively.\n var oldIdNewIdMap = {};\n\n function traverseTree(node, newParentId) {\n node.data.x = node.position.x;\n node.data.y = node.position.y;\n\n //Update parent !\n if (newParentId) {\n var parent = node.data.parent;\n if (parent) {\n node.data.parent = newParentId;\n }\n }\n\n //Create new real time node\n var newNodeId = self.getCustomObjId();\n var params = node.data;\n oldIdNewIdMap[params.id] = newNodeId;\n var newNode = self.nodeInitializer(params);\n newNode.id = newNodeId;\n\n self.insertShareDBObject(self.NODEMAP_NAME, newNodeId, newNode);\n\n //If node has children recursively traverse sub graphs and update parent field of child nodes\n if (node.children.length > 0) {\n for (const tmpNode of node.children) {\n traverseTree(tmpNode, newNodeId);\n }\n }\n }\n\n //Create graph hierarchy from given list of flat nodes\n var tree = this.graphUtilities.createGraphHierarchyRealTime(nodes);\n console.log(tree)\n //Traverse from root nodes of tree\n for (const rootLevelNode of tree) {\n traverseTree(rootLevelNode, undefined);\n }\n\n /*\n Create real time edges, update the source and target fields, since new ids will be generated for the nodes in\n real time\n */\n for (const edge of edges) {\n console.log(edge);\n edge.data.source = oldIdNewIdMap[edge.data.source];\n edge.data.target = oldIdNewIdMap[edge.data.target];\n var params = edge.data;\n var newEdgeID = self.getCustomObjId();\n params.id = newEdgeID;\n var newEdge = self.edgeInitializer(params);\n self.insertShareDBObject(self.EDGEMAP_NAME, newEdgeID, newEdge);\n }\n };\n\n mergeGraph (nodes, edges) {\n var self = this;\n var nodeMap = self.doc.data[this.NODEMAP_NAME];\n\n var realTimeNodeMap = nodeMap;\n var realTimeNodeLookupTable = {};\n var realTimeNodeNameLookupTable = {};\n var oldIdNewIdMap = {};\n\n //Create lookup table for real time nodes\n //items are stored in an array in the resulting array of nodeMap.items()\n // [0] - id, [1] - object\n for (var i in realTimeNodeMap) {\n var nodeMapItem = realTimeNodeMap[i];\n realTimeNodeLookupTable[nodeMapItem.id] = nodeMapItem;\n realTimeNodeNameLookupTable[nodeMapItem.name] = nodeMapItem;\n }\n\n //Recursive traverse definition\n function traverseTree(node, newParentId) {\n //Search by name !\n //We have not found a node that exist in the graph, add normally\n if (!(node.data.name in realTimeNodeNameLookupTable)) {\n node.data.x = node.position.x;\n node.data.y = node.position.y;\n\n //Update parent !\n if (newParentId) {\n var parent = node.data.parent;\n if (parent) {\n node.data.parent = newParentId;\n }\n }\n\n //Create new real time node\n var newNodeId = self.getCustomObjId();\n oldIdNewIdMap[node.data.id] = newNodeId;\n var newNode = self.nodeInitializer(node.data);\n newNode.id = newNodeId;\n self.insertShareDBObject(self.NODEMAP_NAME, newNodeId, newNode);\n\n //If node has children recursively traverse sub graphs and update parent field of child nodes\n if (node.children.length > 0) {\n for (const tmpNode of node.children) {\n traverseTree(tmpNode, newNodeId);\n }\n }\n }\n // At this point there exists another node in the graph with the same name as 'node'\n // we need to update parent field of children of this node if any\n else {\n var sameNameNode = realTimeNodeNameLookupTable[node.data.name];\n var sameNodeId = sameNameNode.id;\n oldIdNewIdMap[node.data.id] = sameNodeId;\n\n //If node has children recursively traverse sub graphs and update parent field of child nodes\n if (node.children.length > 0) {\n for (const tmpNode of node.children) {\n traverseTree(tmpNode, sameNodeId);\n }\n }\n }\n }\n\n //Traverse from root nodes of tree\n var tree = this.graphUtilities.createGraphHierarchyRealTime(nodes);\n for (const rootLevelNode of tree) {\n traverseTree(rootLevelNode, rootLevelNode.data.id);\n }\n\n /*\n Create real time edges, update the source and target fields, since new ids will be generated for the nodes in\n real time\n */\n var ops = [];\n for (const edge of edges) {\n edge.data.source = oldIdNewIdMap[edge.data.source];\n edge.data.target = oldIdNewIdMap[edge.data.target];\n var newEdge = self.edgeInitializer(edge.data);\n var newEdgeID = this.getCustomObjId();\n newEdge.id = newEdgeID;\n ops.push({\n p: [self.EDGEMAP_NAME, newEdgeID],\n oi: newEdge\n });\n }\n self.applyShareDBOperation(ops);\n };\n\n updateLayoutProperties (newLayoutProperties) {\n this.updateShareDBLayoutProperties(newLayoutProperties);\n };\n\n updateGlobalOptions (newOptions) {\n this.updateShareDBGlobalOptions(newOptions);\n };\n\n /*\n * Creates graph hierarchy from given flat list of nodes list, nodes list is assumed to have parent-child\n * relationship by a field 'parent' which represents to the id of the parent node This function is specific\n * for the needs of TCGA Pathway Curation Tool 04/07/2016\n *\n * @param nodes {array}: flat list of nodes of a graph\n * @return {array}: Tree representation in array, entries are root level nodes. node.children gives children nodes\n * of each node in the returned array.\n * a node in corresponding level.\n *\n * */\n createGraphHierarchy (nodes) {\n //Some arrays and maps for creating graph hierarchy\n var tree = [];\n var mappedArr = {};\n\n // First map the nodes of the array to an object -> create a hash table.\n for (var i = 0, len = nodes.length; i < len; i++) {\n var arrElem = nodes[i];\n mappedArr[arrElem.data.id] = arrElem;\n mappedArr[arrElem.data.id].children = [];\n }\n\n for (const id of Object.keys(mappedArr)) {\n var mappedElem = mappedArr[id];\n\n // If the element is not at the root level, add it to its parent array of children.\n if (mappedElem.data.parent) {\n mappedArr[mappedElem.data.parent].children.push(mappedElem);\n }\n // If the element is at the root level, add it to first level elements array.\n else {\n tree.push(mappedElem);\n }\n }\n return tree;\n };\n\n //Makes sure that edge is compatible with edges in shared document\n edgeInitializer (params) {\n var edge: any = {};\n edge.id = params.id || this.getCustomObjId();\n edge.type = params.type || \"undefined\";\n edge.source = params.source || \"undefined\";\n edge.target = params.target || \"undefined\";\n edge.name = params.name || \"\";\n edge.isHighlighted = params.isHighlighted || false;\n\n if (params.pubmedIDs) {\n if (edge.pubmedIDs == undefined) {\n edge.pubmedIDs = [];\n }\n if(params.pubmedIDs.length > 0)\n edge.pubmedIDs.push(params.pubmedIDs);\n }\n else {\n edge.pubmedIDs = [];\n }\n\n if (params.bendPoint) {\n if (edge.bendPoint == undefined) {\n edge.bendPoint = [];\n }\n edge.bendPoint.push(params.bendPoint);\n }\n else {\n edge.bendPoint = [];\n }\n return edge;\n };\n\n //Makes sure that node is compatible with nodes in shared document\n nodeInitializer(params) {\n var node: any = {};\n node.id = params.id || this.getCustomObjId();\n node.name = params.name || \"undefined\";\n node.type = params.type || \"undefined\";\n node.parent = params.parent || \"undefined\";\n node.x = params.x || \"undefined\";\n node.y = params.y || \"undefined\";\n node.w = params.w || \"undefined\";\n node.h = params.h || \"undefined\";\n node.minWidth = params.minWidth || 0;\n node.minWidthBiasLeft = params.minWidth || 0;\n node.minWidthBiasRight = params.minWidth || 0;\n node.minHeight = params.minWidth || 0;\n node.minHeightBiasTop = params.minWidth || 0;\n node.minHeightBiasBottom = params.minWidth || 0;\n node.isHidden = params.isHidden || false;\n node.isInvalidGene = params.isInvalidGene || false;\n node.isHighlighted = params.isHighlighted || false;\n return node;\n };\n\n //Makes sure that layout properties is compatible with layout properties in shared document\n layoutPropertiesInitializer (params) {\n var layoutProperties: any = {};\n layoutProperties.name = params.name || 'undefined';\n layoutProperties.nodeRepulsion = params.nodeRepulsion || 'undefined';\n // this.nodeOverlap = params.nodeOverlap || 'undefined';\n layoutProperties.idealEdgeLength = params.idealEdgeLength || 'undefined';\n layoutProperties.edgeElasticity = params.edgeElasticity || 'undefined';\n layoutProperties.nestingFactor = params.nestingFactor || 'undefined';\n layoutProperties.gravity = params.gravity || 'undefined';\n layoutProperties.numIter = params.numIter || 'undefined';\n layoutProperties.tile = params.tile || 'undefined';\n layoutProperties.animate = params.animate || 'undefined';\n layoutProperties.randomize = params.randomize || false;\n layoutProperties.gravityRangeCompound = params.gravityRangeCompound || 'undefined';\n layoutProperties.gravityCompound = params.gravityCompound || 'undefined';\n layoutProperties.gravityRange = params.gravityRange || 'undefined';\n layoutProperties.tilingPaddingVertical = params.tilingPaddingVertical || 'undefined';\n layoutProperties.tilingPaddingHorizontal = params.tilingPaddingHorizontal || 'undefined';\n layoutProperties.initialEnergyOnIncremental = params.initialEnergyOnIncremental || 'undefined';\n return layoutProperties;\n };\n\n //Makes sure that global options is compatible with global options in shared document\n globalOptionsInitializer (params) {\n var globalOptions: any = {};\n globalOptions.zoomLevel = params.zoomLevel || 'undefined';\n globalOptions.panLevel = params.panLevel || 'undefined';\n return globalOptions;\n };\n\n //Create unique ID for elements\n getCustomObjId () {\n // see http://stackoverflow.com/a/8809472\n // we need to take care of our own IDs because the ones automatically generated by cytoscape (also UUID)\n // don't comply with xsd:SID type that must not begin with a number\n // Public Domain/MIT\n var d = Date.now();\n if (typeof performance !== 'undefined' && typeof performance.now === 'function') {\n d += performance.now(); //use high-precision timer if available\n }\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n var r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);\n });\n };\n\n getParam (urlParam) {\n const regExp = new RegExp(urlParam + '=(.*?)($|&)', 'g');\n let match: any = window.location.search.match(regExp);\n if (match && match.length) {\n match = match[0];\n match = match.replace(urlParam + '=', '').replace('&', '');\n } else {\n match = null;\n }\n return match;\n };\n\n}\n","import EditorActionsManager from \"../managers/EditorActionsManager\";\nimport _ from \"underscore\";\n\nimport {toast} from 'react-toastify';\n\nexport default class CBioPortalAccessor{\n static readonly CNA_GAIN = 2;\n\n static readonly GET_ALL_CANCER_STUDIES_URL = \"https://www.cbioportal.org/webservice.do?cmd=getCancerStudies\";\n static readonly GET_GENETIC_PROFILES_URL = \"https://www.cbioportal.org/webservice.do?cmd=getGeneticProfiles&cancer_study_id=\";\n static readonly GET_PROFILE_DATA_URL = \"https://www.cbioportal.org/webservice.do?cmd=getProfileData\";\n static readonly MRNA_EXP_STUDY_NAME = \"_mrna_median_Zscores\";\n static readonly CNA_EXP_STUDY_NAME = \"_gistic\";\n static readonly VALIDATE_GENES_URL = 'https://www.cbioportal.org/api/genes/fetch?geneIdType=HUGO_GENE_SYMBOL&projection=ID'\n static readonly MUTATION_EXP_STUDY_NAME = \"_mutations\";\n\n static readonly CNA_DELETION = -2;\n static readonly Z_SCORE_UPPER_THRESHOLD = 2;\n static readonly Z_SCORE_LOWER_THRESHOLD = -2;\n \n static readonly MUTATION = \"Mutation\";\n static readonly GENE_EXPRESSION = \"Gene Expression\";\n static readonly CNA = \"Copy Number Alteration\";\n\n getDataTypes(){\n return [CBioPortalAccessor.MUTATION, CBioPortalAccessor.GENE_EXPRESSION, CBioPortalAccessor.CNA];\n }\n\n /*\n * Retrieves all cancer studies from cBioPortal\n * **/\n fetchCancerStudies(callbackFunction)\n {\n var cancerStudies = {};\n var request = new XMLHttpRequest();\n request.onreadystatechange = function ()\n {\n if(request.readyState === XMLHttpRequest.DONE && request.status === 200)\n {\n // By lines\n // Match all new line character representations\n var seperator = /\\r?\\n|\\r/;\n var lines = request.responseText.split(seperator);\n\n // start from first line skip node meta data\n for(var i = 1; i < lines.length; i++)\n {\n if (lines[i].length <= 0)\n continue;\n\n var lineData = lines[i].split('\\t');\n cancerStudies[lineData[0]] = lineData;\n }\n callbackFunction(cancerStudies);\n }\n else if (request.readyState === XMLHttpRequest.DONE && request.status !== 200)\n {\n toast.error(\"Error retrieving studies\");\n }\n };\n request.open(\"GET\", CBioPortalAccessor.GET_ALL_CANCER_STUDIES_URL);\n request.send();\n };\n\n /*\n * Retrieves all genetic profiles for given cancerStudy from cBioPortal\n * **/\n getSupportedGeneticProfiles(cancerStudy, callbackFunction)\n {\n var outData = {};\n var request = new XMLHttpRequest();\n var self = this;\n request.onreadystatechange = function ()\n {\n if(request.readyState === XMLHttpRequest.DONE && request.status === 200)\n {\n // By lines\n // Match all new line character representations\n var seperator = /\\r?\\n|\\r/;\n var lines = request.responseText.split(seperator);\n\n // start from first line skip node meta data\n for(var i = 1; i < lines.length; i++)\n {\n if (lines[i].length <= 0)\n continue;\n\n var lineData = lines[i].split('\\t');\n var cancerProfileName = lineData[0];\n if(self.isSupportedCancerProfile(cancerProfileName))\n {\n outData[cancerProfileName] = lineData;\n }\n }\n\n callbackFunction(outData);\n }\n else if (request.readyState === XMLHttpRequest.DONE && request.status !== 200)\n {\n console.error(\"Error retrieving studies\");\n // window.notificationManager.createNotification(\"Error retrieving genetic profiles\", \"fail\")\n }\n };\n request.open(\"GET\", CBioPortalAccessor.GET_GENETIC_PROFILES_URL + cancerStudy);\n request.send();\n };\n\n isSupportedCancerProfile(cancerProfileName: string)\n {\n return (cancerProfileName.endsWith(CBioPortalAccessor.MRNA_EXP_STUDY_NAME) ||\n cancerProfileName.endsWith(CBioPortalAccessor.CNA_EXP_STUDY_NAME) ||\n cancerProfileName.endsWith(CBioPortalAccessor.MUTATION_EXP_STUDY_NAME));\n };\n\n static getDataType(cancerProfileName: string)\n {\n if ( cancerProfileName.endsWith(this.MRNA_EXP_STUDY_NAME))\n {\n return this.GENE_EXPRESSION;\n }\n else if ( cancerProfileName.endsWith(this.CNA_EXP_STUDY_NAME))\n {\n return this.CNA;\n }\n else if ( cancerProfileName.endsWith(this.MUTATION_EXP_STUDY_NAME))\n {\n return this.MUTATION;\n }\n\n return \"\";\n }\n \n\n calcAlterationPercentages(paramLines, geneticProfileId, callbackFunction)\n {\n // By lines\n // Match all new line character representations\n const seperator = /\\r?\\n|\\r/;\n const lines = paramLines.split(seperator);\n let startIndex = 0;\n\n //Find starting index of actual data skip commented lines\n for (const i in lines)\n {\n if(!lines[i].startsWith('#'))\n {\n startIndex = parseInt(i);\n break;\n }\n }\n\n //Total number of tumor samples in the response\n const tumorSamples = lines[startIndex].split('\\t');\n const numOfTumorSamples = tumorSamples.length - 2;\n const outData: {} = {};\n outData[geneticProfileId] = {};\n\n const geneticProfileType = CBioPortalAccessor.getDataType(geneticProfileId);\n console.log(\"geneticProfileType\");\n console.log(geneticProfileType);\n // skip meta line and iterate over tumor sample data\n for(let i = startIndex + 1; i < lines.length; i++)\n {\n if (lines[i].length <= 0)\n continue;\n\n //Iterate over samples for each gene to calculate profile data\n const lineData: string[] = lines[i].split('\\t');\n let profileDataAlteration = 0;\n for(let j = 2; j < lineData.length; j++)\n {\n if(lineData[j] !== 'NaN')\n {\n if( geneticProfileType === CBioPortalAccessor.MUTATION )\n profileDataAlteration++;\n else if ( (geneticProfileType === CBioPortalAccessor.CNA) \n && ( parseInt(lineData[j]) === CBioPortalAccessor.CNA_GAIN || parseInt(lineData[j]) === CBioPortalAccessor.CNA_DELETION ) ){\n profileDataAlteration++;\n }\n else if ( (geneticProfileType === CBioPortalAccessor.GENE_EXPRESSION) \n && (parseFloat(lineData[j]) >= CBioPortalAccessor.Z_SCORE_UPPER_THRESHOLD \n || parseFloat(lineData[j]) <= CBioPortalAccessor.Z_SCORE_LOWER_THRESHOLD)){\n profileDataAlteration++;\n console.log(parseInt(lineData[j]), parseFloat(lineData[j]), lineData[j]);\n }\n }\n }\n\n //\n outData[geneticProfileId][lineData[1]] = ( profileDataAlteration / numOfTumorSamples ) * 100;\n }\n\n callbackFunction(outData);\n }\n\n\n /*\n *\n * Retrieves profile data associated with the parameters below from cBioPortal\n * @params\n {\n caseSetId: \"gbm_tcga\",\n geneticProfileId: \"gbm_tcga_mutations\",\n genes: [\"BRCA1\", \"BRCA2\", \"TP53\"]\n }\n * */\n getProfileData(params, callbackFunction)\n {\n //params\n //caseSetId, geneticProfileId, genes\n\n const outData = {};\n const request = new XMLHttpRequest();\n const self = this;\n request.onreadystatechange = function ()\n {\n if(request.readyState === XMLHttpRequest.DONE && request.status === 200)\n {\n console.log(\"Query Result\");\n console.log(request.responseText);\n self.calcAlterationPercentages(request.responseText, params.geneticProfileId, callbackFunction);\n toast.success(params.geneticProfileId + \" is succesfully loaded from cBioPortal\");\n\n }\n };\n\n //Create query URL\n let queryURL = CBioPortalAccessor.GET_PROFILE_DATA_URL;\n //Fetch sequenced case list !!\n queryURL += \"&case_set_id=\" + params.caseSetId + \"_sequenced\";\n queryURL += \"&genetic_profile_id=\" + params.geneticProfileId;\n queryURL += \"&gene_list=\";\n let isFirst = true;\n for(const gene of params.genes)\n {\n if(!isFirst){\n queryURL += \"+\";\n } else {\n isFirst = false;\n }\n queryURL += gene;\n \n }\n console.log(\"queryURL\");\n console.log(queryURL);\n\n request.open(\"GET\", queryURL);\n request.send();\n };\n\n validateGenes(nodeSymbols, editor: EditorActionsManager)\n {\n const request = new XMLHttpRequest();\n const self = this;\n\n request.onreadystatechange = function ()\n {\n if(request.readyState === XMLHttpRequest.DONE && request.status === 200)\n {\n const validGeneSymbols = JSON.parse(request.responseText);\n const validGeneArray = _.map(validGeneSymbols, function(object)\n {\n return object.hugoGeneSymbol;\n });\n editor.highlightInvalidGenes(validGeneArray);\n }\n };\n const queryURL = CBioPortalAccessor.VALIDATE_GENES_URL;\n request.open(\"POST\", queryURL);\n request.setRequestHeader(\"Content-type\", \"application/json\");\n request.send(JSON.stringify(nodeSymbols));\n }\n}\n","import { IPathwayInfo } from \"../managers/FileOperationsManager\";\nimport { IPathwayData } from \"../ui/react-pathway-mapper\";\n\nexport default class SaveLoadUtility{\n //Exports given json graph(based on cy.export()) into a string\n static exportGraph(pathwayDetails: IPathwayInfo, cy, edgeEditing, graphJSON: any)\n {\n console.log(graphJSON);\n var returnString = pathwayDetails.pathwayTitle + '\\n\\n';\n returnString += pathwayDetails.pathwayDetails +'\\n\\n';\n\n //Get nodes and edges\n var nodes = graphJSON.elements.nodes;\n // var edges = pathwayDetails.graphJSON.elements.edges;\n var edges = cy.edges();\n\n //Prepare Meta Line\n returnString += '--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY\\tWIDTH\\tHEIGHT--'+'\\n';\n\n console.log(\"Here\");\n if (nodes)\n {\n for (let i = 0; i < nodes.length; i++)\n {\n console.log(\"nodes[i]\");\n console.log(nodes[i]);\n returnString += this.exportNode(nodes[i]);\n }\n }\n\n //Put a blank line between nodes and edges\n returnString += '\\n';\n returnString += '--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\\tINTERACTION_PUBMED_ID\\tEDGE_NAME\\tEDGE_BENDS\\n';\n\n if (edges) {\n //Write edges\n for (let i = 0; i < edges.length; i++)\n {\n var edgeID = edges[i].data('id');\n var edgeType = edges[i].data('type');\n var source = edges[i].data('source');\n var target = edges[i].data('target');\n var pubmedIDs = edges[i].data('pubmedIDs');\n var pubmedString = \"\";\n var edgeName = (edges[i].data('name')) ? edges[i].data('name') : \"\";\n\n var numberOfBendPoints = 0;\n if (edgeEditing.getSegmentPoints(edges[i]) !== undefined)\n numberOfBendPoints = edgeEditing.getSegmentPoints(edges[i]).length/2;\n var bendPointPositions = \"\";\n for (var j = 0; j < numberOfBendPoints; j++)\n {\n bendPointPositions += \"(\" + edgeEditing.getSegmentPoints(edges[i])[2*j] + \";\" +\n edgeEditing.getSegmentPoints(edges[i])[2*j+1] + \")\";\n }\n\n if (pubmedIDs != undefined) {\n for (var j = 0; j < pubmedIDs.length; j++)\n {\n pubmedString += pubmedIDs[j];\n if (j != pubmedIDs.length - 1)\n pubmedString += \";\"\n }\n }\n\n returnString += edgeID + '\\t' +\n source + '\\t' +\n target + '\\t' +\n edgeType + '\\t' +\n pubmedString + '\\t' +\n edgeName + '\\t' +\n bendPointPositions + '\\n';\n }\n }\n\n //Finally return a string that includes whole graph lovely and peacefully :)\n return returnString;\n }\n static exportAsSIFNX(pathwayDetails: any, graphJSON: any)\n {\n let returnString = \"\";\n\n //Get nodes and edges\n const nodes = graphJSON.elements.nodes;\n const edges = graphJSON.elements.edges;\n const nodeMap = {};\n //Put a blank line between nodes and edges\n returnString += '\\n';\n returnString += 'PARTICIPANT\\tPARTICIPANT_TYPE\\tPARENT_ID\\tPOSX\\tPOSY\\tWIDTH\\tHEIGHT'+'\\n';\n\n if (nodes)\n {\n for (var i = 0; i < nodes.length; i++)\n {\n returnString += this.exportNode(nodes[i]);\n\n nodeMap[nodes[i].data.id] = nodes[i];\n }\n }\n\n //Put a blank line between nodes and edges\n returnString += '\\n';\n returnString += 'PARTICIPANT_A\\tPARTICIPANT_B\\tTYPE\\tPUBMED_IDS\\n';\n\n \n if (edges) {\n //Write edges\n for (var i = 0; i < edges.length; i++)\n {\n var edgeType = edges[i].data.type;\n var source = edges[i].data.source;\n var target = edges[i].data.target;\n var edgeName = edges[i].data.name;\n var pubmedIDs = edges[i].data.pubmedIDs;\n var pubmedString = \"\";\n\n if (pubmedIDs != undefined) {\n for (var j = 0; j < pubmedIDs.length; j++)\n {\n pubmedString += pubmedIDs[j];\n if (j != pubmedIDs.length - 1)\n pubmedString += \";\"\n }\n }\n\n returnString += nodeMap[source].data.name + '\\t' +\n nodeMap[target].data.name + '\\t' +\n edgeType + '\\t' +\n pubmedString + '\\t' +\n edgeName + '\\n';\n }\n }\n\n //Finally return a string that includes whole graph lovely and peacefully :)\n return returnString;\n }\n static exportNode(node)\n {\n //Node specific data fields\n var nodeName = node.data.name;\n var parentID = node.data.parent;\n var nodeID = node.data.id;\n var pos = node.position;\n var nodeType = node.data.type;\n var nodeW = node.data.w;\n var nodeH = node.data.h;\n\n //Check if node has a parent, if not set parent id -1\n if (node.data.parent)\n {\n parentID = node.data.parent;\n }\n else\n {\n parentID = -1;\n }\n\n // Write a line for a node\n return nodeName + '\\t' +\n nodeID + '\\t' +\n nodeType + '\\t' +\n parentID + '\\t' +\n parseInt(pos.x) + '\\t' +\n parseInt(pos.y) + '\\t' +\n nodeW + '\\t' +\n nodeH + '\\n';\n }\n static parseGraph(graph, isArray) {\n\n const allEles = [];\n const nodes = [];\n const edges = [];\n\n // By lines\n // Match all new line character representations\n var seperator = /\\r?\\n|\\r/;\n var lines = (isArray) ? graph : graph.split(seperator);\n var edgesStartIndex = -1;\n //console.log(lines);\n var title = lines[0];\n var description = lines[2];\n\n // In old version description used to expand in multiple lines\n // graphDataIndex holds the line index where the first --NODE_NAME occurs and is used later to load nodes\n let graphDataIndex = 3;\n let isFound = false;\n while (graphDataIndex < lines.length) {\n if (lines[graphDataIndex].includes(\"--NODE_NAME\")) {\n isFound = true;\n break;\n }\n description += \"\\n\" + lines[graphDataIndex];\n graphDataIndex++;\n }\n graphDataIndex++;\n // TODO AMENDMENT\n if(!isFound){\n graphDataIndex = 2;\n }\n //TODO Legacy pathways workaround\n if (lines[0].includes(\"--NODE_NAME\")) {\n graphDataIndex = 1;\n title = \"New Pathway\";\n description = \"\";\n }\n\n // start from first line skip node meta data\n for (var i = graphDataIndex; i < lines.length; i++) {\n // If we encounter a blank line, that means we need to parse edges from now on !\n // so skip blank line and edge meta line\n if (lines[i].length == 0 || lines[i] === \"\") {\n edgesStartIndex = i + 2;\n break;\n }\n\n //Fetch a line for nodes\n var lineData = lines[i].split('\\t');\n var nodeName = lineData[0];\n var nodeID = lineData[1];\n var nodeType = lineData[2];\n var parentID = lineData[3];\n var posX = (lineData.length > 4) ? lineData[4] : \"0\";\n var posY = (lineData.length > 5) ? lineData[5] : \"0\";\n var nodeW = (lineData.length > 7) ? lineData[6] : (nodeType === 'PROCESS') ? (nodeName.length * 6 + 24) : \"150\";\n var nodeH = (lineData.length > 7) ? lineData[7] : (nodeType === 'PROCESS') ? \"24\" : \"52\";\n\n if(nodeName === \" \" || nodeName === \"\"){\n console.log(\"Here empty\");\n //nodeName = \"No Name \" + (i + 1);\n }\n\n\n var newNode = {\n group: 'nodes',\n data:\n {\n id: nodeID,\n name: nodeName,\n type: nodeType,\n w: nodeW,\n h: nodeH,\n parent: -1\n },\n position:\n {\n x: parseInt(posX),\n y: parseInt(posY)\n }\n };\n\n if (parentID != '-1') {\n newNode.data.parent = parentID;\n }\n nodes.push(newNode);\n }\n\n //console.log(edgesStartIndex);\n //Read edges\n for (let i = edgesStartIndex; i < lines.length; i++) {\n //If we reach EOF we break loop\n if (lines[i].length == 0) {\n break;\n }\n\n if(!isArray)\n console.log(lines);\n var lineData = lines[i].split('\\t');\n var edgeID = lineData[0];\n var edgeSource = lineData[1];\n var edgeTarget = lineData[2];\n var edgeType = lineData[3];\n var pubmedIDs = (lineData.length > 4) ? lineData[4].split(';') : [];\n var label = (lineData.length > 5) ? lineData[5] : '';\n var bendPoints = (lineData.length > 6) ? lineData[6] : '';\n\n var bendPointPositions = [];\n if (bendPoints) {\n var bendPair = bendPoints.split(')'); //The last element of bendPair array is \"\"\n for (var j = 0; j < bendPair.length - 1; j++) {\n var separatorIndex = bendPair[j].indexOf(\";\");\n var x = bendPair[j].substring(1, separatorIndex);\n var y = bendPair[j].substring(separatorIndex + 1, bendPair[j].length);\n bendPointPositions.push({x: parseFloat(x), y: parseFloat(y)});\n }\n }\n/*\n console.log(\"From parseGraph\");\n console.log(lineData);\n console.log(edgeType);*/\n\n const newEdge = {\n group: 'edges', data:\n {\n id: edgeID,//((isFound) ? edgeID : i - edgesStartIndex),\n type: edgeType,//((isFound) ? edgeType : edgeTarget),\n source: edgeSource,//((isFound) ? edgeSource : edgeID),\n target: edgeTarget,//((isFound) ? edgeTarget : edgeSource),\n pubmedIDs: pubmedIDs,\n name: label,\n bendPointPositions: bendPointPositions/*[{x:100,y:100}]*/\n }\n };\n edges.push(newEdge);\n }\n // edgeEditing.initBendPoints(cy.edges());\n /*\n console.log(\"Edges and Nodes\");\n console.log(edges)\n console.log(nodes)*/\n return {title: title, description: description, nodes: nodes, edges: edges};\n }\n}\n","import React from 'react';\nimport cytoscape from 'cytoscape';\nimport $ from \"jquery\";\n// @ts-ignore\nwindow.$ = $;\nimport autobind from \"autobind-decorator\";\nimport {observer} from \"mobx-react\";\nimport ViewOperationsManager from \"../managers/ViewOperationsManager\";\nimport EditorActionsManager from \"../managers/EditorActionsManager\";\nimport DragDropNodeAddPlugin from \"../utils/DragDropNodeAddPlugin\";\nimport ContextMenuManager from \"../managers/ContextMenuManager\";\nimport QtipManager from \"../managers/QtipManager\";\nimport ShareDBManager from \"../managers/ShareDBManager\";\nimport CBioPortalAccessor from \"../utils/CBioPortalAccessor\";\nimport SaveLoadUtility from \"../utils/SaveLoadUtility\";\nimport pathways from \"../data/pathways.json\";\n// @ts-ignore\nimport resizeCue from '../../node_modules/cytoscape-node-resize/resizeCue.svg';\n// @ts-ignore\nimport geneImg from \"../images/nodes/gene.svg\";\n// @ts-ignore\nimport familyImg from \"../images/nodes/family.svg\";\n// @ts-ignore\nimport complexImg from \"../images/nodes/complex.svg\";\n// @ts-ignore\nimport compartmentImg from \"../images/nodes/compartment.svg\";\n// @ts-ignore\nimport processImg from \"../images/nodes/process.svg\";\nimport { IProfileMetaData, IPathwayData, EModalType } from './react-pathway-mapper';\n\nconst edgeHandles = require('cytoscape-edgehandles');\nconst edgeEditing = require('cytoscape-edge-editing');\nconst regCose = require('cytoscape-cose-bilkent');\nconst nodeResize = require('cytoscape-node-resize');\nconst undoRedo = require('cytoscape-undo-redo');\nconst panzoom = require('cytoscape-panzoom');\nconst styleSheet = require('../utils/GraphStyleSheet.tsx');\nconst panzoomOpts = require('../utils/PanzoomOptions.tsx');\nconst navigator = require('cytoscape-navigator');\nconst contextMenus = require('cytoscape-context-menus');\nconst konva = require('konva');\nconst viewUtilities = require('cytoscape-view-utilities');\nconst grid_guide = require('cytoscape-grid-guide');\nconst cyqtip = require('cytoscape-qtip');\n\ntype PathwayMapperType = {\n isCollaborative: boolean;\n isCbioPortal: boolean;\n editorHandler: Function;\n selectedPathway: string;\n setActiveEdge: Function;\n profiles: IProfileMetaData[];\n pathwayHandler: (pathwayName: string) => void;\n handleOpen: (modalId: EModalType) => void;\n};\n@observer\nexport default class CytoscapeArea extends React.Component{\n private cy:any;\n private cyDiv: HTMLDivElement | undefined;\n private editor: EditorActionsManager;\n private edgeAddingMode: any;\n private viewOperationsManager: ViewOperationsManager;\n private qtipManager: QtipManager;\n private genomicDataExplorerView: any;\n private pathwayDetailsView: any;\n private viewUtilities: any;\n private isCollaborative: boolean;\n private isCbioPortal: boolean;\n private shareDBManager: ShareDBManager;\n private cxtMenuManager: ContextMenuManager;\n private dragDropNodeAddManager: DragDropNodeAddPlugin;\n private undoRedoManager: any;\n private portalAccessor: CBioPortalAccessor;\n private isMountedFirst = true;\n private eh: any;\n private lastSelectedEdge: any;\n\n\n constructor (props: PathwayMapperType) {\n super(props);\n this.isCollaborative = props.isCollaborative;\n this.edgeAddingMode = 0;\n this.isCbioPortal = props.isCbioPortal;\n // this.init();\n // this.createSampleMenu(); //TODO: AMENDMENT Menu must be react.\n // this.createCBioPortalAccessModal();\n }\n\n\n componentWillUpdate(nextProps: PathwayMapperType) {\n console.log(\"Component will update\", nextProps.selectedPathway);\n this.getPathway(nextProps.selectedPathway);\n }\n\n // This method only opens pathways that are available in pathway.json. Namely, imported or merged pathways are not opened via this method.\n // Yet, they individually call parsing method.\n getPathway(selectedPathway: string){\n\n if(!selectedPathway || selectedPathway === '') return;\n\n const data = pathways[selectedPathway];\n\n // It might be non-existent due to pathway being created using collaborative mode, or pathway loaded elsewhere (import vs.)\n if(!data){ \n return;\n }\n // TODO Problematic const data = pathways[\"../samples/BLCA-2014-RTK-RAS-PI(3)K-pathway.txt\"];\n\n const parsedGraph = SaveLoadUtility.parseGraph(data, true);\n\n\n const allEles = parsedGraph;\n this.editor.loadFile(allEles.nodes, allEles.edges);\n }\n\n render(){\n return (
\n
\n
\n
);\n }\n\n componentDidMount(): void {\n if(this.isMountedFirst){\n this.init();\n this.isMountedFirst = false;\n }\n this.getPathway(this.props.selectedPathway);\n }\n\n @autobind\n cyDivHandler(div:HTMLDivElement){\n this.cyDiv = div;\n }\n\n init(){\n\n // Create portal accessor\n this.portalAccessor = new CBioPortalAccessor();\n\n // Initializes cytoscape\n this.initCyJS();\n // Initialize cytoscape based handlers here\n this.initCyHandlers();\n this.initKeyboardHandlers();\n this.initUndoRedoFunctionality();\n this.initCBioPortalFunctionalities();\n this.placePanzoomAndOverlay();\n\n //this.appManager = this;\n }\n\n placePanzoomAndOverlay(){\n //TODO place navigator !!!\n var offset = 5;\n // @ts-ignore\n var topCy = $(this.cyDiv).offset().top;\n //var bottomCy = $('.cyContainer').offset().bottom;\n // @ts-ignore\n var leftCy = $(this.cyDiv).offset().left;\n //var rightCy = $('.cyContainer').offset().right;\n // @ts-ignore\n var heightCy = $(this.cyDiv).outerHeight();\n // @ts-ignore\n var widthCy = $(this.cyDiv).outerWidth();\n var heightNavigator = $('.cytoscape-navigator-wrapper').outerHeight();\n var widthNavigator = $('.cytoscape-navigator-wrapper').outerWidth();\n var heightPatwayNavbar = $('.pathway-navbar').outerHeight();\n var heightPathwayToolbar = $('.pathway-toolbar').outerHeight();\n var widthSideBar = $('.sideBarWrapper').outerWidth();\n var widthcBioPortalSideBar = $('.cBioPortal-sidebar').outerWidth();\n\n console.log(widthSideBar, widthCy, leftCy, widthNavigator, offset);\n\n//706px 1513.15px\n//694px 1391.15px\n //var heightPanzoom = $('.cy-panzoom').outerHeight();\n //var widthPanzoom = $('.cy-panzoom').outerWidth();\n\n if(!this.isCbioPortal) {\n \n $('.cytoscape-navigator-wrapper').css('top', heightCy + topCy - heightNavigator - offset + 13);\n $('.cytoscape-navigator-wrapper').css('left', widthCy + leftCy - widthNavigator - offset + 21 - 0.5 + 0.35);\n //$('.cytoscape-navigator-wrapper').css('left', widthCy + leftCy - widthNavigator - offset);\n }\n else {\n $('.cytoscape-navigator-wrapper').css('bottom', 10.5);\n $('.cytoscape-navigator-wrapper').css('right', 0);\n //$('.cytoscape-navigator-wrapper').css('left', widthCy + leftCy - widthNavigator + widthcBioPortalSideBar + offset - widthSideBar);\n }\n $('.cytoscape-navigator-wrapper').css('z-index', 1039);\n\n //Relative is used so that its position depends on the below properties\n $('.cy-panzoom').css('position', 'relative');\n $('.cy-panzoom').css('top', 2);\n $('.cy-panzoom').css('left', widthCy - 57);\n $('.cy-panzoom').css('z-index', 1039);\n //Makes the width of panzoom container to 0\n $('.cy-panzoom').css('width', 200);\n }\n\n getPathwayData() {\n return this.pathwayDetailsView.getPathwayData();\n }\n\n initCyJS() {\n try{\n panzoom(cytoscape, $); // register extension\n } catch(err){\n console.log(err);\n }\n // cxtmenu( cytoscape, $ ); // register extension\n try { \n regCose(cytoscape); // register extension\n } catch(err){\n console.log(err);\n }\n try { \n navigator(cytoscape); // register extension\n } catch(err){\n console.log(err);\n }\n try { \n grid_guide(cytoscape, $); // register extension\n } catch(err){\n console.log(err);\n }\n try { \n undoRedo(cytoscape); // register extension\n } catch(err){\n console.log(err);\n }\n try { \n contextMenus(cytoscape, $); // register extension\n } catch(err){\n console.log(err);\n }\n try { \n nodeResize(cytoscape, $, konva); // register extension\n } catch(err){\n console.log(err);\n }\n try { \n edgeEditing(cytoscape, $); // register extension\n } catch(err){\n console.log(err);\n }\n try { \n viewUtilities(cytoscape, $); // register extension\n } catch(err){\n console.log(err);\n }\n try { \n cyqtip(cytoscape, $); // register extension\n } catch(err){\n console.log(err);\n }\n try { \n edgeHandles(cytoscape, $);\n } catch(err){\n console.log(err);\n }\n\n this.edgeAddingMode = 0;\n // var allEles = SaveLoadUtilities.parseGraph(sampleGraph);\n this.cy = cytoscape({\n container: this.cyDiv,\n boxSelectionEnabled: true,\n autounselectify: false,\n wheelSensitivity: 0.1,\n style: styleSheet,\n // elements: allEles,\n textureOnViewport: false,\n motionBlur: true,\n layout: {name: 'preset'}\n });\n\n \n\n this.undoRedoManager = this.cy.undoRedo();\n console.log(\"undoRedoManager\" + this.undoRedoManager);\n // Create Manager Classes\n this.shareDBManager = new ShareDBManager(() => {\n const dbDoc = this.shareDBManager.getDoc();\n });\n this.editor = new EditorActionsManager(this.isCollaborative,\n this.shareDBManager,\n this.cy,\n this.isCbioPortal,\n this.undoRedoManager,\n this.portalAccessor,\n this.props.profiles);\n this.shareDBManager.setEditor(this.editor);\n if(this.isCollaborative){\n this.shareDBManager.initShareDB();\n }\n //@ts-ignore\n window.editorActionsManager = this.editor;\n\n\n this.qtipManager = new QtipManager(this.cy, this.editor);\n this.cxtMenuManager = new ContextMenuManager(this.cy, this.editor, this.isCbioPortal,\n this.props.handleOpen, this.undoRedoManager, this.props.isCollaborative);\n this.dragDropNodeAddManager = new DragDropNodeAddPlugin(this.editor, this.cy, this.props.pathwayHandler);\n\n // Initialize panzoom\n this.cy.panzoom(panzoomOpts);\n\n // Node Add initialization\n this.cy.nodeadd(\n {\n // Once the explanationText is cast to uppercase they will be node types\n components:\n [\n {\n container: $('#simpleNodeDiv'),\n nodeType: 'Gene',\n icon: geneImg\n },\n {\n container: $('#familyNodeDiv'),\n nodeType: 'Family',\n icon: familyImg\n },\n {\n container: $('#complexNodeDiv'),\n nodeType: 'Complex',\n icon: complexImg\n },\n {\n container: $('#compartmentNodeDiv'),\n nodeType: 'Compartment',\n icon: compartmentImg\n },\n {\n container: $('#processNodeDiv'),\n nodeType: 'Process',\n icon: processImg\n }\n ]\n\n });\n const self = this;\n const edgeHandleDefaults ={\n preview: true, // whether to show added edges preview before releasing selection\n stackOrder: 4, // Controls stack order of edgehandles canvas element by setting it's z-index\n handleSize: 10, // the size of the edge handle put on nodes\n handleColor: '#1abc9c', // the colour of the handle and the line drawn from it\n handleLineType: 'ghost', // can be 'ghost' for real edge, 'straight' for a straight line, or 'draw' for a draw-as-you-go line\n handleLineWidth: 1, // width of handle line in pixels\n handleNodes: 'node', // selector/filter function for whether edges can be made from a given node\n hoverDelay: 1, // time spend over a target node before it is considered a target selection\n cxt: false, // whether cxt events trigger edgehandles (useful on touch)\n enabled: false, // whether to start the extension in the enabled state\n toggleOffOnLeave: true, // whether an edge is cancelled by leaving a node (true), or whether you need to go over again to cancel (false; allows multiple edges in one pass)\n edgeType: function( sourceNode, targetNode ) {\n // can return 'flat' for flat edges between nodes or 'node' for intermediate node between them\n // returning null/undefined means an edge can't be added between the two nodes\n return 'flat';\n },\n handlePosition: function( node ){\n return 'middle top'; // sets the position of the handle in the format of \"X-AXIS Y-AXIS\" such as \"left top\", \"middle top\"\n },\n loopAllowed: function( node ) {\n // for the specified node, return whether edges from itself to itself are allowed\n return false;\n },\n nodeLoopOffset: -50, // offset for edgeType: 'node' loops\n nodeParams: function( sourceNode, targetNode ) {\n // for edges between the specified source and target\n // return element object to be passed to cy.add() for intermediary node\n return {};\n },\n edgeParams: function( sourceNode, targetNode, i ) {\n // for edges between the specified source and target\n // return element object to be passed to cy.add() for edge\n // NB: i indicates edge index in case of edgeType: 'node'\n return {};\n },\n start: function( sourceNode )\n {\n console.log(\"Inside start\");\n // fired when edgehandles interaction starts (drag on handle)\n var type = self.getGlobalEdgeType();\n console.log(\"Type\");\n console.log(type);\n //self.cy.edgehandles('option', 'ghostEdgeType', type);\n },\n complete: function( sourceNode, targetNodes, addedEntities )\n {\n // @ts-ignore\n console.log(window.edgeAddingMode);\n // // Remove recently added edge !\n // // FBI takes this case from now on :O\n // // We will take care of addition in our manager :)\n self.cy.remove(addedEntities);\n console.log(addedEntities);\n self.editor.addEdge({\n source: sourceNode.id(),\n target: targetNodes[0].id(),\n // @ts-ignore\n type: self.getGlobalEdgeType(window.edgeAddingMode),\n pubmedIDs: [],\n name: \"\"\n });\n },\n stop: function( sourceNode )\n {\n // fired when edgehandles interaction is stopped (either complete with added edges or incomplete)\n //TODO refactor this, so terrible for now\n //$('.edge-palette a').blur().removeClass('active');\n self.edgeAddingMode = -1;\n self.eh.disable();\n self.eh.hide();\n self.props.setActiveEdge(-1);\n },\n };\n //Edge Handles initialization\n\n console.log(\"Edge Handles inside Cytoscape ARea\");\n this.eh = this.cy.edgehandles(edgeHandleDefaults);\n this.eh.disable();\n this.props.editorHandler(this.editor, this.eh, this.undoRedoManager);\n\n if(!this.isCbioPortal)\n this.cy.nodeResize({\n padding: 5, // spacing between node and grapples/rectangle\n undoable: true, // and if cy.undoRedo exists\n\n grappleSize: 8, // size of square dots\n grappleColor: \"#ffc90e\", // color of grapples\n inactiveGrappleStroke: \"inside 1px blue\",\n boundingRectangle: true, // enable/disable bounding rectangle\n boundingRectangleLineDash: [4, 8], // line dash of bounding rectangle\n boundingRectangleLineColor: \"ffc90e\",\n boundingRectangleLineWidth: 1.5,\n zIndex: 999,\n\n moveSelectedNodesOnKeyEvents: function () {\n return true;\n },\n\n minWidth: function (node) {\n var data = node.data(\"resizeMinWidth\");\n return data ? data : 15;\n }, // a function returns min width of node\n minHeight: function (node) {\n var data = node.data(\"resizeMinHeight\");\n return data ? data : 15;\n }, // a function returns min height of node\n\n // Getters for some style properties the defaults returns ele.css('property-name')\n // you are encouraged to override these getters\n getCompoundMinWidth: function (node) {\n return node.style('min-width');\n },\n getCompoundMinHeight: function (node) {\n return node.style('min-height');\n },\n getCompoundMinWidthBiasRight: function (node) {\n return node.style('min-width-bias-right');\n },\n getCompoundMinWidthBiasLeft: function (node) {\n return node.style('min-width-bias-left');\n },\n getCompoundMinHeightBiasTop: function (node) {\n return node.style('min-height-bias-top');\n },\n getCompoundMinHeightBiasBottom: function (node) {\n return node.style('min-height-bias-bottom');\n },\n\n\n isFixedAspectRatioResizeMode: function (node) {\n return node.is(\".fixedAspectRatioResizeMode\")\n },// with only 4 active grapples (at corners)\n isNoResizeMode: function (node) {\n return undefined;\n }, // no active grapples\n\n // These optional function will be executed to set the width/height of a node in this extension\n // Using node.css() is not a recommended way (http://js.cytoscape.org/#eles.style) to do this. Therefore, overriding these defaults\n // so that a data field or something like that will be used to set node dimentions instead of directly calling node.css()\n // is highly recommended (Of course this will require a proper setting in the stylesheet).\n setWidth: function (node, width) {\n node.style('width', width);\n },\n setHeight: function (node, height) {\n node.style('height', height);\n },\n setCompoundMinWidth: function (node, minWidth) {\n node.style('min-width', minWidth);\n },\n setCompoundMinHeight: function (node, minHeight) {\n node.style('min-height', minHeight);\n },\n setCompoundMinWidthBiasLeft: function (node, minWidthBiasLeft) {\n node.style('min-width-bias-left', minWidthBiasLeft);\n },\n setCompoundMinWidthBiasRight: function (node, minHeightBiasRight) {\n node.style('min-width-bias-right', minHeightBiasRight);\n },\n setCompoundMinHeightBiasTop: function (node, minHeightBiasTop) {\n node.style('min-height-bias-top', minHeightBiasTop);\n },\n setCompoundMinHeightBiasBottom: function (node, minHeightBiasBottom) {\n node.style('min-height-bias-bottom', minHeightBiasBottom);\n },\n\n cursors: { // See http://www.w3schools.com/cssref/tryit.asp?filename=trycss_cursor\n // May take any \"cursor\" css property\n default: \"default\", // to be set after resizing finished or mouseleave\n inactive: \"not-allowed\",\n nw: \"nw-resize\",\n n: \"n-resize\",\n ne: \"ne-resize\",\n e: \"e-resize\",\n se: \"se-resize\",\n s: \"s-resize\",\n sw: \"sw-resize\",\n w: \"w-resize\"\n },\n resizeToContentCueImage: resizeCue,\n resizeToContentFunction: this.editor.resizeNodesToContent.bind(this.editor),\n\n });\n\n //Navigator for cytoscape js\n var navDefaults = {\n container: '.cytoscape-navigator-wrapper' // can be a HTML or jQuery element or jQuery selector\n , viewLiveFramerate: 0 // set false to update graph pan only on drag end; set 0 to do it instantly; set a number (frames per second) to update not more than N times per second\n , thumbnailEventFramerate: 10 // max thumbnail's updates per second triggered by graph updates\n , thumbnailLiveFramerate: false // max thumbnail's updates per second. Set false to disable\n , dblClickDelay: 200 // milliseconds\n , removeCustomContainer: true // destroy the container specified by user on plugin destroy\n , rerenderDelay: 100 // ms to throttle rerender updates to the panzoom for performance\n };\n\n //TODO: AMENDMENT declaration removed\n this.cy.navigator(navDefaults); // get navigator instance, nav\n\n const viewUtilitiesOpts = {\n node: {\n highlighted: {\n 'border-width': 2,\n 'border-color': '#bc1142'\n }, // styles for when nodes are highlighted.\n unhighlighted: {\n 'opacity': function (ele: any) {\n // We return the same opacity because to override the unhibhlighted ele opacity in view-utilities\n return ele.css('opacity');\n }\n }// styles for when nodes are unhighlighted.}\n },\n edge: {\n highlighted: {}, // styles for when edges are highlighted.\n unhighlighted: {\n 'opacity': function (ele: any) {\n // We return the same opacity because to override the unhibhlighted ele opacity in view-utilities\n return ele.css('opacity');\n }\n } // styles for when edges are unhighlighted.\n },\n setVisibilityOnHide: false, // whether to set visibility on hide/show\n setDisplayOnHide: true, // whether to set display on hide/show\n neighbor: () => { // return desired neighbors of tapheld node\n return false;\n },\n neighborSelectTime: 500 //ms, time to taphold to select desired neighbors\n };\n\n this.viewUtilities = this.cy.viewUtilities(viewUtilitiesOpts);\n\n this.placePanzoomAndOverlay();\n }\n\n getGlobalEdgeType()\n {\n var type = \"NONE\";\n // @ts-ignore\n if (window.edgeAddingMode === 1)\n {\n type = 'ACTIVATES';\n }\n // @ts-ignore\n else if (window.edgeAddingMode === 2)\n {\n type = 'INHIBITS';\n }\n // @ts-ignore\n else if (window.edgeAddingMode === 3)\n {\n type = 'INDUCES';\n }\n // @ts-ignore\n else if (window.edgeAddingMode === 4)\n {\n type = 'REPRESSES';\n }\n // @ts-ignore\n else if (window.edgeAddingMode === 5)\n {\n type = 'BINDS';\n }\n return type;\n }\n\n initCyHandlers(){\n var that = this;\n\n var tappedBefore: any;\n var tappedTimeout: number;\n this.cy.on('tap', function (event: any) {\n var tappedNow = event.target;\n if (tappedTimeout !== -1 && tappedBefore !== -1) {\n clearTimeout(tappedTimeout);\n }\n if (tappedBefore === tappedNow) {\n tappedNow.trigger('doubleTap');\n tappedBefore = -1;\n } else {\n // @ts-ignore TODO AMENDMENTsa\n tappedTimeout = setTimeout(function () {\n tappedBefore = -1;\n }, 300);\n\n if(tappedNow && tappedNow.isNode && tappedNow.isNode()){\n $(\".qtip\").remove();\n }\n if(tappedNow && tappedNow.isEdge && tappedNow.isEdge()){\n $(\".qtip\").remove();\n }\n tappedBefore = tappedNow;\n }\n });\n\n this.cy.on('doubleTap', 'node', function (e: any) {\n\n // if cBioPortal ignore\n if(that.props.isCbioPortal) return;\n\n const eventIsDirect = (e.target === this);\n \n if (eventIsDirect) { \n $(\".qtip\").remove();\n that.qtipManager.addQtipToElements(e.target); \n e.target.trigger(\"showqtipevent\");\n }\n });\n \n this.cy.on('doubleTap', 'edge', function (e: any) {\n \n // if cBioPortal ignore\n if(that.props.isCbioPortal) return;\n \n const eventIsDirect = (e.target === this);\n \n if (eventIsDirect) {\n $(\".qtip\").remove();\n that.qtipManager.addQtipToElements(e.target); \n e.target.trigger(\"showqtipevent\");\n }\n });\n\n this.cy.on('select', 'node', (e: any) => {\n this.editor.pushSelectedNodeStack(e.target);\n });\n\n // this.cy.on('select', 'edge', function( e )\n // {\n // var eventIsDirect = (e.target === this);\n // $(\".qtip\").remove();\n //\n // if( eventIsDirect ) {\n // that.qtipManager.addQtipToElements(e.target);\n // }\n // });\n\n this.cy.on('unselect', 'node', (e: any) => {\n this.editor.removeElementFromSelectedNodeStack(e.target);\n });\n\n this.cy.on('free', 'node', (e: any) => {\n //Collect all nodes with descendants in case of compounds\n var selectedNodes = this.cy.nodes(':selected');\n var nodes = e.target;\n nodes = nodes.union(nodes.descendants());\n nodes = nodes.union(selectedNodes);\n this.editor.moveElements(nodes);\n });\n\n this.cy.on('layoutstop', () => {\n this.editor.postLayout();\n });\n\n // //TODO fix this when cytoscape is updated !!!\n // //Due to cytoscape.js bug, only workaround that worked :(\n // this.cy.on('add', 'node', function(event)\n // {\n // // event.target.select();\n // this.cy.style().update();\n // this.cy.forceRender();\n // });\n\n this.cy.on(\"noderesize.resizeend\", (_e: any, _type: any, node: any) => {\n \n //Updates 'data' properties from 'style'\n node.data('w', node.width());\n node.data('h', node.height());\n //Used for collaborative mode\n this.editor.resizeElements(node);\n });\n\n this.cy.on('select', 'edge', (e: any) => {\n this.lastSelectedEdge = e.target;\n });\n\n this.cy.on('bendPointMovement', () => {\n this.editor.updateEdgeBendPoints(this.lastSelectedEdge);\n });\n\n this.cy.on('noderesize.moveend', () => {\n this.editor.changeNodePositionsByArrows(this.cy.nodes(\":selected\"));\n });\n\n\n }\n\n initKeyboardHandlers() {\n if (!this.isCollaborative && !this.isCbioPortal) {\n $(document).keydown((e: any) => {\n if (e.which === 89 && (e.ctrlKey || e.metaKey)) {\n this.undoRedoManager.redo();\n }\n else if (e.which === 90 && (e.ctrlKey || e.metaKey)) {\n this.undoRedoManager.undo();\n }\n });\n }\n else {\n $('a[role=\"redo\"]').hide();\n $('a[role=\"undo\"]').hide();\n }\n $(document).keydown((e: any) => {\n if (e.which === 65 && (e.ctrlKey || e.metaKey)) {\n // @ts-ignore\n var tn = document.activeElement.tagName;\n if (tn != \"TEXTAREA\" && tn != \"INPUT\") {\n e.preventDefault();\n this.cy.elements().select();\n }\n }\n else if (e.which === 8 || e.which === 46) {\n // @ts-ignore\n var tn = document.activeElement.tagName;\n if (tn != \"TEXTAREA\" && tn != \"INPUT\") {\n var selectedElements = this.cy.$(':selected');\n this.editor.removeElement(selectedElements);\n }\n }\n });\n }\n\n initUndoRedoFunctionality() {\n if (this.isCollaborative || this.isCbioPortal) {\n $('[role=\"undo\"]').hide();\n $('[role=\"redo\"]').hide();\n /* TODO: AMENDMENT\n document.getElementById(\"localOrCollaborativeToolbar\").style.display = \"none\";\n */\n }\n }\n\n\n initCBioPortalFunctionalities() {\n if (this.isCbioPortal) {\n const contextMenu = this.cy.contextMenus('get');\n\n contextMenu.destroy();\n }\n }\n\n\n}","import React from 'react';\nimport {observer} from \"mobx-react\";\nimport {action, computed, makeObservable, observable} from \"mobx\";\nimport autobind from \"autobind-decorator\";\nimport {Table, DropdownButton,MenuItem, Checkbox, Button, Label} from \"react-bootstrap\";\nimport PathwayActions from '../utils/PathwayActions.js';\nimport {IPathwayMapperTable} from \"./react-pathway-mapper\";\n\ninterface IRankingProps{\n pathwayActions: PathwayActions;\n bestPathwaysAlgos: any[][];\n tableComponent: (data: IPathwayMapperTable[], selectedPathway: string, onPathwaySelect: (pathway: string) => void) => JSX.Element;\n patientView ?: boolean;\n}\n\n\n@observer\nexport default class Ranking extends React.Component{\n @observable\n bestPathways: any[];\n\n @observable\n dropDownTitle: string;\n\n @observable\n selectedPathway: string;\n isPercentageMatch: number;\n isAlterationEnabled: number;\n\n @observable\n isExpanded: boolean;\n\n readonly COUNT_PERC_EXPLANATION = \"Whether we should favor the number of genes of interest matching the ones in a pathway or the percentage of such genes in that pathway. For instance, suppose genes of interest are A, B, and C, and the pathway contains genes B, C, D, and E. When we consider count, the score is 2 (for the two genes that match). However, when we consider percentage the score will be 50% as 2 of the 4 genes in the pathway are among genes of interest.\";\n readonly ALTERATION_EXPLANATION = \"When this is checked, each matching gene will not directly contribute to the score as 1 unit but with the alteration frequency percentage of that gene. For instance, suppose genes of interest are A, B, and C with alteration frequencies of 0.5, 0.2, and 0.3, respectively, and the pathway contains genes B, C, D, and E. When this is option isn't checked, the score will be 2 for match count and 50% for the match percentage. However, when this option is checked, the scores will be 0.2+0.3=0.5 and (0.2+0.3)/4=12.5% for match count and percentage, respectively.\";\n \n\n constructor(props: IRankingProps){\n super(props);\n makeObservable(this);\n \n this.isPercentageMatch = 0;\n this.isAlterationEnabled = 0;\n this.dropDownTitle = \"Match count\";\n this.isExpanded = false;\n this.setBestPathwayMethod(0);\n this.selectedPathway = this.bestPathways[0].pathwayName;\n \n }\n\n @autobind\n setBestPathwayMethod(i: number){\n this.bestPathways = this.props.bestPathwaysAlgos[i];\n //this.selectedPathway = this.bestPathways[0].pathwayName;\n //this.props.pathwayActions.changePathway(this.selectedPathway);\n }\n\n @autobind\n onPathwayClick(pathway: string){\n // console.log(pathway);\n this.selectedPathway = pathway;\n this.props.pathwayActions.changePathway(this.selectedPathway);\n }\n\n @autobind\n onApplyClick(){\n // Mapping from dropdown + checkbox selection to pathway method.\n this.setBestPathwayMethod(2 * this.isAlterationEnabled + this.isPercentageMatch);\n }\n\n\n componentDidMount(): void {\n this.props.pathwayActions.changePathway(this.selectedPathway);\n }\n\n render(){\n const lengthThreshold = 13;\n\n \n return (\n
\n\n {/*\n
\n  Pathways\n
*/}\n\n { this.props.tableComponent &&\n this.props.tableComponent(\n this.bestPathways.map((data: any) => ({name: data.pathwayName, score: data.score, genes: data.genesMatched})),\n this.selectedPathway,\n this.onPathwayClick)\n }\n {(!this.props.patientView &&\n
\n\n\n {\n
\n \n  Ranking options\n \n
\n }\n
\n \n {this.isPercentageMatch = 0; this.dropDownTitle = \"Match count\"; this.onApplyClick();} }>Match count\n {this.isPercentageMatch = 1; this.dropDownTitle = \"Match percentage\"; this.onApplyClick();}}>Match percentage\n \n   \n
\n\n {this.isAlterationEnabled = (this.isAlterationEnabled === 1) ? 0 : 1; this.onApplyClick();}}\n style={{fontSize: \"13px\", marginTop: \"18px\", bottom: \"4px\"}}>\n Consider alteration frequency  \n \n \n
\n
\n )}\n
\n \n );\n \n }\n\n \n}\n","import SaveLoadUtilities from '../utils/SaveLoadUtility.js';\nimport {saveAs} from 'file-saver';\nimport EditorActionsManager from './EditorActionsManager.js';\nimport { observable, computed, makeObservable } from 'mobx';\nimport SaveLoadUtility from '../utils/SaveLoadUtility';\n\n\nexport interface IPathwayInfo{\n fileName: string;\n pathwayTitle: string;\n pathwayDetails: string;\n}\n\n\nexport default class FileOperationsManager{\n\n @observable\n pathwayInfo: IPathwayInfo;\n\n constructor(){\n makeObservable(this);\n this.pathwayInfo = {pathwayTitle: \"New Pathway\", pathwayDetails: \"\", fileName: \"pathway.txt\"};\n }\n\n\n @computed get\n getPathwayInfo(){\n return this.pathwayInfo;\n }\n\n setPathwayInfo(other: IPathwayInfo){\n this.pathwayInfo = other;\n }\n \n // see http://stackoverflow.com/questions/16245767/creating-a-blob-from-a-base64-string-in-javascript\n b64toBlob(b64Data, contentType, sliceSize = 512)\n {\n contentType = contentType || '';\n\n var byteCharacters = atob(b64Data);\n var byteArrays = [];\n\n for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {\n var slice = byteCharacters.slice(offset, offset + sliceSize);\n\n var byteNumbers = new Array(slice.length);\n for (var i = 0; i < slice.length; i++) {\n byteNumbers[i] = slice.charCodeAt(i);\n }\n\n var byteArray = new Uint8Array(byteNumbers);\n\n byteArrays.push(byteArray);\n }\n\n var blob = new Blob(byteArrays, {type: contentType});\n return blob;\n };\n\n saveAsJPEG(cy: any)\n {\n // var fileName = getFileName();\n const graphData = cy.jpeg();\n // this is to remove the beginning of the pngContent: data:img/png;base64,\n const b64data = graphData.substr(graphData.indexOf(\",\") + 1);\n const imageData = this.b64toBlob(b64data, \"image/jpeg\");\n const blob = new Blob([imageData]);\n saveAs(blob, \"pathway.jpg\");\n };\n\n saveAsSVG(editor: EditorActionsManager){\n const returnString: any = editor.exportSVG();\n const fileName = 'pathway.svg';\n const blob = new Blob([returnString], {type: \"text/plain;charset=utf-8\"});\n saveAs(blob, fileName);\n }\n\n saveAsPNG(cy: any)\n {\n // var fileName = getFileName();\n const graphData = cy.png();\n // this is to remove the beginning of the pngContent: data:img/png;base64,\n const b64data = graphData.substr(graphData.indexOf(\",\") + 1);\n const imageData = this.b64toBlob(b64data, \"image/png\");\n const blob = new Blob([imageData]);\n saveAs(blob, \"pathway.png\");\n };\n \n\n saveGraph(isSIFNX: boolean, editor: EditorActionsManager)\n {\n const pathwayData = this.pathwayInfo;\n const returnString = (isSIFNX) ? SaveLoadUtility.exportAsSIFNX(pathwayData, editor.cy.json()):\n SaveLoadUtility.exportGraph(pathwayData, editor.cy, editor.edgeEditing, editor.cy.json());\n const blob = new Blob([returnString], {type: \"text/plain;charset=utf-8\"});\n saveAs(blob, pathwayData.fileName);\n };\n}","import React from 'react';\nimport {Modal, Button} from 'react-bootstrap';\nimport { EModalType } from '../ui/react-pathway-mapper';\n\ninterface IConfirmationModalProps{\n isModalShown: boolean;\n handleClose: (modalId: EModalType) => void;\n}\n\nexport default class ConfirmationModal extends React.Component{\n\n static pendingFunction: Function;\n\n constructor(props: IConfirmationModalProps){\n super(props);\n\n }\n\n render(){\n\n\n return(\n {this.props.handleClose(EModalType.CONFIRMATION);}}\n >\n \n \n

Confirmation

\n
\n
\n \n
\n All unsaved changes will be lost. Do you want to continue?\n
\n
\n \n \n \n\n \n \n );\n }\n}","import React from 'react';\nimport {Navbar, Nav, NavDropdown, MenuItem, NavItem} from 'react-bootstrap';\nimport pathways from \"../data/pathways.json\";\nimport PathwayActions from '../utils/PathwayActions';\nimport autobind from 'autobind-decorator';\nimport SaveLoadUtility from '../utils/SaveLoadUtility';\nimport { EModalType } from './react-pathway-mapper';\nimport ConfirmationModal from '../modals/ConfirmationModal';\n\ninterface IMenubarProps{\n pathwayActions: PathwayActions;\n handleOpen: (modalId: EModalType) => void;\n setActiveEdge: Function;\n}\n\n\nexport default class Menubar extends React.Component{\n\n\n constructor(props: IMenubarProps){\n super(props);\n }\n\n render(){\n const nodeTypes = [\"Gene\", \"Family\", \"Complex\", \"Compartment\", \"Process\"];\n const edgeTypes = [\"Activates\", \"Inhibits\", \"Induces\", \"Represses\", \"Binds\"];\n\n const pathwayDropdownData: {[pwHead: string]: string[]} = {};\n for(const pwName of Object.keys(pathways)){\n // If a pathway name ain't include 'pathway' word then it is under pancanatlas.\n const isPancanatlas = !pwName.includes('pathway');\n const dashPos = pwName.indexOf('-');\n const pwHead = (isPancanatlas) ? 'PanCanAtlas' : pwName.substring(0, dashPos);\n if(pwHead in pathwayDropdownData){\n pathwayDropdownData[pwHead].push(pwName);\n } else {\n pathwayDropdownData[pwHead] = [pwName];\n }\n }\n\n return(\n \n \n \n \n );\n }\n}","import _ from \"lodash\";\n\nexport default class GridOptionsManager\n{\n\n static defaultGridGuideOptions = \n {\n // On/Off Modules\n /* From the following four snap options, at most one should be true at a given time */\n snapToGridOnRelease: false, // Snap to grid on release\n snapToGridDuringDrag: false, // Snap to grid during drag\n snapToAlignmentLocationOnRelease: false, // Snap to alignment location on release\n snapToAlignmentLocationDuringDrag: false, // Snap to alignment location during drag\n distributionGuidelines: false, // Distribution guidelines\n geometricGuideline: false, // Geometric guidelines\n initPosAlignment: false, // Guideline to initial mouse position\n centerToEdgeAlignment: false, // Center to edge alignment\n resize: false, // Adjust node sizes to cell sizes\n parentPadding: false, // Adjust parent sizes to cell sizes by padding\n drawGrid: false, // Draw grid background\n\n // General\n gridSpacing: 20, // Distance between the lines of the grid.\n\n // Draw Grid\n zoomDash: true, // Determines whether the size of the dashes should change when the drawing is zoomed in and out if grid is drawn.\n panGrid: true, // Determines whether the grid should move then the user moves the graph if grid is drawn.\n gridStackOrder: -1, // Namely z-index\n gridColor: '#dedede', // Color of grid lines\n lineWidth: 1.0, // Width of grid lines\n\n // Guidelines\n guidelinesStackOrder: 4, // z-index of guidelines\n guidelinesTolerance: 5.00, // Tolerance distance for rendered positions of nodes' interaction.\n guidelinesStyle: { // Set ctx properties of line. Properties are here:\n strokeStyle: \"#4286f4\", // color of geometric guidelines\n geometricGuidelineRange: 750, // range of geometric guidelines\n range: 500, // max range of distribution guidelines\n minDistRange: 10, // min range for distribution guidelines\n distGuidelineOffset: 10, // shift amount of distribution guidelines\n horizontalDistColor: \"#4286f4\", // color of horizontal distribution alignment\n verticalDistColor: \"#4286f4\", // color of vertical distribution alignment\n initPosAlignmentColor: \"#34495E\", // color of alignment to initial mouse location\n lineDash: [6, 8], // line style of geometric guidelines\n horizontalDistLine: [0, 0], // line style of horizontal distribution guidelines\n verticalDistLine: [0, 0], // line style of vertical distribution guidelines\n initPosAlignmentLine: [0, 0], // line style of alignment to initial mouse position\n },\n\n // Parent Padding\n parentSpacing: -1 // -1 to set paddings of parents to gridSpacing\n };\n currentProperties: any;\n cy: any;\n constructor(cy: any)\n {\n this.cy = cy;\n\n this.currentProperties = {};\n this.changeParameters(GridOptionsManager.defaultGridGuideOptions);\n\n }\n\n changeParameters(params)\n {\n this.currentProperties = _.clone(params);\n this.refreshGridOptionsExtension();\n }\n\n getCurrentOptions()\n {\n return this.currentProperties;\n }\n\n getDefaultOptions()\n {\n return GridOptionsManager.defaultGridGuideOptions;\n }\n\n setSnapToGuidelines(state)\n {\n this.currentProperties.geometricGuideline = state;\n this.currentProperties.snapToAlignmentLocationDuringDrag = state;\n this.currentProperties.distributionGuidelines = state;\n this.refreshGridOptionsExtension();\n //this.appManager.gridOptionsView.changeParameters();\n }\n\n setShowGrid(state)\n {\n this.currentProperties.drawGrid = state;\n this.currentProperties.snapToGridDuringDrag = state;\n this.refreshGridOptionsExtension();\n //window.appManager.gridOptionsView.changeParameters();\n }\n\n refreshGridOptionsExtension()\n {\n this.cy.gridGuide(this.currentProperties);\n }\n\n //TODO expose individual functions related for changing parameters from toolbar here\n\n}\n","import React from 'react';\nimport {Modal, Form, FormGroup, Col, Row, FormControl, ControlLabel, Checkbox, Button, InputGroup} from 'react-bootstrap';\nimport { EModalType } from '../ui/react-pathway-mapper';\nimport EditorActionsManager from '../managers/EditorActionsManager';\nimport GridOptionsManager from '../managers/GridOptionsManager';\nimport PathwayActions from '../utils/PathwayActions';\nimport { observer } from 'mobx-react';\nimport { makeObservable, observable } from 'mobx';\ninterface IGridSettingsProps{\n isModalShown: boolean;\n handleClose: Function;\n pathwayActions: PathwayActions;\n}\n\nexport enum EGridType{\n GRID,\n GUIDE,\n NONE\n}\n\n@observer\nexport default class GridSettings extends React.Component{\n\n\n\n @observable\n private gridSize: number;\n \n @observable\n private guideColor: string;\n\n private defaultSettings = GridOptionsManager.defaultGridGuideOptions;\n\n @observable\n private enabledType: EGridType;\n constructor(props: IGridSettingsProps){\n super(props);\n makeObservable(this);\n \n this.gridSize = this.defaultSettings.gridSpacing;\n this.guideColor = this.defaultSettings.guidelinesStyle.strokeStyle;\n }\n\n setEnabledType(newType: EGridType){\n if(newType === this.enabledType){\n this.enabledType = EGridType.NONE;\n return;\n }\n\n this.enabledType = newType;\n }\n\n render(){\n\n return(\n {this.enabledType = this.props.pathwayActions.enabledType;}}\n onHide={() => {\n this.props.handleClose(EModalType.GRID);\n }}>\n \n

Grid Settings

\n
\n \n
\n \n \n Enable Grids:\n \n\n \n {this.setEnabledType(EGridType.GRID);}}>\n \n \n \n \n Enable Guidelines\n \n\n \n {this.setEnabledType(EGridType.GUIDE);}}>\n \n \n \n \n Grid Size:\n \n\n \n {this.gridSize = e.target.value;}}/>\n \n \n \n \n Guideline Color:\n \n\n \n {this.guideColor = e.target.value;}}/>\n \n \n
\n
\n\n \n \n \n
\n );\n\n\n } \n}","import autobind from 'autobind-decorator'\nimport { observable, computed, makeObservable } from 'mobx'\nimport EditorActionsManager from '../managers/EditorActionsManager'\nimport FileOperationsManager, {\n IPathwayInfo\n} from '../managers/FileOperationsManager'\nimport $ from 'jquery'\nimport {\n IProfileMetaData,\n IPathwayData,\n EModalType\n} from '../ui/react-pathway-mapper'\nimport SaveLoadUtility from './SaveLoadUtility'\nimport ViewOperationsManager from '../managers/ViewOperationsManager'\nimport GridOptionsManager from '../managers/GridOptionsManager'\nimport { ILayoutProperties } from '../modals/LayoutProperties'\nimport { EGridType } from '../modals/GridSettings'\nimport ConfirmationModal from '../modals/ConfirmationModal'\n\nexport default class PathwayActions {\n @observable\n selectedPathway: string\n fileManager: FileOperationsManager\n editor: EditorActionsManager\n undoRedoManager: any\n pathwayHandler: (pathwayName: string) => void\n handleOpen: (modalId: EModalType) => void\n eh: any\n profiles: IProfileMetaData[]\n gridOptionsManager: GridOptionsManager\n\n uploader: any\n merger: any\n isCBioPortal: boolean\n isCollaborative: boolean\n viewOperationsManager: ViewOperationsManager\n overlayUploader: any\n\n @observable\n enabledType: EGridType\n\n constructor(\n pathwayHandler: (pathwayName: string) => void,\n profiles: IProfileMetaData[],\n fileManager: FileOperationsManager,\n handleOpen: (modalId: EModalType) => void,\n isCBioPortal: boolean,\n isCollaborative: boolean\n ) {\n this.pathwayHandler = pathwayHandler\n this.profiles = profiles\n this.fileManager = fileManager\n this.handleOpen = handleOpen\n this.isCBioPortal = isCBioPortal\n this.isCollaborative = isCollaborative\n this.enabledType = EGridType.NONE\n\n makeObservable(this);\n }\n\n emphasiseQueryGenes(queryGenes: string[]) {\n if (this.editor)\n this.editor.cy.nodes().forEach((node: any) => {\n const nodeName = node.data().name\n const nodeType = node.data().type\n if (queryGenes.includes(nodeName) && nodeType === 'GENE') {\n node.style({ 'border-width': '4px', 'font-weight': 'bold' })\n }\n })\n }\n\n getSelectedNodes() {\n return this.editor.cy.nodes(':selected')\n }\n\n setLayoutProperties(layoutProperties: ILayoutProperties) {\n this.editor.saveLayoutProperties(layoutProperties)\n }\n\n doesCyHaveElements() {\n return this.editor.cy.elements().length > 0\n }\n\n @autobind\n toggleGrid(isEnabled: boolean) {\n this.gridOptionsManager.setSnapToGuidelines(false)\n this.gridOptionsManager.setShowGrid(isEnabled)\n }\n\n @autobind\n toggleGuide(isEnabled: boolean) {\n this.gridOptionsManager.setSnapToGuidelines(isEnabled)\n this.gridOptionsManager.setShowGrid(false)\n }\n\n adjustGridSettings(gridSize: number, color: string) {\n this.gridOptionsManager.currentProperties.gridSpacing = gridSize\n this.gridOptionsManager.currentProperties.guidelinesStyle.strokeStyle = color\n this.gridOptionsManager.currentProperties.guidelinesStyle.horizontalDistColor = color\n this.gridOptionsManager.currentProperties.guidelinesStyle.verticalDistColor = color\n }\n\n @autobind\n resizeToContent() {\n this.editor.resizeNodesToContent(this.editor.cy.nodes())\n }\n\n @autobind\n align(param: string) {\n this.viewOperationsManager.handleNodeAlignment(param)\n }\n\n @autobind\n onChangeFile(e: any, isMerge: boolean) {\n const file = e.target.files[0] as File\n console.log(file)\n this.processFile(file, isMerge)\n }\n\n uploadOverlay() {\n this.overlayUploader.click()\n }\n\n overlayFromText(file: File) {\n // Create a new FormData object.\n const formData = new FormData()\n formData.append('graphFile', file)\n const request = new XMLHttpRequest()\n request.onreadystatechange = () => {\n if (\n request.readyState === XMLHttpRequest.DONE &&\n request.status === 200\n ) {\n console.log('request.responseText')\n console.log(request.responseText)\n const linesOfData = request.responseText.split('\\n')\n if (linesOfData.length > 0) {\n const profileIdsFromFile = linesOfData[0].split('\\t').slice(1)\n console.log(profileIdsFromFile)\n this.profiles.push(\n ...profileIdsFromFile.map(id => ({ profileId: id, enabled: true }))\n )\n } else {\n console.log('No valid data')\n }\n this.editor.addGenomicData(request.responseText)\n }\n }\n request.open('POST', '/loadGraph')\n request.send(formData)\n }\n\n @autobind\n upload() {\n if (this.editor.cy.elements().length > 0) {\n this.handleOpen(EModalType.CONFIRMATION)\n ConfirmationModal.pendingFunction = () => {\n this.uploader.click()\n }\n } else {\n this.uploader.click()\n }\n }\n\n @autobind\n merge() {\n this.merger.click()\n }\n\n setOverlayUploader(inputRef: any) {\n this.overlayUploader = inputRef\n }\n\n @autobind\n setUploaders(inputRef: any, isMerge: boolean) {\n if (isMerge) this.merger = inputRef\n else this.uploader = inputRef\n }\n\n @computed\n get getPathwayInfo() {\n return this.fileManager.getPathwayInfo\n }\n\n @autobind\n setPathwayInfo(other: IPathwayInfo) {\n this.fileManager.setPathwayInfo(other)\n }\n\n @autobind\n undo() {\n this.undoRedoManager.undo()\n }\n\n @autobind\n redo() {\n this.undoRedoManager.redo()\n }\n\n @autobind\n export(isSIFNX: boolean) {\n //this.editor.cy.remove('.eh-handle');\n this.eh.hide()\n this.fileManager.saveGraph(isSIFNX, this.editor)\n }\n\n @autobind\n resetUndoStack() {\n this.undoRedoManager.reset()\n }\n\n @autobind\n newPathway() {\n const commitNewPathway = () => {\n this.editor.removeAllElements()\n this.fileManager.setPathwayInfo({\n pathwayTitle: 'New Pathway',\n pathwayDetails: '',\n fileName: 'pathway.txt'\n })\n //this.removeAllData()\n this.resetUndoStack()\n this.pathwayHandler('Dummy')\n }\n\n if (this.editor.cy.elements().length > 0) {\n this.handleOpen(EModalType.CONFIRMATION)\n ConfirmationModal.pendingFunction = commitNewPathway\n } else {\n commitNewPathway()\n }\n }\n\n @autobind\n changePathway(pathwayName: string) {\n this.pathwayHandler(pathwayName)\n\n if (!this.isCBioPortal) {\n this.fileManager.setPathwayInfo({\n pathwayTitle: pathwayName,\n pathwayDetails: '',\n fileName: pathwayName + '.txt'\n })\n // At the beginning changePathway is called editor is not ready hence removeData shall not be called\n if (this.editor) {\n //this.removeAllData()\n this.resetUndoStack()\n }\n }\n }\n\n @autobind\n highlightNeighbours() {\n this.editor.highlightNeighbors()\n }\n\n @autobind\n highlightSelected() {\n this.editor.highlightSelected()\n }\n\n @autobind\n validateGenes() {\n this.editor.validateGenes()\n }\n\n @autobind\n showAll() {\n this.editor.showAllNodes()\n }\n\n @autobind\n hideSelected() {\n this.editor.hideSelectedNodes()\n }\n\n @autobind\n deleteSelected() {\n const selectedEles = this.editor.cy.elements(':selected')\n this.editor.removeElement(selectedEles)\n }\n\n @autobind\n addEdge(edgeTypeIndex: number) {\n // @ts-ignore\n window.edgeAddingMode = edgeTypeIndex + 1\n console.log('edgeTypeIndex')\n console.log(edgeTypeIndex)\n if (edgeTypeIndex === -1) {\n this.eh.disable()\n this.eh.hide()\n return\n } else {\n // @ts-ignore\n this.eh.enable()\n }\n }\n\n @autobind\n changeNodeName(oldName: string, newName: string) {\n const cyNode = this.editor.cy.$('[name=\"' + oldName + '\"]')[0]\n console.log(this.editor.cy.$('[name=\"' + oldName + '\"]'))\n this.editor.changeName(cyNode, newName)\n }\n\n @autobind\n addNode(nodeType) {\n const nodeData = {\n type: nodeType.toUpperCase(),\n name: 'New ' + nodeType,\n w: '150',\n h: '52'\n }\n const extent = this.editor.cy.extent()\n const posData = {\n x: (extent.x1 + extent.x2) / 2,\n y: (extent.y1 + extent.y2) / 2\n }\n\n this.editor.addNode(nodeData, posData)\n this.pathwayHandler('Additional Pathway')\n }\n\n @autobind\n searchGene(geneName: string) {\n const selector = \"node[name @*= '\" + geneName + \"']\"\n const nodesContainingSearchedGene = this.editor.cy.filter(selector)\n let nodesToSelect = this.editor.cy.collection()\n nodesContainingSearchedGene.forEach(function(ele, index) {\n if (\n !ele.hasClass('highlightedNode') &&\n !ele.hasClass('invalidGeneHighlight')\n )\n nodesToSelect = nodesToSelect.union(ele)\n })\n this.editor.highlightBySearch(nodesToSelect)\n }\n\n @autobind\n removeAllData() {\n this.editor.removeGenomicData()\n this.profiles.length = 0\n }\n\n @autobind\n removeAllHighlight() {\n this.editor.removeAllHighlight()\n }\n\n @autobind\n processFile(file: File, isMerge: boolean) {\n // Create a new FormData object.\n const formData = new FormData()\n formData.append('graphFile', file)\n const request = new XMLHttpRequest()\n request.onreadystatechange = () => {\n if (\n request.readyState === XMLHttpRequest.DONE &&\n request.status === 200\n ) {\n const pathwayData: IPathwayData = SaveLoadUtility.parseGraph(\n request.responseText,\n false\n )\n console.log('Process File')\n\n if (isMerge) {\n console.log('It is a merge')\n this.editor.mergeGraph(pathwayData.nodes, pathwayData.edges)\n const graphJSON = this.editor.cy.json()\n\n //TODO change file name maybe, probabyly not necessary ?\n // Pathway nodes and edges are now combination of both previous and new pathway.\n pathwayData.nodes = graphJSON.elements.nodes //this.editor.cy.nodes().map((node) => ({data: node.data()}));\n pathwayData.edges = graphJSON.elements.edges //this.editor.cy.edges().map((edge) => ({data: edge.data()}));\n pathwayData.title = 'Additional Pathway'\n } else {\n this.editor.loadFile(pathwayData.nodes, pathwayData.edges)\n this.fileManager.setPathwayInfo({\n pathwayTitle: pathwayData.title,\n pathwayDetails: pathwayData.description,\n fileName: pathwayData.title + '.txt'\n })\n }\n\n this.pathwayHandler(pathwayData.title + '_imported')\n this.resetUndoStack()\n } else {\n console.error(\n 'Process File error: ' + request.status + ', ' + request.responseText\n )\n }\n }\n request.open('POST', '/loadGraph')\n request.send(formData)\n }\n\n @autobind\n saveAs(type: string) {\n if (type === 'SVG') {\n this.fileManager.saveAsSVG(this.editor)\n } else if (type === 'PNG') {\n this.fileManager.saveAsPNG(this.editor.cy)\n } else if (type === 'JPEG') {\n this.fileManager.saveAsJPEG(this.editor.cy)\n }\n }\n\n @autobind\n editorHandler(\n editor,\n eh,\n undoRedoManager,\n viewOperationsManager: ViewOperationsManager,\n gridOptionsManager: GridOptionsManager\n ) {\n this.editor = editor\n this.eh = eh\n this.undoRedoManager = undoRedoManager\n this.viewOperationsManager = viewOperationsManager\n this.gridOptionsManager = gridOptionsManager\n }\n\n @autobind\n loadSampleData() {\n const data =\n 'gene\\tlung\\tovarian\\tbreast\\ty\\n' +\n 'PTEN\\t-7\\t-20\\t10\\t20\\n' +\n 'NF1\\t-12\\t-4\\t30\\t20\\n' +\n 'PIK3CA\\t18\\t40\\t-50\\t20\\n' +\n 'KRAS\\t11\\t-5\\t0\\t20\\n' +\n 'ZIYA\\t0\\t-2\\t0\\t20\\n' +\n 'AKT1\\t3\\t30\\t-10\\t20\\n' +\n 'AKT2\\t6\\t-3\\t20\\t20\\n' +\n 'AKT3\\t6\\t-3\\t20\\t20\\n' +\n '\\n'\n this.editor.addGenomicData(data)\n this.profiles.push(\n { profileId: 'lung', enabled: true },\n { profileId: 'ovarian', enabled: true },\n { profileId: 'breast', enabled: true }\n )\n }\n\n @autobind\n performLayout() {\n this.editor.performLayout()\n }\n}\n","import React from \"react\";\nimport {Panel, Button, Col, Row, ListGroup, ListGroupItem} from \"react-bootstrap\";\nimport PathwayActions from \"../utils/PathwayActions\";\n\n// @ts-ignore\nimport geneImg from \"../images/nodes/gene.svg\";\n// @ts-ignore\nimport familyImg from \"../images/nodes/family.svg\";\n// @ts-ignore\nimport complexImg from \"../images/nodes/complex.svg\";\n// @ts-ignore\nimport compartmentImg from \"../images/nodes/compartment.svg\";\n// @ts-ignore\nimport processImg from \"../images/nodes/process.svg\";\n// @ts-ignore\nimport acImg from \"../images/edges/activates.svg\";\n// @ts-ignore\nimport inhImg from \"../images/edges/inhibits.svg\";\n// @ts-ignore\nimport indImg from \"../images/edges/induces.svg\";\n// @ts-ignore\nimport repImg from \"../images/edges/represses.svg\";\n// @ts-ignore\nimport bindImg from \"../images/edges/binds.svg\";\n\nimport \"../css/supp.css\"\nimport { makeObservable, observable } from \"mobx\";\nimport { observer } from \"mobx-react\";\nimport autobind from \"autobind-decorator\";\nimport { EModalType } from \"./react-pathway-mapper\";\n\ninterface ISideBarProps{\n pathwayActions: PathwayActions;\n setActiveEdgeHandler: Function;\n handleOpen: Function;\n}\n\n@observer\nexport default class Sidebar extends React.Component{\n\n @observable\n activeEdge: number;\n\n constructor(props: ISideBarProps){\n super(props);\n makeObservable(this);\n \n this.activeEdge = -1;\n props.setActiveEdgeHandler(this.setActiveEdge);\n }\n\n addEdge(edgeIndex: number){\n if(edgeIndex === this.activeEdge){\n this.setActiveEdge(-1);\n this.props.pathwayActions.addEdge(-1);\n return;\n }\n this.setActiveEdge(edgeIndex);\n this.props.pathwayActions.addEdge(edgeIndex);\n }\n\n @autobind\n setActiveEdge(edgeIndex: number){\n this.activeEdge = edgeIndex;\n }\n\n render(){\n\n const nodeTypes = [\"Gene\", \"Family\", \"Complex\", \"Compartment\", \"Process\"];\n const edgeTypes = [\"Activates\", \"Inhibits\", \"Induces\", \"Represses\", \"Binds\"];\n\n const nodeImgs = [geneImg, familyImg, complexImg, compartmentImg, processImg];\n const edgeImgs = [acImg, inhImg, indImg, repImg, bindImg];\n\n const nodeIds = [\"simpleNodeDiv\", \"familyNodeDiv\", \"complexNodeDiv\", \"compartmentNodeDiv\", \"processNodeDiv\"];\n\n return(\n
\n \n \n Network\n \n \n \n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n\n \n \n Node Palette\n \n \n \n {\n nodeIds.map((id) => {\n return (\n
\n
);\n })\n }\n
\n
\n\n \n \n Interaction Palette\n \n \n
\n {\n edgeTypes.map((edgeType: string, i: number) => {\n return ();\n })\n }\n
\n
\n
\n
\n );\n }\n}","import React from 'react';\nimport {Modal, MenuItem, DropdownButton, Checkbox, Button} from 'react-bootstrap';\nimport { makeObservable, observable } from 'mobx';\nimport autobind from 'autobind-decorator';\nimport { IDataTypeMetaData, EModalType } from '../ui/react-pathway-mapper';\nimport CBioPortalAccessor from '../utils/CBioPortalAccessor';\nimport { observer } from 'mobx-react';\n\ninterface IStudyModalProps {\n isModalShown: boolean;\n loadFromCBio : Function;\n handleClose : Function;\n}\n\n@observer\nexport default class StudyModal extends React.Component{\n\n @observable\n dataTypes: {[dataType: string]: IDataTypeMetaData} = {};\n \n itemArray: any[];\n \n @observable\n selectedStudyData: any[];\n @observable\n portalAccessor: CBioPortalAccessor;\n\n constructor(props: IStudyModalProps){\n super(props);\n makeObservable(this);\n\n this.selectedStudyData = [];\n this.portalAccessor = new CBioPortalAccessor();\n this.fetchStudy();\n }\n\n\n\n preparePortalAccess(studyId: string){\n this.portalAccessor.getSupportedGeneticProfiles(studyId, (data) => {\n this.disableAllDataTypes();\n // Iterate through profiles\n for(const profile of Object.keys(data)){\n const type = CBioPortalAccessor.getDataType(profile);\n if(type !== \"\"){\n this.dataTypes[type].enabled = true;\n this.dataTypes[type].profile = profile;\n }\n }\n });\n }\n\n disableAllDataTypes(){\n for(const dataType of Object.keys(this.dataTypes)){\n this.dataTypes[dataType].enabled = false;\n this.dataTypes[dataType].checked = false;\n this.dataTypes[dataType].profile = undefined;\n }\n }\n\n fetchStudy(){ \n this.itemArray = [];\n\n\n this.portalAccessor.getDataTypes().forEach((dataType) => {\n this.dataTypes[dataType] = {enabled: false, checked: false, profile: undefined};\n });\n \n this.portalAccessor.fetchCancerStudies((cancerStudies: any) => {\n for(const study in cancerStudies){\n\n if(!cancerStudies.hasOwnProperty(study)){\n continue;\n }\n const item = {this.selectedStudyData = cancerStudies[study]; this.preparePortalAccess(cancerStudies[study][0]);}}>\n {cancerStudies[study][1]}\n ;\n \n this.itemArray.push(item);\n }\n });\n console.log(this.itemArray);\n }\n\n @autobind\n resetModal(){\n this.disableAllDataTypes();\n this.selectedStudyData = [];\n }\n\n @autobind\n handleCheckboxClick(dataType){\n this.dataTypes[dataType].checked = !this.dataTypes[dataType].checked;\n console.log(this.dataTypes[dataType].checked);\n }\n render(){\n return(\n {this.props.handleClose(EModalType.STUDY); this.resetModal();}}>\n \n

Profile Data from cBioPortal

\n
\n \n\n
\n

Select Cancer Study

\n \n {this.itemArray}\n \n
\n { Object.keys(this.dataTypes).map((dataType: string) => {\n return {this.handleCheckboxClick(dataType);}} checked={this.dataTypes[dataType].checked}> \n {dataType}\n ;\n })\n }\n \n
\n
\n\n \n \n \n
\n );\n }\n}","import React from \"react\";\nimport { Nav, Navbar, NavItem, FormControl, Glyphicon, InputGroup, ButtonGroup, ButtonToolbar, Button, FormGroup } from \"react-bootstrap\";\nimport PathwayActions from \"../utils/PathwayActions\";\nimport { makeObservable, observable } from \"mobx\";\n// @ts-ignore\nimport loadSvg from '../images/toolbar/load.svg';\n// @ts-ignore\nimport aboutSvg from '../images/toolbar/about.svg';\n// @ts-ignore\nimport newSvg from '../images/toolbar/new.svg';\n// @ts-ignore\nimport saveSvg from '../images/toolbar/save.svg';\n// @ts-ignore\nimport deleteSvg from '../images/toolbar/delete-simple.svg';\n// @ts-ignore\nimport undoSvg from '../images/toolbar/undo.svg';\n// @ts-ignore\nimport redoSvg from '../images/toolbar/redo.svg';\n// @ts-ignore\nimport ahtSvg from '../images/toolbar/align/align-horizontal-top.svg';\n// @ts-ignore\nimport ahmSvg from '../images/toolbar/align/align-horizontal-middle.svg';\n// @ts-ignore\nimport ahbSvg from '../images/toolbar/align/align-horizontal-bottom.svg';\n// @ts-ignore\nimport avlSvg from '../images/toolbar/align/align-vertical-left.svg';\n// @ts-ignore\nimport avcSvg from '../images/toolbar/align/align-vertical-center.svg';\n// @ts-ignore\nimport avrSvg from '../images/toolbar/align/align-vertical-right.svg';\n// @ts-ignore\nimport gridSvg from '../images/toolbar/grid.svg';\n// @ts-ignore\nimport guideSvg from '../images/toolbar/guidelines.svg';\n// @ts-ignore\nimport hideSvg from '../images/toolbar/hide-selected.svg';\n// @ts-ignore\nimport showSvg from '../images/toolbar/show-all.svg';\n// @ts-ignore\nimport portalSvg from '../images/toolbar/portal.svg';\n// @ts-ignore\nimport setingsSvg from '../images/toolbar/settings.svg';\n// @ts-ignore\nimport layoutSvg from '../images/toolbar/layout-cose.svg';\n// @ts-ignore\nimport layoutPropSvg from '../images/toolbar/layout-properties.svg';\n// @ts-ignore\nimport helpSvg from '../images/toolbar/quick-help.svg';\nimport { EModalType } from \"./react-pathway-mapper\";\nimport { observer } from \"mobx-react\";\nimport { EGridType } from \"../modals/GridSettings\";\n\n\ninterface IButtonbarProps {\n pathwayActions: PathwayActions;\n handleOpen: (modelId: EModalType) => void;\n}\n\ninterface ISVGFunction{\n svg: any;\n function: () => void;\n tooltip: string; \n isFocused?: boolean;\n}\n\n\n@observer\nexport default class Buttonbar extends React.Component{\n\n\n @observable\n private searchedGene: string;\n\n\n constructor(props: IButtonbarProps) {\n super(props);\n makeObservable(this);\n \n this.searchedGene = \"\";\n this.props.pathwayActions.enabledType = EGridType.NONE;\n }\n\n setEnabledType(newType: EGridType){\n if(newType === this.props.pathwayActions.enabledType){\n this.props.pathwayActions.enabledType = EGridType.NONE;\n } else {\n this.props.pathwayActions.enabledType = newType;\n }\n\n // Enabled type calculated\n\n if(this.props.pathwayActions.enabledType === EGridType.GRID){\n this.props.pathwayActions.toggleGrid(true);\n }\n else if(this.props.pathwayActions.enabledType === EGridType.GUIDE){\n this.props.pathwayActions.toggleGuide(true);\n } else {\n this.props.pathwayActions.toggleGrid(false); // This will disable both.\n }\n }\n render() {\n \n const fileFunctions: ISVGFunction[] = [\n {svg: newSvg, function: this.props.pathwayActions.newPathway, tooltip: \"New Pathway\"},\n {svg: loadSvg, function: this.props.pathwayActions.upload, tooltip: \"Import Pathway\" },\n {svg: saveSvg, function: () => {this.props.pathwayActions.export(false)}, tooltip: \"Export Pathway\"}];\n \n const modFunctions: ISVGFunction[] = [\n {svg: deleteSvg, function: this.props.pathwayActions.deleteSelected, tooltip: \"Delete Selected\"}];\n\n if(!this.props.pathwayActions.isCollaborative){\n modFunctions.push({svg: undoSvg, function: () => {this.props.pathwayActions.undo();}, tooltip: \"Undo\"},\n {svg: redoSvg, function: () => {this.props.pathwayActions.redo();}, tooltip: \"Redo\"});\n }\n const alignFunctions: ISVGFunction[] = [\n {svg: ahtSvg, function: () => {this.props.pathwayActions.align(\"hTop\");}, tooltip: \"Align Horizontal Top\"},\n {svg: ahmSvg, function: () => {this.props.pathwayActions.align(\"hMid\");}, tooltip: \"Align Horizontal Middle\"},\n {svg: ahbSvg, function: () => {this.props.pathwayActions.align(\"hBot\");}, tooltip: \"Align Horizontal Bottom\"},\n {svg: avlSvg, function: () => {this.props.pathwayActions.align(\"vLeft\");}, tooltip: \"Align Vertical Left\"},\n {svg: avcSvg, function: () => {this.props.pathwayActions.align(\"vCen\");}, tooltip: \"Align Vertical Center\"},\n {svg: avrSvg, function: () => {this.props.pathwayActions.align(\"vRight\");}, tooltip: \"Align Vertical Right\"}];\n \n const utilFunctions: ISVGFunction[] = [\n {isFocused: this.props.pathwayActions.enabledType === EGridType.GRID, svg: gridSvg, function: () => {this.setEnabledType(EGridType.GRID);}, tooltip: \"Enable Grid: Show and snap to grid\"},\n {isFocused: this.props.pathwayActions.enabledType === EGridType.GUIDE, svg: guideSvg, function: () => {this.setEnabledType(EGridType.GUIDE);}, tooltip: \"Enable Guidelines: Enable and snap to alignment guidelines\"}];\n\n const visibilityFunctions: ISVGFunction[] = [\n {svg: hideSvg, function: () => {this.props.pathwayActions.hideSelected();}, tooltip: \"Hide Selected\"},\n {svg: showSvg, function: () => {this.props.pathwayActions.showAll();}, tooltip: \"Show All\"}];\n\n const layoutFunctions: ISVGFunction[] = [\n {svg: layoutSvg, function: () => {this.props.pathwayActions.performLayout();}, tooltip: \"Perform Layout\"},\n {svg: layoutPropSvg, function: () => {this.props.handleOpen(EModalType.LAYOUT);}, tooltip: \"Layout Properties\"}];\n\n const portalFunctions: ISVGFunction[] = [\n {svg: portalSvg, function: () => {this.props.handleOpen(EModalType.STUDY);}, tooltip: \"Fetch Genomic Data From cBioPortal\"},\n {svg: setingsSvg, function: () => {this.props.handleOpen(EModalType.PROFILES);}, tooltip: \"Genomic Data Visibility Settings\"}];\n\n const infoFunctions: ISVGFunction[] = [\n {svg: helpSvg, function: () => {this.props.handleOpen(EModalType.HELP);}, tooltip: \"Quick Help\"},\n {svg: aboutSvg, function: () => {this.props.handleOpen(EModalType.ABOUT);}, tooltip: \"About\"}];\n \n const allFunctions = [fileFunctions, modFunctions, alignFunctions, utilFunctions, visibilityFunctions, portalFunctions, layoutFunctions, infoFunctions];\n\n \n return (\n \n \n \n \n )\n }\n\n}\n","import React from \"react\";\nimport {Label, Modal} from \"react-bootstrap\";\nimport { observer } from \"mobx-react\";\nimport { IProfileMetaData, EModalType } from \"../ui/react-pathway-mapper\";\nimport EditorActionsManager from \"../managers/EditorActionsManager\";\nimport { computed, makeObservable } from \"mobx\";\ninterface IProfilesModalProps {\n profiles: IProfileMetaData[];\n editor: EditorActionsManager;\n isModalShown: boolean;\n handleClose: Function;\n}\n\n@observer\nexport default class ProfilesModal extends React.Component{\n\n constructor(props: IProfilesModalProps){\n super(props);\n\n makeObservable(this);\n }\n\n @computed get profileEnabledMap(){\n const profileEnabledMap = {};\n this.props.profiles.forEach((profile: IProfileMetaData) => {profileEnabledMap[profile.profileId] = profile.enabled});\n console.log(profileEnabledMap);\n return profileEnabledMap;\n }\n\n render(){\n \n\n const profileLabels = this.props.profiles.map((profile: IProfileMetaData, i: number) => \n [,
,
]);\n\n return (\n\n {this.props.handleClose(EModalType.PROFILES)}}>\n \n

Genomic Data Set(s) to Show

\n
\n \n {(profileLabels.length > 0 ? profileLabels :

There is currently no data to show

)}\n
\n
\n\n )\n }\n\n}","import React from 'react';\nimport {Modal} from 'react-bootstrap';\n\n// @ts-ignore\nimport iVisImg from \"../about/i-vis.png\";\n// @ts-ignore\nimport mskccImg from \"../about/mskcc.png\";\nimport { EModalType } from '../ui/react-pathway-mapper';\ninterface IAboutModalProps{\n isModalShown: boolean;\n handleClose: Function;\n\n}\n\nexport default class AboutModal extends React.Component {\n\n constructor(props: IAboutModalProps){\n super(props);\n }\n\n\n render(){\n\n\n return(\n \n {this.props.handleClose(EModalType.ABOUT)}}\n >\n \n \n

About

\n
\n
\n \n

PathwayMapper 2.1

\n
\n \"\"\n
\n
\n \"\"\n
\n
\n

i-Vis information Visualization Lab

\n

Bilkent University, Ankara, Turkey

\n
\n
\n

Memorial Sloan-Kettering Cancer Center

\n

New York, USA

\n
\n
\n \n https://github.com/iVis-at-Bilkent/pathway-mapper\n \n \n\n )\n\n\n }\n\n}\n","import React from 'react';\nimport {Modal, Form, FormGroup, FormControl, Col, Button, InputGroup, ControlLabel} from 'react-bootstrap';\nimport { observer } from 'mobx-react';\nimport PathwayActions from '../utils/PathwayActions';\nimport { IPathwayInfo } from '../managers/FileOperationsManager';\nimport { EModalType } from '../ui/react-pathway-mapper';\n\ninterface IPathwayDetailsModalProps{\n isModalShown: boolean;\n handleClose: Function;\n pathwayActions: PathwayActions;\n}\n\n@observer\nexport default class PathwayDetailsModal extends React.Component{\n\n pathwayInfo: IPathwayInfo;\n\n constructor(props: IPathwayDetailsModalProps){\n super(props);\n }\n\n render(){\n\n this.pathwayInfo = this.props.pathwayActions.getPathwayInfo;\n\n return(\n\n {this.props.handleClose(4)}}>\n \n

Pathway Properties

\n
\n \n
\n \n \n File Name:\n \n \n {this.pathwayInfo.fileName = e.target.value;}}value={this.pathwayInfo.fileName}/>\n \n \n\n \n \n Pathway Title:\n \n \n {this.pathwayInfo.pathwayTitle = e.target.value;}}value={this.pathwayInfo.pathwayTitle}/>\n \n \n\n \n \n Pathway Description:\n \n \n \n \n \n\n
\n
\n\n \n \n \n
\n\n )\n\n }\n}","import EditorActionsManager from \"./EditorActionsManager\";\n\nexport default class ViewOperationsManager{\n movedNodes: any[];\n editor: EditorActionsManager;\n cy: any;\n\n constructor(editor: EditorActionsManager,cy: any)\n {\n this.cy = cy;\n this.editor = editor;\n this.movedNodes = [];\n }\n\n //TODO use align function from cytoscape.js-grid-guide extension\n handleNodeAlignment(param)\n {\n var tmpNodes = this.editor.selectedNodeStack;\n var nodes = this.cy.collection();\n var nodeMap = {};\n this.movedNodes = [];\n\n for (const key in tmpNodes)\n {\n nodes = nodes.add(tmpNodes[key]);\n }\n\n nodes.forEach(function(node,index)\n {\n if (node.isParent())\n {\n nodeMap[node.id()] = node;\n }\n });\n\n\n if (nodes.length > 0)\n {\n var firstSelected = nodes[0];\n var firstBbox = firstSelected.boundingBox();\n //OuterHeight variable added due to miscalculation of boundingBox function in pathwaymapper\n var firstOuterHeight = firstSelected.outerHeight();\n var self = this;\n nodes.forEach(function(node,index)\n {\n if (index == 0)\n {\n return ;\n }\n\n //If parent of selected node is in selection do nothing !\n if (nodeMap[node.parent().id()] == null)\n {\n var newPosition = self.calculateNewPosition(param, node, firstBbox, firstOuterHeight);\n //Recursively traverse leaf nodes\n self.changePosition(node,0,0,newPosition);\n }\n });\n this.editor.handleChangePositionByAlignment(self.movedNodes);\n }\n }\n\n /*\n Determine new position according to the alignment\n node that node.position works on center positions thats why all calculations\n are performed accordingly\n */\n calculateNewPosition(param, node, referenceBbox, referenceOuterHeight)\n {\n var currentPos = node.position();\n var currentBbox = node.boundingBox();\n var newPosition;\n //This parameter is used to move the compounds less upwards when they contain label\n var moveParam = node.isParent() ? node.outerHeight() - ((currentBbox.h - node.outerHeight())/2) - ((node.outerHeight() - node.height())/2) : node.height();\n //This param is used only when the node is parent, for simple nodes is 0\n var labelHeight = node.isParent()? currentBbox.h - node.outerHeight(): 0;\n\n if (param === 'vLeft')\n {\n newPosition = {x: referenceBbox.x1+currentBbox.w/2, y: currentPos.y};\n }\n else if (param === 'vCen')\n {\n newPosition = {x: referenceBbox.x1+referenceBbox.w/2, y: currentPos.y};\n }\n else if (param === 'vRight')\n {\n newPosition = {x: referenceBbox.x2-currentBbox.w/2, y: currentPos.y};\n }\n else if (param === 'hTop')\n {\n newPosition = {x: currentPos.x, y: referenceBbox.y1 + currentBbox.h/2};\n }\n //Checks for the case where compounds don't have names (name isn't taken in consideration in that case)\n else if (param === 'hMid' && node.isParent() && node.data('name') == \"\")\n {\n newPosition = {x: currentPos.x, y: referenceBbox.y1 + referenceBbox.h/2};\n }\n else if (param === 'hMid' )\n {\n newPosition = {x: currentPos.x, y: referenceBbox.y1 + referenceOuterHeight/2 + labelHeight/2};\n }\n //Checks for the case where compounds don't have names (name isn't taken in consideration in that case)\n else if (param === 'hBot' && node.isParent() && node.data('name') == \"\")\n {\n newPosition = {x: currentPos.x, y: referenceBbox.y2 - currentBbox.h/2};\n }\n else if (param === 'hBot')\n {\n newPosition = {x: currentPos.x, y: referenceBbox.y1 + referenceOuterHeight - moveParam/2};\n }\n else {\n console.log('Error: wrong alignment name ' + param);\n return;\n }\n\n return newPosition;\n }\n\n //Recursively move leaf nodes\n changePosition(node, dx, dy, newPos)\n {\n if (node.isParent())\n {\n var childNodes = node.children();\n var parentBbox = node.boundingBox();\n var self = this;\n childNodes.forEach(function(childNode, index)\n {\n var childBbox = childNode.boundingBox();\n var _dx = -(parentBbox.x1 - childBbox.x1)-parentBbox.w/2+childBbox.w/2;\n var _dy = -(parentBbox.y1 - childBbox.y1)-parentBbox.h/2+childBbox.h/2;\n\n //If further compound node is found, set position accordingly\n if (childNode.isParent())\n {\n self.changePosition(childNode, 0, 0, {x: newPos.x+_dx, y:newPos.y+_dy});\n }\n else\n {\n self.changePosition(childNode, _dx, _dy, newPos);\n }\n\n });\n }\n else\n {\n //Move locally and let editor actions manager know a move happened\n //If in collaborative mode editor actions manager will update collaborative model\n var position =\n {\n x: newPos.x+dx,\n y: newPos.y+dy\n };\n\n this.movedNodes.push({node: node, nextPosition: position, oldPosition: null});\n }\n }\n\n}\n","import React from 'react';\nimport { EModalType } from '../ui/react-pathway-mapper';\nimport {Modal} from 'react-bootstrap';\ninterface IQuickHelpModalProps{\n isModalShown: boolean;\n handleClose: (modalId: EModalType) => void;\n}\n\nexport default class QuickHelpModal extends React.Component{\n\n constructor(props: IQuickHelpModalProps){\n super(props);\n }\n\n render(){\n\n\n return(\n {this.props.handleClose(EModalType.HELP)}}>\n \n

Quick Help

\n
\n \n
    \n
  • To add a node: Drag and drop from node palette
  • \n
  • To add an interaction: Click on interaction type; then click on small circle on source node and release on target node
  • \n
  • To add a node into a container (family, complex, compartment or process): Drag the node into its container node or select nodes to be contained and right click on container node and choose \"Add Selected Into This\"
  • \n
  • To delete nodes/interactions: Select and perform Edit > Delete Selected
  • \n
  • To overlay experiment data: Select Alteration % > Load From cBioPortal...
  • \n
\n
\n\n
\n\n );\n }\n\n\n}","import React from 'react';\nimport { EModalType } from '../ui/react-pathway-mapper';\nimport {Modal} from 'react-bootstrap';\nimport {shapeToSvg} from 'oncoprintjs';\nimport $ from 'jquery';\n// @ts-ignore\nimport layoutImage from \"../images/toolbar/layout-cose.svg\";\n// @ts-ignore\nimport savePNGImage from \"../images/toolbar/save_png.svg\";\n// @ts-ignore\nimport saveSVGImage from \"../images/toolbar/save_svg.svg\";\n// @ts-ignore\nconst addSelImage = require(\"../images/toolbar/add-selected.svg\");\n// @ts-ignore\nconst addAllImage = require(\"../images/toolbar/add-all.svg\");\n// @ts-ignore\nimport openImage from \"../images/toolbar/edit.svg\";\n// @ts-ignore\nimport patientImage from \"../images/toolbar/PatientViewHelp.png\";\n\n\ninterface ICBioHelpModalProps{\n isModalShown: boolean;\n handleClose: (modalId: EModalType) => void;\n patientView ?: boolean;\n}\n\n// https://github.com/cBioPortal/cbioportal-frontend/blob/29a93c5e992ca1affd3d027355015164ae3602bd/src/shared/lib/Colors.ts\nconst CNA_COLOR_AMP = '#ff0000';\nconst CNA_COLOR_GAIN = '#ffb6c1';\nconst CNA_COLOR_HETLOSS = '#8fd8d8';\nconst CNA_COLOR_HOMDEL = '#0000ff';\nconst DEFAULT_GREY = '#bebebe';\nconst MRNA_COLOR_HIGH = '#ff9999';\nconst MRNA_COLOR_LOW = '#6699cc';\nconst MUT_COLOR_MISSENSE = '#008000';\nconst MUT_COLOR_MISSENSE_PASSENGER = '#53D400';\nconst MUT_COLOR_INFRAME = '#993404';\nconst MUT_COLOR_INFRAME_PASSENGER = '#a68028';\nconst MUT_COLOR_TRUNC = '#000000';\nconst MUT_COLOR_TRUNC_PASSENGER = '#708090';\nconst MUT_COLOR_FUSION = '#8B00C9';\nconst MUT_COLOR_PROMOTER = '#00B7CE';\nconst MUT_COLOR_OTHER = '#cf58bc';\nconst MUT_COLOR_GERMLINE = '#FFFFFF';\nconst PROT_COLOR_HIGH = '#ff3df8';\nconst PROT_COLOR_LOW = '#00E1FF';\n\n// always used shape\nconst defaultShape = {\n type: 'rectangle',\n fill: DEFAULT_GREY,\n x: 0,\n y: 0,\n width: 6,\n height: 20,\n stroke: 'rgba(0,0,0,0)',\n 'stroke-width': 0\n};\n\nconst labels = [\n 'Amplification',\n 'Deep Deletion',\n 'Fusion',\n 'Germline Mutation',\n 'Missense Mutation (putative driver)',\n 'Missense Mutation (unknown significance)',\n 'Other Mutation',\n 'Promoter Mutation',\n 'Truncating Mutation (putative driver)',\n 'Truncating Mutation (unknown significance)',\n 'Inframe Mutation (putative driver)',\n 'Inframe Mutation (unknown significance)'\n];\n\n// conditional shapes\nvar shapeBank = [\n {\n type: 'rectangle',\n fill: CNA_COLOR_AMP,\n x: 0,\n y: 0,\n width: 6,\n height: 20\n },\n {\n type: 'rectangle',\n fill: CNA_COLOR_HOMDEL,\n x: 0,\n y: 0,\n width: 6,\n height: 20\n },\n {\n type: 'rectangle',\n fill: MUT_COLOR_FUSION,\n x: 0,\n y: 4,\n width: 6,\n height: 12\n },\n {\n type: 'rectangle',\n fill: MUT_COLOR_GERMLINE,\n x: 0,\n y: 8.75,\n width: 6,\n height: 1.6\n },\n {\n type: 'rectangle',\n fill: MUT_COLOR_MISSENSE,\n x: 0,\n y: 6.66,\n width: 6,\n height: 6.66\n },\n {\n type: 'rectangle',\n fill: MUT_COLOR_MISSENSE_PASSENGER,\n x: 0,\n y: 6.66,\n width: 6,\n height: 6.66\n },\n {\n type: 'rectangle',\n fill: MUT_COLOR_OTHER,\n x: 0,\n y: 6.66,\n width: 6,\n height: 6.66\n },\n {\n type: 'rectangle',\n fill: MUT_COLOR_PROMOTER,\n x: 0,\n y: 6.66,\n width: 6,\n height: 6.66\n },\n {\n type: 'rectangle',\n fill: MUT_COLOR_TRUNC,\n x: 0,\n y: 6.66,\n width: 6,\n height: 6.66\n },\n {\n type: 'rectangle',\n fill: MUT_COLOR_TRUNC_PASSENGER,\n x: 0,\n y: 6.66,\n width: 6,\n height: 6.66\n },\n {\n type: 'rectangle',\n fill: MUT_COLOR_INFRAME,\n x: 0,\n y: 6.66,\n width: 6,\n height: 6.66\n },\n {\n type: 'rectangle',\n fill: MUT_COLOR_INFRAME_PASSENGER,\n x: 0,\n y: 6.66,\n width: 6,\n height: 6.66\n },\n];\n\nexport default class CBioHelpModal extends React.Component{\n\n\n constructor(props: ICBioHelpModalProps){\n super(props);\n console.log(\"CBioModal\", this.props.patientView)\n }\n\n generateOncoprintLegend() {\n const svgNameSpace = 'http://www.w3.org/2000/svg'\n const svgElement = document.createElementNS(svgNameSpace, 'svg')\n\n const legendEleWidth = 280\n \n const cellWidth = 6\n const cellHeight = 23\n const cellVerticalPadding = 15\n const cellMarginRight = cellWidth + 3\n\n shapeBank.forEach((shape, index) => {\n const offsetX = (index % 3) * (legendEleWidth)\n const textOffsetX = offsetX + cellMarginRight\n const offsetY = Math.floor(index / 3) * (cellHeight + cellVerticalPadding)\n const textOffsetY = offsetY + 15\n const g = document.createElementNS(svgNameSpace, 'g')\n if (!shape[\"stroke\"]) {\n shape[\"stroke\"] = 'rgba(0,0,0,0)';\n shape[\"stroke-width\"] = 0;\n }\n g.appendChild(shapeToSvg(defaultShape, offsetX, offsetY))\n g.appendChild(shapeToSvg(shape, offsetX, offsetY))\n \n const text = document.createElementNS(svgNameSpace, 'text');\n text.setAttributeNS(null, 'x', textOffsetX.toString());\n text.setAttributeNS(null, 'y', textOffsetY.toString());\n text.setAttributeNS(null, 'font-size', '12');\n text.setAttributeNS(null, 'font-family', 'Arial');\n var textNode = document.createTextNode(labels[index]);\n text.appendChild(textNode)\n\n g.appendChild(text);\n svgElement.appendChild(g)\n });\n\n svgElement.setAttribute(\n 'width', '840')\n svgElement.setAttribute(\n 'height','175')\n svgElement.style.paddingTop = '20px'\n // This is important you need to include this to succesfully render in cytoscape.js!\n svgElement.setAttribute('xmlns', svgNameSpace)\n \n return svgElement\n }\n\n render(){\n\n const legendPadding = '45px';\n\n return( \n {this.props.handleClose(EModalType.CHELP)}}>\n \n PathwayMapper cBioPortal Edition 2.0\n \n {(!this.props.patientView &&\n \n

\n PathwayMapper shows you your genes of interest with the alteration frequencies of selected genetic profiles of the chosen study overlaid on a TCGA pathway using a white to red color scale (the more frequently altered a gene is, the more red it's shown). All available TCGA pathways are ranked with the aim to choose the pathway that matches your interest the most. By default we display the pathway with highest ranking with the default ranking options but you may look at your genes of interest in the context of other pathways as well by choosing from the pathway table. \n
\n
\n Refer to the documentation here for the notation used.\n
\n
\n To search for a particular pathway of your interest, use the search field on top of the pathway table. To switch to another pathway, click on the button in the associated row of the pathway table. Ranking criteria might be changed by changing the options at the bottom of the table. \n
\n
\n The buttons on top of the pathway are:\n

    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    Save as PNG
    Save as SVG
    Perform layout: Layout is recalculated taking current node positions into account
    Add selected genes to query: You may select additional genes from the pathway by left clicking (Shift + left click to add more genes)
    Add all valid genes to query: All valid gene symbols will be added to the query; others will be ignored
    Edit pathway: Edit both the topology and the geometry of the current pathway with the full blown PathwayMapper editor
    \n
\n

\n
)\n },\n {(this.props.patientView &&\n \n

\n PathwayMapper shows you your genes of interest with the mutation types, copy number alterations and fusions of selected genetic profiles of the chosen study overlaid on a TCGA pathway using the OncoPrint color scheme. All available TCGA pathways are ranked with the aim to choose the pathway that matches your interest the most. By default we display the pathway with the highest number of genes of interest matching the ones in a pathway but you may look at your genes of interest in the context of other pathways as well by choosing from the pathway table. \n
\n
\n Refer to the documentation here for the notation used.\n
\n
\n Genetic alteration legend:\n
\n

\n
\n

Putative driver and unknown significance annotations are based on data from OncoKB and CancerHotspots.org.

\n
\n To search for a particular pathway of your interest, use the search field on top of the pathway table. To switch to another pathway, click on the button in the associated row of the pathway table.\n
\n
\n The buttons on top of the pathway are:\n
    \n \n \n \n \n \n \n \n \n \n \n
    Save as PNG
    Save as SVG
    Perform layout: Layout is recalculated taking current node positions into account
    \n
\n

\n
\n )}\n
\n\n );\n }\n\n}\n","import React, { Component } from 'react';\nimport Toolbar from \"../ui/Toolbar\";\nimport CytoscapeArea from \"./CytoscapeArea\";\nimport Ranking from \"../ui/Ranking\";\nimport EditorActionsManager from \"../managers/EditorActionsManager\";\nimport autobind from \"autobind-decorator\";\nimport {observable, computed, makeObservable, action} from \"mobx\";\nimport {observer} from \"mobx-react\";\nimport FileOperationsManager from '../managers/FileOperationsManager';\nimport {Row, Col, Grid, Label} from \"react-bootstrap\"; \nimport pathways from \"../data/pathways.json\";\nimport Menubar from './Menubar';\nimport PathwayActions from '../utils/PathwayActions';\nimport CBioPortalAccessor from '../utils/CBioPortalAccessor';\nimport SaveLoadUtility from '../utils/SaveLoadUtility';\nimport Sidebar from './Sidebar';\nimport StudyModal from '../modals/StudyModal';\nimport Buttonbar from \"./Buttonbar\";\nimport ProfilesModal from '../modals/ProfilesModal';\nimport { IGeneticAlterationRuleSetParams } from 'oncoprintjs';\n\nimport {toast, ToastContainer} from 'react-toastify';\nimport AboutModal from '../modals/AboutModal';\nimport ReactTooltip from 'react-tooltip';\nimport PathwayDetailsModal from '../modals/PathwayDetailsModal';\nimport ViewOperationsManager from '../managers/ViewOperationsManager';\nimport GridSettings from '../modals/GridSettings';\nimport GridOptionsManager from '../managers/GridOptionsManager';\nimport QuickHelpModal from '../modals/QuickHelpModal';\nimport LayoutProperties from '../modals/LayoutProperties';\nimport ConfirmationModal from '../modals/ConfirmationModal';\nimport CBioHelpModal from '../modals/CBioHelpModal';\n\nimport \"../css/pmv1.css\";\nimport \"../css/pmv2.css\";\nimport '../css/qtip.css';\n\nconst maxHeapFn = require('@datastructures-js/max-heap');\nlet maxHeap = maxHeapFn();\n\n\ninterface IPathwayMapperProps{\n isCBioPortal: boolean;\n genes: any[];\n isCollaborative?: boolean;\n cBioAlterationData?: ICBioData[];\n sampleIconData?: ISampleIconData,\n pathwayName? : string;\n alterationData?: IAlterationData;\n onAddGenes?: (selectedGenes: string[]) => void;\n changePathwayHandler?: (pathwayGenes: string[]) => void;\n addGenomicDataHandler?: (addGenomicData: (alterationData: ICBioData[]) => void) => void;\n tableComponent?: (data: IPathwayMapperTable[], selectedPathway: string, onPathwaySelect: (pathway: string) => void) => JSX.Element;\n validGenes?: any;\n toast: any;\n showMessage: (message: string) => void;\n //PatientView variable\n patientView ?: boolean;\n messageBanner? : () => JSX.Element;\n}\n\nexport interface ICBioData{\n altered: number;\n gene: string;\n percentAltered: string​;\n sequenced: number;\n geneticTrackData?: any[]; // TODO GeneticTrackDatum[]: this is currently a private type within cbioportal repo\n geneticTrackRuleSetParams?: IGeneticAlterationRuleSetParams;\n}\n\nexport interface ISampleIconData {\n sampleIndex: { [s: string]: number },\n sampleColors: { [s: string]: string }\n}\n\nexport enum EModalType{\n STUDY,\n CONFIRMATION,\n PROFILES,\n ABOUT,\n PW_DETAILS,\n GRID,\n HELP,\n LAYOUT,\n CHELP\n}\n\nexport interface IPathwayData{\n title: string;\n description: string;\n nodes: any[];\n edges: any[];\n}\n\nexport interface IAlterationData{\n [key: string]: {[key: string]: number};\n}\n\nexport interface IProfileMetaData{\n profileId: string;\n studyId?: string;\n enabled: boolean;\n}\n\nexport interface IDataTypeMetaData{\n enabled: boolean;\n checked: boolean;\n profile: string;\n}\n\nexport interface IPathwayMapperTable{\n name: string;\n score: number;\n genes: string[];\n}\n\n@observer\nexport default class PathwayMapper extends React.Component {\n static readonly CBIO_PROFILE_NAME = \"cBioPortal_data\";\n\n readonly NUMBER_OF_PATHWAYS_TO_SHOW = 10;\n \n @observable\n selectedPathway: string;\n\n fileManager: FileOperationsManager;\n\n @observable\n editor: EditorActionsManager;\n\n pathwayActions: PathwayActions;\n\n @observable\n isModalShown: boolean[];\n\n portalAcessor: CBioPortalAccessor;\n\n @observable\n alterationData: IAlterationData;\n\n @observable\n patientData: any [][] = [];\n\n @observable\n pathwayGeneMap: {[key: string]: {[key: string]: string}} = {};\n\n bestPathwaysAlgos: any[][] = [];\n\n @observable\n oldName = \"\";\n \n @observable\n profiles: IProfileMetaData[] = [];\n\n setActiveEdge: (edgeId: number) => void;\n viewOperationsManager: ViewOperationsManager;\n gridOptionsManager: GridOptionsManager;\n\n\n\n constructor(props: IPathwayMapperProps){\n super(props);\n makeObservable(this);\n \n this.fileManager = new FileOperationsManager();\n this.pathwayActions = new PathwayActions(this.pathwayHandler, this.profiles, this.fileManager, \n this.handleOpen, this.props.isCBioPortal, this.props.isCollaborative);\n this.selectedPathway = \"\";\n if(this.props.pathwayName){\n this.pathwayActions.changePathway(this.props.pathwayName);\n }\n this.isModalShown = [false, false, false, false, false, false, false, false, false];\n // TODO: Change below\n this.alterationData = {}; //{\"study1_gistic\" : {\"CDK4\": 11, \"MDM2\": 19, \"TP53\": 29}, \"study2_gistic\" : {\"MDM2\": 99, \"TP53\": 98}, \"study3_mutations\": {\"MDM2\": 1, \"TP53\": 2}};\n this.extractAllGenes();\n if(this.props.isCBioPortal){\n //this.overlayPortalData();\n \n // If cBioPortal mode is 'on' it is very likely to have cBioALterationData\n // but to be on the safe side below assertion is made.\n if(this.props.cBioAlterationData ){\n if( this.props.patientView){\n //PatientView PathwayMapper has a different functionality\n //Alteration types are overlayed instead of alterationpercentage\n this.calculatePatientData(this.props.cBioAlterationData);\n this.addSampleIconData(this.props.sampleIconData);\n }\n else{\n this.calculateAlterationData(this.props.cBioAlterationData);\n\n }\n }\n\n if(this.props.addGenomicDataHandler){\n this.props.addGenomicDataHandler(this.addGenomicData);\n }\n\n this.profiles.push({profileId: PathwayMapper.CBIO_PROFILE_NAME, enabled: true});\n this.getBestPathway(0);\n this.getBestPathway(1);\n this.getBestPathway(2);\n this.getBestPathway(3);\n }\n /*\n const profile1 = {profileId: \"study1_gistic\", studyId: \"study1\", enabled: true};\n const profile2 = {profileId: \"study2_gistic\", studyId: \"study2\", enabled: true};\n const profile3 = {profileId: \"study3_mutations\", studyId: \"study3\", enabled: true};\n const profile4 = {profileId: \"study3_mutations\", studyId: \"study3\", enabled: true};\n const profile5 = {profileId: \"study3_mutations\", studyId: \"study3\", enabled: true};\n const profile6 = {profileId: \"study3_mutations\", studyId: \"study3\", enabled: true};\n this.profiles.push(profile1, profile2, profile3, profile4, profile5, profile6);\n */\n\n }\n\n @action\n setSelectedPathway(pathway: string) {\n this.selectedPathway = pathway;\n }\n\n @action\n setEditor(editor: EditorActionsManager) {\n this.editor = editor;\n }\n\n calculateAlterationData(cBioAlterationData: ICBioData[]){\n // Transform cBioDataAlteration into AlterationData\n this.alterationData[PathwayMapper.CBIO_PROFILE_NAME] = {};\n cBioAlterationData.forEach((geneAltData: ICBioData) => {\n const perc = (geneAltData.altered / geneAltData.sequenced) * 100;\n \n // NaN value is replaced with -101 since NaN value leads to some runtime exceptions (such as with toFixed() function),\n // hence it is represented as -101. It will be recognized in the genomic data svg creation to show N/P instead of\n // a percentage. -101 is chosen because this percentage is impossible to get.\n this.alterationData[PathwayMapper.CBIO_PROFILE_NAME][geneAltData.gene] = ((Object.is(perc, NaN) ? -101 : perc));\n \n\n });\n }\n \n calculatePatientData(cBioAlterationData: ICBioData[]){\n // Transform cBioDataAlteration into Patient Data every alteration is accepted 100% altered\n\n this.alterationData[PathwayMapper.CBIO_PROFILE_NAME] = {};\n \n const allTypes = cBioAlterationData.map(x => x.gene); \n //const allTypes = cBioAlterationData.map(x => x.percentAltered);\n const uniqueTypes = allTypes.filter((x, i, a) => a.indexOf(x) == i)\n //This is a flag for GenomicDataOverlayManager showPatientData\n this.patientData[\"PatientView\"] = 1;\n\n uniqueTypes.forEach(x => {\n this.patientData[x]= {};\n });\n\n cBioAlterationData.forEach((geneAltData: ICBioData) => {\n const perc = (geneAltData.altered / geneAltData.sequenced) * 100;\n\n this.alterationData[PathwayMapper.CBIO_PROFILE_NAME][geneAltData.gene] = ((Object.is(perc, NaN) ? -101 : perc));\n\n this.patientData[geneAltData.gene][geneAltData.percentAltered] = ((Object.is(perc, NaN) ? -101 : perc));\n this.patientData[geneAltData.gene][\"geneticTrackData\"] = geneAltData.geneticTrackData;\n this.patientData[geneAltData.gene][\"geneticTrackRuleSetParams\"] = geneAltData.geneticTrackRuleSetParams;\n });\n\n }\n\n addSampleIconData(sampleIconData: any) {\n if (sampleIconData) {\n this.patientData[\"sampleColors\"] = sampleIconData.sampleColors;\n this.patientData[\"sampleIndex\"] = sampleIconData.sampleIndex;\n }\n }\n\n getGeneStudyMap(studyGeneMap: any){\n \n const genomicDataMap: any = {};\n for (const cancerStudy of Object.keys(studyGeneMap)) {\n\n const cancerData = studyGeneMap[cancerStudy];\n\n for (const geneSymbol of Object.keys(cancerData)) {\n if (genomicDataMap[geneSymbol] === undefined) genomicDataMap[geneSymbol] = {};\n\n genomicDataMap[geneSymbol][cancerStudy] = studyGeneMap[cancerStudy][geneSymbol].toFixed(2);\n }\n }\n return genomicDataMap;\n }\n\n getAlterationAveragePerGene(genomicDataMap: any){\n\n const geneAlterationMap: any = {};\n for(const gene of Object.keys(genomicDataMap)){\n let sum = 0, count = 0;\n\n for(const alteration of Object.values(genomicDataMap[gene])){\n sum += parseFloat(alteration as string);\n count++;\n }\n if(count === 0){\n geneAlterationMap[gene] = 0;\n } else {\n geneAlterationMap[gene] = sum / count;\n }\n }\n\n return geneAlterationMap;\n }\n\n\n /**\n * \n * @param rankingMode: number => 0 = Count, 1 = Percentage, 2 = Count with Alteration, 3 = Percentage with Alteration\n * \n */\n getBestPathway(rankingMode: number) {\n \n const genomicDataMap = this.getGeneStudyMap(this.alterationData);\n const alterationPerGene = this.getAlterationAveragePerGene(genomicDataMap);\n maxHeap = maxHeapFn();\n\n const matchedGenesMap: any = {};\n const bestPathways: any[] = [];\n for(const pathwayName in this.pathwayGeneMap){\n if(this.pathwayGeneMap.hasOwnProperty(pathwayName)){\n \n const genesMatching = [];\n // Calculate sum of all alterations\n let sumOfAlterations = 0;\n for(const gene of this.props.genes){\n \n if(this.pathwayGeneMap[pathwayName].hasOwnProperty(gene.hugoGeneSymbol) \n && this.pathwayGeneMap[pathwayName][gene.hugoGeneSymbol] === \"GENE\"){\n genesMatching.push(gene.hugoGeneSymbol);\n sumOfAlterations += alterationPerGene[gene.hugoGeneSymbol];\n }\n }\n matchedGenesMap[pathwayName] = genesMatching;\n let geneCount = 0;\n // Count number of genes *not processess* in a pathway\n for(const geneType of Object.values(this.pathwayGeneMap[pathwayName])){\n if(geneType === \"GENE\"){\n geneCount++;\n }\n }\n\n if(rankingMode === 0){\n maxHeap.insert(genesMatching.length, {pathwayName: pathwayName});\n } else if(rankingMode === 1){\n maxHeap.insert(genesMatching.length / geneCount * 100, {pathwayName: pathwayName}); \n } else if(rankingMode === 2){\n maxHeap.insert(sumOfAlterations, {pathwayName: pathwayName}); \n } else if(rankingMode === 3){\n maxHeap.insert(genesMatching.length * sumOfAlterations / geneCount, {pathwayName: pathwayName});\n }\n\n }\n }\n while(maxHeap.size() > 0){\n const top = maxHeap.extractMax();\n const pathwayName = top.getValue().pathwayName;\n bestPathways.push({score: top.getKey(), genesMatched: matchedGenesMap[pathwayName], pathwayName: pathwayName});\n }\n if(this.bestPathwaysAlgos.length === 0) // First pathway of the first method is shown as the default pathway.\n this.setSelectedPathway(bestPathways[0].pathwayName);\n this.bestPathwaysAlgos.push(bestPathways);\n }\n \n // This method extracts all genes of a pathway and adds it to the pathwayGeneMap\n // so that it can be used by percentage calculation and genomic data \n // Note: Pathway title\n @autobind\n includePathway(pathwayData?: IPathwayData, pathwayName?: string){\n const genes = pathwayData.nodes;\n const geneHash: any = {};\n\n for(const gene of genes){\n\n if(gene.data.type === \"GENE\")\n geneHash[gene.data.name] = gene.data.type;\n }\n\n this.pathwayGeneMap[pathwayData.title] = geneHash;\n\n }\n\n extractAllGenes(){\n for(const pathwayName in pathways){\n if(pathways.hasOwnProperty(pathwayName)){\n\n const pathwayData: IPathwayData = SaveLoadUtility.parseGraph(pathways[pathwayName], true);\n this.includePathway(pathwayData);\n }\n }\n \n }\n\n\n loadRedirectedPortalData(){\n\n if(!this.props.alterationData){ // If size 0 that means it is not redirected.\n return;\n }\n \n const redirectedProfiles = Object.keys(this.props.alterationData).map((data: string) : IProfileMetaData => ({profileId: data, enabled: true}));\n redirectedProfiles.forEach((redirectedProfile) => {\n this.profiles.push(redirectedProfile);\n });\n this.editor.addPortalGenomicData(this.props.alterationData, this.editor.getEmptyGroupID());\n }\n\n @computed get profileEnabledMap(){\n const profileEnabledMap = {};\n this.profiles.forEach((profile: IProfileMetaData) => {profileEnabledMap[profile.profileId] = profile.enabled;});\n return profileEnabledMap;\n }\n\n doesProfileExist(profileId: string){\n\n let exists = false;\n this.profiles.forEach((profile: IProfileMetaData) => {\n if(profile.profileId === profileId){\n exists = true;\n }\n });\n\n return exists;\n }\n\n @autobind\n loadFromCBio(dataTypes: {[dataType: string]: IDataTypeMetaData}, selectedStudyData: any[]){\n if(!this.pathwayActions.doesCyHaveElements()){\n toast.warn(\"Your pathway is empty\");\n return;\n }\n\n for (const dataType of Object.keys(dataTypes))\n {\n if(!dataTypes[dataType].checked) continue;\n if(this.doesProfileExist(dataTypes[dataType].profile)){\n toast.warn(dataTypes[dataType].profile + \" already exists\");\n continue;\n }\n\n\n this.profiles.push({studyId: selectedStudyData[0], profileId: dataTypes[dataType].profile, enabled: true});\n this.portalAcessor.getProfileData({\n caseSetId: selectedStudyData[0],\n geneticProfileId: dataTypes[dataType].profile,\n genes: this.editor.cy.json().elements.nodes.filter((node) => (node.data.type === \"GENE\")).map((node) => (node.data.name))\n },\n (data: any) =>{\n this.editor.addPortalGenomicData(data, this.editor.getEmptyGroupID());\n });\n }\n }\n\n @autobind\n setActiveEdgeHandler(setActiveEdge: (edgeId: number) => void){\n this.setActiveEdge = setActiveEdge;\n }\n\n\n @autobind\n addGenomicData(cBioAlterationData: ICBioData[]){\n\n this.calculateAlterationData(cBioAlterationData);\n this.editor.removeGenomicData();\n this.editor.addPortalGenomicData(this.alterationData, this.editor.getEmptyGroupID());\n }\n\n render() {\n const isCBioPortal = this.props.isCBioPortal; \n\n const cytoComp = ;\n\n return (\n\n
\n
\n {!isCBioPortal && \n [\n
\n \n
\n ,\n
\n \n
]\n }\n { isCBioPortal &&\n \n \n \n \n {this.props.messageBanner ?\n {this.props.messageBanner()}\n :\n \n }\n \n {this.selectedPathway}\n \n \n }\n \n
\n {\n (!isCBioPortal && \n
\n \n
)\n }\n\n { isCBioPortal ?\n (\n {cytoComp}\n
Powered by PathwayMapper
\n )\n : (cytoComp)\n }\n {\n (isCBioPortal &&\n \n \n )\n }\n
\n\n {/* isCBioPortal &&\n \n Powered by PathwayMapper\n */\n }\n\n { (
\n\n {\n (
\n \n \n \n \n \n \n \n \n
)\n }\n { !this.props.isCBioPortal &&\n [,\n ]\n }\n \n\n {this.pathwayActions.setUploaders(ref, false);}}\n style={{display: 'none'}}\n onChange={(e) => {this.pathwayActions.onChangeFile(e, false);}}\n />\n {this.pathwayActions.setUploaders(ref, true);}}\n style={{display: 'none'}}\n onChange={(e) => {this.pathwayActions.onChangeFile(e, true);}}\n />\n {this.pathwayActions.setOverlayUploader(ref);}}\n style={{display: 'none'}}\n onChange={(e) => {this.pathwayActions.overlayFromText(e.target.files[0]);}}\n />\n
)\n }\n
\n
\n );\n }\n\n componentDidMount(){\n if(!this.props.isCBioPortal){\n $(\".container\").css('width', \"auto\");\n $(\".container\").css('paddingLeft', 0);\n $(\".container\").css('marginLeft', 5);\n } else {\n this.pathwayActions.emphasiseQueryGenes(this.props.genes.map((gene: any) => gene.hugoGeneSymbol));\n }\n }\n\n componentDidUpdate(){\n if(this.props.isCBioPortal){\n this.pathwayActions.emphasiseQueryGenes(this.props.genes.map((gene: any) => gene.hugoGeneSymbol));\n }\n }\n\n @action.bound\n handleOpen(modalId: EModalType){\n this.isModalShown[modalId] = true;\n }\n\n\n @action.bound\n handleClose(modalId: EModalType){\n this.isModalShown[modalId] = false;\n }\n\n @autobind\n editorHandler(editor, eh, undoRedoManager){\n\n this.setEditor(editor);\n this.gridOptionsManager = new GridOptionsManager(this.editor.cy);\n this.viewOperationsManager = new ViewOperationsManager(this.editor, this.editor.cy);\n this.pathwayActions.editorHandler(editor, eh, undoRedoManager, this.viewOperationsManager, this.gridOptionsManager);\n \n if(this.props.isCBioPortal){\n if(this.props.patientView){\n this.editor.addPortalGenomicData(this.patientData, this.editor.getEmptyGroupID());\n }\n else{\n this.editor.addPortalGenomicData(this.alterationData, this.editor.getEmptyGroupID());\n }\n } else {\n this.portalAcessor = new CBioPortalAccessor();\n this.loadRedirectedPortalData();\n }\n\n }\n\n @autobind\n pathwayHandler(pathway: string){\n this.setSelectedPathway(pathway);\n if(this.pathwayGeneMap[pathway] && this.props.changePathwayHandler)\n this.props.changePathwayHandler(\n Object.keys(this.pathwayGeneMap[pathway])\n .filter(gene => (!this.alterationData[PathwayMapper.CBIO_PROFILE_NAME].hasOwnProperty(gene)))\n );\n }\n}\n","// removed by extract-text-webpack-plugin","// removed by extract-text-webpack-plugin","// removed by extract-text-webpack-plugin","// removed by extract-text-webpack-plugin"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://react-pathway-mapper/webpack/bootstrap","webpack://react-pathway-mapper/external \"react\"","webpack://react-pathway-mapper/external \"react-bootstrap\"","webpack://react-pathway-mapper/external \"jquery\"","webpack://react-pathway-mapper/external \"mobx\"","webpack://react-pathway-mapper/external \"autobind-decorator\"","webpack://react-pathway-mapper/external \"mobx-react\"","webpack://react-pathway-mapper/external \"cytoscape\"","webpack://react-pathway-mapper/external \"lodash\"","webpack://react-pathway-mapper/./src/images/toolbar/layout-cose.svg","webpack://react-pathway-mapper/external \"react-toastify\"","webpack://react-pathway-mapper/external \"oncoprintjs\"","webpack://react-pathway-mapper/./src/images/toolbar/save_png.svg","webpack://react-pathway-mapper/./src/images/toolbar/save_svg.svg","webpack://react-pathway-mapper/external \"file-saver\"","webpack://react-pathway-mapper/./src/images/toolbar/edit.svg","webpack://react-pathway-mapper/./src/images/toolbar/about.svg","webpack://react-pathway-mapper/./src/images/toolbar/add-selected.svg","webpack://react-pathway-mapper/./src/images/toolbar/add-all.svg","webpack://react-pathway-mapper/external \"mousetrap\"","webpack://react-pathway-mapper/external \"react-tooltip\"","webpack://react-pathway-mapper/./src/images/toolbar/align/align-horizontal-bottom.svg","webpack://react-pathway-mapper/./src/images/toolbar/align/align-horizontal-middle.svg","webpack://react-pathway-mapper/./src/images/toolbar/align/align-horizontal-top.svg","webpack://react-pathway-mapper/./src/images/toolbar/align/align-vertical-center.svg","webpack://react-pathway-mapper/./src/images/toolbar/align/align-vertical-left.svg","webpack://react-pathway-mapper/./src/images/toolbar/align/align-vertical-right.svg","webpack://react-pathway-mapper/./src/images/toolbar/delete-simple.svg","webpack://react-pathway-mapper/./src/images/toolbar/grid.svg","webpack://react-pathway-mapper/./src/images/toolbar/guidelines.svg","webpack://react-pathway-mapper/./src/images/toolbar/hide-selected.svg","webpack://react-pathway-mapper/./src/images/toolbar/layout-properties.svg","webpack://react-pathway-mapper/./src/images/toolbar/load.svg","webpack://react-pathway-mapper/./src/images/toolbar/new.svg","webpack://react-pathway-mapper/./src/images/toolbar/portal.svg","webpack://react-pathway-mapper/./src/images/toolbar/quick-help.svg","webpack://react-pathway-mapper/./src/images/toolbar/redo.svg","webpack://react-pathway-mapper/./src/images/toolbar/save.svg","webpack://react-pathway-mapper/./src/images/toolbar/settings.svg","webpack://react-pathway-mapper/./src/images/toolbar/show-all.svg","webpack://react-pathway-mapper/./src/images/toolbar/undo.svg","webpack://react-pathway-mapper/./node_modules/cytoscape-node-resize/resizeCue.svg","webpack://react-pathway-mapper/./src/images/nodes/compartment.svg","webpack://react-pathway-mapper/./src/images/nodes/complex.svg","webpack://react-pathway-mapper/./src/images/nodes/family.svg","webpack://react-pathway-mapper/./src/images/nodes/gene.svg","webpack://react-pathway-mapper/./src/images/nodes/process.svg","webpack://react-pathway-mapper/./src/images/edges/activates.svg","webpack://react-pathway-mapper/./src/images/edges/binds.svg","webpack://react-pathway-mapper/./src/images/edges/induces.svg","webpack://react-pathway-mapper/./src/images/edges/inhibits.svg","webpack://react-pathway-mapper/./src/images/edges/represses.svg","webpack://react-pathway-mapper/./src/css/pmv1.css?6b79","webpack://react-pathway-mapper/./src/css/pmv2.css?fb72","webpack://react-pathway-mapper/./src/css/qtip.css?b019","webpack://react-pathway-mapper/./src/images/about/i-vis.png","webpack://react-pathway-mapper/./src/images/about/mskcc.png","webpack://react-pathway-mapper/external \"sharedb/lib/client\"","webpack://react-pathway-mapper/external \"jquery-ui-dist/jquery-ui\"","webpack://react-pathway-mapper/external \"cytoscape-edgehandles\"","webpack://react-pathway-mapper/./node_modules/cytoscape-edge-editing/cytoscape-edge-editing.js","webpack://react-pathway-mapper/external \"cytoscape-cose-bilkent\"","webpack://react-pathway-mapper/./node_modules/cytoscape-node-resize/cytoscape-node-resize.js","webpack://react-pathway-mapper/external \"cytoscape-undo-redo\"","webpack://react-pathway-mapper/external \"cytoscape-panzoom\"","webpack://react-pathway-mapper/./src/utils/GraphStyleSheet.tsx","webpack://react-pathway-mapper/./src/utils/PanzoomOptions.tsx","webpack://react-pathway-mapper/external \"cytoscape-navigator\"","webpack://react-pathway-mapper/./node_modules/cytoscape-context-menus/cytoscape-context-menus.js","webpack://react-pathway-mapper/external \"konva\"","webpack://react-pathway-mapper/./node_modules/cytoscape-view-utilities/src/index.js","webpack://react-pathway-mapper/./node_modules/cytoscape-view-utilities/src/undo-redo.js","webpack://react-pathway-mapper/./node_modules/cytoscape-view-utilities/src/view-utilities.js","webpack://react-pathway-mapper/external \"cytoscape-grid-guide\"","webpack://react-pathway-mapper/external \"cytoscape-qtip\"","webpack://react-pathway-mapper/./src/css/supp.css?dffd","webpack://react-pathway-mapper/external \"@datastructures-js/max-heap\"","webpack://react-pathway-mapper/./src/utils/SaveLoadUtility.tsx","webpack://react-pathway-mapper/./src/managers/FileOperationsManager.tsx","webpack://react-pathway-mapper/./src/managers/GridOptionsManager.tsx","webpack://react-pathway-mapper/./src/managers/ViewOperationsManager.tsx","webpack://react-pathway-mapper/./src/modals/AboutModal.tsx","webpack://react-pathway-mapper/./src/modals/CBioHelpModal.tsx","webpack://react-pathway-mapper/./src/modals/ConfirmationModal.tsx","webpack://react-pathway-mapper/./src/modals/GridSettings.tsx","webpack://react-pathway-mapper/./src/utils/GraphUtilities.tsx","webpack://react-pathway-mapper/./src/utils/SVGExporter.ts","webpack://react-pathway-mapper/./src/managers/GenomicDataOverlayManager.ts","webpack://react-pathway-mapper/./src/managers/EditorActionsManager.tsx","webpack://react-pathway-mapper/./src/modals/LayoutProperties.tsx","webpack://react-pathway-mapper/./src/modals/PathwayDetailsModal.tsx","webpack://react-pathway-mapper/./src/modals/ProfilesModal.tsx","webpack://react-pathway-mapper/./src/modals/QuickHelpModal.tsx","webpack://react-pathway-mapper/./src/utils/CBioPortalAccessor.tsx","webpack://react-pathway-mapper/./src/modals/StudyModal.tsx","webpack://react-pathway-mapper/./src/ui/Ranking.tsx","webpack://react-pathway-mapper/./src/ui/Toolbar.tsx","webpack://react-pathway-mapper/./src/utils/PathwayActions.ts","webpack://react-pathway-mapper/./src/ui/Buttonbar.tsx","webpack://react-pathway-mapper/./src/managers/ContextMenuManager.tsx","webpack://react-pathway-mapper/./src/managers/QtipManager.tsx","webpack://react-pathway-mapper/./src/managers/ShareDBManager.tsx","webpack://react-pathway-mapper/./src/utils/DragDropNodeAddPlugin.tsx","webpack://react-pathway-mapper/./src/ui/CytoscapeArea.tsx","webpack://react-pathway-mapper/./src/ui/Menubar.tsx","webpack://react-pathway-mapper/./src/ui/Sidebar.tsx","webpack://react-pathway-mapper/./src/ui/react-pathway-mapper.tsx"],"names":[],"mappings":";;QAAA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;AClFA,kC;;;;;;ACAA,4C;;;;;;ACAA,mC;;;;;;ACAA,iC;;;;;;ACAA,+C;;;;;;ACAA,uC;;;;;;ACAA,sC;;;;;;ACAA,mC;;;;;;;;;;;;ACAA,qCAAqC,4oF;;;;;;ACArC,2C;;;;;;ACAA,wC;;;;;;ACAA,qCAAqC,g/G;;;;;;ACArC,qCAAqC,g6G;;;;;;ACArC,uC;;;;;;ACAA,qCAAqC,gf;;;;;;ACArC,qCAAqC,ogF;;;;;;ACArC,qCAAqC,4nG;;;;;;ACArC,qCAAqC,wkD;;;;;;ACArC,sC;;;;;;ACAA,0C;;;;;;ACAA,qCAAqC,orC;;;;;;ACArC,qCAAqC,wvC;;;;;;ACArC,qCAAqC,osC;;;;;;ACArC,qCAAqC,gvC;;;;;;ACArC,qCAAqC,wtC;;;;;;ACArC,qCAAqC,otC;;;;;;ACArC,qCAAqC,w4J;;;;;;ACArC,qCAAqC,g7E;;;;;;ACArC,qCAAqC,w+E;;;;;;ACArC,qCAAqC,4sD;;;;;;ACArC,qCAAqC,onR;;;;;;ACArC,qCAAqC,osE;;;;;;ACArC,qCAAqC,ouG;;;;;;ACArC,qCAAqC,43S;;;;;;ACArC,qCAAqC,o/D;;;;;;ACArC,qCAAqC,g3I;;;;;;ACArC,qCAAqC,w8E;;;;;;ACArC,qCAAqC,goY;;;;;;ACArC,qCAAqC,o+C;;;;;;ACArC,qCAAqC,wxI;;;;;;ACArC,qCAAqC,wiC;;;;;;ACArC,qCAAqC,ooH;;;;;;ACArC,qCAAqC,onH;;;;;;ACArC,qCAAqC,4nH;;;;;;ACArC,qCAAqC,onH;;;;;;ACArC,qCAAqC,4hG;;;;;;ACArC,qCAAqC,4zK;;;;;;ACArC,qCAAqC,grI;;;;;;ACArC,qCAAqC,41K;;;;;;ACArC,qCAAqC,gvK;;;;;;ACArC,qCAAqC,gwK;;;;;;ACArC,uC;;;;;;ACAA,uC;;;;;;ACAA,uC;;;;;;ACAA,iCAAiC,wz6F;;;;;;ACAjC,iCAAiC,42/B;;;;;;ACAjC,+C;;;;;;ACAA,qD;;;;;;ACAA,kD;;;;;;ACAA,qCAAa,GAAG,IAAsD,EAAE,mBAAmB,KAAK,UAA6O,CAAC,aAAa,0BAA0B,0BAA0B,gBAAgB,UAAU,UAAU,0CAA0C,gBAAgB,OAAC,OAAO,oBAAoB,8CAA8C,kCAAkC,YAAY,YAAY,mCAAmC,iBAAiB,gBAAgB,sBAAsB,oBAAoB,0CAA0C,YAAY,WAAW,YAAY,SAAS,GAAG;AACxzB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,8BAA8B,eAAe;AAC7C;;AAEA;AACA;AACA;AACA,2C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA;AACA;AACA,SAAS;;AAET,OAAO;;AAEP;AACA;AACA;;AAEA;;AAEA;AACA;AACA,OAAO;;AAEP;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,+DAA+D;AAC/D;;AAEA;AACA;;AAEA;AACA;;AAEA,sBAAsB,6BAA6B;AACnD;AACA;;AAEA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,4DAA4D,yBAAyB;AACrF;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,S;AACA;AACA;AACA;AACA;AACA;AACA,mC;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,+BAA+B;;AAE/B;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;AACA,2DAA2D,2BAA2B;AACtF,2DAA2D,2BAA2B;AACtF;;AAEA,8DAA8D,mCAAmC;AACjG,8DAA8D,mCAAmC;;AAEjG;AACA;;AAEA,4J;AACA;AACA;;;AAGA,4J;AACA;AACA,yI;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4CAA4C,KAAK;AACjD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,0EAA0E;AAC1E;AACA;AACA;AACA;;AAEA,+DAA+D;AAC/D;;AAEA,sBAAsB,6BAA6B;AACnD;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,qCAAqC;AAC9D;AACA,iDAAiD,mGAAmG;AACpJ;AACA;AACA;;AAEA,WAAW;AACX;AACA;AACA;;AAEA,O;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,W;AACA;AACA;AACA;AACA;AACA;;AAEA,yB;AACA,SAAS;AACT,uE;;AAEA;AACA,gD;AACA;;AAEA,SAAS,EAAE;AACX;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;;;AAGA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,+C;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,qBAAqB,IAAI;AAC7E,uDAAuD,0BAA0B,IAAI;;AAErF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,eAAe;AAC/C,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;;AAEA,6CAA6C;;AAE7C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA,gC;AACA;AACA;AACA;AACA,wB;;AAEA,SAAS;AACT;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,OAAO;AACrD,iCAAiC;AACjC;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,UAAU;AAC7C;AACA;AACA;AACA,mCAAmC,SAAS;AAC5C;AACA;AACA;AACA,mCAAmC,UAAU;AAC7C;AACA;AACA;AACA,mCAAmC,SAAS;AAC5C;;AAEA;AACA;AACA,mCAAmC,WAAW;AAC9C;AACA;AACA;AACA,mCAAmC,UAAU;AAC7C;AACA;AACA;AACA,mCAAmC,WAAW;;AAE9C;AACA;AACA;AACA,mCAAmC,UAAU;AAC7C;AACA;AACA;AACA,kCAAkC,YAAY;AAC9C;;AAEA;AACA;AACA,mCAAmC,SAAS;AAC5C;AACA;AACA;AACA,mCAAmC,UAAU;AAC7C;AACA;AACA;AACA,mCAAmC,SAAS;AAC5C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA,CAAC,EAAE,oGAAoG;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,mBAAmB,kBAAkB;AACrC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,wDAAwD;AAC1E;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,GAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,mBAAmB,eAAe;AAClC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;AAIA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB,qCAAqC;AACxD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA,mBAAmB,mCAAmC;AACtD;AACA;;AAEA;AACA,GAAG;AACH;AACA;;AAEA;AACA,mBAAmB,+BAA+B;AAClD;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,gEAAgE,qBAAqB;AACrF,8DAA8D,iBAAiB;AAC/E;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,kCAAkC;AACpD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;;AAEA,CAAC,GAAG;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,SAAS;AACtB,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,aAAa,QAAQ;AACrB;AACA,aAAa,OAAO;AACpB;AACA,aAAa,QAAQ;AACrB;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,kCAAkC;AAC9D;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,EAAE;AACf,eAAe,QAAQ;AACvB;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,CAAC;;AAED;AACA,CAAC,GAAG;AACJ,CAAC,YAAY;;AAEb;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB,QAAQ,EAAE;;AAE/B;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA,eAAe;AACf;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA,SAAS;;AAET;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;;AAEP,sBAAsB;AACtB,KAAK;;AAEL;;AAEA,wDAAwD;AACxD;AACA;;AAEA,oDAAoD;AACpD;AACA;AACA,KAAK;AACL;;AAEA,8CAA8C;AAC9C;AACA;;AAEA,CAAC;;AAED,CAAC,EAAE,0DAA0D;AAC7D;;AAEA;AACA;;AAEA;AACA,mB;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;AACA,aAAa,0BAA0B;AACvC,aAAa;;AAEb;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;;AAEA,CAAC,GAAG;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,qCAAqC;AAC5D;AACA,+CAA+C,mGAAmG;AAClJ;AACA;AACA;AACA,OAAO;;AAEP;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,K;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,CAAC,GAAG,EAAE,GAAG;AACT,CAAC;;AAED,2CAA2C,cAAc;;;;;;;ACtpEzD,mD;;;;;;ACAA,mCAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,SAAS;AAC5B,mBAAmB,OAAO;AAC1B,mBAAmB,OAAO;AAC1B,mBAAmB,QAAQ;AAC3B;AACA,mBAAmB,OAAO;AAC1B;AACA,mBAAmB,QAAQ;AAC3B;AACA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,kCAAkC;AAClE;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,EAAE;AACrB,qBAAqB,QAAQ;AAC7B;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA,eAAe;AACf;AACA;AACA,eAAe;AACf;AACA;AACA,eAAe;AACf;AACA;AACA,eAAe;AACf;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA,eAAe;AACf;AACA;AACA,eAAe;AACf;AACA;AACA,eAAe;AACf;AACA;AACA,eAAe;AACf;AACA;AACA,eAAe;AACf;AACA;AACA,eAAe;AACf;AACA;AACA,eAAe;;AAEf,6DAA6D,gDAAgD;AAC7G,+CAA+C,2CAA2C;AAC1F,iDAAiD,oCAAoC;;AAErF,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+CAA+C;AAC/C;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,iBAAiB;;AAEjB,aAAa;;AAEb;;AAEA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,6BAA6B;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,4BAA4B,0BAA0B;AACtD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,4BAA4B,0BAA0B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC;;AAEhC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC;AAChC;AACA,8CAA8C;AAC9C,6CAA6C;AAC7C;AACA;AACA;AACA,iC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mG;AACA,sG;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C,kDAAkD;AAClD;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yF;;AAEA;AACA,mF;AACA,qF;;AAEA;AACA;AACA,qJ;AACA;AACA;;AAEA;AACA;AACA,uJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,2CAA2C,iBAAiB;AAC5D;;AAEA;AACA;AACA,mF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA,iDAAiD;;AAEjD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uD;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,mG;AACA,sG;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,qB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,+BAA+B,kBAAkB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,OAAO;AAC3D,uCAAuC;AACvC;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,UAAU;AAC9C;AACA;AACA;AACA,oCAAoC,SAAS;AAC7C;AACA;AACA;AACA,oCAAoC,UAAU;AAC9C;AACA;AACA;AACA,oCAAoC,SAAS;AAC7C;;AAEA;AACA;AACA,oCAAoC,WAAW;AAC/C;AACA;AACA;AACA,oCAAoC,UAAU;AAC9C;AACA;AACA;AACA,oCAAoC,WAAW;;AAE/C;AACA;AACA;AACA,oCAAoC,UAAU;AAC9C;;AAEA;AACA;AACA,oCAAoC,UAAU;AAC9C;AACA;AACA;AACA,oCAAoC,SAAS;AAC7C;AACA;AACA;AACA,oCAAoC,UAAU;AAC9C;AACA;AACA;AACA,oCAAoC,SAAS;AAC7C;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,8BAA8B;AAC9B,kCAAkC;AAClC;AACA;AACA,8BAA8B;AAC9B,kCAAkC;;AAElC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA,kCAAkC;AAClC;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;;AAEA,gE;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC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vBb,CADA;AA2BA,MAAM,CAAC,OAAP,GAAiB,cAAjB,C;;;;;;AC3BA,gD;;;;;;ACAA,mCAAC,YAAY;;AAEb;;AAEA;;AAEA,qBAAqB,QAAQ,EAAE;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB;;AAExB;AACA;AACA;;AAEA;AACA;AACA,uCAAuC;AACvC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,uBAAuB,oBAAoB;AAC3C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;;AAET,kE;AACA;;AAEA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD,yCAAyC;AACzC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,mDAAmD;AACnD;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA,+D;;AAEA;AACA;AACA;AACA,8C;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,OAAO;;AAEP;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mGAAmG;AACnG,2CAA2C,0BAA0B,6BAA6B;AAClG,qCAAqC;AACrC;;AAEA;;AAEA,2D;AACA;AACA,0F;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAK;AACL;;AAEA,MAAM,KAA6B,qBAAqB;AACxD;AACA;;AAEA,MAAM,IAA2C,GAAG;AACpD,IAAI,mCAAkC;AACtC;AACA,KAAK;AAAA,oGAAC;AACN;;AAEA,8CAA8C;AAC9C;AACA;;AAEA,CAAC;;;;;;;AC3gBD,kC;;;;;;ACAA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA,uBAAuB;AACvB,wBAAwB;AACxB;AACA;AACA,OAAO;AACP;AACA,uBAAuB;AACvB,wBAAwB;AACxB;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,+BAA+B;AAC/B;AACA,OAAO;AACP;AACA;;;AAGA,mBAAmB,mBAAO,CAAC,EAAa;AACxC,wBAAwB,mBAAO,CAAC,EAAkB;AAClD,oBAAoB,mBAAO,CAAC,EAAW;;AAEvC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,8CAA8C;AAC9C;;AAEA;AACA;;AAEA;AACA,0C;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA,iD;AACA;AACA;AACA;AACA,8C;AACA;AACA;AACA;AACA;AACA;AACA,6B;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,+D;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;;AAEA;AACA;AACA,KAAK;;AAEL;;AAEA,MAAM,KAA6B,qBAAqB;AACxD;AACA;;AAEA,MAAM,IAA2C,GAAG;AACpD,IAAI,mCAAmC;AACvC;AACA,KAAK;AAAA,oGAAC;AACN;;AAEA,qEAAqE;AACrE;AACA;;AAEA,CAAC;;;;;;;ACpID;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,E;;;;;;AChGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,mBAAO,CAAC,EAAW;AACrC;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB;;AAEpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uCAAuC;AACvC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;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","file":"react-pathway-mapper.es5.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 77);\n","module.exports = require(\"react\");","module.exports = require(\"react-bootstrap\");","module.exports = require(\"jquery\");","module.exports = require(\"mobx\");","module.exports = require(\"autobind-decorator\");","module.exports = require(\"mobx-react\");","module.exports = require(\"cytoscape\");","module.exports = require(\"lodash\");","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iNDdweCIgaGVpZ2h0PSI0N3B4IiB2aWV3Qm94PSIwIDAgNDcgNDciIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQ3IDQ3OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxnPgoJPGcgaWQ9IkxheWVyXzFfMTEwXyI+CgkJPGc+CgkJCTxwYXRoIGQ9Ik0xNy41NjcsMTUuOTM4bC0yLjg1OS0yLjcwMmMwLjMzMy0wLjYwNSwwLjUzOS0xLjI5LDAuNTM5LTIuMDI5YzAtMi4zNDItMS44OTctNC4yMzktNC4yNC00LjIzOQoJCQkJYy0yLjM0MywwLTQuMjQzLDEuODk2LTQuMjQzLDQuMjM5YzAsMi4zNDMsMS45LDQuMjQxLDQuMjQzLDQuMjQxYzAuODI2LDAsMS41OS0wLjI0NiwyLjI0Mi0wLjY1NGwyLjg1NSwyLjY5OQoJCQkJQzE2LjUzNiwxNi45MjIsMTcuMDIzLDE2LjM5OSwxNy41NjcsMTUuOTM4eiIvPgoJCQk8cGF0aCBkPSJNMjkuNjYsMTUuNmwzLjc5OS02LjM5M2MwLjM3NCwwLjEwNywwLjc2MiwwLjE4NCwxLjE2OSwwLjE4NGMyLjM0NywwLDQuMjQ0LTEuODk4LDQuMjQ0LTQuMjQxCgkJCQljMC0yLjM0Mi0xLjg5Ny00LjIzOS00LjI0NC00LjIzOWMtMi4zNDMsMC00LjIzOSwxLjg5Ni00LjIzOSw0LjIzOWMwLDEuMTYzLDAuNDY5LDIuMjE0LDEuMjI3LDIuOTgxbC0zLjc4Nyw2LjM3NQoJCQkJQzI4LjQ4LDE0LjgwMSwyOS4wOTQsMTUuMTY5LDI5LjY2LDE1LjZ6Ii8+CgkJCTxwYXRoIGQ9Ik00Mi43NjIsMjAuOTUyYy0xLjgyNCwwLTMuMzY5LDEuMTU5LTMuOTY4LDIuNzc1bC01LjI3OC0wLjUyMWMwLDAuMDQsMC4wMDYsMC4wNzgsMC4wMDYsMC4xMTcKCQkJCWMwLDAuNjg4LTAuMDc2LDEuMzYtMC4yMTMsMi4wMDlsNS4yNzYsMC41MjFjMC4zMTksMi4wMjQsMi4wNjIsMy41NzYsNC4xNzcsMy41NzZjMi4zNDIsMCw0LjIzOC0xLjg5Niw0LjIzOC00LjIzOAoJCQkJQzQ3LDIyLjg1LDQ1LjEwNCwyMC45NTIsNDIuNzYyLDIwLjk1MnoiLz4KCQkJPHBhdGggZD0iTTI4LjE5NywzNy42MjRsLTEuMTgtNS4xNTZjLTAuNjY2LDAuMjMyLTEuMzU5LDAuMzk4LTIuMDgyLDAuNDgxbDEuMTgyLDUuMTU3Yy0xLjM1NSwwLjcwOS0yLjI5LDIuMTEtMi4yOSwzLjc0NgoJCQkJYzAsMi4zNDIsMS44OTYsNC4yMzcsNC4yNDMsNC4yMzdjMi4zNDIsMCw0LjIzOC0xLjg5Niw0LjIzOC00LjIzN0MzMi4zMTEsMzkuNTUzLDMwLjQ3OSwzNy42OTIsMjguMTk3LDM3LjYyNHoiLz4KCQkJPHBhdGggZD0iTTE0LjM1NywyNS4zN2wtNi41NywyLjIwMWMtMC43NTgtMS4xNTgtMi4wNjMtMS45MjYtMy41NDgtMS45MjZDMS44OTYsMjUuNjQ1LDAsMjcuNTQyLDAsMjkuODg0CgkJCQljMCwyLjM0NSwxLjg5Niw0LjI0Miw0LjIzOSw0LjI0MmMyLjM0MSwwLDQuMjQyLTEuODk3LDQuMjQyLTQuMjQyYzAtMC4wOTgtMC4wMjEtMC4xODgtMC4wMjktMC4yODRsNi41OTEtMi4yMDcKCQkJCUMxNC43NDYsMjYuNzUyLDE0LjUxLDI2LjA3NywxNC4zNTcsMjUuMzd6Ii8+CgkJCTxjaXJjbGUgY3g9IjIzLjgzIiBjeT0iMjMuMzIzIiByPSI3LjI3MSIvPgoJCTwvZz4KCTwvZz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K\"","module.exports = require(\"react-toastify\");","module.exports = require(\"oncoprintjs\");","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iNTUwLjgwMXB4IiBoZWlnaHQ9IjU1MC44MDFweCIgdmlld0JveD0iMCAwIDU1MC44MDEgNTUwLjgwMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTUwLjgwMSA1NTAuODAxOyIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8cGF0aCBkPSJNMTQ2Ljc0NywyNzYuNzA4YzAtMTMuOTk4LTkuNzExLTIyLjM1Mi0yNi44ODctMjIuMzUyYy02Ljk5LDAtMTEuNzI2LDAuNjc1LTE0LjIwNCwxLjM1NXY0NC45MjcKCQljMi45MzIsMC42NzYsNi41MzksMC44OTYsMTEuNTIsMC44OTZDMTM1LjQ0OSwzMDEuNTQ2LDE0Ni43NDcsMjkyLjI4LDE0Ni43NDcsMjc2LjcwOHoiLz4KCTxwYXRoIGQ9Ik00ODguNDI2LDE5Ny4wMTlINDc1LjJ2LTYzLjgxNmMwLTAuMzk4LTAuMDYzLTAuNzk5LTAuMTE2LTEuMjAyYy0wLjAyMS0yLjUzNC0wLjgyNy01LjAyMy0yLjU2Mi02Ljk5NUwzNjYuMzI1LDMuNjk0CgkJYy0wLjAzMi0wLjAzMS0wLjA2My0wLjA0Mi0wLjA4NS0wLjA3NmMtMC42MzMtMC43MDctMS4zNzEtMS4yOTUtMi4xNTEtMS44MDRjLTAuMjMxLTAuMTU1LTAuNDY0LTAuMjg1LTAuNzA2LTAuNDE5CgkJYy0wLjY3Ni0wLjM2OS0xLjM5My0wLjY3NS0yLjEzMS0wLjg5NmMtMC4yLTAuMDU2LTAuMzgtMC4xMzgtMC41OC0wLjE5QzM1OS44NywwLjExOSwzNTkuMDM3LDAsMzU4LjE5MywwSDk3LjIKCQljLTExLjkxOCwwLTIxLjYsOS42OTMtMjEuNiwyMS42MDF2MTc1LjQxM0g2Mi4zNzdjLTE3LjA0OSwwLTMwLjg3MywxMy44MTgtMzAuODczLDMwLjg3M3YxNjAuNTQ1CgkJYzAsMTcuMDQzLDEzLjgyNCwzMC44NywzMC44NzMsMzAuODdoMTMuMjI0VjUyOS4yYzAsMTEuOTA3LDkuNjgyLDIxLjYwMSwyMS42LDIxLjYwMWgzNTYuNGMxMS45MDcsMCwyMS42LTkuNjkzLDIxLjYtMjEuNjAxCgkJVjQxOS4zMDJoMTMuMjI2YzE3LjA0NCwwLDMwLjg3MS0xMy44MjcsMzAuODcxLTMwLjg3di0xNjAuNTRDNTE5LjI5NywyMTAuODM4LDUwNS40NywxOTcuMDE5LDQ4OC40MjYsMTk3LjAxOXogTTk3LjIsMjEuNjA1CgkJaDI1MC4xOTN2MTEwLjUxM2MwLDUuOTY3LDQuODQxLDEwLjgsMTAuOCwxMC44aDk1LjQwN3Y1NC4xMDhIOTcuMlYyMS42MDV6IE0yMzQuMzQ0LDMzNS44NnY0NS44MzFoLTMxLjYwMVYyMjkuNTI0aDQwLjE4NAoJCWwzMS42MTEsNTUuNzU5YzkuMDI1LDE2LjAzMSwxOC4wNjQsMzQuOTgzLDI0LjgyNSw1Mi4xNTRoMC42NzVjLTIuMjU3LTIwLjEwMy0yLjkzMy00MC42NDMtMi45MzMtNjMuNDR2LTQ0LjQ3M2gzMS42MTR2MTUyLjE2NwoJCWgtMzYuMTE3bC0zMi41MTYtNTguNzAzYy05LjA0OS0xNi4yNTMtMTguOTcxLTM1Ljg5Mi0yNi40MzgtNTMuNzI3bC0wLjY2NSwwLjIyMkMyMzMuOTA2LDI4OS41OCwyMzQuMzQ0LDMxMS4wMjcsMjM0LjM0NCwzMzUuODZ6CgkJIE03MS41NTYsMzgxLjY5MVYyMzEuNTZjMTAuNjEzLTEuODA0LDI1LjUxNi0zLjE1OSw0Ni41MDYtMy4xNTljMjEuMjE1LDAsMzYuMzUzLDQuMDYxLDQ2LjUwOSwxMi4xOTIKCQljOS42OTgsNy42NzMsMTYuMjU1LDIwLjMxMywxNi4yNTUsMzUuMjE5YzAsMTQuODk3LTQuOTU5LDI3LjU0OS0xMy45OTksMzYuMTIzYy0xMS43MzgsMTEuMDYzLTI5LjEyMywxNi4wMzEtNDkuNDQxLDE2LjAzMQoJCWMtNC41MjIsMC04LjU5My0wLjIzMS0xMS43MzYtMC42NzV2NTQuNDExSDcxLjU1NlYzODEuNjkxeiBNNDUzLjYwMSw1MjMuMzUzSDk3LjJWNDE5LjMwMmgzNTYuNFY1MjMuMzUzeiBNNDg1LjY1MiwzNzQuNjg4CgkJYy0xMC42MSwzLjYwNy0zMC43MTMsOC41ODUtNTAuODA1LDguNTg1Yy0yNy43NTksMC00Ny44NzItNy4wMDMtNjEuODU3LTIwLjU0NWMtMTMuOTk1LTEzLjEtMjEuNjg0LTMyLjk3LTIxLjQ1Mi01NS4zMTgKCQljMC4yMjItNTAuNTY5LDM3LjAzLTc5LjQ2Myw4Ni45MTctNzkuNDYzYzE5LjY0NCwwLDM0Ljc4MywzLjgyOSw0Mi4yMTksNy40NDZsLTcuMjE0LDI3LjU0M2MtOC4zNjktMy42MTctMTguNzUyLTYuNTUtMzUuNDU4LTYuNTUKCQljLTI4LjY1NiwwLTUwLjM0MSwxNi4yNTYtNTAuMzQxLDQ5LjIyYzAsMzEuMzgyLDE5LjY0OSw0OS44OTIsNDcuODcyLDQ5Ljg5MmM3Ljg5NSwwLDE0LjIxOC0wLjkwMSwxNi45MzQtMi4yNTd2LTMxLjgzNWgtMjMuNDkzCgkJdi0yNi44NjloNTYuNjc5VjM3NC42ODh6Ii8+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPC9zdmc+Cg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iNTUwLjgwMXB4IiBoZWlnaHQ9IjU1MC44MDFweCIgdmlld0JveD0iMCAwIDU1MC44MDEgNTUwLjgwMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTUwLjgwMSA1NTAuODAxOyIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8cGF0aCBkPSJNNDg4LjQyNiwxOTcuMDE5SDQ3NS4ydi02My44MTZjMC0wLjM5OC0wLjA2My0wLjc5OS0wLjExNi0xLjIwMmMtMC4wMjEtMi41MzQtMC44MjctNS4wMjMtMi41NjItNi45OTVMMzY2LjMyNSwzLjY5NAoJCWMtMC4wMzItMC4wMzEtMC4wNjMtMC4wNDItMC4wODUtMC4wNzZjLTAuNjMzLTAuNzA3LTEuMzcxLTEuMjk1LTIuMTUxLTEuODA0Yy0wLjIzMS0wLjE1NS0wLjQ2NC0wLjI4NS0wLjcwNi0wLjQxOQoJCWMtMC42NzYtMC4zNjktMS4zOTMtMC42NzUtMi4xMzEtMC44OTZjLTAuMi0wLjA1Ni0wLjM4LTAuMTM4LTAuNTgtMC4xOUMzNTkuODcsMC4xMTksMzU5LjAzNywwLDM1OC4xOTMsMEg5Ny4yCgkJYy0xMS45MTgsMC0yMS42LDkuNjkzLTIxLjYsMjEuNjAxdjE3NS40MTNINjIuMzc3Yy0xNy4wNDksMC0zMC44NzMsMTMuODE4LTMwLjg3MywzMC44NzN2MTYwLjU0NQoJCWMwLDE3LjA0MywxMy44MjQsMzAuODcsMzAuODczLDMwLjg3aDEzLjIyNFY1MjkuMmMwLDExLjkwNyw5LjY4MiwyMS42MDEsMjEuNiwyMS42MDFoMzU2LjRjMTEuOTA3LDAsMjEuNi05LjY5MywyMS42LTIxLjYwMQoJCVY0MTkuMzAyaDEzLjIyNmMxNy4wNDQsMCwzMC44NzEtMTMuODI3LDMwLjg3MS0zMC44N3YtMTYwLjU0QzUxOS4yOTcsMjEwLjgzOCw1MDUuNDcsMTk3LjAxOSw0ODguNDI2LDE5Ny4wMTl6IE05Ny4yLDIxLjYwNQoJCWgyNTAuMTkzdjExMC41MTNjMCw1Ljk2Nyw0Ljg0MSwxMC44LDEwLjgsMTAuOGg5NS40MDd2NTQuMTA4SDk3LjJWMjEuNjA1eiBNMzM4Ljg3MSwyMjUuNjcyTDI4NC41NDUsMzg2Ljk2aC00Mi41OTEKCQlsLTUxLjY5LTE2MS4yODhoMzkuOTY3bDE5LjYxNyw2OC4xOTZjNS41MDgsMTkuMTQzLDEwLjUzMSwzNy41NjcsMTQuMzYsNTcuNjdoMC43MTdjNC4wNjEtMTkuMzg1LDkuMDg5LTM4LjUyNywxNC41OTItNTYuOTUzCgkJbDIwLjU4NS02OC45MThoMzguNzdWMjI1LjY3MnogTTY4LjQ1OCwzNzkuNTRsNy40MTUtMzAuMTUzYzkuODExLDUuMDIxLDI0Ljg4OCwxMC4wNTEsNDAuNDM5LDEwLjA1MQoJCWMxNi43NTEsMCwyNS42MDctNi45MzUsMjUuNjA3LTE3LjQ2NWMwLTEwLjA1Mi03LjY2Mi0xNS43OTUtMjcuMDUtMjIuNzM0Yy0yNi44LTkuMzI4LTQ0LjI2My0yNC4xNjgtNDQuMjYzLTQ3LjYxMQoJCWMwLTI3LjUyNCwyMi45NzEtNDguNTc5LDYxLjAxNC00OC41NzljMTguMTg4LDAsMzEuNTkxLDMuODIzLDQxLjE1OSw4LjEzMWwtOC4xMjYsMjkuNDM3Yy02LjQ2NS0zLjExNi0xNy45NDUtNy42NTctMzMuNzQ1LTcuNjU3CgkJYy0xNS43OTEsMC0yMy40NTQsNy4xODMtMjMuNDU0LDE1LjU1MmMwLDEwLjI5Niw5LjA4OSwxNC44NDIsMjkuOTE3LDIyLjczMWMyOC40NjgsMTAuNTM2LDQxLjg3MSwyNS4zNjUsNDEuODcxLDQ4LjA5NAoJCWMwLDI3LjA0Mi0yMC44MTIsNTAuMDEzLTY1LjA5LDUwLjAxM0M5NS43MzEsMzg5LjM0OSw3Ny41MzgsMzg0LjU3MSw2OC40NTgsMzc5LjU0eiBNNDUzLjYwMSw1MjMuMzUzSDk3LjJWNDE5LjMwMmgzNTYuNFY1MjMuMzUzegoJCSBNNDg4LjkxMSwzNzkuNTRjLTExLjI0MywzLjgyMy0zMi41MzcsOS4xMDMtNTMuODMxLDkuMTAzYy0yOS40MzcsMC01MC43My03LjQyNi02NS41Ny0yMS43NzkKCQljLTE0LjgzOS0xMy44NzUtMjIuOTcxLTM0Ljk0Mi0yMi43MzgtNTguNjI1YzAuMjUzLTUzLjYwNCwzOS4yNTUtODQuMjM1LDkyLjEzNy04NC4yMzVjMjAuODEsMCwzNi44NTIsNC4wNzMsNDQuNzQsNy44OTYKCQlsLTcuNjU3LDI5LjIwMmMtOC44NTktMy44MjktMTkuODQ5LTYuOTUtMzcuNTY3LTYuOTVjLTMwLjM5NiwwLTUzLjM1NywxNy4yMzMtNTMuMzU3LDUyLjE3M2MwLDMzLjI2NSwyMC44MSw1Mi44ODIsNTAuNzMsNTIuODgyCgkJYzguMzc1LDAsMTUuMDcyLTAuOTYsMTcuOTQtMi4zOTV2LTMzLjc0NWgtMjQuODc1di0yOC40NzFoNjAuMDQ5VjM3OS41NEw0ODguOTExLDM3OS41NHoiLz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K\"","module.exports = require(\"file-saver\");","module.exports = \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItZWRpdCI+PHBhdGggZD0iTTExIDRINGEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoMTRhMiAyIDAgMCAwIDItMnYtNyI+PC9wYXRoPjxwYXRoIGQ9Ik0xOC41IDIuNWEyLjEyMSAyLjEyMSAwIDAgMSAzIDNMMTIgMTVsLTQgMSAxLTQgOS41LTkuNXoiPjwvcGF0aD48L3N2Zz4=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE4LjEuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMjMuNjI1IDIzLjYyNSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMjMuNjI1IDIzLjYyNTsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggc3R5bGU9ImZpbGw6IzAzMDEwNDsiIGQ9Ik0xMS44MTIsMEM1LjI4OSwwLDAsNS4yODksMCwxMS44MTJzNS4yODksMTEuODEzLDExLjgxMiwxMS44MTNzMTEuODEzLTUuMjksMTEuODEzLTExLjgxMw0KCQlTMTguMzM1LDAsMTEuODEyLDB6IE0xNC4yNzEsMTguMzA3Yy0wLjYwOCwwLjI0LTEuMDkyLDAuNDIyLTEuNDU1LDAuNTQ4Yy0wLjM2MiwwLjEyNi0wLjc4MywwLjE4OS0xLjI2MiwwLjE4OQ0KCQljLTAuNzM2LDAtMS4zMDktMC4xOC0xLjcxNy0wLjUzOXMtMC42MTEtMC44MTQtMC42MTEtMS4zNjdjMC0wLjIxNSwwLjAxNS0wLjQzNSwwLjA0NS0wLjY1OWMwLjAzMS0wLjIyNCwwLjA4LTAuNDc2LDAuMTQ3LTAuNzU5DQoJCWwwLjc2MS0yLjY4OGMwLjA2Ny0wLjI1OCwwLjEyNS0wLjUwMywwLjE3MS0wLjczMWMwLjA0Ni0wLjIzLDAuMDY4LTAuNDQxLDAuMDY4LTAuNjMzYzAtMC4zNDItMC4wNzEtMC41ODItMC4yMTItMC43MTcNCgkJYy0wLjE0My0wLjEzNS0wLjQxMi0wLjIwMS0wLjgxMy0wLjIwMWMtMC4xOTYsMC0wLjM5OCwwLjAyOS0wLjYwNSwwLjA5Yy0wLjIwNSwwLjA2My0wLjM4MywwLjEyLTAuNTI5LDAuMTc2bDAuMjAxLTAuODI4DQoJCWMwLjQ5OC0wLjIwMywwLjk3NS0wLjM3NywxLjQzLTAuNTIxYzAuNDU1LTAuMTQ2LDAuODg1LTAuMjE4LDEuMjktMC4yMThjMC43MzEsMCwxLjI5NSwwLjE3OCwxLjY5MiwwLjUzDQoJCWMwLjM5NSwwLjM1MywwLjU5NCwwLjgxMiwwLjU5NCwxLjM3NmMwLDAuMTE3LTAuMDE0LDAuMzIzLTAuMDQxLDAuNjE3Yy0wLjAyNywwLjI5NS0wLjA3OCwwLjU2NC0wLjE1MiwwLjgxMWwtMC43NTcsMi42OA0KCQljLTAuMDYyLDAuMjE1LTAuMTE3LDAuNDYxLTAuMTY3LDAuNzM2Yy0wLjA0OSwwLjI3NS0wLjA3MywwLjQ4NS0wLjA3MywwLjYyNmMwLDAuMzU2LDAuMDc5LDAuNTk5LDAuMjM5LDAuNzI4DQoJCWMwLjE1OCwwLjEyOSwwLjQzNSwwLjE5NCwwLjgyNywwLjE5NGMwLjE4NSwwLDAuMzkyLTAuMDMzLDAuNjI2LTAuMDk3YzAuMjMyLTAuMDY0LDAuNC0wLjEyMSwwLjUwNi0wLjE3TDE0LjI3MSwxOC4zMDd6DQoJCSBNMTQuMTM3LDcuNDI5Yy0wLjM1MywwLjMyOC0wLjc3OCwwLjQ5Mi0xLjI3NSwwLjQ5MmMtMC40OTYsMC0wLjkyNC0wLjE2NC0xLjI4LTAuNDkyYy0wLjM1NC0wLjMyOC0wLjUzMy0wLjcyNy0wLjUzMy0xLjE5Mw0KCQljMC0wLjQ2NSwwLjE4LTAuODY1LDAuNTMzLTEuMTk2YzAuMzU2LTAuMzMyLDAuNzg0LTAuNDk3LDEuMjgtMC40OTdjMC40OTcsMCwwLjkyMywwLjE2NSwxLjI3NSwwLjQ5Nw0KCQljMC4zNTMsMC4zMzEsMC41MywwLjczMSwwLjUzLDEuMTk2QzE0LjY2Nyw2LjcwMywxNC40OSw3LjEwMSwxNC4xMzcsNy40Mjl6Ii8+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxOS4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4KCjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0iQ2FwYV8xIgogICB4PSIwcHgiCiAgIHk9IjBweCIKICAgdmlld0JveD0iMCAwIDU3IDU3IgogICBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1NyA1NzsiCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgIHNvZGlwb2RpOmRvY25hbWU9ImFkZC1zZWxlY3RlZC1uZXcuc3ZnIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjQgKDVkYTY4OWMzMTMsIDIwMTktMDEtMTQpIj48bWV0YWRhdGEKICAgaWQ9Im1ldGFkYXRhNDciPjxyZGY6UkRGPjxjYzpXb3JrCiAgICAgICByZGY6YWJvdXQ9IiI+PGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+PGRjOnR5cGUKICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48ZGM6dGl0bGU+PC9kYzp0aXRsZT48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMKICAgaWQ9ImRlZnM0NSI+CgkKCQoJCgkKPC9kZWZzPjxzb2RpcG9kaTpuYW1lZHZpZXcKICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgYm9yZGVyb3BhY2l0eT0iMSIKICAgb2JqZWN0dG9sZXJhbmNlPSIxMCIKICAgZ3JpZHRvbGVyYW5jZT0iMTAiCiAgIGd1aWRldG9sZXJhbmNlPSIxMCIKICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAiCiAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTA5NyIKICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iNzE5IgogICBpZD0ibmFtZWR2aWV3NDMiCiAgIHNob3dncmlkPSJmYWxzZSIKICAgaW5rc2NhcGU6em9vbT0iNC4xNDAzNTA5IgogICBpbmtzY2FwZTpjeD0iLTEwLjc0Nzg4MSIKICAgaW5rc2NhcGU6Y3k9IjI4LjUiCiAgIGlua3NjYXBlOndpbmRvdy14PSIwIgogICBpbmtzY2FwZTp3aW5kb3cteT0iMCIKICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMCIKICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0iQ2FwYV8xIiAvPgo8cGF0aAogICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICBpZD0icGF0aDIiCiAgIGQ9Ik0gMjguNjYsNiBIIDkuMzQgQyA3LjQ5OCw2IDYsNy40OTggNiw5LjM0IFYgMjguNjYgQyA2LDMwLjUwMiA3LjQ5OCwzMiA5LjM0LDMyIEggMjguNjYgQyAzMC41MDIsMzIgMzIsMzAuNTAyIDMyLDI4LjY2IFYgOS4zNCBDIDMyLDcuNDk4IDMwLjUwMiw2IDI4LjY2LDYgWiIgLz48cGF0aAogICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICBpZD0icGF0aDgiCiAgIGQ9Ik0gNTEsMzcgSCA0MSBWIDI3IGMgMCwtMS4xMDQgLTAuODk2LC0yIC0yLC0yIC0xLjEwNCwwIC0yLDAuODk2IC0yLDIgViAzNyBIIDI3IGMgLTEuMTA0LDAgLTIsMC44OTYgLTIsMiAwLDEuMTA0IDAuODk2LDIgMiwyIGggMTAgdiAxMCBjIDAsMS4xMDQgMC44OTYsMiAyLDIgMS4xMDQsMCAyLC0wLjg5NiAyLC0yIFYgNDEgaCAxMCBjIDEuMTA0LDAgMiwtMC44OTYgMiwtMiAwLC0xLjEwNCAtMC44OTYsLTIgLTIsLTIgeiIgLz4KPGcKICAgaWQ9ImcxMiI+CjwvZz4KPGcKICAgaWQ9ImcxNCI+CjwvZz4KPGcKICAgaWQ9ImcxNiI+CjwvZz4KPGcKICAgaWQ9ImcxOCI+CjwvZz4KPGcKICAgaWQ9ImcyMCI+CjwvZz4KPGcKICAgaWQ9ImcyMiI+CjwvZz4KPGcKICAgaWQ9ImcyNCI+CjwvZz4KPGcKICAgaWQ9ImcyNiI+CjwvZz4KPGcKICAgaWQ9ImcyOCI+CjwvZz4KPGcKICAgaWQ9ImczMCI+CjwvZz4KPGcKICAgaWQ9ImczMiI+CjwvZz4KPGcKICAgaWQ9ImczNCI+CjwvZz4KPGcKICAgaWQ9ImczNiI+CjwvZz4KPGcKICAgaWQ9ImczOCI+CjwvZz4KPGcKICAgaWQ9Imc0MCI+CjwvZz4KPC9zdmc+\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTcgNTciIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDU3IDU3OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8Zz4NCgk8cGF0aCBkPSJNMjIuNjYsMEgzLjM0QzEuNDk4LDAsMCwxLjQ5OCwwLDMuMzR2MTkuMzJDMCwyNC41MDIsMS40OTgsMjYsMy4zNCwyNmgxOS4zMmMxLjg0MiwwLDMuMzQtMS40OTgsMy4zNC0zLjM0VjMuMzQNCgkJQzI2LDEuNDk4LDI0LjUwMiwwLDIyLjY2LDB6Ii8+DQoJPHBhdGggZD0iTTMzLjM0LDI2aDE5LjMyYzEuODQyLDAsMy4zNC0xLjQ5OCwzLjM0LTMuMzRWMy4zNEM1NiwxLjQ5OCw1NC41MDIsMCw1Mi42NiwwSDMzLjM0QzMxLjQ5OCwwLDMwLDEuNDk4LDMwLDMuMzR2MTkuMzINCgkJQzMwLDI0LjUwMiwzMS40OTgsMjYsMzMuMzQsMjZ6Ii8+DQoJPHBhdGggZD0iTTIyLjY2LDMwSDMuMzRDMS40OTgsMzAsMCwzMS40OTgsMCwzMy4zNHYxOS4zMkMwLDU0LjUwMiwxLjQ5OCw1NiwzLjM0LDU2aDE5LjMyYzEuODQyLDAsMy4zNC0xLjQ5OCwzLjM0LTMuMzRWMzMuMzQNCgkJQzI2LDMxLjQ5OCwyNC41MDIsMzAsMjIuNjYsMzB6Ii8+DQoJPHBhdGggZD0iTTU1LDQxSDQ1VjMxYzAtMS4xMDQtMC44OTYtMi0yLTJzLTIsMC44OTYtMiwydjEwSDMxYy0xLjEwNCwwLTIsMC44OTYtMiwyczAuODk2LDIsMiwyaDEwdjEwYzAsMS4xMDQsMC44OTYsMiwyLDINCgkJczItMC44OTYsMi0yVjQ1aDEwYzEuMTA0LDAsMi0wLjg5NiwyLTJTNTYuMTA0LDQxLDU1LDQxeiIvPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPC9zdmc+DQo=\"","module.exports = require(\"mousetrap\");","module.exports = require(\"react-tooltip\");","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iNzUuNDA2cHgiIGhlaWdodD0iNzUuNDA2cHgiIHZpZXdCb3g9IjAgMCA3NS40MDYgNzUuNDA2IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA3NS40MDYgNzUuNDA2OyIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8cGF0aCBkPSJNMzUuNDM2LDBINy43NTV2NjMuOTUyaDI3LjY4MkwzNS40MzYsMEwzNS40MzYsMHogTTMyLjU3Myw2MS4wODlIMTAuNjE4VjIuODYzaDIxLjk1NVY2MS4wODl6IE03MC4yNzQsMjYuNDg4aC0yNy42OAoJCXYzNy40NjRoMjcuNjgyVjI2LjQ4OEg3MC4yNzR6IE02Ny40MTIsNjEuMDg5SDQ1LjQ1N1YyOS4zNTFoMjEuOTU1VjYxLjA4OXogTTc0LjU3MSw3MC4zOTV2NS4wMTJIMC44MzV2LTUuMDEySDc0LjU3MXoiLz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iOTAuOTU2cHgiIGhlaWdodD0iOTAuOTU3cHgiIHZpZXdCb3g9IjAgMCA5MC45NTYgOTAuOTU3IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA5MC45NTYgOTAuOTU3OyIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8cGF0aCBkPSJNNDEuNjYxLDEzLjUwMUgxMy45Nzl2NjMuOTUzaDI3LjY4MlYxMy41MDF6IE0zOC43OTcsNzQuNTkxSDE2Ljg0MlYxNi4zNjZoMjEuOTU1Vjc0LjU5MXogTTc2LjQ5OSwyNi43NDdINDguODE4djM3LjQ2NQoJCUg3Ni41TDc2LjQ5OSwyNi43NDdMNzYuNDk5LDI2Ljc0N3ogTTczLjYzNyw2MS4zNDdINTEuNjgyVjI5LjYwOWgyMS45NTVWNjEuMzQ3eiBNMTAuOTc4LDQyLjk3M3Y1LjAxMUgwdi01LjAxMUgxMC45Nzh6CgkJIE05MC45NTYsNDIuOTczdjUuMDExSDc5Ljk3OXYtNS4wMTFIOTAuOTU2eiIvPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+Cjwvc3ZnPgo=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iNzUuNDA2cHgiIGhlaWdodD0iNzUuNDA2cHgiIHZpZXdCb3g9IjAgMCA3NS40MDYgNzUuNDA2IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA3NS40MDYgNzUuNDA2OyIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8cGF0aCBkPSJNMzUuNDM2LDExLjQ1NEg3Ljc1NXY2My45NTJoMjcuNjgyTDM1LjQzNiwxMS40NTRMMzUuNDM2LDExLjQ1NHogTTMyLjU3Myw3Mi41NDNIMTAuNjE4VjE0LjMxN2gyMS45NTVWNzIuNTQzegoJCSBNNzAuMjc0LDExLjQ1NGgtMjcuNjh2MzcuNDY0aDI3LjY4MlYxMS40NTRINzAuMjc0eiBNNjcuNDEyLDQ2LjA1NUg0NS40NTdWMTQuMzE3aDIxLjk1NVY0Ni4wNTV6IE0wLjgzNSw1LjAxMVYwaDczLjczNnY1LjAxMQoJCUgwLjgzNXoiLz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iOTAuOTU2cHgiIGhlaWdodD0iOTAuOTU2cHgiIHZpZXdCb3g9IjAgMCA5MC45NTYgOTAuOTU2IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA5MC45NTYgOTAuOTU2OyIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8cGF0aCBkPSJNNzcuNDU0LDQxLjY2MVYxMy45NzlIMTMuNTAydjI3LjY4Mkg3Ny40NTR6IE0xNi4zNjUsMzguNzk3VjE2Ljg0Mmg1OC4yMjZ2MjEuOTU1SDE2LjM2NXogTTY0LjIxLDc2LjQ5OVY0OC44MThIMjYuNzQ2CgkJVjc2LjVMNjQuMjEsNzYuNDk5TDY0LjIxLDc2LjQ5OXogTTI5LjYwOSw3My42MzdWNTEuNjgyaDMxLjczN3YyMS45NTVIMjkuNjA5eiBNNDcuOTgyLDEwLjk3OGgtNS4wMVYwaDUuMDFWMTAuOTc4egoJCSBNNDcuOTgyLDkwLjk1NmgtNS4wMVY3OS45NzloNS4wMVY5MC45NTZ6Ii8+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPC9zdmc+Cg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iNzUuNDA2cHgiIGhlaWdodD0iNzUuNDA2cHgiIHZpZXdCb3g9IjAgMCA3NS40MDYgNzUuNDA2IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA3NS40MDYgNzUuNDA2OyIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8cGF0aCBkPSJNNzUuNDA2LDM1LjQzNlY3Ljc1NUgxMS40NTR2MjcuNjgyTDc1LjQwNiwzNS40MzZMNzUuNDA2LDM1LjQzNnogTTE0LjMxNywzMi41NzNWMTAuNjE4aDU4LjIyNnYyMS45NTVIMTQuMzE3egoJCSBNNDguOTE4LDcwLjI3NVY0Mi41OTVIMTEuNDU0djI3LjY4Mkw0OC45MTgsNzAuMjc1TDQ4LjkxOCw3MC4yNzV6IE0xNC4zMTcsNjcuNDEyVjQ1LjQ1N2gzMS43Mzh2MjEuOTU1SDE0LjMxN3ogTTUuMDExLDc0LjU3MUgwCgkJVjAuODM1aDUuMDExVjc0LjU3MXoiLz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iNzUuNDA2cHgiIGhlaWdodD0iNzUuNDA2cHgiIHZpZXdCb3g9IjAgMCA3NS40MDYgNzUuNDA2IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA3NS40MDYgNzUuNDA2OyIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8cGF0aCBkPSJNNjMuOTUyLDM1LjQzNlY3Ljc1NUgwdjI3LjY4Mkw2My45NTIsMzUuNDM2TDYzLjk1MiwzNS40MzZ6IE0yLjg2MywzMi41NzNWMTAuNjE4SDYxLjA5djIxLjk1NUgyLjg2M3ogTTYzLjk1Miw3MC4yNzUKCQlWNDIuNTk1SDI2LjQ4OHYyNy42ODJMNjMuOTUyLDcwLjI3NUw2My45NTIsNzAuMjc1eiBNMjkuMzUxLDY3LjQxMlY0NS40NTdoMzEuNzM3djIxLjk1NUgyOS4zNTF6IE03MC4zOTUsMC44MzVoNS4wMTJ2NzMuNzM2CgkJaC01LjAxMlYwLjgzNXoiLz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxOC4xLjEsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4KCjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0iQ2FwYV8xIgogICB4PSIwcHgiCiAgIHk9IjBweCIKICAgdmlld0JveD0iMCAwIDYxMiA2MTIiCiAgIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDYxMiA2MTI7IgogICB4bWw6c3BhY2U9InByZXNlcnZlIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkxIHIxMzcyNSIKICAgc29kaXBvZGk6ZG9jbmFtZT0iZGVsZXRlLXNpbXBsZS5zdmciPjxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTQzIj48cmRmOlJERj48Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+PGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+PGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPjwvY2M6V29yaz48L3JkZjpSREY+PC9tZXRhZGF0YT48ZGVmcwogICAgIGlkPSJkZWZzNDEiIC8+PHNvZGlwb2RpOm5hbWVkdmlldwogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxIgogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiCiAgICAgZ3JpZHRvbGVyYW5jZT0iMTAiCiAgICAgZ3VpZGV0b2xlcmFuY2U9IjEwIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciCiAgICAgaWQ9Im5hbWVkdmlldzM5IgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTp6b29tPSIxLjA5MDcwMDciCiAgICAgaW5rc2NhcGU6Y3g9IjI5NS4wMzQwOCIKICAgICBpbmtzY2FwZTpjeT0iMzMwLjg1NDQ4IgogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJDYXBhXzEiIC8+PGcKICAgICBpZD0iZzUiCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC45OTc4ODEzNSwwLDAsMC45OTc4ODEzNSwxLjczMDQwMTIsMC45MjM3Mjg0NykiPjxwYXRoCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgaWQ9InBhdGg3IgogICAgICAgZD0iTSA1ODcuODI2LDE4Ni45NjYgQyA1NzEuNzEsMTQ5LjYzNCA1NDkuODgyLDExNy4xOTggNTIyLjM0Miw4OS42NTggNDk0LjgwMiw2Mi4xMTggNDYyLjM2Niw0MC4yOSA0MjUuMDM0LDI0LjE3NCAzODcuNzAyLDguMDU4IDM0OC4wMjQsMCAzMDYsMCAyNzcuODQ4LDAgMjUwLjcxNiwzLjY3MiAyMjQuNjA0LDExLjAxNiAxOTguNDkyLDE4LjM2IDE3NC4xMTQsMjguNjYyIDE1MS40Nyw0MS45MjIgMTI4LjgyNiw1NS4xODIgMTA4LjIyMiw3MS4wOTQgODkuNjU4LDg5LjY1OCA3MS4wOTQsMTA4LjIyMiA1NS4xODIsMTI4LjgyNiA0MS45MjIsMTUxLjQ3IDI4LjY2MiwxNzQuMTE2IDE4LjM2LDE5OC40OTIgMTEuMDE2LDIyNC42MDQgMy42NzIsMjUwLjcxNiAwLDI3Ny44NDggMCwzMDYgYyAwLDI4LjE1MiAzLjY3Miw1NS4yODQgMTEuMDE2LDgxLjM5NiA3LjM0NCwyNi4xMSAxNy42NDYsNTAuNDg3IDMwLjkwNiw3My4xMzQgMTMuMjYsMjIuNjQ0IDI5LjE3Miw0My4yNDkgNDcuNzM2LDYxLjgxMiAxOC41NjQsMTguNTY0IDM5LjE2OCwzNC40NzggNjEuODEyLDQ3LjczNiAyMi42NDQsMTMuMjYgNDcuMDIyLDIzLjU2MSA3My4xMzQsMzAuOTA2IEMgMjUwLjcxNiw2MDguMzI4IDI3Ny44NDgsNjEyIDMwNiw2MTIgYyAyOC4xNTIsMCA1NS4yODQsLTMuNjcyIDgxLjM5NiwtMTEuMDE2IDI2LjExMSwtNy4zNDYgNTAuNDg4LC0xNy42NDYgNzMuMTM1LC0zMC45MDYgMjIuNjQ0LC0xMy4yNTkgNDMuMjQ5LC0yOS4xNzIgNjEuODEyLC00Ny43MzYgMTguNTY0LC0xOC41NjMgMzQuNDc4LC0zOS4xNjggNDcuNzM2LC02MS44MTIgMTMuMjYsLTIyLjY0NiAyMy41NjEsLTQ3LjAyMyAzMC45MDYsLTczLjEzNSBDIDYwOC4zMjgsMzYxLjI4NCA2MTIsMzM0LjE1MiA2MTIsMzA2IDYxMiwyNjMuOTc2IDYwMy45NDIsMjI0LjI5OCA1ODcuODI2LDE4Ni45NjYgWiBNIDQ2OC4xOCwzOTEuNjggYyAyLjA0LDIuMDQgMy4wNjMsNC4yODQgMy4wNjMsNi43MzIgMCwyLjQ0OCAtMS4wMjEsNC40ODggLTMuMDYzLDYuMTIgbCAtNTkuOTc2LDYwLjU4OCBjIC0xLjYzMSwxLjYzMiAtMy44NzYsMi40NDggLTYuNzMyLDIuNDQ4IC0yLjg1NCwwIC00Ljg5NSwtMC44MTYgLTYuMTIsLTIuNDQ4IEwgMzA5LjA2LDM3OC44MjggMjIzLjM4LDQ2NS4xMiBjIC0yLjQ0OCwxLjYzMiAtNC42OTIsMi40NDggLTYuNzMyLDIuNDQ4IC0xLjYzMiwwIC0zLjY3MiwtMC44MTYgLTYuMTIsLTIuNDQ4IGwgLTU5Ljk3NiwtNjAuNTg4IGMgLTIuMDQsLTEuMjI2IC0zLjA2LC0zLjI2NyAtMy4wNiwtNi4xMiAwLC0yLjQ0OCAxLjAyLC00LjY5MiAzLjA2LC02LjczMiBsIDg1LjY4LC04NS42OCAtODUuNjgsLTg1LjY4IGMgLTIuMDQsLTIuMDQgLTMuMDYsLTQuMjg0IC0zLjA2LC02LjczMiAwLC0yLjg1NiAxLjAyLC00Ljg5NiAzLjA2LC02LjEyIGwgNTkuOTc2LC02MC41ODggYyAxLjYzMiwtMS42MzIgMy42NzIsLTIuNDQ4IDYuMTIsLTIuNDQ4IDIuNDQ4LDAgNC42OTIsMC44MTYgNi43MzIsMi40NDggbCA4NS42OCw4Ni4yOTIgODYuMjkyLC04Ni4yOTIgYyAxLjYzNSwtMS42MzIgMy42NzUsLTIuNDQ4IDYuMTIsLTIuNDQ4IDIuNDQ4LDAgNC42OTIsMC44MTYgNi43MzIsMi40NDggbCA1OS45NzYsNjAuNTg4IGMgMi4wNCwxLjYzMiAzLjA2MywzLjY3MiAzLjA2Myw2LjEyIDAsMi40NDggLTEuMDIxLDQuNjkyIC0zLjA2Myw2LjczMiBMIDM4Mi41LDMwNiBsIDg1LjY4LDg1LjY4IHoiCiAgICAgICBzdHlsZT0iZmlsbDojMDEwMDAyIiAvPjwvZz48ZwogICAgIGlkPSJnOSIgLz48ZwogICAgIGlkPSJnMTEiIC8+PGcKICAgICBpZD0iZzEzIiAvPjxnCiAgICAgaWQ9ImcxNSIgLz48ZwogICAgIGlkPSJnMTciIC8+PGcKICAgICBpZD0iZzE5IiAvPjxnCiAgICAgaWQ9ImcyMSIgLz48ZwogICAgIGlkPSJnMjMiIC8+PGcKICAgICBpZD0iZzI1IiAvPjxnCiAgICAgaWQ9ImcyNyIgLz48ZwogICAgIGlkPSJnMjkiIC8+PGcKICAgICBpZD0iZzMxIiAvPjxnCiAgICAgaWQ9ImczMyIgLz48ZwogICAgIGlkPSJnMzUiIC8+PGcKICAgICBpZD0iZzM3IiAvPjwvc3ZnPg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iNTQxLjkxMXB4IiBoZWlnaHQ9IjU0MS45MTFweCIgdmlld0JveD0iMCAwIDU0MS45MTEgNTQxLjkxMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTQxLjkxMSA1NDEuOTExOyIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8cGF0aCBkPSJNNDY3LjgyNiw4Ljc4MXY0Ny40NTFINzQuMDkxVjguNzgxYzAtNC42MDgtMy43MjktOC4zMzQtOC4zMzQtOC4zMzRjLTQuNjA3LDAtOC4zMzQsMy43MjctOC4zMzQsOC4zMzR2NDkuMDY4SDguMzM0CgkJQzMuNzMsNTcuODQ5LDAsNjEuNTg0LDAsNjYuMTgzYzAsNC42MDcsMy43Myw4LjMzNCw4LjMzNCw4LjMzNGg0OS4wODN2MzkyLjg2OEg4LjMzNGMtNC42MDQsMC04LjMzNCwzLjcyOS04LjMzNCw4LjMzNAoJCWMwLDQuNjEsMy43Myw4LjMzNCw4LjMzNCw4LjMzNGg0OS4wODN2NDkuMDc3YzAsNC42MDQsMy43MjcsOC4zMzQsOC4zMzQsOC4zMzRjNC42MDQsMCw4LjMzNC0zLjcyOSw4LjMzNC04LjMzNHYtNDkuMDc3aDM5My43NAoJCXY0OS4wNzdjMCw0LjYwNCwzLjcyOSw4LjMzNCw4LjMzNCw4LjMzNGM0LjYxLDAsOC4zMzQtMy43MjksOC4zMzQtOC4zMzR2LTQ5LjA3N2g0OS4wODNjNC42MDQsMCw4LjMzNC0zLjcyNCw4LjMzNC04LjMzNAoJCWMwLTQuNjA0LTMuNzI5LTguMzM0LTguMzM0LTguMzM0aC00OC4zMzJWNzQuNTE3aDQ4LjMzMmM0LjYwNCwwLDguMzM0LTMuNzI3LDguMzM0LTguMzM0YzAtNC41OTktMy43MjktOC4zMzQtOC4zMzQtOC4zMzRoLTQ5LjA4MwoJCVY4Ljc4MWMwLTQuNjA4LTMuNzI0LTguMzM0LTguMzM0LTguMzM0QzQ3MS41NTUsMC40NDYsNDY3LjgyNiw0LjE3Myw0NjcuODI2LDguNzgxeiBNNDY4LjIwNCwzNDAuNTI4djEyNi44NTdIMzQwLjQxM1YzNDAuNTI4CgkJSDQ2OC4yMDR6IE0zMzQuODU3LDM0MC41Mjh2MTI2Ljg1N0gyMDcuNDM2VjM0MC41MjhIMzM0Ljg1N3ogTTIwMS41MDQsMzQwLjUyOHYxMjYuODU3SDc0LjA5MVYzNDAuNTI4SDIwMS41MDR6IE00NjguMjA0LDIwNy4xNzIKCQl2MTI3LjhIMzQwLjQxM3YtMTI3LjhINDY4LjIwNHogTTMzNC44NTcsMjA3LjE3MnYxMjcuOEgyMDcuNDM2di0xMjcuOEgzMzQuODU3eiBNMjAxLjUwNCwyMDcuMTcydjEyNy44SDc0LjA5MXYtMTI3LjhIMjAxLjUwNHoKCQkgTTQ2OC4yMDQsNzMuODI5djEyNy43ODhIMzQwLjQxM1Y3My44MjlINDY4LjIwNHogTTMzNC44NTcsNzMuODI5djEyNy43ODhIMjA3LjQzNlY3My44MjlIMzM0Ljg1N3ogTTIwMS41MDQsNzMuODI5djEyNy43ODgKCQlINzQuMDkxVjczLjgyOUgyMDEuNTA0eiBNMzIzLjQxNCw4My44ODVWMTg4Ljc5SDIxOC41MDZWODMuODg1SDMyMy40MTR6Ii8+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPC9zdmc+Cg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iNDE4cHgiIGhlaWdodD0iNDE4cHgiIHZpZXdCb3g9IjAgMCA0MTggNDE4IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA0MTggNDE4OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxnPgoJPGc+CgkJPGc+CgkJCTxwYXRoIGQ9Ik05MS42MDYsMTQzLjcwM2MtMy4xNDYtMy4xNDYtNy44NzctNC4wODctMTEuOTg4LTIuMzg1Yy00LjExLDEuNzAzLTYuNzksNS43MTQtNi43OSwxMC4xNjN2MTE1LjAzNwoJCQkJYzAsNC40NDksMi42OCw4LjQ2MSw2Ljc5LDEwLjE2NGMxLjM2MSwwLjU2MywyLjc5LDAuODM2LDQuMjA4LDAuODM2YzIuODYyLDAsNS42NzYtMS4xMTYsNy43OC0zLjIyMmw1Ny41Mi01Ny41MTkKCQkJCWMyLjA2My0yLjA2MywzLjIyMi00Ljg2MSwzLjIyMi03Ljc3OHMtMS4xNTktNS43MTYtMy4yMjItNy43NzhMOTEuNjA2LDE0My43MDN6Ii8+CgkJCTxwYXRoIGQ9Ik0zMzguMzgyLDE0MS4zMThjLTQuMTA3LTEuNy04Ljg0MS0wLjc2My0xMS45ODcsMi4zODVsLTU3LjUyMSw1Ny41MTljLTIuMDYyLDIuMDYzLTMuMjIyLDQuODYxLTMuMjIyLDcuNzc4CgkJCQlzMS4xNTgsNS43MTYsMy4yMjIsNy43NzdsNTcuNTIxLDU3LjUyYzIuMTA0LDIuMTA0LDQuOTE4LDMuMjIzLDcuNzc5LDMuMjIzYzEuNDE3LDAsMi44NDgtMC4yNzIsNC4yMDgtMC44MzgKCQkJCWM0LjExLTEuNzAzLDYuNzktNS43MTQsNi43OS0xMC4xNjJWMTUxLjQ4MUMzNDUuMTcyLDE0Ny4wMzIsMzQyLjQ5MiwxNDMuMDIxLDMzOC4zODIsMTQxLjMxOHoiLz4KCQkJPHBhdGggZD0iTTIxMiwwaC02Yy02LjA3NSwwLTExLDQuOTI1LTExLDExdjM1YzAsNi4wNzUsNC45MjUsMTEsMTEsMTFoNmM2LjA3NSwwLDExLTQuOTI1LDExLTExVjExQzIyMyw0LjkyNSwyMTguMDc1LDAsMjEyLDB6IgoJCQkJLz4KCQkJPHBhdGggZD0iTTIxMiw5NS4zNTJoLTZjLTYuMDc1LDAtMTEsNC45MjUtMTEsMTF2NzIuNDczYzAsNi4wNzUsNC45MjUsMTEsMTEsMTFoNmM2LjA3NSwwLDExLTQuOTI1LDExLTExdi03Mi40NzMKCQkJCUMyMjMsMTAwLjI3NiwyMTguMDc1LDk1LjM1MiwyMTIsOTUuMzUyeiIvPgoJCQk8cGF0aCBkPSJNMjEyLDIyOC4xNzZoLTZjLTYuMDc1LDAtMTEsNC45MjYtMTEsMTF2NzIuNDc0YzAsNi4wNzUsNC45MjUsMTEsMTEsMTFoNmM2LjA3NSwwLDExLTQuOTI1LDExLTExdi03Mi40NzQKCQkJCUMyMjMsMjMzLjEwMiwyMTguMDc1LDIyOC4xNzYsMjEyLDIyOC4xNzZ6Ii8+CgkJCTxwYXRoIGQ9Ik0yMTIsMzYxaC02Yy02LjA3NSwwLTExLDQuOTI1LTExLDExdjM1YzAsNi4wNzUsNC45MjUsMTEsMTEsMTFoNmM2LjA3NSwwLDExLTQuOTI1LDExLTExdi0zNQoJCQkJQzIyMywzNjUuOTI1LDIxOC4wNzUsMzYxLDIxMiwzNjF6Ii8+CgkJPC9nPgoJPC9nPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+Cjwvc3ZnPgo=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iNDk3LjE5OXB4IiBoZWlnaHQ9IjQ5Ny4xOTlweCIgdmlld0JveD0iMCAwIDQ5Ny4xOTkgNDk3LjE5OSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDk3LjE5OSA0OTcuMTk5OyIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8cGF0aCBkPSJNMTkxLjIsMjQ4LjZjMC0xNS4zLDUuNy0yOC43LDE3LjItNDAuMnMyNC45LTE3LjIsNDAuMi0xNy4yTDE5MS4yLDI0OC42eiBNMTc0LDI2NS44Yy0xLjktNS43LTEuOS0xMS41LTEuOS0xNy4yCgkJYzAtNDIuMSwzNC40LTc2LjUsNzYuNS03Ni41YzUuNzAxLDAsMTEuNSwwLDE3LjIwMSwxLjlsNTEuNi01MS42Yy0yMS01LjctNDQtNy43LTY4LjktNy43Qzc2LjUsMTE0LjcsMCwyNDguNiwwLDI0OC42CgkJczMwLjYsNTMuNSw5Ny41LDkzLjdMMTc0LDI2NS44eiBNMzA2LDI0OC42TDI0OC42LDMwNmMxNS4zLDAsMjguNzAxLTUuNyw0MC4yMDEtMTcuMkMzMDAuMTk5LDI3Ny4zLDMwNiwyNjMuODk5LDMwNiwyNDguNnoKCQkgTTM5OS42OTksMTU0Ljg5OWwtNzYuNSw3Ni41YzEuOSw1LjcsMS45LDExLjUsMS45LDE3LjJjMCw0Mi4xLTM0LjQsNzYuNS03Ni41LDc2LjVjLTUuNywwLTExLjUsMC0xNy4yLTEuOUwxNzkuOCwzNzQuOAoJCWMyMSw1LjcsNDQsNy42LDY4LjgsNy42YzE3Mi4wOTksMCwyNDguNTk5LTEzMy45LDI0OC41OTktMTMzLjlTNDY2LjYsMTk1LjEsMzk5LjY5OSwxNTQuODk5eiBNNDAxLjQsNzYuODk5bC0zMjQuNSwzMjQuNQoJCWwxOC45LDE4LjlMNDIwLjQsOTUuN0w0MDEuNCw3Ni44OTl6Ii8+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPC9zdmc+Cg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4KCjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0iQ2FwYV8xIgogICB4PSIwcHgiCiAgIHk9IjBweCIKICAgd2lkdGg9IjQ4NS4yMTVweCIKICAgaGVpZ2h0PSI0ODUuMjE1cHgiCiAgIHZpZXdCb3g9IjAgMCA0ODUuMjE1IDQ4NS4yMTUiCiAgIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQ4NS4yMTUgNDg1LjIxNTsiCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTEgcjEzNzI1IgogICBzb2RpcG9kaTpkb2NuYW1lPSJfbGF5b3V0LXByb3BlcnRpZXMuc3ZnIj48bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE0MSI+PHJkZjpSREY+PGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PjxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48ZGM6dGl0bGUgLz48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMKICAgICBpZD0iZGVmczM5IiAvPjxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMSIKICAgICBvYmplY3R0b2xlcmFuY2U9IjEwIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwIgogICAgIGd1aWRldG9sZXJhbmNlPSIxMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTA4OSIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI2NjYiCiAgICAgaWQ9Im5hbWVkdmlldzM3IgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTp6b29tPSIwLjQ4NjM4MjMzIgogICAgIGlua3NjYXBlOmN4PSItNzYuMzQ1OTcyIgogICAgIGlua3NjYXBlOmN5PSI0MDcuMDg3MTYiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjY0OSIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iNTAiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJDYXBhXzEiIC8+PGcKICAgICBpZD0iZzEwMzQ5IgogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwzMy42MTk5MTksMjAuMDQ5NjkzKSI+PGcKICAgICAgIGlkPSJMYXllcl8xXzExMF8iPjxnCiAgICAgICAgIGlkPSJnMTAzNTIiPjxwYXRoCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICBkPSJtIDE3LjU2NywxNS45MzggLTIuODU5LC0yLjcwMiBjIDAuMzMzLC0wLjYwNSAwLjUzOSwtMS4yOSAwLjUzOSwtMi4wMjkgMCwtMi4zNDIgLTEuODk3LC00LjIzOSAtNC4yNCwtNC4yMzkgLTIuMzQzLDAgLTQuMjQzLDEuODk2IC00LjI0Myw0LjIzOSAwLDIuMzQzIDEuOSw0LjI0MSA0LjI0Myw0LjI0MSAwLjgyNiwwIDEuNTksLTAuMjQ2IDIuMjQyLC0wLjY1NCBsIDIuODU1LDIuNjk5IGMgMC40MzIsLTAuNTcxIDAuOTE5LC0xLjA5NCAxLjQ2MywtMS41NTUgeiIKICAgICAgICAgICBpZD0icGF0aDEwMzU0IiAvPjxwYXRoCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICBkPSJtIDI5LjY2LDE1LjYgMy43OTksLTYuMzkzIGMgMC4zNzQsMC4xMDcgMC43NjIsMC4xODQgMS4xNjksMC4xODQgMi4zNDcsMCA0LjI0NCwtMS44OTggNC4yNDQsLTQuMjQxIDAsLTIuMzQyIC0xLjg5NywtNC4yMzkgLTQuMjQ0LC00LjIzOSAtMi4zNDMsMCAtNC4yMzksMS44OTYgLTQuMjM5LDQuMjM5IDAsMS4xNjMgMC40NjksMi4yMTQgMS4yMjcsMi45ODEgbCAtMy43ODcsNi4zNzUgYyAwLjY1MSwwLjI5NSAxLjI2NSwwLjY2MyAxLjgzMSwxLjA5NCB6IgogICAgICAgICAgIGlkPSJwYXRoMTAzNTYiIC8+PHBhdGgKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgIGQ9Im0gNDIuNzYyLDIwLjk1MiBjIC0xLjgyNCwwIC0zLjM2OSwxLjE1OSAtMy45NjgsMi43NzUgbCAtNS4yNzgsLTAuNTIxIGMgMCwwLjA0IDAuMDA2LDAuMDc4IDAuMDA2LDAuMTE3IDAsMC42ODggLTAuMDc2LDEuMzYgLTAuMjEzLDIuMDA5IGwgNS4yNzYsMC41MjEgYyAwLjMxOSwyLjAyNCAyLjA2MiwzLjU3NiA0LjE3NywzLjU3NiAyLjM0MiwwIDQuMjM4LC0xLjg5NiA0LjIzOCwtNC4yMzggMCwtMi4zNDEgLTEuODk2LC00LjIzOSAtNC4yMzgsLTQuMjM5IHoiCiAgICAgICAgICAgaWQ9InBhdGgxMDM1OCIgLz48cGF0aAogICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgZD0ibSAyOC4xOTcsMzcuNjI0IC0xLjE4LC01LjE1NiBjIC0wLjY2NiwwLjIzMiAtMS4zNTksMC4zOTggLTIuMDgyLDAuNDgxIGwgMS4xODIsNS4xNTcgYyAtMS4zNTUsMC43MDkgLTIuMjksMi4xMSAtMi4yOSwzLjc0NiAwLDIuMzQyIDEuODk2LDQuMjM3IDQuMjQzLDQuMjM3IDIuMzQyLDAgNC4yMzgsLTEuODk2IDQuMjM4LC00LjIzNyAwLjAwMywtMi4yOTkgLTEuODI5LC00LjE2IC00LjExMSwtNC4yMjggeiIKICAgICAgICAgICBpZD0icGF0aDEwMzYwIiAvPjxjaXJjbGUKICAgICAgICAgICBjeD0iMjMuODMiCiAgICAgICAgICAgY3k9IjIzLjMyMyIKICAgICAgICAgICByPSI3LjI3MDk5OTkiCiAgICAgICAgICAgaWQ9ImNpcmNsZTEwMzY0IiAvPjwvZz48L2c+PC9nPjxnCiAgICAgaWQ9ImcxMDM2NiIKICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMTcuNjE5OTE5LDE4LjA0OTY5MykiIC8+PGcKICAgICBpZD0iZzEwMzY4IgogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwxNy42MTk5MTksMTguMDQ5NjkzKSIgLz48ZwogICAgIGlkPSJnMTAzNzAiCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoOS41NTU2NTEsMCwwLDkuNTU1NjUxLDE3LjYxOTkxOSwxOC4wNDk2OTMpIiAvPjxnCiAgICAgaWQ9ImcxMDM3MiIKICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMTcuNjE5OTE5LDE4LjA0OTY5MykiIC8+PGcKICAgICBpZD0iZzEwMzc0IgogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwxNy42MTk5MTksMTguMDQ5NjkzKSIgLz48ZwogICAgIGlkPSJnMTAzNzYiCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoOS41NTU2NTEsMCwwLDkuNTU1NjUxLDE3LjYxOTkxOSwxOC4wNDk2OTMpIiAvPjxnCiAgICAgaWQ9ImcxMDM3OCIKICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMTcuNjE5OTE5LDE4LjA0OTY5MykiIC8+PGcKICAgICBpZD0iZzEwMzgwIgogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwxNy42MTk5MTksMTguMDQ5NjkzKSIgLz48ZwogICAgIGlkPSJnMTAzODIiCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoOS41NTU2NTEsMCwwLDkuNTU1NjUxLDE3LjYxOTkxOSwxOC4wNDk2OTMpIiAvPjxnCiAgICAgaWQ9ImcxMDM4NCIKICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMTcuNjE5OTE5LDE4LjA0OTY5MykiIC8+PGcKICAgICBpZD0iZzEwMzg2IgogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwxNy42MTk5MTksMTguMDQ5NjkzKSIgLz48ZwogICAgIGlkPSJnMTAzODgiCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoOS41NTU2NTEsMCwwLDkuNTU1NjUxLDE3LjYxOTkxOSwxOC4wNDk2OTMpIiAvPjxnCiAgICAgaWQ9ImcxMDM5MCIKICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMTcuNjE5OTE5LDE4LjA0OTY5MykiIC8+PGcKICAgICBpZD0iZzEwMzkyIgogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwxNy42MTk5MTksMTguMDQ5NjkzKSIgLz48ZwogICAgIGlkPSJnMTAzOTQiCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoOS41NTU2NTEsMCwwLDkuNTU1NjUxLDE3LjYxOTkxOSwxOC4wNDk2OTMpIiAvPjxnCiAgICAgaWQ9Imc0MzIwIgogICAgIHRyYW5zZm9ybT0ibWF0cml4KDQuNzU0NDI3MSwwLDAsNC43NTQ0MjcxLDcuODM5OTM2MSwyNjAuNzI3NDEpIj48ZwogICAgICAgaWQ9Imc0MjgwIj48cGF0aAogICAgICAgICBpZD0icGF0aDQyODIiCiAgICAgICAgIGQ9Im0gNDEuNTM0LDI4LjY2IDEuOTU3LDAgQyA0NC44NzcsMjguNjYgNDYsMjcuNTM2IDQ2LDI2LjE1IGwgMCwtNi4zIGMgMCwtMS4zODUgLTEuMTI0LC0yLjUwOSAtMi41MDksLTIuNTA5IGwgLTEuOTUxLDAgMCwwLjAwNiBDIDQxLjE0OCwxNi4xNCA0MC42ODcsMTQuOTgzIDQwLjEwMywxMy44ODkgbCAxLjM4MSwtMS4zODEgYyAwLjk3OSwtMC45OCAwLjk3OSwtMi41NjkgMCwtMy41NDkgTCAzNy4wNCw0LjUxNyBjIC0wLjk3OSwtMC45NzkgLTIuNTY3LC0wLjk3OSAtMy41NDcsMCBsIC0xLjM4MiwxLjM4IEMgMzEuMDE3LDUuMzEzIDI5Ljg2MSw0Ljg1MiAyOC42NTQsNC40NjEgbCAwLjAwNiwwIDAsLTEuOTUxIEMgMjguNjYsMS4xMjQgMjcuNTM3LDAgMjYuMTUsMCBsIC02LjMsMCBjIC0xLjM4NiwwIC0yLjUwOSwxLjEyNCAtMi41MDksMi41MSBsIDAsMS45NTUgMC4wMTQsLTEwZS00IGMgLTEuMjA3LDAuMzY3IC0yLjM2MywwLjg1IC0zLjQ1OCwxLjQzNSBMIDEyLjUxNiw0LjUxOCBjIC0wLjk4LC0wLjk3OSAtMi41NjgsLTAuOTc5IC0zLjU0OCwwIEwgNC41MjUsOC45NjEgQyAzLjU0Niw5Ljk0IDMuNTQ1LDExLjUyNyA0LjUyMywxMi41MDcgTCA1LjksMTMuODg5IEMgNS4zMTYsMTQuOTgzIDQuODUxLDE2LjE0IDQuNDYsMTcuMzQ2IGwgMCwtMC4wMDUgLTEuOTUxLDAgQyAxLjEyNCwxNy4zNDEgMCwxOC40NjUgMCwxOS44NSBsIDAsNi4zMDEgYyAwLDEuMzg3IDEuMTI0LDIuNTExIDIuNTA5LDIuNTExIGwgMS45NjQsMCAtMC4wMDYsLTAuMDE1IGMgMC4zNjcsMS4yMDcgMC44NTMsMi4zNjIgMS40MzYsMy40NTcgbCAtMS4zOCwxLjM4MSBjIC0wLjk4LDAuOTc5IC0wLjk3OSwyLjU2NyAwLDMuNTQ3IGwgNC40NDMsNC40NDIgYyAwLjk3OSwwLjk3OSAyLjU2OCwwLjk3OSAzLjU0OCwwIGwgMS4zODEsLTEuMzgxIGMgMS4wOTQsMC41ODQgMi4yNTEsMS4wNzIgMy40NTgsMS40MzggbCAtMC4wMTQsLTAuMDA2IDAsMS45NjUgYyAwLDEuMzg3IDEuMTIzLDIuNTEgMi41MDksMi41MSBsIDYuMywwIGMgMS4zODcsMCAyLjUxLC0xLjEyMyAyLjUxLC0yLjUxIGwgMCwtMS45NSAtMC4wMDYsMCBjIDEuMjA3LC0wLjM5MiAyLjM2MywtMC44NTYgMy40NTcsLTEuNDQgbCAxLjM4MSwxLjM3OSBjIDAuOTgsMC45NzkgMi41NjgsMC45NzkgMy41NDcsMCBsIDQuNDQzLC00LjQ0NSBjIDAuOTc5LC0wLjk3OSAwLjk3OSwtMi41NjYgMCwtMy41NDcgbCAtMS4zODMsLTEuMzgzIGMgMC41ODQsLTEuMDk0IDEuMDY4LC0yLjI1IDEuNDM2LC0zLjQ1NyBsIDEwZS00LDAuMDEzIHogTSAyMy4wMjEsMzYuNzE0IEMgMTUuNDQ0LDM2LjcyMyA5LjI3OCwzMC41NTcgOS4yODcsMjIuOTggOS4yOTYsMTUuNDQxIDE1LjQ1LDkuMjg3IDIyLjk4OSw5LjI3OCBjIDcuNTc4LC0wLjAwOSAxMy43NDQsNi4xNTcgMTMuNzM0LDEzLjczNCAtMC4wMSw3LjUzOSAtNi4xNjIsMTMuNjkzIC0xMy43MDIsMTMuNzAyIHoiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PC9nPjxnCiAgICAgICBpZD0iZzQyODQiIC8+PGcKICAgICAgIGlkPSJnNDI4NiIgLz48ZwogICAgICAgaWQ9Imc0Mjg4IiAvPjxnCiAgICAgICBpZD0iZzQyOTAiIC8+PGcKICAgICAgIGlkPSJnNDI5MiIgLz48ZwogICAgICAgaWQ9Imc0Mjk0IiAvPjxnCiAgICAgICBpZD0iZzQyOTYiIC8+PGcKICAgICAgIGlkPSJnNDI5OCIgLz48ZwogICAgICAgaWQ9Imc0MzAwIiAvPjxnCiAgICAgICBpZD0iZzQzMDIiIC8+PGcKICAgICAgIGlkPSJnNDMwNCIgLz48ZwogICAgICAgaWQ9Imc0MzA2IiAvPjxnCiAgICAgICBpZD0iZzQzMDgiIC8+PGcKICAgICAgIGlkPSJnNDMxMCIgLz48ZwogICAgICAgaWQ9Imc0MzEyIiAvPjwvZz48L3N2Zz4=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjQ4OC43OHB4IiBoZWlnaHQ9IjQ4OC43OHB4IiB2aWV3Qm94PSIwIDAgNDg4Ljc4IDQ4OC43OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDg4Ljc4IDQ4OC43ODsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxwYXRoIGQ9Ik0xNDEuNDA4LDExOS44NzJjMTIuMjkzLTEzLjExMiwyOS42NTMtMjAuNzcsNDcuNjI0LTIwLjc3aDI0Ny40MDVWNDcuODI4YzAtMTIuNTY5LTEwLjQ2OC0yMi42NTItMjMuMDM2LTIyLjY1Mkg3NS4zOTcNCgkJCWMtMTIuNTc1LDAtMjIuNDkxLDEwLjA4My0yMi40OTEsMjIuNjUydjEwMS4wNDZoNjEuNDQ1TDE0MS40MDgsMTE5Ljg3MnoiLz4NCgkJPHBhdGggZD0iTTQ4My4wMTksMTQ5LjI1M2MtMS43MDktMS45MjQtMy43MTctMy41NS01LjkyMy00Ljc4Yy0zLjM1Mi0xLjg2MS03LjE1MS0yLjkyLTExLjA3MS0yLjkySDE4OS4wMzJsMCwwDQoJCQljLTYsMC0xMS43MzUsMi40MDktMTUuOTgzLDYuNjAxYy0wLjIxNCwwLjIwOC0wLjQyMywwLjQzOC0wLjYyNiwwLjY1MWwtOS4yNzUsOS45MTFsLTIzLjYyMiwyNS4yMDcNCgkJCWMtMC41NDIsMC41NzMtMS4xMDUsMS4yMTktMS42OTQsMS43MzZjLTQuMTEzLDMuNTcyLTkuNDEsNS42NjctMTQuOTE1LDUuNjY3aC0wLjAwNUgyMi43NjhsMCwwDQoJCQljLTUuNjg0LDAtMTEuMTExLDIuMDIyLTE1LjI3MSw1Ljc5MWMtMC42NjcsMC41ODktMS4yOTMsMS4xNzktMS44ODgsMS44NTdjLTAuNDE3LDAuNDc5LTAuODAzLDAuOTQ4LTEuMTgzLDEuNDU5DQoJCQljLTMuNDgyLDQuNzQ0LTUuMDIsMTAuNjYxLTQuMjE3LDE2LjU0MmwyNi40NzksMTk0LjE4MmMzLjU2NSwyNi4xNCwyMy41NTMsNDYuNjEyLDQ4LjY5Miw1MS4yODQNCgkJCWMzLjU5MiwwLjY2Nyw3LjI4OCwxLjE2MywxMS4wNTgsMS4xNjNoMzE0LjI2MWMyNy43NjEsMCw1MS41MjItMTkuMDAzLDU4LjM1NC00NS4xOTRjMC43MDQtMi43MDYsMS4yMjYtNS41NjcsMS41NTUtOC40Mg0KCQkJbDE1LjI2NS0xMzIuMjg5bDEyLjc3Mi0xMTAuNjc0YzAuMDY3LTAuNjQ3LDAuMTA4LTEuMjkzLDAuMTI1LTEuOTI5QzQ4OC45NDcsMTU5LjI5OSw0ODYuOTA5LDE1My42MjMsNDgzLjAxOSwxNDkuMjUzeiIvPg0KCTwvZz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4KCjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0iQ2FwYV8xIgogICB4PSIwcHgiCiAgIHk9IjBweCIKICAgd2lkdGg9IjQ4OXB4IgogICBoZWlnaHQ9IjQ4OS4wMDFweCIKICAgdmlld0JveD0iMCAwIDQ4OSA0ODkuMDAxIgogICBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA0ODkgNDg5LjAwMTsiCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTEgcjEzNzI1IgogICBzb2RpcG9kaTpkb2NuYW1lPSJuZXcuc3ZnIj48bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE0MSI+PHJkZjpSREY+PGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PjxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMKICAgICBpZD0iZGVmczM5IiAvPjxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMSIKICAgICBvYmplY3R0b2xlcmFuY2U9IjEwIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwIgogICAgIGd1aWRldG9sZXJhbmNlPSIxMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iNjkwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjQ4MCIKICAgICBpZD0ibmFtZWR2aWV3MzciCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOnpvb209IjAuNDgyNjE2NTkiCiAgICAgaW5rc2NhcGU6Y3g9IjI0NC41IgogICAgIGlua3NjYXBlOmN5PSIyNDQuNTAwNSIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIwIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9IkNhcGFfMSIgLz48ZwogICAgIGlkPSJnMyIKICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjk2MTk2NzY5LDAsMCwwLjk2MTk2NzY5LDkuMDEwNzg0OCwxMCkiPjxwYXRoCiAgICAgICBkPSJNIDM1NS43NjgsMCA4Ni4yMTgsMCBDIDUzLjMzLDAgMjYuNTc3LDI2Ljc1MyAyNi41NzcsNTkuNjM2IGwgMCwzNjkuNzI5IGMgMCwzMi44ODMgMjYuNzUyLDU5LjYzNiA1OS42NDEsNTkuNjM2IGwgMzE2LjU2NiwwIGMgMzIuODg5LC0xMGUtNCA1OS42NDEsLTI2Ljc1NCA1OS42NDEsLTU5LjYzNyBsIDAsLTMyMC4yMDQgTCAzNTUuNzY4LDAgWiBtIDQ3LjAxNiw0NDYuNDc5IC0zMTYuNTY2LDAgYyAtOS40MzcsMCAtMTcuMTE5LC03LjY3OCAtMTcuMTE5LC0xNy4xMTMgbCAwLC0zNjkuNzMgYyAwLC05LjQzNyA3LjY4MywtMTcuMTE0IDE3LjExOSwtMTcuMTE0IGwgMjQ4LjY0MiwwIDAsNDcuNjA0IGMgMCwyMS4wNDMgMTcuMTA5LDM4LjE2MiAzOC4xNTIsMzguMzc1IGwgNDYuODkxLDAuNDc3IDAsMzAwLjM4OCBjIDAsOS40MzUgLTcuNjg0LDE3LjExMyAtMTcuMTE5LDE3LjExMyB6IgogICAgICAgaWQ9InBhdGg1IgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz48L2c+PGcKICAgICBpZD0iZzciIC8+PGcKICAgICBpZD0iZzkiIC8+PGcKICAgICBpZD0iZzExIiAvPjxnCiAgICAgaWQ9ImcxMyIgLz48ZwogICAgIGlkPSJnMTUiIC8+PGcKICAgICBpZD0iZzE3IiAvPjxnCiAgICAgaWQ9ImcxOSIgLz48ZwogICAgIGlkPSJnMjEiIC8+PGcKICAgICBpZD0iZzIzIiAvPjxnCiAgICAgaWQ9ImcyNSIgLz48ZwogICAgIGlkPSJnMjciIC8+PGcKICAgICBpZD0iZzI5IiAvPjxnCiAgICAgaWQ9ImczMSIgLz48ZwogICAgIGlkPSJnMzMiIC8+PGcKICAgICBpZD0iZzM1IiAvPjwvc3ZnPg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iMjYuNjMzOTQybW0iCiAgIGhlaWdodD0iMjYuNjIyNzY1bW0iCiAgIHZpZXdCb3g9IjAgMCAyNi42MzM5NDIgMjYuNjIyNzY1IgogICB2ZXJzaW9uPSIxLjEiCiAgIGlkPSJzdmc4IgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIgogICBzb2RpcG9kaTpkb2NuYW1lPSJwb3J0YWwuc3ZnIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzMiI+CiAgICA8Y2xpcFBhdGgKICAgICAgIGlkPSJjbGlwUGF0aDUwMDgiCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNTAwNiIKICAgICAgICAgZD0iTSAwLDAgSCAzMTIuMDQzIFYgNzQuNDQ4MiBIIDAgWiIgLz4KICAgIDwvY2xpcFBhdGg+CiAgICA8Y2xpcFBhdGgKICAgICAgIGlkPSJjbGlwUGF0aDUwMTYiCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNTAxNCIKICAgICAgICAgZD0iTSAwLDc0LjQ0OCBIIDMxMi4wNDMgViAwIEggMCBaIiAvPgogICAgPC9jbGlwUGF0aD4KICAgIDxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoNTExMiIKICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg1MTEwIgogICAgICAgICBkPSJNIDAsMCBIIDMxMi4wNDMgViA3NC40NDgyIEggMCBaIiAvPgogICAgPC9jbGlwUGF0aD4KICAgIDxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoNTEyMCIKICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg1MTE4IgogICAgICAgICBkPSJNIDAsNzQuNDQ4IEggMzEyLjA0MyBWIDAgSCAwIFoiIC8+CiAgICA8L2NsaXBQYXRoPgogICAgPGNsaXBQYXRoCiAgICAgICBpZD0iY2xpcFBhdGg1MzMyIgogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDUzMzAiCiAgICAgICAgIGQ9Ik0gMCw3NC40NDggSCAzMTIuMDQzIFYgMCBIIDAgWiIgLz4KICAgIDwvY2xpcFBhdGg+CiAgPC9kZWZzPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSIxLjk3OTg5OSIKICAgICBpbmtzY2FwZTpjeD0iNTUuNTM1Njg4IgogICAgIGlua3NjYXBlOmN5PSItNTEuMDYwODE5IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJtbSIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDE3IgogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIKICAgICBmaXQtbWFyZ2luLXRvcD0iMCIKICAgICBmaXQtbWFyZ2luLWxlZnQ9IjAiCiAgICAgZml0LW1hcmdpbi1yaWdodD0iMCIKICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMCIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE1Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNDcuNDExNjExLC04OS4yODgwNCkiPgogICAgPHJlY3QKICAgICAgIHJ5PSIwIgogICAgICAgeT0iOTYuMTU3Mzc5IgogICAgICAgeD0iNjEuMTYxNDcyIgogICAgICAgaGVpZ2h0PSI1Ljk5OTk5OTUiCiAgICAgICB3aWR0aD0iNS45OTk5OTk1IgogICAgICAgaWQ9InJlY3Q1NTA0IgogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNzQ1MDk4MDU7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuNTU0MDg2MzM7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4KICAgIDxyZWN0CiAgICAgICByeT0iMCIKICAgICAgIHk9IjEwMy4wMjY3MyIKICAgICAgIHg9IjU0LjI5MjEyMiIKICAgICAgIGhlaWdodD0iNS45OTk5OTk1IgogICAgICAgd2lkdGg9IjUuOTk5OTk5NSIKICAgICAgIGlkPSJyZWN0NTUwNC0zIgogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNzQ1MDk4MDU7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuNTU0MDg2MzM7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4KICAgIDxyZWN0CiAgICAgICByeT0iMCIKICAgICAgIHk9Ijg5LjI4ODA0IgogICAgICAgeD0iNjguMDMwODIzIgogICAgICAgaGVpZ2h0PSI1Ljk5OTk5OTUiCiAgICAgICB3aWR0aD0iNS45OTk5OTk1IgogICAgICAgaWQ9InJlY3Q1NTA0LTMtNSIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuOTg5OTk5OTk7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjU4ODIzNTMyO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjU1NDA4NjMzO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjAiIC8+CiAgICA8cmVjdAogICAgICAgcnk9IjAiCiAgICAgICB5PSIxMDkuODk2MDciCiAgICAgICB4PSI0Ny40MjI3NzkiCiAgICAgICBoZWlnaHQ9IjUuOTk5OTk5NSIKICAgICAgIHdpZHRoPSI1Ljk5OTk5OTUiCiAgICAgICBpZD0icmVjdDU1MDQtMy01LTkiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC41ODgyMzUzMjtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC41NTQwODYzMztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPgogICAgPHBhdGgKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDU1NTEtNyIKICAgICAgIGQ9Im0gNjguMzg0OTY3LDEwMi4xMjA4OSBhIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgNS42MDkzNTQsLTUuNzIxOTI4IDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgLTAuMDA5OSwtMC4yMDUwODcgaCAtNS45MTcwNTMgdiA1LjkxMDcwNSBhIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgMC4zMTc2MzQsMC4wMTYzIHoiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC41ODgyMzUzMjtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC44MDg2MTU1NztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPgogICAgPHBhdGgKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDU2NjMiCiAgICAgICBkPSJtIDQ4LjI3MzAxMSwxMDEuMTk2NDggdiAtNy41ODIwNTMgYyAwLC0xLjkxNDE0NCAxLjQxOTUxMSwtMy40NTUxMzQgMy4xODI3NjEsLTMuNDU1MTM0IHYgMCBoIDE0Ljc2NzI3MSIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojOTg5NDk0O3N0cm9rZS13aWR0aDoxLjcyMjc5OTY2O3N0cm9rZS1saW5lY2FwOnNxdWFyZTtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3BhaW50LW9yZGVyOmZpbGwgbWFya2VycyBzdHJva2UiIC8+CiAgICA8cGF0aAogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIGlkPSJyZWN0NTYxNyIKICAgICAgIGQ9Im0gNzMuMjM3ODEzLDEwMi44MzA0MyA0ZS02LDkuMTU0OTggYyAwLDEuNzI3MTggLTEuMzgzMjYzLDMuMTE3NjYgLTMuMTAxNDg1LDMuMTE3NjYgSCA1NS44NDYwNzciCiAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6bm9uZTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6Izk4OTQ5NDtzdHJva2Utd2lkdGg6MS42MTU0NzExMjtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTtwYWludC1vcmRlcjpmaWxsIG1hcmtlcnMgc3Ryb2tlIiAvPgogICAgPHBhdGgKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDU1NTEtNy00IgogICAgICAgZD0ibSA2MS41MTU2MTgsMTA4Ljk5MDIzIGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCA1LjYwOTM1NCwtNS43MjE5MiA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIC0wLjAwOTksLTAuMjA1MDkgSCA2MS4xOTc5NyB2IDUuOTEwNzEgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIDAuMzE3NjM0LDAuMDE2MyB6IgogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNzQ1MDk4MDU7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuODA4NjE1NTc7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4KICAgIDxwYXRoCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgaWQ9InBhdGg1NTUxLTctNC0zIgogICAgICAgZD0ibSA1OS45Mzc5NzUsOTYuMTkzODc0IGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAtNS42MDkzNTQsNS43MjE5MjYgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAwLjAwOTksMC4yMDUwOSBoIDUuOTE3MDUzIHYgLTUuOTEwNzExIGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAtMC4zMTc2MzQsLTAuMDE2MyB6IgogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuODA4NjE1NTc7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4KICAgIDxwYXRoCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgaWQ9InBhdGg1NTUxLTctNC0zLTAiCiAgICAgICBkPSJtIDUzLjA2ODYzMywxMDMuMDYzMjIgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIC01LjYwOTM1Myw1LjcyMTkzIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgMC4wMDk5LDAuMjA1MDggaCA1LjkxNzA1MyB2IC01LjkxMDcxIGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAtMC4zMTc2MzQsLTAuMDE2MyB6IgogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNTg4MjM1MzI7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuODA4NjE1NTc7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4KICA8L2c+Cjwvc3ZnPgo=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjQ1LjY3OHB4IiBoZWlnaHQ9IjQ1LjY3OHB4IiB2aWV3Qm94PSIwIDAgNDUuNjc4IDQ1LjY3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDUuNjc4IDQ1LjY3ODsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxwYXRoIGQ9Ik0zOC45ODgsNi42ODljLTguOTE5LTguOTE4LTIzLjM4LTguOTE5LTMyLjMsMGMtOC45MTgsOC45MTktOC45MTcsMjMuMzgsMCwzMi4yOTljOC45Miw4LjkxOSwyMy4zODEsOC45MTksMzIuMywwDQoJCQlDNDcuOTA4LDMwLjA2OSw0Ny45MDYsMTUuNjA4LDM4Ljk4OCw2LjY4OXogTTIxLjg5MywzNi4wMTZjLTEuNzMsMC0yLjkwNi0xLjI3Mi0yLjkwNi0yLjk3MWMwLTEuNzMsMS4yMDktMi45NzIsMi45MDYtMi45NzINCgkJCWMxLjc2NCwwLDIuOTA2LDEuMjQxLDIuOTM4LDIuOTcyQzI0LjgzMSwzNC43NDIsMjMuNjU2LDM2LjAxNiwyMS44OTMsMzYuMDE2eiBNMjYuMjE1LDIxLjk4MWMtMS4zMiwxLjQ2Ni0xLjg1NiwyLjg2MS0xLjgyLDQuNDY4DQoJCQljMCwxLjE5My0wLjk2OSwyLjE2Mi0yLjE2MywyLjE2MkgyMS43N2MtMS4xODIsMC0yLjE0NS0wLjk0OS0yLjE2MS0yLjEzMWwtMC4wMDUtMC4zMTdjLTAuMTA3LTEuODIzLDAuNTAxLTMuNjgxLDIuMTA5LTUuNjExDQoJCQljMS4xNDUtMS4zNTksMi4wNzItMi41MDIsMi4wNzItMy43MThjMC0xLjI1LTAuODIyLTIuMDczLTIuNjA3LTIuMTQ2Yy0wLjU0OSwwLTEuMTUsMC4wOTMtMS43MzEsMC4yNTYNCgkJCWMtMS4wNTYsMC4yOTctMi4xNTYtMC4yOTgtMi40ODItMS4zNDVsLTAuMDA2LTAuMDJjLTAuMzI5LTEuMDU0LDAuMjQ3LTIuMTc1LDEuMjk0LTIuNTIzYzEuMTU3LTAuMzg1LDIuNTc0LTAuNjU3LDQuMTQtMC42NTcNCgkJCWM0LjcyLDAsNi44NjQsMi42MDksNi44NjQsNS41NzZDMjkuMjU2LDE4LjY5MiwyNy41NzUsMjAuNDc5LDI2LjIxNSwyMS45ODF6Ii8+DQoJPC9nPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPC9zdmc+DQo=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4KCjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0iQ2FwYV8xIgogICB4PSIwcHgiCiAgIHk9IjBweCIKICAgd2lkdGg9IjQ3MS42MDhweCIKICAgaGVpZ2h0PSI0NzEuNjA4cHgiCiAgIHZpZXdCb3g9IjAgMCA0NzEuNjA4IDQ3MS42MDgiCiAgIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQ3MS42MDggNDcxLjYwODsiCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTEgcjEzNzI1IgogICBzb2RpcG9kaTpkb2NuYW1lPSJyZWRvLnN2ZyI+PG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNDEiPjxyZGY6UkRGPjxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj48ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD48ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+PGRjOnRpdGxlPjwvZGM6dGl0bGU+PC9jYzpXb3JrPjwvcmRmOlJERj48L21ldGFkYXRhPjxkZWZzCiAgICAgaWQ9ImRlZnMzOSIgLz48c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEiCiAgICAgb2JqZWN0dG9sZXJhbmNlPSIxMCIKICAgICBncmlkdG9sZXJhbmNlPSIxMCIKICAgICBndWlkZXRvbGVyYW5jZT0iMTAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjEyMjkiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iODE2IgogICAgIGlkPSJuYW1lZHZpZXczNyIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgaW5rc2NhcGU6em9vbT0iMC41MDA0MTU2IgogICAgIGlua3NjYXBlOmN4PSIyMzUuODA0IgogICAgIGlua3NjYXBlOmN5PSIyMzUuODA0IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjAiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0iQ2FwYV8xIiAvPjxnCiAgICAgaWQ9ImczIgogICAgIHRyYW5zZm9ybT0ibWF0cml4KC0xLDAsMCwxLDQ3My42MDYyMSwwKSI+PHBhdGgKICAgICAgIGQ9Im0gMzg0LjUzNTE5LDkxLjA2Nzc0NCBjIC04MS40NTk1NCwtODEuNDU2ODc5MSAtMjE0LjAwODA3LC04MS40NTY4NzkxIC0yOTUuNDY1ODI4LDAgLTgxLjQ1Nzc2NDEsODEuNDU2ODc2IC04MS40NTY4NzgxLDIxNC4wMTE2MDYgMCwyOTUuNDY1ODI2IDgxLjQ1Njg2OCw4MS40NTk1MyAyMTQuMDA1NDA4LDgxLjQ1OTUzIDI5NS40NjU4MjgsMCA4MS40NTk1MywtODEuNDUzMzQgODEuNDU5NTMsLTIxNC4wMDI3NSAwLC0yOTUuNDY1ODI2IHogTSAzNjguMzI4ODMsMzcwLjMzODcyIGMgLTcyLjUxODU5LDcyLjUxODU5IC0xOTAuNTM2Myw3Mi41MTg1OSAtMjYzLjA2NjM5LDAgLTcyLjUxNjgxNywtNzIuNTMwMDkgLTcyLjUxNjgxNywtMTkwLjU0MjUgMCwtMjYzLjA2NzI3IDcyLjUyOTIsLTcyLjUyNjU1OSAxOTAuNTM2MjksLTcyLjUyNjU1OSAyNjMuMDY2MzksMCA3Mi41MjU2Nyw3Mi41MjQ3NyA3Mi41MjU2NywxOTAuNTM3MTggMCwyNjMuMDY3MjcgeiBtIDEyLjQ0MzQ3LC0xOTguMTI3NiAtMTEuNjIwNzYsNTIuMzI5NzEgYyAtMC4zMTM1LDEuNDQ3MDYgLTEuNzQzNzMsMi4zNDY4MiAtMy4xODI4MiwyLjAzNTk4IC0wLjQ0MDE0LC0wLjA5MzkgLTEwLjk1MDM2LC0yLjM1ODM0IC0yNi4yOTg1OCwtMi4zNTgzNCAtMjUuODg5NDQsMCAtNzEuNjI0MTMsNi44NTE4NCAtMTAxLjgzMTcyLDQ5LjU1MzM4IGwgNi4yOTY1Niw2LjI5NjU3IDcwLjUwMzg2LDMwLjU1OTE3IGMgMi4zNjU0MiwxLjAzNzAzIDMuNzU3NTgsMy41MDY5NSAzLjM5MTgzLDYuMDY3MiAtMC4zNTA3LDIuNTQ5NjIgLTIuMzYxLDQuNTU0NjEgLTQuOTMwOTksNC44NzM0MiBsIC0xNzUuNjA1MTksMjIuOTU5MDEgYyAtMS43NTg3OSwwLjIzMDI1IC0zLjUzODgzLC0wLjM3NzI2IC00Ljc5NzI2LC0xLjYyNzcyIC0xLjI2NjQsLTEuMjYxOTcgLTEuODU1MzIsLTMuMDM2NyAtMS42MzU2OSwtNC44MDYxMiBsIDIyLjk1OSwtMTc1LjYwNzg1IGMgMC4xNjQ3MywtMS4yODUgMC43NTM2NCwtMi40MzYyNyAxLjYyMzMsLTMuMzA1MDMgMC44NTgxNCwtMC44NTkwMyAxLjk4OTA0LC0xLjQ0Nzk1IDMuMjYzNDEsLTEuNjMxMjcgMi41NDY5NywtMC4zNTc3OCA1LjAxNzc3LDEuMDM3MDMgNi4wNTM5MiwzLjM5NDQ4IGwgMzAuNTY3MTQsNzAuNTA2NTIgMC4xNTc2MywwLjE1NzYzIGMgNDcuMTQxOTEsLTU5LjQwMTE3IDExNS40MTU4NCwtNjYuNDg5NDYgMTQ1LjAyODMxLC02Ni40ODk0NiAxMy41NDY5MywwIDI2LjY5NjIyLDEuMzQ1MjIgMzguMDIzODQsMy44ODY4NyAxLjQ1MzI2LDAuMzMyMSAyLjM2MzY1LDEuNzYzMjIgMi4wMzQyMSwzLjIwNTg1IHoiCiAgICAgICBpZD0icGF0aDUiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPjwvZz48ZwogICAgIGlkPSJnNyIgLz48ZwogICAgIGlkPSJnOSIgLz48ZwogICAgIGlkPSJnMTEiIC8+PGcKICAgICBpZD0iZzEzIiAvPjxnCiAgICAgaWQ9ImcxNSIgLz48ZwogICAgIGlkPSJnMTciIC8+PGcKICAgICBpZD0iZzE5IiAvPjxnCiAgICAgaWQ9ImcyMSIgLz48ZwogICAgIGlkPSJnMjMiIC8+PGcKICAgICBpZD0iZzI1IiAvPjxnCiAgICAgaWQ9ImcyNyIgLz48ZwogICAgIGlkPSJnMjkiIC8+PGcKICAgICBpZD0iZzMxIiAvPjxnCiAgICAgaWQ9ImczMyIgLz48ZwogICAgIGlkPSJnMzUiIC8+PC9zdmc+\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE4LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgdmlld0JveD0iMCAwIDM5Mi42MiAzOTIuNjIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDM5Mi42MiAzOTIuNjI7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxyZWN0IHg9IjE0NC44NjYiIHk9IjMyMC44OTciIHdpZHRoPSIyMy41MDUiIGhlaWdodD0iMjUiLz4NCgk8cGF0aCBkPSJNMzA5Ljc5NSwwSDI2Ni40OUgxMjYuMTMxSDgyLjgyNUMzNy42NjcsMCwwLjkyOSwzNi43MzgsMC45MjksODEuODk2djIyOC44MjhjMCw0NS4xNTgsMzYuNzM4LDgxLjg5Niw4MS44OTYsODEuODk2aDU4LjMyDQoJCWgxMTMuNDQzaDU1LjIwNmM0NS4xNTcsMCw4MS44OTYtMzYuNzM4LDgxLjg5Ni04MS44OTZWODEuODk2QzM5MS42OTEsMzYuNzM4LDM1NC45NTIsMCwzMDkuNzk1LDB6IE0yNjYuNDksMzANCgkJYzE0LjM1NCwwLDI2LjAzLDkuNTQyLDI2LjAzLDIxLjI3VjE3NC4zM2MwLDExLjcyOS0xMS42NzcsMjEuMjcxLTI2LjAzLDIxLjI3MUgxMjYuMTMxYy0xNC4zNTQsMC0yNi4wMzEtOS41NDItMjYuMDMxLTIxLjI3MQ0KCQlWNTEuMjdjMC0xMS43MjgsMTEuNjc4LTIxLjI3LDI2LjAzMS0yMS4yN0gyNjYuNDl6IE0xNDEuMTQ2LDM2Mi42MmMtNi4yNTksMC0xMS4zNTItNS4wOTItMTEuMzUyLTExLjM1MXYtMzAuMDY2DQoJCWMwLTYuMjU5LDUuMDkzLTExLjM1MSwxMS4zNTItMTEuMzUxaDExMy40NDNjNi4yNTksMCwxMS4zNTEsNS4wOTIsMTEuMzUxLDExLjM1MXYzMC4wNjZjMCw2LjI1OS01LjA5MiwxMS4zNTEtMTEuMzUxLDExLjM1MQ0KCQlIMTQxLjE0NnogTTM2MS42OTEsMzEwLjcyNGMwLDI4LjYxNi0yMy4yOCw1MS44OTYtNTEuODk2LDUxLjg5NmgtMTUuNDUyYzEuMDMyLTMuNjEsMS41OTctNy40MTQsMS41OTctMTEuMzUxdi0zMC4wNjYNCgkJYzAtMjIuODAxLTE4LjU1LTQxLjM1MS00MS4zNTEtNDEuMzUxSDE0MS4xNDZjLTIyLjgwMiwwLTQxLjM1MiwxOC41NS00MS4zNTIsNDEuMzUxdjMwLjA2NmMwLDMuOTM3LDAuNTY1LDcuNzQyLDEuNTk3LDExLjM1MQ0KCQlIODIuODI1Yy0yOC42MTYsMC01MS44OTYtMjMuMjgtNTEuODk2LTUxLjg5NlY4MS44OTZjMC0yNS45MSwxOS4wODctNDcuNDQ0LDQzLjkzOC01MS4yODVDNzEuODExLDM2LjkzNSw3MC4xLDQzLjkyMSw3MC4xLDUxLjI3DQoJCVYxNzQuMzNjMCwyOC4yNzEsMjUuMTM2LDUxLjI3MSw1Ni4wMzEsNTEuMjcxSDI2Ni40OWMzMC44OTYsMCw1Ni4wMy0yMyw1Ni4wMy01MS4yNzFWNTEuMjdjMC03LjM0OC0xLjcxMS0xNC4zMzQtNC43NjctMjAuNjU5DQoJCWMyNC44NTEsMy44NDEsNDMuOTM4LDI1LjM3NSw0My45MzgsNTEuMjg1VjMxMC43MjR6Ii8+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iMjYuNjMzOTQybW0iCiAgIGhlaWdodD0iMjYuNjIyNzY1bW0iCiAgIHZpZXdCb3g9IjAgMCAyNi42MzM5NDIgMjYuNjIyNzY1IgogICB2ZXJzaW9uPSIxLjEiCiAgIGlkPSJzdmc4IgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIgogICBzb2RpcG9kaTpkb2NuYW1lPSJzZXR0aW5ncy5zdmciPgogIDxkZWZzCiAgICAgaWQ9ImRlZnMyIj4KICAgIDxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoNTAwOCIKICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg1MDA2IgogICAgICAgICBkPSJNIDAsMCBIIDMxMi4wNDMgViA3NC40NDgyIEggMCBaIiAvPgogICAgPC9jbGlwUGF0aD4KICAgIDxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoNTAxNiIKICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGg1MDE0IgogICAgICAgICBkPSJNIDAsNzQuNDQ4IEggMzEyLjA0MyBWIDAgSCAwIFoiIC8+CiAgICA8L2NsaXBQYXRoPgogICAgPGNsaXBQYXRoCiAgICAgICBpZD0iY2xpcFBhdGg1MTEyIgogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDUxMTAiCiAgICAgICAgIGQ9Ik0gMCwwIEggMzEyLjA0MyBWIDc0LjQ0ODIgSCAwIFoiIC8+CiAgICA8L2NsaXBQYXRoPgogICAgPGNsaXBQYXRoCiAgICAgICBpZD0iY2xpcFBhdGg1MTIwIgogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDUxMTgiCiAgICAgICAgIGQ9Ik0gMCw3NC40NDggSCAzMTIuMDQzIFYgMCBIIDAgWiIgLz4KICAgIDwvY2xpcFBhdGg+CiAgICA8Y2xpcFBhdGgKICAgICAgIGlkPSJjbGlwUGF0aDUzMzIiCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNTMzMCIKICAgICAgICAgZD0iTSAwLDc0LjQ0OCBIIDMxMi4wNDMgViAwIEggMCBaIiAvPgogICAgPC9jbGlwUGF0aD4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjEuOTc5ODk5IgogICAgIGlua3NjYXBlOmN4PSI1NS41MzU2ODgiCiAgICAgaW5rc2NhcGU6Y3k9Ii01MS4wNjA4MTkiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9Im1tIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciCiAgICAgaW5rc2NhcGU6d2luZG93LXg9Ii04IgogICAgIGlua3NjYXBlOndpbmRvdy15PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIGZpdC1tYXJnaW4tdG9wPSIwIgogICAgIGZpdC1tYXJnaW4tbGVmdD0iMCIKICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIwIgogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIiAvPgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTUiPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgICAgPGRjOnRpdGxlPjwvZGM6dGl0bGU+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIgogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC00Ny40MTE2MTEsLTg5LjI4ODA0KSI+CiAgICA8cmVjdAogICAgICAgcnk9IjAiCiAgICAgICB5PSI5Ni4xNTczNzkiCiAgICAgICB4PSI2MS4xNjE0NzIiCiAgICAgICBoZWlnaHQ9IjUuOTk5OTk5NSIKICAgICAgIHdpZHRoPSI1Ljk5OTk5OTUiCiAgICAgICBpZD0icmVjdDU1MDQiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC43NDUwOTgwNTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC41NTQwODYzMztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPgogICAgPHJlY3QKICAgICAgIHJ5PSIwIgogICAgICAgeT0iMTAzLjAyNjczIgogICAgICAgeD0iNTQuMjkyMTIyIgogICAgICAgaGVpZ2h0PSI1Ljk5OTk5OTUiCiAgICAgICB3aWR0aD0iNS45OTk5OTk1IgogICAgICAgaWQ9InJlY3Q1NTA0LTMiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC43NDUwOTgwNTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC41NTQwODYzMztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPgogICAgPHJlY3QKICAgICAgIHJ5PSIwIgogICAgICAgeT0iODkuMjg4MDQiCiAgICAgICB4PSI2OC4wMzA4MjMiCiAgICAgICBoZWlnaHQ9IjUuOTk5OTk5NSIKICAgICAgIHdpZHRoPSI1Ljk5OTk5OTUiCiAgICAgICBpZD0icmVjdDU1MDQtMy01IgogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNTg4MjM1MzI7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuNTU0MDg2MzM7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4KICAgIDxyZWN0CiAgICAgICByeT0iMCIKICAgICAgIHk9IjEwOS44OTYwNyIKICAgICAgIHg9IjQ3LjQyMjc3OSIKICAgICAgIGhlaWdodD0iNS45OTk5OTk1IgogICAgICAgd2lkdGg9IjUuOTk5OTk5NSIKICAgICAgIGlkPSJyZWN0NTUwNC0zLTUtOSIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuOTg5OTk5OTk7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjU4ODIzNTMyO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjU1NDA4NjMzO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjAiIC8+CiAgICA8cGF0aAogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIGlkPSJwYXRoNTU1MS03IgogICAgICAgZD0ibSA2OC4zODQ5NjcsMTAyLjEyMDg5IGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCA1LjYwOTM1NCwtNS43MjE5MjggNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAtMC4wMDk5LC0wLjIwNTA4NyBoIC01LjkxNzA1MyB2IDUuOTEwNzA1IGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAwLjMxNzYzNCwwLjAxNjMgeiIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuOTg5OTk5OTk7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjU4ODIzNTMyO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjgwODYxNTU3O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjAiIC8+CiAgICA8cGF0aAogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIGlkPSJwYXRoNTY2MyIKICAgICAgIGQ9Im0gNDguMjczMDExLDEwMS4xOTY0OCB2IC03LjU4MjA1MyBjIDAsLTEuOTE0MTQ0IDEuNDE5NTExLC0zLjQ1NTEzNCAzLjE4Mjc2MSwtMy40NTUxMzQgdiAwIGggMTQuNzY3MjcxIgogICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiM5ODk0OTQ7c3Ryb2tlLXdpZHRoOjEuNzIyNzk5NjY7c3Ryb2tlLWxpbmVjYXA6c3F1YXJlO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7cGFpbnQtb3JkZXI6ZmlsbCBtYXJrZXJzIHN0cm9rZSIgLz4KICAgIDxwYXRoCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgaWQ9InJlY3Q1NjE3IgogICAgICAgZD0ibSA3My4yMzc4MTMsMTAyLjgzMDQzIDRlLTYsOS4xNTQ5OCBjIDAsMS43MjcxOCAtMS4zODMyNjMsMy4xMTc2NiAtMy4xMDE0ODUsMy4xMTc2NiBIIDU1Ljg0NjA3NyIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojOTg5NDk0O3N0cm9rZS13aWR0aDoxLjYxNTQ3MTEyO3N0cm9rZS1saW5lY2FwOnNxdWFyZTtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3BhaW50LW9yZGVyOmZpbGwgbWFya2VycyBzdHJva2UiIC8+CiAgICA8cGF0aAogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIGlkPSJwYXRoNTU1MS03LTQiCiAgICAgICBkPSJtIDYxLjUxNTYxOCwxMDguOTkwMjMgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIDUuNjA5MzU0LC01LjcyMTkyIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgLTAuMDA5OSwtMC4yMDUwOSBIIDYxLjE5Nzk3IHYgNS45MTA3MSBhIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgMC4zMTc2MzQsMC4wMTYzIHoiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC43NDUwOTgwNTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC44MDg2MTU1NztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPgogICAgPHBhdGgKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDU1NTEtNy00LTMiCiAgICAgICBkPSJtIDU5LjkzNzk3NSw5Ni4xOTM4NzQgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIC01LjYwOTM1NCw1LjcyMTkyNiA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIDAuMDA5OSwwLjIwNTA5IGggNS45MTcwNTMgdiAtNS45MTA3MTEgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIC0wLjMxNzYzNCwtMC4wMTYzIHoiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC44MDg2MTU1NztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPgogICAgPHBhdGgKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDU1NTEtNy00LTMtMCIKICAgICAgIGQ9Im0gNTMuMDY4NjMzLDEwMy4wNjMyMiBhIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgLTUuNjA5MzUzLDUuNzIxOTMgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAwLjAwOTksMC4yMDUwOCBoIDUuOTE3MDUzIHYgLTUuOTEwNzEgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIC0wLjMxNzYzNCwtMC4wMTYzIHoiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC41ODgyMzUzMjtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC44MDg2MTU1NztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPgogICAgPGcKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuMjkzMzQyMzksMCwwLDAuMjkzMzQyMzksNjAuNTUxODAzLDEwMi40MTcwNSkiCiAgICAgICBpZD0iZzU0ODYiPgogICAgICA8ZwogICAgICAgICBpZD0iZzMiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICBkPSJtIDQxLjUzNCwyOC42NiBoIDEuOTU3IEMgNDQuODc3LDI4LjY2IDQ2LDI3LjUzNiA0NiwyNi4xNSB2IC02LjMgYyAwLC0xLjM4NSAtMS4xMjQsLTIuNTA5IC0yLjUwOSwtMi41MDkgSCA0MS41NCB2IDAuMDA2IEMgNDEuMTQ4LDE2LjE0IDQwLjY4NywxNC45ODMgNDAuMTAzLDEzLjg4OSBsIDEuMzgxLC0xLjM4MSBjIDAuOTc5LC0wLjk4IDAuOTc5LC0yLjU2OSAwLC0zLjU0OSBMIDM3LjA0LDQuNTE3IGMgLTAuOTc5LC0wLjk3OSAtMi41NjcsLTAuOTc5IC0zLjU0NywwIGwgLTEuMzgyLDEuMzggQyAzMS4wMTcsNS4zMTMgMjkuODYxLDQuODUyIDI4LjY1NCw0LjQ2MSBIIDI4LjY2IFYgMi41MSBDIDI4LjY2LDEuMTI0IDI3LjUzNywwIDI2LjE1LDAgaCAtNi4zIGMgLTEuMzg2LDAgLTIuNTA5LDEuMTI0IC0yLjUwOSwyLjUxIHYgMS45NTUgbCAwLjAxNCwtMTBlLTQgYyAtMS4yMDcsMC4zNjcgLTIuMzYzLDAuODUgLTMuNDU4LDEuNDM1IEwgMTIuNTE2LDQuNTE4IGMgLTAuOTgsLTAuOTc5IC0yLjU2OCwtMC45NzkgLTMuNTQ4LDAgTCA0LjUyNSw4Ljk2MSBDIDMuNTQ2LDkuOTQgMy41NDUsMTEuNTI3IDQuNTIzLDEyLjUwNyBMIDUuOSwxMy44ODkgQyA1LjMxNiwxNC45ODMgNC44NTEsMTYuMTQgNC40NiwxNy4zNDYgViAxNy4zNDEgSCAyLjUwOSBDIDEuMTI0LDE3LjM0MSAwLDE4LjQ2NSAwLDE5Ljg1IHYgNi4zMDEgYyAwLDEuMzg3IDEuMTI0LDIuNTExIDIuNTA5LDIuNTExIEggNC40NzMgTCA0LjQ2NywyOC42NDcgYyAwLjM2NywxLjIwNyAwLjg1MywyLjM2MiAxLjQzNiwzLjQ1NyBsIC0xLjM4LDEuMzgxIGMgLTAuOTgsMC45NzkgLTAuOTc5LDIuNTY3IDAsMy41NDcgbCA0LjQ0Myw0LjQ0MiBjIDAuOTc5LDAuOTc5IDIuNTY4LDAuOTc5IDMuNTQ4LDAgbCAxLjM4MSwtMS4zODEgYyAxLjA5NCwwLjU4NCAyLjI1MSwxLjA3MiAzLjQ1OCwxLjQzOCBsIC0wLjAxNCwtMC4wMDYgdiAxLjk2NSBjIDAsMS4zODcgMS4xMjMsMi41MSAyLjUwOSwyLjUxIGggNi4zIGMgMS4zODcsMCAyLjUxLC0xLjEyMyAyLjUxLC0yLjUxIHYgLTEuOTUgaCAtMC4wMDYgYyAxLjIwNywtMC4zOTIgMi4zNjMsLTAuODU2IDMuNDU3LC0xLjQ0IGwgMS4zODEsMS4zNzkgYyAwLjk4LDAuOTc5IDIuNTY4LDAuOTc5IDMuNTQ3LDAgbCA0LjQ0MywtNC40NDUgYyAwLjk3OSwtMC45NzkgMC45NzksLTIuNTY2IDAsLTMuNTQ3IGwgLTEuMzgzLC0xLjM4MyBjIDAuNTg0LC0xLjA5NCAxLjA2OCwtMi4yNSAxLjQzNiwtMy40NTcgeiBNIDIzLjAyMSwzNi43MTQgQyAxNS40NDQsMzYuNzIzIDkuMjc4LDMwLjU1NyA5LjI4NywyMi45OCA5LjI5NiwxNS40NDEgMTUuNDUsOS4yODcgMjIuOTg5LDkuMjc4IGMgNy41NzgsLTAuMDA5IDEzLjc0NCw2LjE1NyAxMy43MzQsMTMuNzM0IC0wLjAxLDcuNTM5IC02LjE2MiwxMy42OTMgLTEzLjcwMiwxMy43MDIgeiIKICAgICAgICAgICBpZD0icGF0aDUiIC8+CiAgICAgIDwvZz4KICAgICAgPGcKICAgICAgICAgaWQ9Imc3IiAvPgogICAgICA8ZwogICAgICAgICBpZD0iZzkiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMTEiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMTMiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMTUiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMTciIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMTkiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMjEiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMjMiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMjUiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMjciIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMjkiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMzEiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMzMiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMzUiIC8+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4K\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iNzMuMDU4cHgiIGhlaWdodD0iNzMuMDU4cHgiIHZpZXdCb3g9IjAgMCA3My4wNTggNzMuMDU4IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA3My4wNTggNzMuMDU4OyIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8ZyBpZD0iRXllIj4KCQk8Zz4KCQkJPHBhdGggZD0iTTcyLjg5MywzNS45NjVjLTAuNTgtMC45MjUtMTQuNDMyLTIyLjU0MS0zNS4xNi0yMi41NDFoLTIuNDA2Yy0yMC43MjksMC0zNC41OCwyMS42MTYtMzUuMTU5LDIyLjU0MQoJCQkJYy0wLjIyMywwLjM0Ny0wLjIyMywwLjc5LDAsMS4xMzdjMC41NzksMC45MTcsMTQuNDMyLDIyLjUzMiwzNS4xNTksMjIuNTMyaDIuNDA2YzIwLjcyOSwwLDM0LjU4LTIxLjYxNSwzNS4xNTktMjIuNTMyCgkJCQlDNzMuMTEzLDM2Ljc1NSw3My4xMTMsMzYuMzEyLDcyLjg5MywzNS45NjV6IE00NS4yNjcsMzYuNTI5YzAsNC42OS0zLjkyLDguNTA2LTguNzM2LDguNTA2Yy00LjgxNywwLTguNzM1LTMuODEyLTguNzM1LTguNTA2CgkJCQljMC00LjY4NywzLjkxOC04LjUwOCw4LjczNS04LjUwOEM0MS4zNDcsMjguMDIyLDQ1LjI2NywzMS44NDQsNDUuMjY3LDM2LjUyOXoiLz4KCQk8L2c+Cgk8L2c+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPC9zdmc+Cg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4KCjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0iQ2FwYV8xIgogICB4PSIwcHgiCiAgIHk9IjBweCIKICAgd2lkdGg9IjQ3MS42MDhweCIKICAgaGVpZ2h0PSI0NzEuNjA4cHgiCiAgIHZpZXdCb3g9IjAgMCA0NzEuNjA4IDQ3MS42MDgiCiAgIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQ3MS42MDggNDcxLjYwODsiCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTEgcjEzNzI1IgogICBzb2RpcG9kaTpkb2NuYW1lPSJ1bmRvLnN2ZyI+PG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNDEiPjxyZGY6UkRGPjxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj48ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD48ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+PC9jYzpXb3JrPjwvcmRmOlJERj48L21ldGFkYXRhPjxkZWZzCiAgICAgaWQ9ImRlZnMzOSIgLz48c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEiCiAgICAgb2JqZWN0dG9sZXJhbmNlPSIxMCIKICAgICBncmlkdG9sZXJhbmNlPSIxMCIKICAgICBndWlkZXRvbGVyYW5jZT0iMTAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjEyMjkiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iODE2IgogICAgIGlkPSJuYW1lZHZpZXczNyIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgaW5rc2NhcGU6em9vbT0iMC41MDA0MTU2IgogICAgIGlua3NjYXBlOmN4PSIyMzUuODA0IgogICAgIGlua3NjYXBlOmN5PSIyMzUuODA0IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjAiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0iQ2FwYV8xIiAvPjxnCiAgICAgaWQ9ImczIj48cGF0aAogICAgICAgZD0ibSAzODQuNTM1MTksOTEuMDY3NzQ0IGMgLTgxLjQ1OTU0LC04MS40NTY4NzkxIC0yMTQuMDA4MDcsLTgxLjQ1Njg3OTEgLTI5NS40NjU4MjgsMCAtODEuNDU3NzY0MSw4MS40NTY4NzYgLTgxLjQ1Njg3ODEsMjE0LjAxMTYwNiAwLDI5NS40NjU4MjYgODEuNDU2ODY4LDgxLjQ1OTUzIDIxNC4wMDU0MDgsODEuNDU5NTMgMjk1LjQ2NTgyOCwwIDgxLjQ1OTUzLC04MS40NTMzNCA4MS40NTk1MywtMjE0LjAwMjc1IDAsLTI5NS40NjU4MjYgeiBNIDM2OC4zMjg4MywzNzAuMzM4NzIgYyAtNzIuNTE4NTksNzIuNTE4NTkgLTE5MC41MzYzLDcyLjUxODU5IC0yNjMuMDY2MzksMCAtNzIuNTE2ODE3LC03Mi41MzAwOSAtNzIuNTE2ODE3LC0xOTAuNTQyNSAwLC0yNjMuMDY3MjcgNzIuNTI5MiwtNzIuNTI2NTU5IDE5MC41MzYyOSwtNzIuNTI2NTU5IDI2My4wNjYzOSwwIDcyLjUyNTY3LDcyLjUyNDc3IDcyLjUyNTY3LDE5MC41MzcxOCAwLDI2My4wNjcyNyB6IG0gMTIuNDQzNDcsLTE5OC4xMjc2IC0xMS42MjA3Niw1Mi4zMjk3MSBjIC0wLjMxMzUsMS40NDcwNiAtMS43NDM3MywyLjM0NjgyIC0zLjE4MjgyLDIuMDM1OTggLTAuNDQwMTQsLTAuMDkzOSAtMTAuOTUwMzYsLTIuMzU4MzQgLTI2LjI5ODU4LC0yLjM1ODM0IC0yNS44ODk0NCwwIC03MS42MjQxMyw2Ljg1MTg0IC0xMDEuODMxNzIsNDkuNTUzMzggbCA2LjI5NjU2LDYuMjk2NTcgNzAuNTAzODYsMzAuNTU5MTcgYyAyLjM2NTQyLDEuMDM3MDMgMy43NTc1OCwzLjUwNjk1IDMuMzkxODMsNi4wNjcyIC0wLjM1MDcsMi41NDk2MiAtMi4zNjEsNC41NTQ2MSAtNC45MzA5OSw0Ljg3MzQyIGwgLTE3NS42MDUxOSwyMi45NTkwMSBjIC0xLjc1ODc5LDAuMjMwMjUgLTMuNTM4ODMsLTAuMzc3MjYgLTQuNzk3MjYsLTEuNjI3NzIgLTEuMjY2NCwtMS4yNjE5NyAtMS44NTUzMiwtMy4wMzY3IC0xLjYzNTY5LC00LjgwNjEyIGwgMjIuOTU5LC0xNzUuNjA3ODUgYyAwLjE2NDczLC0xLjI4NSAwLjc1MzY0LC0yLjQzNjI3IDEuNjIzMywtMy4zMDUwMyAwLjg1ODE0LC0wLjg1OTAzIDEuOTg5MDQsLTEuNDQ3OTUgMy4yNjM0MSwtMS42MzEyNyAyLjU0Njk3LC0wLjM1Nzc4IDUuMDE3NzcsMS4wMzcwMyA2LjA1MzkyLDMuMzk0NDggbCAzMC41NjcxNCw3MC41MDY1MiAwLjE1NzYzLDAuMTU3NjMgYyA0Ny4xNDE5MSwtNTkuNDAxMTcgMTE1LjQxNTg0LC02Ni40ODk0NiAxNDUuMDI4MzEsLTY2LjQ4OTQ2IDEzLjU0NjkzLDAgMjYuNjk2MjIsMS4zNDUyMiAzOC4wMjM4NCwzLjg4Njg3IDEuNDUzMjYsMC4zMzIxIDIuMzYzNjUsMS43NjMyMiAyLjAzNDIxLDMuMjA1ODUgeiIKICAgICAgIGlkPSJwYXRoNSIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PC9nPjxnCiAgICAgaWQ9Imc3IiAvPjxnCiAgICAgaWQ9Imc5IiAvPjxnCiAgICAgaWQ9ImcxMSIgLz48ZwogICAgIGlkPSJnMTMiIC8+PGcKICAgICBpZD0iZzE1IiAvPjxnCiAgICAgaWQ9ImcxNyIgLz48ZwogICAgIGlkPSJnMTkiIC8+PGcKICAgICBpZD0iZzIxIiAvPjxnCiAgICAgaWQ9ImcyMyIgLz48ZwogICAgIGlkPSJnMjUiIC8+PGcKICAgICBpZD0iZzI3IiAvPjxnCiAgICAgaWQ9ImcyOSIgLz48ZwogICAgIGlkPSJnMzEiIC8+PGcKICAgICBpZD0iZzMzIiAvPjxnCiAgICAgaWQ9ImczNSIgLz48L3N2Zz4=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0naXNvLTg4NTktMSc/Pgo8c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0gIjQ0IiBoZWlnaHQ9ICI0NCIgdmlld0JveD0iMCAwIDQ0IDQ0IiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgNDQgNDQiPgogIDxjaXJjbGUgY3g9IjIyIiBjeT0iMjIiIHI9IjIyIiBmaWxsPSIjZmZmIi8+CiAgPHBhdGggZD0ibTIyLDBjLTEyLjIsMC0yMiw5LjgtMjIsMjJzOS44LDIyIDIyLDIyIDIyLTkuOCAyMi0yMi05LjgtMjItMjItMjJ6bS0xLjMsMTkuM2wtMS40LDEuNGMtMC40LDAuNC0xLDAuNC0xLjQsMGwtNC00Yy0wLjMtMC4zLTAuOS0wLjEtMC45LDAuNHYxYzAsMC42LTAuNCwxLTEsMWgtMmMtMC42LDAtMS0wLjQtMS0xdi04YzAtMC42IDAuNC0xIDEtMWg4YzAuNiwwIDEsMC40IDEsMXYyYzAsMC42LTAuNCwxLTEsMWgtMWMtMC40LDAtMC43LDAuNS0wLjQsMC45bDQsNGMwLjUsMC4zIDAuNSwwLjkgMC4xLDEuM3ptMTQuMywxNC43YzAsMC42LTAuNCwxLTEsMWgtOGMtMC42LDAtMS0wLjQtMS0xdi0yYzAtMC42IDAuNC0xIDEtMWgxYzAuNCwwIDAuNy0wLjUgMC40LTAuOWwtNC00Yy0wLjQtMC40LTAuNC0xIDAtMS40bDEuNC0xLjRjMC40LTAuNCAxLTAuNCAxLjQsMGw0LDRjMC4zLDAuMyAwLjksMC4xIDAuOS0wLjR2LTFjMC0wLjYgMC40LTEgMS0xaDJjMC42LDAgMSwwLjQgMSwxdjguMWgtMC4xeiIvPgo8L3N2Zz4K\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iMTc0IgogICBoZWlnaHQ9IjQ3Ljg4NzMxIgogICB2aWV3Qm94PSIwIDAgMTYzLjEyNSA0NC44OTQzNTQiCiAgIGlkPSJzdmc0Mzk5IgogICB2ZXJzaW9uPSIxLjEiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTIuMSByMTUzNzEiCiAgIHNvZGlwb2RpOmRvY25hbWU9ImNvbXBhcnRtZW50LnN2ZyI+CiAgPGRlZnMKICAgICBpZD0iZGVmczQ0MDEiIC8+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjEuNCIKICAgICBpbmtzY2FwZTpjeD0iNTcuNTQ1NjA4IgogICAgIGlua3NjYXBlOmN5PSI5NS4yMzMzOTkiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB4IgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgZml0LW1hcmdpbi10b3A9IjAiCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIgogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiCiAgICAgZml0LW1hcmdpbi1ib3R0b209IjAiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciCiAgICAgaW5rc2NhcGU6d2luZG93LXg9Ii04IgogICAgIGlua3NjYXBlOndpbmRvdy15PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIHVuaXRzPSJweCIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE0NDA0Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjc0LjQ1MDM1LC0zMTYuMDU0MzYpIj4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDo2LjgyOTY5OTA0O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGlkPSJyZWN0Mjk4NSIKICAgICAgIHdpZHRoPSIxNTYuMjk1MyIKICAgICAgIGhlaWdodD0iMzguMDY0NjU1IgogICAgICAgeD0iMjc3Ljg2NTIiCiAgICAgICB5PSIzMTkuNDY5MjEiCiAgICAgICByeT0iOS44MjMxMjExIgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjUzLjk1OTk5OSIKICAgICAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSI1My45NTk5OTkiCiAgICAgICBpbmtzY2FwZTpleHBvcnQtZmlsZW5hbWU9IkM6XFVzZXJzXHVndXJcR29vZ2xlIERyaXZlXHRvb2xiYXJcbWFjcm9tb2xlY3VsZS5wbmciIC8+CiAgICA8dGV4dAogICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIKICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjI4LjEyNXB4O2xpbmUtaGVpZ2h0OjEyNSU7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuOTM3NXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICB4PSIzMDMuODM1MTEiCiAgICAgICB5PSIzNDIuNTQ0NDkiCiAgICAgICBpZD0idGV4dDgxOCI+PHRzcGFuCiAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiCiAgICAgICAgIGlkPSJ0c3BhbjgxNiIKICAgICAgICAgeD0iMzAzLjgzNTExIgogICAgICAgICB5PSIzNDIuNTQ0NDkiCiAgICAgICAgIHN0eWxlPSJmb250LXNpemU6MTVweDtzdHJva2Utd2lkdGg6MC45Mzc1cHgiPkNvbXBhcnRtZW50PC90c3Bhbj48L3RleHQ+CiAgPC9nPgo8L3N2Zz4K\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iMTc0IgogICBoZWlnaHQ9IjQ0LjQ0MjgyMiIKICAgdmlld0JveD0iMCAwIDE2My4xMjUgNDEuNjY1MTQ2IgogICBpZD0ic3ZnNDM5OSIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIgogICBzb2RpcG9kaTpkb2NuYW1lPSJjb21wbGV4LnN2ZyI+CiAgPGRlZnMKICAgICBpZD0iZGVmczQ0MDEiIC8+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjEuNCIKICAgICBpbmtzY2FwZTpjeD0iNTUuODIzMzUzIgogICAgIGlua3NjYXBlOmN5PSI5My41MTExNjYiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB4IgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgZml0LW1hcmdpbi10b3A9IjAiCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIgogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiCiAgICAgZml0LW1hcmdpbi1ib3R0b209IjAiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciCiAgICAgaW5rc2NhcGU6d2luZG93LXg9Ii04IgogICAgIGlua3NjYXBlOndpbmRvdy15PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIHVuaXRzPSJweCIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE0NDA0Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjc2LjA2NDk3LC0zMTcuNjY4OTcpIj4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozLjIzMTI2OTg0O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGlkPSJyZWN0Mjk4NSIKICAgICAgIHdpZHRoPSIxNTkuODkzNzQiCiAgICAgICBoZWlnaHQ9IjM4LjQzMzg3NiIKICAgICAgIHg9IjI3Ny42ODA2IgogICAgICAgeT0iMzE5LjI4NDYxIgogICAgICAgcnk9IjAiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iNTMuOTU5OTk5IgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjUzLjk1OTk5OSIKICAgICAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iQzpcVXNlcnNcdWd1clxHb29nbGUgRHJpdmVcdG9vbGJhclxtYWNyb21vbGVjdWxlLnBuZyIgLz4KICAgIDx0ZXh0CiAgICAgICB4bWw6c3BhY2U9InByZXNlcnZlIgogICAgICAgc3R5bGU9ImZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXNpemU6MjguMTI1cHg7bGluZS1oZWlnaHQ6MTI1JTtmb250LWZhbWlseTpzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC45Mzc1cHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIHg9IjMyNC43MTYwOSIKICAgICAgIHk9IjM0Mi42OTEwMSIKICAgICAgIGlkPSJ0ZXh0ODE4Ij48dHNwYW4KICAgICAgICAgc29kaXBvZGk6cm9sZT0ibGluZSIKICAgICAgICAgaWQ9InRzcGFuODE2IgogICAgICAgICB4PSIzMjQuNzE2MDkiCiAgICAgICAgIHk9IjM0Mi42OTEwMSIKICAgICAgICAgc3R5bGU9ImZvbnQtc2l6ZToxNXB4O3N0cm9rZS13aWR0aDowLjkzNzVweCI+Q29tcGxleDwvdHNwYW4+PC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iMTczLjk5OTM3IgogICBoZWlnaHQ9IjQ1LjA4MjAwMSIKICAgdmlld0JveD0iMCAwIDE2My4xMjQ0MiA0Mi4yNjQzNzYiCiAgIGlkPSJzdmc0Mzk5IgogICB2ZXJzaW9uPSIxLjEiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTIuMSByMTUzNzEiCiAgIHNvZGlwb2RpOmRvY25hbWU9ImZhbWlseS5zdmciPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0NDAxIiAvPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSIxLjQiCiAgICAgaW5rc2NhcGU6Y3g9IjE3MS44OTQ3NyIKICAgICBpbmtzY2FwZTpjeT0iOTMuNTExMTkyIgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGZpdC1tYXJnaW4tdG9wPSIwIgogICAgIGZpdC1tYXJnaW4tbGVmdD0iMCIKICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIwIgogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDE3IgogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIKICAgICB1bml0cz0icHgiIC8+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNDQwNCI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGU+PC9kYzp0aXRsZT4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTI3Ni4wNjQ5OCwtMzE3LjA2OTc3KSI+CiAgICA8cmVjdAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzkzOTM5MztzdHJva2Utd2lkdGg6My4yNTUxMTgzNztzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBpZD0icmVjdDI5ODUiCiAgICAgICB3aWR0aD0iMTU5Ljg2OTI5IgogICAgICAgaGVpZ2h0PSIzOS4wMDkyNTgiCiAgICAgICB4PSIyNzcuNjkyNTQiCiAgICAgICB5PSIzMTguNjk3MzMiCiAgICAgICByeT0iMCIKICAgICAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSI1My45NTk5OTkiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iNTMuOTU5OTk5IgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LWZpbGVuYW1lPSJDOlxVc2Vyc1x1Z3VyXEdvb2dsZSBEcml2ZVx0b29sYmFyXG1hY3JvbW9sZWN1bGUucG5nIiAvPgogICAgPHRleHQKICAgICAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgICAgICBzdHlsZT0iZm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc2l6ZToyOC4xMjVweDtsaW5lLWhlaWdodDoxMjUlO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6MHB4O3dvcmQtc3BhY2luZzowcHg7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjkzNzVweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgeD0iMzMyLjg2MDMyIgogICAgICAgeT0iMzQyLjM5MTQyIgogICAgICAgaWQ9InRleHQ4MTgiPjx0c3BhbgogICAgICAgICBzb2RpcG9kaTpyb2xlPSJsaW5lIgogICAgICAgICBpZD0idHNwYW44MTYiCiAgICAgICAgIHg9IjMzMi44NjAzMiIKICAgICAgICAgeT0iMzQyLjM5MTQyIgogICAgICAgICBzdHlsZT0iZm9udC1zaXplOjE1cHg7c3Ryb2tlLXdpZHRoOjAuOTM3NXB4Ij5GYW1pbHk8L3RzcGFuPjwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iMTc0IgogICBoZWlnaHQ9IjQ0LjQ0MjgyMiIKICAgdmlld0JveD0iMCAwIDE2My4xMjUgNDEuNjY1MTQ2IgogICBpZD0ic3ZnNDM5OSIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIgogICBzb2RpcG9kaTpkb2NuYW1lPSJnZW5lLnN2ZyI+CiAgPGRlZnMKICAgICBpZD0iZGVmczQ0MDEiIC8+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjEuNCIKICAgICBpbmtzY2FwZTpjeD0iNTUuODIzMzUzIgogICAgIGlua3NjYXBlOmN5PSI5My41MTExNjYiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB4IgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgZml0LW1hcmdpbi10b3A9IjAiCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIgogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiCiAgICAgZml0LW1hcmdpbi1ib3R0b209IjAiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciCiAgICAgaW5rc2NhcGU6d2luZG93LXg9Ii04IgogICAgIGlua3NjYXBlOndpbmRvdy15PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIHVuaXRzPSJweCIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE0NDA0Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjc2LjA2NDk3LC0zMTcuNjY4OTcpIj4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozLjIzMTI2OTg0O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGlkPSJyZWN0Mjk4NSIKICAgICAgIHdpZHRoPSIxNTkuODkzNzQiCiAgICAgICBoZWlnaHQ9IjM4LjQzMzg3NiIKICAgICAgIHg9IjI3Ny42ODA2IgogICAgICAgeT0iMzE5LjI4NDYxIgogICAgICAgcnk9IjkuOTE4NDAzNiIKICAgICAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSI1My45NTk5OTkiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iNTMuOTU5OTk5IgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LWZpbGVuYW1lPSJDOlxVc2Vyc1x1Z3VyXEdvb2dsZSBEcml2ZVx0b29sYmFyXG1hY3JvbW9sZWN1bGUucG5nIiAvPgogICAgPHRleHQKICAgICAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgICAgICBzdHlsZT0iZm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc2l6ZToyOC4xMjVweDtsaW5lLWhlaWdodDoxMjUlO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6MHB4O3dvcmQtc3BhY2luZzowcHg7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjkzNzVweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgeD0iMzM4LjA3NTQ3IgogICAgICAgeT0iMzQzLjk0NzExIgogICAgICAgaWQ9InRleHQ4MTgiPjx0c3BhbgogICAgICAgICBzb2RpcG9kaTpyb2xlPSJsaW5lIgogICAgICAgICBpZD0idHNwYW44MTYiCiAgICAgICAgIHg9IjMzOC4wNzU0NyIKICAgICAgICAgeT0iMzQzLjk0NzExIgogICAgICAgICBzdHlsZT0iZm9udC1zaXplOjE1cHg7c3Ryb2tlLXdpZHRoOjAuOTM3NXB4Ij5HZW5lPC90c3Bhbj48L3RleHQ+CiAgPC9nPgo8L3N2Zz4K\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iMTc0IgogICBoZWlnaHQ9IjQ0LjQ0MjgyMiIKICAgdmlld0JveD0iMCAwIDE2My4xMjUgNDEuNjY1MTQ2IgogICBpZD0ic3ZnNDM5OSIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIgogICBzb2RpcG9kaTpkb2NuYW1lPSJwcm9jZXNzLnN2ZyI+CiAgPGRlZnMKICAgICBpZD0iZGVmczQ0MDEiIC8+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjEuNCIKICAgICBpbmtzY2FwZTpjeD0iLTYwLjI0ODA3NiIKICAgICBpbmtzY2FwZTpjeT0iOTMuNTExMTY2IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGZpdC1tYXJnaW4tdG9wPSIwIgogICAgIGZpdC1tYXJnaW4tbGVmdD0iMCIKICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIwIgogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDE3IgogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIKICAgICB1bml0cz0icHgiIC8+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNDQwNCI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGU+PC9kYzp0aXRsZT4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTI3Ni4wNjQ5NywtMzE3LjY2ODk3KSI+CiAgICA8dGV4dAogICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIKICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjI4LjEyNXB4O2xpbmUtaGVpZ2h0OjEyNSU7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuOTM3NXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICB4PSIzMjguNzE1MTIiCiAgICAgICB5PSIzNDMuODQwOTEiCiAgICAgICBpZD0idGV4dDgxOCI+PHRzcGFuCiAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiCiAgICAgICAgIGlkPSJ0c3BhbjgxNiIKICAgICAgICAgeD0iMzI4LjcxNTEyIgogICAgICAgICB5PSIzNDMuODQwOTEiCiAgICAgICAgIHN0eWxlPSJmb250LXNpemU6MTVweDtzdHJva2Utd2lkdGg6MC45Mzc1cHgiPlByb2Nlc3M8L3RzcGFuPjwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iNjUiCiAgIGhlaWdodD0iMTkuNzg3MjE4IgogICBpZD0ic3ZnMiIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIgogICBzb2RpcG9kaTpkb2NuYW1lPSJhY3RpdmF0ZXMuc3ZnIgogICBpbmtzY2FwZTpleHBvcnQtZmlsZW5hbWU9IkM6XFVzZXJzXHVndXJcRGVza3RvcFxpbnRlcmFjdGlvbi1sZWdlbmQuMjAxNi4wNC4wMS5wbmciCiAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSIzMDAiCiAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSIzMDAiCiAgIHZpZXdCb3g9IjAgMCA2MC45Mzc1MDEgMTguNTUwNTE2Ij4KICA8ZGVmcwogICAgIGlkPSJkZWZzNCI+CiAgICA8bWFya2VyCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJUcmlhbmdsZU91dEwiCiAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgICByZWZZPSIwIgogICAgICAgcmVmWD0iMCIKICAgICAgIGlkPSJtYXJrZXIxMjAyIgogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiCiAgICAgICBpbmtzY2FwZTppc3N0b2NrPSJ0cnVlIj4KICAgICAgPHBhdGgKICAgICAgICAgaWQ9InBhdGgxMjAwIgogICAgICAgICBkPSJNIDUuNzcsMCAtMi44OCw1IFYgLTUgWiIKICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS4wMDAwMDAwM3B0O3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMC44KSIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgIDwvbWFya2VyPgogICAgPG1hcmtlcgogICAgICAgaW5rc2NhcGU6c3RvY2tpZD0iVHJpYW5nbGVPdXRMIgogICAgICAgb3JpZW50PSJhdXRvIgogICAgICAgcmVmWT0iMCIKICAgICAgIHJlZlg9IjAiCiAgICAgICBpZD0iVHJpYW5nbGVPdXRMIgogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiCiAgICAgICBpbmtzY2FwZTppc3N0b2NrPSJ0cnVlIj4KICAgICAgPHBhdGgKICAgICAgICAgaWQ9InBhdGg5NTkiCiAgICAgICAgIGQ9Ik0gNS43NywwIC0yLjg4LDUgViAtNSBaIgogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjAwMDAwMDAzcHQ7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgwLjgpIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPC9tYXJrZXI+CiAgPC9kZWZzPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSI3LjkxOTU5NTkiCiAgICAgaW5rc2NhcGU6Y3g9Ii00LjgxMTAzNTciCiAgICAgaW5rc2NhcGU6Y3k9IjE4LjQ2ODYyMSIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTAxNyIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04IgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiCiAgICAgZml0LW1hcmdpbi10b3A9IjAiCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIgogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiCiAgICAgZml0LW1hcmdpbi1ib3R0b209IjAiIC8+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNyI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGUgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTI3NS42NDI0NywtMjgxLjI5NjQ5KSI+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6My43NDk5OTk5MztzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJtIDI3NS42NDI0NywyOTAuNTcxNzUgaCA0Ny4zNTA4OSIKICAgICAgIGlkPSJwYXRoNDk0OSIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgPHBhdGgKICAgICAgIHNvZGlwb2RpOnR5cGU9InN0YXIiCiAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6My43NTtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTtwYWludC1vcmRlcjpmaWxsIG1hcmtlcnMgc3Ryb2tlIgogICAgICAgaWQ9InBhdGg0OTUzIgogICAgICAgc29kaXBvZGk6c2lkZXM9IjMiCiAgICAgICBzb2RpcG9kaTpjeD0iMjEyLjQyOTAyIgogICAgICAgc29kaXBvZGk6Y3k9IjI1My43OTgyNiIKICAgICAgIHNvZGlwb2RpOnIxPSIxMS4wNTczNDciCiAgICAgICBzb2RpcG9kaTpyMj0iNS41Mjg2NzM2IgogICAgICAgc29kaXBvZGk6YXJnMT0iMC45MTQ0NDc5NiIKICAgICAgIHNvZGlwb2RpOmFyZzI9IjEuOTYxNjQ1NSIKICAgICAgIGlua3NjYXBlOmZsYXRzaWRlZD0idHJ1ZSIKICAgICAgIGlua3NjYXBlOnJvdW5kZWQ9IjAiCiAgICAgICBpbmtzY2FwZTpyYW5kb21pemVkPSIwIgogICAgICAgZD0ibSAyMTkuMTc2NTIsMjYyLjU1ODE4IC0xNy43MDc1NywtNy4yOTYzNyAxNS4xNzI2MiwtMTEuNjg3MDEgeiIKICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteD0iLTIuNjk0NjIxOSIKICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteT0iMC4wNzg0ODk2NTMiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjM5NDM0MDk4LDAuODk5Nzc1MDQsLTAuOTE4OTY0MTksMC4zODYxMDY2Myw0NzQuOTg1ODMsMS4zNjE3MzI5KSIgLz4KICA8L2c+Cjwvc3ZnPgo=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iNjUiCiAgIGhlaWdodD0iMTkuNzg3MjE4IgogICBpZD0ic3ZnMiIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIgogICBzb2RpcG9kaTpkb2NuYW1lPSJiaW5kcy5zdmciCiAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iQzpcVXNlcnNcdWd1clxEZXNrdG9wXGludGVyYWN0aW9uLWxlZ2VuZC4yMDE2LjA0LjAxLnBuZyIKICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjMwMCIKICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjMwMCIKICAgdmlld0JveD0iMCAwIDYwLjkzNzUwMSAxOC41NTA1MTYiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0Ij4KICAgIDxtYXJrZXIKICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IlRyaWFuZ2xlT3V0TCIKICAgICAgIG9yaWVudD0iYXV0byIKICAgICAgIHJlZlk9IjAiCiAgICAgICByZWZYPSIwIgogICAgICAgaWQ9Im1hcmtlcjEyMDIiCiAgICAgICBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZSIKICAgICAgIGlua3NjYXBlOmlzc3RvY2s9InRydWUiPgogICAgICA8cGF0aAogICAgICAgICBpZD0icGF0aDEyMDAiCiAgICAgICAgIGQ9Ik0gNS43NywwIC0yLjg4LDUgViAtNSBaIgogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjAwMDAwMDAzcHQ7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgwLjgpIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPC9tYXJrZXI+CiAgICA8bWFya2VyCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJUcmlhbmdsZU91dEwiCiAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgICByZWZZPSIwIgogICAgICAgcmVmWD0iMCIKICAgICAgIGlkPSJUcmlhbmdsZU91dEwiCiAgICAgICBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZSIKICAgICAgIGlua3NjYXBlOmlzc3RvY2s9InRydWUiPgogICAgICA8cGF0aAogICAgICAgICBpZD0icGF0aDk1OSIKICAgICAgICAgZD0iTSA1Ljc3LDAgLTIuODgsNSBWIC01IFoiCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuMDAwMDAwMDNwdDtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuOCkiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8L21hcmtlcj4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjcuOTE5NTk1OSIKICAgICBpbmtzY2FwZTpjeD0iLTQuODExMDM1NyIKICAgICBpbmtzY2FwZTpjeT0iMTguNDY4NjIxIgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDE3IgogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIKICAgICBmaXQtbWFyZ2luLXRvcD0iMCIKICAgICBmaXQtbWFyZ2luLWxlZnQ9IjAiCiAgICAgZml0LW1hcmdpbi1yaWdodD0iMCIKICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMCIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE3Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjc1LjY0MjQ3LC0yODEuMjk2NDkpIj4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozLjc1O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Im0gMjc1LjY0MjQ3LDI5MC41NzE3NSBoIDYwLjkzNzUiCiAgICAgICBpZD0icGF0aDQ5NDkiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICA8L2c+Cjwvc3ZnPgo=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iNjUiCiAgIGhlaWdodD0iMTkuNzg3MjE4IgogICBpZD0ic3ZnMiIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIgogICBzb2RpcG9kaTpkb2NuYW1lPSJpbmR1Y2VzLnN2ZyIKICAgaW5rc2NhcGU6ZXhwb3J0LWZpbGVuYW1lPSJDOlxVc2Vyc1x1Z3VyXERlc2t0b3BcaW50ZXJhY3Rpb24tbGVnZW5kLjIwMTYuMDQuMDEucG5nIgogICBpbmtzY2FwZTpleHBvcnQteGRwaT0iMzAwIgogICBpbmtzY2FwZTpleHBvcnQteWRwaT0iMzAwIgogICB2aWV3Qm94PSIwIDAgNjAuOTM3NTAxIDE4LjU1MDUxNiI+CiAgPGRlZnMKICAgICBpZD0iZGVmczQiPgogICAgPG1hcmtlcgogICAgICAgaW5rc2NhcGU6c3RvY2tpZD0iVHJpYW5nbGVPdXRMIgogICAgICAgb3JpZW50PSJhdXRvIgogICAgICAgcmVmWT0iMCIKICAgICAgIHJlZlg9IjAiCiAgICAgICBpZD0ibWFya2VyMTIwMiIKICAgICAgIHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlIgogICAgICAgaW5rc2NhcGU6aXNzdG9jaz0idHJ1ZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIGlkPSJwYXRoMTIwMCIKICAgICAgICAgZD0iTSA1Ljc3LDAgLTIuODgsNSBWIC01IFoiCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuMDAwMDAwMDNwdDtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuOCkiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8L21hcmtlcj4KICAgIDxtYXJrZXIKICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IlRyaWFuZ2xlT3V0TCIKICAgICAgIG9yaWVudD0iYXV0byIKICAgICAgIHJlZlk9IjAiCiAgICAgICByZWZYPSIwIgogICAgICAgaWQ9IlRyaWFuZ2xlT3V0TCIKICAgICAgIHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlIgogICAgICAgaW5rc2NhcGU6aXNzdG9jaz0idHJ1ZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIGlkPSJwYXRoOTU5IgogICAgICAgICBkPSJNIDUuNzcsMCAtMi44OCw1IFYgLTUgWiIKICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS4wMDAwMDAwM3B0O3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMC44KSIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgIDwvbWFya2VyPgogIDwvZGVmcz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iNy45MTk1OTU5IgogICAgIGlua3NjYXBlOmN4PSItNC44MTEwMzU3IgogICAgIGlua3NjYXBlOmN5PSIxOC40Njg2MjEiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB4IgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciCiAgICAgaW5rc2NhcGU6d2luZG93LXg9Ii04IgogICAgIGlua3NjYXBlOndpbmRvdy15PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIGZpdC1tYXJnaW4tdG9wPSIwIgogICAgIGZpdC1tYXJnaW4tbGVmdD0iMCIKICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIwIgogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIiAvPgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTciPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgICAgPGRjOnRpdGxlPjwvZGM6dGl0bGU+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIgogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yNzUuNjQyNDcsLTI4MS4yOTY0OSkiPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjMuNzQ5OTk5OTM7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5OjcuNDk5OTk5ODcsNy40OTk5OTk4NztzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNob2Zmc2V0OjAiCiAgICAgICBkPSJtIDI3NS42NDI0NywyOTAuNTcxNzUgaCA0Ny4zNTA4OSIKICAgICAgIGlkPSJwYXRoNDk0OSIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgPHBhdGgKICAgICAgIHNvZGlwb2RpOnR5cGU9InN0YXIiCiAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6My43NTtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTtwYWludC1vcmRlcjpmaWxsIG1hcmtlcnMgc3Ryb2tlIgogICAgICAgaWQ9InBhdGg0OTUzIgogICAgICAgc29kaXBvZGk6c2lkZXM9IjMiCiAgICAgICBzb2RpcG9kaTpjeD0iMjEyLjQyOTAyIgogICAgICAgc29kaXBvZGk6Y3k9IjI1My43OTgyNiIKICAgICAgIHNvZGlwb2RpOnIxPSIxMS4wNTczNDciCiAgICAgICBzb2RpcG9kaTpyMj0iNS41Mjg2NzM2IgogICAgICAgc29kaXBvZGk6YXJnMT0iMC45MTQ0NDc5NiIKICAgICAgIHNvZGlwb2RpOmFyZzI9IjEuOTYxNjQ1NSIKICAgICAgIGlua3NjYXBlOmZsYXRzaWRlZD0idHJ1ZSIKICAgICAgIGlua3NjYXBlOnJvdW5kZWQ9IjAiCiAgICAgICBpbmtzY2FwZTpyYW5kb21pemVkPSIwIgogICAgICAgZD0ibSAyMTkuMTc2NTIsMjYyLjU1ODE4IC0xNy43MDc1NywtNy4yOTYzNyAxNS4xNzI2MiwtMTEuNjg3MDEgeiIKICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteD0iLTIuNjk0NjIxOSIKICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteT0iMC4wNzg0ODk2NTMiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjM5NDM0MDk4LDAuODk5Nzc1MDQsLTAuOTE4OTY0MTksMC4zODYxMDY2Myw0NzQuOTg1ODMsMS4zNjE3MzI5KSIgLz4KICA8L2c+Cjwvc3ZnPgo=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iNjUiCiAgIGhlaWdodD0iMTkuNzg3MjE4IgogICBpZD0ic3ZnMiIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIgogICBzb2RpcG9kaTpkb2NuYW1lPSJpbmhpYml0cy5zdmciCiAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iQzpcVXNlcnNcdWd1clxEZXNrdG9wXGludGVyYWN0aW9uLWxlZ2VuZC4yMDE2LjA0LjAxLnBuZyIKICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjMwMCIKICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjMwMCIKICAgdmlld0JveD0iMCAwIDYwLjkzNzUwMSAxOC41NTA1MTYiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0Ij4KICAgIDxtYXJrZXIKICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IlN0b3BMIgogICAgICAgb3JpZW50PSJhdXRvIgogICAgICAgcmVmWT0iMC4wIgogICAgICAgcmVmWD0iMC4wIgogICAgICAgaWQ9IlN0b3BMIgogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiCiAgICAgICBpbmtzY2FwZTppc3N0b2NrPSJ0cnVlIj4KICAgICAgPHBhdGgKICAgICAgICAgaWQ9InBhdGg5ODYiCiAgICAgICAgIGQ9Ik0gMC4wLDUuNjUgTCAwLjAsLTUuNjUiCiAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjAuNzU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjFwdDtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuOCkiIC8+CiAgICA8L21hcmtlcj4KICAgIDxtYXJrZXIKICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IlRyaWFuZ2xlT3V0TCIKICAgICAgIG9yaWVudD0iYXV0byIKICAgICAgIHJlZlk9IjAiCiAgICAgICByZWZYPSIwIgogICAgICAgaWQ9Im1hcmtlcjEyMDIiCiAgICAgICBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZSIKICAgICAgIGlua3NjYXBlOmlzc3RvY2s9InRydWUiPgogICAgICA8cGF0aAogICAgICAgICBpZD0icGF0aDEyMDAiCiAgICAgICAgIGQ9Ik0gNS43NywwIC0yLjg4LDUgViAtNSBaIgogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjAwMDAwMDAzcHQ7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgwLjgpIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPC9tYXJrZXI+CiAgICA8bWFya2VyCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJUcmlhbmdsZU91dEwiCiAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgICByZWZZPSIwIgogICAgICAgcmVmWD0iMCIKICAgICAgIGlkPSJUcmlhbmdsZU91dEwiCiAgICAgICBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZSIKICAgICAgIGlua3NjYXBlOmlzc3RvY2s9InRydWUiPgogICAgICA8cGF0aAogICAgICAgICBpZD0icGF0aDk1OSIKICAgICAgICAgZD0iTSA1Ljc3LDAgLTIuODgsNSBWIC01IFoiCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuMDAwMDAwMDNwdDtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuOCkiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8L21hcmtlcj4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjcuOTE5NTk1OSIKICAgICBpbmtzY2FwZTpjeD0iLTQuODExMDM1NyIKICAgICBpbmtzY2FwZTpjeT0iMTMuOTIyOTM0IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDE3IgogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIKICAgICBmaXQtbWFyZ2luLXRvcD0iMCIKICAgICBmaXQtbWFyZ2luLWxlZnQ9IjAiCiAgICAgZml0LW1hcmdpbi1yaWdodD0iMCIKICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMCIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE3Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZSAvPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjc1LjY0MjQ3LC0yODEuMjk2NDkpIj4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozLjc0OTk5OTkzO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Im0gMjc1LjY0MjQ3LDI5MC41NzE3NSBoIDU5Ljc4MDUiCiAgICAgICBpZD0icGF0aDQ5NDkiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC43NDUwOTgwNDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6Mi43NzU5Mzc1NjtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTo4LjMyNzgxMjQ2LCAyLjc3NTkzNzQ5O3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTtwYWludC1vcmRlcjpmaWxsIG1hcmtlcnMgc3Ryb2tlIgogICAgICAgaWQ9InJlY3Q0OTgxIgogICAgICAgd2lkdGg9IjAuOTc0MTY5NTUiCiAgICAgICBoZWlnaHQ9IjE1Ljg4OTcwMyIKICAgICAgIHg9IjMzNC4yMTc4MyIKICAgICAgIHk9IjI4Mi42MjY4OSIgLz4KICA8L2c+Cjwvc3ZnPgo=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iNjUiCiAgIGhlaWdodD0iMTkuNzg3MjE4IgogICBpZD0ic3ZnMiIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIgogICBzb2RpcG9kaTpkb2NuYW1lPSJyZXByZXNzZXMuc3ZnIgogICBpbmtzY2FwZTpleHBvcnQtZmlsZW5hbWU9IkM6XFVzZXJzXHVndXJcRGVza3RvcFxpbnRlcmFjdGlvbi1sZWdlbmQuMjAxNi4wNC4wMS5wbmciCiAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSIzMDAiCiAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSIzMDAiCiAgIHZpZXdCb3g9IjAgMCA2MC45Mzc1MDEgMTguNTUwNTE2Ij4KICA8ZGVmcwogICAgIGlkPSJkZWZzNCI+CiAgICA8bWFya2VyCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJTdG9wTCIKICAgICAgIG9yaWVudD0iYXV0byIKICAgICAgIHJlZlk9IjAuMCIKICAgICAgIHJlZlg9IjAuMCIKICAgICAgIGlkPSJTdG9wTCIKICAgICAgIHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlIgogICAgICAgaW5rc2NhcGU6aXNzdG9jaz0idHJ1ZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIGlkPSJwYXRoOTg2IgogICAgICAgICBkPSJNIDAuMCw1LjY1IEwgMC4wLC01LjY1IgogICAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtb3BhY2l0eTowLjc1O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxcHQ7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgwLjgpIiAvPgogICAgPC9tYXJrZXI+CiAgICA8bWFya2VyCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJUcmlhbmdsZU91dEwiCiAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgICByZWZZPSIwIgogICAgICAgcmVmWD0iMCIKICAgICAgIGlkPSJtYXJrZXIxMjAyIgogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiCiAgICAgICBpbmtzY2FwZTppc3N0b2NrPSJ0cnVlIj4KICAgICAgPHBhdGgKICAgICAgICAgaWQ9InBhdGgxMjAwIgogICAgICAgICBkPSJNIDUuNzcsMCAtMi44OCw1IFYgLTUgWiIKICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS4wMDAwMDAwM3B0O3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMC44KSIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgIDwvbWFya2VyPgogICAgPG1hcmtlcgogICAgICAgaW5rc2NhcGU6c3RvY2tpZD0iVHJpYW5nbGVPdXRMIgogICAgICAgb3JpZW50PSJhdXRvIgogICAgICAgcmVmWT0iMCIKICAgICAgIHJlZlg9IjAiCiAgICAgICBpZD0iVHJpYW5nbGVPdXRMIgogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiCiAgICAgICBpbmtzY2FwZTppc3N0b2NrPSJ0cnVlIj4KICAgICAgPHBhdGgKICAgICAgICAgaWQ9InBhdGg5NTkiCiAgICAgICAgIGQ9Ik0gNS43NywwIC0yLjg4LDUgViAtNSBaIgogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjAwMDAwMDAzcHQ7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgwLjgpIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPC9tYXJrZXI+CiAgPC9kZWZzPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSI3LjkxOTU5NTkiCiAgICAgaW5rc2NhcGU6Y3g9Ii0yNS4zMjk3NTkiCiAgICAgaW5rc2NhcGU6Y3k9IjEzLjkyMjkzNCIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTAxNyIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04IgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiCiAgICAgZml0LW1hcmdpbi10b3A9IjAiCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIgogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiCiAgICAgZml0LW1hcmdpbi1ib3R0b209IjAiIC8+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNyI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGUgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTI3NS42NDI0NywtMjgxLjI5NjQ5KSI+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6My43NTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6Ny40OTk5OTk4NywgNy40OTk5OTk4NztzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJtIDI3NS42NDI0NywyOTAuNTcxNzUgaCA1OS43ODA1IgogICAgICAgaWQ9InBhdGg0OTQ5IgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICA8cmVjdAogICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNzQ1MDk4MDQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjIuNzc1OTM3NTY7c3Ryb2tlLWxpbmVjYXA6c3F1YXJlO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6OC4zMjc4MTIzNSwgMi43NzU5Mzc0NTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7cGFpbnQtb3JkZXI6ZmlsbCBtYXJrZXJzIHN0cm9rZSIKICAgICAgIGlkPSJyZWN0NDk4MSIKICAgICAgIHdpZHRoPSIwLjk3NDE2OTU1IgogICAgICAgaGVpZ2h0PSIxNS44ODk3MDMiCiAgICAgICB4PSIzMzIuMzQyODMiCiAgICAgICB5PSIyODIuNjI2ODkiIC8+CiAgPC9nPgo8L3N2Zz4K\"","// extracted by mini-css-extract-plugin","// extracted by mini-css-extract-plugin","// extracted by mini-css-extract-plugin","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABKoAAAC8CAYAAABYIEaGAAAgAElEQVR4Xux9CZgdVZX/PfW6k3RDIIDSrBJiSNetbkLy6iWRRQluiLIICoq44IIwo7iD62jcdXTGdVz+7o64gQubOq5siiGvukOSrludRAwiS1DWQDrpfq/O//tlqplO59WtW/Xqve4kdb6vv4jvLuee2u49y+9HopDCAg0scO6555Y2bdpkM7MrhDiRmU9i5rcPDAz8qjBYYYHCAoUFCgsUFigsUFigsEB+FsC+a+3ata8goguFEIuFEDOFEJuEEFdu377903fccccj+c1WjFRYYOos0Nvbe5hlWZcLIU4XQhwhhNgmhKgy82eDILhu6jQrZt6TLLBw4cJ9RkdH30RE5wkhFkRr84UQ3+rv7//qlVdeWd+T1rsnroX2xEUVa0ptAVqyZMnR9Xp9EREtEkI8TQixTAix36SRvuZ53utTj150KCxQWKCwQGGBwgKFBQoLFBZoaIHe3t7ZlmVdJYR4boyJVGdn5/I1a9bcX5iwsMDubIG+vr5nhmH4EyHEnEbrIKIP+r6/YndeY6H71Fugv7//qfV6/RcTHFQ7KUVE1x588MHn3HDDDbWp17bQIM4ChaNqL7s3XNftZmZpWdYiZj5OCAHH1EIhxP4Gpth8xhlnHLZixYrQoG3RJIMF4P1n5hnd3d31lStXPpphiKJLYYHCAgYWwMGwVCrND8MQ0dxD4Jgnog4hBP5qRDQShiGivFuY+W/MvGn9+vX3CiGK95+BfYsmhQX2RAvMmzdv/87OzgMtyzpACHHgxDWGYYj/7wkhImRAjdbr9c2dnZ13+b7/WJxNpJQ/F0KclWCzq5VSL9wT7Vqsae+wQF9fnxOG4Z+FELM1K2YhxKlKqd/sHVYpVpm3BSLHvyeEOEY3NhG91/f9j+U9fzFefhYoHFX52XI6jUSLFy9+SqlUQppjrxACJXzj//tIIUQz1/3pnufdMp0WuzvpsmTJkkOYeSlKKpn5aCI6WggxVwiBDe4+DdayVQhxpxDi70IIRUR48a6sVqvDU7Fux3HgROsTQsxj5gOICIf2R4noYSHEI6Ojo/fcfvvtd0+FbsWchQWSLGDbNkqZX0lEpwghHCFEKanPpN9HhRBrhRC3WJZ1y+OPP/7bTZs24d4vpLBAYQFDC0gpj7Isa0m9Xj+KiI4koi5mnkNEtTAM/0lE/xRC/JOZNwshHiCiB/BvR0fHtrGxMateryOwNtOyrH0sy+oOw3Dzvvvue5fnefhe5iqO4yCodzoRAf7ghIQDtnZuIrpDCPFnZr6KiK73fR/vE9HX1/e8MAx/aaA4l0qlY9atW/cXg7ZFk8IC084CUspro3K/JN1+oZR6QVKj4vfCAo0sYNv2+5GZl2QdZr4/CIJDiwBkkqWm7vdmHBZTp3Uxs1i0aNGczs7OufV6/WjLsuYy81w4PeD8EEI8VQjR1SIzfcjzvA+0aOw9btjjjz++a2xs7DlhGJ5FRM8WQjwlp0Viw3sdEV1RrVZvy2nMhsO4rtsphDhXCHG+EOJZBvcWShMGhRADQohfeJ73RyEEImSFFBaYEgscc8wx8zo7O7/EzKfmrMA2IvopEX1jaGjo9zmPXQxXWGCPsQDKMGq12iVE9BIhBAJmuQsz325Z1sd83/9xs4Pbto091Vc1pXjNTrGRmS8KguAGKeV34EA3HPCVSqn/NmxbNCssMG0sMHfu3DldXV3/iLKWk/R6RCnVsDQwqWPxe2EBKSVwqKSJJcIwtIeHh6ck+G+i397epnBUTcM7oK+v78Curq7DwjA8XAhxKCKOKE1h5iOICI4OZOBM1Qv8es/zAH5YiMYCixcvfoZlWZcIIc6MyZTK036DRPTZo48++oo8gQFXrFhhXXvtta8RQgArAPdiVvmrEOKKer3+jdWrVwMYtpDCAm2zQF9fH8r7bo7K+1o5729qtdqbN2zYoFo5STF2YYHdyQLLly/vuP/++z/BzG8SQiDo0Q55g1LqS1knWrhw4RFjY2MIACHS3kqBo3s5AKQjbFCTud6mlPqMScOiTWGB6WQBZDQTUdVUJyKaOZ51aNqnaFdYQAhhSSm3GzpEBRE93ff9olJomt46haOqTRdm6dKlB9VqtYOFEE8SQjyZiOB4ejL+m4h6og0RNkVwCMxqk1ppp3mAmW8YGBh4cdqOe0N7ZB4x84VEhA15/xSs2Seiy6rVKsADm5JFixYdY1nWFUS0pKmBdu48SkRfq9Vq71u9enVRLpWjYYuh4i0gpcTzcFqbbLQdGSO+71/dpvn2qGn6+/t7xsbGllmWVYmCMygv3hGUYeatRITNJ8rAUAr9F8uy/rLffvutu/XWW0f2KEPsQYtxHOerzNxuEpYHe3p6erKC5Eopvy6EeG2bLsP1QoiDTB1VRHSJ7/vI9CqksEBbLBA5bufVarV/bNiwIciaIZ/SUTWmlALrZZGN35arvEdNkspRJYRwlVKoAClkGlqgcFSlvCjHHnvsAbNmzTqgVqsdWCqVDgB4JhEBUBP/HsDMB0b/AnMImw84o/AHgN7pLA8KIYAtBNDgvxMR/v4WhuHfLcu6u7Oz82/FYaDx5UPm0TXXXHN+VA+NssspFSL63sjIyJuHhoZwTVNLpVJ5ETN/Wwixb+rOZh3uJaJXVavVAijTzF5Fq4wWiEoNHsrYPWs3ALE/z/f932UdYG/qN3/+/CfPmDHjVXAMMLOdYe0AvAfuzx/CMPzx+vXrcZAqZBpYYP78+ft1dnYiKNH2vaZlWccMDQ1tzGIGKSX6tetbfpcQ4n+EEK8z0dWyrGcVZcYmliraNGsBYJIy8zeEEBdMeIaHmfmCIAiAl5pKIoBr4M/NMOjoK6WAh1pIYYHUFpBS3h4RhSX1Dbdv337gHXfcAeKLQqahBdq+eZhONnBd91BmPiNyLM0moh1/YRjuF7Hg7Y//jsAz8S/+/91RcFBDBHrcCbXDITXuhML/bgUI6e5oqLQ6VyqVxcyM6Gs5bd8Wt99kWdbZq1atWp1mHtd13yaE+BRSZ9P0y9C2zszvGBgYQMlDIYUFWmIBx3H6mHldSwbXD+r39PQclzWjYwr0bfuUOLQQ0UeI6GIAY+eowE1CiC8ppYBTVETjczRs2qGklMgSvydtvzzaA68zCIJMpeZSSpSrA2Kh5cLMq4QQbyEiYDkmyQNz5sw5sggaJpmp+D0PC0gpsT97c4Ox7g3DsHd4eHhL2nkcx7mCmV9m0O9TSqnLDdoVTQoL7GIBKSXuW5PzxY1KqeWFCaevBfZqR9WyZcuOqNVqiGbt7gIn1O1EdDczwwl1J7Kg4IgqnFCtubQASR8dHQWo/Nuncbbc40R0QbVaNSpDqlQqlzPzJ1tjsdhR3+V5XrvnbPMSi+mmygKgkp85c+aUlJkWuAfxV91xnNOYGeVLLQHVjma+zbKsNw4NDcERUMgUWcBxnFuY+cQ2T3+nUgrEMpkclY7jfAtl/G3S+SNKqX+zbftzEWxA7LT43ff9L7RJr2KavdgCCxYseFKpVMIZomEQgZlfHQQBMu9TSeS8xjtZh3u6mYgW+b5/n+ng/f39RwJexbKsg+v1+o5qACICBtyOsvCobHwLMz8UhuGDWZxsproU7abeAoBi2bp162+FEM/QaAOW2eXDw8MmQYKpX9ReqsFe7ajCNXddF9G+VgNmtvr2usXzvKe3epJi/P+1wNKlSxfU6/WfTBEOVdrLUMOGe2Bg4ApdR9d1Afz+5bSD59CeI2faD3IYqxiisMAuFpBS3piwWQmFECgX6xVClPIyIRG93Pd97XOX11y70zi2bb+eiAB0nZutNesfRUlVwZI2dXdIb28vmIn/IIQ4qk1aACfubN/3f5l1PsdxgCEK7KhmM6VRTgLM0biMwY1EtNj3/ceQxWzb9r8R0bsa4JQ+xswrgiD4z6zOt6y2KPrtnRawbfscIsI+N06QtfqGLNaJGDXxbTyhQf/V0bdzKGls13W7t27d+m4hxKszEP7UhBCoNnmQiO4B5Akz3xUF/O8qlUp/22+//dYX2YtJV2H6/u44zr5hGH6FiJDBN9nfgWt+cRAE103fFRSawQJ7vaOqXC5fTURgZtuthYieX61WM2/MduvFt1H5crl8NhEhipSmDBQfRESmAEb/GBEhqrMDMJ+IMA7A9PHXKhD9kJlfPDAw8LNGpnJd97lCCGzK0+CojQkhwIoEnAJgFgDg+B/4l4g6SqXSvsz8JGbuI6LjmPlZUTltIxUer9fri1evXr2hjZeymGovsYDjOIuYGZE1YAaOCzao12EjXq/Xf4/oqpQSUbVGG+fxPnBoXSOEOEVzLz8xAd7JzRyW98TLI6VEKccn2rz3gDP8BcW1mLo7KjowwEF5HL4PYRjie4FvBQJs+DYkCVg7AaoPQhpgfjYqTccz/SvLsj45NDQEfJKm5Nxzzy2tXbsWuh0L5mUigmMV3+5HiOgRZj5VCPFC3STjeFIR8+gJRLSQmY+NgqO3dHZ2rlizZs39E8eAkywifziKmZENsn5kZOQPmzZtmpLM0KaMWHTebS0gpfx3IcRlmgVcqZQ6r5kF2rZ9vBDieMuy9o9IMlb6vo99ZWImJKoaHn74YZR5g3ijVQI97sQzyMwBEeEPUAKDkXO5VfMW4+Zogd7e3l7Lsp5NRAeHYfgoEa0hohsLRskcjdzCofZ6R5Xruu8TQnw4RxsjVfWeca88PPVCiLvCMEQqKyIIEw9LOU4rBjzPwws78QWf56R701jlcvkDRIRyv6TnBg6ba4nod2EYDm3fvl2ZvBCBmRaGoWNZFpw7JzAzNvGH5WTjrcz8jIGBgZ0AMBcvXnyYZVnY1IONMlGICBuDr5RKpetXrlz5aGKHqAHScKMD/qVCiBc0sOHNnuedXNy/phYt2qWxALI6iGgcrPjGffbZ5w+e58HZ+oRIKd8rhPhIwrjH9vT0BPfeey+Y6U5l5ucSEd67k7ODHhkZGZlbHC7/z5q2bQMPEmXISe/PNJfWtO1flFLzTRsX7dpjgQULFhxeKpWQzZhE3IGsOIA6CziQgiDYb9u2bQd0dnZ21Wq1ekdHx8NpyoTyWJ2U8lohxOmasRCUOsjk25+HPnvKGLgngK9pWdZhYRgOW5b1k8Ip0P6rK6X8uRDiLM3MP1BKmWBNtUR5KSW+519ryeDJg45nYf8xDMPfdHR0/C4reVHyVEWLwgJ7twWmYsM4rSxeLpdPJaJfGSiFQ81946mhEx1RSBmt1+t/Hx0dvUe3KXFdFyndHzeYK1MTIjq3Wq1elalz0SnWAsuXL+/YsmXLVxLoqkMi+nm9Xv/c/Pnz/3jllVfW8zCp67qIviJqi8hVf5NjbhwbG1u0Zs2ax8fHcV0X9z4iwzoBi9k3mfmLnuetbVIHUS6XF6LMEM64SWOd53nelc2OX/QvLJDFAlJKlPkkMRm9USn1XxPH7+vrO7Ber+M78vyoVOiBMAw/MDw8jHInY8EB3Pf954RheDgRrfd9Hxle2BDv9iKlRNkX6J/BkJtGEHhBJgmyUrsMHBqxY9fr9SPWr18PDMdMAor20dHRpUQEJqqnRKUmCDyVIkIWlHkhAwbBKmSHonTlJqUUIvKFxFjAtu13E9HHEgy0Vil13HQJZOBZXbduHbLCkAkSJ9cppc7Y3S88mK7DMKShoSFkrLU0EGrb9suICM6H7gl2+0u9Xj+9YPNs751kgC33NaXU69ur1f/N5jjOF5j5jVM1/6R5cT78tRDiez09PVcVJCqNr0pvb++JRHQevpdCiJXd3d3/b3LAcJpcz5aogb0i0GPCMMQZCHsI7IuwhwALJqprsH8AizGybFEWjiDOLb7v+61+944vGCQ3HR0dp9br9X2IyFNKTQUZ0U723+sdVUuXLj2oXq//LSrNQs3qjhrlKCvqb8iIAij5GWecsXnFihVNHRqQ/t7V1XVHlLreigdhjed5i9p1Q7diAdNtzAg0Hc4/HELj5Cpmfv/AwIBqpf6LFy9GijSwpM4XQiBDKYt83vO8HSwulUrlxcysdQwR0a1hGF4yMDCwJstkcX1WrFhhXXfdde9gZjhux8s41nqeN20OI3mutxhrt7AASSmRAYvSmzhputyh0cBz586dM2vWrF8R0bIJv99ar9fPbca5Ml2s7jjOr6JSKROVUPrx/TAM/4Bsm4nBH2Rmbtu27RghhAMQVCEEypbx30nCHR0dB61duxaHbSOJnBHPFEKcHbEDH2HUcddGG5gZ2dTfycpCl3He3aLb/PnzZ3Z2dmIznJTx9hylFEp4p1z6+vqWhGGI+zRWmPnSIAi+OOXKGiqwcOHCfWq12guY+dnMDIcs4AiQaT0REuBBIYRPRCvDMLxhn332+Z+8DppSyqcJIVDi2QiCYEAptWRPcdwbXpIpbeY4jmJmW6PEZ5RSYImeEpFSohIGFTHTSojojjAM3xcEQYG7Gl0ZBPvvu+++L0YMvxOv103d3d3PzusdMq1uhEiZ3t7eSqlUehEzA2LIyajjZmb+ERF9RymFgF9LxLZtlLkjeWFiJc/3iOi1U5kZvNc7qlpytTWDuq77DiHEp1o1L7A4qtXqL1o1/t40LjbQc+bM+TkzPy9m3SjnfEO1WtUBTuZuskWLFs3t6Oh4NzO/JiWuFHSplUqlvnq9DvrtYSEEmJEaCcoW3nH66ad/rVkHrc4AlUrlTGb+YZQtIcIwfPbg4ODvcjdaMWBhAQMLSClxL75E03SzUgrkG7lmFkgpf4yqpgbz3qqU0uFmGaxqapv09fU9MwxDk2f6TiL6l7RYUpHT4KLIgd+whIyI/uD7PpxOiTJ//vz9ZsyY8XpmBlDw3MQO5g2QFXZFqVT68Lp16/5i3m3Pb+k4zgXM/L2ElV6vlNKV2rXNUFJKYPcAwydWLMs6ZmhoaGPblMo4UVRq904iAiB1Ugnm5FnuZeZvCSH+MwgCZJhlFiklnFQnxQ1Qq9WcDRs2tDQYmFn5PbCjlBKZoXBWxskOtsqpWnpfXx+CFYNRNspUqaGbF46FV07lAX+6GEVKibJtnFcayS5Z6tNF76x6IKD2+OOPIzv0TTkQckxWA5l7H1BK/Tmrfo36RQEjvF93ORMyM97vYLifEikcVW02O1gqhBDIqtJ9ADJrxcw3DgwMINJcSBMWcBxnRldXFxxQcRvj28bGxs6YDITaxJSpu6IskJm/QETAdkojPwCjERHFHQzWh2F49uDgINJNWy6VSuUsZoatUULz/6rV6sUtn7SYoLBAAwtIKf9FCAFGuljJ+8AkpURJLzIWG36Pmy1Zm+ILTbZtryQiZEPo5NaRkZHnN4PpNW/evP1nzpyJw/a/TsyyQml+qVQ6JclpEIFnvxaYlQBdbaHdkN6/oqen5z+LEpH/tTIi7ps3b0a5pM4xGIZhOH94eBhBlikVKSXIR2KzrJFV4fv+U6dUyeTJkUH6FiHEhzI4qCaP/k8iutz3fRDNpHbiRyxw2utKRM/2fd/E4Z288gYt+vv7j6zX64DnKBPRSBiGPwiC4OtZ1mOqgG3bbkQoAIgHZC/Nxh8RgQAH74mHiGhjGIbrLcuCI++2djk+pJTAIIU+cfIupdQnTdfaina2bZ9ORIDlOLwV4+cw5jeVUvimZBVyHAelYicREe6RBdE12Te6R7aCtRBlYhGp0c2HHHLIqun0XXEc5+XM/N8aA/xQKYUqkT1CpJTPJ6L/SMhGbHateMd+JQzDd4IIqNnB0N+27Ytw/ooZ606lVJ5Bu1QqF46qVObKp3GlUnkrPJT5jLbrKMx8/MDAQK7e1lbpOk3HpXK5/H0iemkj/Zj5l7Va7dyJWE9TuA5yXReH60+PZyUZ6IJ6ekT0G6V1I630VM/z/mkwTm5NXNdF5OFzqM2eN2/eYXlhfOWmYDHQXmGBKEqrpcWOsn6wOc5FpJQAcAeQe0MZGxs7eOPGjf/QTIbN7BJmPpmIwHAI7ANg58wES5kQAmnjgWVZK2u12u/Xr1/ftmdbSvkMIcSNCYYaHhsbW7px40ZjcoaE8ay+vr7nMvMrmPluZv5kUrZHdEj9vi6jI5eLvfMgN4CNNUm3Fsw7LYd0HOdSZv58gnIfVkq9fyoXEDnVcDjUHeK/pJRCRl5q6evre3G9Xn8fEcnIeX0jEb3F933teynNRFGZHwJWuWJoMfNVBxxwwCtvvfVWOFmMxQQYm5kXBkHQNEZmI6WklMcw8y2THdREdJnv+9hb5Sa2bR+E6ymEeEWEUZNmbLzPr8SB0vf9lWk6pm0rpRxNgJhoKhMGWDiWZX2cmc+F3Zn5fsuyvtnV1fX+NKVgCCrj2yeEAHYgyvbxNxHjbMfSiWgWMwPnEKWlKGkFNtA4PlBa85i2ZzgsgiBYb9oB7fr7+3vq9TrKKi/I4IQDI+kPcY+0skzMZD2ANOjq6sJZQ4dNiXK2C03Gy9jGijJgEQAHJhSIpa4Ow/Atee6FovsZ+KV4rtslG+r1+pl54Pc5jvN7ZgajdSPZqJTSQizgOSSiZzLz0/CujphtsQ/FMwBcZGTMgyH+5n322QfkWXCyGknhqDIyU76NItwjPLwoIWmF/MzzvHNaMfDeMGa5XP4IETU8OILJj5lPS/MhbYfNlixZ0heG4TVCiHlNzDe8bdu2E6aIvQTOQWR5nUZEp1Sr1RuaWEfRtbBAVgsgywBOIR07a64RQCklANwB5N5IHlFKzWn0QwTifikRIaUezikTQfnZ9cz8mSAIkhxIJuNp2ySk/KNvHayJvu+vbnqyjANEpYnA6ksL9J5xxp26/SUMw+dMhyyhPBbTzBjINt+6dSuA53UMtHf19/cfPZWBjAhL6VbdWsMwPGt4eBjf41QipUTZMbBtJu/NN3d0dMg0GGtxE8NJNTY2hvKRVpUU/5mInpOGqU9KiTU3DAyOr8PAYZ/K1hMbSynxLoRTfbI80NPTc0geGSpwcN5///2XMzOytnROTtN1XF+r1S5rRTlk5IzdiRV3slLMfGEQBN8xVXZSO3xnscdrZPO2Yl9F4NFwDB1BROMA1+P/4nAO50YzZ+WXKqV+ZGKnyOmGcko4qXZxtpmMMaENE9FPiehdSdnEKcc1bi6lRLZmUnnoG5RS2ix24wkbNLRt+z+IqBGW2i1KKTCrNy1wdAshrosy3poeL+UAcEye1cx+DvjZzIzgSxz28S+VUg0ziPv6+uYz82XMDMKvhnvVBuvZwswIDKKkMNGJ28zDl9KWRfOJFpiQQdIKw4TAR1i1ahVKDAtJYYFyuXwhEQFzoZEMj46OHp/HZjGFSsZNFy5cePCMGTNwCK0Yd/q/ho+XSqXybbfdlvjSyDC2URccvPfZZ58ndXd335HHxtBo0qJRYYFJFjAA/t6klIrDdktlT2AZbN26FVFyZD81kmoEIvzEb9Eh4q3RBjDzgYeZryGiS5RS96ZS2rBx5HjA2GCziZNvKKVAMz4lIqUEoypwyeLs3w69NqF82/d9kLrs1WLb9geIaIXOCJZlnTY0NGTC1NwSWxrouK2zs/NJGTKuEflH+VtDpzOeVd/3v9rkojAHHGgvaHKcpO4/UkppHU8TB5BSAkwfGTFxMqqUQjZMU4RGjQZPYnvNA2vMcZxDEEg0KIFOsuvk38EQ9o7ooJ+65DJusujgqi0psizr3KGhoUws49F792cx828FK1y7ShyTDI7EgkceeaQXTghmdmHvCQRASd2Bu3rS8PAwGHy14jjOU5j5WiEEslHyFODNvsn3/bhzTZ5zPTFW9P3/uxACDH9xEnZ2dh61Zs0atMtdIrZhlEU2ImhAll3Z933gnGWWvr6+48Iw/J9WwfkYKvZYGIbPM7nPYt6BILKIDb4g0zkIgh0kXOOCbLnu7u5PMjNKW0uGek5uNgb4mm3btr1306ZNeJc1lMJRldG6zXZbvnz5rC1btuABalVt9ac9zwPgZyGGFli8ePFxlmWhZHJWgy5bS6XS4ql05JgsA1TSM2bMAJaBbtO3y1CIOFSr1c+YzDHeBo6lWbNmYTP6nCiSgEg40sXhmccBFaxIK2fMmPH7tKUAafQo2hYWyNMCtm1/lIjeoxmTwzDcPw9sgGOOOUZ2dHTEYsER0fd930f6/w455phj5nV0dAB4HRvmpgXlFkKI85qJxsUp4TgOsOd+rlMyDMPjhoeHc2UUNTWKbdunEhGioA03sbrrH73fwBD5cNQO3wzgTgLHIQsjqwrDcFke95Tp+qdjOwB7l0olZFXFbnxRXhYEQSPigbYsSUqJDT029nHyC6VUakeQbdvHE9GfNON+VikFB3VmcRwHTLstI/OZpNg5Sqk4Z8QTTSN2zcdi9l3j7RJLT7IaxbbtdxPRxzT9T1ZK3ZR1/Ag7D9c1K+OXydRfVkq9MS9H3vz585/c2dmJb0OsNOMwtm0bTGJPfNcmT1IqleZPN8IJKSUqYOBISvPtBQEEymu1TkTYe8aMGX9m5mYqIpLuk39XSiGbLzeHpm7CBMyj8a6/VUrh/NASiTD4Ys81zPyyZtgZo0wqPNu6LOC4tf0T0ARCiAeANxbtQ54cVcXAKZ9WsBdZqpQC1mMqkVLC2QQ8voYymcE2ykIHxnEuVWHMfDsRnaWUwrd/FykcVakuZ76NXdcF6CtqWlshD86YMeOIwkFgZlpEkLq6ulCCA7DCRnKZ53m5YhWYaZa+1ZIlS44MwxBYU6YvzztHRkYWmEawkNGxZcsWHOQRWTLJ6NhRM8/MXx4cHLw9/YqKHoUF2mcBKeXZQoifJsx4fB6sK1LKZwshfqOZ69+UUsCwAtglMKgQwTZ9rk2NNkJEL0rLtpc0uIHDb0gpBSD5tktvb+/CCJxYl+01US9soH4UhuGvSqXSqriypojtp4IS5girIg0A6c+UUi9q10Gi7UY3nFBKCeehztEz2tHRcchUZDZH+EKbdY60rBh2juO8iZmB0xgnVyqlUF6RSSIctsCwpAjZNDcyM0C8H2BmvHMQVMWhUpchMVG3m5VSjUq7dvrYpbgAACAASURBVNK/t7f3aMuykrL/f6OUem6mhSd0sm37d8BWiWvGzKcGQYBSyUwipQTg+OWZOqfr9DWl1OvTdWncOnLKwBEfKwCB933/lizzSSnBOB2318aQTTkHs+ik6xMRnoBAwbTEHsN9s7u7+1ITLB4p5ZeFEJfkrffk8QDy7fs+9u0tFyklHDjHJ9xDL/d9/4pWKZPkEG0Gg27BggVPKpVKCFrMN9T/QezfwjC8tlarrdTgjqIsto+Zn0tELxdCLDYcH82GOjs7l6XN5rVt+/1E9MG4eSYSWTiOc0mEJZklIKdbyt8sy3pWozLVwlGV4g7IuynoIPfff394P4/Me2yMR0Svq1aroAUtJMEC5XL5u0QUB4I3MHv27GW7UzlauVw+h4jApGciAK/8sEnDpUuXHhSG4U+ZefIGFFTGVnSIxr+NBFGD79ZqtffdfvvtiCQUUlhg2lnAhIFKCPE6pVTT71bHcS5g5jj2TZQNnDc8PHyl4zjPisoCskTaTGz8OBGdlCdWlJQShztdtDQz4LTJguLaRKUcA4asPMCSfG9/f/9VaXGRokyRlwkhPiGEOMxEZ+CNtbtEw0SvdrYxdBTn8vylXZdt2+cjy1HTjzs7O5+SpZRFSvlFIUQsAHuzmWS2bX+FiJIYdbeD+ry7u/sLjQ7YwNARQrwwIgNKqgaoEdE+SQGwKLMxqZQzNyfM5GsnpcTeJZaFm4ie1gxwuZQSGbMAxm+HvFUp9dlmJ4oyG7XlWFnLpqLSdZT56LIml7ciyzeLXWzbPoGI4KQywt+JQOFf7/v+1abzSSlh66TnyXQ4bTsieq3v+9/MZbCYQaKSO5Qx63wMI5ZlVSzLunft2rXIBso908u27dsSym0vV0plyjCVUiKYiaBmksBB9cGurq6vmzgtG7yfEMyEjouSJsLvKKULggDkVMYipUTCDBJnGkpnZ+eR+KbZtv12Implwsb6jo6Op00OQhWOKuNL2ZqGlUrlYmbOjUFqkpaDnufFgfS2ZkG74ajlcvkMItIBnz7d87xMkaO05oiylVBWAC86opj4s5j5AVDQMvMfBgcHG6ZHTp7LdV2kKZ9uoMNCz/MS2XRc1wWDw+8nAD+D2QcR4M97nrcD5wYlrY8++uhy4GkIIc6KmfthInpZtVr9pYFuRZPCAu22AHBcwEC3j2bipstwMLZt228koi/EzROxsIwSEbKumgVXTbLjpjAMF+ZVfialBLtgLCh9k2C8SWuJ/V1KCcZdkxKqL82ZM+cdzWYlR1gOX2dmZEslyYOlUslZt24dsnb2Solw2+5KwPxoaclInOGllACPfqXmwgwqpTLtuZKi/8joS4P7NFHHqPwMGTK6d8hohHPyh6QbD+PNmjXrR8g20rWt1WpP3bBhgzZbyoTtkZnfEwTBx5P0Svs7nNYPP/wwGKliz0L1el02w6plgL81UW0QedxHRJ3MDMeFScb6xP5jYRhWmi2njvCStPvMMAzt4eFhZEalEsBT1Go1wEPEChE9w/d9QFhMqUgpEWhB+apuL/CEjkR0rWVZF6V9f0spgU9omrCAbwP+UG6OAMi+KY0EB9HCvADWkXAxY8YMycxHExGqOY4komVCiLRA5Y8IIe4ior+GYfhXy7JuZ+bblFJw9GbCppNSAnM3lq2Omd8eBAH2A6lESomkhu8adPp1qVR6Zdr7YfK4+CaOjIx8iJnfaQDsD1udmCbjX0qJ4Mv5cesZGRnp6u7uvpCZAXrfUr8RniHf98+cqEtLJzS4iHt9E0Sourq68LJPUyJgbDfLsk5ctWqVDvfAeKw9sWHkfAHtc8NoBlj+qtUqPNotlcWLFzuWZaGcDo4lOITiBFGHq8fGxi5es2aNFkOgUqksZmaUM+qe863z5s3bzyRboFwufyNiGINu+Hic6XkeMg4aSqVSeTEzI60XUdjJUgezied5SXTkLbV7MXhhgUYWkFJWE7Aocjko27b9NqTjxz7szGeCZjqi3E66WAChRXbAvcyM5ws03dj8psnC+opS6l+SJkr6HZvXzs7OWHDMqH8u5ZNJukz8fcGCBXapVIJTXotLlXUDq9GFbNv+LEBtDfT9nFIK9PV7rdi2/Ski0pWogC3yCN/3cb+3S+DAhrMnNvtGCPFhpdT7syhk2/bVRLTTBn3SOD9QSiFDL7UYHqyeKDM2mSACS0YmVOyBtFQqHZJ0SHMc59N43nRzNoslEzc2GKvCMEzCdDmsGcIJDevYuFrYS309DMOfT2b/hENwxowZzyciYLIB68gETw+He5RcZTrcQymTrOLxLAuTe2Vim6gEVUscwcwnBkEwpeeWCGMRbH0mRBvAZn2nUgqB29SZQVLKryFLW2PL1cz8DcuyrplMuhE5/hBsx34bzGwmwNa/U0plOddYvb29ZZwr4QyJAuogljGZM+2tMt7+YWb+GTJZlVK/S2Pf6H2tw1FKnYEYsaYCXxr7K518p7+//7UmZytTw0RYUrhXknw3NymlTjYd13GcqzSBtO3M/LwoWGry/oHDEd9JnE9RHnhEhGWVplTwlUqp/x7XP2mxpuss2jVhAdd18YLCzdcK+bbnea9uxcB7wpiu62prw1HiNjAw0LLIzoknnjh727ZtcNYgShtXMreLqYmoevTRRz8t6SXoui7A4RHdiJNNnuclMphFjjQw8+CdUUfU3wRYvlwuv5yInnjhTFIC9LlnV6tV4xTpPeGeK9Yw/S0gpcQ9C3yAOLlPKdU0kKQBkC8yFXXzINPyh2EY/mThwoU3TX4fzJ07d9bMmTOxib1Eh8MyYZFwABzn+z6c95ll4cKFR4yNjSErJlZaSTcfN2nChmxHNyL6hO/77868+PiOwJ5ARk5cifl4T2SqPrWZw3ELdG/rkH19fU4Yhtp7MGKyis1GzFth27ZdfHd141qWtXRoaGhVlrmTsJKEEN9TSiXdOw2nNsjWenxsbOywjRs3IpPUWKLMGzhaGmWcbFBK6XCIdszjOM4VcEQlTNoSp3Zvby9Kj7TXq7u7e58sJTvj64kY9LAPm0xwg7Kkj/m+j8z3RKdSb29vr2VZADw+KekCjZeMJ7WL+z0i7YgNQqJfR0fHgVlw4kyebWAbpckIybrOuH62beObCegMk8M1WFtf2kx5KIiJwjAE+dBTJ+l0MxF93Pd9OIQTHWC2bR9LRCjrS2T+hvMhCAKw1SUKAjyWZf0LsCzbVaIYo9RtzPxWUyemlBJYe7EZZ0T0Zt/3UwXLpZTvFULswA3VyC/6+/vPTDqfJRq+QYOk4OZ4lwjvCRUwieI4zjXMDEd4I6kJIR4SQgDovaEQ0R1ISrAs6ydDQ0O74BBH9zcytlDablIGfc+cOXPmj2ezF46qxEvY+gZI6xNCAOSyFYwPj3d0dBy2cuXKVBuQ1q966mdwXfdYIQSoSRtGA4jo1mq1ekKrNHVdFx8lOGlSMfSN68PM5wwMDGhZdSqVylsjPIm4ZQx7nmcnrdF13Q8JIf4tavcXz/NMAQRFpVL5LTM/K2aO+8bGxuanBf9L0rf4vbBAMxaQUr4P2RG6MQAwHAQBHEWZxXGc9zDzRzMMEBLRZ0ZHRz9keLiEkwQYBMAXaMRqOlGFpkCbMVAS5Tuc3UopZFomHtAy2KZhF9u2FxARvrO6fc+fenp6Tm4VHmFUaoRDq5aCHJgWvu+vyGvtu+M4UkqwQeIbHSe3KqVa9n2ePKmUcuI3cBedmPnvQRAAbDnxQNloQQZ4Kt9VSr0qy7WUUuK+79X0/blSygRvZZchpJQoo51cPlPD/iQIAjhhtGLgoEP/prKa4hSIsP9+q1FwLHpPJS1D+zucVUKIFcz8dGYesizrCt/3kR2SSiJ8J2T5nJPQca1S6ris96JJptnY2NisjRs3AtMslTiOs4yZ8Q6MlWYcvqmUadA4uidA6JD0nUTvm5n57Gb3ARgoyp77cFQ2Bxa072YBq49K8a5OKssVQvxJKYWsqFhB2fqsWbO+SERwMhgH0pu9Bgn94Th5zcSMm5j2yIBFW933/o1KKWNCMwT+urq6gCcWC2mAjPZ6vb5w/fr1gD5oiUgp8Q7QEmsw8zVBEMTBr+yklwGBSdw6kMX/0dHR0f8weRdE9kMFQSwe1oSJnsh2KxxVLbmN0g9aLpcvJKJvpe+Z3IOZLx4YGED5SCETLOC6LqIJsUwyRPSqarVqUoec2q6LFi2aWyqV8LGeWEZQBwYVEcEjjRTLOcApICLgVTV6MX7F8zxtmU6lUlnKzCs1Ct7teR5SM7VSLpeviqIpaPeY53lgyzLakFcqlSSa+jd4nofa50IKC0wLCziO83JmjssE3KEjNpS+7yMKmlky0sVvY+ZzgyDAZjqVREDViBTrvv21MAyPGh4e1rI+6Sbu6+t7XhiGOgy6fyilDk6lfJONDUqMkE1WyRNQvpHK0UENZS26jf+dSikErtrmyGvSvLl3N3AWZwYuz6KslBIlo7EslWBCCoLgzVnGRh8pJb77sQ5MZv5WEASvyTK+lPKxBJyd9ymlsjjMd6gjpURVAGAL4Hwejg7ZCAImigHYOJxFcBrk/iwYAPc/oJTKm2U10Sa6BlFZNRyAOqIKDJGZOS9y6uvwp2pKKZNso12WIqUEEc+NujUycyUIAsBWtFUi4HSQgCRiUqEUbXR09DUmB/S2LgKYBa7bvXXrVuBaah35OFvEfe96e3tnl0olZDAlBrLbvT4EuizLchtl74zrEjlFkJ2sk39VSqGqxkiSyG+iQV6llGrJuXFcyfnz5z+5s7MTwYcDNYrDSfcUk8zsFMDwT0yHwAwzPzsLTp2U8t+FEJclGB0ZuQiucOGoMro9W98oAtFGCnUs8FsTWtzmeZ6u/KuJoXfPruVy+VQi0jHNPDhjxowjmgXSbWSdZcuW7Ver1XBQmZhJdX0YhpcPDg7iHthFXNd9CijPozri5VFK8i2e52kBCwFuvmXLFmxS42rIx/BR9jwP/8bKZKceEZ1VrVZ3AaBHKePIyMiZAwMDT1DORjhsiC7EAYP+wfO8WHro3fMOK7TenS3gOA4i3zclrOFspdTPm1mnASX95OEB/PtCpZQuC0Crkm3bHyUi4OHFChG91/f9j2Vdm5TypUKIH8T1R6q47/uTyxyyTpfYL2LgQxllbPq6EKLpTLJERaIGUkrYBjbSXYNpAShsuqa820WlTtiMxwozXxoEAdjyWipSSuzLAMyrk8yOAQxqgIv3DaWUDsemoW5RFt/WBDteGAQBylLbLlJKlJXoGNXuUkohUy13McDu2qSUSoRGyF2xhAH7+/t76vU6HEmxeKZE9G3f9zPBfkRYfkqjxiNKKSMWvMlj2LZ9PBFp8ad0DpRW2TrKAkaWm8m6PqqUQoWBUbC2VTrrxo2Y93ANYzEqdc51x3GQAfiBqdDdcE4tZl/0zYezRvf9uDgIAuMkDikl9l1x1SGYZ71SCqVtuTvVJy9CSnm5EOKTuvWZljaa7EcmzQPA+2dNxtQzvG4iujZIFNHZEgyGpwRBcEPhqDK1bBvaJeD5NKuBEbNbs5PsLv0rlcqfmBmAk3ECJrvM0VGdHSqVyheZ+QkaamZ+78DAgPGhcPHixYdZlgVQ3pM8z0vEK3BdF+VJsZ53ZnYGBgZ0mxJEaAASOREIGBvfLyG9NAzD+0ql0oER4N4bhRA/9jxvJ5rtcrn8RyKKi+486nkeNgfT9qO/u9zXhZ75WMCE9Qjpy2micY00cxwnFesrEb3c9/0nnMBZVhsdXEEdHQsKzcyrgiBYmmV89JFSAnNPd/D1lVKZSp6z6BRFyv+YsKlrm2PIcRwQXQwkbKI/FgQB8DD2WrFtezUw0zQGyAoKnMqmBoeCzf39/Yc3g0kipbxVCAHG34YCUgXf9y9Opfj/YkA9hZmTmILPUUppYQTSzmvS3jDr4c8ROLjJkKnaOI7zamYGpk+crFNK6cpPU82XZ2MDrJpHuru7n5wUhIz5LvUxMzBJ4+RepRQY51KLCS5YGIbHNctcmEaxCDfrhoRABoZkZn5HFqa4NPrk1dbA2YTrCCKpXfbeWbJs8tLbZByU8fu+r8U7klKCVEaXuXyRUgq4b4kyf/78/To7OxFwj80kNHUMJU5m0CDSB2WIOmbQXyqlALCvFQM224n9t0XZbA2TKpLmGv89wlNDFnGsH2rckVo4qkyt2oZ28DLecccduHCt2MC3zPHSBtPkOoXruqcIIbQgc2EYnjA4OIiNY66yZMmSeWEYwik0zoS30fM8AI6mdtIgBdwk7dh1XRxKY1klAbRcrVa/qluo67rIyNPiCoz3J6JTqtUqPvpPiOu6iFpcpJljjud5YIsopLDAlFsgivgAf0PHZvORKKqaWV/bttOUfP9YKfWSzJNN6Ghw8AbRwWFZWdVs274oYiuMU3dQKVXOYy0mY0gpAX4a6/RpFl/IRIfJbZKcMM06C7PoNN36GADXAgvpkDwwYnRrT3IiCSGaZsuUUiKDU5chnWkOk2wwInqJ7/s/bvf1dxznEGZGpmOsANTa9/0Xt0I3g/dUy5xkza4H2LaPP/7434lIV0KdKcsvOkQCIy5OMmea9fb2LrQsaxfA5YkTEVF/s4Qepvbt7+9/ar1ex7OX5HhDlgwwjYxLxUx1aFW7iKEOJfyA6mgocdlrUkrgzgF/Lm/5FGABSqXSw9G5Z996vX6oZVko8wIIPN6BupK2cX0S9xBSSjAPx7I2gsXc930jyJ2+vr4Xh2F4pcYYwA09POueKYuRHcf5FjNfqOkLDKkDfN8HK2WsSCmTzmcT+74lYrfMovJOfaSUCI68UHNv7si8LxxVTZs63wHK5fLZRPTTfEfdMdo/wNaQJbrSAl2mdEjXdVGDrqvvv8vzvKOyOI+SFlapVD7DzBOpx9d6nqcF1k0aM+l313UBpB/rdUcJZLVaPc1gHGDivCChHdazC4in67ofF0K8S9MXkb+WgQ8mra34vbDAZAvYtr054RCQqRRn4jy2bZ8TsQslXYAtzHx0XgfyCOPgPl20EWXGQRBk+hbZtv1GItIxsrX1ACilBCYKsFHi5GtKqdcnXYQ8f7dt+wNEpANM305E+yVtMvPUabqNZYCVgxSHlpat9fb2IoMZkWvdfvm5SilgwmQWA1DxLymldspUNpksKhPDs66T3A4fJjqNtzG8vl8IgmBiNneaKbRtpZTA+NThY/5WKZWEBZWbPmkHklJ+Vgihy/xHiRqIQVJJX1/fcWEYrtZ02qiUygRTcswxx8iOjg5tNkatVnM2bNigzfJPtaCYxlJKMOqiDDE2kBt1BX7hRaZOjTx0y2sM27a/SUS6EtB3KqWAGbSTRKWDwLeNzbyOOjzEzIOWZQ0ysyuEADRJrFiW1Tc0NKS7/pbjOCcwMwDcARjeECOOmRMzjpOw+dJ8OwyetapSakle181knN7e3jMty9KyppuU0dq2/SkieofBnLcppZD1mzqxotHYtm2fTkRJhBuHFY4qgyvT5iZULpdXElHuNzwzAzso6aZo83LbO12lUulnZoCixgoRfbZarbYikoASOuAKTKRsfnzGjBlPbgUWFhYYgbYjo2qiYGOGD9d47XpYKpXm33bbbZPb7dRpyZIli8IwxIdrPBtssg1Dy7JOXbVq1S74OeVy+T1gh4gxem327NldrWLaau8dVsy2p1ggCTxZCGGUVq2zhwHr1I7uzJz7Yc2AZexTSingIKQW27bfTkRgGIyTG5VS2g1t6kk1r3QpJaK3uqjyJb7va7NKc9Rnx1AmOGgmm8y89Zpu4yWBjIM5VykVG5Vtdj0RW6aOGeqBnp6eQ5r9fkkptQG0rO8AYEQyM7DtQNASJ/+tlEK5blvFpAwMAS6llBaLJavSjuNcivISTf/MbIhZdUrTz7Ztl4iqmj6/UUrFEgbF9UsqTTYpu4ob28Q5GYahnQWkOY3tUAL/0EMP3Whw1kK532uCIPh2mvGnS9ve3t5TLMvSVZD8VCn1okb6wsldq9UuIaJFzHwoESHL/G4iQlnoEDOvVko9UVYspcT5EqQKcbIlwjYzwnCK3l0oXUPWEILp42ePm4no+b7vA383VqLvvg7H7RW+73/P5FolBbuY+atBEFxiMlZebcAUOXPmTEC7xGb+m2SNSSmBtwZW2yQ5Xyn1w6RGpr9HGX/QPzbrTQhxduGoMrVoG9tVKpXnMDM2LXnLlZ7naSkt855wuo3XAGtpFxXDMDx5cHAwCUg59dJinEZgD0ssvUs9WdTBdd0PCiHeP6H/2kceeWTJnDlzPs/MEzMIvut5XiL1daVSeS0zI010ct03POyXe57X8HDqui50gC6NpOVZZVntV/Tbey1gkOGATRoYOTOL4UEtZGYZBEESmHMqPaSU2JhggxIn1yuldJvO2I62bb+biHS4e79WSp2aSuGMjaPSjo267nkwOKZVL9qkIds1FkNjqkqy0q6lle2llJ8QQrxTM8dId3f3kzzP0wKGZ9VRSoky9pM1/b+ulNKVtRtNbdv2L4noeZrGn1FKvc1osEmNDJzuD8+ZM+ewVgXM4nTu6+t7ZhiGALCOFSIyPkymtY2UEgFJlDjFSW7l1ml1M20vpUS2XFzWy4MRa2GqDAgDB9iQUiqWAVOnu8n7uFarPXXDhg13mNogQzuSUv5ICHFuUl8iepPv+7rs4KQhpvT3CMYAgZp9YxT5m1IKFSRNi5RygxBivmagm5RSundpbFdgMs2YMeOUer3+6KGHHnqzSWBASqnF5xVCGDtepJSAJplWwS4Yy3EcpWNmJKJP+L7/bt3FNST1ubu7u/vovKuykgI0IPYpHFVNP5qtGcB13T8kpVBmmHkbaoFXr16Nl9ZeJ4igjI6O3i2EOECz+C1CiIPyfhgxnwYb61HLsk5etWqVLtU69fUql8uItgFAeNxb/SAzLxsYGNi4dOnSo+v1OhiVxiMUOAw/Z2BgQIvdBSXK5TLSNXEIBcgoWDVuwX9Xq9XY0gfXdRG1vDRmEZ/0PE9XFph67UWHwgLNWiCJCYWZ7w+CICktXquGSXS5VVhFBtTsYLABbkRqSQJxBQlDEARnpR44Qwcp5bOFELqyrNqcOXP2a/chHUuRUuIwpmMVe5tS6jMZlr3HdLFt+2Qi2gnzsMHiXqCU+kXei+7v7z+yXq9v0jkTLct61tDQUOJ3M0k3KaW2tN6k1CVuDiklskGSAlENS4CS9G7mdyklMuG0IO552beRnlJKUKTvUvY03paIvu/7/gXNrLHVfZOyWDo7O49cs2YNSleNxXGcpcyM7PmGwsy3B0GwyHjACQ17e3uPtixL64QKw/Dw4eFhYCu1RJIwCydM+j6lVFwlQEt0a8WgSdlAIyMjB2zatKmpc2FEjKBjGEdmeFuzjqSU9+sA8onohb7va0vncD1s2z6IiLTQJFMR7Ir2ED8RQpyjuW++p5R6he6+sm37VWAJTbj3PqeUmghbk8utKqXE+xfv4YYCvQpHVS6mzn+QJUuWnBCGoZalKOOsF3meZ8RykHH8adutXC5fQETaNE8coAYGBlpygCqXy+cREaI4jQTe+nd4nveNPOp/K5XKmcwM1q1xql2ACj7f8zw4QHdIg2yruzs6Op62cuVKo02N67rdnueNmOhbqVR+y8yNqEgBhivhPJu2N06h2F5pASkl3pOv1Sy+ppSKZYAxMZohfsxnlVK5lyIbAOZuU0rFUlvr1uc4zseZWed8vlIp1ZbsXgPA+twiyibXfGIbKSUOg7Hsisz86SAIYjdxaefbHdsDNHrr1q3A2Iwt4chaFpdkjyRHhhDiHqXUkXnQkdu2fTURnanR6f1KqQ8n6dzod9u2X0REVyX0xR7hFKWUEWlKFj0m9zFgB8XhdmEQBFq4hqy6GGR+fkcppQMrzjr1E/1wf2/bts2p1WpHEdEhRIQ9G85mj1mWtZmZNx588MHr4jJIkrDumHl5EATA6DMWKSVwaHRkQp5SCsDXqcWEhbKjo+PAtWvXPpR6cIMOJvdcNEzm0ncDNVI1QQkcSLaY+ShmPhgA2dEAwK5ERt2GY4891o9jHbVt+z+ISJeN6SqltCy0SQob7CfwLL+9nYyJUkoQNRwSpzuYyoMg+J+ktRlgtgnLsg4aGhp6MGmsvH+3bfsrRBTLBsvMvw+CoNHZ6wlVDIKWIgzD84aHh3Vg8pmWlkRoQUR/KBxVmUzbnk6u65qAV6dShplvHBgYaBc2SCrdWt3YdV08ZFr2GCK6tFqtfrEVuriui4hmktcaDhs4q64/44wzhlasWGFUyw19Fy1aNMeyrOcS0RsnsQeNEtHZ1Wp1p4gzWAP3339/OEMBgDguQ5ZlPXvVqlVJ4KvGJooy2ZCC2+jQ+2XP8/7VeLCiYWGBNlnAcZwvMDOepVjp7u6e0Uz2ZXQIB+5D7LfYsqxzh4aGkg6Zqa2C5/Lhhx8Gdk3s3GNjY/tv3LgR5WmpxIAxKDHKl2pCTWPHcd7DzLqo+FqlVEsJLeLUcxznV8wcWwLZ7gh0XjbPexzHca4CuL9m3MzZfzpdpZQ4vOnKe3NzIifRwRPRZb7v63DfYpcSlZni0KajMkf/e5n5hCAIkEXWckk6pEAB4GeuW7fuL61QxgCbpWnCjEZ6L1y48OBarfZSMF4xM5xCSQEBvKeRVfijsbGxH09ke3Yc5yxm/nmcfYjotb7vfzON/WzbPiHKxo/rBlBlMEGnlgULFhxeKpW0wdA5c+Z0tyLDNcIFRHatDhMHDpUrgiBAFkqqksnUxtB0AIkDEZ1PRAicI5ih1VkIgWoQZHb+oLu7+6cT9yVSSqzlu3HT5eGEcBznPGaOC8SPT326Uur6PO2U8P7GfXa4po0RK6bjOKcxszZjt6enp9OkHDHvtScFBU0y8k3wMuv1+hHr169HRVKuYoChtq5wVOVq8nwHi8CrPV3aeYYZOQzDowcHB58AwMswxm7XJXLKICqbtFGTnuehJC53Wbx48XGWZaUpE2Y9EgAAIABJREFU70OWFSKJuFZ44SLChAykLUSEj1Y3Mx9IRGAsQV04DluTAVMfI6Jz4sryFi9efJRlWasmpcf+FZHdarUKwMSmxXVdlPw1AiwdHhkZqSQBIjatQDFAYYEMFjBhQgnDcL/h4WFsEDOLlBIp5QdpNpEtA5ZNwnDIihUipYSzX8dQlguuj4nRHcf5GDPrMBr+pJQ60WSsvNsklZcKIaYE5DrvdTY7npQSmY3aTPCs92qcbgsWLLBLpZKWeSzPcg/btq8kothAGjNfGgRB5iCaQVbFuCng0MKBsqkMC5NrbsC6h0h+y8rAHMf5IDNPxPCcrHaubKCRkwZMny8XQswysVGDNvcBauHggw/+Mg7GfX19S8IwvE0zVupMPMdxTmLmmzVjZn5nOo5zCDPjHosTVkoBHDpXJ1GEjYVswYYscuPKIINDCPG8qWJbtW17LhEBP/IlGuIi7a3DzDgvfCgIAgS9QwPSlrcqpcAgmVkMCFTwLB83PDy8JvMkKTtKKXF2ekpcN9P3d29v77mWZf1YM/2IUqo7pXq5NJdSAr8ROI5xkogn19vb22tZlu7cC6y72D1qMwsxmPu+wlHVjIXb0LdSqfyQmfHCylPe7Xme7sbOc65pMVa5XD6ViH6VoMwDnuc9Oe8P5MQ5K5XKL5Fu2iaj3BOG4VmDg4M6VhgROUQRiZmI3YUygHd5ngcHU+YNw+LFi0HtjQ3vZCyfzUKIEz3Pa0mktE32LabZgy1gADYuxsbGDt64cSMc4JlFSgmqZhk3QB5zxI0tpfybEAKlS3FyrFJK67AG80wYhts3bdqEd8YOkVJ+TQjxOs24/6WU0marZTbopI5J2V3M/KsgCMAo1HaRUoKYQgfE/SOlFDIv9mqJDvh36bL/4BhVSoHRNhcxcGJsVEodk8tk//vMIBtBVw77OqUUDp6ZZOHChUeMjY2BkCEpewfjA2vmpa3OfjBg3RN54OfEGcy27Y8S0XvifmfmbwVB8JpMBt+5E8C7kTkO9sJ9chgPQwyGYXj+zJkzHx8bG8OzESepsWUMHFWZM6qQTTY2Nob9X5xkLjmPG3Du3Llzurq6/qT7zkZ9h0ZGRk5qFq8p4/XFPfKOiH0tqxNz8tS3hmF4QUdHR1cYhkMavT6ilNIRqyQuyeB9iezIQ9atW6e79onzpGkgpQSTOQL5DcXUcWZQLrpZKRVbYphG57RtDZz9G5RSE5nmd5ni2GOPPaBWq+nKFhPHSKv3ePvou6R7fz1aOKqyWrdN/ZYuXbqgXq/jBaOjFk6rzaDneeW0nXbn9iZsf0KI6zzPO6OV64wymBCp0h0Om1aBiG4CY5RpCV+lUlnMzCg1PWzS5L9BbXuW7KolS5YcEobhL1GVOGnMO+r1+vNWr14NhpBCCgtMSwsYlIyBsfMo3/fh7MksCaxi3N3dPbOZ8kKdYkmMMcxcCYIAWb07iZQS3w+wZaFseCKbEJjXUMqI6GJsqQJwE6IS57vDMNxMRHc3m5kWt04pJZwX/xL3OxH9xPd9bUl45oub0NFxnG8xsw4Dp+UYOa1aW97jSilvj7KGGw5NRNf6vq/DeEqlkgGD1YeVUrpsnLTz/RRU3Jr79OW+71+RatBJjU3eaRO61Jn5fUEQwLmSOVil09eAdQ/BgFkTS92aWX+D91gSo2TTGY3I5u/s7ETZVSsw+R6DI8KyLJT+NTzPRWVsyOAyFtu2jyciOHbiJDPjrUHp38NKKR3hkfE6ooZWBDj//ISO9xDR8c1+z9Mqh/ZRae4PkcmYpX9CH1RiICMV75c4+bJSqikIDiklMrLerJkDmJ7YExjDmTRrCyllUunfAqVU4jkkqUSZiO7wff+pzeqbpb+UEjbXZcOZQBvASYpA4zi51mRVMjumk9Zk4CTbXjiqkqw4DX53XTcJ1De1lkRkV6vV4dQdd9MOlUplFQ5dOvWZ+b0DAwM6SvVcVl8ul+cTEerkYz39TUw0JoT4yOzZsz+Wtl562bJlR9RqNeB4ATNhooAR8MelUumTJsyEy5cvn/XYY4+9jJmxwd0pzRqHiZGRkQunAnSwCZsWXfdCC5gcopi5NwgCZClkFiklUsrjaLIfV0rF0UpnnnO8o5QSTqjYoAURPc33/Z3Yn6KNBbD0DmxagZ0HgJMLTE/AxwNWDspD7gSYcEdHx0b8m6Ucw7btzwN7UKPrL5RSL8h5LUbDGWTRNH2AMFJkN2gkpUxyKqDM/aAs98jk5ff29p5oWdYtGrPAcdNrcsgxNa0B69+LgiDQHTYTpwIoc8TmloaxDSWJr2lFib6U8vIoyyhO97pSKs8g7U7zSCmxR4EOcfJDpdT5iYaNaRAxoV0rhADzaKsEzMtWHERIFgeu4zjLmFkHqp9YThS3WAPWv3uVUpMDppltJ6V8L/bECQOMgHl7aGgIMBhtFcdx9mVmAHqf0MKJETzSBY6AyZXKmTlZV9u2v0lEr9as4RGl1Di5UwuX+n9DJ7H+mTJiOo7zambW4bzles+mMY5t2+8ioo9r+vxZKXV80pgJTr3fKKWemzRGlt+jbxLuz9hvQOGoymLZNvdxXRc1tjgMJYHppdHs/Z7nZWKQSTPJdGgbgXkD7ymJoeuZE1nxWqk7gM87Ojq+wcw6WtFUKjDznyzLemO1Wh1M1XFC4+XLl3c8+uij7yUiMHY1Sj9Gqd7VzDxYKpWQrgl8ne4wDBEBA5U9nIGICk0+xG4C48fAwEBTG+2s62pHP0RO99tvv3mlUunwer0+m4i6mHmHk4GIcIjaHobh/R0dHZthu1aAhbZjnXvLHAYp1blgLiTgOTXNLKi7Xklg0Y1S45PAe1t4f8AJv4aIUM7wkyAIbjKJzhpgjd2slHpGC/WOHVpKCTwUHbnJJ5VSOvbEqVB7Sua0bftkIgKgdKxYlvWsoaEhZOs1JQaHrluUUk9vapJJnaWUvxZCPEcz5guUUlpAXxN9IqweHMjTZK2ssyzr7KGhoVzZeQ0yvB5TSiXhiposu2GbJEdVk9mW5DjOlQkkAJl1T9Hx10qpWMKGRuMY4F5lLgWybXsBEemC5H9VSs1Lsb7Ypn19fc8MwxDPFTCv4oSZ+eVBEHw/jznTjHHuueeW1q5dex0RtQsOpKF6zHxVEARxwTKjJUkpfyKE0J1n2l4eJ6V8WMcWW6/Xn7x+/XqcYbRi2/bLiEiXzdrS95ROOSnlZ4QQb9G0MXIyJQQtW7ZHipz5YI+Pk8cKR1XSHTpNfjcsXUuj7ZDnef1pOuyubcvl8tNRCpegP3d0dMxZuXJlaoarZuziui4+Doj2aGuIE+YYIqKPVKtVYFzkkqK/dOnSo8Mw/FCEj5bk4NOph7KoL8+YMeNze5JjBg69LVu2oOwJh0wccoExBIeybkM00U64TmBWAj6RF4bhTfV6/c9r1qwBu08h08ACtm1fSETf0qliCsaZsNEANgTAUxtKZ2fnvq26L5JK/xoxbpngyrTp8m0Kw/DNw8PD1yTYF7bV4W9kLmNpdp1SSgSgYnGOmgXQbla/6dQ/YsgEHtz+Gr2appTv7e2dbVkWsvlisYSyMKkl2TKhBBhO8WcODw/Dsdm0SCnhEEOmT5rg50OWZb1saGgoCevTWD+DbJd/KKUONh4wZcMk/Los2UjjKkgpcXjEITKN4NAMAGiUa2EvAGcign52E/AfNyilTkmjhG3bLhHpsE3vVEplqgiQUuLcAZKgOFFKKSeNvo3agjUvBh91p+ZE9Anf93VkG82qEtvfgHWyUV9gPCFIDCcM7hHcHwC6RqDYdP+507jMfE0QBGAXzCxSSrD56corM98zWZWSUiJLOxaTj4hmm2SKSilRkq0LsoMAAJmfbStrnPCe0WXko9k3lVIo/dSKbdu/jHOYMvPtQRCkycJNmu6J3w1K/zYXjipjc05tw2XLlvXUajVks+QFxIgsj2OzYA9NrSXSz14uly8jon9P6PlXz/NyieKk1TByelxARBczc2KKZjT+dmBK4SDteR6irLk4qCbrHmXzvVIIAQwXsAqavDNwmLhRCPHtefPm/erKK6+sp7XJdGy/YsUK69prrz1ZCPGqCEtkv5z1HGXm3wkhfrZ9+/afFOWROVs35XAGUTS8Q5/u+76uRChxVsdx8Nx/RdPwMKWUjiUpcY64BlJKOEuPSjO3AQNOZn2ydCSi9/q+H1uybeBYyy2Cn0Z/ZPo+/PDDCIzEljYx85lBEMChUIgQwnGcqxIyVEzwOJI27BcREUDu4+TxMAwPzRtTTUoJTKDY738eTvGJC+rt7T3TsqyrDDLNJ3YDbtW/BkGgs4/xvWpQXt3SkhopZRKsRmonDxYvpcQ7FYyRJsD1aAc2R2Q+NMTLAYbR6OjoSUQErD3gsJnsw8avQ+rsP8dxgFmqY328Ryl1uPGFntAwwjfcBfdwQpOqUmpJlrHH+2BPvXnzZmRWJmU9XqeUgoOm7Q6GiFUUDHiJgWA4CoQQ/8XMvx0eHgZA+C4CBzsRYX/6hgwZWk2XvxuUsbf0WW5kEyklsrDjvq+hUgq2T7z2BuQCLSV90D0LUkqQ3fTFtWHmFUEQfDDpeZJSfkcIgbNeI9mklDo6aYwsv0cO5bs1ff+a5mWXRYeiT44WqFQqH2XmWIaSDFN9xPO8ppgeMszZ9i6u6yax6UCnqz3Pe2HblZs0oeu6iJwh2nlShGEFtjw4erYIIfCBCojo5q1bt95kEgnIcz2u6wJvahkRIfsL2UMo+esgIrBF/JOZ77Ysa9Wehn3mui6AoS8RQrwp4VCfp7m3MTOwQf7L87ydMILynKQYK94CBkwv6Hy8UkqH5ZFo4qRoXb1el+vXr9dRByfOEddASokIfizt8NjY2P4bN27cKcs0wtTAgWpKWG4arKXW2dl5+Jo1a+5vtE4Dx1p9zpw5s9ud8WmAAyNaee0z3zRT2FFKCSZJMErGCdfr9SPXr1+v2/hqV2Db9p/hFNI0agnAvZQSGSzI0m0oeeDhTR7YcZzTmBn7ozTldSiVuiwIgv9o9lYwcNLnDay9k8oJ+IBoO6iUSk08JKUEePorEuyzlYje6Pv+t9MEGm3bPoGI4GA81ND+v1NKpcLI6uvrOy4Mw9Wa8f+plAJDdmqRUgID9VZNR6NSJd3EBuXeCDIFo6OjyyZ/31IvKGMHKeXPhBBJZw58ey9WSgFo3Vgcx3lW9FzHftsnDfYzpVRTMCQGTt9HlVK6bFjj9Rk2BIi+Lkhu/G7p6+ubH4ahFnQ970CCyRpxNtm6dStgbXTBrgtMyloTnpmHlFJ5Y5LuWKJBKfC6wlFlcjdMkzbANSqVSnekxBbQab/B87xmSs6miWX0ariuizTjpDLHD3uelxuDz25hmEJJrQXwEWBmRKdAGdyy8oOky4AoGhF90PO8pjJ3kuYpft/ZAlJKpEsj4q4TVymlizwnmjUJuJmZTwiCQLexT5yjUYOIjQrYAHH7gFp/f/+sRhmRUfnGf0UR6ynfR4RheNLw8PAfG63T4GAk4tgNMxnWsJMBCCo29ij9SYz4Gk652zeLGMNQ9qK7516nlPpGlsUalCXhXjklCAItVlbGubWshmNjYwdv3LgR2cq5iuM4i8IwvJaIjkgzsGmkXjem4zgvZ+b/1rTZrpRqhJWZRtXYto7j/IqZY/GbsrB5SSnhQEL5ni5T5lHLsp4xNDSEa55a+vv7j6zX68AZQyBTK1nKF23bPpaIkO0TJ1uVUpmqO6SUgEpAxn2cXKmUysyQGGEowgmke0c8ZlnWsqGhIUAvtF0ixwdwugCCHycPhGF44vDwcCbSKyklSsoR5EzEosvCDDlZaQPWv5YSI0zWxwD7yDiTOsp+fizhel2klEraL+Z6r9m2fSoRJZViGzEbSikvE0LEVR7V+/v7Z7aiOiYJe5KI/jjlG8xcr9peMJjruu8TQuQJgr7Q8zxdvfhubdWorA513HG0mzvWR0TnVqtVRKkKKSwglixZ8uwwDL8qhDAtB0XpJSKQtxKRCsPw7lKphCw4ZEVgoz2HiHqJyGFmbNR2YkM0MTkz/6RUKr111apVOKgV0mILOI5zCTN/WTcNMy8MgqCp92e0odQxB56fNqJqYhrbtucSUcMygqh/Yrq3bdsHERHSzg9j5v2IaH8iAoEADqCmz46Juto2RHRUHK34vHnz9p85cyYwX2L3O8z86iAIkNnQNpFSAjcxtjSFmX8fBMGz2qbQbjKRlFLr0BFCZD7oGgDTblRKIbiXe6m9lBJByNjyiu7u7hme56GUJXdxHOcQMPsalErtNDcRvcT3ffTLJLZtnwPAcl3n/v7+jlYckDBnUhabEOJBpZRpVsqOZSQc+Ha0CcPwrCRsvSSDGh5SMcyPlVIvSRpv4u+O4/QxM0qKYqWnp6czLbN0ZB8wrF4XNzDKbn3fvziNvuNtI6IAZCYmscu9VCmFTMIpESklznA4y8VJaFnWc5olhjDIJh6f/+tKqYuaMYbBmoRlWQe1C9Ji/vz5T+7s7GyYZR2tM1W2pJQSRBJP1djoc0opHah5M+Zt2Ne27c8RESo94gSZUHh/JX6vDCoI5iql4IDPVWzbPp+IdEQGPygcVbmavPWDLVu2bL9arYYNTaqPp0azD3ieFwvk2/oVtXaGqJQOGABaCcOwb3BwcEqiK0m6Fb+3zwKu6yI1+bMRDpXJ+3GYiL46Ojp6RVzp0WTtgXV1zTXXLCYi1IOjPCAx4jVhDDhd3+N53hdMPj7ts9yeN5MBthEOHHbWiOe4xSJHCoBRGwrKvYMg0NEPZzJ+UiYXot5KKR0jXey8juP8HpknmjW9vVQqfZuZDw3DEFgnh0YZHcB2gSMAf0alLYi4+b6PUulYkVKC1OHIuAbNHI6yGD+KqMM5qXOeteS6Z9F3OvVJYmoDEHVPT8/BaQ/RURkFggC6EofLlVKfaoU9pJQo4YjDPWw5q1QEVg/w7zekWN8jzLwoCAJg3aUWE2fLyMjIAZs2bYp9P6aeNOoAxrV169YhmKTDkQLrKgDnjbMapZTI7DxBo9dvlVI6dkfjJSUB8EcDpS5VNQieiI6OjgPXrl2LAEAqMTgQZ2I6jTJogPO2OEGhtjsUJusjpUyq8vipUupFqQwb0ziJ2RfdmPkLQRDoHB6JqkgpLxdCfDKhYdNQCYmKRA0iDLDYs1/aQJBt21cTEfDh4uQ2pZSuZNxUdaN2UUb83xOC3sZBm76+vueFYfjLuMnzJPOYOIdt228nok/HzUtEHzc5iBkZrWjUPguUy+X3ENFHc5px0PO81DX4Oc3d8mHK5XJixA6bkNmzZ+9zww03bGu5QsUE09YCS5Ys6QvDECnjsSxcE5T/GxH92+mnn/69FStWGG9iJy8+wr/CBgFpt2lqwH9jWdYrV61add+0Nehurpht228jIi0OSxiG8+LATdMsX0qJEry4Epemo52NdDE4MHxXKQXigNSShPNDRJf4vo+MxViJwGFBZX4M8HmQkRgxG8GJhawtyJ21Wu20DRs2aIMRBlg0/+jp6TksrXMjtWGiDgZlEog+901VaUrWdbWjn23bzyWi/9HNpSsFjetngH+1LcK/SqQzT2uHyEm0XeO4vEspBVzIlkvEdopMUtOSu+8ppZLwmBrqbeAsx3OwKGuJnM5YfX19ThiGQ0kGLZVKh6xbtw5Ma4kSlQjB4Rhb9kdEz/d9P/ZAmDjJhAZSSmRKJeEXfVkp9a9pxnUc5ynMnJQ9kSnDwoAN8V1KqSSHxy7LMciGROXEH7u6uk5pVWaiiY37+voODMMQ75DY83eW91fc3LZtJ5FDoGsm5+DEOU3IZ5j5wiAIANrdcomw3BrCAWByZHL6vg+SKCNxHOc9zKw7d3OtVpu/YcMGJJK0XGzbfhURabPAiegVvu9/z0SZJJKDVjDdQi8p5ZeEECCJaCjYKxaOKpMrOM3anHjiibO3bduGhyF1+VCjpdTr9aNXr16dKSI2zUyzizqGpZKbPM9rCaPBdLdPod//WqBcLp9HRMA1GT8A60zz3Y6OjktXrly5E8h0M7ZcunTpQWEYgtUlTYr+ncx82sDAQGLGYDO67a19bdt+NxHFsslFdsmFkU9KiUNB3EE0NRiuyTWTUgKPAA7SuA3Ch3zf/4DJWJPbSCmBb3Kspu8rlVI6bBrttAsXLjwCmD1EtM73/dEkHaWUOKgBUytWmPl5QRBoHSBJ85j8HuEsoYxA5wjwlVKxTD4m8+ypbcCANjY2BgKP2HJ+Zv5AEASpMsWllINCCB0Fd2aHTNK1iErvdMyea5RSxyWNk9fvfX19S8IwRElebBbihLkAWCzjGOt0OhmUH+NA+ULf96/Oa23j4xiUnOxoSkRl3/dxbySKAUHC6Jw5c+bkRdywcOHCg8fGxpKcaKmdEP39/T31el0bBMta9p5UIsbMF6dllYzAw3+TkKF6fxiG5WaIFhJvAIMGUkpk0/1a0/TR/v7+A/Mqd43KIfG9iZUk5lyDZYGRdRkza4llmPnzQRC82WS8ZtvYtn0GEV2jGSdVANC27eOJCBl7uj1EW7Kgo8AG9v26UsSRjo6Ow02zHqM9lQ5W5CNKqdzJ16SUN0fkYQ3talnWaYWjqtmnYYr655lVxcxvHRgYQLnTHieu635LCHFhwsJ+43nec/e4xRcLMrKA67qXCiE+Z0D5jA35mzzPQwSgJVKpVF7BzKD+No1mP2RZ1jNXrVqlY+hpia57+qC2bX+UiLQsq52dnfuuWbMG5ZhNiZQSwLiVmEGMQT/TKCGl/IUQ4rS4PmmicZPHSMJzYOYXBUHw0zT6NtPWpJQFmQlKqfObmcekrwnbEzNfGgQBKOsLaWCBvPG9TOjH88xymLwkg+yezGW4WW+gyAnyczCbGoyR6RATHbiQya4DlX6LUgrf51xFSgnHtUmm0elKqetNJjdwft2qlNKVBZpMs1MbKSVwBudq3uNv8n0fUAHGklSOjoGY+cQgCLQH90YTJmVQhGF43vDw8JWmyh577LEHjI2NrUkgAwDm0wuGhoaSgKdNp83czoDp8tdKqViA/wwTk5QSJAyxcDF5ZDrNnTt3TldXFwIIOr8CMP5MKhYyLHPnLlFmKM5/cfIppRTKFY0kelfBKRwL1QEmSd/3EWDKXGVhooxt2+8HwVJC228qpUAIZCSO48xgZmT1NhTgSPm+f4HRYCkaSSlRPhyLKVer1Z5aOKpSGHQ6NY0YAIG7kYZWOO4GvKlarZ48ndaXly6u6/5eCBGLlRLN8yXP89LgMuSlXjHOFFugXC5fRkRxTBcTtasx83kDAwMoDWypuK6LOndEkBMZfSJF7gnD8ITBwcGkVP2W6r2nDW4AVAn8Eh2zk7FJpJTI5Ilzltd6enq68i5Lk1IC3wD4UA2lXq/L9evXB8aLmNBQSnmPDmOqXdlLE3WXUnpIntSsp05Ex/m+n1gOlMUm6GNYhvFIGIZHDg8P7yBjKGRXCziO80Fm1rH0joyNjR2wcePG2I33pHsD5VO6bNaWZjQ5jvN0Zga4fpz8XCl1drvvhejwCbbZpOy+/8/el4DJUVVt31M9M8wkGQiyBAExxCRTt2cSMn1rEmMAI7gAGhQ0ioob4oLbh4r7FpfPBfcdN1SUDxUVBBE3PoMSYzJ9e8gk07cmhAAiq4CEJZNMd9f5n8NX4Z8MXVW3qqt7umfueR4eeJh7zz33reruqnPPed/E/CwR1aRU0fSjYrH4upT3TtL19Pwc+P23bz1EfKPrut/TWT+bzV6AiIEcZoj4S9d11+r40h0TVZGQ5FBAQzGNWjJPTZL44ZxHfdaeo5T6s+7+s9nspYj4iojxFyql3qfrs57jOOdU6RlWmRIrwaATq4YARSzMg9bknNPzArXoB1q5XM5Gterr7ClqTBT3URLuT845qfqFJn8Q8ZWu64aRg0eFHvp3v6XxLxECYehXgsY6wOacU5dIUE4h9SS7RosxiVkcahJVNd0yUztZCEEEZO9OIYqK53lPHhoaSl36OIXYanIhhLhZQ7nt3VLKL9W0kJnccggIIT7AGItq7aJ9eYj4mkKhoNXrnQYQPl8WJVkP1/EHAPk5c+asTDuZobP2dB1j2/bFABD2gkSKKnF4xQKh4pxfxhg7K2hAJpNZuG3bNvouS8U450RaHtbu/ZBSik4OE50Mcs6J/JiECaoaAJxQLBbpBbhhpsM5xhi7QSlFhzaJ9h22md7e3pN8stIoBdoPFYtFne+lJyzHOScC+rcg4nP8CoMSItIp8IZKpfL9RrwgNOKCRklaUwwAcGKxWKS2glDr6ek50rIs+iyE8QqdVywWL4rylfTvnPMXMcbCDkG+qZR6Wxz/RBa+devWp1QqFeumm26i/SW6p33uks2MsUzI+pVSqTRbNzE40Q/nnKqVTgvxHak+GgcXGqtD4r7PJwBot0Bns9l11HYaEs/3lFJvjBtv2HjO+dWMsReEjElCYE1VOFRBHviOmFTxkXNOSahANdM43Hyc82czxqjlL8z+MWvWrBOnkpdq0v1O7xrvDAqYeDGLxeIFKd8j1zPGSG26qsXBPOJeJM6kKF7Li5RSgZxEae07m81+GhHpGb+qJaki83/Dr4uI8c6xsbHeeghALFq0aEFbWxvxbh0RFkPShHjYoQEi3uu6ru7hudZl1ODYe6y60CSqtOBszkErVqw4ulwu08tL6IOvTvQAcG4+nyeOnmljpK529dVXU1l5VNXDS6WU2qXG0wagGbyRXC73WgC4WKPdj1D6qJSS5IQbakII4vihU/YoqeV9cX1ESvmphgY5jRfTIOBO7QUqqg0l7QqkbDZ7NiIGckQBwF+KxeJJSS8v55x4o8K+d4VSqpDUf5J5fnWIThXyJ5VSYdU6sZfnnNOLOP3GzIqYfPvcuXN7knDYZLPZV/ptw0FrlImTTCnV8m3+vuIRtQyEKbZ9RCkV+X2oUZ31QHt7+zFptPgGXfsogml64XJd97O6N55fTfD+CTwUBVZYAAAgAElEQVSmt1uW9dqkcvcaileUGHxqsVikz1cs01BxJH+JiLtD8A5te540T7slWKNd/FtKqVSr97PZ7C+paipor5lM5pht27aFcc9Unco5p2dnUjwMsjcopajCJJZxzm9ijC0MmuR53oE61aR+qxJVjPCQAB5ExP6kqpSxNqY5OJvNfh0RA5POAPDZYrEYmGDRXGa/YZxz4sQKVJrcu3fv3J07d5IIQE2m0fpK/sdJICXJd0Wc4DjnVNUU2MpvWdbJCb4PKYFL99zSsFgQ8SrXdakCNtHhQDXffns4XceoKtDxTCaTTXKwGcXTWCqVDtqxY0dq3LxRz72Msf9WSn3YJKri3PlNOFaTg0kn8t9KKdfoDGyVMX4iL/IHGhFXFgqFUBLAVtlzK8YphCCFmVMA4BTG2CVSSuLFqJvlcrnnAQCdQkYlMOnh+9f5fJ6UQbBuAYU4zuVyJwEAKQTpJKOJPPHYTZs2RZGrTsVWWm7NKA4nxlhq7UBRBLOMsbcppULJwOMAnM1mv0MtLSFzErdK+FwOoQTnnufZo6Ojo3FiTmNsNpv9AiJGVSHTZ/2dafDirF69uu2ee+6hlw6qsgirSKHt0brEh0Mv0bEsm82+FBGppSbqmQ79pGcYmW+stadqMOecKimooiLIIkUIfJU2apk+LMgJyWMXi8VQrrpaMbBt+2sAQFyJVS1OOwnnnMiKqyUjqZW0RykVRtpedX3btt8IAKEqnYjouK5L7bWxzLbtSGVmRLzAdd1QBVbdRTnnVFlCFSa6NqSU0lLG5pwT502gYl09eF6y2ez/ImIQvUVl3rx5nUkqrTnnlLg4MOSefLfrurE6Efzvw90hz14P+pW8kdeGc05CIKG0DZZlrR0ZGfllpLMGDuCcU/L8QyFLpl5xxDnPM8ZEwJqPKKVqppAh376iIZHwRz1b/7mvr++UtAjjq+0rSnmYMbY4iQCEfyCk011xcV9f3xvT2KOfAKTvX53r9GGlVJg6YeCtZ9v2dQAQdkCZ6gFjlOjOPiGNqIeaBn58zVJJEPCrLkhhqVbb09nZefiGDRumDS+G4zirEDGyvaRcLh+9ZcuWO2oF0MzXQ4BOw7u7u4+3LIsSU0Tm/Dj/BSKeXSgULtXzFH+U4zg9iEjE1Tpf+HdmMpmlmzdvvj/+SunNEEJEKpbtWw0APp/P57UJItOLcvp5iuL+8NvETkhj5xptaV9RSgW2C8SNIYpLAhFPd12Xkrmxza9comqXQGtvb3/K8PAwcWQ11PwH6e1hxLITPkvfbWtre1fSShrbtp9Ln8eo09cJACSqtiAy4XK5TKpOWm2oiPi/rusGtt409ILUsJiGXPhuADg4TBVSQw2yRKrI9VYKi2p/021jJFJyzjk9ywS1hmhVmU2+LD09PadblhWqvAcAfUn43RYuXHhYe3s7Ha6EtZntLBaLRMJcU4WCX4lHlZzZGLfeo/6LfORhFef8XMZYGJ9V2kTZJO++LYRDLHHVbxSHIZE5F4vFdTFwZH7rUlgL+1alVGi1Cq3nK39S9V7Ydx5VhBHp9LeLxeIjceKs59io3/qkbVthMft8bEEKnqkduFEMnHNSCz1TA8MvK6Xo0Cjyc6Xh6wlDfAL5QwPm4tjY2Kxbb72V7pG4Rt+xm0LEbyb6+7Pnea8ZHR0lzs7Y1tPTsxQAPucf4uvM/1tfX9+zkibHoqozk7b7Vgvctu1DAODeECENr1QqHbFjx45/m0SVzqVv8jFCCGoPqvmFCRFfVigUftHk29UOz3GcsxCRuF/CrLRmzZrOdevW1fQApB3UDBxIDxUdHR0DiHi8ryBEHDCzq0FRz0QVnZ6Pj49T5VzkgxDFhohnNoI8XeeWEEKQQpoOme593d3dT05ygqoTx0wawznfyhjrC9lzagTHGgo1v1VKpVLxqiFDvLe9vf2QpAma3t7ehZ7nUXtHoFmWdcjIyAgpBDXcdKpDJgRF1ScXWpZ1iU68PvcX8Q2R0uyyGJu7YWxs7DlJHpyz2eybEfHbMdbaO2vWrO5m4WyJEfd+QznnT2eMbQybH8aFRhxO27Zto6q+MInvnyqlXpU0Rt15GonjY3XalxYvXmxnMhmSLQ+ya5RSYXxGVedpfD+xUql0OL1U6O554jjbtm8kIYOI74yaq2M0KkmrhqCbWNeoDrtPKUW8k6m8nC9cuPDA9vZ2+h4NqtZM/LuRzWYVItoh1yT24QnnnNrPwqo5te5P27bfBgC6SoZ0T36tvb39u8PDw/RiPKWm8VlKnFystjGftzAsUXKZUiqKjF4bM/+AhsRhdOzKtra2c7Zu3Vr1YIsq8P79738/2/M8am2l5/YHAeAaX8Uy8DMUpVpZK9+S/9tDRRBRVdKEwaOI+FUA+K5SKlLwiBI4VFkNAKSwRxXDunma2z3Pe3rSpBgFyjknxfE3BF04AEjMnznZZ29v70s8zwuj3HlcoEMXAJ0bzoyZIgQ0EzI60V0mpUztC0tnwXqOyeVy5wPAlyPWuE1KGSjtW8/4pqNv+mHZvXv3gnK5vAwAngEAVNVGL2xtOvutZ6LKcZyodqeJIf6vlLJpqg76+/sPsyyLXqoCpXH3Be953rOHhoaiCB91LseMHhOlXEcn52kR40ZVLPiyx2FcHNrXinP+asbYj0Mm1HTqb9v2SgAIlS0vlUqdSYiXtTcZPhBs274SAE6P4a8MAJsQkfgp/omID1qWBYhI/HFEMErk9AOMsaBT67ClRn2p90SVm9ls9odEDBtjL9TS/ORisUgtGi1rfhsRYRbYnsQYC2yD6OnpWWtZVujBXNJ2tjig+u2HxPsR9BvpzZo1q1MnsWjb9mrilwtZX6tiZfL8qBcYxlhFKUXt6YkO/DTl1u8plUpLkibDNIjOA2HTVbjT+e5LWnlWLTjbtumFNrDytRa+I79qZHkQKIj4Q9d1z4lzr0dxsTHGtNreOOf0LLQ4ztqMMVIAvdyyrB9ms9nrk1adxFzzCcN1iPyT8ooF3CMvp5bToLjTTD7sW4NzTgcIdJCgY48yxi6zLOsPiEhVckQbsBgRn8cYo9/oJ1RFAcB/FYvFrwU57+npWWVZVlg3jVRKOTrBBY1J8H1CiTU6/CRhilsB4D7P80id7yAAeBIi0nsoJespORw3N0Ntuscrpai6MrFxzokHMVAdM8lnPigY27YvAoA3hdyXj1dsxgUjMQBmYv0QIFLBrq4uytSGKgFoRLBrbGzs8LBSeQ0fTTNECPEZxhgRigYaIv69UCisapqgUw6kv7//xLa2to5yuUxfiKTENdFKmUxmv5Joz/PGxsfH9yuHPeSQQx6mCh2/IolezA7yX9BI1etIAKAHBpKkpRdpOp2O6k8Pux51af1zHOc0RCR1IV07QUoZ2TYa5Wz16tWdjz766BLP8+YDwIGe5+1BxLsB4LZCoUDtOtrmOM7bEFHnFPEzUsq6cqpoB93CA6PIZBHx067rhnFNaO9eQ56e2k/maDsMGcg5pyQVJauCjPiZEhNu27a9BgCuCvFfVkol/o5IAwO/BZCqK6mdaCpt2PO8U2s8BdVttXh8n5VK5bDt27ffN5UbT2NtzvlvGWPPD/H1J6XUc6v93bbtzQBAycUgW6+UCuL+SSP8x3z09vYOeJ5HLy9VDRH/5bquVgI0m82uQMQwvs1H2tvbnxanssT/rNBvVdghyYhSKqz6NBQvvxKsqPGCdq3PWxLKgTdxsfnz53d2dnZ+JeylSONivl8pFcg9tW++35JGL41hlRZfVUqdr7Fm5JAoHkUAeFWxWNTh03nCWhoccL9WSgWSuFcLPuq3R0c0QEOxNhI3xthd1GLHGLtmz5491yepZNVZpNqYpUuXHl4qlaJ4RFMT9IiiMPA874Wjo6Nhv9ext+rzwK3X+DzH9k0TAIBagQMrYTnnJFjwjRDnse/dyb6oIndkZOQaP6GWaB9pTKLqMFJNTcIPOHn9KI49UtgM+j2Nu5coUQUAWFEsFh/7XTSJqrjoNul4IQSpkn241vAQ8dRCofD7Wv00w3zHcS5GxDB5+X1k2bF+bJthb7oxCCHoSyyQKFbXT6PG1aOiSghBKlh00nCs5j7+IaVcqTm26rBcLicAgE4mXhhChH4zEfXqqm0SSTVjjFqqqHoj0BDx2kKhECb3XcvWZsTcbDY7BxGj+PrOT4NwmwDNZrO9iBh6GpZWFVIU90itROfZbPYcRAxTkH1IKUVJ7ik127bpBPNvAHD0VARCXFF79ux5ca0y1gnamSjpSVVIiapfpgKroDWj+F6o7WLWrFkHT65G0qg8otbv57muW3fSeY1W1GuVUlrf5319fU+pVCpRyntbK5XKSZqJSlK5Is7IQPUs/9p8UykVqGSmc89wzv/MGNOpYqZq4VdpkMJT7KcBAAkohLWwUZUDPSOEtYBqt0dFVSIxxuhwkIicY5PaT8TRr94iqfowbq/+YrFIVaCxTYNrKFKsYPKinPMtEdQLJCYReqDY29t7nOd5ifYUAAKRu1MF8D8QkZLXxNlEn6HY7ZnUctbe3r6IDm8ty6LflwcAYPvkCi6Ntsr7LctarNNuHnZhNVotWblcftpNN920M/YNEjFBQ9GtliU9AOgKKqrgnJMa5euDFkjCr1bNl5+Ypu8t3eqxWvZcbe52y7KePzIyEuvQO+T39A3UohgSZM2VaORbI9n8b6UUFd489oxiElVp3zZT5G9gYOApnufRl41Wi1XIB/i7+Xw+sBxviraXaFkhBP3gRT3gfUtKmapccKJg6zSpRRJV/wKA9Z7n/RURrxwaGkrEcxEEoU5l3cS5APDmfD4fqnAUdrlyudxbAYAqUqI+iw9mMpnc5s2bb9G9/JpVVTullGEP3brLzdhxGj+k9CL7Std1A0vq44CnwSNB7o6s9eUmisMGEbe4rhuHW+kJ2+ScU4KWSsiD7C6l1JFx8KnX2J6enmMty6LfiVTaKjXjLDPGPtHX1/fpNNpPstns6xDxYs21aZgWD0wMf1M2NJvN9iMikWMHmt9WuV8ralQlCgluuK4b2PaU5oY558Qv9uaQZzJtuXrNdkhaagcivsZ13cAWXSIe7+jo+FqEOuhjYXued9Lo6GhYy2EkZJxzqoyjCjkde4TuecuyrkLEHfPmzXtMDOfOO++c19bWZiPiasbYWr/SO8zfA5lMZnmlUiGhirDnQKWU0iJg55zTgTEdHAcaAFCC6aSk3Qt+lRvd92GHVuVSqTQnaYt1VEtx3M8IVbZ1dXVRi2tgNa0OFxgdPO7evZsOkSydGyXhmDH/UJAEP/6NiPRM+jAAUPvgYwYAcxGxExGPBgBKStG1CDoU3tbe3n7qPgERzjmpFZJqYZj9sa+v77SkvxHZbPYIRByK6LQhxT86tIidlIvC1b/e/+vz0kYNj/v3SqlUmh10b3POSX00TKnzTKXUFXEXrTaeeOI6Ojp+MQWVVZcAwFvTFAqwbfvFABCmknmLUmpBrbhpHGZ+WylFIlL/91mrdUEzv3kQiEG4HBb03WvWrDlqOpCLCyGivqwIh49KKUMfKprnCsePpEkTVZRQpaTU9ZlM5q+Dg4Opn+bsQ+q44447qq2tjU4bOjXR8zKZzOFJlf78FkN62I76bvUQ8UWFQiGWstqqVau69+zZQ2XjXSH7+Y+UUksBTBOTGTdM5wWYMfZcpdSf0gDHf6ijh+NAS4PbRKMk/q1KqW/VsqdsNksVDKTmE2Q7lFJT3XL3eGy+SiFVgOkoFdUCDb3cbKhUKuePjo6SXHgq5hMq36rDX0cLWpZ18sjICL1ATAcjBSaqGiYC2qqGiB90XZdoAB6zqFY7f9gZSqkrGwEQ55wSDv0ha52llPq5biyc8x8xxl6jMb4CAOT34q6uro1SSqosYYsXLz7KsiyqRLpAkweI2v6WpPGyyzmndiESW2mEUfvg85VSf+ackwBC2ItrZe7cud0bN24M/Y6moLPZ7DGISM80UUTLfyyVSmfH5dyiQxRE/E0U+TxjrCY1N9u2iQD6HSEXYrtSiigftMy2beIspQRdkBHRvFb1f4g6GVVg1DOBpbXXaoMQ8SrXdanCntQPeVtb24jGc+JvxsbGXhu36ta27cV++33U9blBKVWzEFcQKL6iJ1Wl1nT4VcX/40Tbk//mJzKJ5iQwIep53oLR0VHtA+Koi04HBHffffdnAIAS3lGf+yh3UX/f4Xneu9Nu16RFe3p6nmVZVtizQSrV8Nls9lJEDOTDBoD9KkGjXqaiADN/byIEHMd5DiLWXKoOAMfn8/mwH5Qm2nVwKEIIOg05KixYOi0sFAphcsItsdegIJskUeUCwF+pYqq9vf36TZs2NUyWXgjxVcZY2MPWZOhulFKGvTSE3g9CiCiluH3zPyKl/FSSm8txnJ+RQmfI3IqUMqqaK8nSM2YO55zUVkKTUJZlLRsZGaFWhlSMc06kotSCUtUAIFcsFumENLFFyA8/XCqVjt6xYwedeie2KB4SxtiQUirstDPx2rVM5JzTZ4p4aEJba5OsQdUHmUzmwpGREeKTSv30mnNOynSXRMVGHHeu68b5PoxyOeV/12hR2k8cgHNOhwNhynepJV6iwPFbR+ilKvD72rKsRXFaO3TaGgPiIuWtA8K+g6rNQ8QXu65LqrQ1m23bSwBg0I+jZn8hDkoAsLZYLP6GxvgqYcTZFnYdlo+MjFBskcY5pwTgSyMHMkZqbJ/3PO8Ho6Ojoa3m9AL+6KOPngcAHwhLzE5Ys6Z2TM458S+GPaPc47fnaGyTMdu2301tmEGDAeAPxWLxFB1nixcvPjSTydB36YkTxn/S87xLKVkAAMTBGHaYp7NM2mPG582bN3ufInNUVeeExakN8XOzZs360b5kclBgPT093ZlM5u2I+F7iko3aAFFPFIvFuvKZ+p8t4kmLrTYaED8Jm5xSLBarCgb5/FjXh+z9fj8hmvrvsJ+MJZJ3EYV93L8TLxdjjDo1vpO0EjNqTY222jGlVOAzapT/fX+PECraqJR6xkRfJlGli2xrjAMhhKt5Cha2oy9IKaPKUpsdEcKCynRDSXsR8fS4VS3NvvGJ8QkhqFf7EEScAwD7HkLpi4b+m8iZCR/6QavLKRQAvD2fz4eRGtYNTiHEkxljN8d5YKH+7KStr47j9CAiff6i7EopJVVvJPqhzOVyZwPAT0IWGZNS1vxjErWJ6fx327ZDlXJo75lM5oht27ZFkaJqw2Tb9u1hfEk6bRFRi9m2fTEABPH2vUspFaWSGrUE8Q/8jjF2atBA4mZyXVeHiyZyrbQHkDCJ53mv9YmXa02m3U2VD5Zl/bRYLNYszBC1V5/riK5ftc/+uK8A9vHpwE01EQuNKsFHZs2a9STiqbJtm7gDKdkQxutzdrFYJF6mupuGOtU2v1opViyc88sYY2fFmpRgMCnOFYvFOOqZkatoKMNF+ogYMEZcmJOTa5xzOpzd7wVpoh+iBCgWi1qUAJxzqhilQyt6ztIxkrDfRDxJjLHbMpnMA4hI/48Uz6iF63gAoEqzyOTDvsWoYsF1XboPEhnn/FxStg2Z/LDfNqbln3NObfKBXGcAcF6xWLxIyxljzG9zXYOI1L69oVgsEn6PmZ/IIgoT2kOzqHpje3t79/DwMB1IUfXKUsuyqOtD91CREpmkpkfqs7f7/FdU4XcoIpKo0fF+NWIc0ZVITjDd6xExjvjiSCGSulfouTyp7ULE17uuS0nKqsY5p6qmL4UscLFSKpC/KmlgE+ZBNps9HRGJs++kGt+t6JrT89TP+vr6rk7aBqq7J78alITZguyfSqmaD/JCONqo0+R413XpPn/cTKJK9wq2yLhcLnc+ANT6slGUUva2yJarhrlixYoDy+Uyqa+EmmVZywcHB7VOyaJ8tfjfYcmSJXM7OjoylmUdWKlUqHT42hT29FIp5eUp+IntwnGcDyFi3KqlC6SUX4y9GB2hCEGlrFEvOLssy7IHBwcTS8P7fHRhhLl3SylreRhIsv1pNUfjZamklKJ20tQIqaOIZtMgU+/p6XF82ebJL1Cb582bt2rfaW8tF5NzTt+ngdLPAPCrYrH4klrWaMTc3t7erOd5pBhHL4ikaEYPaEEHHw/4ktOUqN4EABtHRkboJSS1+0Nnzz09PfTC8mpSzKGDCACgB/tBRPy567rUHjjtzL9O1EYTZiuVUv/gnFM732PtNwE22tfX11vvF4J9a/vk5/RiUPVZHBE/5rruJ+JeNF9ZjFoKQyvK4/qdNP5mRFzhuu79Nfp5wvQ6EjHf4Xnei6q13tq2/TYACFPV/YlSKkwtdb99RFUQpY3ZZH+ZTOaYbdu2UUIjkWmot9JvYIeu82w2+xlEDFLhLre3tx8VR41Sc13Ltu1nAwAlrNbEoIDQdB9r2Fal1NKJM7LZ7Dr6jMfykt5gr62t7dCtW7dSJWVDzG/Le63fmhyHA/AhRPxRW1vbF6Luadu2z6RnjKANIeIpruv+oREbXrp06dGlUomqBOkZgjo1iDs2iIaERBbot2A7kfpT0nrPnj3/aKQipYaIUCpk6rZtVyVtB4BvFIvFt0++NiZR1Yi7tYFrLFu2bG4mkyFiyZoqKjKZzII4JM8N3KLWUkKIY/wPfeh4y7KOGRwcTPxjrhVMCw7y76Oaf8AA4Ln5fD4VHp+YMFJF3XbG2MI482pRHRRCUEsNtRqG2flSyqgxkSELISjRNS9g4CYp5VSpkETG3goDOOdEBk6k4EGWysnSROecc2rbfk7AgqkRkPs8BHTiSLwRiIjUCnVOWi+cnHP6/QkjS/++UuoNrXAfTIyRTvDvvffeQ0ul0qz29vYDS6XSQ5Zl7TnggAN27Tslb7U9TZN46bSe7rnA5DzJ3luW9QdEpORh2HPvy5VSP2skLiFcQPeUSqUlcTmM9sXe29u70PM84ht5Str7QcR/tbW1rd62bRtVLNfDKMHweQB4V1rOEfGXbW1tbwuqgrVt+xAAoAOgoGfnnyul4lSp6SomprXFiX5uU0rVVEmUzWaX+1VegfH19fW16SZ1fb6i4Wrk3oj4Ndd1/6seQOzz6XP5UZKaWjLpd1a32i2NsB72PO/U0dHR/ShV1q5dmxkZGbkCESmJ1mh7QuKskQH09fXNQ8QTELEPEYmgm3gG9yU+KWlDBPY3eZ6XnzNnzg2TlVuDYvUxvZ5ENCaPIY60YrFI7aINPUCaEAcsXLjwUADotixrTltb225EHB8fH3+wVsqFtK4d55ywnx3g79dKqRensZZfsUkV3vSsuBcRv7lkyZL3Vvs+MYmqNBBvMh9CCCrXpROEWuytUsqaSHVrWbzWuf39/cdZlhUlYYtjY2Od9er3rXUPUz1fCBH2haUVnud5A0NDQ6kRB2stSkcX/f0nWpYV1qce5OoMKWUiEl0hBCk3kYJTkN3R3d09P42qFSHE3xhjVOpdzS6RUuqQ6erCOePGaRASP6GPvlaQIk5XL1FKpXpNic8CADrSSlDR/ukhcdu2bdRyHUYoeqFSKiwJWCuUZv4MQyCqrQgRfw8A1CZzRgg09OJGyduGvsT46nof8wUI9r2oERfdq5VS22q5lLZtzwcAav9K7eCCKvQ8zztj+/btjynt1dM452chIpF6H17DOlRt92EdcvwwAnHiM3VdNxafKV3btra2nwJAQytIEfFS13XPrgEzHQl51t7ePidOkp5zTpWphOG++5FeUL8ze/ZsqmQv1RJvnLnEDTc+Pn4SAFCLOvFR1kvcwwOAayqVyntGR0dHq8XoVxlR10GUQnmcLeqM3U9ZTWdCq4zxK0qJK4qSkpTnQAD4bblcPmf79u3ERWcsAAHOOVWbUSX5EyxO+7MuwJTAnjVr1u6w7xGTqNJFs4XG9ff3r7QsK1B2WHMr10gp0yK/01wyvWEDAwPP9DyPFGTC7H4pJXEAGKuCgBCCflgX1wIOIi4qFAqkutdQE0IQaWeY8lhQPIkTVblc7gwACCOV/YyUMhXiSiEEtRhWVc1AxDcVCoXvNhTwabaYbdvXEmFn0Lbq0b7mKw1Wq/ioeJ739DSV4up1uaj1zLKs0BdYRLzAdd1E7bX1itv4bW0ENPh09vgVFGHPvA1T+quGNvGjISL93hL3TxhPSKyL5VcYvBMR14WclOv4JM6kC2fPnk2/Yw1LKixZsuTgcrn8VsYYyZXrtrRTspwquX+glCLCdC0+yN7e3id5nlesUq2sxsbGcgnbcKxsNkuJSCInr7ci2GPXEQDOKRaLP9S5qEFjfCVaOqwMjJk4tJIcdNDL6QEHHHDk3r17b2mGShKKJ5PJrKSWaQDIkjgocewnuF4VxhipyQ0j4l8qlcrvbrrppkhVa59v69P+M2td+GInX2dEfEkY11Mt906zzKXDuLa2tgWZTOauOrSVNss2U42Dc34eY+wJRSqIeC8iLowSfUg1GN+ZSVTVA9Um8JlCkmF3R0fHoTpyvE2w3SeE4DjOCxExqjJmREpJJzzGqiAghKC2gWfVAk4mkzl08+bNqXNYRMUkhIiS/K7qAhHPKhQK2lLgE50MDAw8w/O8QLVMAFiSz+drOiHft14ul7vIJ3yuto+FUsp6tWREQT8t/s45p4qGQEnloFaFnp6eHsuy6IT2yQAw3Nvb+yvd1ggCjnNO/ILUArHvt5lIsN+hS+I71eD7HFhRnH8Nb6+aalzM+vVFYNGiRQva2toSf+dRlZDrusTrpZXQqO9u6uN9/vz5czs7O8+hU/GYFSTEbUZqasQfkphbMYVdWZxzakcjCXVqF6KWxjmIaAEAKSfeDwBEYD60Z8+e9Tt37ozkKK0WE+ecqn1+O0FZj54lzqw1eeh/N9IBGvHV1GJ/R8RjQoQ3xtva2o5Ig3uIc07PK4F8taVS6fCkram1ANCIuZQ4tixrXrlcPtqyrMM9z6OW0O6JawMAcScROTo9495XLpdv27FjByVJE5mvGkeHOLVWQK5HxGxIJeIjc+fOPbxV34rgtxMAACAASURBVO8SgWsmaSFAVaDt7e1EQzFRUfPfAHBmI0RhqgVpElVal671BiUkkt5vowBwWj6fT4NQu+EA5nI5Um4KPVECgOvy+Ty9VBqrgoAQgiRlX1kDOLhgwYL2OC/qNaz1+FQhBFXJkRpb7JMpAHhNPp+PlHmvFicREXZ1dRGpcjXC5TJxX6R1Ei2EIJ6rajLzUkoZSGSdBr6t7oMeBv1yf+IJuB0Rb1BKUZvw4y0/EfK5BMH7lFIX0n8QtwmpGQHAqxhj+xGEAsBfxsfHT43z8EoEnCRmUKlUZnd0dGxqpZPAnp6e0y3LekzyPcSeqZT6a6vfRyb+5kKAc06VDIl4eRpJsNsMqFFLICncAcAAVQ8h4sEA8CTG2EPEDYOI1B6ztVKpXKdTEdIMe0ozBqqsKpfLx7e1td2VtigCJcKojRAAiJdIt6L/AQC4ijF2cbFY/BvnnBJyQYesv1VKpcJ5xDmnZyH6XatqxLVTLBap6spYigjYtv1MnwCe2gHpc6lj9Jm9AgC+XywWN3POKcFcVaENAP6nWCzW8myvE48Z08II+IeuT0PE8uzZs4kjbPdUbcckqqYK+Tqv65OJ04Nb7Jf1faEh4jcKhcITGPjrHHoq7jXVDy+VUtbUx59KsE3qJJfLfQ4A3ltDeA9JKbXllGtYZ7+pjuM8BxHpRCC2AcDb8/n8N2JP9CeEcEfdJqVM9BJVLZZcLncZAFQjdn2HlDJMuSjp1qbFvGw2+3VfNnjyfujl7I+WZf0eEa9jjJHAQmDLA7VWICKJDRBvFD1MBqofAcCHisUilfVPe8tms29GxDCeNuI1mddKybdpf9GmyQY5599njCWRHf+bUmri6fE0QcRso5kRoJbM4eHh3kwm4/hk0iQARIpgs3y1Tvp9KSLi0OzZs/MTD7k450RrUbUyCxFXu66bhJ/zCXBxzunzRJ+ralZWShEheUM53Zr5mqYdmy/gscTzPFLrPRYRj953jyDig5Zl0T1CVW9Dvb29cuKhMOc8qKvAQ8TlrusSzYAxg0DTI2ASVU1/iZIHKISgF66TkntgO6WUJKfZciaEIDWBj0YE/kUp5QUtt7kGBaypYhcWTarJGd1tCyEouUpEiknsU1LKjySZSHNyudzHAIC4QCbbPVLKI5L6nTxPCEEcJvRgO9HuL5VKT41DbppWPK3gx1e7o3bWKKP2n6jfxvGw5NSkBahi64SoRafD3znnn2CMhX1+blZKxVLinA64mD3UHwEi3maMEXF4HEPP806YrMYVx4EZaxBoNAKcc1JtfWeVdS9XShGBdCpGVeKe590c0EK2TSm1JJWFjJPUEQhJ3BNvW61iW6nHaxwaBIIQiHoYN8i1MAJCCDrt/1GNW+BSSrdGHw2fnsvlvgQA1X7IJ8byHiklcQYYq4KA4zgvJknnGsDZIqUM5PmpwW/oVCHEN33i1dhLAMB38/n8m2JP9CfkcrmFAEAk9NUqGU+SUv4lqe9980K4sN4vpfxcrf6n6/wIVb16bntIKZWr5wLN4lujquWnSqnAVpJm2YeJo/UQ8JWeiEMpznPtZUqpqqIUrYeAiXimIMA5J1J5qph5/PCLeNYymcwpIyMjRD+QmnHOSSmTngP3e6YBgPcUi0Xz/Jwa0uk68nn7Nk/gWqMF/up53gumghA73d0ZbzMJgTg/6DMJl2mxV58zhx7cZtewoXdLKen0pqXMcZzvEA9AWNCI+KpCoUA8TMaqIJDL5Z4OABtrAGe9lLImMvYkawshSHkvTIY8zO3vpJTPT7LuvjlCCCJireZjO3EYSSkTkbxG+N/Z3d3du379elK3MlYFAc45Je0ped9o+4lS6tWNXnQq1uOchyaJ01Cjmop9mTVbAwHO+RbG2FLNaB9tb2+3h4eH/6U53gwzCDQNAj434hpqCfM8b9SyrF8Wi0Wq9E3dOOcnAsAFiNgDANQmf6lS6qLpLD6QOohT4LCvr29epVJ5AQBQ9f3I4Ycf/uv169cTX6oxg0DLIDAtE1W5XO55AHAhALy/VcnA07qDhBA/ZowlfklqVcJxHSJwy7KeMzg4+Oe0sJ5ufgYGBp7ied4/a9jXFVLKM2uYn2hqLpf7EwAkJcm/SUpJEuGJTQjxXMbYHwIcuADwonw+T1VXsS1AzRIB4Hn5fJ7kuI0FIMA5/yyRoE8BQCuVUv+YgnUbviTnnDjtgqr6HvI872hzmtvwyzJjFrRtO6j1uhoGH1VKfXLGgGM2ahAwCBgEDAIGgRZDYNolqnK53EkAcI1POEeXg6obzp+pcu39/f0nW5ZVSzJmvLOz89ANGzY83Er3thDiSsbYC8NiBoAl+XyeiAiNVUFACEHqdVShk4iQn1QX8/n8OY0GVwhBVWBJ5X3TUOcDIQSRmQbxEpF88Xcsy/rM4OCgttz3smXLFmUymQ2MscMmYfpVKeX5jca51dZbvHixnclkhib8NtR9C4j4Bdd131P3hZpkgd7e3uM8zyOMn/BsMZNI5Zvkcsy4MHylIh2qgnypVDo+jhrnjAPTbNggYBAwCBgEDAJTjMC0SlT5rUpUVTBnEq4lxti329raPrJp0yaS350xtm7dOuvqq68mmdKnJN00Ip5ZKBSuSDp/KuZpVtUcJqUkSVdjAQgIIe5kjBEfQhL7kpTy3Ukm1jJHCJFnjImkPtJIYPb39x9nWRapqgQqxzHGKGF1LWPsf8bGxq4Nk3kWQhDHEbU0TpYb3jA2NnZSvUr+k2LYrPN6enpOtyzrJ4yxA+scYwkR/9t1XSIXJ3L2GWO2bX/UFxR4/PmCuO6WLFly1kRVohkDiNloQxHIZrNXIeKakEXvYYytUEqRIIUxg4BBwCBgEDAIGASaFIFpk6jyX+RI0emgEKzvAoBX5PN5knadMeY4zn8j4gdr2PD3pJShfE81+K7LVMdx/o6IK0Ocl6SUJK07o14i44JdY9Lno1LKhrdWCCH+GlLNFAkBALw+n89fHDkwYkBMUnfilriBMfZ3ANjied6/MpnMw57nHQUARGpP3Ep0v060W9va2p6+adMmevEypomAbdvzAYC+DwnTDs1pusMqiHgNVQ8ppWZstWZPT8/STCbzXESkhOAmpdTvzHet7i1kxtWCwMKFCw9rb2+nSvrlVfzczBg7VSl1Uy1rmLkGAYOAQcAgYBAwCNQfgZoTVUTYPWvWrJMR0UHEpQBwNGPscJ/AmyoG7mKM3YGId1iWtRMR/75r167BNEuuBwYGej3Po+TToWGQAcDvEfHFUsrd9Ye2eVZwHKcHEXXK4YOCvkNKSRVZLZPUEUJEkareI6V8XDGlea5Wc0UihKA22tOSRAUAb8/n899IMreWOUII4ocinqhEhojfKRQKb040ecKkZcuWzc1kMqTMc2ytvqrMv4Mx9syZ2tKcBp69vb1PIgUcxhj949RwnahKl1oyr29vb7/UkDOncXWMD4NAcgSy2WwHIr6MMUaVVfRM+ggi/uHggw/+1saNG8eSezYzDQIGAYOAQcAgYBBoFAKJE1VCiBVUpQMA9ELYGTNg4r0ZRMTrEPGPCxcu3Jy0JaC/v/+plmXRS8JRETFcPjY2dvZMbZERQhCZ74qY1+nx4Z7nLRsaGqLkT0uYEIJOTheEBOtKKXlLbGYKg3Qc52JEfF2SEBDx7EKhcGmSubXMqVH1j5beJqVcUksM++Y6jrMcESmJ3pWGP9/HzZVK5dQbb7zRVAWkCOr8+fPndnV12QAwDxHp96QbAOYiIv1O0m/cHgDYg4hjpHwEALeOj4/fumzZstuS/n6lGL5xZRAwCBgEDAIGAYOAQcAgYBCYNgjETlStWLHiwHK5/DVfSS72/ADk/sMY+xMi/qpcLl8zPDz8qA7CQgiqoKJ2mZ6I8T9YsGDBm2byy4QQ4i2MMZIOT2oflFJ+JunkRs8TQhBJ9bygdQFgYz6ff0aj42q19YQQdM3fnzDuF0gpqSKroSaE+BZj7LwaFsVyufyULVu2UNVSzeY4zun03cYYa6vVGQD8dXx8fO3w8PC9tfoy8w0CBgGDgEHAIGAQMAgYBAwCBgGDQDMiECvRNDAwsMDzPCL/rUm+PQIIOq2mNS6ZM2fONevXrycVricYtRx2dXVdF8BDMHE8ETpf0Epta/W4UfykHrVhJn1ZvkFKGaRiVo+Qa/IphNgVQZj8Oynl82taZAZMFkL8F2PsK0m2alnWqsHBwb8nmVvLHCHEBxhjn67FR1o8VfticBznVET8RRWhB90w9wLAJ4899tjPzuSEuy5YZpxBwCBgEDAIGAQMAgYBg4BBwCDQughoJ6r8Fjt66TyygdslxbGLK5XKD2688UZSrnvMhBDtjLGrGWPPi4hlSsicG4hPrKVq5O4p79mzZ97IyMgDsRadosFCCOKhCGtJvVRKefYUhdcyyzqO83JE/J8kAXue1zs0NFRMMreWOblc7mwAIGW3WuxKKeUZtTiYPDeXyy0EgB8yxo6P4bdMimmZTOZDg4ODO2PMM0MNAgYBg4BBwCBgEDAIGAQMAgYBg0BLIqCVqFq5cmXX+Pj4JsZYKrwtCZDyqDUQAL734IMP/vaggw4iRa5XhPgh0u/zpZTUomjMR8BxnNcj4veTAgIAL8/n8z9LOr+R84QQdM8E3t+I+I1CofD2RsbUimsJIZ7FGCM1zSR2pJSSqvgaav39/Ssty6q1kmtvpVI54sYbb3ww7eBzudwLAIDI2onfj5Luk63CGJOUjLcs68eDg4O3px2D8WcQMAgYBAwCBgGDgEHAIGAQMAgYBJoVAa1ElRDii4yxdzXJJh6Jap9BxPcWCoXPN0m8TRMGqVx1dnYSd1O1l2OdOH8spXytzsCpHEOKP11dXaQ4GWaflFJ+dCrjbIW1+/v7s5ZljSSJtaOjY9ZUKCwtXbp0dnt7OymxWUni3jcHAM7N5/M/qMVH2Fz/AGApIh4JAG0A8Cgi3t3d3V1cv349CU4YMwgYBAwCBgGDgEHAIGAQMAgYBAwCMw6ByETV8uXLj61UKi5jrKNF0PmslJI4aoxVQUAIQeTWpyUE504pJUk9U8Va09qqVau69+zZQ4mKMHu3lPJLTbuJJgls+fLlh1QqlfsShLNHSpmm0l2sEIQQ9J0VJbIQ5bOleNmiNmP+bhAwCBgEDAIGAYOAQcAgYBAwCBgEWgGByESVEIKU4kgxrhXse1LKNzV7ImUqgRRCvIYx9qOkMViW1Tc4OJiowibpmnHn6SRXEPGcQqFAfEHGwhEAIQRVp8WtwrtLStlIPrv9dpHL5S4DgLNqvbiWZfUPDg7eWKsfM98gYBAwCBgEDAIGAYOAQcAgYBAwCBgE9BAITVT5LVQkg36QnrspHXX5ggULXm4UscKvwbJly+ZmMhlq/zsgydVCxHcWCoVEKnBJ1ksyp7+//0jLsu6ImHuGlPLKJP5n2hwhxL8YY0fF3LeSUmZjzkltuBCCOKC+nYLD70sp35CCH+PCIGAQMAgYBAwCBgGDgEHAIGAQMAgYBDQQCE1U9ff3n2hZ1vUafqZ6yB/HxsbWFIvF8akOpBXWdxznKkRckzDW30kpn59wbkOm+e2qoQppnuc9c2ho6K8NCajFFxFCELF3LuY2Nkgp46jbxXQfPnzZsmWLMpnM9hSc7imXywu3bNkSlfhMYSnjwiBgEDAIGAQMAgYBg4BBwCBgEDAIGARCE1VCCCJQJyL1pjUAyI+Pj68eHh5+tGmDbLLAcrnc2QDwk4RhPbpr165DduzYEUVWntB97dOEEDZjTIV5QsTjCoXCcO2rTX8PuVzudwBwasydTnlCUwhxK2PsqTHjrjb861LKd6Tgx7gwCBgEDAIGAYOAQcAgYBAwCBgEDAIGgQgEQhNVjuN8BxHf2MQo3t3W1jawadMmak0yponAihUrDiyXy/cwxjo1p+w3DACelc/n1yeZ24g5uVxuKQBsCVvL87z5Q0NDtzUinlZfQwhBXF5x1R4vlVKePZV7F0J8izF2XgoxmKqqFEA0LgwCBgGDgEHAIGAQMAgYBAwCBgGDgA4CoYmqXC63HgCeqeNoCsbsQcRnFQqFf0zB2i2/pBDi14yxM5JsBAA+nc/nP5RkbiPm5HK5pwPAxrC12traDtq0aVOUMmAjwm36NYQQn2eMXRAz0CmvQnIcZxUi3hAz7qDhl0gpSYjAmEHAIGAQMAgYBAwCBgGDgEHAIGAQMAjUEYGo1j/ieFmUYP0HGGNPSjBPewpVehUKhe9pTzAD90PAcZyzEPGyJLAg4mChUFieZG4j5gwMDDzb87w/hazlrVmzpn3dunVeI+Jp9TWEEO9njH0m5j4+KaX8aMw5aQ8nxcIdjLEFKThGxthKKeWmFHwZFwYBg4BBwCBgEDAIGAQMAgYBg4BBwCAQgEBUoiqJ2tfDvqJcRx1Rv0xK+Yo6+p/2rrPZ7Jyuri5q/5uVYLNeJpM5fPPmzfcnmFv3KY7jvBARwxT9dkkp59Y9kGmygBDiXMZY3KTwu6WUX5pqCIQQH2eMpZUw27xgwYJnGGXRqb6qZn2DgEHAIGAQMAgYBAwCBgGDgEFgOiMQlaiiRESsyihEfCdj7D4A+DBjrKcO4O3o7OzMbdiwgRJixmpAQAhxOWPsJQldvFRKSfObznK53CsB4Kchgd0mpZzfdIE3aUC5XO4MAKBWUW1DxHMKhQJxW02prVixYl65XCZS9UR8bFWCf4+U8gtTuimzuEHAIGAQMAgYBAwCBgGDgEHAIGAQmMYIRCWq/sMYi1V5AgDPzefzf1q3bp111VVXnWZZ1ssQ8XTG2IEp4OgBwIn5fH5DCr5mvAvHcV6CiEmTTd+XUr6hGUF0HOdNiHhRSGxSSuk0Y+zNGFN/f/+JlmVdHyc2RDyzUChcEWdOvcYKIX7EGEuLX2osk8ks27x5M7VFGzMIGAQMAgYBg4BBwCBgEDAIGAQMAgaBlBGISlSRKtoxcdbMZDI9k1/iVq5c2VUqlV6PiETIXItc/BellHFJneOEP6PGCiGo7Y/a/+Yk2PitUspjE8yr+xQhBFXzfTJoIUS8qlAovLDugUyTBQYGBno9z9sWZzvNpAzZ399/nGVZQ4yx0O+7GPvbPDY2dkKxWByPMccMNQgYBAwCBgGDgEHAIGAQMAgYBAwCBgENBKISVVsZY30afh4f4nne/KGhIUpwPcGEEO2MMeK7WccYOzyOX8bYLR0dHb0bN24ciznPDA9BwHGcnyHiy5KAVC0pmcRP2nOEEF9jjL09xO9FUsrz0l53uvobGBg4wvO8u+Lsz7Ks/sHBwRvjzKnnWMdxfkVVXmmtAQBfyefz1OZszCBgEDAIGAQMAgYBg4BBwCBgEDAIGARSRCAqUfUXxtjqOOt5nnfU0NDQnWFzVq1a1b13796P+HxWbZr+z5BShhFka7oxwyYiIIRYyxj7RRJUEPFthULhm0nm1nNOLpe7DADOClnjI1LKT9Uzhunk208w741TkRSWsJ4KbBzH6UFEqgrT/b6JCpNUAM8030lRMJm/GwQMAgYBg4BBwCBgEDAIGAQMAgaBeAiEJqocx7kYEV8XzyU7TEp5n84cx3H6EZHUxETE+D9KKZ+n49OMiYeAr/53L2OsK97Mx0b/Rkr5ogTz6jpFCHEdY+ykoEWahei7riCk7FwI8SBj7CBdt21tbQdt2rTpId3xjRgnhPg2Y+zNKa71MCIeXygUhlP0aVwZBAwCBgGDgEHAIGAQMAgYBAwCBoEZjUBURRXJupO8u7bFfUH1SdfPBYAvBnAlEYG6k8/niWPGWB0QEEIQ6XWShNOu7u7uQ9evX1+uQ1iJXQohFGPMDnJgWdZzBgcH/5x4gRk4UQhxM2NsgebWK1JKavOlqqOmseXLlx9SqVSKCdqOw/bwT8uyVgwODt7dNBs1gRgEDAIGAYOAQcAgYBAwCBgEDAIGgRZGICpR9QrG2KVx9lcqleYMDw8/GmcOjc3lcq8DgIsnz0PEnxQKhVfH9WfG6yOQy+XOBoCf6M/4/yMB4PgmU2EEIcRuxlhnyH6eKqX8Z5L9ztQ5uVxuMwAMaO7/finloZpjGzqsllbXoEARcbCrq+vkDRs2PNzQzZjFDAIGAYOAQcAgYBAwCBgEDAIGAYPANEQgKlGVY4zJOPsulUrzhoeHqZUslgkhbmCMrZo0adyyLD44OLgzljMzOBYCQghq6aJr1hFrIpEWAXw8n88TOX5TmBDiyYyxMI603WvWrOlet26d1xQBt0gQjuNci4inaIZ7s5RyoebYhg9Lm1jd38Bfuru7T1u/fv2ehm/ILGgQMAgYBAwCBgGDgEHAIGAQMAgYBKYRAqGJqpUrV3aNj49TlUBGd88AYOfz+VHd8TQul8udAAB/rTLni1LKC+L4MmOTISCEuIYxdlrc2Yj490KhMDnBGNdNauP7+/tXWpb19xCHW6SUy1JbcIY4chznJ4h4ts52ASCfz+d1q690XKY6ZtmyZXMzmcwmxtjiNB0DwNW7d+9+SbFYHE/Tr/FlEDAIGAQMAgYBg4BBwCBgEDAIGARmEgKhiSoCQghBnC48BihPl1LSS6C2CSF+yxh7/qQJD2YymYWbN2++X9uRGZgYAcdxXo+I30/ggPipDpVS7kowN/UpQoiodtXLpZQvTX3hae5QCPFVxtg7dLaJiH8uFArP0Rk7VWN8FcB/MMbmphzDb7u7u9eayqqUUTXuDAIGAYOAQcAgYBAwCBgEDAIGgRmDgE6i6n8YYy/XRYTagwqFwh90xwshljDGtlAX2cQ5APC+fD5/oa4fM642BIQQxCl0F2OsLYGnM6SUVyaYl/oUx3HWIeLHQhx/Skr5kdQXnuYOhRAkqkDiCjrWEsnAXC53ClVBJbznw3D4E4kTSCmJK82YQcAgYBAwCBgEDAIGAYOAQcAgYBAwCMRAQCdR9T7G2Gd1fQLAa/L5/CW64wNaiv7V0dGxeOPGjWO6fsy42hFwHOfPiHhyAk/fklK+NcG81KcIIX7BGFsb5BgA1ubz+V+mvvA0d+g4zjsR8Uua2/yBlPJczbFTOiyXy70UACgZr93erBMwAGxExNOllPfpjDdjDAIGAYOAQcAgYBAwCBgEDAIGAYOAQeD/EIhMVOVyuecBwO9jAPYRKeWndMYvW7ZsfiaTuWlyRQMivq5QKPxIx4cZkx4CQoi3MMa+mcDjdillT4J5qU8RQmxljPWFOF4opbw59YWnuUPHcc5BxB9obvOrUsrzNcdO+bBcLvdKAPhx2skqxtgORDy1UCjsmPJNmgAMAgYBg4BBwCBgEDAIGAQMAgYBg0CLIBCZqFqyZMnBHR0dVBVgae7pe1LKN+qMzeVyXweAt00au3XBggX9l19+eUXHhxmTHgK+Yt6/Ylzrxxe3LOuYwcHB29OLJr6n1atXtz388MOPMMYOCJi9S0p5MGMM43uf2TNyudyZAPArHRQQ8b8LhcKHdcY2yxghxGsYYxcnufcj9nCf53kvHhoaqiYW0SzbN3EYBAwCBgGDgEHAIGAQMAgYBAwCBoGmQSAyUUWRCiFGGGNZzaj/KKV8XtTY5cuXH1KpVG5jjM2eOBYAnp/P538XNd/8vT4ICCH+xhg7Pq73uC2fcf3rjPcJst2QseullM/S8WXG7I9ALpc7CQCu08TlA1JK7XZhTZ91H5bL5V7mV1YFJTqTxlBijF0gpfxaUgdmnkHAIGAQMAgYBAwCBgGDgEHAIGAQmCkIaCWqHMf5DiJqVUkxxm6SUkbKvgshPsEY24/UGhGvLxQKq2cK+M24z1wudz4AfDlBbD+SUr4uwbzUpjiOcxYiXhbkEBG/XCgU3pXagjPIUS6XEwCQ19kyALw9n89/Q2dss43p7+8/2bKsXzPGDkw7NkT8yYEHHvhGowiYNrKN85fNZucwxuYAwJxKpXIQrVypVP5D/25vb999+OGH37d+/XpSQjVmEDAIGAQMAgYBg0CLITB//vzO2bNnr65UKgsB4JZ58+b9wfyut9hFNOFOGwR0E1WvRkTicNGx8q5du+bs2LFjb9DgpUuXzm5vb6dqqkMmjEHP81YNDQ1t1FnEjKkPAkKIYxhjt+rwl02K4DYp5fz6RKXnVQjxeapcCRqNiGcVCoWf63kzoyYiIIR4GnEu6aDS6hxzjuP0IyJVdR6hs9+YYzZ7nnfG0NDQnTHnmeF1RkAIMWv37t0LAOBpiEj/XoCIdN8vYIwdzhijtmEde4Ax9m8AoO9R4mDc7nne8OzZsweNEqQOfGaMQcAg0CoILF269PDx8XH6zrx7dHT0llaJ28RpEKiGQDabXYGIP2WMLdz3d0Tc4nne87dv336HQc0gYBBoLAJaiao4L6l++EullERqXdWEEFTV8sVJf/yllDJQra2xsMzs1XK53GYAGIiLgmVZTxscHNwZd15a44UQf2GMBVbklcvlo7ds2WJ+aBIA7rfqainYTQdlxYGBgQWe513DGLMTwBU15Q7Lss4YHBwcjBpo/p4+AosXLz6qra3NRsQeRLQBgK4xiUE8JUGCPk6AVGm1hTF2HSL+xnXdfzDGvDgOzFiDgEHAINAkCFjZbPariHjePiESRPx9JpN55cjICCXrjU1AIJvN9hKtBiIuYYwd7R9+dEwYQry8DzHGiCrgLgC4HRFvB4DRrq6ugjnkqP/ttHTp0qNLpdIQY+zQKqv9SSn13PpHYVYwCBgEJiKglaiiCUIISkAcqwNfWOWKEKLdr8ygyp19VqpUKr033ngjnT4bm2IEhBDvY4zF5hgCgHPz+byuMlzauwQhBLXgPNaOU8VullI+fkKS9uLT3Z9PVD+u8yLvK93FUQptSvhWrVrVvXfv3ksRcU0dAtwLAG/M5/OX1MH3jHRJlbpjY2PHWJZ1RCaT6axUKnMymcwBiPhUROQAQMko+qe7SQC6hzH2Y8/zLjKVCE1yRUwYBgGDgBYCnPO3Msaqtfhfq5Q6TcvJDBjU29s74Hke4bS8hu2W8BQMewAAIABJREFUEZG4gv8EAJcppQo1+DJTAxDgnP8XY+wrIQCdqZS6wgBoEDAINA6BOImq7zHGztUJDQA+ns/n11UbW03mHgC+mc/nJ6v/6SxlxtQBgWXLli3KZDLbE7i+VEp5doJ5NU/RIFL/sZTytTUvNIMdCCEeJn4eDQhOkFLeoDGu6YesXbs2c/PNN38eAN5Zh2BJffKza9as+fC6detMZU1CgG3bfi4AfJAxtoox1pbQzVRO8wDginK5/OHt27eHiUFMZYxmbYOAQcAg8DgCnHPJGMsFQLJYKTXjD557e3uP8zxvw2TRqBRuoyK9ZxWLxcuNinUKaPouOOevZ4x9P8gjKV8Xi8WXpLei8WQQMAhEIaCdqMrlci8FAF1+n99IKV9UZXGqetk2SUHwEcuyFg0ODt4dFaz5e+MQEEJQi8rSmCveKaU8KuacVIZXS4BOdDzF1V6p7HGqnQghbvdL1kNDsSyrf3Bw8MapjjfN9XO53OsA4NuMsbQVASnM33R0dLx848aNY2nGPBN89fT0rLUsi36XtH/LmhgXag38rud57x8dHaWksDGDgEHAINB0CHDOn+pzmQbFdoZS6sqmC7zBAXHOf8UYO7OOy97Q3t7+4uHh4XvruMaMcW3b9jMAgBKLQbZ77ty5h5pntRlzS5iNNgEC2g/3PkcNfRlaGnHfIaWkHuz9jBSTurq6LmKMvXyfH0RcVygUPq7h0wxpIAJCiI8yxmJfF+J7yefzow0M9bGlcrncDwDgnKB1EXFRoVDQIgNvdOytsp4Qgnjn+qLina5YO46zChFJEZCItdO29Z2dnadv2LDBJChiIMs5p880EZ5PGwOAnZ7nne26rhEWmTZX1WzEIDB9EOCcv4wx9rOQHb1AKUUcjzPaOOfEiXpknUG4xbIsx/CC1Y7ykiVLDi6Xy6H8apZlLR8ZGTH8orXDbTwYBLQQ0E5UkTchxKYYfdZHSinvqhYFqWp5nnchACwZGxtbWCwWH9GK1gxqGAIDAwO9nudR9VtcO09KScnIhpoQgpJjiwMWvUVKScpdxmpAQAhB7XzUXhVqbW1tR2zatIn4d6adrVix4uhyuUwnxaIOm6NWilOklFqk9XVYv6Vc6jxUttSG9g92nBLvxWLx0hbegwndIGAQmIYIZLPZLyDiu4O2Rl0SIyMjM/5gkHNO70D1UA+eDP23lFLEGWasRgQ0rtm5Sqmp4uKtcXdmukGg9RCIm6j6CGPsEzrbJALiQqHw27Cx/f39RxqZdh00p2aMEIL4Uoh8OI79QkpJp20NM5JHbm9vp9bRoPv5W1JK8yNe4xXJ5XK/A4BTo9yMjY11T+fks18ZSiToZ0RhkeDvWy3Leq5phY5Gjj73pVJpKhOiuxlje31y9npwYyEivsN13WqExdEAmREGAYOAQaAOCHDOr2eMnRjgenzevHmz169fT63MM9o45+sZY89sAAj/VEpRO6axGhHgnP+JMfbsEDcXKqVIcMqYQcAg0AAEYiWq+vv7j7MsS5d75hNSyo81YA9miToh4DjOfyMikRTHsXullHSCRETRDbFcLncmkRwGLYaIpxcKhasbEsw0XkQI8QvG2NqILXpSSnppb9j1nwrI161bZ1111VWf8Em8Y32PasRLJLTPllL+U2PsTB4CnPPbGGNPSRmEBxljVNUWqhKKiKe4rvsHWnv+/PmdHR0dcxDxwEwmMw8AFgEAZ4ytQMQBTRGCatvwEPGlrusGfr+lvHfjziBgEGgyBOhwBBG7y+VyV3t7e5dlWQ/t3r37oZ07d+6ailA55/T9eEjA2koplZ2KuJptTdu26dn0lw3gUNyjlOpqtv23Yjycc1L9I/W/ICPVxVe04t5MzAaBVkQg9guWEGInY+xYjc3+RUp5ksY4M6RJERBCkKILtSPFMmrpzOfzSdoGY62zb7DjON9AxKCKqb1jY2OHTucKn0SgJZjkOM7FiPi6iKmPSCm7E7hvySmO47wcEakMPO2HxNssyzphcHCQCOyNBSCQzWbPRkSqbov9W8YY+zdjjCS/XQAoIqLyPK84Ojp6J+f8fMbYl0OA9/bu3fsknRfFbDbbgYjPBICXICLxM8b9fIwh4grXdYkjzphBwCAwjRFYuHDhYZlMZrVlWatJ0AYRFwNAIC8iIt4LAPTdUKB/KpXK37Zv307cSHWxxYsXH5rJZOi7M8iuVErVo9q4Lvupt1Pbtp8HAKQmRwcfnf4hCHF9HhyyNn3nbwQAOuTQ+b34q1KqEZVb9YZryv1zzkndnlTuqxqRrReLxeOnPFATgEFghiAQ++FeCPE1xtjbNfAZ27Vr18E7duyg1oiWsNWrV7c98sgjz0JESrBRkmae/yPxCADQKTudXu1CxJ2IOJLJZDZO9xfJGInJidf4v6SUdJ80xMJaFAHgunw+H1bG25AYp8Mimp/9u6WUT54O+9Xdw8DAwIDnecRblTZp6sj4+PgJW7du/Y9uLDNxXE9Pz+mWZa1jjPVX2f8eALgVEW9hjG0HAEUJKfr+dl33/iC8NNSatiql4qqisoULFx7Y3t7+JsbYByJeVCaHlp83b95K004zE+9ws+fpjoCfzKbkDgnC0POKjmhRECxUhbnesqyfjo+P/2rHjh0PpYlfT0/PKsuyiK8yyExrVATgnPNQYRpE3OK67rK1a9dmisXiMz3Pe6NPNdBRxXWFMXaSUuqvaV7nmeqLc/50xliYkIlps5ypN4fZ95QgEDtR1d/ff7JlWX/WiRYAjs/n82FSnzpu6j5GCHGoX+p5Xkg5c1AcRBh5pWVZlw4ODuq2RdZ9T2ktIIT4AmMskDQzYJ0rpJT1lOR9fFmf3Dqs6uQdUsqvp4XHTPYjhPi0/4IdBsNNUsogUvtpCx/x7VmWdUUMsQldLEjA4iQpJfEhGQtBoK+vb16lUumh9jvG2AOIeCtVRyUAjVoKifvqsKC5iPgd13XfnMD3Y1N6e3uf5HkecU9RhZWuvVMpRW0JU25CiPZHHnnkaMuyDvY876BMJlNijD06Pj7+rx07doRVW0x57M0cAL2YjoyMHMUYe5J/HzNEfBQR70p4Lzfzdmd8bHS9t27d+ioAoER7PTiGSKjoK6VS6fNpJaw451Qd9P2gi0fVQ8Vi8eIZf3FDAOCc0+HT3JAhVyil9nuGJk7Gcrl8LiLS786+dnc6PH+TUurnBu90EPAPk6gwIej9+FGl1Jx0VjNeDAIGgSgEYieq6Id1586dVFZM1UZR9kEp5WeiBk3V32kvt9xyy3mI+CnG2EG1xoGI12cymU8NDg5qJfJqXa8R8/v7+1dalvX3mGs9sGbNmsPWrVvnxZwXe7jjOK9HxKCHJrQs66nTveotNmgJJziO8yH/sxLmYUhKSdWIM85Wr17d+dBDD30XAF6V5uYB4Oo5c+acaapp0kQ12NeiRYt4W1tbMWw1RHyt67o/rjWibDb7ZkSkhFVGw9fdc+fOXbBx48YxjbGpDlm4cOEB7e3tJwPACxFxOWOMOGiqne7TuvTytJkxdj0iXu667vZUg9F01tfX95RyuXwKAKwAgKMRkdqn6FCqAwD+g4j0skh8cP9gjP1NKdWwdvV9W6BnkG3btpGS6ot8RVVqCZoVsEVKVhcA4G+e5/3Kdd3Ybfma0JlhDUAgm832IuJPAipB047gDkQ8z3Xdmrk6OecXMsbeExQgAJxQLBbDKq7S3ltL+Vu6dOnsUqkUqnSOiF9wXTcIY4tznkXEI6k9cHR09OGWAqAFguWckzhT4Dvu2NhY16233rqnBbZiQjQItDwCsRNVtGMhxDcZY2+J2j0A/D6fz0eqhEX5qcffV6xYMa9cLl/GGHtW2v7pxbJSqbx5migaghCCKpbolDeOCSklcSbU1XK53GUAcFbAIpuklFTGaywFBIQQ72CMfTXC1Q1SyhNSWK5VXdDn5UO+Omqi79eAjV8kpaSKT2N1RsC27TcAwHfDlkHEnrQSMJxz+v66VKfdBwDeUSwWG1Yhms1mj0BE4uuiU/ykhzk3IOKFruuSCnC9RRbAJzCmmCkBFOczSBXR32tvb//x8PDwo/W8zfxTe8KU4kzaKj2CiJ+fPXv2/0gpqaLNWIsg4CeoiQOPOIsaZaQi+nHXdUm5O/HnMJvNXkWq3kFBl0qlw6OqKolm495776VEy6GICJZlVSqVyq5MJnNHsVgcbxQgU7GObdvEOTYasfZblFLfnor4zJqM2bZ9IwAcF4SF53lHmQpXc6cYBBqDQJyHuMcj6u/vP9GyLJKnjbJHuru7D262SgDHcfoQ8fcJki9R+5349/sR8ZWFQuExVahWNk1uoslbvEBK+cV67tuv7qMWnarqM4j43kKh8Pl6xjCTfDuOc45PHB647WZOTjfyWjmOQ8TZdFqe5ovIu6WUX2rkPmbiWpxzIlIlQtUge0gpRUS4qVWMcs4/zBj7pAbeUinlaIyraQipGHZ1dZHiK53qp3UPry+Xy2+56aabVE3BBUzOZrPLqCUzhfbbf3qe9/bR0dGr6hAnVUNQwpmquMNaf+IsvRUA3tKIKhYi+m5vbx9AxKWWZR2LiAcDALXajiMiEUDfAwA3M8aKALDRiJg84TJSW/HnwiqS4lz4hGN/PmvWrFclTW5yzinJEtTe/4BS6gnPY1RFVC6Xn+95HlU40uHhIsYYqQNPtjJjjO6fDZZlXXvggQdeMxUVpAlx1ZrW29t7kud514UNnqgoq+W0hQctXrz4qEwmQ6TxS/z2V/o+oe9GqiCl6uG7GGM7iFdyz549mxpRyWTb9rUAcEoIrEumogK3hS+zCd0gkBiBRIkqkma/+uqrSTo9ssrG87yBoaGhfOIIU54ohFjBGPsdcUCk7LqauzIAvCmfz7d0v77jOKsR8S8x8fqtlDLw1C2mr6rDNRKmC6WU9NBjLAUEcrncywDgZxGuLpdSvjSF5VreRS6XezpVV/rtRmnsp+x53slDQ0OGNDUNNAN8cM6ppSqsfZXaxE5MMwS/BYxarKmtLtTSrOaqtlA2m13hKynWg2tuNwC8rVgs/jBqn3H+btv2GwGABDwOiDMvYuwlpVLpjWkJwvT19T2tUqlQ8nplijHuc1VBxE+4rksJsNQSqOSc2j7b2tpeAwDEp0bVsjptqjSVkg50T1/ied4vTIsSY9ls9juISMTYU20XK6WIayqW+aTvVG1YLclEvv6hlHr8/vbv+Xcxxl7DGJsda7H/G3wfY+yiNDm2EsSQ6hTOOVEDkFJtmC1WSlFb8rS0np6ebgCg72x6VqQkle676B4SCgCAH5dKpSvS+m6eDLJt2xcDQKDCNSKudl1Xp1hjWl4/symDQCMR0P1yeEJMjuN82W8JiIq3aaoA/EoqeskLk4WN2k/cv5MCy6sLhQK1drSk+ZVLREocKJFcZWMPdXd3H1LParpcLvc5AHhvAKgFKaVoScCbNGjHcU5DxGsiwvuRlDLwB75Jt1a3sAYGBno9z7t2AvlprWvdVSqVlg0PD99bqyMz/4kI+C9ipJIVlvD4qlKKWrZStWw2ezwi/k3D6buUUtQ2lLrZtk0JiYtSrKKqGiMiftp1XWqRrdk45+SHEjT1sOtLpdLptRJRZ7PZkxHxFw04IPvZrFmzXp20WmYSgNRGSZWFHyWOrxrBfQAAPrN79+5vpFkRsXjx4kMzmQxVIpJSMynlXVEqlT5V6/Wqca9Vp9u2TTh+PIFvqighzrxbSX0aESkBeCCR7VuWRf/u8SuU4j7Pv1wpFXXwtF+4ixcvtjOZTFhF5I+VUq/NZrNzPM/7OCWlQ7js4kBBz59vVUqRum5Lm23bHwAAEqYJsgoAzJqOLZDU8nnPPfeQOBM9t9daLEBcyev6+vp+ePnll5PyYWpm2/bnAeCCEIdnKqVIPKeqUWt3R0fHszzPo4OnPgCY7793zkHEkmVZj3ie92/Lsm5GRPps/21sbGxzmt+NqYFhHBkEphiBuD9sj4frVwuESXg+NhYRryoUCi+c4n0yX5WLCF4jq8DqEOteADgxn8/T+i1puVzuBwBA0snaRiS29dyzEIIemOxqAQHAu/L5fF1e5rQBmGYDNSrYaMdfl1ISl5UxHwEhBHHQUBXnsjRA8dsrT6uFZySNOKajj2w224+Iodx6aRGpV8OPc04HKaEcbwDwq2Kx+JK08a/hRTppKDXL2PtcP/Xmcvm1UorwTsTrk81mz0ZEqiALqkJJil/QvCv6+vrW1vLy5rf40eHac1IObsTzvFeMjo4O1+q3p6fnWF/o5YhJvrZlMplnb9u2jWgBmsJ6enrWWpZFymy6z9y3IuJ3K5XKlTqtsvPnz5/b2dlJogGnM8bOpkSWxsb/WSqVFsepSrFt+3n0+xPkGxE/iIh/siyL+F8XasQQZwh9/j6llPpY0s9inMXqNZZzTuIZbw3xf5tSihIb08oWLVq0oK2tjT4DqbauA8AGollRSt2WFmCc84/4PKNBLs9VSv1g0h8t27bpueytAECJ8yCxkSCfRIr/awD4fiPauNPCyvgxCNQbAd0fzWpxEGnwTsZY1BcqnU4fmtIJXyI86JS8s7PzLwDwjEQOGLsdAEi56J+I+IBf0t6JiN2MsWN80r1AKXN/zVvHxsaWtCpng+M4pPYU9zTrA1LKzybEPHSaEOJp1LceMKhiWdbRg4ODpNxhLCUEhBDUDhWlNPVZKeUHUlpy2rhZtmzZ3EwmQydwq9PYFLWPFAoF4lIyliICUdLrtJTnecel8aJdLWzOOVWwRF3XO5VSqR64xODIShHtx1xRlcS3kji1bVsAALWWxX0hiL0cALy+WCzGbuG3bfvlAEDtfrrtcrFjC5iQuOpvyZIlB5fL5fWMsaVpBTPJD7XvvLRWBTrO+aaQVtnr+/r6To6TrPPbkQQ9O3ieN9eyrBIiPmhZlnvYYYeNJK0Oz2azxyDiFk1OMkqufbiWKpHe3t4nEWk6IlIyJPQZHxFf7Lrur3Wvs4bQxE8ZY2eGKFfqLhU4DhG/5LouVeW0pHHOCe8zQoJPvbV8qoHinD+VqoZSrCyfvCV6L3u+UooUXGu2bDb7DkQMEw56n1KK1C8Z8Tl2dnaeS0InfmVjzeszxtZ7nvee0dHRpqHNSWNTxodBIAkCtSSq2P9j703g5Kiq/fE61d0hmQhEWYK4hZhk6tYMgenqJCKoEVRQAcUNFQUXeKhPn+sTRR9Gnz7FXXHB5bmguG8I7sJDBRHS1QlJpm5NgjHugiBLIJNMd9f5f7751eQ/09N161Z1VU9P0ufzyYf3nHvPPfdU9a17zz3n+40pvdpnDxGdVK1Wb0xjYBZ9HMcBqDfq5HUFtKPXIDADbCYd9r7jjz9+SbFYPIuZweAUhTPyMdd1My8Z0Z1UJ+0cxwFlNvACFiTQ83PXdU9N0F67qeM4eJ5twdr7gN7abkzUcPXq1SuazaaSrYaI3l6tVt+TSPEB0hhYL4ceeiiwKbLA8LovCAKhszYdIO7NZJqWZX0s3HBG6asPDAwszOviZXh4eHGz2USpj/LbTEQHZ3XpIYQAgy+YfJPIPYZhgCgEzHP/wIG+UCgcxszHhIcwgCXryATAlT3P26DTeEobgJJjEz+i04+Z7yCizYZh4ECDb9nRIXivVpYTEfme59lJMjmGhoZOC4IAGHVaY4TzAHjwdURUhc1hecghRIRgx+kx2GnTXJE0CDHZWQiBwGHeDKMIAj0/SZBk6uTCkr9/qp49Eb3S8zyUsUZKiL91rmma5zEzsJVQPthOcOH6zWaz+eGtW7f6Ou9c2Abg6ddpXlD8vF6vvyiOMU93bCHEuYZhIJMvak5Q9TkppTZmlhACjIHINpltya38Oe+JaWTNfltKmcUeIe+paOsXQgAyAtlGeQrK6U4bGxvr+KxpWdZLiEiFo3iplPItITA+1hjd712S+aOc8cPYU++PZaBJHNFve2B7oKNAlWaGhYG6/Gq1um42XD0yMnKCaZqI5OvcaOKA8MHdu3d/aXR0FBvaVFIul08mInzQQY89VerNZnNo48aNcxIksVwuXxWmluv65YHx8fGH5LHIOo6juk09x3Xdr+ka2W+n54GwfBa4ACp5neu6qpsovcH201Ygorjmmms+pInvp/QCEX2zWq0iMN6XjDwghPh5TLmTlFIiYJGbxLBq7R0XrGu+7yPw0pEIIQAK/0vDMEqaim5g5v8+6qijrlNlmKBEyDTNTzHzUg29m4eHh0eSZL/Ytn0OMyN7I05+ycyX+L6Pm/ZppXsrV648sl6vAyAcB++2zLEtyrUBjoeGhpYFQYBSf108TLDkvfPQQw+9WsVyJoRAViuYDXXKZ+4sFosrNm/efHeck6b8HYEVBCF1SscSqG3bFKxej5NSKkttIwZBoPJewzAepDDinwMDA0tc18U4M8S2bWSJAx4AwVVdmQjLz4CJFlsKGpb8AZssTq4YHh5+WZLfQJxC/N227SuZ+YVRbVE25XneSTq60EYI8aUQGF23S17tJkzTPGl0dHR9XgPkpVcIAUwiEaWfmT/u+/5r8xq/23qR4RcEwV3dGDe8kFjdaRmgEAIZb5GZhii/NwxjJzODJKCjc7SGX37dbDafvXXrViQK9KXvgQPOAx3/wBzHwWZ5WOU5Zv5trVZrDdrk7uwQBBw3taA9VQlYTN49b968j2VIhYvSyNcYhoHSt31ZSKCsr9VquOmac1KpVF7OzJ9PaPjjXNe9IWEfZfPVq1cf02w2webX7v1FnfdRUZvTLO040HSF5WvKQw8RnV+tVltr9w80V8XO13EcAHUidbzTNfhk13WTMnLG2negNhBCAOfikYr5f19KidKW3ESjNARjo8wBuGepRQgB7DR8HxdrKEGA+kIpZRyZwj5VISX9d5k5NquWiF7heR4CMFpiWdYtRAS2KJV8VEqJzFtlQCHMYkPQ60kqZaZpPnV0dDQSn2ey7wknnLDgnnvuQZBKuS8K2+8kotcODQ1doRukwL5m8+bNnwSjsIazPhL6QKPp3sDGPGa+P0HgEnrh31TrGBFtX7BgwbFpvtdCCASAnhszsVdLKadlC4YMmx8wDAPZ7Wnt/qzneUr/I1tr3rx5nkawFhhomEembI3wS8i6ByzPqED0JinlcVovBwBBLevaEH9Ht0u7doBsqAJOIwiC+4ioyMxHmqYJfEAEzXSD5qOLFy8+Pm1JZicT6KSvEAJEKJFQIcD58n3/vZ2M0Ut9w7K/HQltSr2mhMyTOG+m/j0JIZD9pf2tSzi3NM29er2+NqtsyzQG9Pv0PTBbHkj1kZ5qrOM4wKNRMVigeXNiYuKIhDd7HfvEcRxEu3EDpJLrgiB42YYNGzID4ps62MjISMU0TRwoJj9MuJHDLR+yt+aU4Aa6VCrBblUqeeucLnFdF6w8mYnjOBeFAcB2Oj/nuq52KntmRh0AitauXTt/586dKE2JFJRz1Go1AGb2JcYD5XL5gpBhLcnvaZpWZl5fq9XWxB3G+w8j3gMIrNTrdQS6I7+LWbLVRVlkWdaHQAahspiIzvY8TydTI1KNbds/ZOYz4j1j3EBEz/U8LzHmXxi0wfcvDpttx+LFi5frHDoty1pBRMoSZMMwfiWlBKCt1mEFpe27du2CnU+I8gcCbr7vI+NOKbZtf5CZdTB0xhqNxlk6YNltBiTbtr8AYP8Yc8abzeYjk9zG27aNrLnIi8UwawFg2T8yTdNF9jme8913373YNM1HB0FwJhE9W5e4hog+5HmeimGr7RRt217NzMisVslmKeVUrC1kYqGkp+PLwrjfoA7eHdj8QDqTVRlvO0fYtv0ZYBpGOOnHUsqnx73Tk38XQqAaIA1IOtYOYO99RUoZWVGA7Jtms/nqkM15YZxdOuWdcTq6/He8fzgDRFZ4MPNLfd+PO7d02eyOhkOWJs5Xj1BoAf7vV03T/OnExMStYO3E97jZbD40CIIVYTn5M4F3rGMJyvc9z7tMp227NkIIkEjErvVp9afst5GIHpfnWpHSrn63vgdy9UDHgarjjjvuYcViEYuQsrQOeAm1Wk0btLHTWYfZVPggRqV1YwO77owzznjPunXrtDazaW0KsX2Q9QBcDJRCXlStVvcC8c01qVQqvw2xHHRNv8513VN0G+u0cxwH2CROu7bMXKnVanGA3zrD9NvM9ACyBEGNrQqsnO66bi/dRPX0c6xUKucyM0CadUqT286l22trTzu0A+PCsirl2kFEL/Y8T6fkLLUlQoi3IcNXpQAMrJ7nqTA0lONblnUeEcUehojo6gULFjy7E0yuFStWPKxQKCDzOq4MTkn5PTkhIcTrgd2hmiAzr/V9/1dJHkJYCgj8oXZ2Nkql0sM2bdqEbIhIsSzrsUQEqIG44HNtfHz8lB07dqDMLpWEQcCNhmHgIBcpzPxW3/e1SU3C3wFA6g9qUYqsiA8sWrToi3GZ52HWEoJoyFyKe+7Aq1rh+37SrAuUol2D7ELV/IMgsMbGxvYGNoUQ2Hf9ZyqHz+x0i5QSlwTtBIdzMBuqsuqaRHSi53lxwbaOzBVCAD8HWVXtvjH/LaW8RHMAzAkXVa3vhao7ypXePT4+/pkdO3YA+1VLVqxYYRUKBeC7KYNizPyXhQsXLu1kfdIyKKNGlmUdRkTKEi7dzM2MTOqKGsuyTieiq9qsi1uI6NIjjzzyG3GXFMhQLJVKACwHrMr8GMP/Va/Xj0HAK80EBwcHn2iaJrDl0gqCkTgrYQ3YhmfOzFjnTNM0D2dmQUS4FElKWPF1KWVkKW9aY/v9+h7oZQ90HKjC5BzHwQ/6iTETvdx13bwBOveZUC6XzyCiH0bYtIuZX9zNwNmqVatWBUGAjTPKAG90XVcbF6CXXqCYbKZ2pu4aHx9/cFY4VeVyeRkRtb2RC7NLooDse8mNc9YWx3FQJgsw4rZimuba9evXJzogzllnZGR4uVw+O2QG0y15mDZy/73P5kFYlvVCIrpSpS0IglV5M/FoBmKzTZxdAAAgAElEQVT+zff9OHbAtlOxbftBzIw19KgYz/160aJFp8UFJXS8b1nWvxFRXGnfN6WUsZhrQghk80S2w+HV932Ub8ZiCLXarrDzk1LKV8fMFQd5lPzF4UdtK5VKJ8UFvTT9+gQiAkOfSjZKKbVA5yeVIFjFzJ8iIsAmAAfoCwMDA19PGhAYHBw8xjRNXNKB9UsliUC9p9iJQBCCdZGBfiJ6m+d5/xMelrEnzGTfi/erXq8vuO222/a0TiwEWb5WNWEiii0f1HkHdNoIIQDZ8PKpbVF2GQTBat/3tfCDbNs+ipmTVAL8oFQqXZj2PQ8D3Pg97b3gjRJgcPm+jzWh52VwcHAQLJIx78WI53l4p/crEUKgtBqYcEuY+QbTNC/3PA+/x0TrdBhIB65iXAD87VLKVMQ+tm2fxMy4cEgk2IuZpvnxZrN51djYGLKzlbJ8+XJRLBZx8fLSBKQb50kpQcrTl74HDggPZPLBLpfLLyWiOOrmHa7rJgGt7OgBOI6D2xiw5LTKeBAEZ2zYsEG5ieho8IjOYfbEl1EKGeIozTlwvHK5jJsAgEFqi2maJ65fvx43tB1LpVJ5GzO3zTYAhXi1Wo17Dzu24UBW4DgONrUPUfjAcV03DTjugexWo1KpPJuZv5FgszLNX/0AYeevjxACoNq4rY0UBN07yYLRsdK27YuZWbnBDoLgeWNjY9/W0dfaRoe5C4fY3bt3l7dv3w7A6o4lZFf7ExEdqVC2c/HixQ+Ju1m3LOt3KJdS6AHmD0rPUollWSg9ekV4QN5uGMZXh4eHL4vDkNIEeL+v0WiMbNu2DXozESGEilhk7xiFQuGRW7Zs+XMmAyZUEmb04NCnwkLbXSwWj04DD2FZ1heICAe9KKkhe4GZkVWlDHoknJpRKpUWtwvECCE+axjGBQp9e4hohed5f0o6Zpr2a9euLd5+++0XMDOIflBBUCsWi59N4u/BwcGVpmneqjn+u8NMrURBiFbdlmWtJSJchKvOKr+WUkaW7Gra25Vmg4ODJ5qmqcRsLRQKR23ZsuX2rhg0RwexLOsEIvqFYRiq8tC/L168+JFx35N2LrBtew0zg4BDV/4aBMHr036Tbds+3jCMrzOzpTHgP03TtDoh/NIYo9+k74Ge8UAmgaoTTzzx4N27d6MGPTLTIpzxMtd1AYKdq6xZs+aQRqOBFP3WFOWAiM6qVqtRmVa52gXllUplLy4IEZ1XrVbnZFTccRxs+JTlBi2OfKvrutqlB6qH4DgONkrt0mXvqdfrD9+0aRMyfvqSkwccxwGocuRmv1AoDN5yyy1bcxp+v1YbYuoh0BpXNjTDD30GwM5fDSEEMpTOV2i6R0oZd4vbsSFCCJS14ZY1UojoSZ7nJb5sWbJkyaIFCxYgYKFiS+MgCE4ZGxvLFKTfsqz3ENHFMfOKzSYQQgCM+dFRepj5g77vZ1Xepfs8gT2DTAklTTkzX+j7PoIYmYkQAnhLuABTyfOllLOGHWhZ1lOI6GcxNv67lPJTSR2zcuXKh9frdXxz9pHWtNGBS4C4bL0tCEoahjFGRHehHNEwDGTR4RDZTv4lpZzBFhkGhf4WA5h9pe/7L0o619lsr1sOlRZzLGpucRmUwKELguARY2Nj8HlPy+Dg4JmmaaIELkqC4eHheXFB8Z6eZJeMsywLGJ9xa+npSQhAJk23LMshIkCM6MgN9Xr9WZ0CnS9duvTQgw46CGdTMPHGyaVSyrfENer/ve+B/cEDmQSq4AjHcVAyoaydZeZX12q1aQwseTjRcRwwqLQDmv1v13V16/HzMM0IMb2eEQTB9Rs2bEiUmZSLQSmUOo7zQcMwdMBi92onop9Wq9WnphhqWhfHcXDbAKyFdvIx13XB4tOXHD3gOI7ykNhoNB5+6623IpjVlxQecBwHGAwfS9F198TERKqMhBRj7ZddhBAATwWIapRskFKW8568EAIXGC9WjUNEZc/zwNiXSIQQKiKKSV2fklL+eyLFGo1t234cM/86Zl4v9zxPmRUrhACu06EKPZdIKTMl8IibnhACQL/fj2n3SynlU5KWusSNHbIWoiRLtZ97v5QSz37WRAjxA8MwnqEw4AYp5ePSGCiEwL7yVWn6GoZxdxAEF7bLhgDW1ujo6PkgUWiTSdz2PRNC4KCpLH9Pg6GWcm6ZdRsaGnpOEARxWZyjAwMDI0lLRFVGhrhvN6raMPNrfN//RGaTzUmREALruuqC+l4p5aKcht/f1OJyAKWhbfFqMVki+prneecknbhu9iAzX9doNJ7Wrvw36ZhoPzg4eLBpmlg74kq17ysWi0uSZESmsaffp++BXvBAZoGqSqXyVGZW0mUz809qtRpoP3MVx3E+ahjGa1sGGR0fH8fmHiB3iWRkZORRoOQlIrBWHEpEO5n5X8z8h2Kx+NtbbrlFq8Y/0aA93LhcLj+OiJQHjhbz71u6dOlDOr0lchwHQcZ3tnENSikHu5Gt18OPpSumOY4DUGQVQOwi13UzKRfqyoR6cBDHcQBAnJgFC8xOtVotFW5RD7qh6yaFGTGDioE7KinTnZAQAiUNwPOIEiCyHp409R+H7s2bN+8goocrdN/PzEt0cWt054R2IRju3TGZLygZQglmpAghQOigYs16h+/7yhLOJHbrtBVCIPtMxWyILLXjx8bGAK6budi2LWPKRr4lpTw784ETKAzxeXDRFLXvbBSLxSPTHL4SZkBMtfqfhmGcqGKiQ+MwGIgLur0lpcz86YULF76lXUDGsqxLiKjdPmVy3H9IKZGV3FFZXALXZ9LUtu0LmflylbIgCJ4xNjaWecWCxvt9lZQSweKeFiEEgqmqy/o/SSnj8Nx6eo7dNE6Dne/O4eHho5KePYaGhuwgCEZj5iLr9fpj0gK2R+kO10lUjihJC4jotZ7nfbyb/u6P1ffAbHggs0AV0p137tyJkgIVQCtYPw5zXXdXnpN1HOcmwzAeM3UMZj6zVqsBt0pbyuXyqUS0rlVXiwJsNpAZdWWxWPzCzTffvN/XloeMiij11KKKhb8AQrxhwwbdVNq2z8hxHGxyZ9RwE9H3qtVqakwS7Rei3xClq+vBrBjliqVLlxaTbgr6bp3ugXXr1pnXXHPNt5n5WUl8w8w/rNVqqoyFJOoOtLYAwkbZcGT5EDN/2Pd97UzSlA6EHTg8zygpmqJvTEqpg2UxzQTbtk9hZoDQqiTXzBshBPDrVLfFX5BSTgN9bjVWCIFgV2TWATNf5vs+MhO7IsPDw49oNptgrFOV7OZ6kNYoj0qdrZSlE23bvoGZT4zS2Qn2mmVZoG8/LoG9YOECO6Q2fqbjOIC3qKsyhoQQ+I1FMh0z8xd9339ZAjt7oqkGG+mdAwMDR2eZTTU5ccuy3kpEyGqLkrullNiP5srg3emDEEK82TCMSxV6NkspkzLBdWrWXO6PrKo/GIYB8oy2QkSPScqsGeLqqSAs6jgXSilzwWPVwcs0DKMqpVw1lx9e3/a+B3Q8kFmgCoM5jvMhwzDeoBo4TcBIZyJT2ziO868WRgjfdV1b9wZr7dq18++///5PMbMKoLOdWVi8vhwEwcUbNmzAYWO/FcdxQG1+XoIJvtF1XSWluErXqlWrHhsEQdv0byI6qVqtKlPDE9jZb6rwgOM4yKSLKs8Yd103Dqeu718ND4QHIqS1D2k0n2zywL333ntYVmnoCcad803DjAkE3yOlG+UlQghkKyJrUSVXSCmTrL17dbVj/moZZLxQKByTJ5CvECKK5GTSlFjmP9u2f8/MSxUO6iq4ssbhc+9FTZ5skZZlfYiIVHuvrpStxi0EGlk5H5FSKveQUWPYtv0fzJykbPpjUsqs4QJwcL4vBuT5XCnlV+J81Wt/j8POY+bccLeEELh4xgW0So6VUgJnrGdFg8iiJwLKPevANobZtv0/zPxWhc2vk1ImWRdQgge2UhXhRU1KGVly2Kn/bNueF5I/LInRtURK+cdOx+v373uglz2QaaCqUqkMM7Nyk83Mn6nVamDUyUUcxwF2BTAs9gnSsKvVKjKjYgVBqp07d/6kJY3/X6CADoLgNiLCTTdANh+rKD+4m4jeWq1W4+i4Y+3p1QblcvlZRPTdBPb9wHXdsxK0n9a0XC7/LxHNuIUEHWytVludVm+/XzIPOI6jwvG5w3VdFbNTssEO8NarVq0aCoIA1PAqkOBpXgIbWrVaRYCrLwk8EFJeu6ouzPxs3/e/l0Bt4qYamQPA3Xil53nKEpw2A5NlWf+IYd37hpTyBYmN1uwQgkzjgB4Jas3M3/F9HxiTkaIR7GrU6/WjOwW31ZwWAoBgtDtJ0T7vIBGy8FDq+HaFDZuklEmyjXSnn6idRkA4dZBR43A51dZcMF50bGDmQd/35xzhiBACgP0A7o+SN0spUbaeuYRlw4AUiCyHYuZzfN//WuaDZ6hQCPERwzBUwdEfSSnbsZVnaMX+pcq27dXMDObTKPmKlFL13s7oFxI0qFhScw1UwSAhBNZzJdYimM7jMB33r6fdn82B6IFMA1VwoOM4can9f3NdFxgZudTnr169ekWz2QQr3T4hoidWq9XrdR5wCyh8A+UeQRC8d+PGjdOCXytXrjyyVCq9wzAMBN3apvwT0Vcf9KAHvTQNPaqOrbPZxrbtBy1YsABZY/M17bjLdd0j0jz3cCyAxc5gqmLm59dqtVljM9Kc+37TrFwuX0VEZ0ZM6A+u66oyHfYbP3RrIuVy+XVEhM2tlnSLsELLmDnUyLbtWIxFwzBOkFImoaxO6gGybduLwRoCPtMjpZRYD7VlaGjouCAINqo6ZI0vMzg4eLRpmmvC0nn8FyXDKjpxmBcL5K6RlYBg3vs8z1Pdsmv7TtUwBL8FRmVJ0S7TA/zQ0NBDmBn+XBMEwRqUtqhKIUO7AOSuIgrIxB86SoQQyACIKtW5T0qpAspXDmFZ1p9jMNj29ieiL3melzRjPnZ6QoinG4ZxjaLhznB+uex/Yw3soIFGgDgVw5quSZZl/Q4XMVHtu/Wb17W3Xbs4Ztm04N+d2DTX+4ZBTGQxzouYS+JyStu2j2Jm1Tc290BVGCxDSXkkHiOA+dNkV8/1Z963/8DyQB6BKoCYA8w8UkzTHFm/fr1y05z2Maxater4IAimsSEVCoXDdQDPy+XyaUSEbCpIwMzPjMO1KpfLZ+PjosCn+JrruolZJ9LOv5v9HMfBhgwbM11Z6bpuXFnLDF2VSuXlzPz5NoNsP/jggwf3x0CgrkO73a5SqXyDmaNAeTe7rrvf4CsAK+qqq64qm6YJHIBHMTM2QveapvkXIvrd+vXrgU2X64EjxP5D8P9YnWedd8aqjg1zsY1lWS8hoi/G2J5rmv3Q0NBpQRBMfn+iTEl14y6EeL1hGKrS63vq9fpRacpGV6xYcbhpmsuBOU1EKFWd/PfQFO/CG6SUysCsZhnQBBGd4nneDSls0O4ihAA5zI8UHZiIlnie9ydtpWFD0JXPmzdv2RSfoiwUEAZx5SDthrpcSvnKpDZEtT/hhBMW3HXXXSCZeahpmkVmNpl5olgs/nn+/Pl/VOEU2bb9HWQnRumu1+tHps2G08Dq2jusaZpPHR0d/WlW/pjUY1nWG4kIoOtRslFKGcfolbVZmejTwN46MQneV1KjhBCfMgxD9Q7/QEqZOms/qT1p2mu8n5+WUqZlr0xjUs/0wYU09lnAOQ6CoEhEOINhHd8xPDz8FxX2qRACmedR2Km7pJTQrb1XQyJCvV5X4Q3nHqjCg7Ft+zpmfmLUQ2LmW33fP75nHmLfkL4HcvBA5oGqkZGRI0zTBD195A0jEb29Wq2+J4f5IKMLNy5Tb72bruvClthFynGcqSn8V7iuq4UDomCjm5ziq1zX/XQe851NneVy+d+ISLu8MW22RxSAd5/lrPtPX4VNRkQ3VatVlMTOaUHGwvz5819tGMaFhmGAnSlKbjMM4/KDDz74k9dffz2IInKRkZGRx5umiYxQnfX6Z67rnpaLIfuxUiHERYZhvE8xRa7X6wvSBHI03YbSvJuJSAmOyszP8X0/Scn13uGFEKBEBzV6lKC8/cYgCO4kojsNw9hpGAYOCU0EIcKSG2RDYcN/SJgRg98GmHB1s2pjXdFoNB69bds2FTYIdKDUDVk5GDtSmPkOIlqdJ4aHBsD0HsMwrjUM405mhl/vI6K9awUzN0zTPIiZD2HmASKCX+FTZJwj4ygu+yzWn5MNOg3MIGuhUCicapomyBpOCElNotajPURUZeafFgqFr2/ZsuX3Uw21bftiZlbt/1JnLmqwqu11fb1eX5Q1W1f4O0MwGEHhtgK4BM/znqP94HqoYVyJKzOv9H0/8UWk7hQ1yqK7EjzQtbddO42stEullG/pZIy50heBKWY+nYjOQNZtDO7gA2F534+CIPjm1q1bccbcJ7ZtfwbnAcXcj06ShSyEwCXL3xT6uvKu2bb9XmZWvQ8TAwMDD8qDwGCuvEd9O/d/D+gcfBJ7IaY8CGnXuR1oR0ZGjjNNc2q21m7XdWMxXtasWbO40WhgYdpbxkdE51er1f/VmTxuFycmJnxFOvvdExMTj05Du6wz/my1cRwHi/lfYtiOppr3Ldd1E1Fkl8vlx+B9aTPHP4+Pjy/zPG9ituZ/II5bqVRUG4Kfu6576lz2S7lcvoCI3hvDutY6RWDXvSRPQP+WkmSViz3XdZMAsM/lx5WZ7XFAwYZh3BWySmU2ZstG+xWgvI9R/iciWp5mzUvBiJbLPGOUfk9KqcXeqhFYnBwKmUxPzwtkWQiBsvPnzYazEoy5cfHixavSZB4vW7bskHnz5r0xCIJXxOCbRZmDrIhrCoXCJaOjo6BcR9AUAVMETtsKEZ3ted63EsxvX9PBwcGKaZrIrogUItrued6j0+iP62Pb9pXM/ELF3D7reR4uQOacCCGAA6TCA10hpdyW18SEEMAZAk5WlOS6Rmcxr7isNODpep6nhaebhT2zoSPEqUPwBZizCM4nFZBWfbPRaLxj8lIjDs8pKfNfL2BUwSmWZT2biL6jchAzH+P7PkoE+9L3wH7pgbwCVXFA20G9Xn/opk2b7sjaq47jYAOCTId9snTp0qIqbRQNw6yFX012IqKLqtXq+3XtK5fL7yCiyA8MGHmq1ao21ozuuLPdznGcuM3LVBP/7rquKkNlxnQqlcpXmPlFrX8gotdUq9VPzPb8D7TxK5XKJ5j53yPm/X3XdZ81F30Clj0iwruW1n5kESBY9Y085j8yMvIo0zSxrhVj9P/Zdd1IquY8bNsfdFqW9VUiUpVoj0opUXqVuaxYscIqFAoAwD84Rvl5UsrIA76iLzKQdmWZ+ZS1E5j5L8BdGhsbU91iT/2mH3rQQQdhc75IwxaAMD9HSvlLjbaJmgghEHzp5XJnZMatTUOjLoQA6D1gHLIgyEBm3scajcbFpVLp8YZhgJQjSl4lpYwL2rbta1nWYWFGYKRyZHr5vv/URA9as7FGIOJDnue9SVNdTzXTCHbnGqiybfsUZlb+huv1+vwcs147fh5CCGRGP0Gh6O1SylyqTTo2vnMFwGB8DTMDIDxNgKrVgt3M/C7f9y8VQgBvrh08yGQfXFb8WHcKQgiUIKqCP13JqLIsawkR/UFlNzM/1vf9OEZM3an32/U90HMeyCVQBWrNBQsWIDXz8KgZE9F51Wo1zaZb6cSQtQ+b8n1zKxaLR918882qemOjDYvdNa7rIiV1hgC75uqrr17hui6yqPaK4zjAkNmkMO43rutig7ZfSblcvpiItD+shUJh8JZbbtFivAmz3FDi0cr08vd58+Y9+qabbhrfr5w5ByZTqVQ+wsxtWWuY+Su1Wi0Ru0ovTDlkCgXemoq5S8fUPcx8Yq1WU7LH6Shq18ZxHGQZKBnRkPnjum7kupt27P29nxBCxWaJ6f9KSrk2az+gzDQIApScA3tIJcC2AR12kNSGZcuWHVEqlTK/FEpqh6J9jYjOSorjJIRAwFz3sqJORG/0PO+yDO1GdhCA1B+Spc4Mde0IS0UTrUeO45R27doFPKDzM7RlUlXVMIyLYwJV/yWlfHfasYUQAFZWBX2/KaWMZJ5MOy76CSHg63KUDmZe5/v+OzsZY7b62rYtY4gecg1UDQ4ODpqmuW/P3c4PwEzzPO8fs+WjuHFt274BewRFu4uklNoX5HHj9crfQ/yprzFz2zNVJ3YS0c+Y+UuGYXxdoSfRJc/y5cuXFovFaSXLLbpdKWUUJlYn05nWNwSKj4OVeJaU8vuZDdpX1PdAj3kgl0AV5lguly8jIuC8REniMjBd3zmOg3K0h022N03zxPXr1/9W1b9SqZzIzNOAV4GltWvXrg9MKbUgx3HAnHOpYRifc10Xm7lJwd9wcxu1QdqzdOnShXGZXbpz7JV27cDrY2y7wHVd1c3Hvu6VSmUdM4NZsVXe5Lruh3rFBweSHZVK5f3M/J8Rc/6U67pR2VY96aYQUw+gupGHi4SG/8J13ack7KPVfNWqVY8NguDGmMaJsxa1Bt/PG1mWdUsMPlTmQL1LlixZtGDBgp/FlNPA8wDkfrLnecA6Siy2bR/PzNMIRhIryb4Dyhh/yszfllJiXrEYkq0mPPe5zy1s3rz5RhUTWBuzvzw+Pv6KHTt2xG3+Y2eMkv977rkHl2I9I8DlMk3zl0EQfHfhwoVXJ8UuCQ9GwEBLQpKSdP5gCwYDcFshoo6yjoQQuDBUkU98TkqpwrNJOp997YUQW0IygbY6mPmNvu+rSA1Sj513R9u2f6/CEWo2m2Lr1q3KQFInNmrgBhmNRsPetm2b7GScPPvGMRfO5fcjym/4zs2fP//ncfiLHfo9bk15red5H9cdQwgBchDVhXpVSqnEk9QdK66dEAIX8pE4kET0Is/zrozT0/973wNz1QO5BapGRkbisAIQ1Dki6UZKx9GO41xtGMbpk211ysTCLDDcOrdSI98TLlj4L7Bf9gbAms3mio0bN06rx48rgwuCYMmGDRuQIbQ/CQJ0uME6UmdSulk3K1euXFgqleCrw1r0gjJ2meu6PXVA0Jn7/tCmUqm8h5lxIz5DmPn9tVoNoNRzQpA5EAIdPy5DgzkIgsUbNmzAxilzKZfLcQGVra7rDmY+8H6uUAgxZhjGCsU0vyClfHlWbghvbPGdisukwpAfkVK+Ie3YQ0NDJwdBkCrIlXbMln7IAsMB/jfM/NtisfibLVu2/DkL3bZtP5KZkcWSJIuwWigUntWpDStWrHhYoVDApdhsylZmvtE0zRuazeaNY2NjeI/Tihmyks0q5hYRfcLzvNeknYRt2z9UZW4w82W+7/9HWv2qfkII7AmXRbUB4LPv+5/LY+y8dQohpl0At46XN5j6scce++BGo/GvmHmmBuLP23/QL4RARiEyY9sKEf1H1lmf3ZhX1BhLliyZv2DBAmQrZ7nHSjOlN0spP6DbMSzHjwx4MvN63/dVeG26Q8W2E0LgzHOUouH5UkotPOXYwfoN+h7oQQ/kFqjCXB3HUd5sEdETq9UqarYzFcdxANQHQORJ+Y7runElM4bqEN5ioOu67oy0z7jSHGY+rlarqcoDM/VDt5QlAHqGSaCujqXXLpfLryOiGZheaZkDu+WL/X0cRZYbpv4O13XfNVd84DjOxwzDyOPA8hjXdYHdlrlUKpU3MzMyOtsK2Laq1WpXbvoyn9wsKhRCINgeicXTaZbHlKkBp+OlzIy1TQen46aBgYEndHKhI4RAdgxKW7shILcYJaJbmXkj/k1MTGzcvn07LqZykTAQB/yR1hLxyPGQeWQYxtm+76fefwwNDS0LgiA38OgW45vhhRmIYuDbDY1GY8Ntt92WWUDctu03MbP2YW6Kfbg0upeIxpkZZZA6uGGRz4aIOgIctyzrciKKBCzPOVCFyzUVRuCcPVQKIYAfBwKdKHHSYKHpLgo6GYzMvNb3/X1Ys7q6u9UuDtOOiF7ped7l3bIn73Fs274Me/YU49zPzPeAddYwjAdrfitVwyTC/rJte4iZcbkSJbdIKcEwn7vEBb+J6BWe52mzr+ducH+Avgcy9kCugaq4Q5VhGB90XTeqjCj1VNvgRT0wf/78h954440AFo2U1atXH9ZsNgFcpwS1JaIXVqvVGfXQlUrlC8wMUL+2QkRWtVrt5MYztU/y7Fgul19KRF/QHSMusyzMbgNwdCv9+B/Gx8etNKxXurb126k9UKlU3sbMbfFD5hJhQKVSeT4zqzAN4Ai8g99m5r+apvkoZkbZ7/Fx7wgzV/LCqapUKiPMXFPYcJ3ruqfE2dj/+3QPaKTXv83zvP9J6zeUqW3ZsgX4HG8zDEMX2+LOQqFQ7jTzR4M5CMGlnyB7lYgOZ2ZksSLYgIzDqdIwDAPf0DsNwwDm49+Z+e8A+Q+CYGuz2dx2/PHH/3E2yttt234Gygjb2Kx6ZA0i+jfP876Y5rkKIQCuvzmm74/C/QR8iqwvZGy3lnGg7BEZ2wjmIRiAINpfmfkPzLyNmbcWi0Uw1eXGcBvi/+ASbZ6GLxAc+yIRXV8oFH7XymaM7zfKWYMgOBmHqJjgxozhiOhLnudF7qPi7LMs60P4FkW1yzNQFVceZxjG66WUAKifc2JZ1p+J6OGK/e0az/NACpGXgBQCgQvVueUpUspf5GVAp3qFEKMxWbRzNpDZ6hvLstYS0XUxz2uy25+YGeenXxcKhfWe590/VR/IbsbHx09gZsAqXBAGr7QfBxG9y/O8djAibXUMDg6uNE1zL0tpO2Hmm33ff4y2AR00jLtEY+aX+L6vYsPsYPR+174HZt8DuQaqRkZGjjZNE/TQhYip+q7rijzc4DiOh0zbSd1Iua7VarEp1xrg4L8544wz1q5bt24GqK3jOKiBjkxZ371792Gjo6Nxqct5uCNXnWvWrHl4o9HQLuUgonOr1epXooxyHAcgrjOeVV4A/Lk6Zz9Trgo+6/7GZtslKCGYN28eAsZROCkTzHzRIffPk0EAACAASURBVIcc8olWSndg2QVB8HoienbEPJrNZvPwjRs34uCZh8SV2v7Add2z8hh4f9UZlifEETMkZiIDiHmxWMStKwKcYMKNPOS18e1dIS5Vx9hSGoGqXVLKhe2eLw4Id91117wdO3bk9T5n9lqFwaqvGYYxkEApgkQIHiC7MpHoBKoKhcIj2wUagQW1YMGCgc2bN8OvifG5Ehmq0VgI8QPDMJ4R0xSBsrePj49fpovxhd/W/PnzLyKiSwzDMDVMMZj5M77vI8CVSoQQuEhBQLit5BmoEkJM23e2GgDMTd/350zW8VT7hRBgQQMbWlsJguCksbGxOAzFVM90spMQAthyqszJROxuHRmTorNGiXki0O8UJnSrC4KKKMkeiRlwJxG97sgjj7yida8V1W/ZsmWHlEolVMy8SncyRJToosm27bgLwZuklI/VHb+TdnHvPBGd7XkeiHb60vfAfumBXANV8JjjOAAqPlWxaVheq9WQuZCpOI6DgNFU8LzthmFYcSUUuPn+/e9/fzURtaMv3tpoNE6+9dZbwWg4Q8rl8v8S0csiJvJX13WTHFQy9UfeyloDgzHjfd51XdyKzBBs4A899FCAGLamz48uXbr0uNm4rc/bd3NJf6VSeT0ztwWDjco07LX5OY6DzJi3Rth1dxAET9+wYYOS7rdSqTyVmT9rGEbrb/oG13VzxWNwHAeZI89pZz8OebVaLfUhr9eeVTfsGR4eXtxsNuOYos6VUrYNrgPrbPfu3acEQeAQkR0yYy3toAQKQaoneZ6HMq+OxbKs04kIeFiRn+Hh4eHS/rC22ra9mpl/qCrjjHDCJVJK0KZriwbgbs+DO2OyYTYV8FhU+0Ew6Z0qpfydtoOmNBwcHHyuaZrf0AxWfVRK+fo046CPbdsXM3MkE3HOgSol61+GJcRp3ZO6X1y2GDM/sZNSWh3D4jJfgU0rpUQWY0+KEAJg8yoMyf0iUCWEeJJhGMrMNmb+CzM/KS2unmVZb8DvSfNBv0FKOQNKJKrv4OBgHMbyb6WUKvZGTbPUzXBRtGvXrgdilPV0cDYTR/SVHNAeyD1QpVFi8zrXdRPfZsY9tRCMGzdAU0FWL3Zddyp2VVs1YbAEt3I48D0IqfjMfGUQBO9SZUo4jgOK0Ge2U4q01lqtlhkYb9z8u/33hHg/kYDPlUrl1dhItrH/LNd1cevbl1n0gOL54Cb8zFqtpjoQz6Ll/29o0CQvWLAA2X/tcFSQ7fhk13VVpXX75uA4Dsp4kPk3Ff/uHNd1kdWRm5TL5XfjhjBigP90XfeDuQ2+HyoeHh5+dLPZVF6WMPOzfd//Xuv0wwM4NsD7WGY7dBHKTJ8+OjoaWXaQVL8QAhldALSNlD179izKE0cqqc2dtB8eHn5Es9nEs9Itsdw7HMr2fd8HzbmWhEDuSnIUMBLmXA6lZauqkRDi/YZhqCAYAmZ+pu/7Ha3tGuPsNZOI3ut5XlvCDp3JCiFeBwKCqLY5B6qAldbuknPSnCuklOfpzKPX2gghcIEINrQoybvsTqf078lSyl/2mu8m7YnDqEJZm5RSixW7V+cIu4QQ3zQMQ0XKsNs0zcePjo6u72QeGuNMrimJsL9s217DzJFBeSK60fO8kzqxXafvypUrH16v15XVKkRU9jyv48xrHXv6bfoemA0P5B6oWrt27fydO3eCtaAtwCYz/7JWq2Ejnbk4jvNKwzA+NUXxbmY+KQF+DIBvF7bWS0cZ6jhOZP15XsDxmTstpcJyuRx3az9Ns2maD12/fv20LAbcHoS4QNMAO4no19Vq9QkpTet3y9ADlUrlQmaOAvs82XXd/8twuMxVVSqVc5m5XT0/ylpOcV33hoSDohQPwW+wHY4efPDBx+umsCccZ1/zNuvavr8R0TOq1SoySvqi6QGdEi7TNJ86OjqK7OB9Ytv285gZWSKZfEeJ6GcTExMvzhIgG8ZaloVML7BNRUqhUFi2ZcuW32u6rOeboeRsYGDg08DvSGDs/UEQVHRv+BH0ZmYl7qVhGD1/260B1vtdz/PaZnAm8C2y65EdgEMXANdV8l9SyrY4iDrj2bat+kYhIPlB3/czx0aFbUIIXFwAuiBKNkgpyzrz6LU2tm3LMFs0yrRc33UdMHXDMJ4gpfx1r/lu0h4hBEhWVGxx/y6lnHpm6dWpRNoVltIDxw6X/G0FWfm+77+x08mFgRxUy7TiKbaqTpSpZlnWYxGMUth3g5Qy18x5jG3b9ik4I6v8VCgUjtqyZQswI/vS98B+6YFMNthxnnEcR/XxrjebzSPzwHRBGd/27dt/2/Jh+EuxWDzh5ptvzpRWemRk5AjTNLFYzPApEd1UrVa7Us8c9yzy+vuJJ5548O7du+9W4JFNG5qZz67VatPqqh3HebthGK3lF7jNXZ0guJjXFPt6kaJQqbyMmdtS4ZqmuXr9+vUd3ZDl7WTHcdpisTDzhbVaDaV8qaRcLl9gmqZXrVZzxeiAcZVK5cXMfEU7Q03TfOT69eu18eJSTXY/6zQ0NLQqCII4EOAZByAhhJLVNoGbAOr9Ds/z3mcYxgzswwR62jYNM4yAFRkpRPRMz/Ou6nSsXutvWdariQilynEHmb2mI1joed5puvMQQqAsQ4WJdZGUEhlLPSmaWWGP8TwvExZTy7I+QERvUjmDmd/k+75uSc8MVXEZVYZhvEdKib1G5iKE+C/DMFQYVHsGBgYOjoOgyNywUOHg4ODBAJonImSD/DUIgi+PjY1pXS4JIcCCNhRlWxAEzxgbG8vtkgTYko1GQ4nxSkSZvat5PAMhBIJoqgDHnAXbn/SXbduPAyi6wn+NUql0zKZNmzI5gwkhcI5QsroHQfC8sbExQCZoicYcfiOlfLyWsg4aCSFQAt0WaiNUC3xJkH9lvm/owOx+174HMvVAVwJVq1atekIQBCoa6Oe5rqu9iCTxgOM4jzYMA6U8U6nAtzebzVM2btyI0sBMRFESVQ8P8JngjWRibE5KHMdB+mksKxqGJ6JPVqvVfbS1ISA76vdbQX2/7LpuklvxnGbXVwsPqIIkzGzXajVgnfSqIPsJjGWtN/rXuK4LRrY5IQqWzdtd1z1qTkyih4wUQmDDqaQ0B5Oj7/vAn9kncSCnmlO8NgiCN4yNjSHolYuAhY2Zd8VcInSUxZKL4RkpDQ8d2F8s1lGZpFxPoxzqK1LKc3XGnY02GkD7t0spkeGcCeC7ToZAp3Trtm2/k5kB3h4lub3rQghAPwACQiXHSikR9OmqLFmyZNH8+fOvJ6LjpgzMzHyx7/sIkislrmyNmZ/j+/534/Sk/fvQ0NCyIAi2qfoT0UhW2H5p7VT1E0IAtwn4TW2Fmd+q8yzysC0rnXHYUcy83vd9VVZZIlNs2468PJ1URERP8zwPzLZaEjIWqgK4v5JSrtVS1kEjIUQknEyo9hYpJQhb+tL3wH7rga4EqhCXcBwH6ZlLIjx5heu6udXth2Vp+MEXp4z/TyI6p1qtdkxlG5Y3gkWsFQAcw73Wdd2poO777cvkOM4nEzBxbHZdd+WkMxzH+aphGOe0OOeBRqMxGAVev986socnpsKc6/Vsngh2ykahUFhxyy23/KGH3T7NNMdxXmsYRjuK82+7rqvChZgrU+yqnZZlnUpE08r6Wg1oNBr2tm3bpgVh48CFYyaxNcwc6Qj3R9dRGgGV70spn6Wrb661Q4nIxMTE94holYbtX5ZSal2OCCHw/E5X6PSklJFZKBq25NrEsqy3ABMqahAiyqTsb1J/yNiFzOtIBkBgHXaCh2VZ1seJKJJ92TCMN0spP5CHY5cvX760WCwqS2iZ+TW+738ij/FVOhXMjsjGeGJcyZxlWb9DEFfxrrzI87wr85qXzoVCu3U6L3vS6I1bLzrFZ0tjU9Z9hBAoXQTsSlvJquxvUrlt20PMrAz8mqZ5fBLcx6GhoZODILhW8a7/n+d5J2ftu6n6wgsmVOm0hc0J235OSvlvedrR1933wGx7oFuBKuATqJi27lq6dOniPFmHwiwEgBRO3SAFRPTfp59++rvWrVuXOnXScRwAsLYLtH3IdV1lmvtsvwBZjl8ul88hIgScdCTYvXv3EaOjo/9yHAdp6EgVnvY+MvO6Wq32Th1l/Tbd8UClUnkOM7fNfpyYmHjI5s2bcQjpSQnfs99MNQ4MYbVaLY6Wvafm4zgOymLe0MaoC1zXnfNArN12tk4WRDsMJ40SI9VUrtmzZ8+LugVgblnWVUR0psKgXaVS6chNmzbFMQylejyg+w6C4JDdu3ffumPHjntSKemwEzJKFixYgO/MsTGq/ialBJtnbBaRTilbs9kUW7duRbZw5gLGvmKx+DBm9jzPi2OunDG+ECLucukDUso3Z2m4EOIOwzCOUOh0pJRahBbtdAghwM75IoX+86WUbcvXs5inEAIlTZHkCsx8ne/7p2Qxlq4OIQSIfCK/DUT0Cc/zVME94OVcB2Y/xZi54isJIc42DAOYgJFCRA9N8zvQ9WOn7Wzb/g6IORR6Piml3Fdp0Ol4WfW3bfskZn5HuHY2sV9vNBpv27ZtGxIQpokQ4hpg8ynGfrWUEutOJqLDjNdsNo/YunUrsum1RIOA5FopZWRmnNYgMY0GBwfPNE0zrhw/17Usi3n0dfQ90KkHuhaoKpfLgoi8KINRM583vovjOC80DANBpVa8io1E9Oak2VUAd6zX6x9l5taINhPRu6rV6rpOH9Bc6r969epjms3mjA+X4pk/85577vnpoYceirJIq6UdcHYs13VRstKXHvFAuVx+Fm7ZI8yZN1vYGzruqVQqT2PmadTVczEY6jgO5vC0ljkHjUbjkf3sQ503YXoby7JeQERxTI1LpJQzGN6EELg5Bi7NNAIITSu2mqZ51ujoaOR3UVNPbDPbti9m5veoGjLzC33f/3qssgQNli1bdkSpVEKWxSRhyp4QIwhg2bGBoARDaTVdsWKFVSgU8L05SNUhCAJLB1Rdo3QO4N3rfN/P9MIFe4+77777k0T00nAewHL8XKPReO1tt90GH2uJEAJYdy+OapxHKZIQAtnnK6LG7BQcWAgBmAkV+crpUspp3wEtZ2k2sm37izEg/ii3s3zfB4te7mJZ1hIiQmkxsGzaChF9yPM85aVqXAAiLCGMZdVOO2ENvJ5g8eLFB+VNZpLWfvSzLOurqORQ6Oi5UuGQbARkHK1r5t9LpdLxmzZtQuB5nwghUEYfid/EzOf4vh/3vU3k5pgy/D1SygVJvjdDQ0OnBUGgKhX8hZTyKYmMTNg4LvsO6ojoUZ7nKfEnW4cFdvOWLVvOJKLTmBkXMsTM/zBN8+Zdu3Z9c7YukhK6p9/8APJA1wJV8KnjOMD4iGI8udR13bfk7ftKpbI2ZGpqh1fxCyL6TKlU+vFNN900HmULSv3uv//+FzIzmGNaAyy3M/Mra7VaHE5B3lOdFf2O4/wtwaENIIG4wcdBb5oQ0XOr1ep3ZmUS/UEjPVAul88iIlC/t8oe13Xn97LryuXyGUTUCvb6btd1Z7x/vTqPkCACjDoPnmojM/+qVqvljpnQq37pxC7Lss4jIlxgREqpVHpEFPhruPE7DUEDZgbW2bwE9uwMN+65lgCGN+LTsgnbrLmg3AbQbyYBpBDE/TrDMJa1GeudnudpXeSErIUI9ICQBBiGuFh6o+d5SRk695ph2/Zn2lwutX5/nuR5XmTpx2TjlStXHlmv15HJpNpL/XlgYCCzSxcAYhcKhZ8w84lt3rOvSylxIaclcfTuRPRaz/MyhS4QQqiwLOtSSnxH0ma4kxACgNuR5TJBEKwaGxtTsmBqOS+ikWVZqsucyV5fkFIiyylvMYUQ+A3GsSafJaUE0UikxIFWE9H7PM97a14T0vjd3iWlPDyv8bPQK4RAJt/LonQhw9v3/Z7K8I4ppZ2RcRlXImoYRuy7ltTX4W9+2p5oio4/SCmXJtEZl82UlHQjydhoGwYHEVyO/K4Qke95nkiiO9SLrMSocnTsRy7M+sIqiY39tn0PtHqgq4Gqcrn8OiL6SMRjGHVdd7gbj2hkZOToQqFweXioaDckgie/ZObtRPRHZh4nogczM4JbZSKqtAH9RhbVl8bHx9+EcrZuzKMXxyiXy98hIlVq81SzkTUF8OfWDLdfuK6b621FL/puLthUqVSewcztNrR3ua7b05vEkZGRU0zTnEb1S0RfrFarkRvHXnsmlUplNTPPYODCwbtWq4FdtS8JPaADxmoYxtFSyr/HqV6xYsXhpmleQES4dJlK4KHq2iSi13ued1mc/rR/dxyntGvXLgRUWokEpqkkohd7nqdbvh1pDtjkDMP4P2aOOiBMALMyzqe2bR/PzGDSbGXWeyDEHbktqU8sy3oKDhqqfkmyy4QQYDrFnkAl75ZSdhwQDzGegKd2QtRgCGD5vg+241iJOzgbhnGJlLKViTdWr6qBEAJ4gFF4pX+SUj4q7QBh9pASb7DZbD5869atf007Rly/ZcuWHVQqlXBhp/qtoXxqdScljnF2AObCsqyPxuB1Qc2f6vX6irhMPCHElw3DUBEDfFpK+SoNu1I1EUIg0A6YiCiRUko7lfIuddIotb1eSqkqr+ySpf//MEIIrLEgpZoh7YIlQgjssSJLW5Ft6Ps+3qWsBMFYfE8KEQpvkFKqmBZndNMoM/0zES3zPA/jZi62bf+UmU9VKUYppu/7KobRad1DLC98Sw+NMbjJzKf4vq8kmMl80n2FfQ9EeKCrgSrcPpZKJWwQpoKa7zONmZfXarXEG8+0Tzc8dOOHvg/UO4Uu4Fz9iJnf77puqhveFGP2bBfHcYCdk5pa2jCMCSJaWa1WUR7Qlx7zQERWEqz8o+u6UYePnpiF4zgAgv1dizGe67o9C3bc6rhyufxhBDVa/ve76/U6Mn5ywRfqiYeXoxGWZSGw9FnVEPV6/cjbbrsNmWxaIoRAKSBuz5+q1eH/NfqolPKNHWSTKIcSQgCjJi6LA8E4YATFBuWiBguDBcjiOCZm7i+QUioxZ2KwtVIdjC3LWkFEcd+XWNsm5yaEQGb1+2Pmuts0zcckAfRt1Reytv1UBWiNPklKDTUwtvBOtq43CV7pmU2FEPcpytA6on3XwJu7T0qJbKtMsgajHCGEANkFSC8iBYf8iYmJNbfddhv8kamgNPSee+7B+vOCOMW6QVkhxKcNw3hFlD5mvtL3fRU2WJwpcevXXTHBv64wsXUyCcuyPkRE7fAlJ9VullJ2ch7pxLwZfUNcPxXuaHNgYGDBVMiHuMw74GtKKaMSFhLbPzQ09JAgCPButJU076VlWS/BJWbM7/eVnuddntjgmA6WZb2QiOJICVDq/Wjf93WZ6xG0rrUwfqos6fnfUtZ+7+vrXQ90NVAFN1QqFaSsnxbhktlgyKNKpfJUZgYYOgAAUVqgI2NE9JMgCD7ZzeCajmGz2WbVqlVPCIIAGBFp5b2u616ctnO/X74eCBk025UpdS0jMu0MHcdB8AA33dOEiKy5EBjFTf2hhx4KnKTWsuUPuq6Lw3JfUnjAtu0LmVm54TRN87AUmbIUUnVfqrjtbbX4GwMDA+fmgfVmWdZjiQg3qnGyoVQqndaKPRLXCX8fGhpaFQQBAGB1MLsukFJGAjyHJZUAXn9Qu7HTlD5AjxAC8AOAIYgU0zRPGR0dRbAtVgYHB482TRNZPMqST2b+SxAET04DrD44OHiMaZpYd3WC6toA6JZlvZWIQHTTVrIG/hZCLDcMQ4XNdLmUMpIxLO5h2La9LgR9jmr6Wyllu5LJONWJ/h6WveLSNa4M+NqBgYEzs8TiXL58uSgWi9/UIA3AnL4ppXy+zuQ0gprXSClR+py5hP5UYvEw8xd93+/p7GghBLIqVVkwt0spUWXQE6LzzWj9NlqWdTkRXRg1AVSeeJ43ia3X8Txt2z6Fmadlyk9VmgY7LcSeBHthpDDzHY1GYzjJBVbcZIeGhpYFQYCyZGXWExFd7Xmeihxl2lA6zMYttjVQReR53v1xNvf/3vdA3h7oeqBKxQyHxaZWq02CruY99xn6UR5hGMYaZj6OiFYw85FEBBA+AHqDMeJOItrGzNe7rpv6xrnrE+vigMcee+yD582bl7b0ESnodj8zpIsPLOFQ7QDJQxU3u677mITqutp83bp15tVXX42so1YsrTnBzuk4Dm6zcas9VR6o1+tL0wQVuur8Hh5MCIFyFSULUcpA1d5ZCyFwAQKQ8kgw4xb3XLNo0aLnqXAS07pTCIFAFbCe4uSPRPRyHZymUBFubM8nImSS4JsZK0Q04nkegM3bCsooC4WCKottl5QSQaxE2TFxDGihMcdKKZWU51ON1gDQnmx+N0qxPM8DmLCW3ZZl4fD/eSI6Mtap/6/B86WUCFTEioYvHhgYGHhwVoFTjfE6YgSLK5lh5s/4vh+ZFRTrsAQNNMq89mpj5vXMfPbY2JiyZDFuaNu2H8TMKDnGpUVcgAzqfjMwMHCabpBMg5Cho2w41fw0SrHQ/c1Syg/E+Wk2/67xrWlIKQFanhajLdPpCSHONwxDCSnQ+m0UQiAQpypz/r2UcgZuYVrDbdt+JzNfEtWfmc/0fT8RBqQGcP/kcN+TUj5Hdy1XzXF4eHhxs9lEVU6sb0zTXD06OoqScy2xbft/QIyh1ThspEsokkRnv23fA2k80PVA1cqVKxeWSiVgZbS7JZ0oFotH3HzzzZmkQiPwdPDBB3Mvs4CkeWi93sdxHGBPgU0iqZzluq4S0DOpwn77bD1QLpcBGj2DDYWIrq1Wq7nS9WYxE8dxgO+0ukXXeKPRWN7LjHko5ZiYmADFPbB/9gmyIarV6tuy8M2BqsO27dcwcxxgtBZGVZQPQxBTbJZ1y2OvD4LgzLGxsZ1ZPhfLstYS0f8l0Imb6m8WCoWrt2zZcntrPwB7g7kwLHOKIkqZMZxOOUZcSUeotC0bo2p+caxUhmEkvk0OM57A3qhLKIGMrq8EQfDDdgGKJUuWzB8YGDiVmUFVr72uAr/u2GOPPfHb3/42MJBiZXBwsGKaZtyBRzvwFTdgXKCUmdemxUYJM/BwSRaJDZcDPk7klHFp12g0ZJsM2HZ9kLnw/vHx8cuSsm4JIR4VEjm8Jg6DbsrAG/bs2fPE7du33xv3zCb/rpF5uklKeZyuviTtYgC996oC5qzv+9ck0dvttjoBN2Y+3Pf9yFK2btoshECJ3utUY9br9flT8c00mVAf6/v+TZ3OZe3atcXbb78dmYuRuHZBECxNGgTWCMpONf1SKWVHRGD4DRuGAdzEQQ2fXCWlfKZGu31NNIgIZqgjomHP80aTjNNv2/dAHh7oeqAKk3AcJxKUsRO2N2RM/OhHPxLNZvNEIsLm7inM/KxaraaVwp+Hgw9EneVy+cdElASbBZuM79ZqNdxM9KWHPVAul08lIoD5tsoPXNfFgbWnxXEcZM60A3y9ynXdRB//bk7UcRwAGr+9Zcw/jo+PYzPRT8/u4GEIIYAlg0ygSGHmYxLgQbTVEzLEoSxON/PwN0T0tKyfrxAC2V1a5T5TJoIbfuBLIpP4DiIqhdTWYL2NArGN8metWCw+afPmzSrsk719hRDIZlZlaG1i5pN1D3a2bb+Imb8S86zX+77fGsyOfcM0ys6idKAcGUFAXOBBUNoLYhmdrJh9OlFa2Gw2n7Bt27btscaGDWzbnsfMOBS3La8Mm9WklKs6zfIYHBx8ommayr1YJ4f0EHgfjIJRAsKboz3Pm/SzrptSt9M5tLcoB9s0Atq/MAyj1mw2by8Wi/+cBG3GwfzOO+98VBAEyPhHZiRAq7GeJNnLy1KptDZpFu7g4OBzTdP8lsIZf5RS6gbiE/lUCKFiDN+rq1AoLNuyZcvvEynucmMhBCpGfq4attlsijTlwXlMJQ4YHUF9KeU0MqSwFPovqncyK3ZDDSypnVJKlNFpZa9O+lAI0W6/pXLx5QMDA/+RJvM0ZBgEnpwOGdH9RDTkeZ6yDLbVUCEEMBQTwUN0shbn8S72dR64HkjyccvMS5VK5cnMHLVYX+G6LvCitGTVqlVLm83mk8LAFD7a05hWAHJeq9Uu0lLWb5SJBxzHeZ9hGEl8fk8QBEMbNmyYgR+UiUF9JZl5QPHbvdJ13dyAVLOaQLlcfh4RRZXFvMp13dbSuqyGTq1nZGTkONM0kQmGkoB9Aqy/Wq2mZC9LPegB1FEnzT+rNHhkFE9MTPyQiE7WdPGvSqXS07Mshw4zPXDwiwM71zQxUbOaaZpP1sX7EkIgSymOgns0CIIXjo2Ngc47UizLOp2Ivh2X9ZQG0wSDhrf7yFZTMZMlcpZuYwSpisXi2jQHdSHE90AZHzPWf0spI8tr4uwMs+MQRJqWEdrS7+9SyqPjdEX9XaOsaoOUUjvrL60drf00ALR1hkKVAQICWmW1UQqRTUlEz9H9/U3VMzQ0dHIQBNcqjAVQfRyjmM5cp7UJ1yuUAKsC4vcODw8fpptJmNiIjDro4OMR0eM9zwPD4ayLEAJB3VZMzKl2tQ1O6gQWDcNQYhTGTX54ePjRzWYT3zHVO/c7KWUkQ2rUGBp4bO26bgJQvm65PLJZC4XCJQr2+XZjpCqNtizrBUSEcnNd8aSUOniIuvr67foeSO2BWQlUhVgxiAg/rI3ldy1dunRx1AcHgSlmxkbwRGZ+mkaJ2a2u6x6f2kP9jok9oMIha6eMmS+s1WpK1q3ERvQ75OKBVatWPSkIAtz2tsrlruumBsHNxdg2StesWXNIo9EA3ty0W8CwaR2bhl4K/oSl0ijNaT2sz4nAYLeeayfjCCH+3TCMT6h0BEFwXFwgRNcGlHUtWLDgOyF5R2w3AFo/+MEPPj1LzKrBwcGVpmkiqDLtYifWmA4aMPNPJyYmnp+k3MiyrPcQkQ65xh5mvgx4Kr7vTwPrDmm5wbQFAN+4Pc+esFQk1aVJyPb4ax2ckQ5c2dp1Y6FQOHPLli0ouU8snxgOrAAAF0tJREFUQggEqRCsUgmykd7seR4YfRNlJ9i2fRQzfz8ukxDvh+/7iTKxpxoshAD4seoblCnbmK6jwwAmAqSznbH7+YGBAVzG1HVtn9pOI2PNaC0DSzNOax/Lsp5FRN9V6UoKLp2FXWl0hCVeSqY2Zn6O7/vK+aYZO2kfHVsNw7heSvnEVt1CCJQLxjH77SGi8z3P+2oK20DKgMxDZalcWkw6IQT2A9gXpBGPmb9VKBRuDoLg981m8+558+YV9uzZ8xDTNJeHrK1PT8DAN2nD16WUL0xj0NKlSw896KCD8N6B8TRWmPk1vu8r90SxSvoN+h7IyANxm7aMhpmpxnGcDxqGASruGUJEJ1Wr1b3sRCFT10nImGLmU1W1yBHGchAED+9n6+T2KGcoLpfLK4noVp0RiejX1Wp1bdLNr47ufpvsPVAul08GHlUbzV0BJF+9evVhjUYDAe6ja7VauxLE2Ek7joN+WEvayQNBEDxjw4YNqpvj2DEyakCO4yD767kt+v5Rr9ePS1q6kZFN+50ay7IuICJloDwIglVjY2Ng48lEUHIVBMGVyG7QUYhDfKPReOZULBCdfqo2lmU5RPQjTQydToZDkOPDQ0NDFyXNeAiDTJs1AkyT9jEz/5WIsCk3Q0ywJFk6n5RSAhcqtYChLAiCnzMzyiLzlm+FoPepy3/DQMo2Tfy0HwdB8A7N3wIA9lFieikR6WBW/peU8t1pHWZZ1rcVv6ede/bseUSSIGlaO9r1w+/dMIzvJMyeyMqEgIgu8jwPe+7UsnLlyofX63VlMLRQKDwybcA0yjCNACS6zkoQMqkzQ8B7Je4gEb3S8zwlC23ScdO0tyzrPDD0qfriu+l53gyGvzALDmtwJF7cFL1fbTab79EpdwxLlV9uGMZ7DMN4sMa8zpVSKku92+kQQqAUr2cYJIE9OG/evFM6yazWyDiddMUNAwMDJ6cNaGs8k36TvgcSeWDWAlVhOUtbxh/ULxPRHYZhIFL/6EQzat/4Ja7rAherL13wAD4mCxYsANYCDgoq2U1Ex1er1bEumNUfIgMPVCqVtcw8A4yZiN5ZrVbXJR0CALjbt2/HhuNwIjrMMAz8Q63+4cx8hGEYYLp6RJh9if9Olj484LquClcl0pRyuXw2EX1DYetuZj6nVqvFZRkknW6i9o7jvNcwjFaQTgA9P7larV6fSFm/caQHdDbkQRCcNDY2tvfyJCsJwZ+/aBjGizV1/mDx4sXPzZIcJDx8IhiqwwSoaea0Zn9g5pf5vp/6fRVCIIh4QZrBE/b5h2maQ2nKolrHWbZs2SGlUgnP9lkJbdBt/i8Arfu+D7yxjsW27XOYWTuzAQcnIvoV/mua5l+DILi72Ww25s2bd1gQBLhIeEKYMYjMBy1h5id2+J5cCua3iMHeLqXE4XbWBL/30dHRS5m57QVtTobtCAHkf9Wp/nC92m0YRlGhy5FS1joda2p/IQSCqEomNNM0jx8dHdW6HM3StjS6hBDw4bQy/hY9l0gpgZE0q2JZ1leJ6ByVESpygoSA5MBARCbqb4IgqBaLRWAh7sUwZGbsCR8FogUEejWD3nvNTgOkjn62bV/JzKmyl3J4aLfs2bPnKVkE2UOGRDAyRp39f2ma5tlZfANz8ENf5QHqga4HqtauXTv//vvvfxzwVQzD+I+Yj15Wj+Xrruv2yqKT1Zx6Wo8m899bXdcFnlVf5ogHRkZGHm+aZrtN7y3MvIWIDm6ZyiHMXCAi4Evgdg3BJTBj4f9emBQweIru1IEqrEE7d+78YxgEi/I8MjPeWavVQLWcqNQli0dZLpffTUTt2Pz6v5ksHDxFhw5+g2map4yOjuZBymEKIXB7rhuI+frw8PCLk2YmxbjMtG37ArzvGWZX4ZDxvkWLFl3WacnikiVLFs2fP39zkgNKilekHgTBqWNjY0kYEWOHsW37Gcz8AcMwtAM2MUoRRP9EoVB4b8aHCRJCgDENcAqzIROLFi1a1Mm7EmYI/q7NnvKGxYsXPzHLAG8nDhJCPN0wDJQpqvC6OhkCfUFC8GEiujRLMgYhxB9UmXemaT51dHQ0VaZzuwlblrWEiDCmSnZIKXGhjWBHz4sQAqQUkVmeKGH2fR9no1mTkM0VwSLs0SIFpWyjo6Ng3ZshYfYTfo8jszER4Pb5vo/LzcQihAD7+DMSd8y4A0paJyYmXnTbbbcBoy4TwTqJskYiwuUULoNBpgH8QJQWguyl6/vdTCbWV7LfeqArgaoWwHMEqFoPs3k7+M4zzjhj8bp16+bEhyxvZ3RDv+M4NwBHTDHWzUuXLtWm0e6GzQfCGI7jHDoxMWHOmzcPtPJFZh4IguAg0zTnE9ECZgab14MQWAqCYG/aNhFNplgDtBKba+UtW5f8mDpQBfscx3mrYRj/o2Hr/xUKhZffcsstcZtlDVVaTVDuhxINYOpME2xaqtUqNk/9jYSWK/Ua6TBzhex7P9HTmLgVAkX/i9tpzZ5fkFKen/V7sGzZsoNKpRKyu/APOJBxGbHtzK0S0eebzebXxsbGlCUumnPd28yyrBWGYVybU7AK+4KXpCkR0ZwDSuDOIiKUkoCNOBGbXzgGcLe+UCgUvrRlyxYwBGYuy5YtO6JUKoEyPoss9qT23SSl7DirLwwCIcAPIGB8376ycOHCN7iui8BNzwhKwIIgeDXAl8PDYla23U5EnzEM49N5sBsKIXBJ9XiFsedJKa/IajJCCKxzn1PpY+Z1vu8jyD4nRAgB0odjFcZ+Q0r5gtmcjA4TrmEYW6SUqnmAtRUB+t9qMtplPeXUftRgO/xXzviOwEt9t+/7KIXun1uzfjP6+uaUB3IJVK1Zs2ZxvV5/Am6hU+JKZe5EANhVq9VbMlfcV9jWA47jXGkYRlQWG8oCy67r+n33dc8DMYx33TMkm5E6DVQh6AYadx0waRy43zNv3ryPd3LjHzftsAwSgNDtAIF/V6/Xn9QJRkHc+Afq3y3LQjnBD2Pm/ywpJQChc5GwLOgK3XIDIvqE53mvSWvM8uXLRbFYBBYTDhJXSSk/OVXX8PDw4kajAWzI1SHW0qOICLevKL1FRiTW8LuJ6E/M7BPR+maz+bOxsbFUIOQ68whZnnDTPazTXrPNAwjM5flsp9oRgtru9SuCKUEQPJKIjpqSaYqyoHsNw4AfwXgIeISfSylR/pS7DA0NLQvJMpbkPtj0AT4gpYwq2+uyKd0b7oQTTlhw9913A2T9+SETaNJydlxaSMMwEED6/vDw8HUZZ1tOc4YQAng/key+RPSfnWJhTR1QCIES/bMVTwSH+KVSSmRIzwkRQiBrE7isbQXkGb7vg8F8VmRwcPAY0zTBpheHAaWFKWfbNr4hPw5hHbo2p04AwS3L+l0Iet7WXlxchWdbZL5leo4mohuZ+RVSyi1dc1Z/oL4HetgDmfzAVq5ceWSpVAImARZf/LO7PGd8rECj+pdw83xPEAT3ENE9+P+ZGRvqa13X/X2X7Tpgh3McB9kqyFppJ29yXRfsQX3pogf6garpznYcB5uMjyV4BACSfW+9Xr8i64BRuIYCb+bkNvZs3r1799qMS30STHv/bmpZ1qlEFFeukgqUNYnnAGp9xx13fIOZn63Z7/1Syos02+5rZtv2i5gZuE/7qO6Z+YO+7/9nUl3dbo+sr2KxeAkY6DKADUDW78u6FQTqtq/Sjjc4OHi0aZrALUNWXbfkdCklgP0PWMHv/5///OdIEAQrmXkpEaFsCUHhRUSEkk8EMVEC9Dci+hsze6Zpbunmd0EIgQyPdiXpk88t1ZoU9dAty9qoYkcjoq95ntcLGd5Tp4Ay2kcy88NM00Rm+j2maf5zMsPNtm2A6qvW+M1SypXd/iHgd18oFN7AzGC7w3unEuDLHqObtbdixQqrUCiA6RaZjt2SY9MGe4QQCBJF2jpJrmLb9lODIHhvCga/dj64npnf6/v+z7vloP44fQ/MBQ+kClQ5jvNoZn5MWOParcDUn5BqyszbiegvqD8moj8GQfBn0zT/1mco6K3XrVKpXMjM7ZhLbjzjjDMe3y/D7P7z6geqpvvccZxSmLGQNLCO4PeXCoXC19evX7++0ydZqVSez8wImAE4vlUQXH+c67rAi+hLDh6wLGstEcVhE71KSvnpHIafphLv5Pj4+Hd12cGY+R2+7wNHTUuGhoaeEwQBshSAGTdVGqZpiii8ES3lXWyE7KogCF4JoHaNm/+pliED5TdgIfQ8D3gcfWnjAWT4bd68+XVE9HZdSvMoRxLRdmYGJk/U4RcXiUd5njfRfxi97YHBwcHnmqb5LYWVV0gpz8tqFrZtf1ABPo+gnSWl7Jlv4+Dg4JmmaQJ3VbTxATIlQRy0OIa9/B9Syodm5UOVHsuyDjNN87QgCJ5JRIAVwJ5IRxKzo4bZg28notdPvSTRGaxNG2SbqvZtUkqZdF+3bxjbtqWKtbUFm4ssy3q6aZqvZmaUxe67AIqZ2x4iApPwj5vN5tfHxsa6BS+R0uX9bn0PzI4HYgNVJ5544sHj4+OrTNM8wTCMNQhQZVxT3zpzZEdtZmaXiG4lok179uy5dfPmzXsZIPoyNzxQLpfbZSnsajabx2/cuLErZQxzw1Pds7IfqJrpa8dx1hiGATa31oO77oPBIewXAJhvNBo3bdy4EZTMsYLb8/vvvx/p4xdjXY3oAPak0/tBqlh3dtTAsqxj8Z2JUfJmKSVAsXOXMGvoB0QEPEcd+d/x8fE37dixAxnEkRJmjqHEsS1GkorBSceI2WjjOM7A+Pj4CcwMfCP8jsA4h3LeRchAIaI7Q7DYrcx8bbFYvC4vjKfZmH/eY4Y08+cDX0t1cGtjRxMBQcMwPjM8PPztLVu2IKgwEGEvMNdAOd+XHvfA8uXLlxaLxcjKBCL6med5uutW7GxD9sxrDcOotDQOiOhcz/MAMdETEpYmowxTN9gTZTd+O2AM/QfYz5kZ//7RbDbvKBQKd/i+D/DrxLJkyZL5CxcuHGTmQQR5mBnZ21g3k+597iyVSkObNm0CM3tiEUIgCAd4g3NjAnatuhHI/gURfbJYLLr1ej0Sq69T3DLbtq8DC2nE5B4YHh4+tF2JLXx80EEHnVAoFJwgCBabpgn2agDS7yKiPUEQIBsSTLjbdu/evWHHjh3IkuxL3wN9Dyg8MC1QhU1JqVQaIaLjmfl4IgJbA24Gki5kSZyOH+p6IsKm5gZm/q3rurh56Msc9gAO4nfdddc00PxDDjmkceONN2YGsDuH3TMrpncQqMJvFJujO3Hww8aJiPAcdzEzboV2MnMDpbZBEGADue/AjP+9UChEPvNGo4ES3Shw8F2FQmFPO2eZpjlx8803o9S3Y4kpU02qHwcySUSgBUc5MjZTD4RlGwCmxyEaAKTAoMDNaltBKdquXbuemyVjU9KJHCjtgcfUbDbxrCKFiN7led47uuUT3D7fe++9P1JslltNAdbSd4kI5QO3lkqlO+677777Fy5caE5MTCwuFos4lLxfESzAu5kpvky3fNUfpzseAKC9aZonMXM5ZH47apJog5mxZ0NQcNQwjFqpVPrZ1IOsZVkA+W6XMYpPxpqxsTFkFvSl9z2A7BEEUNo9S1ifGsA6aurhWngRMz8PbHnMvNU0zXd4npcXuUWqp2DbdlQVQSp9ik4I2PwT+wrDMLC3Al7gZFko/ob/bVHI2IfgMPbhhxuGgVLSNAQZ00wh+v/aO7vQOKoojp9zZ0OSbpoGimyl9RPa7J3VmuwSC4KiCH4UBRH1TaRQrdA3rfiJ6INCBX2wItVKW0TEJ0XtizWU2A9rCNngspmZpKnog6WItNrUXcmaOXKWCcQ1m+3Mzm5mN+fCEEjmfv1mdzJz7j3/Pz5uWdYnYUwqlUrd4rrubfzO6en1JRCR9UOBJVsAgINh7Pg6XigUji4sxvACRaFQuFxFH6poGEZ/Pp9nqYZAxTTND4joqaUq8+5ry7KWkmgI1JdUEgJCYHkCmE6nX/KEPQd8RreDsuWX2JNeYOpUoVAYky3fQVFKPSFw5QRqBKpKnri4Q0RTSqmp+fl5e25ubqqZGhhXPpvwzuSg6uzs7LfLCZyG11vtlhDxw56ent1RsVOvPeLWPoPTnPL5PLuCLefG1nSxZ95NEIvFjoekf1HzIimlHp2cnGQdESlCIFQCWusRAGAd0/8UIjrkOA6nb0ppEQI10vFesW37jRaZSqjDbGKgKtRx+2msXhMPP33VOldrzaly/zN9QMTXLct6rVb95f6utebMIXYrXCrraNXr6dXDVuoKAb8E2Aqdt9U2MjpcJKJTSqlTiHjSdd3vRE/K72WS84VA/QQWBap4pWqCDyIqH0qpM6v5e+mJmbMr6HX1kw7cAt8rd2ezWd72L6WJBLTWPwLAcgK2L9i2vbeJQyp3tWXLlo2GYZz2VsMb2f1fxWJxU630wUYOQNpuXwJe2ik7fy3e0cGao3cGTWVqX1rRnpnWmv9H8vNDpSvcuVKpNDAzM8O7fVZd8XYHsUtnu5YvEonEY1FZQNNa7wSAAxWwR/r6+raH4c6cTCafREQ2fVrIDLlERC87jvNeu15gmZcQiCIBDlTtAYAwtTc4v5pv1sNKqeF4PH5yZGRE8nCjePVlTKuKAAdjlFJrrlRHaVXBAYCBgYHNhmGwzXdThEwr+J5VSj0yNjbWzg+6kf1Iaa0/AoDldHKesG3745WYgGmaKSJihzpO52hIIaJ3HMd5tiGNS6NCAAD6+/vvMgzjYXZD80SE35XU5tb8aHh6TM9wcJ+ILrOe7Pz8/L7p6elfW3NG4Yxaa30YAEITkw9nVKG0cjCRSOyKSpBqYUZa64eI6D5EvIrT3ru7u/eHueDqpZ3e7ElbTMv9KpTPkjQiBHwRwMHBQVMpxboCQQuLn/PL1TFEPFYoFE7IlzkoSqknBITAShLw7oesfXFtk8ZBiHigs7Nzj+i3NYn4Et2Ypnk3EQ1XG4FSamBycpJ3Xa1IMU3zdiL6xoejkJ9x2n19fZkwVqH9dCrnCgEhIATaiQDLCJw/f34HIr4IADe0wdz+IKK98Xj87TADQG3ARaYgBIRAkwiU828zmQy7eNzoo08WCD7OD/ZEdGRiYuKcj7pyqhAQAkIgsgSGhoY2ENHnRMROp40sLLj+dDab5QCElJUloLTWx6ro6Iw6jsOaFStaTNO8n4hYQ6qae1qQ8f3Cc7Ztm39KEQJCQAgIgfoJqFQqxc5v97C7nqczuL7+ZpvWwjQA7C8Wi4ckHbxpzKUjISAEliCwEKh637MLrQaprDOFiByYGs5ms2ybXs2pS0ALASEgBFqagCew/hwAvAoAXSFPhlcp3+zt7d0nadEhk62jOc82+zMAuGNRM9OGYWzP5/NVLdnr6NJ3VdM0b2UBarYX9125ogJbycdisZ25XC4U98x6xyP1hYAQEALtSoDdZV3XvQkAUnwQURIANnpH2M8YfjGyc+AoZ8a4rvvl1NRUzm8Dcr4QEAJCoBEEyoGqdDr9ICJ+VdHBTwBwRCn1tehMNQK9tCkEhEDUCWzbtm1TqVR6HhF3eHbPQYfM2n1swX44Fot9Ojo6eiloQ1KvoQTQNE12wN2MiL93dXWdiFrKw6L0kl28IToADV4tf8u27YOy4BSAnlQRAkJACIRIIJlMrkfEqxHxGgDY4LruBkRcBwDriIjFvNcqpdYSUa+nVdhdkQbOgS7+XWXhDQXstP43IvKGA37uYLH7GSIqH67rnuno6Dgr7ushXlBpSggIgdAIlANVW7dujXd0dHAE/QQAHC2VSsO5XO630HqRhoSAEBACLUwgk8msIaIHPIfUNCKyhhWLW3fyQyAA8IokPxRe4AMRLxDRz/xAiIgWEX0/Pj7+ZwsjkKFHkEAymbxeKXWv67opRNSeXXePlx7ILzUXEfEiEfHC0w8sOGtZFqc4yo7oCF5PGZIQEAJCoF4CLAI+Nzf3T9QWWeqdl9QXAkJg9RH4FxhsNRO3AyWNAAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAh0AAABxCAYAAABxyRHvAAAABGdBTUEAALGPC/xhBQAAQABJREFUeAHt3QeYLEdxAOBBPBtjbIxlA8YEP4GMyME2CAS2HgIEmCSRjEWQSCKDyAgEepgghIgig0GPnDMyGR6YnHMGCRBRIGOwwXlcf0Mtc3Oze7t3t3v33nV93+7szvR0V1dXV1VXV3efrQ1oNin88Ic/bPLzpS99qfnyl7/cfOtb32rOOOOM5sc//nHz05/+tPnlL3/ZZBXOdrazNec85zmb85znPM15z3ve5k//9E+b7du3NwcccEBzyUtesjn/+c/fnO985yvXffbZZ5PWuqJVKVApUClQKVApsFdSYOfZNovR8ZOf/KT5+te/3nz6059uPvKRjxQD4wc/+EExOn7xi1+sC/UZJIyOP/mTP2kufvGLN1e+8pWbK17xis3+++9fDJF1KaRmUilQKVApUClQKVApMESBjTU6vvrVrzbvf//7m7e97W3F2GB0/N///d8QonO9d9GLXrS57GUv2xx66KHNjh07mktd6lJzLa9mXilQKVApUClQKbAFKbB4o+P73/9+8/a3v7155Stf2Xz4wx9uzjrrrE1Fd1MzV7rSlZrDDz+8ud71rlemZzYVghWZSoFKgUqBSoFKgT2TAoszOr7whS80u3btal796lc3p59++qYnl/iQC17wgs0NbnCD5sgjj2yucpWrbHqcK4KVApUClQKVApUCm5gC8zc6Pve5zzUnn3xyMTYEfq4FxGSc+9znbn73d3+3+Z3f+Z3mt37rt5pt27Y1DATwv//7v83//M//NP/xH/9RAkx//vOfNz/72c/WUmR5V3m8Hve4xz3K9MuaM6wZVApUClQKVApUCmw9CszP6Pje977XPOEJT2ie//znl1Ums9D2j//4j5s/+7M/a8RaXPrSl24udrGLNRe5yEWaP/iDPxgZHec4xzma3/7t315idDA40uhgeKTR8aMf/ag57bTTGitgvvKVrzTf+c53yioYaWcBRs/Nbnaz5gEPeECJAZnl3Zq2UqBSoFKgUqBSYItTYP2NDt6GF77whc0//MM/TD2N8nu/93vN5S53ueav//qvm4MPPrisJrHUlSdjHsAIsfT2U5/6VPOud72r+cQnPtF84xvfmKooXhXLce95z3uWD0OoQqVApUClQKVApUClwIoUWF+j49vf/nbzoAc9qHn5y1++Ysm8FAceeGDxHBxyyCFlxchG7Z1x5plnNp/85Ceb17/+9c1b3vKWYpCsVIGzn/3szdWudrXmhBNOaA466KCVktfnlQKVApUClQKVAludAutndFj2KubBstdJwEtgiuI2t7lNMTo2ytAYh+N3v/vd5tRTT21e9KIXNR/4wAdGG4+NS68+xx9/fHOXu9ylYYhUqBSoFKgUqBSoFKgUGKTA+hgdT33qU5tjjz22+fd///fBUtwUp3G7292uufOd71xiNMYm3CQPxIS89a1vbdTt3e9+90SsTAPd8Y53bB772MeWmJOJievDSoFKgUqBSoFKga1JgbUZHQIxH/rQhzYnnXTSWI+A1SVHHHFE8+AHP7hsRb6n0Znx8ZrXvKY58cQTGytxxoF6Xv/612+e8YxnlO3Xx6Wr9ysFKgUqBSoFKgW2KAVWb3T853/+Z3PMMcc0z3rWs8bS7hKXuESJeTjssMPGptkTHjjbRfDpk570pObpT39682//9m+DaJteEQz7ghe8oKy2GUxUb1YKVApUClQKVApsTQqszuj47//+7+Ze97rXRIPjtre9bfEOOOdkbwErc+ym+sAHPrD5/Oc/P1itNDys4LnwhS88mKberBSoFKgUqBSoFNiCFNg581GrPBz3v//9Bw0Oy0n33XffEgdxyimnlIPV9iaiMiiue93rNm9+85vLlJG9QvrAMPnnf/7nEr9iP5AKlQKVApUClQKVApUCv6LATEaHGI4nP/nJzdOe9rRl9GNwOEqesWEVy2ZblbIM4VXeUE8bl4ndsFeHnVH7wPB473vf29zvfvdr/vVf/7X/uP6vFKgUqBSoFKgU2JIUOPvOgGlq7vTXN73pTUXRml7pAkVsKsGUAk/AVgDGxt/8zd8U4+pjH/tY06cJelk+/F//9V9l6/S6nHYrcEWtY6VApUClQKXABArsntro+PKXv9yI0/jxj3+8LD8eDvtaXOMa11j2bG++YcVKHgTnxNz+tuo8Hla8bI/dVS9zmcuMzojZm2lS61YpUClQKVApUCkwhgK7p5pesf+G80ZOHzgd9g//8A+b5zznORt6EBr8NmoaQ1yHGJe73/3ug9u2W+nyiEc8onHKboVKgUqBSoFKgUqBrUyBFY0O0wTPfe5zyy6dfUJRuI9+9KPL/hT9Z4v6z+Cw9fod7nCHQS/MIvBwCu1xxx3X3OQmN1kWy2K5LWPNWTSTNk9bBJ61jEqBSoFKgUqBSoGNpMCKRodplcc97nHLcBQoStHbYXSjgBK3OZm9M2zgZSvyoemfReDn4LfHPOYxzV/8xV8sK860yz/90z81r3jFK8ZuorbspXqjUqBSoFKgUqBSYC+jwNliJN6OqxNledRRRzUveclLliW58pWvXLwftjffCEiD4ylPecqS4m9605uW5bwbgZcYDlum/93f/V3zL//yL0vwEmx7qUtdqtDM6pcKlQLzogA+FMCM58Qd+cwDyAflgL4YEWi9qOBp3lh19fHbsn749HFyXIGDJitUCuypFMDT+p2PgT+e3sNWik7eHMxGWDe84Q1HgiUbylH0b3zjGzcscHScwZH4baThQeA96lGPKjuxEv5dMB113/vetzzfCEYhkH0mAcG9WmWhvn1B3y9LvTei7n089tb/+M9BhXnSs8MVr3nNa666TcfRibFhWbjl89rcfx+ruHj9HvnIRzZXvOIVx70+1X154SkCVr38Puc5z1mMKDzKmHJMwWmnnVb2Bzrf+c7XfOUrXylnIP30pz8dved9RtCtb33rctDkVIVvoUTTyIUkB/mg/7omoO8kyLSrlSuT8t5qz+z9ZBXpRz/60caO34cffnhz8YtffEl7bHKa7Bw7BNKZH//4xy8zODDQ0UcfvWkNDgQ31UIQPvvZzy4HzS2yERgWpnkYbBijC4Tyi1/84uZWt7pVc+lLX7r7aO6/CexPfOITzZlnnjm2LG0rMNiKnBQUYxP3HhA8VvBMCuiVpx1qh6agetnVv6uggDb+0pe+VPjva1/7WmlDnrdXvepVazYA+ugo6wc/+EExPPA1oyANWsqf0l8tyM806fve977iOfziF7/Y/OxnPyvZnetc52r222+/5qCDDmouf/nLFwPr+c9/ftkhWb+TjtEFN/mkQjz3uc/dHHzwwatFaa9975e//GWDV6bdyBD9KTv9GA98//vfLyv0su3HEeo85zlPaS8D1gqrowDe3rVrV9kr66yzzmroGvR3rtkFLnCB1WW6EW+Fch6E8GS0MZIw9bLks//++7dnnHHG4DvzvhkrQdp73/veS/Dp49f9Hx6PNpTsvNFaln+M0NpXv/rVbYyuluEa7t32Pve5Txsddtl787yBdte5znXaYNTSrmEALMPNvYte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\"","module.exports = require(\"sharedb/lib/client\");","module.exports = require(\"jquery-ui-dist/jquery-ui\");","module.exports = require(\"cytoscape-edgehandles\");","(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.cytoscapeEdgeEditing = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o');\n\n $container.append($canvas);\n\n var cxtAddBendPointFcn = function (event) {\n var edge = event.target || event.cyTarget;\n if(!bendPointUtilities.isIgnoredEdge(edge)) {\n\n var param = {\n edge: edge,\n weights: edge.data('cyedgebendeditingWeights') ? [].concat(edge.data('cyedgebendeditingWeights')) : edge.data('cyedgebendeditingWeights'),\n distances: edge.data('cyedgebendeditingDistances') ? [].concat(edge.data('cyedgebendeditingDistances')) : edge.data('cyedgebendeditingDistances')\n };\n\n bendPointUtilities.addBendPoint();\n\n if (options().undoable) {\n cy.undoRedo().do('changeBendPoints', param);\n }\n }\n \n refreshDraws();\n };\n\n var cxtRemoveBendPointFcn = function (event) {\n var edge = event.target || event.cyTarget;\n \n var param = {\n edge: edge,\n weights: [].concat(edge.data('cyedgebendeditingWeights')),\n distances: [].concat(edge.data('cyedgebendeditingDistances'))\n };\n\n bendPointUtilities.removeBendPoint();\n \n if(options().undoable) {\n cy.undoRedo().do('changeBendPoints', param);\n }\n \n setTimeout(function(){refreshDraws()}, 50) ;\n };\n \n // function to reconnect edge\n var handleReconnectEdge = opts.handleReconnectEdge;\n // function to validate edge source and target on reconnection\n var validateEdge = opts.validateEdge; \n // function to be called on invalid edge reconnection\n var actOnUnsuccessfulReconnection = opts.actOnUnsuccessfulReconnection;\n \n var menuItems = [\n {\n id: addBendPointCxtMenuId,\n title: opts.addBendMenuItemTitle,\n content: 'Add Bend Point',\n selector: 'edge',\n onClickFunction: cxtAddBendPointFcn\n },\n {\n id: removeBendPointCxtMenuId,\n title: opts.removeBendMenuItemTitle,\n content: 'Remove Bend Point',\n selector: 'edge',\n onClickFunction: cxtRemoveBendPointFcn\n }\n ];\n \n if(cy.contextMenus) {\n var menus = cy.contextMenus('get');\n // If context menus is active just append menu items else activate the extension\n // with initial menu items\n if (menus.isActive()) {\n menus.appendMenuItems(menuItems);\n }\n else {\n cy.contextMenus({\n menuItems: menuItems\n });\n }\n }\n \n var _sizeCanvas = debounce(function () {\n $canvas\n .attr('height', $container.height())\n .attr('width', $container.width())\n .css({\n 'position': 'absolute',\n 'top': 0,\n 'left': 0,\n 'z-index': options().zIndex\n })\n ;\n\n setTimeout(function () {\n var canvasBb = $canvas.offset();\n var containerBb = $container.offset();\n\n $canvas\n .css({\n 'top': -(canvasBb.top - containerBb.top),\n 'left': -(canvasBb.left - containerBb.left)\n })\n ;\n\n // redraw on canvas resize\n if(cy){\n refreshDraws();\n }\n }, 0);\n\n }, 250);\n\n function sizeCanvas() {\n _sizeCanvas();\n }\n\n sizeCanvas();\n\n $(window).bind('resize', function () {\n sizeCanvas();\n });\n\n var ctx = $canvas[0].getContext('2d');\n\n // write options to data\n var data = $container.data('cyedgebendediting');\n if (data == null) {\n data = {};\n }\n data.options = opts;\n\n var optCache;\n\n function options() {\n return optCache || (optCache = $container.data('cyedgebendediting').options);\n }\n\n // we will need to convert model positons to rendered positions\n function convertToRenderedPosition(modelPosition) {\n var pan = cy.pan();\n var zoom = cy.zoom();\n\n var x = modelPosition.x * zoom + pan.x;\n var y = modelPosition.y * zoom + pan.y;\n\n return {\n x: x,\n y: y\n };\n }\n \n function refreshDraws() {\n\n var w = $container.width();\n var h = $container.height();\n\n ctx.clearRect(0, 0, w, h);\n \n if( edgeToHighlightBends ) {\n renderBendShapes(edgeToHighlightBends);\n renderEndPointShapes(edgeToHighlightBends);\n }\n }\n \n // render the bend shapes of the given edge\n function renderBendShapes(edge) {\n \n if(!edge.hasClass('edgebendediting-hasbendpoints')) {\n return;\n }\n \n var segpts = bendPointUtilities.getSegmentPoints(edge);//edge._private.rdata.segpts;\n var length = getBendShapesLength(edge) * 0.65;\n \n var srcPos = edge.source().position();\n var tgtPos = edge.target().position();\n \n var weights = edge.data('cyedgebendeditingWeights');\n var distances = edge.data('cyedgebendeditingDistances');\n\n for(var i = 0; segpts && i < segpts.length; i = i + 2){\n var bendX = segpts[i];\n var bendY = segpts[i + 1];\n\n var oldStyle = ctx.fillStyle;\n ctx.fillStyle = \"#000\"; // black\n renderBendShape(bendX, bendY, length);\n ctx.fillStyle = oldStyle;\n }\n }\n \n // render a bend shape with the given parameters\n function renderBendShape(bendX, bendY, length) {\n // get the top left coordinates\n var topLeftX = bendX - length / 2;\n var topLeftY = bendY - length / 2;\n \n // convert to rendered parameters\n var renderedTopLeftPos = convertToRenderedPosition({x: topLeftX, y: topLeftY});\n length *= cy.zoom();\n \n // render bend shape\n ctx.beginPath();\n ctx.rect(renderedTopLeftPos.x, renderedTopLeftPos.y, length, length);\n ctx.fill();\n ctx.closePath();\n }\n \n // render the end points shapes of the given edge\n function renderEndPointShapes(edge) {\n if(!edge){\n return;\n }\n\n var edge_pts = bendPointUtilities.getSegmentPoints(edge);\n if(typeof edge_pts === 'undefined'){\n edge_pts = [];\n } \n var sourcePos = edge.sourceEndpoint();\n var targetPos = edge.targetEndpoint();\n edge_pts.unshift(sourcePos.y);\n edge_pts.unshift(sourcePos.x);\n edge_pts.push(targetPos.x);\n edge_pts.push(targetPos.y); \n\n \n if(!edge_pts)\n return;\n\n var src = {\n x: edge_pts[0],\n y: edge_pts[1]\n }\n\n var target = {\n x: edge_pts[edge_pts.length-2],\n y: edge_pts[edge_pts.length-1]\n }\n\n var nextToSource = {\n x: edge_pts[2],\n y: edge_pts[3]\n }\n var nextToTarget = {\n x: edge_pts[edge_pts.length-4],\n y: edge_pts[edge_pts.length-3]\n }\n var length = getBendShapesLength(edge) * 0.65;\n\n var oldStroke = ctx.strokeStyle;\n var oldWidth = ctx.lineWidth;\n var oldFill = ctx.fillStyle;\n\n ctx.fillStyle = \"#000\"; // black\n \n renderEachEndPointShape(src, target, length,nextToSource,nextToTarget);\n \n ctx.strokeStyle = oldStroke;\n ctx.fillStyle = oldFill;\n ctx.lineWidth = oldWidth;\n }\n\n function renderEachEndPointShape(source, target, length,nextToSource,nextToTarget) {\n // get the top left coordinates of source and target\n var sTopLeftX = source.x - length / 2;\n var sTopLeftY = source.y - length / 2;\n\n var tTopLeftX = target.x - length / 2;\n var tTopLeftY = target.y - length / 2;\n\n var nextToSourceX = nextToSource.x - length /2;\n var nextToSourceY = nextToSource.y - length / 2;\n\n var nextToTargetX = nextToTarget.x - length /2;\n var nextToTargetY = nextToTarget.y - length /2;\n\n\n // convert to rendered parameters\n var renderedSourcePos = convertToRenderedPosition({x: sTopLeftX, y: sTopLeftY});\n var renderedTargetPos = convertToRenderedPosition({x: tTopLeftX, y: tTopLeftY});\n length = length * cy.zoom() / 2;\n\n var renderedNextToSource = convertToRenderedPosition({x: nextToSourceX, y: nextToSourceY});\n var renderedNextToTarget = convertToRenderedPosition({x: nextToTargetX, y: nextToTargetY});\n \n //how far to go from the node along the edge\n var distanceFromNode = length;\n\n var distanceSource = Math.sqrt(Math.pow(renderedNextToSource.x - renderedSourcePos.x,2) + Math.pow(renderedNextToSource.y - renderedSourcePos.y,2)); \n var sourceEndPointX = renderedSourcePos.x + ((distanceFromNode/ distanceSource)* (renderedNextToSource.x - renderedSourcePos.x));\n var sourceEndPointY = renderedSourcePos.y + ((distanceFromNode/ distanceSource)* (renderedNextToSource.y - renderedSourcePos.y));\n\n\n var distanceTarget = Math.sqrt(Math.pow(renderedNextToTarget.x - renderedTargetPos.x,2) + Math.pow(renderedNextToTarget.y - renderedTargetPos.y,2)); \n var targetEndPointX = renderedTargetPos.x + ((distanceFromNode/ distanceTarget)* (renderedNextToTarget.x - renderedTargetPos.x));\n var targetEndPointY = renderedTargetPos.y + ((distanceFromNode/ distanceTarget)* (renderedNextToTarget.y - renderedTargetPos.y)); \n\n // render end point shape for source and target\n ctx.beginPath();\n ctx.arc(sourceEndPointX + length, sourceEndPointY + length, length, 0, 2*Math.PI, false);\n ctx.arc(targetEndPointX + length, targetEndPointY + length, length, 0, 2*Math.PI, false);\n ctx.fill();\n \n // drawDiamondShape(renderedSourcePos.x, renderedSourcePos.y, length);\n // drawDiamondShape(renderedTargetPos.x, renderedTargetPos.y, length);\n\n function drawDiamondShape(topLeftX, topLeftY, length){\n var l = (length) / (3 * 6 + 2);\n\n // Draw all corners\n drawCorner(topLeftX, topLeftY + length/2, l, 'left');\n drawCorner(topLeftX + length/2, topLeftY, l, 'top');\n drawCorner(topLeftX + length/2, topLeftY + length, l, 'bottom');\n drawCorner(topLeftX + length, topLeftY + length/2, l, 'right');\n\n drawDashedLine(topLeftX, topLeftY + length/2, topLeftX + length/2, topLeftY, l);\n drawDashedLine(topLeftX + length/2, topLeftY, topLeftX + length, topLeftY + length/2, l);\n drawDashedLine(topLeftX + length, topLeftY + length/2, topLeftX + length/2, topLeftY + length, l);\n drawDashedLine(topLeftX + length/2, topLeftY + length, topLeftX, topLeftY + length/2, l);\n }\n\n function drawCorner(x, y, l, corner){\n ctx.beginPath();\n ctx.moveTo(x, y);\n switch(corner){\n case 'left': {\n ctx.lineTo(x + l, y - l);\n ctx.lineTo(x, y);\n ctx.lineTo(x + l, y + l);\n break;\n }\n case 'top': {\n ctx.lineTo(x - l, y + l);\n ctx.lineTo(x, y);\n ctx.lineTo(x + l, y + l);\n break;\n }\n case 'right': {\n ctx.lineTo(x - l, y - l);\n ctx.lineTo(x, y);\n ctx.lineTo(x - l, y + l);\n break;\n }\n case 'bottom': {\n ctx.lineTo(x + l, y - l);\n ctx.lineTo(x, y);\n ctx.lineTo(x - l, y - l);\n break;\n }\n case 'default':\n return;\n }\n ctx.stroke();\n }\n\n function drawDashedLine(x1, y1, x2, y2, l){\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.setLineDash([2*l,l]);\n ctx.stroke();\n ctx.setLineDash([]);\n }\n }\n\n // changes color tone\n // https://stackoverflow.com/questions/5560248/programmatically-lighten-or-darken-a-hex-color-or-rgb-and-blend-colors\n function shadeBlend(p,c0,c1) {\n var n=p<0?p*-1:p,u=Math.round,w=parseInt;\n if(c0.length>7){\n var f=c0.split(\",\"),t=(c1?c1:p<0?\"rgb(0,0,0)\":\"rgb(255,255,255)\").split(\",\"),R=w(f[0].slice(4)),G=w(f[1]),B=w(f[2]);\n return \"rgb(\"+(u((w(t[0].slice(4))-R)*n)+R)+\",\"+(u((w(t[1])-G)*n)+G)+\",\"+(u((w(t[2])-B)*n)+B)+\")\"\n }\n else{\n var f=w(c0.slice(1),16),t=w((c1?c1:p<0?\"#000000\":\"#FFFFFF\").slice(1),16),R1=f>>16,G1=f>>8&0x00FF,B1=f&0x0000FF;\n return \"#\"+(0x1000000+(u(((t>>16)-R1)*n)+R1)*0x10000+(u(((t>>8&0x00FF)-G1)*n)+G1)*0x100+(u(((t&0x0000FF)-B1)*n)+B1)).toString(16).slice(1)\n }\n }\n\n // get the length of bend points to be rendered\n function getBendShapesLength(edge) {\n var factor = options().bendShapeSizeFactor;\n if (parseFloat(edge.css('width')) <= 2.5)\n return 2.5 * factor;\n else return parseFloat(edge.css('width'))*factor;\n }\n \n // check if the point represented by {x, y} is inside the bend shape\n function checkIfInsideBendShape(x, y, length, centerX, centerY){\n var minX = centerX - length / 2;\n var maxX = centerX + length / 2;\n var minY = centerY - length / 2;\n var maxY = centerY + length / 2;\n \n var inside = (x >= minX && x <= maxX) && (y >= minY && y <= maxY);\n return inside;\n }\n\n // get the index of bend point containing the point represented by {x, y}\n function getContainingBendShapeIndex(x, y, edge) {\n if(edge.data('cyedgebendeditingWeights') == null || edge.data('cyedgebendeditingWeights').length == 0){\n return -1;\n }\n\n var segpts = bendPointUtilities.getSegmentPoints(edge);//edge._private.rdata.segpts;\n var length = getBendShapesLength(edge);\n\n for(var i = 0; segpts && i < segpts.length; i = i + 2){\n var bendX = segpts[i];\n var bendY = segpts[i + 1];\n\n var inside = checkIfInsideBendShape(x, y, length, bendX, bendY);\n if(inside){\n return i / 2;\n }\n }\n\n return -1;\n };\n\n function getContainingEndPoint(x, y, edge){\n var length = getBendShapesLength(edge);\n var allPts = edge._private.rscratch.allpts;\n var src = {\n x: allPts[0],\n y: allPts[1]\n }\n var target = {\n x: allPts[allPts.length-2],\n y: allPts[allPts.length-1]\n }\n convertToRenderedPosition(src);\n convertToRenderedPosition(target);\n \n // Source:0, Target:1, None:-1\n if(checkIfInsideBendShape(x, y, length, src.x, src.y))\n return 0;\n else if(checkIfInsideBendShape(x, y, length, target.x, target.y))\n return 1;\n else\n return -1;\n }\n \n // store the current status of gestures and set them to false\n function disableGestures() {\n lastPanningEnabled = cy.panningEnabled();\n lastZoomingEnabled = cy.zoomingEnabled();\n lastBoxSelectionEnabled = cy.boxSelectionEnabled();\n\n cy.zoomingEnabled(false)\n .panningEnabled(false)\n .boxSelectionEnabled(false);\n }\n \n // reset the gestures by their latest status\n function resetGestures() {\n cy.zoomingEnabled(lastZoomingEnabled)\n .panningEnabled(lastPanningEnabled)\n .boxSelectionEnabled(lastBoxSelectionEnabled);\n }\n\n function moveBendPoints(positionDiff, edges) {\n edges.forEach(function( edge ){\n var previousBendPointsPosition = bendPointUtilities.getSegmentPoints(edge);\n var nextBendPointsPosition = [];\n if (previousBendPointsPosition != undefined)\n {\n for (i=0; i '40') {\n return;\n }\n\n //Checks if only edges are selected (not any node) and if only 1 edge is selected\n //If the second checking is removed the bend points of multiple edges would move\n if (cy.edges(\":selected\").length != cy.elements(\":selected\").length || cy.edges(\":selected\").length != 1)\n {\n return;\n }\n\n if (!bendPointsMoving)\n {\n selectedEdges = cy.edges(':selected');\n cy.trigger(\"edgebendediting.movestart\", [selectedEdges]);\n bendPointsMoving = true;\n }\n if (e.altKey && e.which == '38') {\n // up arrow and alt\n moveBendPoints ({x:0, y:-1},selectedEdges);\n }\n else if (e.altKey && e.which == '40') {\n // down arrow and alt\n moveBendPoints ({x:0, y:1},selectedEdges);\n }\n else if (e.altKey && e.which == '37') {\n // left arrow and alt\n moveBendPoints ({x:-1, y:0},selectedEdges);\n }\n else if (e.altKey && e.which == '39') {\n // right arrow and alt\n moveBendPoints ({x:1, y:0},selectedEdges);\n }\n\n else if (e.shiftKey && e.which == '38') {\n // up arrow and shift\n moveBendPoints ({x:0, y:-10},selectedEdges);\n }\n else if (e.shiftKey && e.which == '40') {\n // down arrow and shift\n moveBendPoints ({x:0, y:10},selectedEdges);\n }\n else if (e.shiftKey && e.which == '37') {\n // left arrow and shift\n moveBendPoints ({x:-10, y:0},selectedEdges);\n\n }\n else if (e.shiftKey && e.which == '39' ) {\n // right arrow and shift\n moveBendPoints ({x:10, y:0},selectedEdges);\n }\n else if (e.keyCode == '38') {\n // up arrow\n moveBendPoints({x: 0, y: -3}, selectedEdges);\n }\n\n else if (e.keyCode == '40') {\n // down arrow\n moveBendPoints ({x:0, y:3},selectedEdges);\n }\n else if (e.keyCode == '37') {\n // left arrow\n moveBendPoints ({x:-3, y:0},selectedEdges);\n }\n else if (e.keyCode == '39') {\n //right arrow\n moveBendPoints ({x:3, y:0},selectedEdges);\n }\n }\n }\n function keyUp(e) {\n\n if (e.keyCode < '37' || e.keyCode > '40') {\n return;\n }\n\n var shouldMove = typeof options().moveSelectedBendPointsOnKeyEvents === 'function'\n ? options().moveSelectedBendPointsOnKeyEvents() : options().moveSelectedBendPointsOnKeyEvents;\n\n if (!shouldMove) {\n return;\n }\n\n cy.trigger(\"edgebendediting.moveend\", [selectedEdges]);\n selectedEdges = undefined;\n bendPointsMoving = false;\n\n }\n document.addEventListener(\"keydown\",keyDown, true);\n document.addEventListener(\"keyup\",keyUp, true);\n\n $container.data('cyedgebendediting', data);\n },\n unbind: function () {\n cy.off('position', 'node', ePosition)\n .off('remove', 'node', eRemove)\n .off('add', 'node', eAdd)\n .off('style', 'edge.edgebendediting-hasbendpoints:selected', eStyle)\n .off('select', 'edge', eSelect)\n .off('unselect', 'edge', eUnselect)\n .off('tapstart', 'edge', eTapStart)\n .off('tapdrag', eTapDrag)\n .off('tapend', eTapEnd)\n .off('cxttap', eCxtTap);\n\n cy.unbind(\"zoom pan\", eZoom);\n }\n };\n\n if (functions[fn]) {\n return functions[fn].apply($(cy.container()), Array.prototype.slice.call(arguments, 1));\n } else if (typeof fn == 'object' || !fn) {\n return functions.init.apply($(cy.container()), arguments);\n } else {\n $.error('No such function `' + fn + '` for cytoscape.js-edge-editing');\n }\n\n return $(this);\n};\n\n},{\"./bendPointUtilities\":2,\"./debounce\":3,\"./reconnectionUtilities\":5,\"./registerUndoRedoFunctions\":6}],2:[function(_dereq_,module,exports){\nvar bendPointUtilities = {\n currentCtxEdge: undefined,\n currentCtxPos: undefined,\n currentBendIndex: undefined,\n ignoredClasses: undefined,\n setIgnoredClasses: function(_ignoredClasses) {\n this.ignoredClasses = _ignoredClasses;\n },\n // initilize bend points based on bendPositionsFcn\n initBendPoints: function(bendPositionsFcn, edges) {\n for (var i = 0; i < edges.length; i++) {\n var edge = edges[i];\n if(!this.isIgnoredEdge(edge)) {\n\n // get the bend positions by applying the function for this edge\n var bendPositions = bendPositionsFcn.apply(this, edge);\n // calculate relative bend positions\n var result = this.convertToRelativeBendPositions(edge, bendPositions);\n\n // if there are bend points set weights and distances accordingly and add class to enable style changes\n if (result.distances.length > 0) {\n edge.data('cyedgebendeditingWeights', result.weights);\n edge.data('cyedgebendeditingDistances', result.distances);\n edge.addClass('edgebendediting-hasbendpoints');\n }\n }\n }\n },\n\n isIgnoredEdge: function(edge) {\n\n var startX = edge.source().position('x');\n var startY = edge.source().position('y');\n var endX = edge.target().position('x');\n var endY = edge.target().position('y');\n \n if((startX == endX && startY == endY) || (edge.source().id() == edge.target().id())){\n return true;\n }\n for(var i = 0; this.ignoredClasses && i < this.ignoredClasses.length; i++){\n if(edge.hasClass(this.ignoredClasses[i]))\n return true;\n }\n return false;\n },\n //Get the direction of the line from source point to the target point\n getLineDirection: function(srcPoint, tgtPoint){\n if(srcPoint.y == tgtPoint.y && srcPoint.x < tgtPoint.x){\n return 1;\n }\n if(srcPoint.y < tgtPoint.y && srcPoint.x < tgtPoint.x){\n return 2;\n }\n if(srcPoint.y < tgtPoint.y && srcPoint.x == tgtPoint.x){\n return 3;\n }\n if(srcPoint.y < tgtPoint.y && srcPoint.x > tgtPoint.x){\n return 4;\n }\n if(srcPoint.y == tgtPoint.y && srcPoint.x > tgtPoint.x){\n return 5;\n }\n if(srcPoint.y > tgtPoint.y && srcPoint.x > tgtPoint.x){\n return 6;\n }\n if(srcPoint.y > tgtPoint.y && srcPoint.x == tgtPoint.x){\n return 7;\n }\n return 8;//if srcPoint.y > tgtPoint.y and srcPoint.x < tgtPoint.x\n },\n getSrcTgtPointsAndTangents: function (edge) {\n var sourceNode = edge.source();\n var targetNode = edge.target();\n \n var tgtPosition = targetNode.position();\n var srcPosition = sourceNode.position();\n \n var srcPoint = sourceNode.position();\n var tgtPoint = targetNode.position();\n\n\n var m1 = (tgtPoint.y - srcPoint.y) / (tgtPoint.x - srcPoint.x);\n var m2 = -1 / m1;\n\n return {\n m1: m1,\n m2: m2,\n srcPoint: srcPoint,\n tgtPoint: tgtPoint\n };\n },\n getIntersection: function(edge, point, srcTgtPointsAndTangents){\n if (srcTgtPointsAndTangents === undefined) {\n srcTgtPointsAndTangents = this.getSrcTgtPointsAndTangents(edge);\n }\n\n var srcPoint = srcTgtPointsAndTangents.srcPoint;\n var tgtPoint = srcTgtPointsAndTangents.tgtPoint;\n var m1 = srcTgtPointsAndTangents.m1;\n var m2 = srcTgtPointsAndTangents.m2;\n\n var intersectX;\n var intersectY;\n\n if(m1 == Infinity || m1 == -Infinity){\n intersectX = srcPoint.x;\n intersectY = point.y;\n }\n else if(m1 == 0){\n intersectX = point.x;\n intersectY = srcPoint.y;\n }\n else {\n var a1 = srcPoint.y - m1 * srcPoint.x;\n var a2 = point.y - m2 * point.x;\n\n intersectX = (a2 - a1) / (m1 - m2);\n intersectY = m1 * intersectX + a1;\n }\n\n //Intersection point is the intersection of the lines passing through the nodes and\n //passing through the bend point and perpendicular to the other line\n var intersectionPoint = {\n x: intersectX,\n y: intersectY\n };\n \n return intersectionPoint;\n },\n getSegmentPoints: function(edge) {\n \n if( edge.css('curve-style') !== 'segments' ) {\n return undefined;\n }\n \n var segpts = [];\n\n var segmentWs = edge.pstyle( 'segment-weights' ).pfValue;\n var segmentDs = edge.pstyle( 'segment-distances' ).pfValue;\n var segmentsN = Math.min( segmentWs.length, segmentDs.length );\n \n var srcPos = edge.source().position();\n var tgtPos = edge.target().position();\n\n var dy = ( tgtPos.y - srcPos.y );\n var dx = ( tgtPos.x - srcPos.x );\n \n var l = Math.sqrt( dx * dx + dy * dy );\n\n var vector = {\n x: dx,\n y: dy\n };\n\n var vectorNorm = {\n x: vector.x / l,\n y: vector.y / l\n };\n \n var vectorNormInverse = {\n x: -vectorNorm.y,\n y: vectorNorm.x\n };\n\n for( var s = 0; s < segmentsN; s++ ){\n var w = segmentWs[ s ];\n var d = segmentDs[ s ];\n\n // d = swappedDirection ? -d : d;\n //\n // d = Math.abs(d);\n\n // var w1 = !swappedDirection ? (1 - w) : w;\n // var w2 = !swappedDirection ? w : (1 - w);\n\n var w1 = (1 - w);\n var w2 = w;\n\n var posPts = {\n x1: srcPos.x,\n x2: tgtPos.x,\n y1: srcPos.y,\n y2: tgtPos.y\n };\n\n var midptPts = posPts;\n \n \n\n var adjustedMidpt = {\n x: midptPts.x1 * w1 + midptPts.x2 * w2,\n y: midptPts.y1 * w1 + midptPts.y2 * w2\n };\n\n segpts.push(\n adjustedMidpt.x + vectorNormInverse.x * d,\n adjustedMidpt.y + vectorNormInverse.y * d\n );\n }\n \n return segpts;\n },\n convertToRelativeBendPosition: function (edge, bendPoint, srcTgtPointsAndTangents) {\n if (srcTgtPointsAndTangents === undefined) {\n srcTgtPointsAndTangents = this.getSrcTgtPointsAndTangents(edge);\n }\n \n var intersectionPoint = this.getIntersection(edge, bendPoint, srcTgtPointsAndTangents);\n var intersectX = intersectionPoint.x;\n var intersectY = intersectionPoint.y;\n \n var srcPoint = srcTgtPointsAndTangents.srcPoint;\n var tgtPoint = srcTgtPointsAndTangents.tgtPoint;\n \n var weight;\n \n if( intersectX != srcPoint.x ) {\n weight = (intersectX - srcPoint.x) / (tgtPoint.x - srcPoint.x);\n }\n else if( intersectY != srcPoint.y ) {\n weight = (intersectY - srcPoint.y) / (tgtPoint.y - srcPoint.y);\n }\n else {\n weight = 0;\n }\n \n var distance = Math.sqrt(Math.pow((intersectY - bendPoint.y), 2)\n + Math.pow((intersectX - bendPoint.x), 2));\n \n //Get the direction of the line form source point to target point\n var direction1 = this.getLineDirection(srcPoint, tgtPoint);\n //Get the direction of the line from intesection point to bend point\n var direction2 = this.getLineDirection(intersectionPoint, bendPoint);\n \n //If the difference is not -2 and not 6 then the direction of the distance is negative\n if(direction1 - direction2 != -2 && direction1 - direction2 != 6){\n if(distance != 0)\n distance = -1 * distance;\n }\n \n return {\n weight: weight,\n distance: distance\n };\n },\n convertToRelativeBendPositions: function (edge, bendPoints) {\n var srcTgtPointsAndTangents = this.getSrcTgtPointsAndTangents(edge);\n// var bendPoints = edge.data('bendPointPositions');\n //output variables\n var weights = [];\n var distances = [];\n\n for (var i = 0; bendPoints && i < bendPoints.length; i++) {\n var bendPoint = bendPoints[i];\n var relativeBendPosition = this.convertToRelativeBendPosition(edge, bendPoint, srcTgtPointsAndTangents);\n\n weights.push(relativeBendPosition.weight);\n distances.push(relativeBendPosition.distance);\n }\n\n return {\n weights: weights,\n distances: distances\n };\n },\n getSegmentDistancesString: function (edge) {\n var str = \"\";\n\n var distances = edge.data('cyedgebendeditingDistances');\n for (var i = 0; distances && i < distances.length; i++) {\n str = str + \" \" + distances[i];\n }\n \n return str;\n },\n getSegmentWeightsString: function (edge) {\n var str = \"\";\n\n var weights = edge.data('cyedgebendeditingWeights');\n for (var i = 0; weights && i < weights.length; i++) {\n str = str + \" \" + weights[i];\n }\n \n return str;\n },\n addBendPoint: function(edge, newBendPoint) {\n if(edge === undefined || newBendPoint === undefined){\n edge = this.currentCtxEdge;\n newBendPoint = this.currentCtxPos;\n }\n \n var relativeBendPosition = this.convertToRelativeBendPosition(edge, newBendPoint);\n var originalPointWeight = relativeBendPosition.weight;\n \n var startX = edge.source().position('x');\n var startY = edge.source().position('y');\n var endX = edge.target().position('x');\n var endY = edge.target().position('y');\n var startWeight = this.convertToRelativeBendPosition(edge, {x: startX, y: startY}).weight;\n var endWeight = this.convertToRelativeBendPosition(edge, {x: endX, y: endY}).weight;\n var weightsWithTgtSrc = [startWeight].concat(edge.data('cyedgebendeditingWeights')?edge.data('cyedgebendeditingWeights'):[]).concat([endWeight]);\n \n var segPts = this.getSegmentPoints(edge);\n \n var minDist = Infinity;\n var intersection;\n var segptsWithTgtSrc = [startX, startY]\n .concat(segPts?segPts:[])\n .concat([endX, endY]);\n var newBendIndex = -1;\n \n for(var i = 0; i < weightsWithTgtSrc.length - 1; i++){\n var w1 = weightsWithTgtSrc[i];\n var w2 = weightsWithTgtSrc[i + 1];\n \n //check if the weight is between w1 and w2\n const b1 = this.compareWithPrecision(originalPointWeight, w1, true);\n const b2 = this.compareWithPrecision(originalPointWeight, w2);\n const b3 = this.compareWithPrecision(originalPointWeight, w2, true);\n const b4 = this.compareWithPrecision(originalPointWeight, w1);\n if( (b1 && b2) || (b3 && b4)){\n var startX = segptsWithTgtSrc[2 * i];\n var startY = segptsWithTgtSrc[2 * i + 1];\n var endX = segptsWithTgtSrc[2 * i + 2];\n var endY = segptsWithTgtSrc[2 * i + 3];\n \n var start = {\n x: startX,\n y: startY\n };\n \n var end = {\n x: endX,\n y: endY\n };\n \n var m1 = ( startY - endY ) / ( startX - endX );\n var m2 = -1 / m1;\n \n var srcTgtPointsAndTangents = {\n srcPoint: start,\n tgtPoint: end,\n m1: m1,\n m2: m2\n };\n \n //get the intersection of the current segment with the new bend point\n var currentIntersection = this.getIntersection(edge, newBendPoint, srcTgtPointsAndTangents);\n var dist = Math.sqrt( Math.pow( (newBendPoint.x - currentIntersection.x), 2 ) \n + Math.pow( (newBendPoint.y - currentIntersection.y), 2 ));\n \n //Update the minimum distance\n if(dist < minDist){\n minDist = dist;\n intersection = currentIntersection;\n newBendIndex = i;\n }\n }\n }\n \n if(intersection !== undefined){\n newBendPoint = intersection;\n }\n \n relativeBendPosition = this.convertToRelativeBendPosition(edge, newBendPoint);\n \n if(intersection === undefined){\n relativeBendPosition.distance = 0;\n }\n\n var weights = edge.data('cyedgebendeditingWeights');\n var distances = edge.data('cyedgebendeditingDistances');\n \n weights = weights?weights:[];\n distances = distances?distances:[];\n \n if(weights.length === 0) {\n newBendIndex = 0;\n }\n \n// weights.push(relativeBendPosition.weight);\n// distances.push(relativeBendPosition.distance);\n if(newBendIndex != -1){\n weights.splice(newBendIndex, 0, relativeBendPosition.weight);\n distances.splice(newBendIndex, 0, relativeBendPosition.distance);\n }\n \n edge.data('cyedgebendeditingWeights', weights);\n edge.data('cyedgebendeditingDistances', distances);\n \n edge.addClass('edgebendediting-hasbendpoints');\n \n return relativeBendPosition;\n },\n removeBendPoint: function(edge, bendPointIndex){\n if(edge === undefined || bendPointIndex === undefined){\n edge = this.currentCtxEdge;\n bendPointIndex = this.currentBendIndex;\n }\n \n var distances = edge.data('cyedgebendeditingDistances');\n var weights = edge.data('cyedgebendeditingWeights');\n \n distances.splice(bendPointIndex, 1);\n weights.splice(bendPointIndex, 1);\n \n \n if(distances.length == 0 || weights.length == 0){\n edge.removeClass('edgebendediting-hasbendpoints');\n edge.data('cyedgebendeditingDistances', []);\n edge.data('cyedgebendeditingWeights', []);\n }\n else {\n edge.data('cyedgebendeditingDistances', distances);\n edge.data('cyedgebendeditingWeights', weights);\n }\n },\n calculateDistance: function(pt1, pt2) {\n var diffX = pt1.x - pt2.x;\n var diffY = pt1.y - pt2.y;\n \n var dist = Math.sqrt( Math.pow( diffX, 2 ) + Math.pow( diffY, 2 ) );\n return dist;\n },\n /** (Less than or equal to) and (greater then equal to) comparisons with floating point numbers */\n compareWithPrecision: function (n1, n2, isLessThenOrEqual = false, precision = 0.01) {\n const diff = n1 - n2;\n if (Math.abs(diff) <= precision) {\n return true;\n }\n if (isLessThenOrEqual) {\n return n1 < n2;\n } else {\n return n1 > n2;\n }\n }\n};\n\nmodule.exports = bendPointUtilities;\n\n},{}],3:[function(_dereq_,module,exports){\nvar debounce = (function () {\n /**\n * lodash 3.1.1 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n /** Used as the `TypeError` message for \"Functions\" methods. */\n var FUNC_ERROR_TEXT = 'Expected a function';\n\n /* Native method references for those with the same name as other `lodash` methods. */\n var nativeMax = Math.max,\n nativeNow = Date.now;\n\n /**\n * Gets the number of milliseconds that have elapsed since the Unix epoch\n * (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @category Date\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => logs the number of milliseconds it took for the deferred function to be invoked\n */\n var now = nativeNow || function () {\n return new Date().getTime();\n };\n\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed invocations. Provide an options object to indicate that `func`\n * should be invoked on the leading and/or trailing edge of the `wait` timeout.\n * Subsequent calls to the debounced function return the result of the last\n * `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked\n * on the trailing edge of the timeout only if the the debounced function is\n * invoked more than once during the `wait` timeout.\n *\n * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options] The options object.\n * @param {boolean} [options.leading=false] Specify invoking on the leading\n * edge of the timeout.\n * @param {number} [options.maxWait] The maximum time `func` is allowed to be\n * delayed before it's invoked.\n * @param {boolean} [options.trailing=true] Specify invoking on the trailing\n * edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // avoid costly calculations while the window size is in flux\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // invoke `sendMail` when the click event is fired, debouncing subsequent calls\n * jQuery('#postbox').on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // ensure `batchLog` is invoked once after 1 second of debounced calls\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', _.debounce(batchLog, 250, {\n * 'maxWait': 1000\n * }));\n *\n * // cancel a debounced call\n * var todoChanges = _.debounce(batchLog, 1000);\n * Object.observe(models.todo, todoChanges);\n *\n * Object.observe(models, function(changes) {\n * if (_.find(changes, { 'user': 'todo', 'type': 'delete'})) {\n * todoChanges.cancel();\n * }\n * }, ['delete']);\n *\n * // ...at some point `models.todo` is changed\n * models.todo.completed = true;\n *\n * // ...before 1 second has passed `models.todo` is deleted\n * // which cancels the debounced `todoChanges` call\n * delete models.todo;\n */\n function debounce(func, wait, options) {\n var args,\n maxTimeoutId,\n result,\n stamp,\n thisArg,\n timeoutId,\n trailingCall,\n lastCalled = 0,\n maxWait = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = wait < 0 ? 0 : (+wait || 0);\n if (options === true) {\n var leading = true;\n trailing = false;\n } else if (isObject(options)) {\n leading = !!options.leading;\n maxWait = 'maxWait' in options && nativeMax(+options.maxWait || 0, wait);\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function cancel() {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n if (maxTimeoutId) {\n clearTimeout(maxTimeoutId);\n }\n lastCalled = 0;\n maxTimeoutId = timeoutId = trailingCall = undefined;\n }\n\n function complete(isCalled, id) {\n if (id) {\n clearTimeout(id);\n }\n maxTimeoutId = timeoutId = trailingCall = undefined;\n if (isCalled) {\n lastCalled = now();\n result = func.apply(thisArg, args);\n if (!timeoutId && !maxTimeoutId) {\n args = thisArg = undefined;\n }\n }\n }\n\n function delayed() {\n var remaining = wait - (now() - stamp);\n if (remaining <= 0 || remaining > wait) {\n complete(trailingCall, maxTimeoutId);\n } else {\n timeoutId = setTimeout(delayed, remaining);\n }\n }\n\n function maxDelayed() {\n complete(trailing, timeoutId);\n }\n\n function debounced() {\n args = arguments;\n stamp = now();\n thisArg = this;\n trailingCall = trailing && (timeoutId || !leading);\n\n if (maxWait === false) {\n var leadingCall = leading && !timeoutId;\n } else {\n if (!maxTimeoutId && !leading) {\n lastCalled = stamp;\n }\n var remaining = maxWait - (stamp - lastCalled),\n isCalled = remaining <= 0 || remaining > maxWait;\n\n if (isCalled) {\n if (maxTimeoutId) {\n maxTimeoutId = clearTimeout(maxTimeoutId);\n }\n lastCalled = stamp;\n result = func.apply(thisArg, args);\n }\n else if (!maxTimeoutId) {\n maxTimeoutId = setTimeout(maxDelayed, remaining);\n }\n }\n if (isCalled && timeoutId) {\n timeoutId = clearTimeout(timeoutId);\n }\n else if (!timeoutId && wait !== maxWait) {\n timeoutId = setTimeout(delayed, wait);\n }\n if (leadingCall) {\n isCalled = true;\n result = func.apply(thisArg, args);\n }\n if (isCalled && !timeoutId && !maxTimeoutId) {\n args = thisArg = undefined;\n }\n return result;\n }\n\n debounced.cancel = cancel;\n return debounced;\n }\n\n /**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\n function isObject(value) {\n // Avoid a V8 JIT bug in Chrome 19-20.\n // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n }\n\n return debounce;\n\n})();\n\nmodule.exports = debounce;\n},{}],4:[function(_dereq_,module,exports){\n;(function(){ 'use strict';\n \n var bendPointUtilities = _dereq_('./bendPointUtilities');\n var debounce = _dereq_(\"./debounce\");\n \n // registers the extension on a cytoscape lib ref\n var register = function( cytoscape, $ ){\n var uiUtilities = _dereq_('./UIUtilities');\n \n if( !cytoscape ){ return; } // can't register if cytoscape unspecified\n\n var defaults = {\n // this function specifies the poitions of bend points\n bendPositionsFunction: function(ele) {\n return ele.data('bendPointPositions');\n },\n // whether to initilize bend points on creation of this extension automatically\n initBendPointsAutomatically: true,\n // the classes of those edges that should be ignored\n ignoredClasses: [],\n // whether the bend editing operations are undoable (requires cytoscape-undo-redo.js)\n undoable: false,\n // the size of bend shape is obtained by multipling width of edge with this parameter\n bendShapeSizeFactor: 3,\n // z-index value of the canvas in which bend points are drawn\n zIndex: 999, \n // whether to start the plugin in the enabled state\n enabled: true,\n //An option that controls the distance within which a bend point is considered \"near\" the line segment between its two neighbors and will be automatically removed\n bendRemovalSensitivity : 8,\n // title of add bend point menu item (User may need to adjust width of menu items according to length of this option)\n addBendMenuItemTitle: \"Add Bend Point\",\n // title of remove bend point menu item (User may need to adjust width of menu items according to length of this option)\n removeBendMenuItemTitle: \"Remove Bend Point\",\n // whether the bend point can be moved by arrows\n moveSelectedBendPointsOnKeyEvents: function () {\n return true;\n }\n };\n \n var options;\n var initialized = false;\n \n // Merge default options with the ones coming from parameter\n function extend(defaults, options) {\n var obj = {};\n\n for (var i in defaults) {\n obj[i] = defaults[i];\n }\n\n for (var i in options) {\n if(i == \"bendRemovalSensitivity\"){\n var value = options[i];\n if(!isNaN(value))\n {\n if(value >= 0 && value <= 20){\n obj[i] = options[i];\n }else if(value < 0){\n obj[i] = 0\n }else{\n obj[i] = 20\n }\n }\n }else{\n obj[i] = options[i];\n }\n\n }\n\n return obj;\n };\n \n cytoscape( 'core', 'edgeEditing', function(opts){\n var cy = this;\n \n if( opts === 'initialized' ) {\n return initialized;\n }\n \n if( opts !== 'get' ) {\n // merge the options with default ones\n options = extend(defaults, opts);\n initialized = true;\n\n // define edgebendediting-hasbendpoints css class\n cy.style().selector('.edgebendediting-hasbendpoints').css({\n 'curve-style': 'segments',\n 'segment-distances': function (ele) {\n return bendPointUtilities.getSegmentDistancesString(ele);\n },\n 'segment-weights': function (ele) {\n return bendPointUtilities.getSegmentWeightsString(ele);\n },\n 'edge-distances': 'node-position'\n });\n\n bendPointUtilities.setIgnoredClasses(options.ignoredClasses);\n\n // init bend positions conditionally\n if (options.initBendPointsAutomatically) {\n bendPointUtilities.initBendPoints(options.bendPositionsFunction, cy.edges(), options.ignoredClasses);\n }\n\n if(options.enabled)\n uiUtilities(options, cy);\n else\n uiUtilities(\"unbind\", cy);\n }\n \n var instance = initialized ? {\n /*\n * get segment points of the given edge in an array A,\n * A[2 * i] is the x coordinate and A[2 * i + 1] is the y coordinate\n * of the ith bend point. (Returns undefined if the curve style is not segments)\n */\n getSegmentPoints: function(ele) {\n return bendPointUtilities.getSegmentPoints(ele);\n },\n // Initilize bend points for the given edges using 'options.bendPositionsFunction'\n initBendPoints: function(eles) {\n bendPointUtilities.initBendPoints(options.bendPositionsFunction, eles);\n },\n deleteSelectedBendPoint: function(ele, index) {\n bendPointUtilities.removeBendPoint(ele,index);\n }\n } : undefined;\n\n return instance; // chainability\n } );\n\n };\n\n if( typeof module !== 'undefined' && module.exports ){ // expose as a commonjs module\n module.exports = register;\n }\n\n if( typeof define !== 'undefined' && define.amd ){ // expose as an amd/requirejs module\n define('cytoscape-edge-editing', function(){\n return register;\n });\n }\n\n if( typeof cytoscape !== 'undefined' && $ ){ // expose to global cytoscape (i.e. window.cytoscape)\n register( cytoscape, $ );\n }\n\n})();\n\n},{\"./UIUtilities\":1,\"./bendPointUtilities\":2,\"./debounce\":3}],5:[function(_dereq_,module,exports){\nvar reconnectionUtilities = {\n\n // creates and returns a dummy node which is connected to the disconnected edge\n disconnectEdge: function (edge, cy, position, disconnectedEnd) {\n \n var dummyNode = {\n data: { \n id: 'nwt_reconnectEdge_dummy',\n ports: [],\n },\n style: {\n width: 1,\n height: 1,\n 'visibility': 'hidden'\n },\n renderedPosition: position\n };\n cy.add(dummyNode);\n\n var loc = (disconnectedEnd === 'source') ? \n {source: dummyNode.data.id} : \n {target: dummyNode.data.id};\n\n edge = edge.move(loc)[0];\n\n return {\n dummyNode: cy.nodes(\"#\" + dummyNode.data.id)[0],\n edge: edge\n };\n },\n\n connectEdge: function (edge, node, location) {\n if(!edge.isEdge() || !node.isNode())\n return;\n\n var loc = {};\n if(location === 'source')\n loc.source = node.id();\n \n else if(location === 'target')\n loc.target = node.id();\n \n else\n return;\n\n return edge.move(loc)[0];\n },\n\n copyEdge: function (oldEdge, newEdge) {\n this.copyBendPoints(oldEdge, newEdge);\n this.copyStyle(oldEdge, newEdge);\n },\n\n copyStyle: function (oldEdge, newEdge) {\n if(oldEdge && newEdge){\n newEdge.data('line-color', oldEdge.data('line-color'));\n newEdge.data('width', oldEdge.data('width'));\n newEdge.data('cardinality', oldEdge.data('cardinality'));\n }\n },\n\n copyBendPoints: function (oldEdge, newEdge) {\n if(oldEdge.hasClass('edgebendediting-hasbendpoints')){\n var bpDistances = oldEdge.data('cyedgebendeditingDistances');\n var bpWeights = oldEdge.data('cyedgebendeditingWeights');\n \n newEdge.data('cyedgebendeditingDistances', bpDistances);\n newEdge.data('cyedgebendeditingWeights', bpWeights);\n newEdge.addClass('edgebendediting-hasbendpoints');\n }\n },\n};\n \nmodule.exports = reconnectionUtilities;\n \n},{}],6:[function(_dereq_,module,exports){\nmodule.exports = function (cy, bendPointUtilities, params) {\n if (cy.undoRedo == null)\n return;\n\n var ur = cy.undoRedo({\n defaultActions: false,\n isDebug: true\n });\n\n function changeBendPoints(param) {\n var edge = cy.getElementById(param.edge.id());\n var result = {\n edge: edge,\n weights: param.set ? edge.data('cyedgebendeditingWeights') : param.weights,\n distances: param.set ? edge.data('cyedgebendeditingDistances') : param.distances,\n set: true//As the result will not be used for the first function call params should be used to set the data\n };\n\n var hasBend = param.weights && param.weights.length > 0;\n\n //Check if we need to set the weights and distances by the param values\n if (param.set) {\n hasBend ? edge.data('cyedgebendeditingWeights', param.weights) : edge.removeData('cyedgebendeditingWeights');\n hasBend ? edge.data('cyedgebendeditingDistances', param.distances) : edge.removeData('cyedgebendeditingDistances');\n\n //refresh the curve style as the number of bend point would be changed by the previous operation\n if (hasBend) {\n edge.addClass('edgebendediting-hasbendpoints');\n }\n else {\n edge.removeClass('edgebendediting-hasbendpoints');\n }\n }\n \n edge.trigger('cyedgebendediting.changeBendPoints');\n\n return result;\n }\n\n function moveDo(arg) {\n if (arg.firstTime) {\n delete arg.firstTime;\n return arg;\n }\n\n var edges = arg.edges;\n var positionDiff = arg.positionDiff;\n var result = {\n edges: edges,\n positionDiff: {\n x: -positionDiff.x,\n y: -positionDiff.y\n }\n };\n moveBendPointsUndoable(positionDiff, edges);\n\n return result;\n }\n\n function moveBendPointsUndoable(positionDiff, edges) {\n edges.forEach(function( edge ){\n edge = cy.getElementById(param.edge.id());\n var previousBendPointsPosition = bendPointUtilities.getSegmentPoints(edge);\n var nextBendPointsPosition = [];\n if (previousBendPointsPosition != undefined)\n {\n for (i=0; i 0)\n oldEdge = tmp;\n\n var newEdge = param.newEdge;\n var tmp = cy.getElementById(newEdge.data('id'));\n if(tmp && tmp.length > 0)\n newEdge = tmp;\n\n if(oldEdge.inside()){\n oldEdge = oldEdge.remove()[0];\n } \n \n if(newEdge.removed()){\n newEdge = newEdge.restore();\n newEdge.unselect();\n }\n \n return {\n oldEdge: newEdge,\n newEdge: oldEdge\n };\n }\n\n ur.action('changeBendPoints', changeBendPoints, changeBendPoints);\n ur.action('moveBendPoints', moveDo, moveDo);\n ur.action('reconnectEdge', reconnectEdge, reconnectEdge);\n ur.action('removeReconnectedEdge', removeReconnectedEdge, removeReconnectedEdge);\n};\n\n},{}]},{},[4])(4)\n});\n\n//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvVUlVdGlsaXRpZXMuanMiLCJzcmMvYmVuZFBvaW50VXRpbGl0aWVzLmpzIiwic3JjL2RlYm91bmNlLmpzIiwic3JjL2luZGV4LmpzIiwic3JjL3JlY29ubmVjdGlvblV0aWxpdGllcy5qcyIsInNyYy9yZWdpc3RlclVuZG9SZWRvRnVuY3Rpb25zLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxb0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdmJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsInZhciBkZWJvdW5jZSA9IHJlcXVpcmUoJy4vZGVib3VuY2UnKTtcclxudmFyIGJlbmRQb2ludFV0aWxpdGllcyA9IHJlcXVpcmUoJy4vYmVuZFBvaW50VXRpbGl0aWVzJyk7XHJcbnZhciByZWNvbm5lY3Rpb25VdGlsaXRpZXMgPSByZXF1aXJlKCcuL3JlY29ubmVjdGlvblV0aWxpdGllcycpO1xyXG52YXIgcmVnaXN0ZXJVbmRvUmVkb0Z1bmN0aW9ucyA9IHJlcXVpcmUoJy4vcmVnaXN0ZXJVbmRvUmVkb0Z1bmN0aW9ucycpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocGFyYW1zLCBjeSkge1xyXG4gIHZhciBmbiA9IHBhcmFtcztcclxuXHJcbiAgdmFyIGFkZEJlbmRQb2ludEN4dE1lbnVJZCA9ICdjeS1lZGdlLWJlbmQtZWRpdGluZy1jeHQtYWRkLWJlbmQtcG9pbnQnO1xyXG4gIHZhciByZW1vdmVCZW5kUG9pbnRDeHRNZW51SWQgPSAnY3ktZWRnZS1iZW5kLWVkaXRpbmctY3h0LXJlbW92ZS1iZW5kLXBvaW50JztcclxuICB2YXIgZVBvc2l0aW9uLCBlU3R5bGUsIGVSZW1vdmUsIGVBZGQsIGVab29tLCBlU2VsZWN0LCBlVW5zZWxlY3QsIGVUYXBTdGFydCwgZVRhcERyYWcsIGVUYXBFbmQsIGVDeHRUYXA7XHJcbiAgLy8gbGFzdCBzdGF0dXMgb2YgZ2VzdHVyZXNcclxuICB2YXIgbGFzdFBhbm5pbmdFbmFibGVkLCBsYXN0Wm9vbWluZ0VuYWJsZWQsIGxhc3RCb3hTZWxlY3Rpb25FbmFibGVkO1xyXG4gIC8vIHN0YXR1cyBvZiBlZGdlIHRvIGhpZ2hsaWdodCBiZW5kcyBhbmQgc2VsZWN0ZWQgZWRnZXNcclxuICB2YXIgZWRnZVRvSGlnaGxpZ2h0QmVuZHMsIG51bWJlck9mU2VsZWN0ZWRFZGdlcztcclxuICBcclxuICB2YXIgZnVuY3Rpb25zID0ge1xyXG4gICAgaW5pdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAvLyByZWdpc3RlciB1bmRvIHJlZG8gZnVuY3Rpb25zXHJcbiAgICAgIHJlZ2lzdGVyVW5kb1JlZG9GdW5jdGlvbnMoY3ksIGJlbmRQb2ludFV0aWxpdGllcywgcGFyYW1zKTtcclxuICAgICAgXHJcbiAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgdmFyIG9wdHMgPSBwYXJhbXM7XHJcbiAgICAgIHZhciAkY29udGFpbmVyID0gJCh0aGlzKTtcclxuICAgICAgdmFyICRjYW52YXMgPSAkKCc8Y2FudmFzPjwvY2FudmFzPicpO1xyXG5cclxuICAgICAgJGNvbnRhaW5lci5hcHBlbmQoJGNhbnZhcyk7XHJcblxyXG4gICAgICB2YXIgY3h0QWRkQmVuZFBvaW50RmNuID0gZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgdmFyIGVkZ2UgPSBldmVudC50YXJnZXQgfHwgZXZlbnQuY3lUYXJnZXQ7XHJcbiAgICAgICAgaWYoIWJlbmRQb2ludFV0aWxpdGllcy5pc0lnbm9yZWRFZGdlKGVkZ2UpKSB7XHJcblxyXG4gICAgICAgICAgdmFyIHBhcmFtID0ge1xyXG4gICAgICAgICAgICBlZGdlOiBlZGdlLFxyXG4gICAgICAgICAgICB3ZWlnaHRzOiBlZGdlLmRhdGEoJ2N5ZWRnZWJlbmRlZGl0aW5nV2VpZ2h0cycpID8gW10uY29uY2F0KGVkZ2UuZGF0YSgnY3llZGdlYmVuZGVkaXRpbmdXZWlnaHRzJykpIDogZWRnZS5kYXRhKCdjeWVkZ2ViZW5kZWRpdGluZ1dlaWdodHMnKSxcclxuICAgICAgICAgICAgZGlzdGFuY2VzOiBlZGdlLmRhdGEoJ2N5ZWRnZWJlbmRlZGl0aW5nRGlzdGFuY2VzJykgPyBbXS5jb25jYXQoZWRnZS5kYXRhKCdjeWVkZ2ViZW5kZWRpdGluZ0Rpc3RhbmNlcycpKSA6IGVkZ2UuZGF0YSgnY3llZGdlYmVuZGVkaXRpbmdEaXN0YW5jZXMnKVxyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICBiZW5kUG9pbnRVdGlsaXRpZXMuYWRkQmVuZFBvaW50KCk7XHJcblxyXG4gICAgICAgICAgaWYgKG9wdGlvbnMoKS51bmRvYWJsZSkge1xyXG4gICAgICAgICAgICBjeS51bmRvUmVkbygpLmRvKCdjaGFuZ2VCZW5kUG9pbnRzJywgcGFyYW0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICByZWZyZXNoRHJhd3MoKTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHZhciBjeHRSZW1vdmVCZW5kUG9pbnRGY24gPSBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICB2YXIgZWRnZSA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5jeVRhcmdldDtcclxuICAgICAgICBcclxuICAgICAgICB2YXIgcGFyYW0gPSB7XHJcbiAgICAgICAgICBlZGdlOiBlZGdlLFxyXG4gICAgICAgICAgd2VpZ2h0czogW10uY29uY2F0KGVkZ2UuZGF0YSgnY3llZGdlYmVuZGVkaXRpbmdXZWlnaHRzJykpLFxyXG4gICAgICAgICAgZGlzdGFuY2VzOiBbXS5jb25jYXQoZWRnZS5kYXRhKCdjeWVkZ2ViZW5kZWRpdGluZ0Rpc3RhbmNlcycpKVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGJlbmRQb2ludFV0aWxpdGllcy5yZW1vdmVCZW5kUG9pbnQoKTtcclxuICAgICAgICBcclxuICAgICAgICBpZihvcHRpb25zKCkudW5kb2FibGUpIHtcclxuICAgICAgICAgIGN5LnVuZG9SZWRvKCkuZG8oJ2NoYW5nZUJlbmRQb2ludHMnLCBwYXJhbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZWZyZXNoRHJhd3MoKX0sIDUwKSA7XHJcbiAgICAgIH07XHJcbiAgICAgIFxyXG4gICAgICAvLyBmdW5jdGlvbiB0byByZWNvbm5lY3QgZWRnZVxyXG4gICAgICB2YXIgaGFuZGxlUmVjb25uZWN0RWRnZSA9IG9wdHMuaGFuZGxlUmVjb25uZWN0RWRnZTtcclxuICAgICAgLy8gZnVuY3Rpb24gdG8gdmFsaWRhdGUgZWRnZSBzb3VyY2UgYW5kIHRhcmdldCBvbiByZWNvbm5lY3Rpb25cclxuICAgICAgdmFyIHZhbGlkYXRlRWRnZSA9IG9wdHMudmFsaWRhdGVFZGdlOyBcclxuICAgICAgLy8gZnVuY3Rpb24gdG8gYmUgY2FsbGVkIG9uIGludmFsaWQgZWRnZSByZWNvbm5lY3Rpb25cclxuICAgICAgdmFyIGFjdE9uVW5zdWNjZXNzZnVsUmVjb25uZWN0aW9uID0gb3B0cy5hY3RPblVuc3VjY2Vzc2Z1bFJlY29ubmVjdGlvbjtcclxuICAgICAgXHJcbiAgICAgIHZhciBtZW51SXRlbXMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWQ6IGFkZEJlbmRQb2ludEN4dE1lbnVJZCxcclxuICAgICAgICAgIHRpdGxlOiBvcHRzLmFkZEJlbmRNZW51SXRlbVRpdGxlLFxyXG4gICAgICAgICAgY29udGVudDogJ0FkZCBCZW5kIFBvaW50JyxcclxuICAgICAgICAgIHNlbGVjdG9yOiAnZWRnZScsXHJcbiAgICAgICAgICBvbkNsaWNrRnVuY3Rpb246IGN4dEFkZEJlbmRQb2ludEZjblxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWQ6IHJlbW92ZUJlbmRQb2ludEN4dE1lbnVJZCxcclxuICAgICAgICAgIHRpdGxlOiBvcHRzLnJlbW92ZUJlbmRNZW51SXRlbVRpdGxlLFxyXG4gICAgICAgICAgY29udGVudDogJ1JlbW92ZSBCZW5kIFBvaW50JyxcclxuICAgICAgICAgIHNlbGVjdG9yOiAnZWRnZScsXHJcbiAgICAgICAgICBvbkNsaWNrRnVuY3Rpb246IGN4dFJlbW92ZUJlbmRQb2ludEZjblxyXG4gICAgICAgIH1cclxuICAgICAgXTtcclxuICAgICAgXHJcbiAgICAgIGlmKGN5LmNvbnRleHRNZW51cykge1xyXG4gICAgICAgIHZhciBtZW51cyA9IGN5LmNvbnRleHRNZW51cygnZ2V0Jyk7XHJcbiAgICAgICAgLy8gSWYgY29udGV4dCBtZW51cyBpcyBhY3RpdmUganVzdCBhcHBlbmQgbWVudSBpdGVtcyBlbHNlIGFjdGl2YXRlIHRoZSBleHRlbnNpb25cclxuICAgICAgICAvLyB3aXRoIGluaXRpYWwgbWVudSBpdGVtc1xyXG4gICAgICAgIGlmIChtZW51cy5pc0FjdGl2ZSgpKSB7XHJcbiAgICAgICAgICBtZW51cy5hcHBlbmRNZW51SXRlbXMobWVudUl0ZW1zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjeS5jb250ZXh0TWVudXMoe1xyXG4gICAgICAgICAgICBtZW51SXRlbXM6IG1lbnVJdGVtc1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICB2YXIgX3NpemVDYW52YXMgPSBkZWJvdW5jZShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgJGNhbnZhc1xyXG4gICAgICAgICAgLmF0dHIoJ2hlaWdodCcsICRjb250YWluZXIuaGVpZ2h0KCkpXHJcbiAgICAgICAgICAuYXR0cignd2lkdGgnLCAkY29udGFpbmVyLndpZHRoKCkpXHJcbiAgICAgICAgICAuY3NzKHtcclxuICAgICAgICAgICAgJ3Bvc2l0aW9uJzogJ2Fic29sdXRlJyxcclxuICAgICAgICAgICAgJ3RvcCc6IDAsXHJcbiAgICAgICAgICAgICdsZWZ0JzogMCxcclxuICAgICAgICAgICAgJ3otaW5kZXgnOiBvcHRpb25zKCkuekluZGV4XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIDtcclxuXHJcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICB2YXIgY2FudmFzQmIgPSAkY2FudmFzLm9mZnNldCgpO1xyXG4gICAgICAgICAgdmFyIGNvbnRhaW5lckJiID0gJGNvbnRhaW5lci5vZmZzZXQoKTtcclxuXHJcbiAgICAgICAgICAkY2FudmFzXHJcbiAgICAgICAgICAgIC5jc3Moe1xyXG4gICAgICAgICAgICAgICd0b3AnOiAtKGNhbnZhc0JiLnRvcCAtIGNvbnRhaW5lckJiLnRvcCksXHJcbiAgICAgICAgICAgICAgJ2xlZnQnOiAtKGNhbnZhc0JiLmxlZnQgLSBjb250YWluZXJCYi5sZWZ0KVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgO1xyXG5cclxuICAgICAgICAgIC8vIHJlZHJhdyBvbiBjYW52YXMgcmVzaXplXHJcbiAgICAgICAgICBpZihjeSl7XHJcbiAgICAgICAgICAgIHJlZnJlc2hEcmF3cygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sIDApO1xyXG5cclxuICAgICAgfSwgMjUwKTtcclxuXHJcbiAgICAgIGZ1bmN0aW9uIHNpemVDYW52YXMoKSB7XHJcbiAgICAgICAgX3NpemVDYW52YXMoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc2l6ZUNhbnZhcygpO1xyXG5cclxuICAgICAgJCh3aW5kb3cpLmJpbmQoJ3Jlc2l6ZScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBzaXplQ2FudmFzKCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdmFyIGN0eCA9ICRjYW52YXNbMF0uZ2V0Q29udGV4dCgnMmQnKTtcclxuXHJcbiAgICAgIC8vIHdyaXRlIG9wdGlvbnMgdG8gZGF0YVxyXG4gICAgICB2YXIgZGF0YSA9ICRjb250YWluZXIuZGF0YSgnY3llZGdlYmVuZGVkaXRpbmcnKTtcclxuICAgICAgaWYgKGRhdGEgPT0gbnVsbCkge1xyXG4gICAgICAgIGRhdGEgPSB7fTtcclxuICAgICAgfVxyXG4gICAgICBkYXRhLm9wdGlvbnMgPSBvcHRzO1xyXG5cclxuICAgICAgdmFyIG9wdENhY2hlO1xyXG5cclxuICAgICAgZnVuY3Rpb24gb3B0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4gb3B0Q2FjaGUgfHwgKG9wdENhY2hlID0gJGNvbnRhaW5lci5kYXRhKCdjeWVkZ2ViZW5kZWRpdGluZycpLm9wdGlvbnMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyB3ZSB3aWxsIG5lZWQgdG8gY29udmVydCBtb2RlbCBwb3NpdG9ucyB0byByZW5kZXJlZCBwb3NpdGlvbnNcclxuICAgICAgZnVuY3Rpb24gY29udmVydFRvUmVuZGVyZWRQb3NpdGlvbihtb2RlbFBvc2l0aW9uKSB7XHJcbiAgICAgICAgdmFyIHBhbiA9IGN5LnBhbigpO1xyXG4gICAgICAgIHZhciB6b29tID0gY3kuem9vbSgpO1xyXG5cclxuICAgICAgICB2YXIgeCA9IG1vZGVsUG9zaXRpb24ueCAqIHpvb20gKyBwYW4ueDtcclxuICAgICAgICB2YXIgeSA9IG1vZGVsUG9zaXRpb24ueSAqIHpvb20gKyBwYW4ueTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIHg6IHgsXHJcbiAgICAgICAgICB5OiB5XHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgZnVuY3Rpb24gcmVmcmVzaERyYXdzKCkge1xyXG5cclxuICAgICAgICB2YXIgdyA9ICRjb250YWluZXIud2lkdGgoKTtcclxuICAgICAgICB2YXIgaCA9ICRjb250YWluZXIuaGVpZ2h0KCk7XHJcblxyXG4gICAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgdywgaCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYoIGVkZ2VUb0hpZ2hsaWdodEJlbmRzICkge1xyXG4gICAgICAgICAgcmVuZGVyQmVuZFNoYXBlcyhlZGdlVG9IaWdobGlnaHRCZW5kcyk7XHJcbiAgICAgICAgICByZW5kZXJFbmRQb2ludFNoYXBlcyhlZGdlVG9IaWdobGlnaHRCZW5kcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAvLyByZW5kZXIgdGhlIGJlbmQgc2hhcGVzIG9mIHRoZSBnaXZlbiBlZGdlXHJcbiAgICAgIGZ1bmN0aW9uIHJlbmRlckJlbmRTaGFwZXMoZWRnZSkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmKCFlZGdlLmhhc0NsYXNzKCdlZGdlYmVuZGVkaXRpbmctaGFzYmVuZHBvaW50cycpKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHZhciBzZWdwdHMgPSBiZW5kUG9pbnRVdGlsaXRpZXMuZ2V0U2VnbWVudFBvaW50cyhlZGdlKTsvL2VkZ2UuX3ByaXZhdGUucmRhdGEuc2VncHRzO1xyXG4gICAgICAgIHZhciBsZW5ndGggPSBnZXRCZW5kU2hhcGVzTGVuZ3RoKGVkZ2UpICogMC42NTtcclxuICAgICAgICBcclxuICAgICAgICB2YXIgc3JjUG9zID0gZWRnZS5zb3VyY2UoKS5wb3NpdGlvbigpO1xyXG4gICAgICAgIHZhciB0Z3RQb3MgPSBlZGdlLnRhcmdldCgpLnBvc2l0aW9uKCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdmFyIHdlaWdodHMgPSBlZGdlLmRhdGEoJ2N5ZWRnZWJlbmRlZGl0aW5nV2VpZ2h0cycpO1xyXG4gICAgICAgIHZhciBkaXN0YW5jZXMgPSBlZGdlLmRhdGEoJ2N5ZWRnZWJlbmRlZGl0aW5nRGlzdGFuY2VzJyk7XHJcblxyXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IHNlZ3B0cyAmJiBpIDwgc2VncHRzLmxlbmd0aDsgaSA9IGkgKyAyKXtcclxuICAgICAgICAgIHZhciBiZW5kWCA9IHNlZ3B0c1tpXTtcclxuICAgICAgICAgIHZhciBiZW5kWSA9IHNlZ3B0c1tpICsgMV07XHJcblxyXG4gICAgICAgICAgdmFyIG9sZFN0eWxlID0gY3R4LmZpbGxTdHlsZTtcclxuICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBcIiMwMDBcIjsgLy8gYmxhY2tcclxuICAgICAgICAgIHJlbmRlckJlbmRTaGFwZShiZW5kWCwgYmVuZFksIGxlbmd0aCk7XHJcbiAgICAgICAgICBjdHguZmlsbFN0eWxlID0gb2xkU3R5bGU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAvLyByZW5kZXIgYSBiZW5kIHNoYXBlIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnNcclxuICAgICAgZnVuY3Rpb24gcmVuZGVyQmVuZFNoYXBlKGJlbmRYLCBiZW5kWSwgbGVuZ3RoKSB7XHJcbiAgICAgICAgLy8gZ2V0IHRoZSB0b3AgbGVmdCBjb29yZGluYXRlc1xyXG4gICAgICAgIHZhciB0b3BMZWZ0WCA9IGJlbmRYIC0gbGVuZ3RoIC8gMjtcclxuICAgICAgICB2YXIgdG9wTGVmdFkgPSBiZW5kWSAtIGxlbmd0aCAvIDI7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gY29udmVydCB0byByZW5kZXJlZCBwYXJhbWV0ZXJzXHJcbiAgICAgICAgdmFyIHJlbmRlcmVkVG9wTGVmdFBvcyA9IGNvbnZlcnRUb1JlbmRlcmVkUG9zaXRpb24oe3g6IHRvcExlZnRYLCB5OiB0b3BMZWZ0WX0pO1xyXG4gICAgICAgIGxlbmd0aCAqPSBjeS56b29tKCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gcmVuZGVyIGJlbmQgc2hhcGVcclxuICAgICAgICBjdHguYmVnaW5QYXRoKCk7XHJcbiAgICAgICAgY3R4LnJlY3QocmVuZGVyZWRUb3BMZWZ0UG9zLngsIHJlbmRlcmVkVG9wTGVmdFBvcy55LCBsZW5ndGgsIGxlbmd0aCk7XHJcbiAgICAgICAgY3R4LmZpbGwoKTtcclxuICAgICAgICBjdHguY2xvc2VQYXRoKCk7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIC8vIHJlbmRlciB0aGUgZW5kIHBvaW50cyBzaGFwZXMgb2YgdGhlIGdpdmVuIGVkZ2VcclxuICAgICAgZnVuY3Rpb24gcmVuZGVyRW5kUG9pbnRTaGFwZXMoZWRnZSkge1xyXG4gICAgICAgIGlmKCFlZGdlKXtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBlZGdlX3B0cyA9IGJlbmRQb2ludFV0aWxpdGllcy5nZXRTZWdtZW50UG9pbnRzKGVkZ2UpO1xyXG4gICAgICAgIGlmKHR5cGVvZiBlZGdlX3B0cyA9PT0gJ3VuZGVmaW5lZCcpe1xyXG4gICAgICAgICAgZWRnZV9wdHMgPSBbXTtcclxuICAgICAgICB9ICAgICAgIFxyXG4gICAgICAgIHZhciBzb3VyY2VQb3MgPSBlZGdlLnNvdXJjZUVuZHBvaW50KCk7XHJcbiAgICAgICAgdmFyIHRhcmdldFBvcyA9IGVkZ2UudGFyZ2V0RW5kcG9pbnQoKTtcclxuICAgICAgICBlZGdlX3B0cy51bnNoaWZ0KHNvdXJjZVBvcy55KTtcclxuICAgICAgICBlZGdlX3B0cy51bnNoaWZ0KHNvdXJjZVBvcy54KTtcclxuICAgICAgICBlZGdlX3B0cy5wdXNoKHRhcmdldFBvcy54KTtcclxuICAgICAgICBlZGdlX3B0cy5wdXNoKHRhcmdldFBvcy55KTsgXHJcblxyXG4gICAgICAgXHJcbiAgICAgICAgaWYoIWVkZ2VfcHRzKVxyXG4gICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICB2YXIgc3JjID0ge1xyXG4gICAgICAgICAgeDogZWRnZV9wdHNbMF0sXHJcbiAgICAgICAgICB5OiBlZGdlX3B0c1sxXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHRhcmdldCA9IHtcclxuICAgICAgICAgIHg6IGVkZ2VfcHRzW2VkZ2VfcHRzLmxlbmd0aC0yXSxcclxuICAgICAgICAgIHk6IGVkZ2VfcHRzW2VkZ2VfcHRzLmxlbmd0aC0xXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIG5leHRUb1NvdXJjZSA9IHtcclxuICAgICAgICAgIHg6IGVkZ2VfcHRzWzJdLFxyXG4gICAgICAgICAgeTogZWRnZV9wdHNbM11cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG5leHRUb1RhcmdldCA9IHtcclxuICAgICAgICAgIHg6IGVkZ2VfcHRzW2VkZ2VfcHRzLmxlbmd0aC00XSxcclxuICAgICAgICAgIHk6IGVkZ2VfcHRzW2VkZ2VfcHRzLmxlbmd0aC0zXVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbGVuZ3RoID0gZ2V0QmVuZFNoYXBlc0xlbmd0aChlZGdlKSAqIDAuNjU7XHJcblxyXG4gICAgICAgIHZhciBvbGRTdHJva2UgPSBjdHguc3Ryb2tlU3R5bGU7XHJcbiAgICAgICAgdmFyIG9sZFdpZHRoID0gY3R4LmxpbmVXaWR0aDtcclxuICAgICAgICB2YXIgb2xkRmlsbCA9IGN0eC5maWxsU3R5bGU7XHJcblxyXG4gICAgICAgIGN0eC5maWxsU3R5bGUgPSBcIiMwMDBcIjsgLy8gYmxhY2tcclxuICAgICAgICBcclxuICAgICAgICByZW5kZXJFYWNoRW5kUG9pbnRTaGFwZShzcmMsIHRhcmdldCwgbGVuZ3RoLG5leHRUb1NvdXJjZSxuZXh0VG9UYXJnZXQpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IG9sZFN0cm9rZTtcclxuICAgICAgICBjdHguZmlsbFN0eWxlID0gb2xkRmlsbDtcclxuICAgICAgICBjdHgubGluZVdpZHRoID0gb2xkV2lkdGg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZ1bmN0aW9uIHJlbmRlckVhY2hFbmRQb2ludFNoYXBlKHNvdXJjZSwgdGFyZ2V0LCBsZW5ndGgsbmV4dFRvU291cmNlLG5leHRUb1RhcmdldCkge1xyXG4gICAgICAgIC8vIGdldCB0aGUgdG9wIGxlZnQgY29vcmRpbmF0ZXMgb2Ygc291cmNlIGFuZCB0YXJnZXRcclxuICAgICAgICB2YXIgc1RvcExlZnRYID0gc291cmNlLnggLSBsZW5ndGggLyAyO1xyXG4gICAgICAgIHZhciBzVG9wTGVmdFkgPSBzb3VyY2UueSAtIGxlbmd0aCAvIDI7XHJcblxyXG4gICAgICAgIHZhciB0VG9wTGVmdFggPSB0YXJnZXQueCAtIGxlbmd0aCAvIDI7XHJcbiAgICAgICAgdmFyIHRUb3BMZWZ0WSA9IHRhcmdldC55IC0gbGVuZ3RoIC8gMjtcclxuXHJcbiAgICAgICAgdmFyIG5leHRUb1NvdXJjZVggPSBuZXh0VG9Tb3VyY2UueCAtIGxlbmd0aCAvMjtcclxuICAgICAgICB2YXIgbmV4dFRvU291cmNlWSA9IG5leHRUb1NvdXJjZS55IC0gbGVuZ3RoIC8gMjtcclxuXHJcbiAgICAgICAgdmFyIG5leHRUb1RhcmdldFggPSBuZXh0VG9UYXJnZXQueCAtIGxlbmd0aCAvMjtcclxuICAgICAgICB2YXIgbmV4dFRvVGFyZ2V0WSA9IG5leHRUb1RhcmdldC55IC0gbGVuZ3RoIC8yO1xyXG5cclxuXHJcbiAgICAgICAgLy8gY29udmVydCB0byByZW5kZXJlZCBwYXJhbWV0ZXJzXHJcbiAgICAgICAgdmFyIHJlbmRlcmVkU291cmNlUG9zID0gY29udmVydFRvUmVuZGVyZWRQb3NpdGlvbih7eDogc1RvcExlZnRYLCB5OiBzVG9wTGVmdFl9KTtcclxuICAgICAgICB2YXIgcmVuZGVyZWRUYXJnZXRQb3MgPSBjb252ZXJ0VG9SZW5kZXJlZFBvc2l0aW9uKHt4OiB0VG9wTGVmdFgsIHk6IHRUb3BMZWZ0WX0pO1xyXG4gICAgICAgIGxlbmd0aCA9IGxlbmd0aCAqIGN5Lnpvb20oKSAvIDI7XHJcblxyXG4gICAgICAgIHZhciByZW5kZXJlZE5leHRUb1NvdXJjZSA9IGNvbnZlcnRUb1JlbmRlcmVkUG9zaXRpb24oe3g6IG5leHRUb1NvdXJjZVgsIHk6IG5leHRUb1NvdXJjZVl9KTtcclxuICAgICAgICB2YXIgcmVuZGVyZWROZXh0VG9UYXJnZXQgPSBjb252ZXJ0VG9SZW5kZXJlZFBvc2l0aW9uKHt4OiBuZXh0VG9UYXJnZXRYLCB5OiBuZXh0VG9UYXJnZXRZfSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9ob3cgZmFyIHRvIGdvIGZyb20gdGhlIG5vZGUgYWxvbmcgdGhlIGVkZ2VcclxuICAgICAgICB2YXIgZGlzdGFuY2VGcm9tTm9kZSA9IGxlbmd0aDtcclxuXHJcbiAgICAgICAgdmFyIGRpc3RhbmNlU291cmNlID0gTWF0aC5zcXJ0KE1hdGgucG93KHJlbmRlcmVkTmV4dFRvU291cmNlLnggLSByZW5kZXJlZFNvdXJjZVBvcy54LDIpICsgTWF0aC5wb3cocmVuZGVyZWROZXh0VG9Tb3VyY2UueSAtIHJlbmRlcmVkU291cmNlUG9zLnksMikpOyAgICAgICAgXHJcbiAgICAgICAgdmFyIHNvdXJjZUVuZFBvaW50WCA9IHJlbmRlcmVkU291cmNlUG9zLnggKyAoKGRpc3RhbmNlRnJvbU5vZGUvIGRpc3RhbmNlU291cmNlKSogKHJlbmRlcmVkTmV4dFRvU291cmNlLnggLSByZW5kZXJlZFNvdXJjZVBvcy54KSk7XHJcbiAgICAgICAgdmFyIHNvdXJjZUVuZFBvaW50WSA9IHJlbmRlcmVkU291cmNlUG9zLnkgKyAoKGRpc3RhbmNlRnJvbU5vZGUvIGRpc3RhbmNlU291cmNlKSogKHJlbmRlcmVkTmV4dFRvU291cmNlLnkgLSByZW5kZXJlZFNvdXJjZVBvcy55KSk7XHJcblxyXG5cclxuICAgICAgICB2YXIgZGlzdGFuY2VUYXJnZXQgPSBNYXRoLnNxcnQoTWF0aC5wb3cocmVuZGVyZWROZXh0VG9UYXJnZXQueCAtIHJlbmRlcmVkVGFyZ2V0UG9zLngsMikgKyBNYXRoLnBvdyhyZW5kZXJlZE5leHRUb1RhcmdldC55IC0gcmVuZGVyZWRUYXJnZXRQb3MueSwyKSk7ICAgICAgICBcclxuICAgICAgICB2YXIgdGFyZ2V0RW5kUG9pbnRYID0gcmVuZGVyZWRUYXJnZXRQb3MueCArICgoZGlzdGFuY2VGcm9tTm9kZS8gZGlzdGFuY2VUYXJnZXQpKiAocmVuZGVyZWROZXh0VG9UYXJnZXQueCAtIHJlbmRlcmVkVGFyZ2V0UG9zLngpKTtcclxuICAgICAgICB2YXIgdGFyZ2V0RW5kUG9pbnRZID0gcmVuZGVyZWRUYXJnZXRQb3MueSArICgoZGlzdGFuY2VGcm9tTm9kZS8gZGlzdGFuY2VUYXJnZXQpKiAocmVuZGVyZWROZXh0VG9UYXJnZXQueSAtIHJlbmRlcmVkVGFyZ2V0UG9zLnkpKTsgXHJcblxyXG4gICAgICAgIC8vIHJlbmRlciBlbmQgcG9pbnQgc2hhcGUgZm9yIHNvdXJjZSBhbmQgdGFyZ2V0XHJcbiAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xyXG4gICAgICAgIGN0eC5hcmMoc291cmNlRW5kUG9pbnRYICsgbGVuZ3RoLCBzb3VyY2VFbmRQb2ludFkgKyBsZW5ndGgsIGxlbmd0aCwgMCwgMipNYXRoLlBJLCBmYWxzZSk7XHJcbiAgICAgICAgY3R4LmFyYyh0YXJnZXRFbmRQb2ludFggKyBsZW5ndGgsIHRhcmdldEVuZFBvaW50WSArIGxlbmd0aCwgbGVuZ3RoLCAwLCAyKk1hdGguUEksIGZhbHNlKTtcclxuICAgICAgICBjdHguZmlsbCgpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIGRyYXdEaWFtb25kU2hhcGUocmVuZGVyZWRTb3VyY2VQb3MueCwgcmVuZGVyZWRTb3VyY2VQb3MueSwgbGVuZ3RoKTtcclxuICAgICAgICAvLyBkcmF3RGlhbW9uZFNoYXBlKHJlbmRlcmVkVGFyZ2V0UG9zLngsIHJlbmRlcmVkVGFyZ2V0UG9zLnksIGxlbmd0aCk7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGRyYXdEaWFtb25kU2hhcGUodG9wTGVmdFgsIHRvcExlZnRZLCBsZW5ndGgpe1xyXG4gICAgICAgICAgdmFyIGwgPSAobGVuZ3RoKSAvICgzICogNiArIDIpO1xyXG5cclxuICAgICAgICAgIC8vIERyYXcgYWxsIGNvcm5lcnNcclxuICAgICAgICAgIGRyYXdDb3JuZXIodG9wTGVmdFgsIHRvcExlZnRZICsgbGVuZ3RoLzIsIGwsICdsZWZ0Jyk7XHJcbiAgICAgICAgICBkcmF3Q29ybmVyKHRvcExlZnRYICsgbGVuZ3RoLzIsIHRvcExlZnRZLCBsLCAndG9wJyk7XHJcbiAgICAgICAgICBkcmF3Q29ybmVyKHRvcExlZnRYICsgbGVuZ3RoLzIsIHRvcExlZnRZICsgbGVuZ3RoLCBsLCAnYm90dG9tJyk7XHJcbiAgICAgICAgICBkcmF3Q29ybmVyKHRvcExlZnRYICsgbGVuZ3RoLCB0b3BMZWZ0WSArIGxlbmd0aC8yLCBsLCAncmlnaHQnKTtcclxuXHJcbiAgICAgICAgICBkcmF3RGFzaGVkTGluZSh0b3BMZWZ0WCwgdG9wTGVmdFkgKyBsZW5ndGgvMiwgdG9wTGVmdFggKyBsZW5ndGgvMiwgdG9wTGVmdFksIGwpO1xyXG4gICAgICAgICAgZHJhd0Rhc2hlZExpbmUodG9wTGVmdFggKyBsZW5ndGgvMiwgdG9wTGVmdFksIHRvcExlZnRYICsgbGVuZ3RoLCB0b3BMZWZ0WSArIGxlbmd0aC8yLCBsKTtcclxuICAgICAgICAgIGRyYXdEYXNoZWRMaW5lKHRvcExlZnRYICsgbGVuZ3RoLCB0b3BMZWZ0WSArIGxlbmd0aC8yLCB0b3BMZWZ0WCArIGxlbmd0aC8yLCB0b3BMZWZ0WSArIGxlbmd0aCwgbCk7XHJcbiAgICAgICAgICBkcmF3RGFzaGVkTGluZSh0b3BMZWZ0WCArIGxlbmd0aC8yLCB0b3BMZWZ0WSArIGxlbmd0aCwgdG9wTGVmdFgsIHRvcExlZnRZICsgbGVuZ3RoLzIsIGwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gZHJhd0Nvcm5lcih4LCB5LCBsLCBjb3JuZXIpe1xyXG4gICAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xyXG4gICAgICAgICAgY3R4Lm1vdmVUbyh4LCB5KTtcclxuICAgICAgICAgIHN3aXRjaChjb3JuZXIpe1xyXG4gICAgICAgICAgICBjYXNlICdsZWZ0Jzoge1xyXG4gICAgICAgICAgICAgIGN0eC5saW5lVG8oeCArIGwsIHkgLSBsKTtcclxuICAgICAgICAgICAgICBjdHgubGluZVRvKHgsIHkpO1xyXG4gICAgICAgICAgICAgIGN0eC5saW5lVG8oeCArIGwsIHkgKyBsKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICd0b3AnOiB7XHJcbiAgICAgICAgICAgICAgY3R4LmxpbmVUbyh4IC0gbCwgeSArIGwpO1xyXG4gICAgICAgICAgICAgIGN0eC5saW5lVG8oeCwgeSk7XHJcbiAgICAgICAgICAgICAgY3R4LmxpbmVUbyh4ICsgbCwgeSArIGwpO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgJ3JpZ2h0Jzoge1xyXG4gICAgICAgICAgICAgIGN0eC5saW5lVG8oeCAtIGwsIHkgLSBsKTtcclxuICAgICAgICAgICAgICBjdHgubGluZVRvKHgsIHkpO1xyXG4gICAgICAgICAgICAgIGN0eC5saW5lVG8oeCAtIGwsIHkgKyBsKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICdib3R0b20nOiB7XHJcbiAgICAgICAgICAgICAgY3R4LmxpbmVUbyh4ICsgbCwgeSAtIGwpO1xyXG4gICAgICAgICAgICAgIGN0eC5saW5lVG8oeCwgeSk7XHJcbiAgICAgICAgICAgICAgY3R4LmxpbmVUbyh4IC0gbCwgeSAtIGwpO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgJ2RlZmF1bHQnOlxyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGN0eC5zdHJva2UoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGRyYXdEYXNoZWRMaW5lKHgxLCB5MSwgeDIsIHkyLCBsKXtcclxuICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTtcclxuICAgICAgICAgIGN0eC5tb3ZlVG8oeDEsIHkxKTtcclxuICAgICAgICAgIGN0eC5saW5lVG8oeDIsIHkyKTtcclxuICAgICAgICAgIGN0eC5zZXRMaW5lRGFzaChbMipsLGxdKTtcclxuICAgICAgICAgIGN0eC5zdHJva2UoKTtcclxuICAgICAgICAgIGN0eC5zZXRMaW5lRGFzaChbXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBjaGFuZ2VzIGNvbG9yIHRvbmVcclxuICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTU2MDI0OC9wcm9ncmFtbWF0aWNhbGx5LWxpZ2h0ZW4tb3ItZGFya2VuLWEtaGV4LWNvbG9yLW9yLXJnYi1hbmQtYmxlbmQtY29sb3JzXHJcbiAgICAgIGZ1bmN0aW9uIHNoYWRlQmxlbmQocCxjMCxjMSkge1xyXG4gICAgICAgIHZhciBuPXA8MD9wKi0xOnAsdT1NYXRoLnJvdW5kLHc9cGFyc2VJbnQ7XHJcbiAgICAgICAgaWYoYzAubGVuZ3RoPjcpe1xyXG4gICAgICAgICAgdmFyIGY9YzAuc3BsaXQoXCIsXCIpLHQ9KGMxP2MxOnA8MD9cInJnYigwLDAsMClcIjpcInJnYigyNTUsMjU1LDI1NSlcIikuc3BsaXQoXCIsXCIpLFI9dyhmWzBdLnNsaWNlKDQpKSxHPXcoZlsxXSksQj13KGZbMl0pO1xyXG4gICAgICAgICAgcmV0dXJuIFwicmdiKFwiKyh1KCh3KHRbMF0uc2xpY2UoNCkpLVIpKm4pK1IpK1wiLFwiKyh1KCh3KHRbMV0pLUcpKm4pK0cpK1wiLFwiKyh1KCh3KHRbMl0pLUIpKm4pK0IpK1wiKVwiXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICB2YXIgZj13KGMwLnNsaWNlKDEpLDE2KSx0PXcoKGMxP2MxOnA8MD9cIiMwMDAwMDBcIjpcIiNGRkZGRkZcIikuc2xpY2UoMSksMTYpLFIxPWY+PjE2LEcxPWY+PjgmMHgwMEZGLEIxPWYmMHgwMDAwRkY7XHJcbiAgICAgICAgICByZXR1cm4gXCIjXCIrKDB4MTAwMDAwMCsodSgoKHQ+PjE2KS1SMSkqbikrUjEpKjB4MTAwMDArKHUoKCh0Pj44JjB4MDBGRiktRzEpKm4pK0cxKSoweDEwMCsodSgoKHQmMHgwMDAwRkYpLUIxKSpuKStCMSkpLnRvU3RyaW5nKDE2KS5zbGljZSgxKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gZ2V0IHRoZSBsZW5ndGggb2YgYmVuZCBwb2ludHMgdG8gYmUgcmVuZGVyZWRcclxuICAgICAgZnVuY3Rpb24gZ2V0QmVuZFNoYXBlc0xlbmd0aChlZGdlKSB7XHJcbiAgICAgICAgdmFyIGZhY3RvciA9IG9wdGlvbnMoKS5iZW5kU2hhcGVTaXplRmFjdG9yO1xyXG4gICAgICAgIGlmIChwYXJzZUZsb2F0KGVkZ2UuY3NzKCd3aWR0aCcpKSA8PSAyLjUpXHJcbiAgICAgICAgICByZXR1cm4gMi41ICogZmFjdG9yO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuIHBhcnNlRmxvYXQoZWRnZS5jc3MoJ3dpZHRoJykpKmZhY3RvcjtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgLy8gY2hlY2sgaWYgdGhlIHBvaW50IHJlcHJlc2VudGVkIGJ5IHt4LCB5fSBpcyBpbnNpZGUgdGhlIGJlbmQgc2hhcGVcclxuICAgICAgZnVuY3Rpb24gY2hlY2tJZkluc2lkZUJlbmRTaGFwZSh4LCB5LCBsZW5ndGgsIGNlbnRlclgsIGNlbnRlclkpe1xyXG4gICAgICAgIHZhciBtaW5YID0gY2VudGVyWCAtIGxlbmd0aCAvIDI7XHJcbiAgICAgICAgdmFyIG1heFggPSBjZW50ZXJYICsgbGVuZ3RoIC8gMjtcclxuICAgICAgICB2YXIgbWluWSA9IGNlbnRlclkgLSBsZW5ndGggLyAyO1xyXG4gICAgICAgIHZhciBtYXhZID0gY2VudGVyWSArIGxlbmd0aCAvIDI7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdmFyIGluc2lkZSA9ICh4ID49IG1pblggJiYgeCA8PSBtYXhYKSAmJiAoeSA+PSBtaW5ZICYmIHkgPD0gbWF4WSk7XHJcbiAgICAgICAgcmV0dXJuIGluc2lkZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gZ2V0IHRoZSBpbmRleCBvZiBiZW5kIHBvaW50IGNvbnRhaW5pbmcgdGhlIHBvaW50IHJlcHJlc2VudGVkIGJ5IHt4LCB5fVxyXG4gICAgICBmdW5jdGlvbiBnZXRDb250YWluaW5nQmVuZFNoYXBlSW5kZXgoeCwgeSwgZWRnZSkge1xyXG4gICAgICAgIGlmKGVkZ2UuZGF0YSgnY3llZGdlYmVuZGVkaXRpbmdXZWlnaHRzJykgPT0gbnVsbCB8fCBlZGdlLmRhdGEoJ2N5ZWRnZWJlbmRlZGl0aW5nV2VpZ2h0cycpLmxlbmd0aCA9PSAwKXtcclxuICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzZWdwdHMgPSBiZW5kUG9pbnRVdGlsaXRpZXMuZ2V0U2VnbWVudFBvaW50cyhlZGdlKTsvL2VkZ2UuX3ByaXZhdGUucmRhdGEuc2VncHRzO1xyXG4gICAgICAgIHZhciBsZW5ndGggPSBnZXRCZW5kU2hhcGVzTGVuZ3RoKGVkZ2UpO1xyXG5cclxuICAgICAgICBmb3IodmFyIGkgPSAwOyBzZWdwdHMgJiYgaSA8IHNlZ3B0cy5sZW5ndGg7IGkgPSBpICsgMil7XHJcbiAgICAgICAgICB2YXIgYmVuZFggPSBzZWdwdHNbaV07XHJcbiAgICAgICAgICB2YXIgYmVuZFkgPSBzZWdwdHNbaSArIDFdO1xyXG5cclxuICAgICAgICAgIHZhciBpbnNpZGUgPSBjaGVja0lmSW5zaWRlQmVuZFNoYXBlKHgsIHksIGxlbmd0aCwgYmVuZFgsIGJlbmRZKTtcclxuICAgICAgICAgIGlmKGluc2lkZSl7XHJcbiAgICAgICAgICAgIHJldHVybiBpIC8gMjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGZ1bmN0aW9uIGdldENvbnRhaW5pbmdFbmRQb2ludCh4LCB5LCBlZGdlKXtcclxuICAgICAgICB2YXIgbGVuZ3RoID0gZ2V0QmVuZFNoYXBlc0xlbmd0aChlZGdlKTtcclxuICAgICAgICB2YXIgYWxsUHRzID0gZWRnZS5fcHJpdmF0ZS5yc2NyYXRjaC5hbGxwdHM7XHJcbiAgICAgICAgdmFyIHNyYyA9IHtcclxuICAgICAgICAgIHg6IGFsbFB0c1swXSxcclxuICAgICAgICAgIHk6IGFsbFB0c1sxXVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdGFyZ2V0ID0ge1xyXG4gICAgICAgICAgeDogYWxsUHRzW2FsbFB0cy5sZW5ndGgtMl0sXHJcbiAgICAgICAgICB5OiBhbGxQdHNbYWxsUHRzLmxlbmd0aC0xXVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb252ZXJ0VG9SZW5kZXJlZFBvc2l0aW9uKHNyYyk7XHJcbiAgICAgICAgY29udmVydFRvUmVuZGVyZWRQb3NpdGlvbih0YXJnZXQpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIFNvdXJjZTowLCBUYXJnZXQ6MSwgTm9uZTotMVxyXG4gICAgICAgIGlmKGNoZWNrSWZJbnNpZGVCZW5kU2hhcGUoeCwgeSwgbGVuZ3RoLCBzcmMueCwgc3JjLnkpKVxyXG4gICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgZWxzZSBpZihjaGVja0lmSW5zaWRlQmVuZFNoYXBlKHgsIHksIGxlbmd0aCwgdGFyZ2V0LngsIHRhcmdldC55KSlcclxuICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgLy8gc3RvcmUgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIGdlc3R1cmVzIGFuZCBzZXQgdGhlbSB0byBmYWxzZVxyXG4gICAgICBmdW5jdGlvbiBkaXNhYmxlR2VzdHVyZXMoKSB7XHJcbiAgICAgICAgbGFzdFBhbm5pbmdFbmFibGVkID0gY3kucGFubmluZ0VuYWJsZWQoKTtcclxuICAgICAgICBsYXN0Wm9vbWluZ0VuYWJsZWQgPSBjeS56b29taW5nRW5hYmxlZCgpO1xyXG4gICAgICAgIGxhc3RCb3hTZWxlY3Rpb25FbmFibGVkID0gY3kuYm94U2VsZWN0aW9uRW5hYmxlZCgpO1xyXG5cclxuICAgICAgICBjeS56b29taW5nRW5hYmxlZChmYWxzZSlcclxuICAgICAgICAgIC5wYW5uaW5nRW5hYmxlZChmYWxzZSlcclxuICAgICAgICAgIC5ib3hTZWxlY3Rpb25FbmFibGVkKGZhbHNlKTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgLy8gcmVzZXQgdGhlIGdlc3R1cmVzIGJ5IHRoZWlyIGxhdGVzdCBzdGF0dXNcclxuICAgICAgZnVuY3Rpb24gcmVzZXRHZXN0dXJlcygpIHtcclxuICAgICAgICBjeS56b29taW5nRW5hYmxlZChsYXN0Wm9vbWluZ0VuYWJsZWQpXHJcbiAgICAgICAgICAucGFubmluZ0VuYWJsZWQobGFzdFBhbm5pbmdFbmFibGVkKVxyXG4gICAgICAgICAgLmJveFNlbGVjdGlvbkVuYWJsZWQobGFzdEJveFNlbGVjdGlvbkVuYWJsZWQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmdW5jdGlvbiBtb3ZlQmVuZFBvaW50cyhwb3NpdGlvbkRpZmYsIGVkZ2VzKSB7XHJcbiAgICAgICAgICBlZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKCBlZGdlICl7XHJcbiAgICAgICAgICAgICAgdmFyIHByZXZpb3VzQmVuZFBvaW50c1Bvc2l0aW9uID0gYmVuZFBvaW50VXRpbGl0aWVzLmdldFNlZ21lbnRQb2ludHMoZWRnZSk7XHJcbiAgICAgICAgICAgICAgdmFyIG5leHRCZW5kUG9pbnRzUG9zaXRpb24gPSBbXTtcclxuICAgICAgICAgICAgICBpZiAocHJldmlvdXNCZW5kUG9pbnRzUG9zaXRpb24gIT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPHByZXZpb3VzQmVuZFBvaW50c1Bvc2l0aW9uLmxlbmd0aDsgaSs9MilcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBuZXh0QmVuZFBvaW50c1Bvc2l0aW9uLnB1c2goe3g6IHByZXZpb3VzQmVuZFBvaW50c1Bvc2l0aW9uW2ldK3Bvc2l0aW9uRGlmZi54LCB5OiBwcmV2aW91c0JlbmRQb2ludHNQb3NpdGlvbltpKzFdK3Bvc2l0aW9uRGlmZi55fSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlZGdlLmRhdGEoJ2JlbmRQb2ludFBvc2l0aW9ucycsbmV4dEJlbmRQb2ludHNQb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgYmVuZFBvaW50VXRpbGl0aWVzLmluaXRCZW5kUG9pbnRzKG9wdGlvbnMoKS5iZW5kUG9zaXRpb25zRnVuY3Rpb24sIGVkZ2VzKTtcclxuICAgICAgICAgIGN5LnRyaWdnZXIoJ2JlbmRQb2ludE1vdmVtZW50Jyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHsgIFxyXG4gICAgICAgIGxhc3RQYW5uaW5nRW5hYmxlZCA9IGN5LnBhbm5pbmdFbmFibGVkKCk7XHJcbiAgICAgICAgbGFzdFpvb21pbmdFbmFibGVkID0gY3kuem9vbWluZ0VuYWJsZWQoKTtcclxuICAgICAgICBsYXN0Qm94U2VsZWN0aW9uRW5hYmxlZCA9IGN5LmJveFNlbGVjdGlvbkVuYWJsZWQoKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBJbml0aWxpemUgdGhlIGVkZ2VUb0hpZ2hsaWdodEJlbmRzIGFuZCBudW1iZXJPZlNlbGVjdGVkRWRnZXNcclxuICAgICAgICB7XHJcbiAgICAgICAgICB2YXIgc2VsZWN0ZWRFZGdlcyA9IGN5LmVkZ2VzKCc6c2VsZWN0ZWQnKTtcclxuICAgICAgICAgIHZhciBudW1iZXJPZlNlbGVjdGVkRWRnZXMgPSBzZWxlY3RlZEVkZ2VzLmxlbmd0aDtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgaWYgKCBudW1iZXJPZlNlbGVjdGVkRWRnZXMgPT09IDEgKSB7XHJcbiAgICAgICAgICAgIGVkZ2VUb0hpZ2hsaWdodEJlbmRzID0gc2VsZWN0ZWRFZGdlc1swXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgY3kuYmluZCgnem9vbSBwYW4nLCBlWm9vbSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIGlmICggIWVkZ2VUb0hpZ2hsaWdodEJlbmRzICkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIHJlZnJlc2hEcmF3cygpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjeS5vbignZGF0YScsICdlZGdlJywgIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIGlmICggIWVkZ2VUb0hpZ2hsaWdodEJlbmRzICkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIHJlZnJlc2hEcmF3cygpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgY3kub24oJ3Bvc2l0aW9uJywgJ25vZGUnLCBlUG9zaXRpb24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICB2YXIgbm9kZSA9IHRoaXM7XHJcbiAgICAgICAgICBpZihjeS5lZGdlcyhcIjpzZWxlY3RlZFwiKS5sZW5ndGggID09IDEpe1xyXG4gICAgICAgICAgICBjeS5lZGdlcygpLnVuc2VsZWN0KClcclxuICAgICAgICAgIH0gICAgICAgIFxyXG4gICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gZWRnZSB0byBoaWdobGlnaHQgYmVuZHMgb3IgdGhpcyBub2RlIGlzIG5vdCBhbnkgZW5kIG9mIHRoYXQgZWRnZSByZXR1cm4gZGlyZWN0bHlcclxuICAgICAgICAgIGlmICggIWVkZ2VUb0hpZ2hsaWdodEJlbmRzIHx8ICEoIGVkZ2VUb0hpZ2hsaWdodEJlbmRzLmRhdGEoJ3NvdXJjZScpID09PSBub2RlLmlkKCkgXHJcbiAgICAgICAgICAgICAgICAgIHx8IGVkZ2VUb0hpZ2hsaWdodEJlbmRzLmRhdGEoJ3RhcmdldCcpID09PSBub2RlLmlkKCkgKSApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICByZWZyZXNoRHJhd3MoKTsgXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIC8qICAgY3kub24oXCJhZnRlclVuZG9cIiwgZnVuY3Rpb24gKGV2ZW50LCBhY3Rpb25OYW1lLCBhcmdzLCByZXMpIHsgICAgICAgICBcclxuICAgIFxyXG4gICAgICAgICAgaWYoYWN0aW9uTmFtZSA9PSBcImRyYWdcIikge1xyXG4gICAgICAgICAgcmVzLm5vZGVzLmNvbm5lY3RlZEVkZ2VzKCkudW5zZWxlY3QoKTsgICAgICAgICAgXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgIFxyXG4gICAgICAgIH0pOyAqL1xyXG4gICAgICAgIGN5Lm9uKCdzdHlsZScsICdlZGdlLmVkZ2ViZW5kZWRpdGluZy1oYXNiZW5kcG9pbnRzOnNlbGVjdGVkJywgZVN0eWxlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgcmVmcmVzaERyYXdzKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGN5Lm9uKCdyZW1vdmUnLCAnZWRnZScsIGVSZW1vdmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICB2YXIgZWRnZSA9IHRoaXM7XHJcbiAgICAgICAgICBpZiAoZWRnZS5zZWxlY3RlZCgpKSB7XHJcbiAgICAgICAgICAgIG51bWJlck9mU2VsZWN0ZWRFZGdlcyA9IG51bWJlck9mU2VsZWN0ZWRFZGdlcyAtIDE7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjeS5zdGFydEJhdGNoKCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAoZWRnZVRvSGlnaGxpZ2h0QmVuZHMpIHtcclxuICAgICAgICAgICAgICBlZGdlVG9IaWdobGlnaHRCZW5kcy5yZW1vdmVDbGFzcygnY3ktZWRnZS1iZW5kLWVkaXRpbmctaGlnaGxpZ2h0LWJlbmRzJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmIChudW1iZXJPZlNlbGVjdGVkRWRnZXMgPT09IDEpIHtcclxuICAgICAgICAgICAgICB2YXIgc2VsZWN0ZWRFZGdlcyA9IGN5LmVkZ2VzKCc6c2VsZWN0ZWQnKTtcclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAvLyBJZiB1c2VyIHJlbW92ZXMgYWxsIHNlbGVjdGVkIGVkZ2VzIGF0IGEgc2luZ2xlIG9wZXJhdGlvbiB0aGVuIG91ciAnbnVtYmVyT2ZTZWxlY3RlZEVkZ2VzJ1xyXG4gICAgICAgICAgICAgIC8vIG1heSBiZSBtaXNsZWFkaW5nLiBUaGVyZWZvcmUgd2UgbmVlZCB0byBjaGVjayBpZiB0aGUgbnVtYmVyIG9mIGVkZ2VzIHRvIGhpZ2hsaWdodCBpcyByZWFseSAxIGhlcmUuXHJcbiAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkRWRnZXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICBlZGdlVG9IaWdobGlnaHRCZW5kcyA9IHNlbGVjdGVkRWRnZXNbMF07XHJcbiAgICAgICAgICAgICAgICBlZGdlVG9IaWdobGlnaHRCZW5kcy5hZGRDbGFzcygnY3ktZWRnZS1iZW5kLWVkaXRpbmctaGlnaGxpZ2h0LWJlbmRzJyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZWRnZVRvSGlnaGxpZ2h0QmVuZHMgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGVkZ2VUb0hpZ2hsaWdodEJlbmRzID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjeS5lbmRCYXRjaCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmVmcmVzaERyYXdzKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgIGN5Lm9uKCdhZGQnLCAnZWRnZScsIGVBZGQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICB2YXIgZWRnZSA9IHRoaXM7XHJcbiAgICAgICAgICBpZiAoZWRnZS5zZWxlY3RlZCgpKSB7XHJcbiAgICAgICAgICAgIG51bWJlck9mU2VsZWN0ZWRFZGdlcyA9IG51bWJlck9mU2VsZWN0ZWRFZGdlcyArIDE7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjeS5zdGFydEJhdGNoKCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAoZWRnZVRvSGlnaGxpZ2h0QmVuZHMpIHtcclxuICAgICAgICAgICAgICBlZGdlVG9IaWdobGlnaHRCZW5kcy5yZW1vdmVDbGFzcygnY3ktZWRnZS1iZW5kLWVkaXRpbmctaGlnaGxpZ2h0LWJlbmRzJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmIChudW1iZXJPZlNlbGVjdGVkRWRnZXMgPT09IDEpIHtcclxuICAgICAgICAgICAgICBlZGdlVG9IaWdobGlnaHRCZW5kcyA9IGVkZ2U7XHJcbiAgICAgICAgICAgICAgZWRnZVRvSGlnaGxpZ2h0QmVuZHMuYWRkQ2xhc3MoJ2N5LWVkZ2UtYmVuZC1lZGl0aW5nLWhpZ2hsaWdodC1iZW5kcycpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGVkZ2VUb0hpZ2hsaWdodEJlbmRzID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjeS5lbmRCYXRjaCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmVmcmVzaERyYXdzKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY3kub24oJ3NlbGVjdCcsICdlZGdlJywgZVNlbGVjdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIHZhciBlZGdlID0gdGhpcztcclxuXHJcbiAgICAgICAgICBpZihlZGdlLnRhcmdldCgpLmNvbm5lY3RlZEVkZ2VzKCkubGVuZ3RoID09IDAgfHwgZWRnZS5zb3VyY2UoKS5jb25uZWN0ZWRFZGdlcygpLmxlbmd0aCA9PSAwKXtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgXHJcbiAgICAgICAgICBudW1iZXJPZlNlbGVjdGVkRWRnZXMgPSBudW1iZXJPZlNlbGVjdGVkRWRnZXMgKyAxO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICBjeS5zdGFydEJhdGNoKCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgaWYgKGVkZ2VUb0hpZ2hsaWdodEJlbmRzKSB7XHJcbiAgICAgICAgICAgIGVkZ2VUb0hpZ2hsaWdodEJlbmRzLnJlbW92ZUNsYXNzKCdjeS1lZGdlLWJlbmQtZWRpdGluZy1oaWdobGlnaHQtYmVuZHMnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICBpZiAobnVtYmVyT2ZTZWxlY3RlZEVkZ2VzID09PSAxKSB7XHJcbiAgICAgICAgICAgIGVkZ2VUb0hpZ2hsaWdodEJlbmRzID0gZWRnZTtcclxuICAgICAgICAgICAgZWRnZVRvSGlnaGxpZ2h0QmVuZHMuYWRkQ2xhc3MoJ2N5LWVkZ2UtYmVuZC1lZGl0aW5nLWhpZ2hsaWdodC1iZW5kcycpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGVkZ2VUb0hpZ2hsaWdodEJlbmRzID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICBjeS5lbmRCYXRjaCgpO1xyXG4gICAgICAgICAgcmVmcmVzaERyYXdzKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY3kub24oJ3Vuc2VsZWN0JywgJ2VkZ2UnLCBlVW5zZWxlY3QgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBudW1iZXJPZlNlbGVjdGVkRWRnZXMgPSBudW1iZXJPZlNlbGVjdGVkRWRnZXMgLSAxO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgIGN5LnN0YXJ0QmF0Y2goKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICBpZiAoZWRnZVRvSGlnaGxpZ2h0QmVuZHMpIHtcclxuICAgICAgICAgICAgZWRnZVRvSGlnaGxpZ2h0QmVuZHMucmVtb3ZlQ2xhc3MoJ2N5LWVkZ2UtYmVuZC1lZGl0aW5nLWhpZ2hsaWdodC1iZW5kcycpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgIGlmIChudW1iZXJPZlNlbGVjdGVkRWRnZXMgPT09IDEpIHtcclxuICAgICAgICAgICAgdmFyIHNlbGVjdGVkRWRnZXMgPSBjeS5lZGdlcygnOnNlbGVjdGVkJyk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBJZiB1c2VyIHVuc2VsZWN0cyBhbGwgZWRnZXMgYnkgdGFwcGluZyB0byB0aGUgY29yZSBldGMuIHRoZW4gb3VyICdudW1iZXJPZlNlbGVjdGVkRWRnZXMnXHJcbiAgICAgICAgICAgIC8vIG1heSBiZSBtaXNsZWFkaW5nLiBUaGVyZWZvcmUgd2UgbmVlZCB0byBjaGVjayBpZiB0aGUgbnVtYmVyIG9mIGVkZ2VzIHRvIGhpZ2hsaWdodCBpcyByZWFseSAxIGhlcmUuXHJcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZEVkZ2VzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgIGVkZ2VUb0hpZ2hsaWdodEJlbmRzID0gc2VsZWN0ZWRFZGdlc1swXTtcclxuICAgICAgICAgICAgICBlZGdlVG9IaWdobGlnaHRCZW5kcy5hZGRDbGFzcygnY3ktZWRnZS1iZW5kLWVkaXRpbmctaGlnaGxpZ2h0LWJlbmRzJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgZWRnZVRvSGlnaGxpZ2h0QmVuZHMgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBlZGdlVG9IaWdobGlnaHRCZW5kcyA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIFxyXG4gICAgICAgICAgY3kuZW5kQmF0Y2goKTtcclxuICAgICAgICAgIHJlZnJlc2hEcmF3cygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHZhciBtb3ZlZEJlbmRJbmRleDtcclxuICAgICAgICB2YXIgbW92ZWRCZW5kRWRnZTtcclxuICAgICAgICB2YXIgbW92ZUJlbmRQYXJhbTtcclxuICAgICAgICB2YXIgY3JlYXRlQmVuZE9uRHJhZztcclxuICAgICAgICB2YXIgbW92ZWRFbmRQb2ludDtcclxuICAgICAgICB2YXIgZHVtbXlOb2RlO1xyXG4gICAgICAgIHZhciBkZXRhY2hlZE5vZGU7XHJcbiAgICAgICAgdmFyIG5vZGVUb0F0dGFjaDtcclxuICAgICAgICBcclxuICAgICAgICBjeS5vbigndGFwc3RhcnQnLCAnZWRnZScsIGVUYXBTdGFydCA9IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgdmFyIGVkZ2UgPSB0aGlzO1xyXG5cclxuICAgICAgICAgIGlmICghZWRnZVRvSGlnaGxpZ2h0QmVuZHMgfHwgZWRnZVRvSGlnaGxpZ2h0QmVuZHMuaWQoKSAhPT0gZWRnZS5pZCgpKSB7XHJcbiAgICAgICAgICAgIGNyZWF0ZUJlbmRPbkRyYWcgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICBtb3ZlZEJlbmRFZGdlID0gZWRnZTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgbW92ZUJlbmRQYXJhbSA9IHtcclxuICAgICAgICAgICAgZWRnZTogZWRnZSxcclxuICAgICAgICAgICAgd2VpZ2h0czogZWRnZS5kYXRhKCdjeWVkZ2ViZW5kZWRpdGluZ1dlaWdodHMnKSA/IFtdLmNvbmNhdChlZGdlLmRhdGEoJ2N5ZWRnZWJlbmRlZGl0aW5nV2VpZ2h0cycpKSA6IFtdLFxyXG4gICAgICAgICAgICBkaXN0YW5jZXM6IGVkZ2UuZGF0YSgnY3llZGdlYmVuZGVkaXRpbmdEaXN0YW5jZXMnKSA/IFtdLmNvbmNhdChlZGdlLmRhdGEoJ2N5ZWRnZWJlbmRlZGl0aW5nRGlzdGFuY2VzJykpIDogW11cclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIHZhciBjeVBvcyA9IGV2ZW50LnBvc2l0aW9uIHx8IGV2ZW50LmN5UG9zaXRpb247XHJcbiAgICAgICAgICB2YXIgY3lQb3NYID0gY3lQb3MueDtcclxuICAgICAgICAgIHZhciBjeVBvc1kgPSBjeVBvcy55O1xyXG5cclxuICAgICAgICAgIHZhciBpbmRleCA9IGdldENvbnRhaW5pbmdCZW5kU2hhcGVJbmRleChjeVBvc1gsIGN5UG9zWSwgZWRnZSk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIEdldCB3aGljaCBlbmQgcG9pbnQgaGFzIGJlZW4gY2xpY2tlZCAoU291cmNlOjAsIFRhcmdldDoxLCBOb25lOi0xKVxyXG4gICAgICAgICAgdmFyIGVuZFBvaW50ID0gZ2V0Q29udGFpbmluZ0VuZFBvaW50KGN5UG9zWCwgY3lQb3NZLCBlZGdlKTtcclxuXHJcbiAgICAgICAgICBpZihlbmRQb2ludCA9PSAwIHx8IGVuZFBvaW50ID09IDEpe1xyXG4gICAgICAgICAgICBtb3ZlZEVuZFBvaW50ID0gZW5kUG9pbnQ7XHJcbiAgICAgICAgICAgIGRldGFjaGVkTm9kZSA9IChlbmRQb2ludCA9PSAwKSA/IG1vdmVkQmVuZEVkZ2Uuc291cmNlKCkgOiBtb3ZlZEJlbmRFZGdlLnRhcmdldCgpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGRpc2Nvbm5lY3RlZEVuZCA9IChlbmRQb2ludCA9PSAwKSA/ICdzb3VyY2UnIDogJ3RhcmdldCc7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSByZWNvbm5lY3Rpb25VdGlsaXRpZXMuZGlzY29ubmVjdEVkZ2UobW92ZWRCZW5kRWRnZSwgY3ksIGV2ZW50LnJlbmRlcmVkUG9zaXRpb24sIGRpc2Nvbm5lY3RlZEVuZCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBkdW1teU5vZGUgPSByZXN1bHQuZHVtbXlOb2RlO1xyXG4gICAgICAgICAgICBtb3ZlZEJlbmRFZGdlID0gcmVzdWx0LmVkZ2U7XHJcblxyXG4gICAgICAgICAgICBkaXNhYmxlR2VzdHVyZXMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKGluZGV4ICE9IC0xKSB7XHJcbiAgICAgICAgICAgIG1vdmVkQmVuZEluZGV4ID0gaW5kZXg7XHJcbiAgICAgICAgICAgIC8vIG1vdmVkQmVuZEVkZ2UgPSBlZGdlO1xyXG4gICAgICAgICAgICBkaXNhYmxlR2VzdHVyZXMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjcmVhdGVCZW5kT25EcmFnID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBcclxuICAgICAgICBjeS5vbigndGFwZHJhZycsIGVUYXBEcmFnID0gZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICB2YXIgZWRnZSA9IG1vdmVkQmVuZEVkZ2U7XHJcbiAgICAgICAgICBpZihtb3ZlZEJlbmRFZGdlICE9PSB1bmRlZmluZWQgJiYgYmVuZFBvaW50VXRpbGl0aWVzLmlzSWdub3JlZEVkZ2UoZWRnZSkgKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZihjcmVhdGVCZW5kT25EcmFnKSB7XHJcbiAgICAgICAgICAgIHZhciBjeVBvcyA9IGV2ZW50LnBvc2l0aW9uIHx8IGV2ZW50LmN5UG9zaXRpb247XHJcbiAgICAgICAgICAgIGJlbmRQb2ludFV0aWxpdGllcy5hZGRCZW5kUG9pbnQoZWRnZSwgY3lQb3MpO1xyXG4gICAgICAgICAgICBtb3ZlZEJlbmRJbmRleCA9IGdldENvbnRhaW5pbmdCZW5kU2hhcGVJbmRleChjeVBvcy54LCBjeVBvcy55LCBlZGdlKTtcclxuICAgICAgICAgICAgbW92ZWRCZW5kRWRnZSA9IGVkZ2U7XHJcbiAgICAgICAgICAgIGNyZWF0ZUJlbmRPbkRyYWcgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGRpc2FibGVHZXN0dXJlcygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICBpZiAobW92ZWRCZW5kRWRnZSA9PT0gdW5kZWZpbmVkIHx8IChtb3ZlZEJlbmRJbmRleCA9PT0gdW5kZWZpbmVkICYmIG1vdmVkRW5kUG9pbnQgPT09IHVuZGVmaW5lZCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFVwZGF0ZSBlbmQgcG9pbnQgbG9jYXRpb24gKFNvdXJjZTowLCBUYXJnZXQ6MSlcclxuICAgICAgICAgIGlmKG1vdmVkRW5kUG9pbnQgIT0gLTEgJiYgZHVtbXlOb2RlKXtcclxuICAgICAgICAgICAgdmFyIG5ld1BvcyA9IGV2ZW50LnBvc2l0aW9uIHx8IGV2ZW50LmN5UG9zaXRpb247XHJcbiAgICAgICAgICAgIGR1bW15Tm9kZS5wb3NpdGlvbihuZXdQb3MpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gVXBkYXRlIGJlbmQgcG9pbnQgbG9jYXRpb25cclxuICAgICAgICAgIGVsc2UgaWYobW92ZWRCZW5kSW5kZXggIT0gdW5kZWZpbmVkKXsgXHJcbiAgICAgICAgICAgIHZhciB3ZWlnaHRzID0gZWRnZS5kYXRhKCdjeWVkZ2ViZW5kZWRpdGluZ1dlaWdodHMnKTtcclxuICAgICAgICAgICAgdmFyIGRpc3RhbmNlcyA9IGVkZ2UuZGF0YSgnY3llZGdlYmVuZGVkaXRpbmdEaXN0YW5jZXMnKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciByZWxhdGl2ZUJlbmRQb3NpdGlvbiA9IGJlbmRQb2ludFV0aWxpdGllcy5jb252ZXJ0VG9SZWxhdGl2ZUJlbmRQb3NpdGlvbihlZGdlLCBldmVudC5wb3NpdGlvbiB8fCBldmVudC5jeVBvc2l0aW9uKTtcclxuICAgICAgICAgICAgd2VpZ2h0c1ttb3ZlZEJlbmRJbmRleF0gPSByZWxhdGl2ZUJlbmRQb3NpdGlvbi53ZWlnaHQ7XHJcbiAgICAgICAgICAgIGRpc3RhbmNlc1ttb3ZlZEJlbmRJbmRleF0gPSByZWxhdGl2ZUJlbmRQb3NpdGlvbi5kaXN0YW5jZTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGVkZ2UuZGF0YSgnY3llZGdlYmVuZGVkaXRpbmdXZWlnaHRzJywgd2VpZ2h0cyk7XHJcbiAgICAgICAgICAgIGVkZ2UuZGF0YSgnY3llZGdlYmVuZGVkaXRpbmdEaXN0YW5jZXMnLCBkaXN0YW5jZXMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICBpZihldmVudC50YXJnZXQgJiYgZXZlbnQudGFyZ2V0WzBdICYmIGV2ZW50LnRhcmdldC5pc05vZGUoKSl7XHJcbiAgICAgICAgICAgIG5vZGVUb0F0dGFjaCA9IGV2ZW50LnRhcmdldDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgIFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGN5Lm9uKCd0YXBlbmQnLCBlVGFwRW5kID0gZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICB2YXIgZWRnZSA9IG1vdmVkQmVuZEVkZ2U7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIGlmKCBlZGdlICE9PSB1bmRlZmluZWQgKSB7XHJcbiAgICAgICAgICAgIGlmKCBtb3ZlZEJlbmRJbmRleCAhPSB1bmRlZmluZWQgKSB7XHJcbiAgICAgICAgICAgICAgdmFyIHN0YXJ0WCA9IGVkZ2Uuc291cmNlKCkucG9zaXRpb24oJ3gnKTtcclxuICAgICAgICAgICAgICB2YXIgc3RhcnRZID0gZWRnZS5zb3VyY2UoKS5wb3NpdGlvbigneScpO1xyXG4gICAgICAgICAgICAgIHZhciBlbmRYID0gZWRnZS50YXJnZXQoKS5wb3NpdGlvbigneCcpO1xyXG4gICAgICAgICAgICAgIHZhciBlbmRZID0gZWRnZS50YXJnZXQoKS5wb3NpdGlvbigneScpO1xyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIHZhciBzZWdQdHMgPSBiZW5kUG9pbnRVdGlsaXRpZXMuZ2V0U2VnbWVudFBvaW50cyhlZGdlKTtcclxuICAgICAgICAgICAgICB2YXIgYWxsUHRzID0gW3N0YXJ0WCwgc3RhcnRZXS5jb25jYXQoc2VnUHRzKS5jb25jYXQoW2VuZFgsIGVuZFldKTtcclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICB2YXIgcG9pbnRJbmRleCA9IG1vdmVkQmVuZEluZGV4ICsgMTtcclxuICAgICAgICAgICAgICB2YXIgcHJlSW5kZXggPSBwb2ludEluZGV4IC0gMTtcclxuICAgICAgICAgICAgICB2YXIgcG9zSW5kZXggPSBwb2ludEluZGV4ICsgMTtcclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICB2YXIgcG9pbnQgPSB7XHJcbiAgICAgICAgICAgICAgICB4OiBhbGxQdHNbMiAqIHBvaW50SW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgeTogYWxsUHRzWzIgKiBwb2ludEluZGV4ICsgMV1cclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIHZhciBwcmVQb2ludCA9IHtcclxuICAgICAgICAgICAgICAgIHg6IGFsbFB0c1syICogcHJlSW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgeTogYWxsUHRzWzIgKiBwcmVJbmRleCArIDFdXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICB2YXIgcG9zUG9pbnQgPSB7XHJcbiAgICAgICAgICAgICAgICB4OiBhbGxQdHNbMiAqIHBvc0luZGV4XSxcclxuICAgICAgICAgICAgICAgIHk6IGFsbFB0c1syICogcG9zSW5kZXggKyAxXVxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgdmFyIG5lYXJUb0xpbmU7XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgaWYoICggcG9pbnQueCA9PT0gcHJlUG9pbnQueCAmJiBwb2ludC55ID09PSBwcmVQb2ludC55ICkgfHwgKCBwb2ludC54ID09PSBwcmVQb2ludC54ICYmIHBvaW50LnkgPT09IHByZVBvaW50LnkgKSApIHtcclxuICAgICAgICAgICAgICAgIG5lYXJUb0xpbmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciBtMSA9ICggcHJlUG9pbnQueSAtIHBvc1BvaW50LnkgKSAvICggcHJlUG9pbnQueCAtIHBvc1BvaW50LnggKTtcclxuICAgICAgICAgICAgICAgIHZhciBtMiA9IC0xIC8gbTE7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIHNyY1RndFBvaW50c0FuZFRhbmdlbnRzID0ge1xyXG4gICAgICAgICAgICAgICAgICBzcmNQb2ludDogcHJlUG9pbnQsXHJcbiAgICAgICAgICAgICAgICAgIHRndFBvaW50OiBwb3NQb2ludCxcclxuICAgICAgICAgICAgICAgICAgbTE6IG0xLFxyXG4gICAgICAgICAgICAgICAgICBtMjogbTJcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgLy9nZXQgdGhlIGludGVyc2VjdGlvbiBvZiB0aGUgY3VycmVudCBzZWdtZW50IHdpdGggdGhlIG5ldyBiZW5kIHBvaW50XHJcbiAgICAgICAgICAgICAgICB2YXIgY3VycmVudEludGVyc2VjdGlvbiA9IGJlbmRQb2ludFV0aWxpdGllcy5nZXRJbnRlcnNlY3Rpb24oZWRnZSwgcG9pbnQsIHNyY1RndFBvaW50c0FuZFRhbmdlbnRzKTtcclxuICAgICAgICAgICAgICAgIHZhciBkaXN0ID0gTWF0aC5zcXJ0KCBNYXRoLnBvdyggKHBvaW50LnggLSBjdXJyZW50SW50ZXJzZWN0aW9uLngpLCAyICkgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICsgTWF0aC5wb3coIChwb2ludC55IC0gY3VycmVudEludGVyc2VjdGlvbi55KSwgMiApKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy8gdmFyIGxlbmd0aCA9IE1hdGguc3FydCggTWF0aC5wb3coIChwb3NQb2ludC54IC0gcHJlUG9pbnQueCksIDIgKSBcclxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgKyBNYXRoLnBvdyggKHBvc1BvaW50LnkgLSBwcmVQb2ludC55KSwgMiApKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYoIGRpc3QgIDwgb3B0aW9ucygpLmJlbmRSZW1vdmFsU2Vuc2l0aXZpdHkgKSB7XHJcbiAgICAgICAgICAgICAgICAgIG5lYXJUb0xpbmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIGlmKCBuZWFyVG9MaW5lIClcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBiZW5kUG9pbnRVdGlsaXRpZXMucmVtb3ZlQmVuZFBvaW50KGVkZ2UsIG1vdmVkQmVuZEluZGV4KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZihkdW1teU5vZGUgIT0gdW5kZWZpbmVkICYmIChtb3ZlZEVuZFBvaW50ID09IDAgfHwgbW92ZWRFbmRQb2ludCA9PSAxKSApe1xyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIHZhciBuZXdOb2RlID0gZGV0YWNoZWROb2RlO1xyXG4gICAgICAgICAgICAgIHZhciBpc1ZhbGlkID0gJ3ZhbGlkJztcclxuICAgICAgICAgICAgICB2YXIgbG9jYXRpb24gPSAobW92ZWRFbmRQb2ludCA9PSAwKSA/ICdzb3VyY2UnIDogJ3RhcmdldCc7XHJcblxyXG4gICAgICAgICAgICAgIC8vIHZhbGlkYXRlIGVkZ2UgcmVjb25uZWN0aW9uXHJcbiAgICAgICAgICAgICAgaWYobm9kZVRvQXR0YWNoKXtcclxuICAgICAgICAgICAgICAgIHZhciBuZXdTb3VyY2UgPSAobW92ZWRFbmRQb2ludCA9PSAwKSA/IG5vZGVUb0F0dGFjaCA6IGVkZ2Uuc291cmNlKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgbmV3VGFyZ2V0ID0gKG1vdmVkRW5kUG9pbnQgPT0gMSkgPyBub2RlVG9BdHRhY2ggOiBlZGdlLnRhcmdldCgpO1xyXG4gICAgICAgICAgICAgICAgaWYodHlwZW9mIHZhbGlkYXRlRWRnZSA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgICAgICAgICAgICBpc1ZhbGlkID0gdmFsaWRhdGVFZGdlKGVkZ2UsIG5ld1NvdXJjZSwgbmV3VGFyZ2V0KTtcclxuICAgICAgICAgICAgICAgIG5ld05vZGUgPSAoaXNWYWxpZCA9PT0gJ3ZhbGlkJykgPyBub2RlVG9BdHRhY2ggOiBkZXRhY2hlZE5vZGU7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICB2YXIgbmV3U291cmNlID0gKG1vdmVkRW5kUG9pbnQgPT0gMCkgPyBuZXdOb2RlIDogZWRnZS5zb3VyY2UoKTtcclxuICAgICAgICAgICAgICB2YXIgbmV3VGFyZ2V0ID0gKG1vdmVkRW5kUG9pbnQgPT0gMSkgPyBuZXdOb2RlIDogZWRnZS50YXJnZXQoKTtcclxuICAgICAgICAgICAgICBlZGdlID0gcmVjb25uZWN0aW9uVXRpbGl0aWVzLmNvbm5lY3RFZGdlKGVkZ2UsIGRldGFjaGVkTm9kZSwgbG9jYXRpb24pO1xyXG5cclxuICAgICAgICAgICAgICBpZihkZXRhY2hlZE5vZGUuaWQoKSAhPT0gbmV3Tm9kZS5pZCgpKXtcclxuICAgICAgICAgICAgICAgIC8vIHVzZSBnaXZlbiBoYW5kbGVSZWNvbm5lY3RFZGdlIGZ1bmN0aW9uIFxyXG4gICAgICAgICAgICAgICAgaWYodHlwZW9mIGhhbmRsZVJlY29ubmVjdEVkZ2UgPT09ICdmdW5jdGlvbicpe1xyXG4gICAgICAgICAgICAgICAgICB2YXIgcmVjb25uZWN0ZWRFZGdlID0gaGFuZGxlUmVjb25uZWN0RWRnZShuZXdTb3VyY2UuaWQoKSwgbmV3VGFyZ2V0LmlkKCksIGVkZ2UuZGF0YSgpKTtcclxuICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgIGlmKHJlY29ubmVjdGVkRWRnZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVjb25uZWN0aW9uVXRpbGl0aWVzLmNvcHlFZGdlKGVkZ2UsIHJlY29ubmVjdGVkRWRnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYmVuZFBvaW50VXRpbGl0aWVzLmluaXRCZW5kUG9pbnRzKG9wdGlvbnMoKS5iZW5kUG9zaXRpb25zRnVuY3Rpb24sIFtyZWNvbm5lY3RlZEVkZ2VdKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgaWYocmVjb25uZWN0ZWRFZGdlICYmIG9wdGlvbnMoKS51bmRvYWJsZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmFtcyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgIG5ld0VkZ2U6IHJlY29ubmVjdGVkRWRnZSxcclxuICAgICAgICAgICAgICAgICAgICAgIG9sZEVkZ2U6IGVkZ2VcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGN5LnVuZG9SZWRvKCkuZG8oJ3JlbW92ZVJlY29ubmVjdGVkRWRnZScsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWRnZSA9IHJlY29ubmVjdGVkRWRnZTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBlbHNlIGlmKHJlY29ubmVjdGVkRWRnZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgY3kucmVtb3ZlKGVkZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVkZ2UgPSByZWNvbm5lY3RlZEVkZ2U7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICAgIHZhciBsb2MgPSAobW92ZWRFbmRQb2ludCA9PSAwKSA/IHtzb3VyY2U6IG5ld05vZGUuaWQoKX0gOiB7dGFyZ2V0OiBuZXdOb2RlLmlkKCl9O1xyXG4gICAgICAgICAgICAgICAgICB2YXIgb2xkTG9jID0gKG1vdmVkRW5kUG9pbnQgPT0gMCkgPyB7c291cmNlOiBkZXRhY2hlZE5vZGUuaWQoKX0gOiB7dGFyZ2V0OiBkZXRhY2hlZE5vZGUuaWQoKX07XHJcbiAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICBpZihvcHRpb25zKCkudW5kb2FibGUgJiYgbmV3Tm9kZS5pZCgpICE9PSBkZXRhY2hlZE5vZGUuaWQoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwYXJhbSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgIGVkZ2U6IGVkZ2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjogbG9jLFxyXG4gICAgICAgICAgICAgICAgICAgICAgb2xkTG9jOiBvbGRMb2NcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBjeS51bmRvUmVkbygpLmRvKCdyZWNvbm5lY3RFZGdlJywgcGFyYW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGVkZ2UgPSByZXN1bHQuZWRnZTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSAgXHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAvLyBpbnZhbGlkIGVkZ2UgcmVjb25uZWN0aW9uIGNhbGxiYWNrXHJcbiAgICAgICAgICAgICAgaWYoaXNWYWxpZCAhPT0gJ3ZhbGlkJyAmJiB0eXBlb2YgYWN0T25VbnN1Y2Nlc3NmdWxSZWNvbm5lY3Rpb24gPT09ICdmdW5jdGlvbicpe1xyXG4gICAgICAgICAgICAgICAgYWN0T25VbnN1Y2Nlc3NmdWxSZWNvbm5lY3Rpb24oKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWRnZS51bnNlbGVjdCgpO1xyXG4gICAgICAgICAgICAgIGN5LnJlbW92ZShkdW1teU5vZGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIGlmIChlZGdlICE9PSB1bmRlZmluZWQgJiYgbW92ZUJlbmRQYXJhbSAhPT0gdW5kZWZpbmVkICYmIGVkZ2UuZGF0YSgnY3llZGdlYmVuZGVkaXRpbmdXZWlnaHRzJylcclxuICAgICAgICAgICYmIGVkZ2UuZGF0YSgnY3llZGdlYmVuZGVkaXRpbmdXZWlnaHRzJykudG9TdHJpbmcoKSAhPSBtb3ZlQmVuZFBhcmFtLndlaWdodHMudG9TdHJpbmcoKSkge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYob3B0aW9ucygpLnVuZG9hYmxlKSB7XHJcbiAgICAgICAgICAgICAgY3kudW5kb1JlZG8oKS5kbygnY2hhbmdlQmVuZFBvaW50cycsIG1vdmVCZW5kUGFyYW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIG1vdmVkQmVuZEluZGV4ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgbW92ZWRCZW5kRWRnZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIG1vdmVCZW5kUGFyYW0gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICBjcmVhdGVCZW5kT25EcmFnID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgbW92ZWRFbmRQb2ludCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIGR1bW15Tm9kZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIGRldGFjaGVkTm9kZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIG5vZGVUb0F0dGFjaCA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgICByZXNldEdlc3R1cmVzKCk7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmVmcmVzaERyYXdzKCl9LCA1MCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vVmFyaWFibGVzIHVzZWQgZm9yIHN0YXJ0aW5nIGFuZCBlbmRpbmcgdGhlIG1vdmVtZW50IG9mIGJlbmQgcG9pbnRzIHdpdGggYXJyb3dzXHJcbiAgICAgICAgdmFyIG1vdmVwYXJhbTtcclxuICAgICAgICB2YXIgZmlyc3RCZW5kUG9pbnQ7XHJcbiAgICAgICAgdmFyIGVkZ2VDb250YWluaW5nRmlyc3RCZW5kUG9pbnQ7XHJcbiAgICAgICAgdmFyIGZpcnN0QmVuZFBvaW50Rm91bmQ7XHJcbiAgICAgICAgY3kub24oXCJlZGdlYmVuZGVkaXRpbmcubW92ZXN0YXJ0XCIsIGZ1bmN0aW9uIChlLCBlZGdlcykge1xyXG4gICAgICAgICAgICBmaXJzdEJlbmRQb2ludEZvdW5kID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmIChlZGdlc1swXSAhPSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGVkZ2VzLmZvckVhY2goZnVuY3Rpb24oIGVkZ2UgKXtcclxuICAgICAgICAgICAgICAgICAgaWYgKGJlbmRQb2ludFV0aWxpdGllcy5nZXRTZWdtZW50UG9pbnRzKGVkZ2UpICE9IHVuZGVmaW5lZCAmJiAhZmlyc3RCZW5kUG9pbnRGb3VuZClcclxuICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgZmlyc3RCZW5kUG9pbnQgPSB7IHg6IGJlbmRQb2ludFV0aWxpdGllcy5nZXRTZWdtZW50UG9pbnRzKGVkZ2UpWzBdLCB5OiBiZW5kUG9pbnRVdGlsaXRpZXMuZ2V0U2VnbWVudFBvaW50cyhlZGdlKVsxXX07XHJcbiAgICAgICAgICAgICAgICAgICAgICBtb3ZlcGFyYW0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RUaW1lOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0QmVuZFBvaW50UG9zaXRpb246IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogZmlyc3RCZW5kUG9pbnQueCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogZmlyc3RCZW5kUG9pbnQueVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZWRnZXM6IGVkZ2VzXHJcbiAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgZWRnZUNvbnRhaW5pbmdGaXJzdEJlbmRQb2ludCA9IGVkZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICBmaXJzdEJlbmRQb2ludEZvdW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY3kub24oXCJlZGdlYmVuZGVkaXRpbmcubW92ZWVuZFwiLCBmdW5jdGlvbiAoZSwgZWRnZXMpIHtcclxuICAgICAgICAgICAgaWYgKG1vdmVwYXJhbSAhPSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBpbml0aWFsUG9zID0gbW92ZXBhcmFtLmZpcnN0QmVuZFBvaW50UG9zaXRpb247XHJcbiAgICAgICAgICAgICAgICB2YXIgbW92ZWRGaXJzdEJlbmRQb2ludCA9IHtcclxuICAgICAgICAgICAgICAgICAgICB4OiBiZW5kUG9pbnRVdGlsaXRpZXMuZ2V0U2VnbWVudFBvaW50cyhlZGdlQ29udGFpbmluZ0ZpcnN0QmVuZFBvaW50KVswXSxcclxuICAgICAgICAgICAgICAgICAgICB5OiBiZW5kUG9pbnRVdGlsaXRpZXMuZ2V0U2VnbWVudFBvaW50cyhlZGdlQ29udGFpbmluZ0ZpcnN0QmVuZFBvaW50KVsxXVxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgbW92ZXBhcmFtLnBvc2l0aW9uRGlmZiA9IHtcclxuICAgICAgICAgICAgICAgICAgICB4OiAtbW92ZWRGaXJzdEJlbmRQb2ludC54ICsgaW5pdGlhbFBvcy54LFxyXG4gICAgICAgICAgICAgICAgICAgIHk6IC1tb3ZlZEZpcnN0QmVuZFBvaW50LnkgKyBpbml0aWFsUG9zLnlcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBkZWxldGUgbW92ZXBhcmFtLmZpcnN0QmVuZFBvaW50UG9zaXRpb247XHJcblxyXG4gICAgICAgICAgICAgICAgaWYob3B0aW9ucygpLnVuZG9hYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3kudW5kb1JlZG8oKS5kbyhcIm1vdmVCZW5kUG9pbnRzXCIsIG1vdmVwYXJhbSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbW92ZXBhcmFtID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGN5Lm9uKCdjeHR0YXAnLCAnZWRnZScsIGVDeHRUYXAgPSBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgIHZhciBlZGdlID0gdGhpcztcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgdmFyIG1lbnVzID0gY3kuY29udGV4dE1lbnVzKCdnZXQnKTsgLy8gZ2V0IGNvbnRleHQgbWVudXMgaW5zdGFuY2VcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgaWYoIWVkZ2VUb0hpZ2hsaWdodEJlbmRzIHx8IGVkZ2VUb0hpZ2hsaWdodEJlbmRzLmlkKCkgIT0gZWRnZS5pZCgpIHx8IGJlbmRQb2ludFV0aWxpdGllcy5pc0lnbm9yZWRFZGdlKGVkZ2UpKSB7XHJcbiAgICAgICAgICAgIG1lbnVzLmhpZGVNZW51SXRlbShyZW1vdmVCZW5kUG9pbnRDeHRNZW51SWQpO1xyXG4gICAgICAgICAgICBtZW51cy5oaWRlTWVudUl0ZW0oYWRkQmVuZFBvaW50Q3h0TWVudUlkKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHZhciBjeVBvcyA9IGV2ZW50LnBvc2l0aW9uIHx8IGV2ZW50LmN5UG9zaXRpb247XHJcbiAgICAgICAgICB2YXIgc2VsZWN0ZWRCZW5kSW5kZXggPSBnZXRDb250YWluaW5nQmVuZFNoYXBlSW5kZXgoY3lQb3MueCwgY3lQb3MueSwgZWRnZSk7XHJcbiAgICAgICAgICBpZiAoc2VsZWN0ZWRCZW5kSW5kZXggPT0gLTEpIHtcclxuICAgICAgICAgICAgbWVudXMuaGlkZU1lbnVJdGVtKHJlbW92ZUJlbmRQb2ludEN4dE1lbnVJZCk7XHJcbiAgICAgICAgICAgIG1lbnVzLnNob3dNZW51SXRlbShhZGRCZW5kUG9pbnRDeHRNZW51SWQpO1xyXG4gICAgICAgICAgICBiZW5kUG9pbnRVdGlsaXRpZXMuY3VycmVudEN0eFBvcyA9IGN5UG9zO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1lbnVzLmhpZGVNZW51SXRlbShhZGRCZW5kUG9pbnRDeHRNZW51SWQpO1xyXG4gICAgICAgICAgICBtZW51cy5zaG93TWVudUl0ZW0ocmVtb3ZlQmVuZFBvaW50Q3h0TWVudUlkKTtcclxuICAgICAgICAgICAgYmVuZFBvaW50VXRpbGl0aWVzLmN1cnJlbnRCZW5kSW5kZXggPSBzZWxlY3RlZEJlbmRJbmRleDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBiZW5kUG9pbnRVdGlsaXRpZXMuY3VycmVudEN0eEVkZ2UgPSBlZGdlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGN5Lm9uKCdjeWVkZ2ViZW5kZWRpdGluZy5jaGFuZ2VCZW5kUG9pbnRzJywgJ2VkZ2UnLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgIHZhciBlZGdlID0gdGhpcztcclxuICAgICAgICAgIGN5LnN0YXJ0QmF0Y2goKTtcclxuICAgICAgICAgIGN5LmVkZ2VzKCkudW5zZWxlY3QoKTsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgY3kudHJpZ2dlcignYmVuZFBvaW50TW92ZW1lbnQnKTtcclxuICAgICAgICAgIGN5LmVuZEJhdGNoKCk7XHJcbiAgICAgICAgICByZWZyZXNoRHJhd3MoKTtcclxuICAgICAgICAgIGVkZ2Uuc2VsZWN0KCk7ICAgXHJcbiAgICAgICAgICBcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIHNlbGVjdGVkRWRnZXM7XHJcbiAgICAgIHZhciBiZW5kUG9pbnRzTW92aW5nID0gZmFsc2U7XHJcblxyXG4gICAgICBmdW5jdGlvbiBrZXlEb3duKGUpIHtcclxuXHJcbiAgICAgICAgICB2YXIgc2hvdWxkTW92ZSA9IHR5cGVvZiBvcHRpb25zKCkubW92ZVNlbGVjdGVkQmVuZFBvaW50c09uS2V5RXZlbnRzID09PSAnZnVuY3Rpb24nXHJcbiAgICAgICAgICAgICAgPyBvcHRpb25zKCkubW92ZVNlbGVjdGVkQmVuZFBvaW50c09uS2V5RXZlbnRzKCkgOiBvcHRpb25zKCkubW92ZVNlbGVjdGVkQmVuZFBvaW50c09uS2V5RXZlbnRzO1xyXG5cclxuICAgICAgICAgIGlmICghc2hvdWxkTW92ZSkge1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvL0NoZWNrcyBpZiB0aGUgdGFnbmFtZSBpcyB0ZXh0YXJlYSBvciBpbnB1dFxyXG4gICAgICAgICAgdmFyIHRuID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudC50YWdOYW1lO1xyXG4gICAgICAgICAgaWYgKHRuICE9IFwiVEVYVEFSRUFcIiAmJiB0biAhPSBcIklOUFVUXCIpXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgc3dpdGNoKGUua2V5Q29kZSl7XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgMzc6IGNhc2UgMzk6IGNhc2UgMzg6ICBjYXNlIDQwOiAvLyBBcnJvdyBrZXlzXHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgMzI6IGUucHJldmVudERlZmF1bHQoKTsgYnJlYWs7IC8vIFNwYWNlXHJcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrOyAvLyBkbyBub3QgYmxvY2sgb3RoZXIga2V5c1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICAgIGlmIChlLmtleUNvZGUgPCAnMzcnIHx8IGUua2V5Q29kZSA+ICc0MCcpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgLy9DaGVja3MgaWYgb25seSBlZGdlcyBhcmUgc2VsZWN0ZWQgKG5vdCBhbnkgbm9kZSkgYW5kIGlmIG9ubHkgMSBlZGdlIGlzIHNlbGVjdGVkXHJcbiAgICAgICAgICAgICAgLy9JZiB0aGUgc2Vjb25kIGNoZWNraW5nIGlzIHJlbW92ZWQgdGhlIGJlbmQgcG9pbnRzIG9mIG11bHRpcGxlIGVkZ2VzIHdvdWxkIG1vdmVcclxuICAgICAgICAgICAgICBpZiAoY3kuZWRnZXMoXCI6c2VsZWN0ZWRcIikubGVuZ3RoICE9IGN5LmVsZW1lbnRzKFwiOnNlbGVjdGVkXCIpLmxlbmd0aCB8fCBjeS5lZGdlcyhcIjpzZWxlY3RlZFwiKS5sZW5ndGggIT0gMSlcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBpZiAoIWJlbmRQb2ludHNNb3ZpbmcpXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZEVkZ2VzID0gY3kuZWRnZXMoJzpzZWxlY3RlZCcpO1xyXG4gICAgICAgICAgICAgICAgICBjeS50cmlnZ2VyKFwiZWRnZWJlbmRlZGl0aW5nLm1vdmVzdGFydFwiLCBbc2VsZWN0ZWRFZGdlc10pO1xyXG4gICAgICAgICAgICAgICAgICBiZW5kUG9pbnRzTW92aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKGUuYWx0S2V5ICYmIGUud2hpY2ggPT0gJzM4Jykge1xyXG4gICAgICAgICAgICAgICAgICAvLyB1cCBhcnJvdyBhbmQgYWx0XHJcbiAgICAgICAgICAgICAgICAgIG1vdmVCZW5kUG9pbnRzICh7eDowLCB5Oi0xfSxzZWxlY3RlZEVkZ2VzKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSBpZiAoZS5hbHRLZXkgJiYgZS53aGljaCA9PSAnNDAnKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIGRvd24gYXJyb3cgYW5kIGFsdFxyXG4gICAgICAgICAgICAgICAgICBtb3ZlQmVuZFBvaW50cyAoe3g6MCwgeToxfSxzZWxlY3RlZEVkZ2VzKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSBpZiAoZS5hbHRLZXkgJiYgZS53aGljaCA9PSAnMzcnKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIGxlZnQgYXJyb3cgYW5kIGFsdFxyXG4gICAgICAgICAgICAgICAgICBtb3ZlQmVuZFBvaW50cyAoe3g6LTEsIHk6MH0sc2VsZWN0ZWRFZGdlcyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKGUuYWx0S2V5ICYmIGUud2hpY2ggPT0gJzM5Jykge1xyXG4gICAgICAgICAgICAgICAgICAvLyByaWdodCBhcnJvdyBhbmQgYWx0XHJcbiAgICAgICAgICAgICAgICAgIG1vdmVCZW5kUG9pbnRzICh7eDoxLCB5OjB9LHNlbGVjdGVkRWRnZXMpO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgZWxzZSBpZiAoZS5zaGlmdEtleSAmJiBlLndoaWNoID09ICczOCcpIHtcclxuICAgICAgICAgICAgICAgICAgLy8gdXAgYXJyb3cgYW5kIHNoaWZ0XHJcbiAgICAgICAgICAgICAgICAgIG1vdmVCZW5kUG9pbnRzICh7eDowLCB5Oi0xMH0sc2VsZWN0ZWRFZGdlcyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKGUuc2hpZnRLZXkgJiYgZS53aGljaCA9PSAnNDAnKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIGRvd24gYXJyb3cgYW5kIHNoaWZ0XHJcbiAgICAgICAgICAgICAgICAgIG1vdmVCZW5kUG9pbnRzICh7eDowLCB5OjEwfSxzZWxlY3RlZEVkZ2VzKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSBpZiAoZS5zaGlmdEtleSAmJiBlLndoaWNoID09ICczNycpIHtcclxuICAgICAgICAgICAgICAgICAgLy8gbGVmdCBhcnJvdyBhbmQgc2hpZnRcclxuICAgICAgICAgICAgICAgICAgbW92ZUJlbmRQb2ludHMgKHt4Oi0xMCwgeTowfSxzZWxlY3RlZEVkZ2VzKTtcclxuXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKGUuc2hpZnRLZXkgJiYgZS53aGljaCA9PSAnMzknICkge1xyXG4gICAgICAgICAgICAgICAgICAvLyByaWdodCBhcnJvdyBhbmQgc2hpZnRcclxuICAgICAgICAgICAgICAgICAgbW92ZUJlbmRQb2ludHMgKHt4OjEwLCB5OjB9LHNlbGVjdGVkRWRnZXMpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIGlmIChlLmtleUNvZGUgPT0gJzM4Jykge1xyXG4gICAgICAgICAgICAgICAgICAvLyB1cCBhcnJvd1xyXG4gICAgICAgICAgICAgICAgICBtb3ZlQmVuZFBvaW50cyh7eDogMCwgeTogLTN9LCBzZWxlY3RlZEVkZ2VzKTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKGUua2V5Q29kZSA9PSAnNDAnKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIGRvd24gYXJyb3dcclxuICAgICAgICAgICAgICAgICAgbW92ZUJlbmRQb2ludHMgKHt4OjAsIHk6M30sc2VsZWN0ZWRFZGdlcyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKGUua2V5Q29kZSA9PSAnMzcnKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIGxlZnQgYXJyb3dcclxuICAgICAgICAgICAgICAgICAgbW92ZUJlbmRQb2ludHMgKHt4Oi0zLCB5OjB9LHNlbGVjdGVkRWRnZXMpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIGlmIChlLmtleUNvZGUgPT0gJzM5Jykge1xyXG4gICAgICAgICAgICAgICAgICAvL3JpZ2h0IGFycm93XHJcbiAgICAgICAgICAgICAgICAgIG1vdmVCZW5kUG9pbnRzICh7eDozLCB5OjB9LHNlbGVjdGVkRWRnZXMpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBmdW5jdGlvbiBrZXlVcChlKSB7XHJcblxyXG4gICAgICAgICAgaWYgKGUua2V5Q29kZSA8ICczNycgfHwgZS5rZXlDb2RlID4gJzQwJykge1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB2YXIgc2hvdWxkTW92ZSA9IHR5cGVvZiBvcHRpb25zKCkubW92ZVNlbGVjdGVkQmVuZFBvaW50c09uS2V5RXZlbnRzID09PSAnZnVuY3Rpb24nXHJcbiAgICAgICAgICAgICAgPyBvcHRpb25zKCkubW92ZVNlbGVjdGVkQmVuZFBvaW50c09uS2V5RXZlbnRzKCkgOiBvcHRpb25zKCkubW92ZVNlbGVjdGVkQmVuZFBvaW50c09uS2V5RXZlbnRzO1xyXG5cclxuICAgICAgICAgIGlmICghc2hvdWxkTW92ZSkge1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBjeS50cmlnZ2VyKFwiZWRnZWJlbmRlZGl0aW5nLm1vdmVlbmRcIiwgW3NlbGVjdGVkRWRnZXNdKTtcclxuICAgICAgICAgIHNlbGVjdGVkRWRnZXMgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICBiZW5kUG9pbnRzTW92aW5nID0gZmFsc2U7XHJcblxyXG4gICAgICB9XHJcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsa2V5RG93biwgdHJ1ZSk7XHJcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLGtleVVwLCB0cnVlKTtcclxuXHJcbiAgICAgICRjb250YWluZXIuZGF0YSgnY3llZGdlYmVuZGVkaXRpbmcnLCBkYXRhKTtcclxuICAgIH0sXHJcbiAgICB1bmJpbmQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjeS5vZmYoJ3Bvc2l0aW9uJywgJ25vZGUnLCBlUG9zaXRpb24pXHJcbiAgICAgICAgICAub2ZmKCdyZW1vdmUnLCAnbm9kZScsIGVSZW1vdmUpXHJcbiAgICAgICAgICAub2ZmKCdhZGQnLCAnbm9kZScsIGVBZGQpXHJcbiAgICAgICAgICAub2ZmKCdzdHlsZScsICdlZGdlLmVkZ2ViZW5kZWRpdGluZy1oYXNiZW5kcG9pbnRzOnNlbGVjdGVkJywgZVN0eWxlKVxyXG4gICAgICAgICAgLm9mZignc2VsZWN0JywgJ2VkZ2UnLCBlU2VsZWN0KVxyXG4gICAgICAgICAgLm9mZigndW5zZWxlY3QnLCAnZWRnZScsIGVVbnNlbGVjdClcclxuICAgICAgICAgIC5vZmYoJ3RhcHN0YXJ0JywgJ2VkZ2UnLCBlVGFwU3RhcnQpXHJcbiAgICAgICAgICAub2ZmKCd0YXBkcmFnJywgZVRhcERyYWcpXHJcbiAgICAgICAgICAub2ZmKCd0YXBlbmQnLCBlVGFwRW5kKVxyXG4gICAgICAgICAgLm9mZignY3h0dGFwJywgZUN4dFRhcCk7XHJcblxyXG4gICAgICAgIGN5LnVuYmluZChcInpvb20gcGFuXCIsIGVab29tKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBpZiAoZnVuY3Rpb25zW2ZuXSkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uc1tmbl0uYXBwbHkoJChjeS5jb250YWluZXIoKSksIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xyXG4gIH0gZWxzZSBpZiAodHlwZW9mIGZuID09ICdvYmplY3QnIHx8ICFmbikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9ucy5pbml0LmFwcGx5KCQoY3kuY29udGFpbmVyKCkpLCBhcmd1bWVudHMpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICAkLmVycm9yKCdObyBzdWNoIGZ1bmN0aW9uIGAnICsgZm4gKyAnYCBmb3IgY3l0b3NjYXBlLmpzLWVkZ2UtZWRpdGluZycpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuICQodGhpcyk7XHJcbn07XHJcbiIsInZhciBiZW5kUG9pbnRVdGlsaXRpZXMgPSB7XHJcbiAgY3VycmVudEN0eEVkZ2U6IHVuZGVmaW5lZCxcclxuICBjdXJyZW50Q3R4UG9zOiB1bmRlZmluZWQsXHJcbiAgY3VycmVudEJlbmRJbmRleDogdW5kZWZpbmVkLFxyXG4gIGlnbm9yZWRDbGFzc2VzOiB1bmRlZmluZWQsXHJcbiAgc2V0SWdub3JlZENsYXNzZXM6IGZ1bmN0aW9uKF9pZ25vcmVkQ2xhc3Nlcykge1xyXG4gICAgdGhpcy5pZ25vcmVkQ2xhc3NlcyA9IF9pZ25vcmVkQ2xhc3NlcztcclxuICB9LFxyXG4gIC8vIGluaXRpbGl6ZSBiZW5kIHBvaW50cyBiYXNlZCBvbiBiZW5kUG9zaXRpb25zRmNuXHJcbiAgaW5pdEJlbmRQb2ludHM6IGZ1bmN0aW9uKGJlbmRQb3NpdGlvbnNGY24sIGVkZ2VzKSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVkZ2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHZhciBlZGdlID0gZWRnZXNbaV07XHJcbiAgICAgIGlmKCF0aGlzLmlzSWdub3JlZEVkZ2UoZWRnZSkpIHtcclxuXHJcbiAgICAgICAgLy8gZ2V0IHRoZSBiZW5kIHBvc2l0aW9ucyBieSBhcHBseWluZyB0aGUgZnVuY3Rpb24gZm9yIHRoaXMgZWRnZVxyXG4gICAgICAgIHZhciBiZW5kUG9zaXRpb25zID0gYmVuZFBvc2l0aW9uc0Zjbi5hcHBseSh0aGlzLCBlZGdlKTtcclxuICAgICAgICAvLyBjYWxjdWxhdGUgcmVsYXRpdmUgYmVuZCBwb3NpdGlvbnNcclxuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5jb252ZXJ0VG9SZWxhdGl2ZUJlbmRQb3NpdGlvbnMoZWRnZSwgYmVuZFBvc2l0aW9ucyk7XHJcblxyXG4gICAgICAgIC8vIGlmIHRoZXJlIGFyZSBiZW5kIHBvaW50cyBzZXQgd2VpZ2h0cyBhbmQgZGlzdGFuY2VzIGFjY29yZGluZ2x5IGFuZCBhZGQgY2xhc3MgdG8gZW5hYmxlIHN0eWxlIGNoYW5nZXNcclxuICAgICAgICBpZiAocmVzdWx0LmRpc3RhbmNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBlZGdlLmRhdGEoJ2N5ZWRnZWJlbmRlZGl0aW5nV2VpZ2h0cycsIHJlc3VsdC53ZWlnaHRzKTtcclxuICAgICAgICAgIGVkZ2UuZGF0YSgnY3llZGdlYmVuZGVkaXRpbmdEaXN0YW5jZXMnLCByZXN1bHQuZGlzdGFuY2VzKTtcclxuICAgICAgICAgIGVkZ2UuYWRkQ2xhc3MoJ2VkZ2ViZW5kZWRpdGluZy1oYXNiZW5kcG9pbnRzJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgaXNJZ25vcmVkRWRnZTogZnVuY3Rpb24oZWRnZSkge1xyXG5cclxuICAgIHZhciBzdGFydFggPSBlZGdlLnNvdXJjZSgpLnBvc2l0aW9uKCd4Jyk7XHJcbiAgICB2YXIgc3RhcnRZID0gZWRnZS5zb3VyY2UoKS5wb3NpdGlvbigneScpO1xyXG4gICAgdmFyIGVuZFggPSBlZGdlLnRhcmdldCgpLnBvc2l0aW9uKCd4Jyk7XHJcbiAgICB2YXIgZW5kWSA9IGVkZ2UudGFyZ2V0KCkucG9zaXRpb24oJ3knKTtcclxuICAgXHJcbiAgICBpZigoc3RhcnRYID09IGVuZFggJiYgc3RhcnRZID09IGVuZFkpICB8fCAoZWRnZS5zb3VyY2UoKS5pZCgpID09IGVkZ2UudGFyZ2V0KCkuaWQoKSkpe1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGZvcih2YXIgaSA9IDA7IHRoaXMuaWdub3JlZENsYXNzZXMgJiYgaSA8ICB0aGlzLmlnbm9yZWRDbGFzc2VzLmxlbmd0aDsgaSsrKXtcclxuICAgICAgaWYoZWRnZS5oYXNDbGFzcyh0aGlzLmlnbm9yZWRDbGFzc2VzW2ldKSlcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9LFxyXG4gIC8vR2V0IHRoZSBkaXJlY3Rpb24gb2YgdGhlIGxpbmUgZnJvbSBzb3VyY2UgcG9pbnQgdG8gdGhlIHRhcmdldCBwb2ludFxyXG4gIGdldExpbmVEaXJlY3Rpb246IGZ1bmN0aW9uKHNyY1BvaW50LCB0Z3RQb2ludCl7XHJcbiAgICBpZihzcmNQb2ludC55ID09IHRndFBvaW50LnkgJiYgc3JjUG9pbnQueCA8IHRndFBvaW50Lngpe1xyXG4gICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuICAgIGlmKHNyY1BvaW50LnkgPCB0Z3RQb2ludC55ICYmIHNyY1BvaW50LnggPCB0Z3RQb2ludC54KXtcclxuICAgICAgcmV0dXJuIDI7XHJcbiAgICB9XHJcbiAgICBpZihzcmNQb2ludC55IDwgdGd0UG9pbnQueSAmJiBzcmNQb2ludC54ID09IHRndFBvaW50Lngpe1xyXG4gICAgICByZXR1cm4gMztcclxuICAgIH1cclxuICAgIGlmKHNyY1BvaW50LnkgPCB0Z3RQb2ludC55ICYmIHNyY1BvaW50LnggPiB0Z3RQb2ludC54KXtcclxuICAgICAgcmV0dXJuIDQ7XHJcbiAgICB9XHJcbiAgICBpZihzcmNQb2ludC55ID09IHRndFBvaW50LnkgJiYgc3JjUG9pbnQueCA+IHRndFBvaW50Lngpe1xyXG4gICAgICByZXR1cm4gNTtcclxuICAgIH1cclxuICAgIGlmKHNyY1BvaW50LnkgPiB0Z3RQb2ludC55ICYmIHNyY1BvaW50LnggPiB0Z3RQb2ludC54KXtcclxuICAgICAgcmV0dXJuIDY7XHJcbiAgICB9XHJcbiAgICBpZihzcmNQb2ludC55ID4gdGd0UG9pbnQueSAmJiBzcmNQb2ludC54ID09IHRndFBvaW50Lngpe1xyXG4gICAgICByZXR1cm4gNztcclxuICAgIH1cclxuICAgIHJldHVybiA4Oy8vaWYgc3JjUG9pbnQueSA+IHRndFBvaW50LnkgYW5kIHNyY1BvaW50LnggPCB0Z3RQb2ludC54XHJcbiAgfSxcclxuICBnZXRTcmNUZ3RQb2ludHNBbmRUYW5nZW50czogZnVuY3Rpb24gKGVkZ2UpIHtcclxuICAgIHZhciBzb3VyY2VOb2RlID0gZWRnZS5zb3VyY2UoKTtcclxuICAgIHZhciB0YXJnZXROb2RlID0gZWRnZS50YXJnZXQoKTtcclxuICAgIFxyXG4gICAgdmFyIHRndFBvc2l0aW9uID0gdGFyZ2V0Tm9kZS5wb3NpdGlvbigpO1xyXG4gICAgdmFyIHNyY1Bvc2l0aW9uID0gc291cmNlTm9kZS5wb3NpdGlvbigpO1xyXG4gICAgXHJcbiAgICB2YXIgc3JjUG9pbnQgPSBzb3VyY2VOb2RlLnBvc2l0aW9uKCk7XHJcbiAgICB2YXIgdGd0UG9pbnQgPSB0YXJnZXROb2RlLnBvc2l0aW9uKCk7XHJcblxyXG5cclxuICAgIHZhciBtMSA9ICh0Z3RQb2ludC55IC0gc3JjUG9pbnQueSkgLyAodGd0UG9pbnQueCAtIHNyY1BvaW50LngpO1xyXG4gICAgdmFyIG0yID0gLTEgLyBtMTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBtMTogbTEsXHJcbiAgICAgIG0yOiBtMixcclxuICAgICAgc3JjUG9pbnQ6IHNyY1BvaW50LFxyXG4gICAgICB0Z3RQb2ludDogdGd0UG9pbnRcclxuICAgIH07XHJcbiAgfSxcclxuICBnZXRJbnRlcnNlY3Rpb246IGZ1bmN0aW9uKGVkZ2UsIHBvaW50LCBzcmNUZ3RQb2ludHNBbmRUYW5nZW50cyl7XHJcbiAgICBpZiAoc3JjVGd0UG9pbnRzQW5kVGFuZ2VudHMgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBzcmNUZ3RQb2ludHNBbmRUYW5nZW50cyA9IHRoaXMuZ2V0U3JjVGd0UG9pbnRzQW5kVGFuZ2VudHMoZWRnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHNyY1BvaW50ID0gc3JjVGd0UG9pbnRzQW5kVGFuZ2VudHMuc3JjUG9pbnQ7XHJcbiAgICB2YXIgdGd0UG9pbnQgPSBzcmNUZ3RQb2ludHNBbmRUYW5nZW50cy50Z3RQb2ludDtcclxuICAgIHZhciBtMSA9IHNyY1RndFBvaW50c0FuZFRhbmdlbnRzLm0xO1xyXG4gICAgdmFyIG0yID0gc3JjVGd0UG9pbnRzQW5kVGFuZ2VudHMubTI7XHJcblxyXG4gICAgdmFyIGludGVyc2VjdFg7XHJcbiAgICB2YXIgaW50ZXJzZWN0WTtcclxuXHJcbiAgICBpZihtMSA9PSBJbmZpbml0eSB8fCBtMSA9PSAtSW5maW5pdHkpe1xyXG4gICAgICBpbnRlcnNlY3RYID0gc3JjUG9pbnQueDtcclxuICAgICAgaW50ZXJzZWN0WSA9IHBvaW50Lnk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmKG0xID09IDApe1xyXG4gICAgICBpbnRlcnNlY3RYID0gcG9pbnQueDtcclxuICAgICAgaW50ZXJzZWN0WSA9IHNyY1BvaW50Lnk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdmFyIGExID0gc3JjUG9pbnQueSAtIG0xICogc3JjUG9pbnQueDtcclxuICAgICAgdmFyIGEyID0gcG9pbnQueSAtIG0yICogcG9pbnQueDtcclxuXHJcbiAgICAgIGludGVyc2VjdFggPSAoYTIgLSBhMSkgLyAobTEgLSBtMik7XHJcbiAgICAgIGludGVyc2VjdFkgPSBtMSAqIGludGVyc2VjdFggKyBhMTtcclxuICAgIH1cclxuXHJcbiAgICAvL0ludGVyc2VjdGlvbiBwb2ludCBpcyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSBsaW5lcyBwYXNzaW5nIHRocm91Z2ggdGhlIG5vZGVzIGFuZFxyXG4gICAgLy9wYXNzaW5nIHRocm91Z2ggdGhlIGJlbmQgcG9pbnQgYW5kIHBlcnBlbmRpY3VsYXIgdG8gdGhlIG90aGVyIGxpbmVcclxuICAgIHZhciBpbnRlcnNlY3Rpb25Qb2ludCA9IHtcclxuICAgICAgeDogaW50ZXJzZWN0WCxcclxuICAgICAgeTogaW50ZXJzZWN0WVxyXG4gICAgfTtcclxuICAgIFxyXG4gICAgcmV0dXJuIGludGVyc2VjdGlvblBvaW50O1xyXG4gIH0sXHJcbiAgZ2V0U2VnbWVudFBvaW50czogZnVuY3Rpb24oZWRnZSkge1xyXG4gICAgXHJcbiAgICBpZiggZWRnZS5jc3MoJ2N1cnZlLXN0eWxlJykgIT09ICdzZWdtZW50cycgKSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHZhciBzZWdwdHMgPSBbXTtcclxuXHJcbiAgICB2YXIgc2VnbWVudFdzID0gZWRnZS5wc3R5bGUoICdzZWdtZW50LXdlaWdodHMnICkucGZWYWx1ZTtcclxuICAgIHZhciBzZWdtZW50RHMgPSBlZGdlLnBzdHlsZSggJ3NlZ21lbnQtZGlzdGFuY2VzJyApLnBmVmFsdWU7XHJcbiAgICB2YXIgc2VnbWVudHNOID0gTWF0aC5taW4oIHNlZ21lbnRXcy5sZW5ndGgsIHNlZ21lbnREcy5sZW5ndGggKTtcclxuICAgIFxyXG4gICAgdmFyIHNyY1BvcyA9IGVkZ2Uuc291cmNlKCkucG9zaXRpb24oKTtcclxuICAgIHZhciB0Z3RQb3MgPSBlZGdlLnRhcmdldCgpLnBvc2l0aW9uKCk7XHJcblxyXG4gICAgdmFyIGR5ID0gKCB0Z3RQb3MueSAtIHNyY1Bvcy55ICk7XHJcbiAgICB2YXIgZHggPSAoIHRndFBvcy54IC0gc3JjUG9zLnggKTtcclxuICAgIFxyXG4gICAgdmFyIGwgPSBNYXRoLnNxcnQoIGR4ICogZHggKyBkeSAqIGR5ICk7XHJcblxyXG4gICAgdmFyIHZlY3RvciA9IHtcclxuICAgICAgeDogZHgsXHJcbiAgICAgIHk6IGR5XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciB2ZWN0b3JOb3JtID0ge1xyXG4gICAgICB4OiB2ZWN0b3IueCAvIGwsXHJcbiAgICAgIHk6IHZlY3Rvci55IC8gbFxyXG4gICAgfTtcclxuICAgIFxyXG4gICAgdmFyIHZlY3Rvck5vcm1JbnZlcnNlID0ge1xyXG4gICAgICB4OiAtdmVjdG9yTm9ybS55LFxyXG4gICAgICB5OiB2ZWN0b3JOb3JtLnhcclxuICAgIH07XHJcblxyXG4gICAgZm9yKCB2YXIgcyA9IDA7IHMgPCBzZWdtZW50c047IHMrKyApe1xyXG4gICAgICB2YXIgdyA9IHNlZ21lbnRXc1sgcyBdO1xyXG4gICAgICB2YXIgZCA9IHNlZ21lbnREc1sgcyBdO1xyXG5cclxuICAgICAgLy8gZCA9IHN3YXBwZWREaXJlY3Rpb24gPyAtZCA6IGQ7XHJcbiAgICAgIC8vXHJcbiAgICAgIC8vIGQgPSBNYXRoLmFicyhkKTtcclxuXHJcbiAgICAgIC8vIHZhciB3MSA9ICFzd2FwcGVkRGlyZWN0aW9uID8gKDEgLSB3KSA6IHc7XHJcbiAgICAgIC8vIHZhciB3MiA9ICFzd2FwcGVkRGlyZWN0aW9uID8gdyA6ICgxIC0gdyk7XHJcblxyXG4gICAgICB2YXIgdzEgPSAoMSAtIHcpO1xyXG4gICAgICB2YXIgdzIgPSB3O1xyXG5cclxuICAgICAgdmFyIHBvc1B0cyA9IHtcclxuICAgICAgICB4MTogc3JjUG9zLngsXHJcbiAgICAgICAgeDI6IHRndFBvcy54LFxyXG4gICAgICAgIHkxOiBzcmNQb3MueSxcclxuICAgICAgICB5MjogdGd0UG9zLnlcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHZhciBtaWRwdFB0cyA9IHBvc1B0cztcclxuICAgICAgXHJcbiAgICAgIFxyXG5cclxuICAgICAgdmFyIGFkanVzdGVkTWlkcHQgPSB7XHJcbiAgICAgICAgeDogbWlkcHRQdHMueDEgKiB3MSArIG1pZHB0UHRzLngyICogdzIsXHJcbiAgICAgICAgeTogbWlkcHRQdHMueTEgKiB3MSArIG1pZHB0UHRzLnkyICogdzJcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHNlZ3B0cy5wdXNoKFxyXG4gICAgICAgIGFkanVzdGVkTWlkcHQueCArIHZlY3Rvck5vcm1JbnZlcnNlLnggKiBkLFxyXG4gICAgICAgIGFkanVzdGVkTWlkcHQueSArIHZlY3Rvck5vcm1JbnZlcnNlLnkgKiBkXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHJldHVybiBzZWdwdHM7XHJcbiAgfSxcclxuICBjb252ZXJ0VG9SZWxhdGl2ZUJlbmRQb3NpdGlvbjogZnVuY3Rpb24gKGVkZ2UsIGJlbmRQb2ludCwgc3JjVGd0UG9pbnRzQW5kVGFuZ2VudHMpIHtcclxuICAgIGlmIChzcmNUZ3RQb2ludHNBbmRUYW5nZW50cyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHNyY1RndFBvaW50c0FuZFRhbmdlbnRzID0gdGhpcy5nZXRTcmNUZ3RQb2ludHNBbmRUYW5nZW50cyhlZGdlKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgdmFyIGludGVyc2VjdGlvblBvaW50ID0gdGhpcy5nZXRJbnRlcnNlY3Rpb24oZWRnZSwgYmVuZFBvaW50LCBzcmNUZ3RQb2ludHNBbmRUYW5nZW50cyk7XHJcbiAgICB2YXIgaW50ZXJzZWN0WCA9IGludGVyc2VjdGlvblBvaW50Lng7XHJcbiAgICB2YXIgaW50ZXJzZWN0WSA9IGludGVyc2VjdGlvblBvaW50Lnk7XHJcbiAgICBcclxuICAgIHZhciBzcmNQb2ludCA9IHNyY1RndFBvaW50c0FuZFRhbmdlbnRzLnNyY1BvaW50O1xyXG4gICAgdmFyIHRndFBvaW50ID0gc3JjVGd0UG9pbnRzQW5kVGFuZ2VudHMudGd0UG9pbnQ7XHJcbiAgICBcclxuICAgIHZhciB3ZWlnaHQ7XHJcbiAgICBcclxuICAgIGlmKCBpbnRlcnNlY3RYICE9IHNyY1BvaW50LnggKSB7XHJcbiAgICAgIHdlaWdodCA9IChpbnRlcnNlY3RYIC0gc3JjUG9pbnQueCkgLyAodGd0UG9pbnQueCAtIHNyY1BvaW50LngpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiggaW50ZXJzZWN0WSAhPSBzcmNQb2ludC55ICkge1xyXG4gICAgICB3ZWlnaHQgPSAoaW50ZXJzZWN0WSAtIHNyY1BvaW50LnkpIC8gKHRndFBvaW50LnkgLSBzcmNQb2ludC55KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB3ZWlnaHQgPSAwO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICB2YXIgZGlzdGFuY2UgPSBNYXRoLnNxcnQoTWF0aC5wb3coKGludGVyc2VjdFkgLSBiZW5kUG9pbnQueSksIDIpXHJcbiAgICAgICAgKyBNYXRoLnBvdygoaW50ZXJzZWN0WCAtIGJlbmRQb2ludC54KSwgMikpO1xyXG4gICAgXHJcbiAgICAvL0dldCB0aGUgZGlyZWN0aW9uIG9mIHRoZSBsaW5lIGZvcm0gc291cmNlIHBvaW50IHRvIHRhcmdldCBwb2ludFxyXG4gICAgdmFyIGRpcmVjdGlvbjEgPSB0aGlzLmdldExpbmVEaXJlY3Rpb24oc3JjUG9pbnQsIHRndFBvaW50KTtcclxuICAgIC8vR2V0IHRoZSBkaXJlY3Rpb24gb2YgdGhlIGxpbmUgZnJvbSBpbnRlc2VjdGlvbiBwb2ludCB0byBiZW5kIHBvaW50XHJcbiAgICB2YXIgZGlyZWN0aW9uMiA9IHRoaXMuZ2V0TGluZURpcmVjdGlvbihpbnRlcnNlY3Rpb25Qb2ludCwgYmVuZFBvaW50KTtcclxuICAgIFxyXG4gICAgLy9JZiB0aGUgZGlmZmVyZW5jZSBpcyBub3QgLTIgYW5kIG5vdCA2IHRoZW4gdGhlIGRpcmVjdGlvbiBvZiB0aGUgZGlzdGFuY2UgaXMgbmVnYXRpdmVcclxuICAgIGlmKGRpcmVjdGlvbjEgLSBkaXJlY3Rpb24yICE9IC0yICYmIGRpcmVjdGlvbjEgLSBkaXJlY3Rpb24yICE9IDYpe1xyXG4gICAgICBpZihkaXN0YW5jZSAhPSAwKVxyXG4gICAgICAgIGRpc3RhbmNlID0gLTEgKiBkaXN0YW5jZTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgd2VpZ2h0OiB3ZWlnaHQsXHJcbiAgICAgIGRpc3RhbmNlOiBkaXN0YW5jZVxyXG4gICAgfTtcclxuICB9LFxyXG4gIGNvbnZlcnRUb1JlbGF0aXZlQmVuZFBvc2l0aW9uczogZnVuY3Rpb24gKGVkZ2UsIGJlbmRQb2ludHMpIHtcclxuICAgIHZhciBzcmNUZ3RQb2ludHNBbmRUYW5nZW50cyA9IHRoaXMuZ2V0U3JjVGd0UG9pbnRzQW5kVGFuZ2VudHMoZWRnZSk7XHJcbi8vICAgIHZhciBiZW5kUG9pbnRzID0gZWRnZS5kYXRhKCdiZW5kUG9pbnRQb3NpdGlvbnMnKTtcclxuICAgIC8vb3V0cHV0IHZhcmlhYmxlc1xyXG4gICAgdmFyIHdlaWdodHMgPSBbXTtcclxuICAgIHZhciBkaXN0YW5jZXMgPSBbXTtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgYmVuZFBvaW50cyAmJiBpIDwgYmVuZFBvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICB2YXIgYmVuZFBvaW50ID0gYmVuZFBvaW50c1tpXTtcclxuICAgICAgdmFyIHJlbGF0aXZlQmVuZFBvc2l0aW9uID0gdGhpcy5jb252ZXJ0VG9SZWxhdGl2ZUJlbmRQb3NpdGlvbihlZGdlLCBiZW5kUG9pbnQsIHNyY1RndFBvaW50c0FuZFRhbmdlbnRzKTtcclxuXHJcbiAgICAgIHdlaWdodHMucHVzaChyZWxhdGl2ZUJlbmRQb3NpdGlvbi53ZWlnaHQpO1xyXG4gICAgICBkaXN0YW5jZXMucHVzaChyZWxhdGl2ZUJlbmRQb3NpdGlvbi5kaXN0YW5jZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgd2VpZ2h0czogd2VpZ2h0cyxcclxuICAgICAgZGlzdGFuY2VzOiBkaXN0YW5jZXNcclxuICAgIH07XHJcbiAgfSxcclxuICBnZXRTZWdtZW50RGlzdGFuY2VzU3RyaW5nOiBmdW5jdGlvbiAoZWRnZSkge1xyXG4gICAgdmFyIHN0ciA9IFwiXCI7XHJcblxyXG4gICAgdmFyIGRpc3RhbmNlcyA9IGVkZ2UuZGF0YSgnY3llZGdlYmVuZGVkaXRpbmdEaXN0YW5jZXMnKTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBkaXN0YW5jZXMgJiYgaSA8IGRpc3RhbmNlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBzdHIgPSBzdHIgKyBcIiBcIiArIGRpc3RhbmNlc1tpXTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgcmV0dXJuIHN0cjtcclxuICB9LFxyXG4gIGdldFNlZ21lbnRXZWlnaHRzU3RyaW5nOiBmdW5jdGlvbiAoZWRnZSkge1xyXG4gICAgdmFyIHN0ciA9IFwiXCI7XHJcblxyXG4gICAgdmFyIHdlaWdodHMgPSBlZGdlLmRhdGEoJ2N5ZWRnZWJlbmRlZGl0aW5nV2VpZ2h0cycpO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IHdlaWdodHMgJiYgaSA8IHdlaWdodHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgc3RyID0gc3RyICsgXCIgXCIgKyB3ZWlnaHRzW2ldO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICByZXR1cm4gc3RyO1xyXG4gIH0sXHJcbiAgYWRkQmVuZFBvaW50OiBmdW5jdGlvbihlZGdlLCBuZXdCZW5kUG9pbnQpIHtcclxuICAgIGlmKGVkZ2UgPT09IHVuZGVmaW5lZCB8fCBuZXdCZW5kUG9pbnQgPT09IHVuZGVmaW5lZCl7XHJcbiAgICAgIGVkZ2UgPSB0aGlzLmN1cnJlbnRDdHhFZGdlO1xyXG4gICAgICBuZXdCZW5kUG9pbnQgPSB0aGlzLmN1cnJlbnRDdHhQb3M7XHJcbiAgICB9XHJcbiAgXHJcbiAgICB2YXIgcmVsYXRpdmVCZW5kUG9zaXRpb24gPSB0aGlzLmNvbnZlcnRUb1JlbGF0aXZlQmVuZFBvc2l0aW9uKGVkZ2UsIG5ld0JlbmRQb2ludCk7XHJcbiAgICB2YXIgb3JpZ2luYWxQb2ludFdlaWdodCA9IHJlbGF0aXZlQmVuZFBvc2l0aW9uLndlaWdodDtcclxuICAgIFxyXG4gICAgdmFyIHN0YXJ0WCA9IGVkZ2Uuc291cmNlKCkucG9zaXRpb24oJ3gnKTtcclxuICAgIHZhciBzdGFydFkgPSBlZGdlLnNvdXJjZSgpLnBvc2l0aW9uKCd5Jyk7XHJcbiAgICB2YXIgZW5kWCA9IGVkZ2UudGFyZ2V0KCkucG9zaXRpb24oJ3gnKTtcclxuICAgIHZhciBlbmRZID0gZWRnZS50YXJnZXQoKS5wb3NpdGlvbigneScpO1xyXG4gICAgdmFyIHN0YXJ0V2VpZ2h0ID0gdGhpcy5jb252ZXJ0VG9SZWxhdGl2ZUJlbmRQb3NpdGlvbihlZGdlLCB7eDogc3RhcnRYLCB5OiBzdGFydFl9KS53ZWlnaHQ7XHJcbiAgICB2YXIgZW5kV2VpZ2h0ID0gdGhpcy5jb252ZXJ0VG9SZWxhdGl2ZUJlbmRQb3NpdGlvbihlZGdlLCB7eDogZW5kWCwgeTogZW5kWX0pLndlaWdodDtcclxuICAgIHZhciB3ZWlnaHRzV2l0aFRndFNyYyA9IFtzdGFydFdlaWdodF0uY29uY2F0KGVkZ2UuZGF0YSgnY3llZGdlYmVuZGVkaXRpbmdXZWlnaHRzJyk/ZWRnZS5kYXRhKCdjeWVkZ2ViZW5kZWRpdGluZ1dlaWdodHMnKTpbXSkuY29uY2F0KFtlbmRXZWlnaHRdKTtcclxuICAgIFxyXG4gICAgdmFyIHNlZ1B0cyA9IHRoaXMuZ2V0U2VnbWVudFBvaW50cyhlZGdlKTtcclxuICAgIFxyXG4gICAgdmFyIG1pbkRpc3QgPSBJbmZpbml0eTtcclxuICAgIHZhciBpbnRlcnNlY3Rpb247XHJcbiAgICB2YXIgc2VncHRzV2l0aFRndFNyYyA9IFtzdGFydFgsIHN0YXJ0WV1cclxuICAgICAgICAgICAgLmNvbmNhdChzZWdQdHM/c2VnUHRzOltdKVxyXG4gICAgICAgICAgICAuY29uY2F0KFtlbmRYLCBlbmRZXSk7XHJcbiAgICB2YXIgbmV3QmVuZEluZGV4ID0gLTE7XHJcbiAgICBcclxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCB3ZWlnaHRzV2l0aFRndFNyYy5sZW5ndGggLSAxOyBpKyspe1xyXG4gICAgICB2YXIgdzEgPSB3ZWlnaHRzV2l0aFRndFNyY1tpXTtcclxuICAgICAgdmFyIHcyID0gd2VpZ2h0c1dpdGhUZ3RTcmNbaSArIDFdO1xyXG4gICAgICBcclxuICAgICAgLy9jaGVjayBpZiB0aGUgd2VpZ2h0IGlzIGJldHdlZW4gdzEgYW5kIHcyXHJcbiAgICAgIGNvbnN0IGIxID0gdGhpcy5jb21wYXJlV2l0aFByZWNpc2lvbihvcmlnaW5hbFBvaW50V2VpZ2h0LCB3MSwgdHJ1ZSk7XHJcbiAgICAgIGNvbnN0IGIyID0gdGhpcy5jb21wYXJlV2l0aFByZWNpc2lvbihvcmlnaW5hbFBvaW50V2VpZ2h0LCB3Mik7XHJcbiAgICAgIGNvbnN0IGIzID0gdGhpcy5jb21wYXJlV2l0aFByZWNpc2lvbihvcmlnaW5hbFBvaW50V2VpZ2h0LCB3MiwgdHJ1ZSk7XHJcbiAgICAgIGNvbnN0IGI0ID0gdGhpcy5jb21wYXJlV2l0aFByZWNpc2lvbihvcmlnaW5hbFBvaW50V2VpZ2h0LCB3MSk7XHJcbiAgICAgIGlmKCAoYjEgJiYgYjIpIHx8IChiMyAmJiBiNCkpe1xyXG4gICAgICAgIHZhciBzdGFydFggPSBzZWdwdHNXaXRoVGd0U3JjWzIgKiBpXTtcclxuICAgICAgICB2YXIgc3RhcnRZID0gc2VncHRzV2l0aFRndFNyY1syICogaSArIDFdO1xyXG4gICAgICAgIHZhciBlbmRYID0gc2VncHRzV2l0aFRndFNyY1syICogaSArIDJdO1xyXG4gICAgICAgIHZhciBlbmRZID0gc2VncHRzV2l0aFRndFNyY1syICogaSArIDNdO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHZhciBzdGFydCA9IHtcclxuICAgICAgICAgIHg6IHN0YXJ0WCxcclxuICAgICAgICAgIHk6IHN0YXJ0WVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgXHJcbiAgICAgICAgdmFyIGVuZCA9IHtcclxuICAgICAgICAgIHg6IGVuZFgsXHJcbiAgICAgICAgICB5OiBlbmRZXHJcbiAgICAgICAgfTtcclxuICAgICAgICBcclxuICAgICAgICB2YXIgbTEgPSAoIHN0YXJ0WSAtIGVuZFkgKSAvICggc3RhcnRYIC0gZW5kWCApO1xyXG4gICAgICAgIHZhciBtMiA9IC0xIC8gbTE7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdmFyIHNyY1RndFBvaW50c0FuZFRhbmdlbnRzID0ge1xyXG4gICAgICAgICAgc3JjUG9pbnQ6IHN0YXJ0LFxyXG4gICAgICAgICAgdGd0UG9pbnQ6IGVuZCxcclxuICAgICAgICAgIG0xOiBtMSxcclxuICAgICAgICAgIG0yOiBtMlxyXG4gICAgICAgIH07XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9nZXQgdGhlIGludGVyc2VjdGlvbiBvZiB0aGUgY3VycmVudCBzZWdtZW50IHdpdGggdGhlIG5ldyBiZW5kIHBvaW50XHJcbiAgICAgICAgdmFyIGN1cnJlbnRJbnRlcnNlY3Rpb24gPSB0aGlzLmdldEludGVyc2VjdGlvbihlZGdlLCBuZXdCZW5kUG9pbnQsIHNyY1RndFBvaW50c0FuZFRhbmdlbnRzKTtcclxuICAgICAgICB2YXIgZGlzdCA9IE1hdGguc3FydCggTWF0aC5wb3coIChuZXdCZW5kUG9pbnQueCAtIGN1cnJlbnRJbnRlcnNlY3Rpb24ueCksIDIgKSBcclxuICAgICAgICAgICAgICAgICsgTWF0aC5wb3coIChuZXdCZW5kUG9pbnQueSAtIGN1cnJlbnRJbnRlcnNlY3Rpb24ueSksIDIgKSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9VcGRhdGUgdGhlIG1pbmltdW0gZGlzdGFuY2VcclxuICAgICAgICBpZihkaXN0IDwgbWluRGlzdCl7XHJcbiAgICAgICAgICBtaW5EaXN0ID0gZGlzdDtcclxuICAgICAgICAgIGludGVyc2VjdGlvbiA9IGN1cnJlbnRJbnRlcnNlY3Rpb247XHJcbiAgICAgICAgICBuZXdCZW5kSW5kZXggPSBpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBpZihpbnRlcnNlY3Rpb24gIT09IHVuZGVmaW5lZCl7XHJcbiAgICAgIG5ld0JlbmRQb2ludCA9IGludGVyc2VjdGlvbjtcclxuICAgIH1cclxuICAgIFxyXG4gICAgcmVsYXRpdmVCZW5kUG9zaXRpb24gPSB0aGlzLmNvbnZlcnRUb1JlbGF0aXZlQmVuZFBvc2l0aW9uKGVkZ2UsIG5ld0JlbmRQb2ludCk7XHJcbiAgICBcclxuICAgIGlmKGludGVyc2VjdGlvbiA9PT0gdW5kZWZpbmVkKXtcclxuICAgICAgcmVsYXRpdmVCZW5kUG9zaXRpb24uZGlzdGFuY2UgPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciB3ZWlnaHRzID0gZWRnZS5kYXRhKCdjeWVkZ2ViZW5kZWRpdGluZ1dlaWdodHMnKTtcclxuICAgIHZhciBkaXN0YW5jZXMgPSBlZGdlLmRhdGEoJ2N5ZWRnZWJlbmRlZGl0aW5nRGlzdGFuY2VzJyk7XHJcbiAgICBcclxuICAgIHdlaWdodHMgPSB3ZWlnaHRzP3dlaWdodHM6W107XHJcbiAgICBkaXN0YW5jZXMgPSBkaXN0YW5jZXM/ZGlzdGFuY2VzOltdO1xyXG4gICAgXHJcbiAgICBpZih3ZWlnaHRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBuZXdCZW5kSW5kZXggPSAwO1xyXG4gICAgfVxyXG4gICAgXHJcbi8vICAgIHdlaWdodHMucHVzaChyZWxhdGl2ZUJlbmRQb3NpdGlvbi53ZWlnaHQpO1xyXG4vLyAgICBkaXN0YW5jZXMucHVzaChyZWxhdGl2ZUJlbmRQb3NpdGlvbi5kaXN0YW5jZSk7XHJcbiAgICBpZihuZXdCZW5kSW5kZXggIT0gLTEpe1xyXG4gICAgICB3ZWlnaHRzLnNwbGljZShuZXdCZW5kSW5kZXgsIDAsIHJlbGF0aXZlQmVuZFBvc2l0aW9uLndlaWdodCk7XHJcbiAgICAgIGRpc3RhbmNlcy5zcGxpY2UobmV3QmVuZEluZGV4LCAwLCByZWxhdGl2ZUJlbmRQb3NpdGlvbi5kaXN0YW5jZSk7XHJcbiAgICB9XHJcbiAgIFxyXG4gICAgZWRnZS5kYXRhKCdjeWVkZ2ViZW5kZWRpdGluZ1dlaWdodHMnLCB3ZWlnaHRzKTtcclxuICAgIGVkZ2UuZGF0YSgnY3llZGdlYmVuZGVkaXRpbmdEaXN0YW5jZXMnLCBkaXN0YW5jZXMpO1xyXG4gICAgXHJcbiAgICBlZGdlLmFkZENsYXNzKCdlZGdlYmVuZGVkaXRpbmctaGFzYmVuZHBvaW50cycpO1xyXG4gICAgXHJcbiAgICByZXR1cm4gcmVsYXRpdmVCZW5kUG9zaXRpb247XHJcbiAgfSxcclxuICByZW1vdmVCZW5kUG9pbnQ6IGZ1bmN0aW9uKGVkZ2UsIGJlbmRQb2ludEluZGV4KXtcclxuICAgIGlmKGVkZ2UgPT09IHVuZGVmaW5lZCB8fCBiZW5kUG9pbnRJbmRleCA9PT0gdW5kZWZpbmVkKXtcclxuICAgICAgZWRnZSA9IHRoaXMuY3VycmVudEN0eEVkZ2U7XHJcbiAgICAgIGJlbmRQb2ludEluZGV4ID0gdGhpcy5jdXJyZW50QmVuZEluZGV4O1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICB2YXIgZGlzdGFuY2VzID0gZWRnZS5kYXRhKCdjeWVkZ2ViZW5kZWRpdGluZ0Rpc3RhbmNlcycpO1xyXG4gICAgdmFyIHdlaWdodHMgPSBlZGdlLmRhdGEoJ2N5ZWRnZWJlbmRlZGl0aW5nV2VpZ2h0cycpO1xyXG4gICAgXHJcbiAgICBkaXN0YW5jZXMuc3BsaWNlKGJlbmRQb2ludEluZGV4LCAxKTtcclxuICAgIHdlaWdodHMuc3BsaWNlKGJlbmRQb2ludEluZGV4LCAxKTtcclxuICAgIFxyXG4gICAgXHJcbiAgICBpZihkaXN0YW5jZXMubGVuZ3RoID09IDAgfHwgd2VpZ2h0cy5sZW5ndGggPT0gMCl7XHJcbiAgICAgIGVkZ2UucmVtb3ZlQ2xhc3MoJ2VkZ2ViZW5kZWRpdGluZy1oYXNiZW5kcG9pbnRzJyk7XHJcbiAgICAgICAgZWRnZS5kYXRhKCdjeWVkZ2ViZW5kZWRpdGluZ0Rpc3RhbmNlcycsIFtdKTtcclxuICAgICAgICBlZGdlLmRhdGEoJ2N5ZWRnZWJlbmRlZGl0aW5nV2VpZ2h0cycsIFtdKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBlZGdlLmRhdGEoJ2N5ZWRnZWJlbmRlZGl0aW5nRGlzdGFuY2VzJywgZGlzdGFuY2VzKTtcclxuICAgICAgZWRnZS5kYXRhKCdjeWVkZ2ViZW5kZWRpdGluZ1dlaWdodHMnLCB3ZWlnaHRzKTtcclxuICAgIH1cclxuICB9LFxyXG4gIGNhbGN1bGF0ZURpc3RhbmNlOiBmdW5jdGlvbihwdDEsIHB0Mikge1xyXG4gICAgdmFyIGRpZmZYID0gcHQxLnggLSBwdDIueDtcclxuICAgIHZhciBkaWZmWSA9IHB0MS55IC0gcHQyLnk7XHJcbiAgICBcclxuICAgIHZhciBkaXN0ID0gTWF0aC5zcXJ0KCBNYXRoLnBvdyggZGlmZlgsIDIgKSArIE1hdGgucG93KCBkaWZmWSwgMiApICk7XHJcbiAgICByZXR1cm4gZGlzdDtcclxuICB9LFxyXG4gIC8qKiAoTGVzcyB0aGFuIG9yIGVxdWFsIHRvKSBhbmQgKGdyZWF0ZXIgdGhlbiBlcXVhbCB0bykgY29tcGFyaXNvbnMgd2l0aCBmbG9hdGluZyBwb2ludCBudW1iZXJzICovXHJcbiAgY29tcGFyZVdpdGhQcmVjaXNpb246IGZ1bmN0aW9uIChuMSwgbjIsIGlzTGVzc1RoZW5PckVxdWFsID0gZmFsc2UsIHByZWNpc2lvbiA9IDAuMDEpIHtcclxuICAgIGNvbnN0IGRpZmYgPSBuMSAtIG4yO1xyXG4gICAgaWYgKE1hdGguYWJzKGRpZmYpIDw9IHByZWNpc2lvbikge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmIChpc0xlc3NUaGVuT3JFcXVhbCkge1xyXG4gICAgICByZXR1cm4gbjEgPCBuMjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBuMSA+IG4yO1xyXG4gICAgfVxyXG4gIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gYmVuZFBvaW50VXRpbGl0aWVzO1xyXG4iLCJ2YXIgZGVib3VuY2UgPSAoZnVuY3Rpb24gKCkge1xyXG4gIC8qKlxyXG4gICAqIGxvZGFzaCAzLjEuMSAoQ3VzdG9tIEJ1aWxkKSA8aHR0cHM6Ly9sb2Rhc2guY29tLz5cclxuICAgKiBCdWlsZDogYGxvZGFzaCBtb2Rlcm4gbW9kdWxhcml6ZSBleHBvcnRzPVwibnBtXCIgLW8gLi9gXHJcbiAgICogQ29weXJpZ2h0IDIwMTItMjAxNSBUaGUgRG9qbyBGb3VuZGF0aW9uIDxodHRwOi8vZG9qb2ZvdW5kYXRpb24ub3JnLz5cclxuICAgKiBCYXNlZCBvbiBVbmRlcnNjb3JlLmpzIDEuOC4zIDxodHRwOi8vdW5kZXJzY29yZWpzLm9yZy9MSUNFTlNFPlxyXG4gICAqIENvcHlyaWdodCAyMDA5LTIwMTUgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcclxuICAgKiBBdmFpbGFibGUgdW5kZXIgTUlUIGxpY2Vuc2UgPGh0dHBzOi8vbG9kYXNoLmNvbS9saWNlbnNlPlxyXG4gICAqL1xyXG4gIC8qKiBVc2VkIGFzIHRoZSBgVHlwZUVycm9yYCBtZXNzYWdlIGZvciBcIkZ1bmN0aW9uc1wiIG1ldGhvZHMuICovXHJcbiAgdmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcclxuXHJcbiAgLyogTmF0aXZlIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cclxuICB2YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXgsXHJcbiAgICAgICAgICBuYXRpdmVOb3cgPSBEYXRlLm5vdztcclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0aGF0IGhhdmUgZWxhcHNlZCBzaW5jZSB0aGUgVW5peCBlcG9jaFxyXG4gICAqICgxIEphbnVhcnkgMTk3MCAwMDowMDowMCBVVEMpLlxyXG4gICAqXHJcbiAgICogQHN0YXRpY1xyXG4gICAqIEBtZW1iZXJPZiBfXHJcbiAgICogQGNhdGVnb3J5IERhdGVcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqXHJcbiAgICogXy5kZWZlcihmdW5jdGlvbihzdGFtcCkge1xyXG4gICAqICAgY29uc29sZS5sb2coXy5ub3coKSAtIHN0YW1wKTtcclxuICAgKiB9LCBfLm5vdygpKTtcclxuICAgKiAvLyA9PiBsb2dzIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGl0IHRvb2sgZm9yIHRoZSBkZWZlcnJlZCBmdW5jdGlvbiB0byBiZSBpbnZva2VkXHJcbiAgICovXHJcbiAgdmFyIG5vdyA9IG5hdGl2ZU5vdyB8fCBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhIGRlYm91bmNlZCBmdW5jdGlvbiB0aGF0IGRlbGF5cyBpbnZva2luZyBgZnVuY2AgdW50aWwgYWZ0ZXIgYHdhaXRgXHJcbiAgICogbWlsbGlzZWNvbmRzIGhhdmUgZWxhcHNlZCBzaW5jZSB0aGUgbGFzdCB0aW1lIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gd2FzXHJcbiAgICogaW52b2tlZC4gVGhlIGRlYm91bmNlZCBmdW5jdGlvbiBjb21lcyB3aXRoIGEgYGNhbmNlbGAgbWV0aG9kIHRvIGNhbmNlbFxyXG4gICAqIGRlbGF5ZWQgaW52b2NhdGlvbnMuIFByb3ZpZGUgYW4gb3B0aW9ucyBvYmplY3QgdG8gaW5kaWNhdGUgdGhhdCBgZnVuY2BcclxuICAgKiBzaG91bGQgYmUgaW52b2tlZCBvbiB0aGUgbGVhZGluZyBhbmQvb3IgdHJhaWxpbmcgZWRnZSBvZiB0aGUgYHdhaXRgIHRpbWVvdXQuXHJcbiAgICogU3Vic2VxdWVudCBjYWxscyB0byB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBsYXN0XHJcbiAgICogYGZ1bmNgIGludm9jYXRpb24uXHJcbiAgICpcclxuICAgKiAqKk5vdGU6KiogSWYgYGxlYWRpbmdgIGFuZCBgdHJhaWxpbmdgIG9wdGlvbnMgYXJlIGB0cnVlYCwgYGZ1bmNgIGlzIGludm9rZWRcclxuICAgKiBvbiB0aGUgdHJhaWxpbmcgZWRnZSBvZiB0aGUgdGltZW91dCBvbmx5IGlmIHRoZSB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uIGlzXHJcbiAgICogaW52b2tlZCBtb3JlIHRoYW4gb25jZSBkdXJpbmcgdGhlIGB3YWl0YCB0aW1lb3V0LlxyXG4gICAqXHJcbiAgICogU2VlIFtEYXZpZCBDb3JiYWNobydzIGFydGljbGVdKGh0dHA6Ly9kcnVwYWxtb3Rpb24uY29tL2FydGljbGUvZGVib3VuY2UtYW5kLXRocm90dGxlLXZpc3VhbC1leHBsYW5hdGlvbilcclxuICAgKiBmb3IgZGV0YWlscyBvdmVyIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGBfLmRlYm91bmNlYCBhbmQgYF8udGhyb3R0bGVgLlxyXG4gICAqXHJcbiAgICogQHN0YXRpY1xyXG4gICAqIEBtZW1iZXJPZiBfXHJcbiAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gZGVib3VuY2UuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFt3YWl0PTBdIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIGRlbGF5LlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gVGhlIG9wdGlvbnMgb2JqZWN0LlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubGVhZGluZz1mYWxzZV0gU3BlY2lmeSBpbnZva2luZyBvbiB0aGUgbGVhZGluZ1xyXG4gICAqICBlZGdlIG9mIHRoZSB0aW1lb3V0LlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhXYWl0XSBUaGUgbWF4aW11bSB0aW1lIGBmdW5jYCBpcyBhbGxvd2VkIHRvIGJlXHJcbiAgICogIGRlbGF5ZWQgYmVmb3JlIGl0J3MgaW52b2tlZC5cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnRyYWlsaW5nPXRydWVdIFNwZWNpZnkgaW52b2tpbmcgb24gdGhlIHRyYWlsaW5nXHJcbiAgICogIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXHJcbiAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZGVib3VuY2VkIGZ1bmN0aW9uLlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICpcclxuICAgKiAvLyBhdm9pZCBjb3N0bHkgY2FsY3VsYXRpb25zIHdoaWxlIHRoZSB3aW5kb3cgc2l6ZSBpcyBpbiBmbHV4XHJcbiAgICogalF1ZXJ5KHdpbmRvdykub24oJ3Jlc2l6ZScsIF8uZGVib3VuY2UoY2FsY3VsYXRlTGF5b3V0LCAxNTApKTtcclxuICAgKlxyXG4gICAqIC8vIGludm9rZSBgc2VuZE1haWxgIHdoZW4gdGhlIGNsaWNrIGV2ZW50IGlzIGZpcmVkLCBkZWJvdW5jaW5nIHN1YnNlcXVlbnQgY2FsbHNcclxuICAgKiBqUXVlcnkoJyNwb3N0Ym94Jykub24oJ2NsaWNrJywgXy5kZWJvdW5jZShzZW5kTWFpbCwgMzAwLCB7XHJcbiAgICogICAnbGVhZGluZyc6IHRydWUsXHJcbiAgICogICAndHJhaWxpbmcnOiBmYWxzZVxyXG4gICAqIH0pKTtcclxuICAgKlxyXG4gICAqIC8vIGVuc3VyZSBgYmF0Y2hMb2dgIGlzIGludm9rZWQgb25jZSBhZnRlciAxIHNlY29uZCBvZiBkZWJvdW5jZWQgY2FsbHNcclxuICAgKiB2YXIgc291cmNlID0gbmV3IEV2ZW50U291cmNlKCcvc3RyZWFtJyk7XHJcbiAgICogalF1ZXJ5KHNvdXJjZSkub24oJ21lc3NhZ2UnLCBfLmRlYm91bmNlKGJhdGNoTG9nLCAyNTAsIHtcclxuICAgKiAgICdtYXhXYWl0JzogMTAwMFxyXG4gICAqIH0pKTtcclxuICAgKlxyXG4gICAqIC8vIGNhbmNlbCBhIGRlYm91bmNlZCBjYWxsXHJcbiAgICogdmFyIHRvZG9DaGFuZ2VzID0gXy5kZWJvdW5jZShiYXRjaExvZywgMTAwMCk7XHJcbiAgICogT2JqZWN0Lm9ic2VydmUobW9kZWxzLnRvZG8sIHRvZG9DaGFuZ2VzKTtcclxuICAgKlxyXG4gICAqIE9iamVjdC5vYnNlcnZlKG1vZGVscywgZnVuY3Rpb24oY2hhbmdlcykge1xyXG4gICAqICAgaWYgKF8uZmluZChjaGFuZ2VzLCB7ICd1c2VyJzogJ3RvZG8nLCAndHlwZSc6ICdkZWxldGUnfSkpIHtcclxuICAgKiAgICAgdG9kb0NoYW5nZXMuY2FuY2VsKCk7XHJcbiAgICogICB9XHJcbiAgICogfSwgWydkZWxldGUnXSk7XHJcbiAgICpcclxuICAgKiAvLyAuLi5hdCBzb21lIHBvaW50IGBtb2RlbHMudG9kb2AgaXMgY2hhbmdlZFxyXG4gICAqIG1vZGVscy50b2RvLmNvbXBsZXRlZCA9IHRydWU7XHJcbiAgICpcclxuICAgKiAvLyAuLi5iZWZvcmUgMSBzZWNvbmQgaGFzIHBhc3NlZCBgbW9kZWxzLnRvZG9gIGlzIGRlbGV0ZWRcclxuICAgKiAvLyB3aGljaCBjYW5jZWxzIHRoZSBkZWJvdW5jZWQgYHRvZG9DaGFuZ2VzYCBjYWxsXHJcbiAgICogZGVsZXRlIG1vZGVscy50b2RvO1xyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGRlYm91bmNlKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHtcclxuICAgIHZhciBhcmdzLFxyXG4gICAgICAgICAgICBtYXhUaW1lb3V0SWQsXHJcbiAgICAgICAgICAgIHJlc3VsdCxcclxuICAgICAgICAgICAgc3RhbXAsXHJcbiAgICAgICAgICAgIHRoaXNBcmcsXHJcbiAgICAgICAgICAgIHRpbWVvdXRJZCxcclxuICAgICAgICAgICAgdHJhaWxpbmdDYWxsLFxyXG4gICAgICAgICAgICBsYXN0Q2FsbGVkID0gMCxcclxuICAgICAgICAgICAgbWF4V2FpdCA9IGZhbHNlLFxyXG4gICAgICAgICAgICB0cmFpbGluZyA9IHRydWU7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcclxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xyXG4gICAgfVxyXG4gICAgd2FpdCA9IHdhaXQgPCAwID8gMCA6ICgrd2FpdCB8fCAwKTtcclxuICAgIGlmIChvcHRpb25zID09PSB0cnVlKSB7XHJcbiAgICAgIHZhciBsZWFkaW5nID0gdHJ1ZTtcclxuICAgICAgdHJhaWxpbmcgPSBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcclxuICAgICAgbGVhZGluZyA9ICEhb3B0aW9ucy5sZWFkaW5nO1xyXG4gICAgICBtYXhXYWl0ID0gJ21heFdhaXQnIGluIG9wdGlvbnMgJiYgbmF0aXZlTWF4KCtvcHRpb25zLm1heFdhaXQgfHwgMCwgd2FpdCk7XHJcbiAgICAgIHRyYWlsaW5nID0gJ3RyYWlsaW5nJyBpbiBvcHRpb25zID8gISFvcHRpb25zLnRyYWlsaW5nIDogdHJhaWxpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gY2FuY2VsKCkge1xyXG4gICAgICBpZiAodGltZW91dElkKSB7XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG1heFRpbWVvdXRJZCkge1xyXG4gICAgICAgIGNsZWFyVGltZW91dChtYXhUaW1lb3V0SWQpO1xyXG4gICAgICB9XHJcbiAgICAgIGxhc3RDYWxsZWQgPSAwO1xyXG4gICAgICBtYXhUaW1lb3V0SWQgPSB0aW1lb3V0SWQgPSB0cmFpbGluZ0NhbGwgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gY29tcGxldGUoaXNDYWxsZWQsIGlkKSB7XHJcbiAgICAgIGlmIChpZCkge1xyXG4gICAgICAgIGNsZWFyVGltZW91dChpZCk7XHJcbiAgICAgIH1cclxuICAgICAgbWF4VGltZW91dElkID0gdGltZW91dElkID0gdHJhaWxpbmdDYWxsID0gdW5kZWZpbmVkO1xyXG4gICAgICBpZiAoaXNDYWxsZWQpIHtcclxuICAgICAgICBsYXN0Q2FsbGVkID0gbm93KCk7XHJcbiAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcclxuICAgICAgICBpZiAoIXRpbWVvdXRJZCAmJiAhbWF4VGltZW91dElkKSB7XHJcbiAgICAgICAgICBhcmdzID0gdGhpc0FyZyA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBkZWxheWVkKCkge1xyXG4gICAgICB2YXIgcmVtYWluaW5nID0gd2FpdCAtIChub3coKSAtIHN0YW1wKTtcclxuICAgICAgaWYgKHJlbWFpbmluZyA8PSAwIHx8IHJlbWFpbmluZyA+IHdhaXQpIHtcclxuICAgICAgICBjb21wbGV0ZSh0cmFpbGluZ0NhbGwsIG1heFRpbWVvdXRJZCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGltZW91dElkID0gc2V0VGltZW91dChkZWxheWVkLCByZW1haW5pbmcpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gbWF4RGVsYXllZCgpIHtcclxuICAgICAgY29tcGxldGUodHJhaWxpbmcsIHRpbWVvdXRJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZGVib3VuY2VkKCkge1xyXG4gICAgICBhcmdzID0gYXJndW1lbnRzO1xyXG4gICAgICBzdGFtcCA9IG5vdygpO1xyXG4gICAgICB0aGlzQXJnID0gdGhpcztcclxuICAgICAgdHJhaWxpbmdDYWxsID0gdHJhaWxpbmcgJiYgKHRpbWVvdXRJZCB8fCAhbGVhZGluZyk7XHJcblxyXG4gICAgICBpZiAobWF4V2FpdCA9PT0gZmFsc2UpIHtcclxuICAgICAgICB2YXIgbGVhZGluZ0NhbGwgPSBsZWFkaW5nICYmICF0aW1lb3V0SWQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKCFtYXhUaW1lb3V0SWQgJiYgIWxlYWRpbmcpIHtcclxuICAgICAgICAgIGxhc3RDYWxsZWQgPSBzdGFtcDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJlbWFpbmluZyA9IG1heFdhaXQgLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKSxcclxuICAgICAgICAgICAgICAgIGlzQ2FsbGVkID0gcmVtYWluaW5nIDw9IDAgfHwgcmVtYWluaW5nID4gbWF4V2FpdDtcclxuXHJcbiAgICAgICAgaWYgKGlzQ2FsbGVkKSB7XHJcbiAgICAgICAgICBpZiAobWF4VGltZW91dElkKSB7XHJcbiAgICAgICAgICAgIG1heFRpbWVvdXRJZCA9IGNsZWFyVGltZW91dChtYXhUaW1lb3V0SWQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbGFzdENhbGxlZCA9IHN0YW1wO1xyXG4gICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoIW1heFRpbWVvdXRJZCkge1xyXG4gICAgICAgICAgbWF4VGltZW91dElkID0gc2V0VGltZW91dChtYXhEZWxheWVkLCByZW1haW5pbmcpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoaXNDYWxsZWQgJiYgdGltZW91dElkKSB7XHJcbiAgICAgICAgdGltZW91dElkID0gY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoIXRpbWVvdXRJZCAmJiB3YWl0ICE9PSBtYXhXYWl0KSB7XHJcbiAgICAgICAgdGltZW91dElkID0gc2V0VGltZW91dChkZWxheWVkLCB3YWl0KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobGVhZGluZ0NhbGwpIHtcclxuICAgICAgICBpc0NhbGxlZCA9IHRydWU7XHJcbiAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaXNDYWxsZWQgJiYgIXRpbWVvdXRJZCAmJiAhbWF4VGltZW91dElkKSB7XHJcbiAgICAgICAgYXJncyA9IHRoaXNBcmcgPSB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBkZWJvdW5jZWQuY2FuY2VsID0gY2FuY2VsO1xyXG4gICAgcmV0dXJuIGRlYm91bmNlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZSBbbGFuZ3VhZ2UgdHlwZV0oaHR0cHM6Ly9lczUuZ2l0aHViLmlvLyN4OCkgb2YgYE9iamVjdGAuXHJcbiAgICogKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXHJcbiAgICpcclxuICAgKiBAc3RhdGljXHJcbiAgICogQG1lbWJlck9mIF9cclxuICAgKiBAY2F0ZWdvcnkgTGFuZ1xyXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICpcclxuICAgKiBfLmlzT2JqZWN0KHt9KTtcclxuICAgKiAvLyA9PiB0cnVlXHJcbiAgICpcclxuICAgKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XHJcbiAgICogLy8gPT4gdHJ1ZVxyXG4gICAqXHJcbiAgICogXy5pc09iamVjdCgxKTtcclxuICAgKiAvLyA9PiBmYWxzZVxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XHJcbiAgICAvLyBBdm9pZCBhIFY4IEpJVCBidWcgaW4gQ2hyb21lIDE5LTIwLlxyXG4gICAgLy8gU2VlIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0yMjkxIGZvciBtb3JlIGRldGFpbHMuXHJcbiAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcclxuICAgIHJldHVybiAhIXZhbHVlICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZGVib3VuY2U7XHJcblxyXG59KSgpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBkZWJvdW5jZTsiLCI7KGZ1bmN0aW9uKCl7ICd1c2Ugc3RyaWN0JztcclxuICBcclxuICB2YXIgYmVuZFBvaW50VXRpbGl0aWVzID0gcmVxdWlyZSgnLi9iZW5kUG9pbnRVdGlsaXRpZXMnKTtcclxuICB2YXIgZGVib3VuY2UgPSByZXF1aXJlKFwiLi9kZWJvdW5jZVwiKTtcclxuICBcclxuICAvLyByZWdpc3RlcnMgdGhlIGV4dGVuc2lvbiBvbiBhIGN5dG9zY2FwZSBsaWIgcmVmXHJcbiAgdmFyIHJlZ2lzdGVyID0gZnVuY3Rpb24oIGN5dG9zY2FwZSwgJCApe1xyXG4gICAgdmFyIHVpVXRpbGl0aWVzID0gcmVxdWlyZSgnLi9VSVV0aWxpdGllcycpO1xyXG4gICAgXHJcbiAgICBpZiggIWN5dG9zY2FwZSApeyByZXR1cm47IH0gLy8gY2FuJ3QgcmVnaXN0ZXIgaWYgY3l0b3NjYXBlIHVuc3BlY2lmaWVkXHJcblxyXG4gICAgdmFyIGRlZmF1bHRzID0ge1xyXG4gICAgICAvLyB0aGlzIGZ1bmN0aW9uIHNwZWNpZmllcyB0aGUgcG9pdGlvbnMgb2YgYmVuZCBwb2ludHNcclxuICAgICAgYmVuZFBvc2l0aW9uc0Z1bmN0aW9uOiBmdW5jdGlvbihlbGUpIHtcclxuICAgICAgICByZXR1cm4gZWxlLmRhdGEoJ2JlbmRQb2ludFBvc2l0aW9ucycpO1xyXG4gICAgICB9LFxyXG4gICAgICAvLyB3aGV0aGVyIHRvIGluaXRpbGl6ZSBiZW5kIHBvaW50cyBvbiBjcmVhdGlvbiBvZiB0aGlzIGV4dGVuc2lvbiBhdXRvbWF0aWNhbGx5XHJcbiAgICAgIGluaXRCZW5kUG9pbnRzQXV0b21hdGljYWxseTogdHJ1ZSxcclxuICAgICAgLy8gdGhlIGNsYXNzZXMgb2YgdGhvc2UgZWRnZXMgdGhhdCBzaG91bGQgYmUgaWdub3JlZFxyXG4gICAgICBpZ25vcmVkQ2xhc3NlczogW10sXHJcbiAgICAgIC8vIHdoZXRoZXIgdGhlIGJlbmQgZWRpdGluZyBvcGVyYXRpb25zIGFyZSB1bmRvYWJsZSAocmVxdWlyZXMgY3l0b3NjYXBlLXVuZG8tcmVkby5qcylcclxuICAgICAgdW5kb2FibGU6IGZhbHNlLFxyXG4gICAgICAvLyB0aGUgc2l6ZSBvZiBiZW5kIHNoYXBlIGlzIG9idGFpbmVkIGJ5IG11bHRpcGxpbmcgd2lkdGggb2YgZWRnZSB3aXRoIHRoaXMgcGFyYW1ldGVyXHJcbiAgICAgIGJlbmRTaGFwZVNpemVGYWN0b3I6IDMsXHJcbiAgICAgIC8vIHotaW5kZXggdmFsdWUgb2YgdGhlIGNhbnZhcyBpbiB3aGljaCBiZW5kIHBvaW50cyBhcmUgZHJhd25cclxuICAgICAgekluZGV4OiA5OTksICAgICAgXHJcbiAgICAgIC8vIHdoZXRoZXIgdG8gc3RhcnQgdGhlIHBsdWdpbiBpbiB0aGUgZW5hYmxlZCBzdGF0ZVxyXG4gICAgICBlbmFibGVkOiB0cnVlLFxyXG4gICAgICAvL0FuIG9wdGlvbiB0aGF0IGNvbnRyb2xzIHRoZSBkaXN0YW5jZSB3aXRoaW4gd2hpY2ggYSBiZW5kIHBvaW50IGlzIGNvbnNpZGVyZWQgXCJuZWFyXCIgdGhlIGxpbmUgc2VnbWVudCBiZXR3ZWVuIGl0cyB0d28gbmVpZ2hib3JzIGFuZCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZFxyXG4gICAgICBiZW5kUmVtb3ZhbFNlbnNpdGl2aXR5IDogOCxcclxuICAgICAgLy8gdGl0bGUgb2YgYWRkIGJlbmQgcG9pbnQgbWVudSBpdGVtIChVc2VyIG1heSBuZWVkIHRvIGFkanVzdCB3aWR0aCBvZiBtZW51IGl0ZW1zIGFjY29yZGluZyB0byBsZW5ndGggb2YgdGhpcyBvcHRpb24pXHJcbiAgICAgIGFkZEJlbmRNZW51SXRlbVRpdGxlOiBcIkFkZCBCZW5kIFBvaW50XCIsXHJcbiAgICAgIC8vIHRpdGxlIG9mIHJlbW92ZSBiZW5kIHBvaW50IG1lbnUgaXRlbSAoVXNlciBtYXkgbmVlZCB0byBhZGp1c3Qgd2lkdGggb2YgbWVudSBpdGVtcyBhY2NvcmRpbmcgdG8gbGVuZ3RoIG9mIHRoaXMgb3B0aW9uKVxyXG4gICAgICByZW1vdmVCZW5kTWVudUl0ZW1UaXRsZTogXCJSZW1vdmUgQmVuZCBQb2ludFwiLFxyXG4gICAgICAvLyB3aGV0aGVyIHRoZSBiZW5kIHBvaW50IGNhbiBiZSBtb3ZlZCBieSBhcnJvd3NcclxuICAgICAgbW92ZVNlbGVjdGVkQmVuZFBvaW50c09uS2V5RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIFxyXG4gICAgdmFyIG9wdGlvbnM7XHJcbiAgICB2YXIgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICAgIFxyXG4gICAgLy8gTWVyZ2UgZGVmYXVsdCBvcHRpb25zIHdpdGggdGhlIG9uZXMgY29taW5nIGZyb20gcGFyYW1ldGVyXHJcbiAgICBmdW5jdGlvbiBleHRlbmQoZGVmYXVsdHMsIG9wdGlvbnMpIHtcclxuICAgICAgdmFyIG9iaiA9IHt9O1xyXG5cclxuICAgICAgZm9yICh2YXIgaSBpbiBkZWZhdWx0cykge1xyXG4gICAgICAgIG9ialtpXSA9IGRlZmF1bHRzW2ldO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmb3IgKHZhciBpIGluIG9wdGlvbnMpIHtcclxuICAgICAgICBpZihpID09IFwiYmVuZFJlbW92YWxTZW5zaXRpdml0eVwiKXtcclxuICAgICAgICAgIHZhciB2YWx1ZSA9IG9wdGlvbnNbaV07XHJcbiAgICAgICAgICAgaWYoIWlzTmFOKHZhbHVlKSlcclxuICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgaWYodmFsdWUgPj0gMCAmJiB2YWx1ZSA8PSAyMCl7XHJcbiAgICAgICAgICAgICAgICBvYmpbaV0gPSBvcHRpb25zW2ldO1xyXG4gICAgICAgICAgICAgIH1lbHNlIGlmKHZhbHVlIDwgMCl7XHJcbiAgICAgICAgICAgICAgICBvYmpbaV0gPSAwXHJcbiAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBvYmpbaV0gPSAyMFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICB9XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICBvYmpbaV0gPSBvcHRpb25zW2ldO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9O1xyXG4gICAgXHJcbiAgICBjeXRvc2NhcGUoICdjb3JlJywgJ2VkZ2VFZGl0aW5nJywgZnVuY3Rpb24ob3B0cyl7XHJcbiAgICAgIHZhciBjeSA9IHRoaXM7XHJcbiAgICAgIFxyXG4gICAgICBpZiggb3B0cyA9PT0gJ2luaXRpYWxpemVkJyApIHtcclxuICAgICAgICByZXR1cm4gaW5pdGlhbGl6ZWQ7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIGlmKCBvcHRzICE9PSAnZ2V0JyApIHtcclxuICAgICAgICAvLyBtZXJnZSB0aGUgb3B0aW9ucyB3aXRoIGRlZmF1bHQgb25lc1xyXG4gICAgICAgIG9wdGlvbnMgPSBleHRlbmQoZGVmYXVsdHMsIG9wdHMpO1xyXG4gICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy8gZGVmaW5lIGVkZ2ViZW5kZWRpdGluZy1oYXNiZW5kcG9pbnRzIGNzcyBjbGFzc1xyXG4gICAgICAgIGN5LnN0eWxlKCkuc2VsZWN0b3IoJy5lZGdlYmVuZGVkaXRpbmctaGFzYmVuZHBvaW50cycpLmNzcyh7XHJcbiAgICAgICAgICAnY3VydmUtc3R5bGUnOiAnc2VnbWVudHMnLFxyXG4gICAgICAgICAgJ3NlZ21lbnQtZGlzdGFuY2VzJzogZnVuY3Rpb24gKGVsZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gYmVuZFBvaW50VXRpbGl0aWVzLmdldFNlZ21lbnREaXN0YW5jZXNTdHJpbmcoZWxlKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICAnc2VnbWVudC13ZWlnaHRzJzogZnVuY3Rpb24gKGVsZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gYmVuZFBvaW50VXRpbGl0aWVzLmdldFNlZ21lbnRXZWlnaHRzU3RyaW5nKGVsZSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgJ2VkZ2UtZGlzdGFuY2VzJzogJ25vZGUtcG9zaXRpb24nXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGJlbmRQb2ludFV0aWxpdGllcy5zZXRJZ25vcmVkQ2xhc3NlcyhvcHRpb25zLmlnbm9yZWRDbGFzc2VzKTtcclxuXHJcbiAgICAgICAgLy8gaW5pdCBiZW5kIHBvc2l0aW9ucyBjb25kaXRpb25hbGx5XHJcbiAgICAgICAgaWYgKG9wdGlvbnMuaW5pdEJlbmRQb2ludHNBdXRvbWF0aWNhbGx5KSB7XHJcbiAgICAgICAgICBiZW5kUG9pbnRVdGlsaXRpZXMuaW5pdEJlbmRQb2ludHMob3B0aW9ucy5iZW5kUG9zaXRpb25zRnVuY3Rpb24sIGN5LmVkZ2VzKCksIG9wdGlvbnMuaWdub3JlZENsYXNzZXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYob3B0aW9ucy5lbmFibGVkKVxyXG4gICAgICAgICAgdWlVdGlsaXRpZXMob3B0aW9ucywgY3kpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHVpVXRpbGl0aWVzKFwidW5iaW5kXCIsIGN5KTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgdmFyIGluc3RhbmNlID0gaW5pdGlhbGl6ZWQgPyB7XHJcbiAgICAgICAgLypcclxuICAgICAgICAqIGdldCBzZWdtZW50IHBvaW50cyBvZiB0aGUgZ2l2ZW4gZWRnZSBpbiBhbiBhcnJheSBBLFxyXG4gICAgICAgICogQVsyICogaV0gaXMgdGhlIHggY29vcmRpbmF0ZSBhbmQgQVsyICogaSArIDFdIGlzIHRoZSB5IGNvb3JkaW5hdGVcclxuICAgICAgICAqIG9mIHRoZSBpdGggYmVuZCBwb2ludC4gKFJldHVybnMgdW5kZWZpbmVkIGlmIHRoZSBjdXJ2ZSBzdHlsZSBpcyBub3Qgc2VnbWVudHMpXHJcbiAgICAgICAgKi9cclxuICAgICAgICBnZXRTZWdtZW50UG9pbnRzOiBmdW5jdGlvbihlbGUpIHtcclxuICAgICAgICAgIHJldHVybiBiZW5kUG9pbnRVdGlsaXRpZXMuZ2V0U2VnbWVudFBvaW50cyhlbGUpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8gSW5pdGlsaXplIGJlbmQgcG9pbnRzIGZvciB0aGUgZ2l2ZW4gZWRnZXMgdXNpbmcgJ29wdGlvbnMuYmVuZFBvc2l0aW9uc0Z1bmN0aW9uJ1xyXG4gICAgICAgIGluaXRCZW5kUG9pbnRzOiBmdW5jdGlvbihlbGVzKSB7XHJcbiAgICAgICAgICBiZW5kUG9pbnRVdGlsaXRpZXMuaW5pdEJlbmRQb2ludHMob3B0aW9ucy5iZW5kUG9zaXRpb25zRnVuY3Rpb24sIGVsZXMpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGVsZXRlU2VsZWN0ZWRCZW5kUG9pbnQ6IGZ1bmN0aW9uKGVsZSwgaW5kZXgpIHtcclxuICAgICAgICAgIGJlbmRQb2ludFV0aWxpdGllcy5yZW1vdmVCZW5kUG9pbnQoZWxlLGluZGV4KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gOiB1bmRlZmluZWQ7XHJcblxyXG4gICAgICByZXR1cm4gaW5zdGFuY2U7IC8vIGNoYWluYWJpbGl0eVxyXG4gICAgfSApO1xyXG5cclxuICB9O1xyXG5cclxuICBpZiggdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMgKXsgLy8gZXhwb3NlIGFzIGEgY29tbW9uanMgbW9kdWxlXHJcbiAgICBtb2R1bGUuZXhwb3J0cyA9IHJlZ2lzdGVyO1xyXG4gIH1cclxuXHJcbiAgaWYoIHR5cGVvZiBkZWZpbmUgIT09ICd1bmRlZmluZWQnICYmIGRlZmluZS5hbWQgKXsgLy8gZXhwb3NlIGFzIGFuIGFtZC9yZXF1aXJlanMgbW9kdWxlXHJcbiAgICBkZWZpbmUoJ2N5dG9zY2FwZS1lZGdlLWVkaXRpbmcnLCBmdW5jdGlvbigpe1xyXG4gICAgICByZXR1cm4gcmVnaXN0ZXI7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGlmKCB0eXBlb2YgY3l0b3NjYXBlICE9PSAndW5kZWZpbmVkJyAmJiAkICl7IC8vIGV4cG9zZSB0byBnbG9iYWwgY3l0b3NjYXBlIChpLmUuIHdpbmRvdy5jeXRvc2NhcGUpXHJcbiAgICByZWdpc3RlciggY3l0b3NjYXBlLCAkICk7XHJcbiAgfVxyXG5cclxufSkoKTtcclxuIiwidmFyIHJlY29ubmVjdGlvblV0aWxpdGllcyA9IHtcclxuXHJcbiAgICAvLyBjcmVhdGVzIGFuZCByZXR1cm5zIGEgZHVtbXkgbm9kZSB3aGljaCBpcyBjb25uZWN0ZWQgdG8gdGhlIGRpc2Nvbm5lY3RlZCBlZGdlXHJcbiAgICBkaXNjb25uZWN0RWRnZTogZnVuY3Rpb24gKGVkZ2UsIGN5LCBwb3NpdGlvbiwgZGlzY29ubmVjdGVkRW5kKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdmFyIGR1bW15Tm9kZSA9IHtcclxuICAgICAgICAgICAgZGF0YTogeyBcclxuICAgICAgICAgICAgICBpZDogJ253dF9yZWNvbm5lY3RFZGdlX2R1bW15JyxcclxuICAgICAgICAgICAgICBwb3J0czogW10sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgd2lkdGg6IDEsXHJcbiAgICAgICAgICAgICAgaGVpZ2h0OiAxLFxyXG4gICAgICAgICAgICAgICd2aXNpYmlsaXR5JzogJ2hpZGRlbidcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcmVuZGVyZWRQb3NpdGlvbjogcG9zaXRpb25cclxuICAgICAgICB9O1xyXG4gICAgICAgIGN5LmFkZChkdW1teU5vZGUpO1xyXG5cclxuICAgICAgICB2YXIgbG9jID0gKGRpc2Nvbm5lY3RlZEVuZCA9PT0gJ3NvdXJjZScpID8gXHJcbiAgICAgICAgICAgIHtzb3VyY2U6IGR1bW15Tm9kZS5kYXRhLmlkfSA6IFxyXG4gICAgICAgICAgICB7dGFyZ2V0OiBkdW1teU5vZGUuZGF0YS5pZH07XHJcblxyXG4gICAgICAgIGVkZ2UgPSBlZGdlLm1vdmUobG9jKVswXTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZHVtbXlOb2RlOiBjeS5ub2RlcyhcIiNcIiArIGR1bW15Tm9kZS5kYXRhLmlkKVswXSxcclxuICAgICAgICAgICAgZWRnZTogZWRnZVxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIGNvbm5lY3RFZGdlOiBmdW5jdGlvbiAoZWRnZSwgbm9kZSwgbG9jYXRpb24pIHtcclxuICAgICAgICBpZighZWRnZS5pc0VkZ2UoKSB8fCAhbm9kZS5pc05vZGUoKSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICB2YXIgbG9jID0ge307XHJcbiAgICAgICAgaWYobG9jYXRpb24gPT09ICdzb3VyY2UnKVxyXG4gICAgICAgICAgICBsb2Muc291cmNlID0gbm9kZS5pZCgpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGVsc2UgaWYobG9jYXRpb24gPT09ICd0YXJnZXQnKVxyXG4gICAgICAgICAgICBsb2MudGFyZ2V0ID0gbm9kZS5pZCgpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICByZXR1cm4gZWRnZS5tb3ZlKGxvYylbMF07XHJcbiAgICB9LFxyXG5cclxuICAgIGNvcHlFZGdlOiBmdW5jdGlvbiAob2xkRWRnZSwgbmV3RWRnZSkge1xyXG4gICAgICAgIHRoaXMuY29weUJlbmRQb2ludHMob2xkRWRnZSwgbmV3RWRnZSk7XHJcbiAgICAgICAgdGhpcy5jb3B5U3R5bGUob2xkRWRnZSwgbmV3RWRnZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIGNvcHlTdHlsZTogZnVuY3Rpb24gKG9sZEVkZ2UsIG5ld0VkZ2UpIHtcclxuICAgICAgICBpZihvbGRFZGdlICYmIG5ld0VkZ2Upe1xyXG4gICAgICAgICAgICBuZXdFZGdlLmRhdGEoJ2xpbmUtY29sb3InLCBvbGRFZGdlLmRhdGEoJ2xpbmUtY29sb3InKSk7XHJcbiAgICAgICAgICAgIG5ld0VkZ2UuZGF0YSgnd2lkdGgnLCBvbGRFZGdlLmRhdGEoJ3dpZHRoJykpO1xyXG4gICAgICAgICAgICBuZXdFZGdlLmRhdGEoJ2NhcmRpbmFsaXR5Jywgb2xkRWRnZS5kYXRhKCdjYXJkaW5hbGl0eScpKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGNvcHlCZW5kUG9pbnRzOiBmdW5jdGlvbiAob2xkRWRnZSwgbmV3RWRnZSkge1xyXG4gICAgICAgIGlmKG9sZEVkZ2UuaGFzQ2xhc3MoJ2VkZ2ViZW5kZWRpdGluZy1oYXNiZW5kcG9pbnRzJykpe1xyXG4gICAgICAgICAgICB2YXIgYnBEaXN0YW5jZXMgPSBvbGRFZGdlLmRhdGEoJ2N5ZWRnZWJlbmRlZGl0aW5nRGlzdGFuY2VzJyk7XHJcbiAgICAgICAgICAgIHZhciBicFdlaWdodHMgPSBvbGRFZGdlLmRhdGEoJ2N5ZWRnZWJlbmRlZGl0aW5nV2VpZ2h0cycpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgbmV3RWRnZS5kYXRhKCdjeWVkZ2ViZW5kZWRpdGluZ0Rpc3RhbmNlcycsIGJwRGlzdGFuY2VzKTtcclxuICAgICAgICAgICAgbmV3RWRnZS5kYXRhKCdjeWVkZ2ViZW5kZWRpdGluZ1dlaWdodHMnLCBicFdlaWdodHMpO1xyXG4gICAgICAgICAgICBuZXdFZGdlLmFkZENsYXNzKCdlZGdlYmVuZGVkaXRpbmctaGFzYmVuZHBvaW50cycpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbn07XHJcbiAgXHJcbm1vZHVsZS5leHBvcnRzID0gcmVjb25uZWN0aW9uVXRpbGl0aWVzO1xyXG4gICIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGN5LCBiZW5kUG9pbnRVdGlsaXRpZXMsIHBhcmFtcykge1xyXG4gIGlmIChjeS51bmRvUmVkbyA9PSBudWxsKVxyXG4gICAgcmV0dXJuO1xyXG5cclxuICB2YXIgdXIgPSBjeS51bmRvUmVkbyh7XHJcbiAgICBkZWZhdWx0QWN0aW9uczogZmFsc2UsXHJcbiAgICBpc0RlYnVnOiB0cnVlXHJcbiAgfSk7XHJcblxyXG4gIGZ1bmN0aW9uIGNoYW5nZUJlbmRQb2ludHMocGFyYW0pIHtcclxuICAgIHZhciBlZGdlID0gY3kuZ2V0RWxlbWVudEJ5SWQocGFyYW0uZWRnZS5pZCgpKTtcclxuICAgIHZhciByZXN1bHQgPSB7XHJcbiAgICAgIGVkZ2U6IGVkZ2UsXHJcbiAgICAgIHdlaWdodHM6IHBhcmFtLnNldCA/IGVkZ2UuZGF0YSgnY3llZGdlYmVuZGVkaXRpbmdXZWlnaHRzJykgOiBwYXJhbS53ZWlnaHRzLFxyXG4gICAgICBkaXN0YW5jZXM6IHBhcmFtLnNldCA/IGVkZ2UuZGF0YSgnY3llZGdlYmVuZGVkaXRpbmdEaXN0YW5jZXMnKSA6IHBhcmFtLmRpc3RhbmNlcyxcclxuICAgICAgc2V0OiB0cnVlLy9BcyB0aGUgcmVzdWx0IHdpbGwgbm90IGJlIHVzZWQgZm9yIHRoZSBmaXJzdCBmdW5jdGlvbiBjYWxsIHBhcmFtcyBzaG91bGQgYmUgdXNlZCB0byBzZXQgdGhlIGRhdGFcclxuICAgIH07XHJcblxyXG4gICAgdmFyIGhhc0JlbmQgPSBwYXJhbS53ZWlnaHRzICYmIHBhcmFtLndlaWdodHMubGVuZ3RoID4gMDtcclxuXHJcbiAgICAvL0NoZWNrIGlmIHdlIG5lZWQgdG8gc2V0IHRoZSB3ZWlnaHRzIGFuZCBkaXN0YW5jZXMgYnkgdGhlIHBhcmFtIHZhbHVlc1xyXG4gICAgaWYgKHBhcmFtLnNldCkge1xyXG4gICAgICBoYXNCZW5kID8gZWRnZS5kYXRhKCdjeWVkZ2ViZW5kZWRpdGluZ1dlaWdodHMnLCBwYXJhbS53ZWlnaHRzKSA6IGVkZ2UucmVtb3ZlRGF0YSgnY3llZGdlYmVuZGVkaXRpbmdXZWlnaHRzJyk7XHJcbiAgICAgIGhhc0JlbmQgPyBlZGdlLmRhdGEoJ2N5ZWRnZWJlbmRlZGl0aW5nRGlzdGFuY2VzJywgcGFyYW0uZGlzdGFuY2VzKSA6IGVkZ2UucmVtb3ZlRGF0YSgnY3llZGdlYmVuZGVkaXRpbmdEaXN0YW5jZXMnKTtcclxuXHJcbiAgICAgIC8vcmVmcmVzaCB0aGUgY3VydmUgc3R5bGUgYXMgdGhlIG51bWJlciBvZiBiZW5kIHBvaW50IHdvdWxkIGJlIGNoYW5nZWQgYnkgdGhlIHByZXZpb3VzIG9wZXJhdGlvblxyXG4gICAgICBpZiAoaGFzQmVuZCkge1xyXG4gICAgICAgIGVkZ2UuYWRkQ2xhc3MoJ2VkZ2ViZW5kZWRpdGluZy1oYXNiZW5kcG9pbnRzJyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgZWRnZS5yZW1vdmVDbGFzcygnZWRnZWJlbmRlZGl0aW5nLWhhc2JlbmRwb2ludHMnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBlZGdlLnRyaWdnZXIoJ2N5ZWRnZWJlbmRlZGl0aW5nLmNoYW5nZUJlbmRQb2ludHMnKTtcclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gbW92ZURvKGFyZykge1xyXG4gICAgICBpZiAoYXJnLmZpcnN0VGltZSkge1xyXG4gICAgICAgICAgZGVsZXRlIGFyZy5maXJzdFRpbWU7XHJcbiAgICAgICAgICByZXR1cm4gYXJnO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgZWRnZXMgPSBhcmcuZWRnZXM7XHJcbiAgICAgIHZhciBwb3NpdGlvbkRpZmYgPSBhcmcucG9zaXRpb25EaWZmO1xyXG4gICAgICB2YXIgcmVzdWx0ID0ge1xyXG4gICAgICAgICAgZWRnZXM6IGVkZ2VzLFxyXG4gICAgICAgICAgcG9zaXRpb25EaWZmOiB7XHJcbiAgICAgICAgICAgICAgeDogLXBvc2l0aW9uRGlmZi54LFxyXG4gICAgICAgICAgICAgIHk6IC1wb3NpdGlvbkRpZmYueVxyXG4gICAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgICBtb3ZlQmVuZFBvaW50c1VuZG9hYmxlKHBvc2l0aW9uRGlmZiwgZWRnZXMpO1xyXG5cclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIG1vdmVCZW5kUG9pbnRzVW5kb2FibGUocG9zaXRpb25EaWZmLCBlZGdlcykge1xyXG4gICAgICBlZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKCBlZGdlICl7XHJcbiAgICAgICAgICBlZGdlID0gY3kuZ2V0RWxlbWVudEJ5SWQocGFyYW0uZWRnZS5pZCgpKTtcclxuICAgICAgICAgIHZhciBwcmV2aW91c0JlbmRQb2ludHNQb3NpdGlvbiA9IGJlbmRQb2ludFV0aWxpdGllcy5nZXRTZWdtZW50UG9pbnRzKGVkZ2UpO1xyXG4gICAgICAgICAgdmFyIG5leHRCZW5kUG9pbnRzUG9zaXRpb24gPSBbXTtcclxuICAgICAgICAgIGlmIChwcmV2aW91c0JlbmRQb2ludHNQb3NpdGlvbiAhPSB1bmRlZmluZWQpXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgZm9yIChpPTA7IGk8cHJldmlvdXNCZW5kUG9pbnRzUG9zaXRpb24ubGVuZ3RoOyBpKz0yKVxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgbmV4dEJlbmRQb2ludHNQb3NpdGlvbi5wdXNoKHt4OiBwcmV2aW91c0JlbmRQb2ludHNQb3NpdGlvbltpXStwb3NpdGlvbkRpZmYueCwgeTogcHJldmlvdXNCZW5kUG9pbnRzUG9zaXRpb25baSsxXStwb3NpdGlvbkRpZmYueX0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlZGdlLmRhdGEoJ2JlbmRQb2ludFBvc2l0aW9ucycsbmV4dEJlbmRQb2ludHNQb3NpdGlvbik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgYmVuZFBvaW50VXRpbGl0aWVzLmluaXRCZW5kUG9pbnRzKHBhcmFtcy5iZW5kUG9zaXRpb25zRnVuY3Rpb24sIGVkZ2VzKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHJlY29ubmVjdEVkZ2UocGFyYW0pe1xyXG4gICAgdmFyIGVkZ2UgICAgICA9IHBhcmFtLmVkZ2U7XHJcbiAgICB2YXIgbG9jYXRpb24gID0gcGFyYW0ubG9jYXRpb247XHJcbiAgICB2YXIgb2xkTG9jICAgID0gcGFyYW0ub2xkTG9jO1xyXG5cclxuICAgIGVkZ2UgPSBlZGdlLm1vdmUobG9jYXRpb24pWzBdO1xyXG5cclxuICAgIHZhciByZXN1bHQgPSB7XHJcbiAgICAgIGVkZ2U6ICAgICBlZGdlLFxyXG4gICAgICBsb2NhdGlvbjogb2xkTG9jLFxyXG4gICAgICBvbGRMb2M6ICAgbG9jYXRpb25cclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiByZW1vdmVSZWNvbm5lY3RlZEVkZ2UocGFyYW0pe1xyXG4gICAgdmFyIG9sZEVkZ2UgPSBwYXJhbS5vbGRFZGdlO1xyXG4gICAgdmFyIHRtcCA9IGN5LmdldEVsZW1lbnRCeUlkKG9sZEVkZ2UuZGF0YSgnaWQnKSk7XHJcbiAgICBpZih0bXAgJiYgdG1wLmxlbmd0aCA+IDApXHJcbiAgICAgIG9sZEVkZ2UgPSB0bXA7XHJcblxyXG4gICAgdmFyIG5ld0VkZ2UgPSBwYXJhbS5uZXdFZGdlO1xyXG4gICAgdmFyIHRtcCA9IGN5LmdldEVsZW1lbnRCeUlkKG5ld0VkZ2UuZGF0YSgnaWQnKSk7XHJcbiAgICBpZih0bXAgJiYgdG1wLmxlbmd0aCA+IDApXHJcbiAgICAgIG5ld0VkZ2UgPSB0bXA7XHJcblxyXG4gICAgaWYob2xkRWRnZS5pbnNpZGUoKSl7XHJcbiAgICAgIG9sZEVkZ2UgPSBvbGRFZGdlLnJlbW92ZSgpWzBdO1xyXG4gICAgfSBcclxuICAgICAgXHJcbiAgICBpZihuZXdFZGdlLnJlbW92ZWQoKSl7XHJcbiAgICAgIG5ld0VkZ2UgPSBuZXdFZGdlLnJlc3RvcmUoKTtcclxuICAgICAgbmV3RWRnZS51bnNlbGVjdCgpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBvbGRFZGdlOiBuZXdFZGdlLFxyXG4gICAgICBuZXdFZGdlOiBvbGRFZGdlXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgdXIuYWN0aW9uKCdjaGFuZ2VCZW5kUG9pbnRzJywgY2hhbmdlQmVuZFBvaW50cywgY2hhbmdlQmVuZFBvaW50cyk7XHJcbiAgdXIuYWN0aW9uKCdtb3ZlQmVuZFBvaW50cycsIG1vdmVEbywgbW92ZURvKTtcclxuICB1ci5hY3Rpb24oJ3JlY29ubmVjdEVkZ2UnLCByZWNvbm5lY3RFZGdlLCByZWNvbm5lY3RFZGdlKTtcclxuICB1ci5hY3Rpb24oJ3JlbW92ZVJlY29ubmVjdGVkRWRnZScsIHJlbW92ZVJlY29ubmVjdGVkRWRnZSwgcmVtb3ZlUmVjb25uZWN0ZWRFZGdlKTtcclxufTtcclxuIl19\n","module.exports = require(\"cytoscape-cose-bilkent\");",";(function () {\n 'use strict';\n\n var debounce = (function(){\n /**\n * lodash 3.1.1 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n /** Used as the `TypeError` message for \"Functions\" methods. */\n var FUNC_ERROR_TEXT = 'Expected a function';\n\n /* Native method references for those with the same name as other `lodash` methods. */\n var nativeMax = Math.max,\n nativeNow = Date.now;\n\n /**\n * Gets the number of milliseconds that have elapsed since the Unix epoch\n * (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @category Date\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => logs the number of milliseconds it took for the deferred function to be invoked\n */\n var now = nativeNow || function() {\n return new Date().getTime();\n };\n\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed invocations. Provide an options object to indicate that `func`\n * should be invoked on the leading and/or trailing edge of the `wait` timeout.\n * Subsequent calls to the debounced function return the result of the last\n * `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked\n * on the trailing edge of the timeout only if the the debounced function is\n * invoked more than once during the `wait` timeout.\n *\n * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options] The options object.\n * @param {boolean} [options.leading=false] Specify invoking on the leading\n * edge of the timeout.\n * @param {number} [options.maxWait] The maximum time `func` is allowed to be\n * delayed before it's invoked.\n * @param {boolean} [options.trailing=true] Specify invoking on the trailing\n * edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // avoid costly calculations while the window size is in flux\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // invoke `sendMail` when the click event is fired, debouncing subsequent calls\n * jQuery('#postbox').on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // ensure `batchLog` is invoked once after 1 second of debounced calls\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', _.debounce(batchLog, 250, {\n * 'maxWait': 1000\n * }));\n *\n * // cancel a debounced call\n * var todoChanges = _.debounce(batchLog, 1000);\n * Object.observe(models.todo, todoChanges);\n *\n * Object.observe(models, function(changes) {\n * if (_.find(changes, { 'user': 'todo', 'type': 'delete'})) {\n * todoChanges.cancel();\n * }\n * }, ['delete']);\n *\n * // ...at some point `models.todo` is changed\n * models.todo.completed = true;\n *\n * // ...before 1 second has passed `models.todo` is deleted\n * // which cancels the debounced `todoChanges` call\n * delete models.todo;\n */\n function debounce(func, wait, options) {\n var args,\n maxTimeoutId,\n result,\n stamp,\n thisArg,\n timeoutId,\n trailingCall,\n lastCalled = 0,\n maxWait = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = wait < 0 ? 0 : (+wait || 0);\n if (options === true) {\n var leading = true;\n trailing = false;\n } else if (isObject(options)) {\n leading = !!options.leading;\n maxWait = 'maxWait' in options && nativeMax(+options.maxWait || 0, wait);\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function cancel() {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n if (maxTimeoutId) {\n clearTimeout(maxTimeoutId);\n }\n lastCalled = 0;\n maxTimeoutId = timeoutId = trailingCall = undefined;\n }\n\n function complete(isCalled, id) {\n if (id) {\n clearTimeout(id);\n }\n maxTimeoutId = timeoutId = trailingCall = undefined;\n if (isCalled) {\n lastCalled = now();\n result = func.apply(thisArg, args);\n if (!timeoutId && !maxTimeoutId) {\n args = thisArg = undefined;\n }\n }\n }\n\n function delayed() {\n var remaining = wait - (now() - stamp);\n if (remaining <= 0 || remaining > wait) {\n complete(trailingCall, maxTimeoutId);\n } else {\n timeoutId = setTimeout(delayed, remaining);\n }\n }\n\n function maxDelayed() {\n complete(trailing, timeoutId);\n }\n\n function debounced() {\n args = arguments;\n stamp = now();\n thisArg = this;\n trailingCall = trailing && (timeoutId || !leading);\n\n if (maxWait === false) {\n var leadingCall = leading && !timeoutId;\n } else {\n if (!maxTimeoutId && !leading) {\n lastCalled = stamp;\n }\n var remaining = maxWait - (stamp - lastCalled),\n isCalled = remaining <= 0 || remaining > maxWait;\n\n if (isCalled) {\n if (maxTimeoutId) {\n maxTimeoutId = clearTimeout(maxTimeoutId);\n }\n lastCalled = stamp;\n result = func.apply(thisArg, args);\n }\n else if (!maxTimeoutId) {\n maxTimeoutId = setTimeout(maxDelayed, remaining);\n }\n }\n if (isCalled && timeoutId) {\n timeoutId = clearTimeout(timeoutId);\n }\n else if (!timeoutId && wait !== maxWait) {\n timeoutId = setTimeout(delayed, wait);\n }\n if (leadingCall) {\n isCalled = true;\n result = func.apply(thisArg, args);\n }\n if (isCalled && !timeoutId && !maxTimeoutId) {\n args = thisArg = undefined;\n }\n return result;\n }\n debounced.cancel = cancel;\n return debounced;\n }\n\n /**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\n function isObject(value) {\n // Avoid a V8 JIT bug in Chrome 19-20.\n // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n }\n\n return debounce;\n\n })();\n\n // registers the extension on a cytoscape lib ref\n var register = function (cytoscape, $, Konva) {\n\n // can't register if required libraries does not exist\n if (!cytoscape || !$ || !Konva) {\n return;\n }\n\n // var canvas;\n var stageId = 0;\n\n function defaults () {\n return {\n padding: 5, // spacing between node and grapples/rectangle\n undoable: true, // and if cy.undoRedo exists\n\n grappleSize: 8, // size of square dots\n grappleColor: \"green\", // color of grapples\n inactiveGrappleStroke: \"inside 1px blue\",\n //boundingRectangle: true, // enable/disable bounding rectangle\n boundingRectangleLineDash: [4, 8], // line dash of bounding rectangle\n boundingRectangleLineColor: \"red\",\n boundingRectangleLineWidth: 1.5,\n zIndex: 999,\n\n moveSelectedNodesOnKeyEvents: function () {\n return true;\n },\n\n minWidth: function (node) {\n var data = node.data(\"resizeMinWidth\");\n return data ? data : 15;\n }, // a function returns min width of node\n minHeight: function (node) {\n var data = node.data(\"resizeMinHeight\");\n return data ? data : 15;\n }, // a function returns min height of node\n\n // Getters for some style properties the defaults returns ele.css('property-name')\n // you are encouraged to override these getters\n getCompoundMinWidth: function(node) {\n return node.css('min-width');\n },\n getCompoundMinHeight: function(node) {\n return node.css('min-height');\n },\n getCompoundMinWidthBiasRight: function(node) {\n return node.css('min-width-bias-right');\n },\n getCompoundMinWidthBiasLeft: function(node) {\n return node.css('min-width-bias-left');\n },\n getCompoundMinHeightBiasTop: function(node) {\n return node.css('min-height-bias-top');\n },\n getCompoundMinHeightBiasBottom: function(node) {\n return node.css('min-height-bias-bottom');\n },\n\n // These optional function will be executed to set the width/height of a node in this extension\n // Using node.css() is not a recommended way (http://js.cytoscape.org/#eles.style) to do this. Therefore, overriding these defaults\n // so that a data field or something like that will be used to set node dimentions instead of directly calling node.css()\n // is highly recommended (Of course this will require a proper setting in the stylesheet).\n setWidth: function(node, width) {\n node.css('width', width);\n },\n setHeight: function(node, height) {\n node.css('height', height);\n },\n setCompoundMinWidth: function(node, minWidth) {\n node.css('min-width', minWidth);\n },\n setCompoundMinHeight: function(node, minHeight) {\n node.css('min-height', minHeight);\n },\n setCompoundMinWidthBiasLeft: function(node, minWidthBiasLeft) {\n node.css('min-width-bias-left', minWidthBiasLeft);\n },\n setCompoundMinWidthBiasRight: function(node, minHeightBiasRight) {\n node.css('min-width-bias-right', minHeightBiasRight);\n },\n setCompoundMinHeightBiasTop: function(node, minHeightBiasTop) {\n node.css('min-height-bias-top', minHeightBiasTop);\n },\n setCompoundMinHeightBiasBottom: function(node, minHeightBiasBottom) {\n node.css('min-height-bias-bottom', minHeightBiasBottom);\n },\n\n isFixedAspectRatioResizeMode: function (node) { return node.is(\".fixedAspectRatioResizeMode\") },// with only 4 active grapples (at corners)\n isNoResizeMode: function (node) { return node.is(\".noResizeMode, :parent\") }, // no active grapples\n isNoControlsMode: function (node) { return node.is(\".noControlsMode\") }, // no controls - do not draw grapples\n\n cursors: { // See http://www.w3schools.com/cssref/tryit.asp?filename=trycss_cursor\n // May take any \"cursor\" css property\n default: \"default\", // to be set after resizing finished or mouseleave\n inactive: \"not-allowed\",\n nw: \"nw-resize\",\n n: \"n-resize\",\n ne: \"ne-resize\",\n e: \"e-resize\",\n se: \"se-resize\",\n s: \"s-resize\",\n sw: \"sw-resize\",\n w: \"w-resize\"\n },\n\n resizeToContentCueEnabled: function (node) {\n return true;\n },\n resizeToContentFunction: undefined,\n resizeToContentCuePosition: 'bottom-right',\n resizeToContentCueImage: '/node_modules/cytoscape-node-resize/resizeCue.svg',\n };\n }\n\n // Get the whole scratchpad reserved for this extension (on an element or core) or get a single property of it\n function getScratch (cyOrEle, name) {\n if (cyOrEle.scratch('_cyNodeResize') === undefined) {\n cyOrEle.scratch('_cyNodeResize', {});\n }\n\n var scratch = cyOrEle.scratch('_cyNodeResize');\n var retVal = ( name === undefined ) ? scratch : scratch[name];\n return retVal;\n }\n\n // Set a single property on scratchpad of an element or the core\n function setScratch (cyOrEle, name, val) {\n getScratch(cyOrEle)[name] = val;\n }\n\n cytoscape('core', 'nodeResize', function (opts) {\n\n var cy = this;\n\n // If options parameter is 'get' string then just return the api\n if (opts === 'get') {\n return getScratch(cy, 'api');\n }\n\n // the controls object represents the grapples and bounding rectangle\n // only one can exist at any time\n var controls;\n\n // Events to bind and unbind\n var eUnselectNode, ePositionNode, eZoom, ePan, eSelectNode, eRemoveNode, eAddNode, eFreeNode, eUndoRedo;\n\n var options = $.extend(true, defaults(), opts);\n\n var canvasElementId = 'cy-node-resize' + stageId;\n stageId++;\n\n var $canvasElement = $('
');\n var $container = $(cy.container());\n $container.append($canvasElement);\n\n var stage = new Konva.Stage({\n container: canvasElementId, // id of container
\n width: $container.width(),\n height: $container.height()\n });\n // then create layer\n var canvas = new Konva.Layer();\n // add the layer to the stage\n stage.add(canvas);\n\n // Resize the canvas\n var sizeCanvas = debounce( function(){\n $canvasElement\n .attr('height', $container.height())\n .attr('width', $container.width())\n .css({\n 'position': 'absolute',\n 'top': 0,\n 'left': 0,\n 'z-index': options.zIndex\n });\n\n setTimeout(function () {\n var canvasBb = $canvasElement.offset();\n var containerBb = $container.offset();\n\n $canvasElement\n .css({\n 'top': -(canvasBb.top - containerBb.top),\n 'left': -(canvasBb.left - containerBb.left)\n })\n ;\n canvas.getStage().setWidth($container.width());\n canvas.getStage().setHeight($container.height());\n }, 0);\n\n }, 250 );\n\n sizeCanvas();\n\n $(window).on('resize', sizeCanvas);\n\n\n /**\n * ResizeControls is the object representing the graphical controls presented to the user.\n * The controls are composed of:\n * - 1 BoundingRectangle object\n * - 8 Grapple objects\n * \n * It is assumed that only one can exist at any time, and it is sotred in the global variable: controls.\n */\n var ResizeControls = function (node) {\n this.parent = node;\n this.boundingRectangle = new BoundingRectangle(node);\n var grappleLocations = [\"topleft\", \"topcenter\", \"topright\", \"centerright\", \"bottomright\",\n \"bottomcenter\", \"bottomleft\", \"centerleft\"];\n this.grapples = [];\n for(var i=0; i < grappleLocations.length; i++) {\n var location = grappleLocations[i];\n var isActive = true;\n if (options.isNoResizeMode(node) || (options.isFixedAspectRatioResizeMode(node) && location.indexOf(\"center\") >= 0)) {\n isActive = false;\n }\n this.grapples.push(new Grapple(node, this, location, isActive))\n };\n\n if(options.resizeToContentCueEnabled(node) && !options.isNoResizeMode(node))\n this.resizeCue = new ResizeCue(node, this);\n \n canvas.draw();\n };\n\n ResizeControls.prototype.update = function () {\n this.boundingRectangle.update();\n for(var i=0; i < this.grapples.length; i++) {\n this.grapples[i].update();\n };\n\n var node = this.boundingRectangle.parent;\n var rcEnabled = options.resizeToContentCueEnabled(node);\n\n if(this.resizeCue && rcEnabled)\n this.resizeCue.update();\n else if(this.resizeCue && !rcEnabled){\n this.resizeCue.unbindEvents();\n this.resizeCue.shape.destroy();\n delete this.resizeCue;\n }\n else if(!this.resizeCue && rcEnabled)\n this.resizeCue = new ResizeCue(node, this);\n \n canvas.draw();\n };\n\n ResizeControls.prototype.remove = function () {\n this.boundingRectangle.shape.destroy();\n delete this.boundingRectangle;\n for(var i=0; i < this.grapples.length; i++) {\n this.grapples[i].unbindAllEvents();\n this.grapples[i].shape.destroy();\n };\n delete this.grapples;\n if(this.resizeCue){\n this.resizeCue.unbindEvents();\n this.resizeCue.shape.destroy();\n delete this.resizeCue;\n }\n canvas.draw();\n };\n\n var BoundingRectangle = function (node) {\n this.parent = node;\n this.shape = null;\n\n var nodePos = node.renderedPosition();\n var width = node.renderedOuterWidth() + getPadding();\n var height = node.renderedOuterHeight() + getPadding();\n var startPos = {\n x: nodePos.x - width / 2,\n y: nodePos.y - height / 2\n };\n // create our shape\n var rect = new Konva.Rect({\n x: startPos.x,\n y: startPos.y,\n width: width,\n height: height,\n stroke: options.boundingRectangleLineColor,\n strokeWidth: options.boundingRectangleLineWidth,\n dash: options.boundingRectangleLineDash\n });\n // add the shape to the layer\n canvas.add(rect);\n this.shape = rect;\n };\n\n BoundingRectangle.prototype.update = function () {\n var nodePos = this.parent.renderedPosition();\n var width = this.parent.renderedOuterWidth() + getPadding();\n var height = this.parent.renderedOuterHeight() + getPadding();\n var startPos = {\n x: nodePos.x - width / 2,\n y: nodePos.y - height / 2\n };\n this.shape.x(startPos.x);\n this.shape.y(startPos.y);\n this.shape.width(width);\n this.shape.height(height);\n };\n\n var Grapple = function (node, resizeControls, location, isActive) {\n this.parent = node;\n this.location = location;\n this.isActive = isActive;\n this.resizeControls = resizeControls;\n\n var nodePos = node.renderedPosition();\n var width = node.renderedOuterWidth() + getPadding();\n var height = node.renderedOuterHeight() + getPadding();\n var startPos = {\n x: nodePos.x - width / 2,\n y: nodePos.y - height / 2\n };\n\n var gs = getGrappleSize(node);\n\n this.shape = new Konva.Rect({\n width: gs,\n height: gs\n });\n if(this.isActive) {\n this.shape.fill(options.grappleColor);\n }\n else {\n // we need to parse the inactiveGrappleStroke option that is composed of 3 parts\n var parts = options.inactiveGrappleStroke.split(' ');\n var color = parts[2];\n var strokeWidth = parseInt(parts[1].replace(/px/, ''));\n this.shape.stroke(color);\n this.shape.strokeWidth(strokeWidth);\n }\n\n this.updateShapePosition(startPos, width, height, gs);\n canvas.add(this.shape);\n\n if(this.isActive) {\n this.bindActiveEvents();\n }\n else {\n this.bindInactiveEvents();\n }\n };\n\n Grapple.prototype.bindInactiveEvents = function () {\n var self = this; // keep reference to the grapple object inside events\n\n var eMouseEnter = function (event) {\n event.target.getStage().container().style.cursor = options.cursors.inactive;\n };\n\n var eMouseLeave = function (event) {\n if (event.target.getStage() != undefined)\n event.target.getStage().container().style.cursor = options.cursors.default;\n };\n\n var eMouseDown = function (event) {\n cy.boxSelectionEnabled(false);\n cy.panningEnabled(false);\n cy.autounselectify(true);\n cy.autoungrabify(true);\n canvas.getStage().on(\"contentTouchend contentMouseup\", eMouseUp);\n };\n var eMouseUp = function (event) {\n // stage scope\n cy.boxSelectionEnabled(true);\n cy.panningEnabled(true);\n cy.autounselectify(false);\n cy.autoungrabify(false);\n canvas.getStage().off(\"contentTouchend contentMouseup\", eMouseUp);\n };\n\n this.shape.on(\"mouseenter\", eMouseEnter);\n this.shape.on(\"mouseleave\", eMouseLeave);\n this.shape.on(\"touchstart mousedown\", eMouseDown);\n };\n\n Grapple.prototype.bindActiveEvents = function () {\n var self = this; // keep reference to the grapple object inside events\n var node = self.parent;\n var setWidthFcn, setHeightFcn; // Functions to resize the node\n var getWidthFcn,getHeightFcn; // Functions to get node sizes\n var startPos = {};\n var tmpActiveBgOpacity;\n // BBox of children of a node. Of course is valid if the node is a compound.\n var childrenBBox; \n\n // helper object\n var translateLocation = {\n \"topleft\": \"nw\",\n \"topcenter\": \"n\",\n \"topright\": \"ne\",\n \"centerright\": \"e\",\n \"bottomright\": \"se\",\n \"bottomcenter\": \"s\",\n \"bottomleft\": \"sw\",\n \"centerleft\": \"w\"\n };\n\n var eMouseDown = function (event) {\n childrenBBox = node.children().boundingBox();\n // If the node is a compound use setCompoundMinWidth() and setCompoundMinHeight() \n // instead of setWidth() and setHeight() \n setWidthFcn = node.isParent() ? options.setCompoundMinWidth : options.setWidth; \n setHeightFcn = node.isParent() ? options.setCompoundMinHeight : options.setHeight; \n \n getWidthFcn = function(node) {\n if (node.isParent()) {\n return Math.max(parseFloat(options.getCompoundMinWidth(node)), childrenBBox.w);\n }\n \n return node.width();\n };\n \n getHeightFcn = function(node) {\n if (node.isParent()) {\n return Math.max(parseFloat(options.getCompoundMinHeight(node)), childrenBBox.h);\n }\n \n return node.height();\n };\n \n cy.trigger(\"noderesize.resizestart\", [self.location, self.parent]);\n if(cy.style()._private.coreStyle[\"active-bg-opacity\"]){\n tmpActiveBgOpacity = cy.style()._private.coreStyle[\"active-bg-opacity\"].value;\n }\n cy.style()\n .selector(\"core\")\n .style(\"active-bg-opacity\", 0)\n .update();\n event.target.getStage().container().style.cursor = options.cursors[translateLocation[self.location]];\n var currentPointer = event.target.getStage().getPointerPosition();\n startPos.x = currentPointer.x;\n startPos.y = currentPointer.y;\n cy.boxSelectionEnabled(false);\n cy.panningEnabled(false);\n cy.autounselectify(true);\n cy.autoungrabify(true);\n self.shape.off(\"mouseenter\", eMouseEnter);\n self.shape.off(\"mouseleave\", eMouseLeave);\n canvas.getStage().on(\"contentTouchend contentMouseup\", eMouseUp);\n canvas.getStage().on(\"contentTouchmove contentMousemove\", eMouseMove);\n };\n\n var eMouseUp = function (event) {\n cy.style()\n .selector(\"core\")\n .style(\"active-bg-opacity\", tmpActiveBgOpacity)\n .update();\n self.shape.getStage().container().style.cursor = options.cursors.default;\n cy.boxSelectionEnabled(true);\n cy.panningEnabled(true);\n setTimeout(function () { // for some reason, making node unselectable before doesn't work\n cy.autounselectify(false); // think about those 2\n cy.autoungrabify(false);\n }, 0);\n cy.trigger(\"noderesize.resizeend\", [self.location, self.parent]);\n canvas.getStage().off(\"contentTouchend contentMouseup\", eMouseUp);\n canvas.getStage().off(\"contentTouchmove contentMousemove\", eMouseMove);\n self.shape.on(\"mouseenter\", eMouseEnter);\n self.shape.on(\"mouseleave\", eMouseLeave);\n\n };\n\n var eMouseMove = function (event) {\n var currentPointer = self.shape.getStage().getPointerPosition();\n var x = currentPointer.x;\n var y = currentPointer.y;\n\n var xHeight = (y - startPos.y) / cy.zoom();\n var xWidth = (x - startPos.x) / cy.zoom();\n\n var location = self.location;\n cy.batch(function () {\n var isAspectedMode = options.isFixedAspectRatioResizeMode(node);\n if ((isAspectedMode && location.indexOf(\"center\") >= 0) ||\n options.isNoResizeMode(node))\n return;\n\n if (isAspectedMode) {\n var aspectRatio = getHeightFcn(node) / getWidthFcn(node);\n\n var aspectedSize = Math.min(xWidth, xHeight);\n\n var isCrossCorners = (location == \"topright\" || location == \"bottomleft\");\n if (xWidth > xHeight)\n xHeight = xWidth * aspectRatio * (isCrossCorners ? -1 : 1);\n else\n xWidth = xHeight / aspectRatio * (isCrossCorners ? -1 : 1);\n }\n\n var nodePos = node.position();\n var newX = nodePos.x;\n var newY = nodePos.y;\n var isXresized = false;\n var isYresized = false;\n\n // These are valid if the node is a compound\n // Initial (before resize) sizes of compound \n var initialWidth, initialHeight;\n // Extra space between node width and children bbox. Causes by 'min-width' and/or 'min-height'\n var extraLeft = 0, extraRight = 0, extraTop = 0, extraBottom = 0; \n \n if (node.isParent()) {\n var totalExtraWidth = getWidthFcn(node) - childrenBBox.w; \n var totalExtraHeight = getHeightFcn(node) - childrenBBox.h; \n \n if (totalExtraWidth > 0) {\n extraLeft = totalExtraWidth * parseFloat(options.getCompoundMinWidthBiasLeft(node)) / \n ( parseFloat(options.getCompoundMinWidthBiasLeft(node)) + parseFloat(options.getCompoundMinWidthBiasRight(node)) ); \n extraRight = totalExtraWidth - extraLeft;\n }\n \n if (totalExtraHeight > 0) {\n extraTop = totalExtraHeight * parseFloat(options.getCompoundMinHeightBiasTop(node)) / \n ( parseFloat(options.getCompoundMinHeightBiasTop(node)) + parseFloat(options.getCompoundMinHeightBiasBottom(node)) ); \n extraBottom = totalExtraHeight - extraTop;\n }\n }\n\n if (location.startsWith(\"top\")) {\n // Note that xHeight is supposed to be negative\n // If the node is simple min height should not be exceed, else if it is compound\n // then extraTop should not be negative\n if (getHeightFcn(node) - xHeight > options.minHeight(node)\n && ( !node.isParent() || extraTop - xHeight >= 0 ) ) {\n newY = nodePos.y + xHeight / 2;\n isYresized = true;\n setHeightFcn(node, getHeightFcn(node) - xHeight);\n } else if (isAspectedMode)\n return;\n } else if (location.startsWith(\"bottom\")) {\n // Note that xHeight is supposed to be positive\n // If the node is simple min height should not be exceed, else if it is compound\n // then extraBottom should not be negative\n if (getHeightFcn(node) + xHeight > options.minHeight(node)\n && ( !node.isParent() || extraBottom + xHeight >= 0 ) ) {\n newY = nodePos.y + xHeight / 2;\n isYresized = true;\n setHeightFcn(node, getHeightFcn(node) + xHeight);\n } else if (isAspectedMode)\n return;\n }\n\n if (location.endsWith(\"left\") && getWidthFcn(node) - xWidth > options.minWidth(node)\n && ( !node.isParent() || extraLeft - xWidth >= 0 ) ) {\n // Note that xWidth is supposed to be negative\n // If the node is simple min width should not be exceed, else if it is compound\n // then extraLeft should not be negative\n newX = nodePos.x + xWidth / 2;\n isXresized = true;\n setWidthFcn(node, getWidthFcn(node) - xWidth);\n } else if (location.endsWith(\"right\") && getWidthFcn(node) + xWidth > options.minWidth(node)\n && ( !node.isParent() || extraRight + xWidth >= 0 ) ) {\n // Note that xWidth is supposed to be positive\n // If the node is simple min width should not be exceed, else if it is compound\n // then extraRight should not be negative\n newX = nodePos.x + xWidth / 2;\n isXresized = true;\n setWidthFcn(node, getWidthFcn(node) + xWidth);\n }\n\n // this will trigger a position event, leading to useless redraw.\n // TODO find a way to avoid that\n if(!node.isParent() && ( isXresized || isYresized )) {\n node.position({x: newX, y: newY});\n }\n \n // If the node is a compound we need to handle left/right/top/bottom biases conditionally \n if ( node.isParent() ) {\n var totalExtraWidth = getWidthFcn(node) - childrenBBox.w; \n var totalExtraHeight = getHeightFcn(node) - childrenBBox.h;\n \n if (isXresized && totalExtraWidth > 0) {\n // If the location ends with right the left extra space should be fixed\n // else if it ends with left the right extra space should be fixed\n if (location.endsWith('right')) {\n extraRight = totalExtraWidth - extraLeft;\n }\n else if (location.endsWith('left')) {\n extraLeft = totalExtraWidth - extraRight;\n }\n\n var biasLeft = extraLeft / (extraLeft + extraRight) * 100;\n var biasRight = 100 - biasLeft;\n \n if (biasLeft < 0 || biasRight < 0) {\n// console.log('negative horizontal');\n return;\n }\n \n options.setCompoundMinWidthBiasLeft(node, biasLeft + '%');\n options.setCompoundMinWidthBiasRight(node, biasRight + '%');\n }\n \n if (isYresized && totalExtraHeight > 0) {\n // If the location starts with top the bottom extra space should be fixed\n // else if it starst with bottom the top extra space should be fixed\n if (location.startsWith('top')) {\n extraTop = totalExtraHeight - extraBottom;\n }\n else if (location.startsWith('bottom')) {\n extraBottom = totalExtraHeight - extraTop;\n }\n\n var biasTop = extraTop / (extraTop + extraBottom) * 100;\n var biasBottom = 100 - biasTop;\n \n if (biasTop < 0 || biasBottom < 0) {\n// console.log('negative vertical');\n return;\n }\n \n options.setCompoundMinHeightBiasTop(node, biasTop + '%');\n options.setCompoundMinHeightBiasBottom(node, biasBottom + '%');\n }\n }\n });\n\n startPos.x = x;\n startPos.y = y;\n self.resizeControls.update(); // redundant update if the position has changed just before\n\n cy.trigger(\"noderesize.resizedrag\", [location, node]);\n };\n\n var eMouseEnter = function (event) {\n event.target.getStage().container().style.cursor = options.cursors[translateLocation[self.location]];\n };\n\n var eMouseLeave = function (event) {\n if (event.target.getStage() != undefined)\n event.target.getStage().container().style.cursor = options.cursors.default;\n };\n\n this.shape.on(\"mouseenter\", eMouseEnter);\n this.shape.on(\"mouseleave\", eMouseLeave);\n this.shape.on(\"touchstart mousedown\", eMouseDown);\n };\n\n Grapple.prototype.update = function() {\n var nodePos = this.parent.renderedPosition();\n var width = this.parent.renderedOuterWidth() + getPadding();\n var height = this.parent.renderedOuterHeight() + getPadding();\n var startPos = {\n x: nodePos.x - width / 2,\n y: nodePos.y - height / 2\n };\n\n var gs = getGrappleSize(this.parent);\n\n this.shape.width(gs);\n this.shape.height(gs);\n this.updateShapePosition(startPos, width, height, gs);\n };\n\n Grapple.prototype.unbindAllEvents = function () {\n this.shape.off('mouseenter');\n this.shape.off('mouseleave');\n this.shape.off('touchstart mousedown');\n };\n\n Grapple.prototype.updateShapePosition = function (startPos, width, height, gs) {\n switch(this.location) {\n case \"topleft\":\n this.shape.x(startPos.x - gs / 2);\n this.shape.y(startPos.y - gs / 2);\n break;\n case \"topcenter\":\n this.shape.x(startPos.x + width / 2 - gs / 2);\n this.shape.y(startPos.y - gs / 2);\n break;\n case \"topright\":\n this.shape.x(startPos.x + width - gs / 2);\n this.shape.y(startPos.y - gs / 2);\n break;\n case \"centerright\":\n this.shape.x(startPos.x + width - gs / 2);\n this.shape.y(startPos.y + height / 2 - gs / 2);\n break;\n case \"bottomright\":\n this.shape.x(startPos.x + width - gs / 2);\n this.shape.y(startPos.y + height - gs / 2);\n break;\n case \"bottomcenter\":\n this.shape.x(startPos.x + width / 2 - gs / 2);\n this.shape.y(startPos.y + height - gs / 2);\n break;\n case \"bottomleft\":\n this.shape.x(startPos.x - gs / 2);\n this.shape.y(startPos.y + height - gs / 2);\n break;\n case \"centerleft\":\n this.shape.x(startPos.x - gs / 2);\n this.shape.y(startPos.y + height / 2 - gs / 2);\n break;\n }\n };\n\n var ResizeCue = function (node, resizeControls) {\n this.parent = node;\n this.resizeControls = resizeControls;\n\n var nodePos = node.renderedPosition();\n var width = node.renderedOuterWidth() + getPadding();\n var height = node.renderedOuterHeight() + getPadding();\n var startPos = {\n x: nodePos.x - width / 2,\n y: nodePos.y - height / 2\n };\n \n var ch = getResizeCueHeight(node);\n var cw = getResizeCueWidth(node);\n \n var imageObj = new Image();\n imageObj.src = options.resizeToContentCueImage;\n this.shape = new Konva.Image({\n width: cw,\n height: ch,\n image: imageObj\n });\n \n imageObj.onload = function() {\n canvas.draw();\n }\n\n this.updateShapePosition(startPos, width, height, cw, ch);\n this.bindEvents();\n canvas.add(this.shape);\n }\n\n ResizeCue.prototype.update = function() {\n var nodePos = this.parent.renderedPosition();\n var width = this.parent.renderedOuterWidth() + getPadding();\n var height = this.parent.renderedOuterHeight() + getPadding();\n var startPos = {\n x: nodePos.x - width / 2,\n y: nodePos.y - height / 2\n };\n\n var ch = getResizeCueHeight(this.parent);\n var cw = getResizeCueWidth(this.parent);\n\n this.shape.width(cw);\n this.shape.height(ch);\n this.updateShapePosition(startPos, width, height, cw, ch);\n };\n\n ResizeCue.prototype.updateShapePosition = function (startPos, width, height, cw, ch) {\n switch(options.resizeToContentCuePosition) {\n case \"top-left\":\n this.shape.x(startPos.x + 0.4 * cw);\n this.shape.y(startPos.y + 0.4 * ch);\n break;\n case \"top-right\":\n this.shape.x(startPos.x + width - 1.4 * cw);\n this.shape.y(startPos.y + 0.4 * ch);\n break; \n case \"bottom-left\":\n this.shape.x(startPos.x + 0.4 * cw);\n this.shape.y(startPos.y + height - 1.4 * ch);\n break;\n default: // \"bottom-right\" is the default case\n this.shape.x(startPos.x + width - 1.4 * cw);\n this.shape.y(startPos.y + height - 1.4 * ch);\n break;\n }\n };\n\n ResizeCue.prototype.bindEvents = function () {\n var node = this.parent;\n var self = this;\n\n var onClick = function() {\n if(typeof options.resizeToContentFunction === \"function\"){\n options.resizeToContentFunction([node]);\n }\n else if(cy.undoRedo && options.undoable)\n cy.trigger('noderesize.resizetocontent', [self]);\n else{\n var params = {\n self: self,\n firstTime: true\n }\n defaultResizeToContent(params); \n }\n }\n\n this.shape.on(\"click\", onClick);\n };\n\n ResizeCue.prototype.unbindEvents = function () {\n this.shape.off(\"click\");\n };\n\n var getGrappleSize = function (node) {\n return Math.max(1, cy.zoom()) * options.grappleSize * Math.min(node.width()/25, node.height()/25, 1);\n };\n\n var getResizeCueHeight = function (node) {\n return Math.max(1, cy.zoom()) * options.grappleSize * 1.25 * Math.min(node.width()/25, node.height()/25, 1);\n\n };\n\n var getResizeCueWidth = function (node) {\n return Math.max(1, cy.zoom()) * options.grappleSize * 1.25 * Math.min(node.width()/25, node.height()/25, 1);\n };\n\n var getPadding = function () {\n return options.padding*Math.max(1, cy.zoom());\n };\n\n var defaultResizeToContent = function(params) {\n var self = params.self;\n var node = self.parent;\n \n var setWidthFcn = node.isParent() ? options.setCompoundMinWidth : options.setWidth; \n var setHeightFcn = node.isParent() ? options.setCompoundMinHeight : options.setHeight; \n \n if(params.firstTime){\n delete params.firstTime;\n \n params.oldWidth = node.width();\n params.oldHeight = node.height();\n\n var context = document.createElement('canvas').getContext(\"2d\");\n var style = node.style();\n context.font = style['font-size'] + \" \" + style['font-family'];\n \n var labelText = (style['label']).split(\"\\n\");\n \n var minWidth = 0;\n var minHeight = Math.max(context.measureText('M').width * 1.1, 30);\n labelText.forEach(function(text){\n var textWidth = context.measureText(text).width;\n if (minWidth < textWidth)\n minWidth = textWidth;\n });\n \n if(minWidth !== 0){\n if(typeof options.isFixedAspectRatioResizeMode === 'function' && \n options.isFixedAspectRatioResizeMode(node)){\n \n var ratio = node.width() / node.height();\n var tmpW = (minWidth < minHeight) ? minWidth : minHeight * ratio;\n var tmpH = (minWidth < minHeight) ? minWidth / ratio : minHeight;\n\n if(tmpW >= minWidth && tmpH >= minHeight){\n minWidth = tmpW;\n minHeight = tmpH;\n }\n else{\n minWidth = (minWidth < minHeight) ? minHeight * ratio : minWidth;\n minHeight = (minWidth < minHeight) ? minHeight : minWidth / ratio;\n }\n }\n\n setWidthFcn(node, minWidth * 1.1);\n setHeightFcn(node, minHeight * 1.1);\n }\n \n node.unselect();\n\n return params;\n }\n else{ \n var newWidth = params.oldWidth;\n var newHeight = params.oldHeight;\n \n params.oldWidth = node.width();\n params.oldHeight = node.height();\n\n setWidthFcn(node, newWidth);\n setHeightFcn(node, newHeight);\n \n node.unselect();\n\n return params;\n }\n \n }\n\n function getTopMostNodes(nodes) {\n var nodesMap = {};\n for (var i = 0; i < nodes.length; i++) {\n nodesMap[nodes[i].id()] = true;\n }\n var roots = nodes.filter(function (ele, i) {\n if(typeof ele === \"number\") {\n ele = i;\n }\n var parent = ele.parent()[0];\n while(parent != null){\n if(nodesMap[parent.id()]){\n return false;\n }\n parent = parent.parent()[0];\n }\n return true;\n });\n\n return roots;\n }\n\n function moveNodes(positionDiff, nodes) {\n // Get the descendants of top most nodes. Note that node.position() can move just the simple nodes.\n var topMostNodes = getTopMostNodes(nodes);\n var nodesToMove = topMostNodes.union(topMostNodes.descendants());\n\n nodesToMove.positions(function(node, i) {\n if(typeof node === \"number\") {\n node = i;\n }\n var oldX = node.position(\"x\");\n var oldY = node.position(\"y\");\n if (node.isParent())\n {\n return {\n x: oldX,\n y: oldY\n };\n }\n return {\n x: oldX + positionDiff.x,\n y: oldY + positionDiff.y\n };\n });\n }\n\n var selectedNodesToMove;\n var nodesMoving = false;\n\n var keys = {};\n function keyDown(e) {\n\n var shouldMove = typeof options.moveSelectedNodesOnKeyEvents === 'function'\n ? options.moveSelectedNodesOnKeyEvents() : options.moveSelectedNodesOnKeyEvents;\n\n if (!shouldMove) {\n return;\n }\n\n //Checks if the tagname is textarea or input\n var tn = document.activeElement.tagName;\n if (tn != \"TEXTAREA\" && tn != \"INPUT\")\n {\n keys[e.keyCode] = true;\n switch(e.keyCode){\n case 37: case 39: case 38: case 40: // Arrow keys\n case 32: e.preventDefault(); break; // Space\n default: break; // do not block other keys\n }\n\n\t\t\t\t\t\n if (e.keyCode < '37' || e.keyCode > '40') {\n return;\n }\n\n if (!nodesMoving)\n {\n selectedNodesToMove = cy.nodes(':selected');\n cy.trigger(\"noderesize.movestart\", [selectedNodesToMove]);\n nodesMoving = true;\n }\n if (e.altKey && e.which == '38') {\n // up arrow and alt\n moveNodes ({x:0, y:-1},selectedNodesToMove);\n }\n else if (e.altKey && e.which == '40') {\n // down arrow and alt\n moveNodes ({x:0, y:1},selectedNodesToMove);\n }\n else if (e.altKey && e.which == '37') {\n // left arrow and alt\n moveNodes ({x:-1, y:0},selectedNodesToMove);\n }\n else if (e.altKey && e.which == '39') {\n // right arrow and alt\n moveNodes ({x:1, y:0},selectedNodesToMove);\n }\n\n else if (e.shiftKey && e.which == '38') {\n // up arrow and shift\n moveNodes ({x:0, y:-10},selectedNodesToMove);\n }\n else if (e.shiftKey && e.which == '40') {\n // down arrow and shift\n moveNodes ({x:0, y:10},selectedNodesToMove);\n }\n else if (e.shiftKey && e.which == '37') {\n // left arrow and shift\n moveNodes ({x:-10, y:0},selectedNodesToMove);\n\n }\n else if (e.shiftKey && e.which == '39' ) {\n // right arrow and shift\n moveNodes ({x:10, y:0},selectedNodesToMove);\n }\n\n else if (e.keyCode == '38') {\n // up arrow\n moveNodes ({x:0, y:-3},selectedNodesToMove);\n }\n else if (e.keyCode == '40') {\n // down arrow\n moveNodes ({x:0, y:3},selectedNodesToMove);\n }\n else if (e.keyCode == '37') {\n // left arrow\n moveNodes ({x:-3, y:0},selectedNodesToMove);\n }\n else if (e.keyCode == '39') {\n //right arrow\n moveNodes ({x:3, y:0},selectedNodesToMove);\n }\n }\n }\n\n function keyUp(e) {\n if (e.keyCode < '37' || e.keyCode > '40') {\n return;\n }\n\n var shouldMove = typeof options.moveSelectedNodesOnKeyEvents === 'function'\n ? options.moveSelectedNodesOnKeyEvents() : options.moveSelectedNodesOnKeyEvents;\n\n if (!shouldMove) {\n return;\n }\n\n cy.trigger(\"noderesize.moveend\", [selectedNodesToMove]);\n selectedNodesToMove = undefined;\n nodesMoving = false;\n }\n\n var unBindEvents = function() {\n cy.off(\"unselect\", \"node\", eUnselectNode);\n cy.off(\"position\", \"node\", ePositionNode);\n cy.off(\"position\", \"node\", eFreeNode);\n cy.off(\"zoom\", eZoom);\n cy.off(\"pan\", ePan);\n //cy.off(\"style\", \"node\", redraw);\n cy.off(\"select\", \"node\", eSelectNode);\n cy.off(\"remove\", \"node\", eRemoveNode);\n cy.off(\"add\", \"node\", eAddNode);\n cy.off(\"afterUndo afterRedo\", eUndoRedo);\n };\n\n var bindEvents = function() {\n // declare old and current positions\n var oldPos = {x: undefined, y: undefined};\n var currentPos = {x : 0, y : 0};\n cy.on(\"unselect\", \"node\", eUnselectNode = function(e) {\n // reinitialize old and current compound positions\n oldPos = {x: undefined, y: undefined};\n currentPos = {x: 0, y: 0};\n\n if(controls) {\n controls.remove();\n controls = null;\n }\n\n var selectedNodes = cy.nodes(':selected');\n if(selectedNodes.size() == 1) {\n controls = new ResizeControls(selectedNodes);\n }\n });\n\n cy.on(\"select\", \"node\", eSelectNode = function(e) {\n var node = e.target;\n\n if(controls) {\n controls.remove();\n controls = null;\n }\n\n var selectedNodes = cy.nodes(':selected');\n if(selectedNodes.size() == 1 && !options.isNoControlsMode(node)) {\n controls = new ResizeControls(selectedNodes);\n }\n });\n\n cy.on(\"remove\", \"node\", eRemoveNode = function(e) {\n var node = e.target;\n // If a selected node is removed we should regard this event just like an unselect event\n if ( node.selected() ) {\n eUnselectNode(e);\n }\n });\n\n // is this useful ? adding a node never seems to select it, and it causes a bug when changing parent\n cy.on(\"add\", \"node\", eAddNode = function(e) {\n var node = e.target;\n // If a selected node is added we should regard this event just like a select event\n if ( node.selected() ) {\n eSelectNode(e);\n }\n });\n\n // listens for position event and refreshGrapples if necessary\n cy.on(\"position\", \"node\", ePositionNode = function(e) {\n if(controls) {\n // It seems that parent.position() doesn't always give consistent result.\n // But calling it here makes the results consistent, by updating it to the correct value, somehow.\n // Maybe there is some cache on cytoscape side preventing a position update.\n var trash_var = controls.parent.position(); // trash_var isn't used, this line apparently makes position() correct\n if(e.target.id() == controls.parent.id()) {\n controls.update();\n }\n // if the position of compund changes by repositioning its children's\n // Note: position event for compound is not triggered in this case\n else if(currentPos.x != oldPos.x || currentPos.y != oldPos.y) {\n currentPos = controls.parent.position();\n controls.update();\n oldPos = {x : currentPos.x, y : currentPos.y};\n }\n }\n });\n\n cy.on(\"zoom\", eZoom = function() {\n if ( controls ) {\n controls.update();\n }\n });\n\n cy.on(\"pan\", ePan = function() {\n if ( controls ) {\n controls.update();\n }\n });\n\n cy.on(\"afterUndo afterRedo\", eUndoRedo = function() {\n if ( controls ) {\n controls.update();\n oldPos = {x: undefined, y: undefined};\n }\n });\n\n document.addEventListener(\"keydown\",keyDown, true);\n document.addEventListener(\"keyup\",keyUp, true);\n };\n bindEvents();\n\n if (cy.undoRedo && options.undoable) {\n\n var param;\n var moveparam;\n \n // On resize start fill param object to use it on undo/redo\n cy.on(\"noderesize.resizestart\", function (e, type, node) {\n param = {\n node: node,\n css: {\n }\n };\n \n // Some parts of param object are dependant on whether the node is a compound or simple node\n if (node.isParent()) {\n param.css.minWidth = parseFloat(options.getCompoundMinWidth(node));\n param.css.minHeight = parseFloat(options.getCompoundMinHeight(node));\n param.css.biasLeft = options.getCompoundMinWidthBiasLeft(node);\n param.css.biasRight = options.getCompoundMinWidthBiasRight(node);\n param.css.biasTop = options.getCompoundMinHeightBiasTop(node);\n param.css.biasBottom = options.getCompoundMinHeightBiasBottom(node);\n }\n else {\n param.css.width = node.width();\n param.css.height = node.height();\n param.position = $.extend({}, node.position());\n }\n });\n \n // On resize end do the action using param object\n cy.on(\"noderesize.resizeend\", function (e, type, node) {\n param.firstTime = true;\n cy.undoRedo().do(\"resize\", param);\n param = undefined;\n });\n\n cy.on(\"noderesize.movestart\", function (e, nodes) {\n if (nodes[0] != undefined)\n {\n moveparam = {\n firstTime: true,\n firstNodePosition: {\n x: nodes[0].position('x'),\n y: nodes[0].position('y')\n },\n nodes: nodes\n }\n }\n });\n\n cy.on(\"noderesize.moveend\", function (e, nodes) {\n if (moveparam != undefined)\n {\n var initialPos = moveparam.firstNodePosition;\n\n moveparam.positionDiff = {\n x: -nodes[0].position('x') + initialPos.x,\n y: -nodes[0].position('y') + initialPos.y\n }\n\n delete moveparam.firstNodePosition;\n\n cy.undoRedo().do(\"noderesize.move\", moveparam);\n moveparam = undefined;\n }\n });\n\n cy.on(\"noderesize.resizetocontent\", function (e, self) {\n var params = {\n self: self,\n firstTime: true\n }\n\n cy.undoRedo().do(\"resizeToContent\", params); \n });\n\n var resizeDo = function (arg) {\n // If this is the first time it means that resize is already performed through user interaction.\n // In this case just removing the first time parameter is enough.\n if (arg.firstTime) {\n if (controls) {\n controls.update(); // refresh grapplers after node resize\n }\n delete arg.firstTime;\n return arg;\n }\n\n var node = arg.node;\n \n // Result object is to be returned for undo/redo cases\n var result = {\n node: node,\n css: {\n }\n };\n \n // Some parts of result object is dependent on whether the node is simple or compound\n if (node.isParent()) {\n result.css.minWidth = parseFloat(options.getCompoundMinWidth(node));\n result.css.minHeight = parseFloat(options.getCompoundMinHeight(node));\n result.css.biasLeft = options.getCompoundMinWidthBiasLeft(node);\n result.css.biasRight = options.getCompoundMinWidthBiasRight(node);\n result.css.biasTop = options.getCompoundMinHeightBiasTop(node);\n result.css.biasBottom = options.getCompoundMinHeightBiasBottom(node);\n }\n else {\n result.css.width = node.width();\n result.css.height = node.height();\n result.position = $.extend({}, node.position());\n }\n \n // Perform actual undo/redo part using args object\n cy.startBatch();\n \n if (node.isParent()) {\n options.setCompoundMinWidth(node, arg.css.minWidth);\n options.setCompoundMinHeight(node, arg.css.minHeight);\n options.setCompoundMinWidthBiasLeft(node, arg.css.biasLeft);\n options.setCompoundMinWidthBiasRight(node, arg.css.biasRight);\n options.setCompoundMinHeightBiasTop(node, arg.css.biasTop);\n options.setCompoundMinHeightBiasBottom(node, arg.css.biasBottom);\n }\n else {\n node.position(arg.position);\n options.setWidth(node, arg.css.width);\n options.setHeight(node, arg.css.height);\n }\n \n cy.endBatch();\n\n if (controls) {\n controls.update(); // refresh grapplers after node resize\n }\n\n return result;\n };\n\n var moveDo = function (arg) {\n if (arg.firstTime) {\n delete arg.firstTime;\n return arg;\n }\n\n var nodes = arg.nodes;\n\n var positionDiff = arg.positionDiff;\n\n var result = {\n nodes: nodes,\n positionDiff: {\n x: -positionDiff.x,\n y: -positionDiff.y\n }\n };\n\n\n moveNodes (positionDiff,nodes);\n\n return result;\n };\n\n cy.undoRedo().action(\"resize\", resizeDo, resizeDo);\n cy.undoRedo().action(\"noderesize.move\", moveDo, moveDo);\n cy.undoRedo().action(\"resizeToContent\", defaultResizeToContent, defaultResizeToContent);\n }\n\n var api = {}; // The extension api to be exposed\n\n api.refreshGrapples = function() {\n if (controls) {\n // We need to remove old controls and create a new one rather then just updating controls\n // We need this because the parent may change status and become resizable or not-resizable\n var parent = controls.parent;\n controls.remove();\n controls = new ResizeControls(parent);\n }\n }\n // Simply remove grapples even if node is selected\n api.removeGrapples = function() {\n if (controls) {\n controls.remove();\n controls = null;\n }\n }\n\n setScratch(cy, 'api', api);\n\n return api; // Return the api\n });\n\n };\n\n if (typeof module !== 'undefined' && module.exports) { // expose as a commonjs module\n module.exports = register;\n }\n\n if (typeof define !== 'undefined' && define.amd) { // expose as an amd/requirejs module\n define('cytoscape-node-resize', function () {\n return register;\n });\n }\n\n if (typeof cytoscape !== 'undefined' && typeof jQuery !== \"undefined\" && typeof Konva !== \"undefined\") { // expose to global cytoscape (i.e. window.cytoscape)\n register(cytoscape, jQuery, Konva);\n }\n\n})();\n","module.exports = require(\"cytoscape-undo-redo\");","module.exports = require(\"cytoscape-panzoom\");","module.exports = (function()\n{\n var styleSheet = [\n {\n selector: 'node',\n style:\n {\n 'text-valign': 'center',\n 'text-halign': 'center',\n 'color': '#1e2829',\n 'width': function (ele)\n {\n return nodeWFunc(ele);\n },\n 'height': function (ele)\n {\n return nodeHFunc(ele);\n },\n // 'background-image-opacity': 1,\n // 'background-image': function (ele)\n // {\n // return backgroundImageHandler(ele);\n // },\n 'background-color': 'white',\n 'shape': function(ele)\n {\n return parentNodeShapeFunc( ele );\n },\n 'border-width': function(ele)\n {\n return borderWidthFunction( ele );\n },\n 'border-color': function(ele)\n {\n return nodeBorderColorFunction(ele);\n },\n 'font-size': 14\n }\n },\n {\n selector: 'node[name]',\n style: {\n 'label': 'data(name)'\n }\n },\n {\n selector: 'node:parent',\n style:\n {\n 'shape': function(ele)\n {\n return parentNodeShapeFunc( ele );\n },\n 'text-valign': function(ele)\n {\n return 'bottom';\n },\n 'text-margin-y' : 2,\n 'padding-left': function(ele){ return compoundPaddingFunction(ele); },\n 'padding-right': function(ele){ return compoundPaddingFunction(ele); },\n 'padding-bottom': function(ele){ return compoundPaddingFunction(ele); },\n 'padding-top': function(ele){ return compoundPaddingFunction(ele); },\n 'background-opacity': 0.5,\n 'border-width': function(ele)\n {\n return parentBorderWidthFunction( ele );\n },\n 'border-color': function(ele)\n {\n return nodeBorderColorFunction(ele);\n },\n 'background-color': function(ele){\n return nodeBackgroundColorFunction(ele);\n }\n }\n },\n {\n selector: 'edge',\n style:\n {\n 'arrow-scale': 1.7,\n 'curve-style': 'bezier',\n 'text-background-color': '#EEEEEE',\n 'text-background-opacity': 0,\n 'target-arrow-shape': function( ele )\n {\n return edgeTargetArrowTypeHandler(ele);\n },\n 'width': 1,\n 'line-color': function( ele )\n {\n return edgeColorHandler(ele);\n },\n 'target-arrow-color': function( ele )\n {\n return edgeColorHandler(ele);\n },\n 'line-style': function(ele)\n {\n return edgeLineTypeHandler(ele);\n },\n 'opacity': 1,\n\n }\n },\n {\n selector: 'edge[name]',\n style: {\n 'label': 'data(name)'\n }\n },\n // {\n // selector: 'edge.segments',\n // style:\n // {\n // 'curve-style': 'segments',\n // 'segment-distances': '0 100',\n // 'segment-weights': '0 1'\n // }\n // },\n\n\n\n // some style for the Edge Handles !!!\n\n {\n selector: '.eh-handle',\n style: {\n 'background-color': '#1abc9c',\n 'width': 12,\n 'height': 12,\n 'shape': 'ellipse',\n 'overlay-opacity': 0,\n 'border-width': 12, // makes the handle easier to hit\n 'border-opacity': 0\n }\n },\n\n {\n selector: '.eh-hover',\n css: {\n 'background-color': '#1abc9c'\n }\n },\n\n {\n selector: '.eh-source',\n css: {\n 'border-width': 2,\n 'border-color': '#1abc9c'\n }\n },\n\n {\n selector: '.eh-target',\n css: {\n 'border-width': 2,\n 'background-color': '#1abc9c',\n 'border-color': '#1abc9c'\n }\n },\n\n {\n selector: '.eh-preview, .eh-ghost-edge',\n css: {\n 'line-color': '#1abc9c',\n 'target-arrow-color': '#1abc9c',\n 'source-arrow-color': '#1abc9c'\n }\n },\n\n {\n selector: '.highlightedEdge',\n style:\n {\n 'width': 3.5,\n 'border-width':4,\n 'line-color' : '#1abc9c' ,\n 'target-arrow-color': '#1abc9c',\n 'arrow-scale': 2\n }\n },\n {\n selector: '.highlightedNode',\n style:\n {\n 'border-width': function(ele)\n {\n return highlightedBorderWidthFunction( ele );\n },\n 'border-color': '#1abc9c',\n 'background-color': '#fff',\n // 'shadow-color' : '#1abc9c',\n // 'background-opacity': 0.5,\n // 'shadow-opacity': 1.0\n }\n },\n {\n selector: '.invalidGene',\n style:\n {\n 'border-width': 2,\n 'border-color': '#e94332',\n 'color': '#e94332'\n }\n },\n {\n // The css properties when a node is highlighted and an invalid gene\n selector: '.invalidGeneHighlight',\n style:\n {\n 'border-width': 3,\n 'font-weight' : 'bold',\n // 'shadow-color' : '#e94332',\n // 'background-color': '#e94332',\n 'border-color': '#e94332',\n 'color': '#e94332',\n // 'shadow-opacity': 1.0,\n }\n },\n {\n selector: 'node:selected',\n style:\n {\n 'border-width': function(ele)\n {\n return selectedBorderWidthFunction( ele );\n },\n 'border-color' : '#ffc90e', /*#f1c40f'*/\n }\n },\n {\n selector: '.highlightedNode:selected, .invalidGeneHighlight:selected',\n style:\n {\n 'border-width': function(ele)\n {\n return selectedHighlightedBorderWidthFunction( ele );\n },\n }\n },\n {\n selector: 'edge:selected',\n style:\n {\n 'width' : 3,\n 'line-color' : '#ffc90e',\n 'target-arrow-color': '#ffc90e'\n }\n },\n ];\n\n\n\n var compoundPaddingFunction = function( ele )\n {\n switch (ele._private.data['type'])\n {\n case \"FAMILY\": return 5; break;\n case \"COMPLEX\": return '5'; break;\n case \"COMPARTMENT\": return 10; break;\n case \"PROCESS\": return 10; break;\n default: return 5; break;\n }\n };\n\n var contentFunction = function( ele )\n {\n if (ele._private.data.name) {\n return ele._private.data.name;\n }\n return 'newNode';\n };\n\n var vTextPositionFunction = function( ele )\n {\n switch (ele._private.data['type'])\n {\n case \"GENE\": return 'center'; break;\n case \"FAMILY\": return 'top'; break;\n case \"COMPLEX\": return 'top'; break;\n case \"COMPARTMENT\": return 'top'; break;\n default: return 'center'; break;\n }\n };\n\n var borderWidthFunction = function( ele )\n {\n switch (ele._private.data['type'])\n {\n case \"GENE\": return 1; break;\n case \"PROCESS\": return 0; break;\n case \"FAMILY\": return 2; break;\n case \"COMPARTMENT\": return 4; break;\n default: return 1; break;\n }\n };\n\n var parentBorderWidthFunction = function( ele )\n {\n switch (ele._private.data['type'])\n {\n case \"GENE\": return 1; break;\n case \"PROCESS\": return 0; break;\n case \"FAMILY\": return 2; break;\n case \"COMPLEX\": return 1; break;\n case \"COMPARTMENT\": return 4; break;\n default: return 1; break;\n }\n };\n\n var highlightedBorderWidthFunction = function( ele )\n {\n switch (ele._private.data['type'])\n {\n case \"GENE\": return 3; break;\n case \"PROCESS\": return 0; break;\n case \"FAMILY\": return 4; break;\n case \"COMPARTMENT\": return 6; break;\n default: return 3; break;\n }\n };\n\n var selectedBorderWidthFunction = function( ele )\n {\n switch (ele._private.data['type'])\n {\n case \"GENE\": return 2; break;\n case \"PROCESS\": return 0; break;\n case \"FAMILY\": return 3; break;\n case \"COMPARTMENT\": return 5; break;\n default: return 2; break;\n }\n };\n var selectedHighlightedBorderWidthFunction = function( ele )\n {\n switch (ele._private.data['type'])\n {\n case \"GENE\": return 3; break;\n case \"PROCESS\": return 0; break;\n case \"FAMILY\": return 4; break;\n case \"COMPARTMENT\": return 6; break;\n default: return 3; break;\n }\n };\n\n\n var parentNodeShapeFunc = function( ele )\n {\n switch (ele._private.data['type'])\n {\n case \"GENE\": return \"roundrectangle\"; break;\n case \"PROCESS\": return \"roundrectangle\"; break;\n case \"FAMILY\": return \"rectangle\"; break;\n case \"COMPARTMENT\": return \"roundrectangle\"; break;\n case \"COMPLEX\": return \"rectangle\"; break;\n default: return \"roundrectangle\"; break;\n }\n };\n\n var nodeBackgroundColorFunction = function( ele )\n {\n // switch (ele._private.data['type'])\n // {\n // case \"GENE\": return \"#fff\"; break;\n // case \"FAMILY\": return \"#CCCCCC\"; break;\n // case \"COMPARTMENT\": return \"#fff\"; break;\n // default: return \"#fff\"; break;\n // }\n return \"#fff\";\n };\n\n var nodeBorderColorFunction = function( ele )\n {\n switch (ele._private.data['type'])\n {\n case \"GENE\": return \"#00000a\"; break;\n case \"FAMILY\": return \"#a3a3a3\"; break;\n case \"COMPLEX\": return \"#000000\"; break;\n case \"COMPARTMENT\": return \"#000000\"; break;\n default: return \"#000000\"; break;\n }\n };\n\n var edgeColorHandler = function( ele )\n {\n // switch (ele._private.data['type']){\n // case \"ACTIVATES\": return \"#904930\"; break;\n // case \"INHIBITS\": return \"#7B7EF7\"; break;\n // case \"INDUCES\": return \"#ad47c2\"; break;\n // case \"REPRESSES\": return \"#67C1A9\"; break;\n // case \"BINDS\": return \"#67C1A9\"; break;\n // default: return \"#989898\"; break;\n // }\n return \"#1b1b1b\";\n };\n\n var edgeTargetArrowTypeHandler = function( ele )\n {\n switch (ele._private.data['type']){\n case \"ACTIVATES\": return \"triangle\"; break;\n case \"INHIBITS\": return \"tee\"; break;\n case \"INDUCES\": return \"triangle\"; break;\n case \"REPRESSES\": return \"tee\"; break;\n case \"BINDS\": return \"none\"; break;\n default: return \"none\"; break;\n }\n };\n\n var edgeLineTypeHandler = function( ele )\n {\n switch (ele._private.data['type']){\n case \"ACTIVATES\": return \"solid\"; break;\n case \"INHIBITS\": return \"solid\"; break;\n case \"INDUCES\": return \"dashed\"; break;\n case \"REPRESSES\": return \"dashed\"; break;\n case \"BINDS\": return \"solid\"; break;\n default: return \"solid\"; break;\n }\n };\n\n var nodeWFunc = function( ele )\n {\n if (ele._private.data['w'])\n {\n return ele._private.data['w'];\n }\n else\n return 0;\n };\n\n var nodeHFunc = function( ele )\n {\n if (ele._private.data['h'])\n {\n return ele._private.data['h'];\n }\n else\n return 0;\n };\n\n return styleSheet;\n})();\n","var panzoomOptions =\n{\n zoomFactor: 0.05, // zoom factor per zoom tick\n zoomDelay: 45, // how many ms between zoom ticks\n minZoom: 0.1, // min zoom level\n maxZoom: 10, // max zoom level\n fitPadding: 50, // padding when fitting\n panSpeed: 10, // how many ms in between pan ticks\n panDistance: 10, // max pan distance per tick\n panDragAreaSize: 75, // the length of the pan drag box in which the vector for panning is calculated (bigger = finer control of pan speed and direction)\n panMinPercentSpeed: 0.25, // the slowest speed we can pan by (as a percent of panSpeed)\n panInactiveArea: 8, // radius of inactive area in pan drag box\n panIndicatorMinOpacity: 0.5, // min opacity of pan indicator (the draggable nib); scales from this to 1.0\n zoomOnly: false, // a minimal version of the ui only with zooming (useful on systems with bad mousewheel resolution)\n fitSelector: undefined, // selector of elements to fit\n animateOnFit: function(){ // whether to animate on fit\n return false;\n },\n fitAnimationDuration: 1000, // duration of animation on fit\n\n // icon class names\n sliderHandleIcon: 'fa fa-minus',\n zoomInIcon: 'fa fa-plus',\n zoomOutIcon: 'fa fa-minus',\n resetIcon: 'fa fa-expand'\n};\n\nmodule.exports = panzoomOptions;\n","module.exports = require(\"cytoscape-navigator\");",";(function(){ 'use strict';\n\n var $ = typeof jQuery === typeof undefined ? null : jQuery;\n\n var register = function( cytoscape, $ ){\n \n if( !cytoscape ){ return; } // can't register if cytoscape unspecified\n \n var defaults = {\n // List of initial menu items\n menuItems: [\n /*\n {\n id: 'remove',\n content: 'remove',\n tooltipText: 'remove',\n selector: 'node, edge',\n onClickFunction: function () {\n console.log('remove element');\n },\n hasTrailingDivider: true\n },\n {\n id: 'hide',\n content: 'hide',\n tooltipText: 'remove',\n selector: 'node, edge',\n onClickFunction: function () {\n console.log('hide element');\n },\n disabled: true\n }*/\n ],\n // css classes that menu items will have\n menuItemClasses: [\n // add class names to this list\n ],\n // css classes that context menu will have\n contextMenuClasses: [\n // add class names to this list\n ]\n };\n \n var eventCyTapStart; // The event to be binded on tap start\n \n // To initialize with options.\n cytoscape('core', 'contextMenus', function (opts) {\n var cy = this;\n \n // Initilize scratch pad\n if (!cy.scratch('cycontextmenus')) {\n cy.scratch('cycontextmenus', {});\n }\n \n var options = getScratchProp('options');\n var $cxtMenu = getScratchProp('cxtMenu');\n var menuItemCSSClass = 'cy-context-menus-cxt-menuitem';\n var dividerCSSClass = 'cy-context-menus-divider';\n \n // Merge default options with the ones coming from parameter\n function extend(defaults, options) {\n var obj = {};\n\n for (var i in defaults) {\n obj[i] = defaults[i];\n }\n\n for (var i in options) {\n obj[i] = options[i];\n }\n\n return obj;\n };\n\n function getScratchProp(propname) {\n return cy.scratch('cycontextmenus')[propname];\n };\n \n function setScratchProp(propname, value) {\n cy.scratch('cycontextmenus')[propname] = value;\n };\n\n function preventDefaultContextTap() {\n $(\".cy-context-menus-cxt-menu\").contextmenu( function() {\n return false;\n });\n }\n\n // Get string representation of css classes\n function getMenuItemClassStr(classes, hasTrailingDivider) {\n var str = getClassStr(classes);\n\n str += ' ' + menuItemCSSClass;\n\n if(hasTrailingDivider) {\n str += ' ' + dividerCSSClass;\n }\n\n return str;\n }\n\n // Get string representation of css classes\n function getClassStr(classes) {\n var str = '';\n\n for( var i = 0; i < classes.length; i++ ) {\n var className = classes[i];\n str += className;\n if(i !== classes.length - 1) {\n str += ' ';\n }\n }\n\n return str;\n }\n\n function displayComponent($component) {\n $component.css('display', 'block');\n }\n\n function hideComponent($component) {\n $component.css('display', 'none');\n }\n\n function hideMenuItemComponents() {\n $cxtMenu.children().css('display', 'none');\n }\n\n function bindOnClickFunction($component, onClickFcn) {\n var callOnClickFcn;\n\n $component.on('click', callOnClickFcn = function() {\n onClickFcn(getScratchProp('currentCyEvent'));\n });\n\n $component.data('call-on-click-function', callOnClickFcn); \n }\n\n function bindCyCxttap($component, selector, coreAsWell) {\n function _cxtfcn(event) {\n setScratchProp('currentCyEvent', event);\n adjustCxtMenu(event); // adjust the position of context menu\n if ($component.data('show')) {\n // Now we have a visible element display context menu if it is not visible\n if (!$cxtMenu.is(':visible')) {\n displayComponent($cxtMenu);\n }\n // anyVisibleChild indicates if there is any visible child of context menu if not do not show the context menu\n setScratchProp('anyVisibleChild', true);// there is visible child\n displayComponent($component); // display the component\n }\n\n // If there is no visible element hide the context menu as well(If it is visible)\n if (!getScratchProp('anyVisibleChild') && $cxtMenu.is(':visible')) {\n hideComponent($cxtMenu);\n }\n }\n\n var cxtfcn;\n var cxtCoreFcn;\n\n if(coreAsWell) {\n cy.on('cxttap', cxtCoreFcn = function(event) {\n var target = event.target || event.cyTarget;\n if( target != cy ) {\n return;\n }\n\n _cxtfcn(event);\n });\n }\n\n if(selector) {\n cy.on('cxttap', selector, cxtfcn = function(event) {\n _cxtfcn(event);\n });\n }\n\n // Bind the event to menu item to be able to remove it back\n $component.data('cy-context-menus-cxtfcn', cxtfcn);\n $component.data('cy-context-menus-cxtcorefcn', cxtCoreFcn);\n }\n\n function bindCyEvents() {\n cy.on('tapstart', eventCyTapStart = function(){\n hideComponent($cxtMenu);\n setScratchProp('cxtMenuPosition', undefined);\n setScratchProp('currentCyEvent', undefined);\n });\n }\n\n function performBindings($component, onClickFcn, selector, coreAsWell) {\n bindOnClickFunction($component, onClickFcn);\n bindCyCxttap($component, selector, coreAsWell);\n }\n\n // Adjusts context menu if necessary\n function adjustCxtMenu(event) {\n var currentCxtMenuPosition = getScratchProp('cxtMenuPosition');\n var cyPos = event.position || event.cyPosition;\n\n if( currentCxtMenuPosition != cyPos ) {\n hideMenuItemComponents();\n setScratchProp('anyVisibleChild', false);// we hide all children there is no visible child remaining\n setScratchProp('cxtMenuPosition', cyPos);\n\n var containerPos = $(cy.container()).offset();\n var renderedPos = event.renderedPosition || event.cyRenderedPosition;\n\n var borderThickness = parseInt($(cy.container()).css(\"border-width\").replace(\"px\",\"\"));\n if(borderThickness > 0){\n containerPos.top += borderThickness;\n containerPos.left += borderThickness;\n }\n \n // var left = containerPos.left + renderedPos.x;\n // var top = containerPos.top + renderedPos.y;\n //$cxtMenu.css('left', left);\n //$cxtMenu.css('top', top);\n\n\n var containerHeight = $(cy.container()).innerHeight();\n var containerWidth = $(cy.container()).innerWidth(); \n\n var horizontalSplit = containerHeight/2 ;\n var verticalSplit = containerWidth/2 ;\n var windowHeight = $(window).height();\n var windowWidth = $(window).width(); \n \n \n //When user click on bottom-left part of window\n if(renderedPos.y > horizontalSplit && renderedPos.x <= verticalSplit) {\n $cxtMenu.css(\"left\", renderedPos.x + containerPos.left);\n $cxtMenu.css(\"bottom\", windowHeight - (containerPos.top + renderedPos.y));\n $cxtMenu.css(\"right\", \"auto\");\n $cxtMenu.css(\"top\", \"auto\");\n } else if(renderedPos.y > horizontalSplit && renderedPos.x > verticalSplit) {\n //When user click on bottom-right part of window\n $cxtMenu.css(\"right\", windowWidth - (containerPos.left+ renderedPos.x));\n $cxtMenu.css(\"bottom\", windowHeight - (containerPos.top + renderedPos.y));\n $cxtMenu.css(\"left\", \"auto\");\n $cxtMenu.css(\"top\", \"auto\");\n } else if(renderedPos.y <= horizontalSplit && renderedPos.x <= verticalSplit) {\n //When user click on top-left part of window\n $cxtMenu.css(\"left\", renderedPos.x + containerPos.left);\n $cxtMenu.css(\"top\", renderedPos.y + containerPos.top);\n $cxtMenu.css(\"right\", \"auto\");\n $cxtMenu.css(\"bottom\", \"auto\");\n } else {\n //When user click on top-right part of window\n $cxtMenu.css(\"right\", windowWidth - (renderedPos.x + containerPos.left));\n $cxtMenu.css(\"top\", renderedPos.y + containerPos.top);\n $cxtMenu.css(\"left\", \"auto\");\n $cxtMenu.css(\"bottom\", \"auto\");\n }\n }\n }\n\n function createAndAppendMenuItemComponents(menuItems) {\n for (var i = 0; i < menuItems.length; i++) {\n createAndAppendMenuItemComponent(menuItems[i]);\n }\n }\n\n function createAndAppendMenuItemComponent(menuItem) {\n // Create and append menu item\n var $menuItemComponent = createMenuItemComponent(menuItem);\n appendComponentToCxtMenu($menuItemComponent);\n\n performBindings($menuItemComponent, menuItem.onClickFunction, menuItem.selector, menuItem.coreAsWell);\n }//insertComponentBeforeExistingItem(component, existingItemID)\n\n function createAndInsertMenuItemComponentBeforeExistingComponent(menuItem, existingComponentID) {\n // Create and insert menu item\n var $menuItemComponent = createMenuItemComponent(menuItem);\n insertComponentBeforeExistingItem($menuItemComponent, existingComponentID);\n\n performBindings($menuItemComponent, menuItem.onClickFunction, menuItem.selector, menuItem.coreAsWell);\n }\n\n // create cxtMenu and append it to body\n function createAndAppendCxtMenuComponent() {\n var classes = getClassStr(options.contextMenuClasses);\n// classes += ' cy-context-menus-cxt-menu';\n $cxtMenu = $('
');\n $cxtMenu.addClass('cy-context-menus-cxt-menu');\n setScratchProp('cxtMenu', $cxtMenu);\n\n $('body').append($cxtMenu);\n return $cxtMenu;\n }\n\n // Creates a menu item as an html component\n function createMenuItemComponent(item) {\n var classStr = getMenuItemClassStr(options.menuItemClasses, item.hasTrailingDivider);\n var itemStr = '';\n };\n\n var $menuItemComponent = $(itemStr);\n\n $menuItemComponent.data('selector', item.selector); \n $menuItemComponent.data('on-click-function', item.onClickFunction);\n $menuItemComponent.data('show', (typeof(item.show) === 'undefined' || item.show)); \n return $menuItemComponent;\n }\n\n // Appends the given component to cxtMenu\n function appendComponentToCxtMenu(component) {\n $cxtMenu.append(component);\n bindMenuItemClickFunction(component);\n }\n\n // Insert the given component to cxtMenu just before the existing item with given ID\n function insertComponentBeforeExistingItem(component, existingItemID) {\n var $existingItem = $('#' + existingItemID);\n component.insertBefore($existingItem);\n }\n\n function destroyCxtMenu() {\n if(!getScratchProp('active')) {\n return;\n }\n\n removeAndUnbindMenuItems();\n\n cy.off('tapstart', eventCyTapStart);\n\n $cxtMenu.remove();\n $cxtMenu = undefined;\n setScratchProp($cxtMenu, undefined);\n setScratchProp('active', false);\n setScratchProp('anyVisibleChild', false);\n }\n\n function removeAndUnbindMenuItems() {\n var children = $cxtMenu.children();\n\n $(children).each(function() {\n removeAndUnbindMenuItem($(this));\n });\n }\n\n function removeAndUnbindMenuItem(itemID) {\n var $component = typeof itemID === 'string' ? $('#' + itemID) : itemID;\n var cxtfcn = $component.data('cy-context-menus-cxtfcn');\n var selector = $component.data('selector');\n var callOnClickFcn = $component.data('call-on-click-function');\n var cxtCoreFcn = $component.data('cy-context-menus-cxtcorefcn');\n\n if(cxtfcn) {\n cy.off('cxttap', selector, cxtfcn);\n }\n\n if(cxtCoreFcn) {\n cy.off('cxttap', cxtCoreFcn);\n }\n\n if(callOnClickFcn) {\n $component.off('click', callOnClickFcn);\n }\n\n $component.remove();\n }\n\n function moveBeforeOtherMenuItemComponent(componentID, existingComponentID) {\n if( componentID === existingComponentID ) {\n return;\n }\n\n var $component = $('#' + componentID).detach();\n var $existingComponent = $('#' + existingComponentID);\n\n $component.insertBefore($existingComponent);\n }\n\n function bindMenuItemClickFunction(component) {\n component.click( function() {\n hideComponent($cxtMenu);\n setScratchProp('cxtMenuPosition', undefined);\n });\n }\n\n function disableComponent(componentID) {\n $('#' + componentID).attr('disabled', true);\n }\n\n function enableComponent(componentID) {\n $('#' + componentID).attr('disabled', false);\n }\n\n function setTrailingDivider(componentID, status) {\n var $component = $('#' + componentID);\n if(status) {\n $component.addClass(dividerCSSClass);\n }\n else {\n $component.removeClass(dividerCSSClass);\n }\n }\n\n // Get an extension instance to enable users to access extension methods\n function getInstance(cy) {\n var instance = {\n // Returns whether the extension is active\n isActive: function() {\n return getScratchProp('active');\n },\n // Appends given menu item to the menu items list.\n appendMenuItem: function(item) {\n createAndAppendMenuItemComponent(item);\n return cy;\n },\n // Appends menu items in the given list to the menu items list.\n appendMenuItems: function(items) {\n createAndAppendMenuItemComponents(items);\n return cy;\n },\n // Removes the menu item with given ID.\n removeMenuItem: function(itemID) {\n removeAndUnbindMenuItem(itemID);\n return cy;\n },\n // Sets whether the menuItem with given ID will have a following divider.\n setTrailingDivider: function(itemID, status) {\n setTrailingDivider(itemID, status);\n return cy;\n },\n // Inserts given item before the existingitem.\n insertBeforeMenuItem: function(item, existingItemID) {\n createAndInsertMenuItemComponentBeforeExistingComponent(item, existingItemID);\n return cy;\n },\n // Moves the item with given ID before the existingitem.\n moveBeforeOtherMenuItem: function(itemID, existingItemID) {\n moveBeforeOtherMenuItemComponent(itemID, existingItemID);\n return cy;\n },\n // Disables the menu item with given ID.\n disableMenuItem: function(itemID) {\n disableComponent(itemID);\n return cy;\n },\n // Enables the menu item with given ID.\n enableMenuItem: function(itemID) {\n enableComponent(itemID);\n return cy;\n },\n // Disables the menu item with given ID.\n hideMenuItem: function(itemID) {\n $('#'+itemID).data('show', false);\n hideComponent($('#'+itemID));\n return cy;\n },\n // Enables the menu item with given ID.\n showMenuItem: function(itemID) {\n $('#'+itemID).data('show', true);\n displayComponent($('#'+itemID));\n return cy;\n },\n // Destroys the extension instance\n destroy: function() {\n destroyCxtMenu();\n return cy;\n }\n };\n\n return instance;\n }\n\n if ( opts !== 'get' ) {\n // merge the options with default ones\n options = extend(defaults, opts);\n setScratchProp('options', options);\n\n // Clear old context menu if needed\n if(getScratchProp('active')) {\n destroyCxtMenu();\n }\n\n setScratchProp('active', true);\n\n $cxtMenu = createAndAppendCxtMenuComponent();\n\n var menuItems = options.menuItems;\n createAndAppendMenuItemComponents(menuItems);\n\n bindCyEvents();\n preventDefaultContextTap();\n }\n \n return getInstance(this);\n });\n };\n\n if( typeof module !== 'undefined' && module.exports ){ // expose as a commonjs module\n module.exports = register;\n }\n\n if( typeof define !== 'undefined' && define.amd ){ // expose as an amd/requirejs module\n define('cytoscape-context-menus', function(){\n return register;\n });\n }\n\n if( typeof cytoscape !== 'undefined' && $ ){ // expose to global cytoscape (i.e. window.cytoscape)\n register( cytoscape, $ );\n }\n\n})();\n","module.exports = require(\"konva\");",";\n(function () {\n 'use strict';\n\n // registers the extension on a cytoscape lib ref\n var register = function (cytoscape, $) {\n\n if (!cytoscape || !$) {\n return;\n } // can't register if cytoscape unspecified\n\n var options = {\n node: {\n highlighted: {}, // styles for when nodes are highlighted.\n unhighlighted: {// styles for when nodes are unhighlighted.\n 'opacity': 0.3\n }\n },\n edge: {\n highlighted: {}, // styles for when edges are highlighted.\n unhighlighted: {// styles for when edges are unhighlighted.\n 'opacity': 0.3\n }\n },\n setVisibilityOnHide: false, // whether to set visibility on hide/show\n setDisplayOnHide: true, // whether to set display on hide/show\n zoomAnimationDuration: 1500, //default duration for zoom animation speed\n neighbor: function(node){ // return desired neighbors of tapheld node\n return false;\n },\n neighborSelectTime: 500 //ms, time to taphold to select desired neighbors \n };\n\n\n var undoRedo = require(\"./undo-redo\");\n var viewUtilities = require(\"./view-utilities\");\n var Mousetrap = require('mousetrap');\n \n cytoscape('core', 'viewUtilities', function (opts) {\n var cy = this;\n\n // If 'get' is given as the param then return the extension instance\n if (opts === 'get') {\n return getScratch(cy).instance;\n }\n\n $.extend(true, options, opts);\n\n function getScratch(eleOrCy) {\n if (!eleOrCy.scratch(\"_viewUtilities\")) {\n eleOrCy.scratch(\"_viewUtilities\", {});\n }\n\n return eleOrCy.scratch(\"_viewUtilities\");\n }\n\n if (!getScratch(cy).initialized) {\n getScratch(cy).initialized = true; \n\n // create a view utilities instance\n var instance = viewUtilities(cy, options);\n\n if (cy.undoRedo) {\n var ur = cy.undoRedo(null, true);\n undoRedo(cy, ur, instance);\n }\n\n // set the instance on the scratch pad\n getScratch(cy).instance = instance;\n\n var mt = new Mousetrap();\n var shiftKeyDown = false;\n mt.bind([\"shift\"], function () {\n shiftKeyDown = true;\n }, \"keydown\");\n mt.bind([\"shift\"], function () {\n shiftKeyDown = false;\n }, \"keyup\");\n //Select the desired neighbors after taphold-and-free \n cy.on('taphold', 'node', function(event){ \n var target = event.target || event.cyTarget;\n var tapheld = false;\n var neighborhood;\n var timeout = setTimeout(function(){ \n if(shiftKeyDown == true){\n cy.elements().unselect();\n neighborhood = options.neighbor(target);\n neighborhood.select();\n target.lock();\n tapheld = true; \n }\n }, options.neighborSelectTime - 500);\n cy.on('free', 'node', function(){\n var targetTapheld = event.target || event.cyTarget;\n if(target == targetTapheld && tapheld === true){\n tapheld = false;\n neighborhood.select();\n target.unlock();\n }\n else{\n clearTimeout(timeout);\n }\n });\n cy.on('drag', 'node', function(){\n var targetDragged = event.target || event.cyTarget; \n if(target == targetDragged && tapheld === false){\n clearTimeout(timeout);\n }\n })\n });\n }\n\n // return the instance of extension\n return getScratch(cy).instance;\n });\n\n };\n\n if (typeof module !== 'undefined' && module.exports) { // expose as a commonjs module\n module.exports = register;\n }\n\n if (typeof define !== 'undefined' && define.amd) { // expose as an amd/requirejs module\n define('cytoscape-view-utilities', function () {\n return register;\n });\n }\n\n if (typeof cytoscape !== 'undefined' && typeof $ !== \"undefined\") { // expose to global cytoscape (i.e. window.cytoscape)\n register(cytoscape, $);\n }\n\n})();\n","// Registers ur actions related to highlight\nfunction highlightUR(cy, ur, viewUtilities) {\n function getStatus(eles) {\n eles = eles ? eles : cy.elements();\n return {\n highlighteds: eles.filter(\".highlighted:visible\"),\n unhighlighteds: eles.filter(\".unhighlighted:visible\"),\n notHighlighteds: eles.filter(\":visible\").not(\".highlighted, .unhighlighted\")\n };\n }\n\n function generalUndo(args) {\n\n var current = args.current;\n var highlighteds = viewUtilities.highlight(args.highlighteds);\n var unhighlighteds = viewUtilities.unhighlight(args.unhighlighteds);\n var notHighlighteds = viewUtilities.removeHighlights(args.notHighlighteds);\n\n\n return {\n highlighteds: highlighteds,\n unhighlighteds: unhighlighteds,\n notHighlighteds: notHighlighteds,\n current: current\n };\n }\n\n function generalRedo(args) {\n\n var current = args.current;\n var highlighteds = viewUtilities.highlight(args.current.highlighteds);\n var unhighlighteds = viewUtilities.unhighlight(args.current.unhighlighteds);\n var notHighlighteds = viewUtilities.removeHighlights(args.current.notHighlighteds);\n\n return {\n highlighteds: highlighteds,\n unhighlighteds: unhighlighteds,\n notHighlighteds: notHighlighteds,\n current: current\n };\n }\n\n function generateDoFunc(func) {\n return function (eles) {\n var res = getStatus();\n\n if (eles.firstTime)\n viewUtilities[func](eles);\n else\n generalRedo(eles);\n\n res.current = getStatus();\n\n return res;\n };\n }\n\n function urRemoveHighlights(args) {\n var res = getStatus();\n\n if (args.firstTime)\n viewUtilities.removeHighlights();\n else\n generalRedo(args);\n\n res.current = getStatus();\n\n return res;\n }\n\n ur.action(\"highlightNeighbors\", generateDoFunc(\"highlightNeighbors\"), generalUndo);\n ur.action(\"highlightNeighbours\", generateDoFunc(\"highlightNeighbours\"), generalUndo);\n ur.action(\"highlight\", generateDoFunc(\"highlight\"), generalUndo);\n ur.action(\"unhighlight\", generateDoFunc(\"unhighlight\"), generalUndo);\n ur.action(\"unhighlightNeighbors\", generateDoFunc(\"unhighlightNeighbors\"), generalUndo);\n ur.action(\"unhighlightNeighbours\", generateDoFunc(\"unhighlightNeighbours\"), generalUndo);\n ur.action(\"removeHighlights\", urRemoveHighlights, generalUndo);\n}\n\n// Registers ur actions related to hide/show\nfunction hideShowUR(cy, ur, viewUtilities) {\n function urShow(eles) {\n return viewUtilities.show(eles);\n }\n\n function urHide(eles) {\n return viewUtilities.hide(eles);\n }\n\n ur.action(\"show\", urShow, urHide);\n ur.action(\"hide\", urHide, urShow);\n}\n\nmodule.exports = function (cy, ur, viewUtilities) {\n highlightUR(cy, ur, viewUtilities);\n hideShowUR(cy, ur, viewUtilities);\n};","var viewUtilities = function (cy, options) {\n\n // Set style for highlighted and unhighligthed eles\n cy\n .style()\n .selector(\"node.highlighted\")\n .css(options.node.highlighted)\n .selector(\"node.unhighlighted\")\n .css(options.node.unhighlighted)\n .selector(\"edge.highlighted\")\n .css(options.edge.highlighted)\n .selector(\"edge.unhighlighted\")\n .css(options.edge.unhighlighted)\n .update();\n\n // Helper functions for internal usage (not to be exposed)\n function highlight(eles) {\n eles.removeClass(\"unhighlighted\").addClass(\"highlighted\");\n }\n\n function getWithNeighbors(eles) {\n return eles.add(eles.descendants()).closedNeighborhood();\n }\n // the instance to be returned\n var instance = {};\n var Mousetrap = require('mousetrap');\n // Section hide-show\n\n // hide given eles\n instance.hide = function (eles) {\n eles = eles.filter(\":visible\");\n eles = eles.union(eles.connectedEdges());\n\n eles.unselect();\n\n if (options.setVisibilityOnHide) {\n eles.css('visibility', 'hidden');\n }\n\n if (options.setDisplayOnHide) {\n eles.css('display', 'none');\n }\n\n return eles;\n };\n\n // unhide given eles\n instance.show = function (eles) {\n eles = eles.not(\":visible\");\n eles = eles.union(eles.connectedEdges());\n\n eles.unselect();\n\n if (options.setVisibilityOnHide) {\n eles.css('visibility', 'visible');\n }\n\n if (options.setDisplayOnHide) {\n eles.css('display', 'element');\n }\n\n return eles;\n };\n\n // Section highlight\n\n // Highlights eles & unhighlights others at first use.\n instance.highlight = function (eles) {\n var others = cy.elements().difference(eles.union(eles.ancestors()));\n\n if (cy.$(\".highlighted:visible\").length == 0)\n this.unhighlight(others);\n\n highlight(eles); // Use the helper here\n\n return eles;\n };\n\n // Just unighlights eles.\n instance.unhighlight = function (eles) {\n eles.removeClass(\"highlighted\").addClass(\"unhighlighted\");\n };\n\n // Highlights eles' neighborhood & unhighlights others' neighborhood at first use.\n instance.highlightNeighbors = function (eles) {\n var allEles = getWithNeighbors(eles);\n\n return this.highlight(allEles);\n };\n\n // Aliases: this.highlightNeighbours()\n instance.highlightNeighbours = function (eles) {\n return this.highlightNeighbors(eles);\n };\n\n // Just unhighlights eles and their neighbors.\n instance.unhighlightNeighbors = function (eles) {\n var allEles = getWithNeighbors(eles);\n\n return this.unhighlight(allEles);\n };\n\n // Aliases: this.unhighlightNeighbours()\n instance.unhighlightNeighbours = function (eles) {\n this.unhighlightNeighbors(eles);\n };\n\n // Remove highlights & unhighlights from eles.\n // If eles is not defined considers cy.elements()\n instance.removeHighlights = function (eles) {\n if (!eles) {\n eles = cy.elements();\n }\n\n return eles\n .removeClass(\"highlighted\")\n .removeClass(\"unhighlighted\")\n .removeData(\"highlighted\"); // TODO check if remove data is needed here\n };\n\n // Indicates if the ele is highlighted\n instance.isHighlighted = function (ele) {\n return ele.is(\".highlighted:visible\") ? true : false;\n };\n\n //Zoom selected Nodes\n instance.zoomToSelected = function (eles){\n var boundingBox = eles.boundingBox();\n var diff_x = Math.abs(boundingBox.x1 - boundingBox.x2);\n var diff_y = Math.abs(boundingBox.y1 - boundingBox.y2);\n var padding;\n if( diff_x >= 200 || diff_y >= 200){\n padding = 50;\n }\n else{\n padding = (cy.width() < cy.height()) ?\n ((200 - diff_x)/2 * cy.width() / 200) : ((200 - diff_y)/2 * cy.height() / 200);\n }\n\n cy.animate({\n fit: {\n eles: eles,\n padding: padding\n }\n }, {\n duration: options.zoomAnimationDuration\n });\n return eles;\n };\n\n //Marquee Zoom\n var tabStartHandler;\n var tabEndHandler;\n\n instance.enableMarqueeZoom = function(callback){\n\n var mt = new Mousetrap();\n var shiftKeyDown = false;\n var rect_start_pos_x, rect_start_pos_y, rect_end_pos_x, rect_end_pos_y;\n //Make the cy unselectable\n cy.autounselectify(true);\n\n mt.bind([\"shift\"], function() {\n shiftKeyDown = true;\n }, \"keydown\");\n\n mt.bind([\"shift\"], function(){\n shiftKeyDown = false;\n }, \"keyup\");\n\n cy.one('tapstart', tabStartHandler = function(event){\n if( shiftKeyDown == true){\n rect_start_pos_x = event.position.x;\n rect_start_pos_y = event.position.y;\n rect_end_pos_x = undefined;\n }\n });\n cy.one('tapend', tabEndHandler = function(event){\n rect_end_pos_x = event.position.x;\n rect_end_pos_y = event.position.y;\n //check whether corners of rectangle is undefined\n //abort marquee zoom if one corner is undefined\n if( rect_start_pos_x == undefined || rect_end_pos_x == undefined){\n cy.autounselectify(false);\n if(callback){\n callback();\n }\n return;\n }\n //Reoder rectangle positions\n //Top left of the rectangle (rect_start_pos_x, rect_start_pos_y)\n //right bottom of the rectangle (rect_end_pos_x, rect_end_pos_y)\n if(rect_start_pos_x > rect_end_pos_x){\n var temp = rect_start_pos_x;\n rect_start_pos_x = rect_end_pos_x;\n rect_end_pos_x = temp;\n }\n if(rect_start_pos_y > rect_end_pos_y){\n var temp = rect_start_pos_y;\n rect_start_pos_y = rect_end_pos_y;\n rect_end_pos_y = temp;\n }\n\n //Extend sides of selected rectangle to 200px if less than 100px\n if(rect_end_pos_x - rect_start_pos_x < 200){\n var extendPx = (200 - (rect_end_pos_x - rect_start_pos_x)) / 2;\n rect_start_pos_x -= extendPx;\n rect_end_pos_x += extendPx;\n }\n if(rect_end_pos_y - rect_start_pos_y < 200){\n var extendPx = (200 - (rect_end_pos_y - rect_start_pos_y)) / 2;\n rect_start_pos_y -= extendPx;\n rect_end_pos_y += extendPx;\n }\n\n //Check whether rectangle intersects with bounding box of the graph\n //if not abort marquee zoom\n if((rect_start_pos_x > cy.elements().boundingBox().x2)\n ||(rect_end_pos_x < cy.elements().boundingBox().x1)\n ||(rect_start_pos_y > cy.elements().boundingBox().y2)\n ||(rect_end_pos_y < cy.elements().boundingBox().y1)){\n cy.autounselectify(false);\n if(callback){\n callback();\n }\n return;\n }\n\n //Calculate zoom level\n var zoomLevel = Math.min( cy.width()/ ( Math.abs(rect_end_pos_x- rect_start_pos_x)),\n cy.height() / Math.abs( rect_end_pos_y - rect_start_pos_y));\n\n var diff_x = cy.width() / 2 - (cy.pan().x + zoomLevel * (rect_start_pos_x + rect_end_pos_x) / 2);\n var diff_y = cy.height() / 2 - (cy.pan().y + zoomLevel * (rect_start_pos_y + rect_end_pos_y) / 2);\n\n cy.animate({\n panBy : {x: diff_x, y: diff_y},\n zoom : zoomLevel,\n duration: options.zoomAnimationDuration,\n complete: function(){\n if (callback) {\n callback();\n }\n cy.autounselectify(false);\n }\n });\n });\n };\n\n instance.disableMarqueeZoom = function(){\n cy.off('tapstart', tabStartHandler );\n cy.off('tapend', tabEndHandler);\n cy.autounselectify(false);\n };\n\n // return the instance\n return instance;\n};\n\nmodule.exports = viewUtilities;\n","module.exports = require(\"cytoscape-grid-guide\");","module.exports = require(\"cytoscape-qtip\");","// extracted by mini-css-extract-plugin","module.exports = require(\"@datastructures-js/max-heap\");","import { IPathwayInfo } from \"../managers/FileOperationsManager\";\n\nexport default class SaveLoadUtility{\n //Exports given json graph(based on cy.export()) into a string\n static exportGraph(pathwayDetails: IPathwayInfo, cy, edgeEditing, graphJSON: any)\n {\n var returnString = pathwayDetails.pathwayTitle + '\\n\\n';\n returnString += pathwayDetails.pathwayDetails +'\\n\\n';\n\n //Get nodes and edges\n var nodes = graphJSON.elements.nodes;\n // var edges = pathwayDetails.graphJSON.elements.edges;\n var edges = cy.edges();\n\n //Prepare Meta Line\n returnString += '--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY\\tWIDTH\\tHEIGHT--'+'\\n';\n\n if (nodes)\n {\n for (let i = 0; i < nodes.length; i++)\n {\n returnString += this.exportNode(nodes[i]);\n }\n }\n\n //Put a blank line between nodes and edges\n returnString += '\\n';\n returnString += '--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\\tINTERACTION_PUBMED_ID\\tEDGE_NAME\\tEDGE_BENDS\\n';\n\n if (edges) {\n //Write edges\n for (let i = 0; i < edges.length; i++)\n {\n var edgeID = edges[i].data('id');\n var edgeType = edges[i].data('type');\n var source = edges[i].data('source');\n var target = edges[i].data('target');\n var pubmedIDs = edges[i].data('pubmedIDs');\n var pubmedString = \"\";\n var edgeName = (edges[i].data('name')) ? edges[i].data('name') : \"\";\n\n var numberOfBendPoints = 0;\n if (edgeEditing.getSegmentPoints(edges[i]) !== undefined)\n numberOfBendPoints = edgeEditing.getSegmentPoints(edges[i]).length/2;\n var bendPointPositions = \"\";\n for (var j = 0; j < numberOfBendPoints; j++)\n {\n bendPointPositions += \"(\" + edgeEditing.getSegmentPoints(edges[i])[2*j] + \";\" +\n edgeEditing.getSegmentPoints(edges[i])[2*j+1] + \")\";\n }\n\n if (pubmedIDs != undefined) {\n for (var j = 0; j < pubmedIDs.length; j++)\n {\n pubmedString += pubmedIDs[j];\n if (j != pubmedIDs.length - 1)\n pubmedString += \";\"\n }\n }\n\n returnString += edgeID + '\\t' +\n source + '\\t' +\n target + '\\t' +\n edgeType + '\\t' +\n pubmedString + '\\t' +\n edgeName + '\\t' +\n bendPointPositions + '\\n';\n }\n }\n\n //Finally return a string that includes whole graph lovely and peacefully :)\n return returnString;\n }\n static exportAsSIFNX(pathwayDetails: any, graphJSON: any)\n {\n let returnString = \"\";\n\n //Get nodes and edges\n const nodes = graphJSON.elements.nodes;\n const edges = graphJSON.elements.edges;\n const nodeMap = {};\n //Put a blank line between nodes and edges\n returnString += '\\n';\n returnString += 'PARTICIPANT\\tPARTICIPANT_TYPE\\tPARENT_ID\\tPOSX\\tPOSY\\tWIDTH\\tHEIGHT'+'\\n';\n\n if (nodes)\n {\n for (var i = 0; i < nodes.length; i++)\n {\n returnString += this.exportNode(nodes[i]);\n\n nodeMap[nodes[i].data.id] = nodes[i];\n }\n }\n\n //Put a blank line between nodes and edges\n returnString += '\\n';\n returnString += 'PARTICIPANT_A\\tPARTICIPANT_B\\tTYPE\\tPUBMED_IDS\\n';\n\n \n if (edges) {\n //Write edges\n for (var i = 0; i < edges.length; i++)\n {\n var edgeType = edges[i].data.type;\n var source = edges[i].data.source;\n var target = edges[i].data.target;\n var edgeName = edges[i].data.name;\n var pubmedIDs = edges[i].data.pubmedIDs;\n var pubmedString = \"\";\n\n if (pubmedIDs != undefined) {\n for (var j = 0; j < pubmedIDs.length; j++)\n {\n pubmedString += pubmedIDs[j];\n if (j != pubmedIDs.length - 1)\n pubmedString += \";\"\n }\n }\n\n returnString += nodeMap[source].data.name + '\\t' +\n nodeMap[target].data.name + '\\t' +\n edgeType + '\\t' +\n pubmedString + '\\t' +\n edgeName + '\\n';\n }\n }\n\n //Finally return a string that includes whole graph lovely and peacefully :)\n return returnString;\n }\n static exportNode(node)\n {\n //Node specific data fields\n var nodeName = node.data.name;\n var parentID = node.data.parent;\n var nodeID = node.data.id;\n var pos = node.position;\n var nodeType = node.data.type;\n var nodeW = node.data.w;\n var nodeH = node.data.h;\n\n //Check if node has a parent, if not set parent id -1\n if (node.data.parent)\n {\n parentID = node.data.parent;\n }\n else\n {\n parentID = -1;\n }\n\n // Write a line for a node\n return nodeName + '\\t' +\n nodeID + '\\t' +\n nodeType + '\\t' +\n parentID + '\\t' +\n parseInt(pos.x) + '\\t' +\n parseInt(pos.y) + '\\t' +\n nodeW + '\\t' +\n nodeH + '\\n';\n }\n static parseGraph(graph, isArray) {\n\n const allEles = [];\n const nodes = [];\n const edges = [];\n\n // By lines\n // Match all new line character representations\n var seperator = /\\r?\\n|\\r/;\n var lines = (isArray) ? graph : graph.split(seperator);\n var edgesStartIndex = -1;\n var title = lines[0];\n var description = lines[2];\n\n // In old version description used to expand in multiple lines\n // graphDataIndex holds the line index where the first --NODE_NAME occurs and is used later to load nodes\n let graphDataIndex = 3;\n let isFound = false;\n while (graphDataIndex < lines.length) {\n if (lines[graphDataIndex].includes(\"--NODE_NAME\")) {\n isFound = true;\n break;\n }\n description += \"\\n\" + lines[graphDataIndex];\n graphDataIndex++;\n }\n graphDataIndex++;\n // TODO AMENDMENT\n if(!isFound){\n graphDataIndex = 2;\n }\n //TODO Legacy pathways workaround\n if (lines[0].includes(\"--NODE_NAME\")) {\n graphDataIndex = 1;\n title = \"New Pathway\";\n description = \"\";\n }\n\n // start from first line skip node meta data\n for (var i = graphDataIndex; i < lines.length; i++) {\n // If we encounter a blank line, that means we need to parse edges from now on !\n // so skip blank line and edge meta line\n if (lines[i].length == 0 || lines[i] === \"\") {\n edgesStartIndex = i + 2;\n break;\n }\n\n //Fetch a line for nodes\n var lineData = lines[i].split('\\t');\n var nodeName = lineData[0];\n var nodeID = lineData[1];\n var nodeType = lineData[2];\n var parentID = lineData[3];\n var posX = (lineData.length > 4) ? lineData[4] : \"0\";\n var posY = (lineData.length > 5) ? lineData[5] : \"0\";\n var nodeW = (lineData.length > 7) ? lineData[6] : (nodeType === 'PROCESS') ? (nodeName.length * 6 + 24) : \"150\";\n var nodeH = (lineData.length > 7) ? lineData[7] : (nodeType === 'PROCESS') ? \"24\" : \"52\";\n\n if(nodeName === \" \" || nodeName === \"\"){\n //nodeName = \"No Name \" + (i + 1);\n }\n\n\n var newNode = {\n group: 'nodes',\n data:\n {\n id: nodeID,\n name: nodeName,\n type: nodeType,\n w: nodeW,\n h: nodeH,\n parent: -1\n },\n position:\n {\n x: parseInt(posX),\n y: parseInt(posY)\n }\n };\n\n if (parentID != '-1') {\n newNode.data.parent = parentID;\n }\n nodes.push(newNode);\n }\n //Read edges\n for (let i = edgesStartIndex; i < lines.length; i++) {\n //If we reach EOF we break loop\n if (lines[i].length == 0) {\n break;\n }\n\n var lineData = lines[i].split('\\t');\n var edgeID = lineData[0];\n var edgeSource = lineData[1];\n var edgeTarget = lineData[2];\n var edgeType = lineData[3];\n var pubmedIDs = (lineData.length > 4) ? lineData[4].split(';') : [];\n var label = (lineData.length > 5) ? lineData[5] : '';\n var bendPoints = (lineData.length > 6) ? lineData[6] : '';\n\n var bendPointPositions = [];\n if (bendPoints) {\n var bendPair = bendPoints.split(')'); //The last element of bendPair array is \"\"\n for (var j = 0; j < bendPair.length - 1; j++) {\n var separatorIndex = bendPair[j].indexOf(\";\");\n var x = bendPair[j].substring(1, separatorIndex);\n var y = bendPair[j].substring(separatorIndex + 1, bendPair[j].length);\n bendPointPositions.push({x: parseFloat(x), y: parseFloat(y)});\n }\n }\n\n const newEdge = {\n group: 'edges', data:\n {\n id: edgeID,//((isFound) ? edgeID : i - edgesStartIndex),\n type: edgeType,//((isFound) ? edgeType : edgeTarget),\n source: edgeSource,//((isFound) ? edgeSource : edgeID),\n target: edgeTarget,//((isFound) ? edgeTarget : edgeSource),\n pubmedIDs: pubmedIDs,\n name: label,\n bendPointPositions: bendPointPositions/*[{x:100,y:100}]*/\n }\n };\n edges.push(newEdge);\n }\n // edgeEditing.initBendPoints(cy.edges());\n return {title: title, description: description, nodes: nodes, edges: edges};\n }\n}\n","import { saveAs } from 'file-saver';\nimport { action, computed, makeObservable, observable } from 'mobx';\nimport SaveLoadUtility from '../utils/SaveLoadUtility';\nimport EditorActionsManager from './EditorActionsManager.js';\n\nexport interface IPathwayInfo{\n fileName: string;\n pathwayTitle: string;\n pathwayDetails: string;\n}\n\nexport default class FileOperationsManager{\n\n @observable\n pathwayInfo: IPathwayInfo;\n\n constructor(){\n makeObservable(this);\n this.pathwayInfo = {pathwayTitle: \"New Pathway\", pathwayDetails: \"\", fileName: \"pathway.txt\"};\n }\n\n\n @computed get\n getPathwayInfo(){\n return this.pathwayInfo;\n }\n\n @action\n setPathwayInfo(other: IPathwayInfo){\n this.pathwayInfo = other;\n }\n \n // see http://stackoverflow.com/questions/16245767/creating-a-blob-from-a-base64-string-in-javascript\n b64toBlob(b64Data, contentType, sliceSize = 512)\n {\n contentType = contentType || '';\n\n var byteCharacters = atob(b64Data);\n var byteArrays = [];\n\n for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {\n var slice = byteCharacters.slice(offset, offset + sliceSize);\n\n var byteNumbers = new Array(slice.length);\n for (var i = 0; i < slice.length; i++) {\n byteNumbers[i] = slice.charCodeAt(i);\n }\n\n var byteArray = new Uint8Array(byteNumbers);\n\n byteArrays.push(byteArray);\n }\n\n var blob = new Blob(byteArrays, {type: contentType});\n return blob;\n };\n\n saveAsJPEG(cy: any)\n {\n // var fileName = getFileName();\n const graphData = cy.jpeg();\n // this is to remove the beginning of the pngContent: data:img/png;base64,\n const b64data = graphData.substr(graphData.indexOf(\",\") + 1);\n const imageData = this.b64toBlob(b64data, \"image/jpeg\");\n const blob = new Blob([imageData]);\n saveAs(blob, \"pathway.jpg\");\n };\n\n saveAsSVG(editor: EditorActionsManager){\n const returnString: any = editor.exportSVG();\n const fileName = 'pathway.svg';\n const blob = new Blob([returnString], {type: \"text/plain;charset=utf-8\"});\n saveAs(blob, fileName);\n }\n\n saveAsPNG(cy: any)\n {\n // var fileName = getFileName();\n const graphData = cy.png();\n // this is to remove the beginning of the pngContent: data:img/png;base64,\n const b64data = graphData.substr(graphData.indexOf(\",\") + 1);\n const imageData = this.b64toBlob(b64data, \"image/png\");\n const blob = new Blob([imageData]);\n saveAs(blob, \"pathway.png\");\n };\n \n\n saveGraph(isSIFNX: boolean, editor: EditorActionsManager)\n {\n const pathwayData = this.pathwayInfo;\n const returnString = (isSIFNX) ? SaveLoadUtility.exportAsSIFNX(pathwayData, editor.cy.json()):\n SaveLoadUtility.exportGraph(pathwayData, editor.cy, editor.edgeEditing, editor.cy.json());\n const blob = new Blob([returnString], {type: \"text/plain;charset=utf-8\"});\n saveAs(blob, pathwayData.fileName);\n };\n}","import _ from \"lodash\";\n\nexport default class GridOptionsManager\n{\n\n static defaultGridGuideOptions = \n {\n // On/Off Modules\n /* From the following four snap options, at most one should be true at a given time */\n snapToGridOnRelease: false, // Snap to grid on release\n snapToGridDuringDrag: false, // Snap to grid during drag\n snapToAlignmentLocationOnRelease: false, // Snap to alignment location on release\n snapToAlignmentLocationDuringDrag: false, // Snap to alignment location during drag\n distributionGuidelines: false, // Distribution guidelines\n geometricGuideline: false, // Geometric guidelines\n initPosAlignment: false, // Guideline to initial mouse position\n centerToEdgeAlignment: false, // Center to edge alignment\n resize: false, // Adjust node sizes to cell sizes\n parentPadding: false, // Adjust parent sizes to cell sizes by padding\n drawGrid: false, // Draw grid background\n\n // General\n gridSpacing: 20, // Distance between the lines of the grid.\n\n // Draw Grid\n zoomDash: true, // Determines whether the size of the dashes should change when the drawing is zoomed in and out if grid is drawn.\n panGrid: true, // Determines whether the grid should move then the user moves the graph if grid is drawn.\n gridStackOrder: -1, // Namely z-index\n gridColor: '#dedede', // Color of grid lines\n lineWidth: 1.0, // Width of grid lines\n\n // Guidelines\n guidelinesStackOrder: 4, // z-index of guidelines\n guidelinesTolerance: 5.00, // Tolerance distance for rendered positions of nodes' interaction.\n guidelinesStyle: { // Set ctx properties of line. Properties are here:\n strokeStyle: \"#4286f4\", // color of geometric guidelines\n geometricGuidelineRange: 750, // range of geometric guidelines\n range: 500, // max range of distribution guidelines\n minDistRange: 10, // min range for distribution guidelines\n distGuidelineOffset: 10, // shift amount of distribution guidelines\n horizontalDistColor: \"#4286f4\", // color of horizontal distribution alignment\n verticalDistColor: \"#4286f4\", // color of vertical distribution alignment\n initPosAlignmentColor: \"#34495E\", // color of alignment to initial mouse location\n lineDash: [6, 8], // line style of geometric guidelines\n horizontalDistLine: [0, 0], // line style of horizontal distribution guidelines\n verticalDistLine: [0, 0], // line style of vertical distribution guidelines\n initPosAlignmentLine: [0, 0], // line style of alignment to initial mouse position\n },\n\n // Parent Padding\n parentSpacing: -1 // -1 to set paddings of parents to gridSpacing\n };\n currentProperties: any;\n cy: any;\n constructor(cy: any)\n {\n this.cy = cy;\n\n this.currentProperties = {};\n this.changeParameters(GridOptionsManager.defaultGridGuideOptions);\n\n }\n\n changeParameters(params)\n {\n this.currentProperties = _.clone(params);\n this.refreshGridOptionsExtension();\n }\n\n getCurrentOptions()\n {\n return this.currentProperties;\n }\n\n getDefaultOptions()\n {\n return GridOptionsManager.defaultGridGuideOptions;\n }\n\n setSnapToGuidelines(state)\n {\n this.currentProperties.geometricGuideline = state;\n this.currentProperties.snapToAlignmentLocationDuringDrag = state;\n this.currentProperties.distributionGuidelines = state;\n this.refreshGridOptionsExtension();\n //this.appManager.gridOptionsView.changeParameters();\n }\n\n setShowGrid(state)\n {\n this.currentProperties.drawGrid = state;\n this.currentProperties.snapToGridDuringDrag = state;\n this.refreshGridOptionsExtension();\n //window.appManager.gridOptionsView.changeParameters();\n }\n\n refreshGridOptionsExtension()\n {\n this.cy.gridGuide(this.currentProperties);\n }\n\n //TODO expose individual functions related for changing parameters from toolbar here\n\n}\n","import EditorActionsManager from \"./EditorActionsManager\";\n\nexport default class ViewOperationsManager{\n movedNodes: any[];\n editor: EditorActionsManager;\n cy: any;\n\n constructor(editor: EditorActionsManager,cy: any)\n {\n this.cy = cy;\n this.editor = editor;\n this.movedNodes = [];\n }\n\n //TODO use align function from cytoscape.js-grid-guide extension\n handleNodeAlignment(param)\n {\n var tmpNodes = this.editor.selectedNodeStack;\n var nodes = this.cy.collection();\n var nodeMap = {};\n this.movedNodes = [];\n\n for (const key in tmpNodes)\n {\n nodes = nodes.add(tmpNodes[key]);\n }\n\n nodes.forEach(function(node)\n {\n if (node.isParent())\n {\n nodeMap[node.id()] = node;\n }\n });\n\n\n if (nodes.length > 0)\n {\n var firstSelected = nodes[0];\n var firstBbox = firstSelected.boundingBox();\n //OuterHeight variable added due to miscalculation of boundingBox function in pathwaymapper\n var firstOuterHeight = firstSelected.outerHeight();\n var self = this;\n nodes.forEach(function(node,index)\n {\n if (index == 0)\n {\n return ;\n }\n\n //If parent of selected node is in selection do nothing !\n if (nodeMap[node.parent().id()] == null)\n {\n var newPosition = self.calculateNewPosition(param, node, firstBbox, firstOuterHeight);\n //Recursively traverse leaf nodes\n self.changePosition(node,0,0,newPosition);\n }\n });\n this.editor.handleChangePositionByAlignment(self.movedNodes);\n }\n }\n\n /*\n Determine new position according to the alignment\n node that node.position works on center positions thats why all calculations\n are performed accordingly\n */\n calculateNewPosition(param, node, referenceBbox, referenceOuterHeight)\n {\n var currentPos = node.position();\n var currentBbox = node.boundingBox();\n var newPosition;\n //This parameter is used to move the compounds less upwards when they contain label\n var moveParam = node.isParent() ? node.outerHeight() - ((currentBbox.h - node.outerHeight())/2) - ((node.outerHeight() - node.height())/2) : node.height();\n //This param is used only when the node is parent, for simple nodes is 0\n var labelHeight = node.isParent()? currentBbox.h - node.outerHeight(): 0;\n\n if (param === 'vLeft')\n {\n newPosition = {x: referenceBbox.x1+currentBbox.w/2, y: currentPos.y};\n }\n else if (param === 'vCen')\n {\n newPosition = {x: referenceBbox.x1+referenceBbox.w/2, y: currentPos.y};\n }\n else if (param === 'vRight')\n {\n newPosition = {x: referenceBbox.x2-currentBbox.w/2, y: currentPos.y};\n }\n else if (param === 'hTop')\n {\n newPosition = {x: currentPos.x, y: referenceBbox.y1 + currentBbox.h/2};\n }\n //Checks for the case where compounds don't have names (name isn't taken in consideration in that case)\n else if (param === 'hMid' && node.isParent() && node.data('name') == \"\")\n {\n newPosition = {x: currentPos.x, y: referenceBbox.y1 + referenceBbox.h/2};\n }\n else if (param === 'hMid' )\n {\n newPosition = {x: currentPos.x, y: referenceBbox.y1 + referenceOuterHeight/2 + labelHeight/2};\n }\n //Checks for the case where compounds don't have names (name isn't taken in consideration in that case)\n else if (param === 'hBot' && node.isParent() && node.data('name') == \"\")\n {\n newPosition = {x: currentPos.x, y: referenceBbox.y2 - currentBbox.h/2};\n }\n else if (param === 'hBot')\n {\n newPosition = {x: currentPos.x, y: referenceBbox.y1 + referenceOuterHeight - moveParam/2};\n }\n else {\n console.log('Error: wrong alignment name ' + param);\n return;\n }\n\n return newPosition;\n }\n\n //Recursively move leaf nodes\n changePosition(node, dx, dy, newPos)\n {\n if (node.isParent())\n {\n var childNodes = node.children();\n var parentBbox = node.boundingBox();\n var self = this;\n childNodes.forEach(function(childNode, index)\n {\n var childBbox = childNode.boundingBox();\n var _dx = -(parentBbox.x1 - childBbox.x1)-parentBbox.w/2+childBbox.w/2;\n var _dy = -(parentBbox.y1 - childBbox.y1)-parentBbox.h/2+childBbox.h/2;\n\n //If further compound node is found, set position accordingly\n if (childNode.isParent())\n {\n self.changePosition(childNode, 0, 0, {x: newPos.x+_dx, y:newPos.y+_dy});\n }\n else\n {\n self.changePosition(childNode, _dx, _dy, newPos);\n }\n\n });\n }\n else\n {\n //Move locally and let editor actions manager know a move happened\n //If in collaborative mode editor actions manager will update collaborative model\n var position =\n {\n x: newPos.x+dx,\n y: newPos.y+dy\n };\n\n this.movedNodes.push({node: node, nextPosition: position, oldPosition: null});\n }\n }\n\n}\n","import React from 'react';\nimport { Modal } from 'react-bootstrap';\nimport { EModalType } from '../ui/react-pathway-mapper';\ninterface IAboutModalProps{\n isModalShown: boolean;\n handleClose: Function;\n}\n\nexport default class AboutModal extends React.Component {\n\n constructor(props: IAboutModalProps){\n super(props);\n }\n\n render(){\n\n\n return(\n \n {this.props.handleClose(EModalType.ABOUT)}}\n >\n \n About\n \n \n

PathwayMapper 2.0

\n
\n \"\"\n
\n
\n \"\"\n
\n
\n

i-Vis information Visualization Lab

\n

Bilkent University, Ankara, Turkey

\n
\n
\n

Memorial Sloan-Kettering Cancer Center

\n

New York, USA

\n
\n
\n \n https://github.com/iVis-at-Bilkent/pathway-mapper\n \n \n\n )\n\n\n }\n\n}\n","import { shapeToSvg } from 'oncoprintjs';\nimport React from 'react';\nimport { Modal } from 'react-bootstrap';\n// @ts-ignore\nimport openImage from \"../images/toolbar/edit.svg\";\n// @ts-ignore\nimport layoutImage from \"../images/toolbar/layout-cose.svg\";\n// @ts-ignore\nimport savePNGImage from \"../images/toolbar/save_png.svg\";\n// @ts-ignore\nimport saveSVGImage from \"../images/toolbar/save_svg.svg\";\nimport { EModalType } from '../ui/react-pathway-mapper';\n// @ts-ignore\nconst addSelImage = require(\"../images/toolbar/add-selected.svg\");\n// @ts-ignore\nconst addAllImage = require(\"../images/toolbar/add-all.svg\");\n\n\ninterface ICBioHelpModalProps{\n isModalShown: boolean;\n handleClose: (modalId: EModalType) => void;\n patientView ?: boolean;\n}\n\n// https://github.com/cBioPortal/cbioportal-frontend/blob/29a93c5e992ca1affd3d027355015164ae3602bd/src/shared/lib/Colors.ts\nconst CNA_COLOR_AMP = '#ff0000';\nconst CNA_COLOR_HOMDEL = '#0000ff';\nconst DEFAULT_GREY = '#bebebe';\nconst MUT_COLOR_MISSENSE = '#008000';\nconst MUT_COLOR_MISSENSE_PASSENGER = '#53D400';\nconst MUT_COLOR_INFRAME = '#993404';\nconst MUT_COLOR_INFRAME_PASSENGER = '#a68028';\nconst MUT_COLOR_TRUNC = '#000000';\nconst MUT_COLOR_TRUNC_PASSENGER = '#708090';\nconst MUT_COLOR_FUSION = '#8B00C9';\nconst MUT_COLOR_PROMOTER = '#00B7CE';\nconst MUT_COLOR_OTHER = '#cf58bc';\nconst MUT_COLOR_GERMLINE = '#FFFFFF';\n\n// always used shape\nconst defaultShape = {\n type: 'rectangle',\n fill: DEFAULT_GREY,\n x: 0,\n y: 0,\n width: 6,\n height: 20,\n stroke: 'rgba(0,0,0,0)',\n 'stroke-width': 0\n};\n\nconst labels = [\n 'Amplification',\n 'Deep Deletion',\n 'Fusion',\n 'Germline Mutation',\n 'Missense Mutation (putative driver)',\n 'Missense Mutation (unknown significance)',\n 'Other Mutation',\n 'Promoter Mutation',\n 'Truncating Mutation (putative driver)',\n 'Truncating Mutation (unknown significance)',\n 'Inframe Mutation (putative driver)',\n 'Inframe Mutation (unknown significance)'\n];\n\n// conditional shapes\nvar shapeBank = [\n {\n type: 'rectangle',\n fill: CNA_COLOR_AMP,\n x: 0,\n y: 0,\n width: 6,\n height: 20\n },\n {\n type: 'rectangle',\n fill: CNA_COLOR_HOMDEL,\n x: 0,\n y: 0,\n width: 6,\n height: 20\n },\n {\n type: 'rectangle',\n fill: MUT_COLOR_FUSION,\n x: 0,\n y: 4,\n width: 6,\n height: 12\n },\n {\n type: 'rectangle',\n fill: MUT_COLOR_GERMLINE,\n x: 0,\n y: 8.75,\n width: 6,\n height: 1.6\n },\n {\n type: 'rectangle',\n fill: MUT_COLOR_MISSENSE,\n x: 0,\n y: 6.66,\n width: 6,\n height: 6.66\n },\n {\n type: 'rectangle',\n fill: MUT_COLOR_MISSENSE_PASSENGER,\n x: 0,\n y: 6.66,\n width: 6,\n height: 6.66\n },\n {\n type: 'rectangle',\n fill: MUT_COLOR_OTHER,\n x: 0,\n y: 6.66,\n width: 6,\n height: 6.66\n },\n {\n type: 'rectangle',\n fill: MUT_COLOR_PROMOTER,\n x: 0,\n y: 6.66,\n width: 6,\n height: 6.66\n },\n {\n type: 'rectangle',\n fill: MUT_COLOR_TRUNC,\n x: 0,\n y: 6.66,\n width: 6,\n height: 6.66\n },\n {\n type: 'rectangle',\n fill: MUT_COLOR_TRUNC_PASSENGER,\n x: 0,\n y: 6.66,\n width: 6,\n height: 6.66\n },\n {\n type: 'rectangle',\n fill: MUT_COLOR_INFRAME,\n x: 0,\n y: 6.66,\n width: 6,\n height: 6.66\n },\n {\n type: 'rectangle',\n fill: MUT_COLOR_INFRAME_PASSENGER,\n x: 0,\n y: 6.66,\n width: 6,\n height: 6.66\n },\n];\n\nexport default class CBioHelpModal extends React.Component{\n\n\n constructor(props: ICBioHelpModalProps){\n super(props);\n }\n\n generateOncoprintLegend() {\n const svgNameSpace = 'http://www.w3.org/2000/svg'\n const svgElement = document.createElementNS(svgNameSpace, 'svg')\n\n const legendEleWidth = 280\n \n const cellWidth = 6\n const cellHeight = 23\n const cellVerticalPadding = 15\n const cellMarginRight = cellWidth + 3\n\n shapeBank.forEach((shape, index) => {\n const offsetX = (index % 3) * (legendEleWidth)\n const textOffsetX = offsetX + cellMarginRight\n const offsetY = Math.floor(index / 3) * (cellHeight + cellVerticalPadding)\n const textOffsetY = offsetY + 15\n const g = document.createElementNS(svgNameSpace, 'g')\n if (!shape[\"stroke\"]) {\n shape[\"stroke\"] = 'rgba(0,0,0,0)';\n shape[\"stroke-width\"] = 0;\n }\n g.appendChild(shapeToSvg(defaultShape, offsetX, offsetY))\n g.appendChild(shapeToSvg(shape, offsetX, offsetY))\n \n const text = document.createElementNS(svgNameSpace, 'text');\n text.setAttributeNS(null, 'x', textOffsetX.toString());\n text.setAttributeNS(null, 'y', textOffsetY.toString());\n text.setAttributeNS(null, 'font-size', '12');\n text.setAttributeNS(null, 'font-family', 'Arial');\n var textNode = document.createTextNode(labels[index]);\n text.appendChild(textNode)\n\n g.appendChild(text);\n svgElement.appendChild(g)\n });\n\n svgElement.setAttribute(\n 'width', '840')\n svgElement.setAttribute(\n 'height','175')\n svgElement.style.paddingTop = '20px'\n // This is important you need to include this to succesfully render in cytoscape.js!\n svgElement.setAttribute('xmlns', svgNameSpace)\n \n return svgElement\n }\n\n render(){\n\n const legendPadding = '45px';\n\n return( \n {this.props.handleClose(EModalType.CHELP)}}>\n \n PathwayMapper cBioPortal Edition 2.1\n \n {(!this.props.patientView &&\n \n

\n PathwayMapper shows you your genes of interest with the alteration frequencies of selected genetic profiles of the chosen study overlaid on a TCGA pathway using a white to red color scale (the more frequently altered a gene is, the more red it's shown). All available TCGA pathways are ranked with the aim to choose the pathway that matches your interest the most. By default we display the pathway with highest ranking with the default ranking options but you may look at your genes of interest in the context of other pathways as well by choosing from the pathway table. \n
\n
\n Refer to the documentation here for the notation used.\n
\n
\n To search for a particular pathway of your interest, use the search field on top of the pathway table. To switch to another pathway, click on the button in the associated row of the pathway table. Ranking criteria might be changed by changing the options at the bottom of the table. \n
\n
\n The buttons on top of the pathway are:\n

    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    Save as PNG
    Save as SVG
    Perform layout: Layout is recalculated taking current node positions into account
    Add selected genes to query: You may select additional genes from the pathway by left clicking (Shift + left click to add more genes)
    Add all valid genes to query: All valid gene symbols will be added to the query; others will be ignored
    Edit pathway: Edit both the topology and the geometry of the current pathway with the full blown PathwayMapper editor
    \n
\n

\n
)\n },\n {(this.props.patientView &&\n \n

\n PathwayMapper shows you your genes of interest with the mutation types, copy number alterations and fusions of selected genetic profiles of the chosen study overlaid on a TCGA pathway using the OncoPrint color scheme. All available TCGA pathways are ranked with the aim to choose the pathway that matches your interest the most. By default we display the pathway with the highest number of genes of interest matching the ones in a pathway but you may look at your genes of interest in the context of other pathways as well by choosing from the pathway table. \n
\n
\n Refer to the documentation here for the notation used.\n
\n
\n Genetic alteration legend:\n
\n

\n
\n

Putative driver and unknown significance annotations are based on data from OncoKB and CancerHotspots.org.

\n
\n To search for a particular pathway of your interest, use the search field on top of the pathway table. To switch to another pathway, click on the button in the associated row of the pathway table.\n
\n
\n The buttons on top of the pathway are:\n
    \n \n \n \n \n \n \n \n \n \n \n
    Save as PNG
    Save as SVG
    Perform layout: Layout is recalculated taking current node positions into account
    \n
\n

\n
\n )}\n
\n\n );\n }\n\n}\n","import React from 'react';\nimport {Modal, Button} from 'react-bootstrap';\nimport { EModalType } from '../ui/react-pathway-mapper';\n\ninterface IConfirmationModalProps{\n isModalShown: boolean;\n handleClose: (modalId: EModalType) => void;\n}\n\nexport default class ConfirmationModal extends React.Component{\n\n static pendingFunction: Function;\n\n constructor(props: IConfirmationModalProps){\n super(props);\n\n }\n\n render(){\n\n\n return(\n {this.props.handleClose(EModalType.CONFIRMATION);}}\n >\n \n Confirmation\n \n \n
\n All unsaved changes will be lost. Do you want to continue?\n
\n
\n \n \n \n\n \n \n );\n }\n}","import { makeObservable, observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport React from 'react';\nimport { Button, Checkbox, Col, ControlLabel, Form, FormControl, InputGroup, Modal } from 'react-bootstrap';\nimport GridOptionsManager from '../managers/GridOptionsManager';\nimport { EModalType } from '../ui/react-pathway-mapper';\nimport PathwayActions from '../utils/PathwayActions';\ninterface IGridSettingsProps{\n isModalShown: boolean;\n handleClose: Function;\n pathwayActions: PathwayActions;\n}\n\nexport enum EGridType{\n GRID,\n GUIDE,\n NONE\n}\n\n@observer\nexport default class GridSettings extends React.Component{\n\n\n\n @observable\n private gridSize: number;\n \n @observable\n private guideColor: string;\n\n private defaultSettings = GridOptionsManager.defaultGridGuideOptions;\n\n @observable\n private enabledType: EGridType;\n constructor(props: IGridSettingsProps){\n super(props);\n makeObservable(this);\n \n this.gridSize = this.defaultSettings.gridSpacing;\n this.guideColor = this.defaultSettings.guidelinesStyle.strokeStyle;\n }\n\n setEnabledType(newType: EGridType){\n if(newType === this.enabledType){\n this.enabledType = EGridType.NONE;\n return;\n }\n\n this.enabledType = newType;\n }\n\n render(){\n\n return(\n {this.enabledType = this.props.pathwayActions.enabledType;}}\n onHide={() => {\n this.props.handleClose(EModalType.GRID);\n }}>\n \n

Grid Settings

\n
\n \n
\n \n \n Enable Grids:\n \n\n \n {this.setEnabledType(EGridType.GRID);}}>\n \n \n \n \n Enable Guidelines\n \n\n \n {this.setEnabledType(EGridType.GUIDE);}}>\n \n \n \n \n Grid Size:\n \n\n \n {this.gridSize = e.target.value;}}/>\n \n \n \n \n Guideline Color:\n \n\n \n {this.guideColor = e.target.value;}}/>\n \n \n
\n
\n\n \n \n \n
\n );\n\n\n } \n}","/**\n * Created by istemi on 27.09.2016.\n */\n\nexport default class GraphUtilities {\n \n \n createGraphHierarchy(nodes)\n {\n //Some arrays and maps for creating graph hierarchy\n var tree = [];\n var mappedArr = {};\n\n // First map the nodes of the array to an object -> create a hash table.\n for (var i = 0, len = nodes.length; i < len; i++)\n {\n var arrElem = nodes[i];\n mappedArr[arrElem.id()] = arrElem;\n mappedArr[arrElem.id()].childNodes = [];\n }\n\n for (var id in mappedArr)\n {\n var mappedElem = mappedArr[id];\n\n // If the element is not at the root level, add it to its parent array of children.\n if (mappedElem.parent().length > 0)\n {\n mappedArr[mappedElem.parent().id()].childNodes.push(mappedElem);\n }\n // If the element is at the root level, add it to first level elements array.\n else\n {\n tree.push(mappedElem);\n }\n }\n return tree;\n };\n\n /*\n * Creates graph hierarchy from given flat list of nodes list, nodes list is assumed to have parent-child\n * relationship by a field 'parent' which represents to the id of the parent node This function is specific\n * for the needs of TCGA Pathway Curation Tool 04/07/2016\n *\n * @param nodes {array}: flat list of nodes of a graph\n * @return {array}: Tree representation in array, entries are root level nodes. node.children gives children nodes\n * of each node in the returned array.\n * a node in corresponding level.\n *\n * */\n createGraphHierarchyRealTime(nodes)\n {\n //Some arrays and maps for creating graph hierarchy\n var tree = [];\n var mappedArr = {};\n\n // First map the nodes of the array to an object -> create a hash table.\n for (var i = 0, len = nodes.length; i < len; i++)\n {\n var arrElem = nodes[i];\n mappedArr[arrElem.data.id] = arrElem;\n mappedArr[arrElem.data.id].children = [];\n }\n for (var id in mappedArr)\n {\n var mappedElem = mappedArr[id];\n\n // If the element is not at the root level, add it to its parent array of children.\n if (mappedElem.data.parent != -1)\n {\n mappedArr[mappedElem.data.parent].children.push(mappedElem);\n }\n // If the element is at the root level, add it to first level elements array.\n else\n {\n tree.push(mappedElem);\n }\n }\n return tree;\n };\n}","import EditorActionsManager from '../managers/EditorActionsManager'\nimport GraphUtilities from '../utils/GraphUtilities'\n\nexport default class SVGExporter {\n SVGNameSpace = 'http://www.w3.org/2000/svg'\n svg = document.createElementNS(this.SVGNameSpace, 'svg')\n NODE_FILL_COLOR = 'rgb(255,255,255)'\n FAMILY_FILL_COLOR = 'rgb(255,255,255)'\n FAMILY_STROKE_COLOR = 'rgb(204,204,204)'\n NODE_STROKE_COLOR = 'rgb(0,0,0)'\n COMPARTMENT_STROKE_WIDTH = 2\n NODE_STROKE_WIDTH = 1\n NODE_OPACITY = 0.5\n ROUNDING_FACTOR = 6\n GENOMICDATA_LABEL_Y_OFFSET = -15\n EDGE_WIDTH = 1\n T_WIDTH = 2\n T_HEIGHT = 8\n T_ARROW_HEAD_OFFSET = 2\n TRIANGLE_ARROW_HEAD_HEIGHT = 8\n TRIANGLE_ARROW_HEAD_WIDTH = 8\n DASH_PARAMETERS = '5, 3'\n COMPOUND_MARGIN = 8\n NODE_FONT_SIZE = 14\n\n edgeEditing: any\n editor: EditorActionsManager\n constructor(edgeEditing: any, editor: EditorActionsManager) {\n this.edgeEditing = edgeEditing\n this.editor = editor\n }\n\n resetSVG() {\n this.svg = document.createElementNS(this.SVGNameSpace, 'svg')\n }\n\n exportGraph(nodes, edges) {\n //Reset SVG\n this.resetSVG()\n this.svg.setAttribute('version', '1.1')\n this.svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg')\n //Set viewport of output SVG\n var cyBounds = this.editor.cy.extent()\n this.svg.setAttribute(\n 'viewBox',\n cyBounds.x1 + ' ' + cyBounds.y1 + ' ' + cyBounds.w + ' ' + cyBounds.h\n )\n\n var that = this\n var nodeMap = {}\n\n var nodeTree = new GraphUtilities().createGraphHierarchy(nodes)\n var traverseFunction = function(node) {\n //Create SVG for current node\n nodeMap[node.id()] = node\n var genomicDataSVG = that.editor.getGenomicDataSVG(node).children\n var oncoprintDataSVG = that.editor.getOncoprintDataSVG(node)\n that.svg.appendChild(that.createRect(node))\n var labelOffset =\n (genomicDataSVG && genomicDataSVG.length > 0)\n || (oncoprintDataSVG.outerHTML !== '')\n ? that.GENOMICDATA_LABEL_Y_OFFSET\n : 0\n that.svg.appendChild(that.createText(node, labelOffset))\n\n //Append Genomic Data SVG here\n if (genomicDataSVG) {\n while (genomicDataSVG.length > 0) {\n var elemSVG = genomicDataSVG[0]\n var nodePosition = node.position()\n var svgX = elemSVG.getAttribute('x')\n var svgY = elemSVG.getAttribute('y')\n elemSVG.setAttribute(\n 'x',\n nodePosition.x - node.width() / 2 + parseFloat(svgX)\n )\n elemSVG.setAttribute(\n 'y',\n nodePosition.y - node.height() / 2 + parseFloat(svgY)\n )\n that.svg.appendChild(elemSVG)\n }\n } else if (oncoprintDataSVG.outerHTML !== '') {\n var nodePosition = node.position()\n \n const width = parseInt(oncoprintDataSVG.getAttribute('width'));\n const height = parseInt(oncoprintDataSVG.getAttribute('height'));\n const verticalPadding = 8\n\n const y = nodePosition.y + (node.height() / 2) - (height + verticalPadding)\n oncoprintDataSVG.setAttribute(\n 'x',\n nodePosition.x - (width / 2)\n )\n oncoprintDataSVG.setAttribute(\n 'y', y\n )\n that.svg.appendChild(oncoprintDataSVG);\n }\n\n //Traverse children\n if (node.childNodes) {\n for (var i in node.childNodes) {\n traverseFunction(node.childNodes[i])\n }\n }\n }\n\n //Traverse node hierarchy\n for (var i in nodeTree) {\n var rootLevelNode = nodeTree[i]\n traverseFunction(rootLevelNode)\n }\n\n edges.forEach(function(edge) {\n var source = nodeMap[edge.source().id()]\n var target = nodeMap[edge.target().id()]\n that.drawEdge(edge, source, target)\n })\n\n return this.svg.outerHTML\n }\n\n drawEdge(edge, source, target) {\n var edgeType = edge.data().type\n\n var sourceRectangle = {\n x: source.position().x,\n y: source.position().y,\n width: source.width(),\n height: source.height()\n }\n\n var targetRectangle = {\n x: target.position().x,\n y: target.position().y,\n width: target.width(),\n height: target.height()\n }\n\n //If source or target node is compound node adjust their width and height according to compound margins\n if (source.isParent()) {\n sourceRectangle.width += this.COMPOUND_MARGIN\n sourceRectangle.height += this.COMPOUND_MARGIN\n }\n\n if (target.isParent()) {\n targetRectangle.width += this.COMPOUND_MARGIN\n targetRectangle.height += this.COMPOUND_MARGIN\n }\n\n var numberOfBendPoints = 0\n if (this.edgeEditing.getSegmentPoints(edge) !== undefined)\n numberOfBendPoints = this.edgeEditing.getSegmentPoints(edge).length / 2\n\n var clipPoints\n if (numberOfBendPoints > 0) {\n var lastBendPoint = {\n x: this.edgeEditing.getSegmentPoints(edge)[2 * numberOfBendPoints - 2],\n y: this.edgeEditing.getSegmentPoints(edge)[2 * numberOfBendPoints - 1],\n height: 0,\n width: 0\n }\n //Calculate clipping point of target node with the segment from last bend point by Cohen Sutherland algorithm\n clipPoints = this.findClippingPoints(lastBendPoint, targetRectangle)\n } else {\n //Calculate clipping points of both source and target nodes by Cohen Sutherland algorithm\n clipPoints = this.findClippingPoints(sourceRectangle, targetRectangle)\n }\n\n //Calculate unit vector pointing from source clipping coordinates to target clipping coordinates\n var unitV = this.unitVector({\n x: clipPoints.targetClipPoints.x - clipPoints.sourceClipPoints.x,\n y: clipPoints.targetClipPoints.y - clipPoints.sourceClipPoints.y\n })\n var inverseUnitV = this.scale(unitV, -1)\n\n var targetX = clipPoints.targetClipPoints.x\n var targetY = clipPoints.targetClipPoints.y\n\n //Draw Triangle arrow head\n if (edgeType == 'ACTIVATES' || edgeType == 'INDUCES') {\n targetX =\n clipPoints.targetClipPoints.x +\n this.TRIANGLE_ARROW_HEAD_HEIGHT * inverseUnitV.x\n targetY =\n clipPoints.targetClipPoints.y +\n this.TRIANGLE_ARROW_HEAD_HEIGHT * inverseUnitV.y\n\n var point1Vector = this.rotateVector(unitV, Math.PI / 2)\n var point2Vector = this.rotateVector(unitV, -Math.PI / 2)\n\n point1Vector = this.scale(\n point1Vector,\n this.TRIANGLE_ARROW_HEAD_WIDTH / 2\n )\n point2Vector = this.scale(\n point2Vector,\n this.TRIANGLE_ARROW_HEAD_WIDTH / 2\n )\n\n var point1X = targetX + point1Vector.x\n var point1Y = targetY + point1Vector.y\n\n var point2X = targetX + point2Vector.x\n var point2Y = targetY + point2Vector.y\n\n var polySVG = document.createElementNS(this.SVGNameSpace, 'polygon')\n polySVG.setAttribute(\n 'points',\n point1X +\n ',' +\n point1Y +\n ',' +\n point2X +\n ',' +\n point2Y +\n ',' +\n clipPoints.targetClipPoints.x +\n ',' +\n clipPoints.targetClipPoints.y\n )\n\n this.svg.appendChild(polySVG)\n }\n //Draw T type arrow head\n else if (edgeType === 'INHIBITS' || edgeType === 'REPRESSES') {\n targetX =\n clipPoints.targetClipPoints.x +\n this.T_ARROW_HEAD_OFFSET * inverseUnitV.x\n targetY =\n clipPoints.targetClipPoints.y +\n this.T_ARROW_HEAD_OFFSET * inverseUnitV.y\n\n //Calculate T shape points\n var point1Vector = this.rotateVector(unitV, Math.PI / 2)\n var point2Vector = this.rotateVector(unitV, -Math.PI / 2)\n point1Vector = this.scale(point1Vector, this.T_HEIGHT / 2)\n point2Vector = this.scale(point2Vector, this.T_HEIGHT / 2)\n\n var point1X = targetX + point1Vector.x\n var point1Y = targetY + point1Vector.y\n var point2X = targetX + point2Vector.x\n var point2Y = targetY + point2Vector.y\n\n //Draw edge arrow line here !\n var lineSVG = document.createElementNS(this.SVGNameSpace, 'line')\n lineSVG.setAttribute('x1', point1X)\n lineSVG.setAttribute('y1', point1Y)\n lineSVG.setAttribute('x2', point2X)\n lineSVG.setAttribute('y2', point2Y)\n lineSVG.setAttribute('stroke-width', this.T_WIDTH + '')\n lineSVG.setAttribute('stroke', 'black')\n this.svg.appendChild(lineSVG)\n }\n\n //Draw edge lines here !\n if (numberOfBendPoints > 0) {\n //Calculate initial clipping point of source node with the segment from first bend point\n var firstBendPoint = {\n x: this.edgeEditing.getSegmentPoints(edge)[0],\n y: this.edgeEditing.getSegmentPoints(edge)[1],\n height: 0,\n width: 0\n }\n var initialClipPoint = this.findClippingPoints(\n sourceRectangle,\n firstBendPoint\n )\n\n //Create a copy array of edgeEditing.getSegmentPoints(edge) which contain all the bending points\n // including source and target clipping point. The first elements of the array are source's x and y positions\n // and the last ones are target's x and y positions\n var points = [\n initialClipPoint.sourceClipPoints.x,\n initialClipPoint.sourceClipPoints.y\n ]\n for (var i = 0; i < numberOfBendPoints * 2; i++) {\n points.push(this.edgeEditing.getSegmentPoints(edge)[i])\n }\n points.push(clipPoints.targetClipPoints.x)\n points.push(clipPoints.targetClipPoints.y)\n\n for (var i = 0; i < points.length - 2; i += 2) {\n var lineSVG = document.createElementNS(this.SVGNameSpace, 'line')\n lineSVG.setAttribute('x1', points[i])\n lineSVG.setAttribute('y1', points[i + 1])\n lineSVG.setAttribute('x2', points[i + 2])\n lineSVG.setAttribute('y2', points[i + 3])\n lineSVG.setAttribute('stroke-width', this.EDGE_WIDTH + '')\n lineSVG.setAttribute('stroke', 'black')\n\n //Draw dashed if induces or represses interaction\n if (edgeType == 'INDUCES' || edgeType == 'REPRESSES') {\n lineSVG.setAttribute('stroke-dasharray', this.DASH_PARAMETERS)\n }\n\n this.svg.appendChild(lineSVG)\n }\n } else {\n var lineSVG = document.createElementNS(this.SVGNameSpace, 'line')\n lineSVG.setAttribute('x1', clipPoints.sourceClipPoints.x)\n lineSVG.setAttribute('y1', clipPoints.sourceClipPoints.y)\n lineSVG.setAttribute('x2', targetX)\n lineSVG.setAttribute('y2', targetY)\n lineSVG.setAttribute('stroke-width', this.EDGE_WIDTH + '')\n lineSVG.setAttribute('stroke', 'black')\n\n //Draw dashed if induces or represses interaction\n if (edgeType == 'INDUCES' || edgeType == 'REPRESSES') {\n lineSVG.setAttribute('stroke-dasharray', this.DASH_PARAMETERS)\n }\n\n this.svg.appendChild(lineSVG)\n }\n }\n\n /**\n *\n * **/\n findClippingPoints(sourceRectangle, targetRectangle) {\n var sourceAABB = {\n xMin: sourceRectangle.x - sourceRectangle.width / 2,\n xMax: sourceRectangle.x + sourceRectangle.width / 2,\n yMin: sourceRectangle.y - sourceRectangle.height / 2,\n yMax: sourceRectangle.y + sourceRectangle.height / 2\n }\n\n var targetAABB = {\n xMin: targetRectangle.x - targetRectangle.width / 2,\n xMax: targetRectangle.x + targetRectangle.width / 2,\n yMin: targetRectangle.y - targetRectangle.height / 2,\n yMax: targetRectangle.y + targetRectangle.height / 2\n }\n\n var line1 = {\n x1: sourceRectangle.x,\n y1: sourceRectangle.y,\n x2: targetRectangle.x,\n y2: targetRectangle.y\n }\n\n var line2 = {\n x1: targetRectangle.x,\n y1: targetRectangle.y,\n x2: sourceRectangle.x,\n y2: sourceRectangle.y\n }\n\n var returnObj = {\n sourceClipPoints: this.clipLine(line1, sourceAABB),\n targetClipPoints: this.clipLine(line2, targetAABB)\n }\n\n return returnObj\n }\n\n createRect(node) {\n var nodeRectangle = document.createElementNS(this.SVGNameSpace, 'rect')\n var nodePosition = node.position()\n if (node.isParent()) {\n nodeRectangle.setAttribute(\n 'x',\n nodePosition.x - node.width() / 2 - this.COMPOUND_MARGIN / 2 + ''\n )\n nodeRectangle.setAttribute(\n 'y',\n nodePosition.y - node.height() / 2 - this.COMPOUND_MARGIN / 2 + ''\n )\n nodeRectangle.setAttribute('width', node.width() + this.COMPOUND_MARGIN)\n nodeRectangle.setAttribute('height', node.height() + this.COMPOUND_MARGIN)\n } else {\n nodeRectangle.setAttribute('x', nodePosition.x - node.width() / 2 + '')\n nodeRectangle.setAttribute('y', nodePosition.y - node.height() / 2 + '')\n nodeRectangle.setAttribute('width', node.width())\n nodeRectangle.setAttribute('height', node.height())\n }\n\n nodeRectangle = this.createStyleForNodes(node, nodeRectangle)\n\n return nodeRectangle\n }\n\n createText(node, genomicDataOffset) {\n var verticalTextOffset = 5\n var nodePosition = node.position()\n var svgText = document.createElementNS(this.SVGNameSpace, 'text')\n\n if (node.isParent()) {\n verticalTextOffset = 20\n svgText.setAttribute('x', nodePosition.x)\n svgText.setAttribute(\n 'y',\n nodePosition.y + node.height() / 2 + verticalTextOffset\n )\n } else {\n svgText.setAttribute('x', nodePosition.x)\n svgText.setAttribute(\n 'y',\n nodePosition.y + verticalTextOffset + genomicDataOffset\n )\n }\n\n svgText.setAttribute('font-family', 'Arial')\n svgText.setAttribute('text-anchor', 'middle')\n svgText.setAttribute('font-size', this.NODE_FONT_SIZE + '')\n svgText.innerHTML = node.data().name\n return svgText\n }\n\n createStyleForNodes(node, nodeRectangle) {\n var nodeType = node.data().type\n var strokeWidth = node.css('border-width') || this.NODE_STROKE_WIDTH;\n var strokeColor = this.NODE_STROKE_COLOR\n var fillColor = this.NODE_FILL_COLOR\n var opacity = this.NODE_OPACITY\n var strokeOpacity = 1\n\n if (nodeType == 'GENE' || nodeType == 'COMPARTMENT') {\n nodeRectangle.setAttribute('rx', this.ROUNDING_FACTOR)\n nodeRectangle.setAttribute('ry', this.ROUNDING_FACTOR)\n\n if (nodeType == 'COMPARTMENT') strokeWidth = this.COMPARTMENT_STROKE_WIDTH\n }\n\n if (nodeType == 'PROCESS') {\n opacity = 0\n strokeOpacity = 0\n }\n\n if (nodeType == 'FAMILY') {\n fillColor = this.FAMILY_FILL_COLOR\n strokeColor = this.FAMILY_STROKE_COLOR\n }\n\n var styleString =\n 'stroke-width:' +\n strokeWidth +\n ';' +\n 'stroke:' +\n strokeColor +\n ';' +\n 'fill-opacity:' +\n opacity +\n ';' +\n 'fill:' +\n fillColor +\n ';' +\n 'stroke-opacity:' +\n strokeOpacity +\n ';'\n\n nodeRectangle.setAttribute('style', styleString)\n\n return nodeRectangle\n }\n\n /**\n * Cohen Sutherland Line Clipping algorithm implementation\n * **/\n clipLine(line, rectangle) {\n //Clipping regions encoded with different integers !\n var INSIDE = 0\n var LEFT = 1\n var RIGHT = 2\n var BOTTOM = 4\n var TOP = 8\n\n /*\n * Get outcode of given point compared to the rectangle\n * */\n function getOutCode(point, rectangle) {\n var outcode = INSIDE\n\n if (point.x < rectangle.xMin) outcode = outcode | LEFT\n else if (point.x > rectangle.xMax) outcode = outcode | RIGHT\n\n if (point.y < rectangle.yMin) outcode = outcode | TOP\n else if (point.y > rectangle.yMax) outcode = outcode | BOTTOM\n\n return outcode\n }\n\n var outcode0 = getOutCode({ x: line.x1, y: line.y1 }, rectangle)\n var outcode1 = getOutCode({ x: line.x2, y: line.y2 }, rectangle)\n\n var slope = (line.y2 - line.y1) / (line.x2 - line.x1)\n var returnCoords = { x: line.x1, y: line.y1, slope: slope }\n\n //Main clipping loop\n var accept = false\n while (true) {\n // Bitwise OR is 0. Trivially accept and get out of loop\n if (!(outcode0 | outcode1)) {\n accept = true\n break\n }\n // Bitwise AND is not 0. Trivially reject and get out of loop\n else if (outcode0 & outcode1) {\n break\n } else {\n var outCode = outcode0 ? outcode0 : outcode1\n\n if (outCode & TOP) {\n returnCoords.x = line.x1 + (rectangle.yMin - line.y1) / slope\n returnCoords.y = rectangle.yMin\n } else if (outCode & BOTTOM) {\n returnCoords.x = line.x1 + (rectangle.yMax - line.y1) / slope\n returnCoords.y = rectangle.yMax\n } else if (outCode & RIGHT) {\n returnCoords.x = rectangle.xMax\n returnCoords.y = line.y1 + slope * (rectangle.xMax - line.x1)\n } else if (outCode & LEFT) {\n returnCoords.x = rectangle.xMin\n returnCoords.y = line.y1 + slope * (rectangle.xMin - line.x1)\n }\n\n // Now we move outside point to intersection point to clip\n // and get ready for next pass.\n if (outCode == outcode0) {\n outcode0 = getOutCode(\n { x: returnCoords.x, y: returnCoords.y },\n rectangle\n )\n } else {\n outcode1 = getOutCode(\n { x: returnCoords.x, y: returnCoords.y },\n rectangle\n )\n }\n }\n }\n\n return returnCoords\n }\n\n /**\n * Utility vector functions\n * */\n dotProduct(v1, v2) {\n var newX = v1.x * v2.x\n var newY = v1.y * v2.y\n\n return { x: newX, y: newY }\n }\n\n unitVector(v) {\n var inverseLength = 1 / Math.sqrt(v.x * v.x + v.y * v.y)\n\n return {\n x: v.x * inverseLength,\n y: v.y * inverseLength\n }\n }\n\n rotateVector(v, radians) {\n var newX = v.x * Math.cos(radians) - v.y * Math.sin(radians)\n var newY = v.x * Math.sin(radians) + v.y * Math.cos(radians)\n\n return { x: newX, y: newY }\n }\n\n scale(v, scalar) {\n var newX = v.x * scalar\n var newY = v.y * scalar\n\n return { x: newX, y: newY }\n }\n}\n","import $ from 'jquery'\nimport { GeneticAlterationRuleSet, shapeToSvg } from 'oncoprintjs'\n\nexport default class GenomicDataOverlayManager {\n public genomicDataMap: {}\n public visibleGenomicDataMapByType: {}\n public groupedGenomicDataCount: number\n public groupedGenomicDataMap: {}\n public patientData: any\n private DEFAULT_VISIBLE_GENOMIC_DATA_COUNT: number\n private observers: any[]\n private cy: any\n constructor(cy: any) {\n this.cy = cy\n this.genomicDataMap = {}\n this.patientData = {}\n this.visibleGenomicDataMapByType = {}\n this.groupedGenomicDataMap = {}\n this.groupedGenomicDataCount = 0\n this.DEFAULT_VISIBLE_GENOMIC_DATA_COUNT = 3\n\n // Observer-observable pattern related stuff\n this.observers = []\n }\n\n getEmptyGroupID() {\n const oldCount = this.groupedGenomicDataCount\n this.groupedGenomicDataCount++\n return oldCount\n }\n\n addGenomicDataLocally(genomicData, groupID) {\n this.parseGenomicData(genomicData, groupID)\n this.showGenomicData()\n this.notifyObservers()\n }\n\n preparePortalGenomicDataShareDB(genomicData) {\n const geneMap = {}\n const visMap = {}\n\n for (const cancerKey in genomicData) {\n for (const geneSymbol in genomicData[cancerKey]) {\n geneMap[geneSymbol] = {}\n geneMap[geneSymbol][cancerKey] = genomicData[cancerKey][geneSymbol]\n }\n\n visMap[cancerKey] = true\n }\n\n return {\n genomicDataMap: geneMap,\n visibilityMap: visMap\n }\n }\n\n addGenomicData(data) {\n this.genomicDataMap = data\n }\n\n removeGenomicVisData() {\n this.visibleGenomicDataMapByType = {}\n }\n\n addGenomicDataWithGeneSymbol(geneSymbol, data) {\n this.genomicDataMap[geneSymbol] = data\n }\n\n addGenomicGroupData(groupID, data) {\n this.groupedGenomicDataMap[groupID] = data\n }\n\n addPortalGenomicData(data, groupID) {\n for (const cancerStudy of Object.keys(data)) {\n this.visibleGenomicDataMapByType[cancerStudy] = true\n // Group current cancer study according to the groupID\n if (this.groupedGenomicDataMap[groupID] === undefined) {\n this.groupedGenomicDataMap[groupID] = []\n }\n\n this.groupedGenomicDataMap[groupID].push(cancerStudy)\n\n var cancerData = data[cancerStudy]\n\n for (const geneSymbol of Object.keys(cancerData)) {\n if (this.genomicDataMap[geneSymbol] === undefined)\n this.genomicDataMap[geneSymbol] = {}\n\n this.genomicDataMap[geneSymbol][cancerStudy] = data[cancerStudy][\n geneSymbol\n ].toFixed\n ? data[cancerStudy][geneSymbol].toFixed(2)\n : data[cancerStudy][geneSymbol]\n }\n }\n //This parameter is used as flag for PatientView PathwayMapper Functions\n if (data['PatientView'] == 1) {\n this.patientData = data\n this.showPatientData()\n } else {\n this.showGenomicData()\n }\n this.notifyObservers()\n }\n\n clearAllGenomicData = function() {\n this.genomicDataMap = {}\n this.visibleGenomicDataMapByType = {}\n this.groupedGenomicDataMap = {}\n this.groupedGenomicDataCount = 0\n }\n\n removeGenomicData() {\n this.genomicDataMap = {}\n }\n\n removeGenomicDataWithGeneSymbol(geneSymbol) {\n this.genomicDataMap[geneSymbol] = {}\n }\n\n addGenomicVisData(key, data) {\n this.visibleGenomicDataMapByType[key] = data\n }\n\n prepareGenomicDataShareDB = function(genomicData) {\n const genomicDataMap = {}\n const cancerTypes = []\n const visibleGenomicDataMapByType = {}\n\n // By lines\n const lines = genomicData.split('\\n')\n // First line is meta data !\n const metaLineColumns = lines[0].split('\\t')\n\n // Parse cancer types\n for (let i = 1; i < metaLineColumns.length; i++) {\n cancerTypes.push(metaLineColumns[i])\n // Update initially visible genomic data boxes !\n if (i - 1 < this.DEFAULT_VISIBLE_GENOMIC_DATA_COUNT) {\n visibleGenomicDataMapByType[cancerTypes[i - 1]] = true\n } else {\n visibleGenomicDataMapByType[cancerTypes[i - 1]] = false\n }\n }\n\n // parse genomic data\n for (let i = 1; i < lines.length; i++) {\n // EOF check\n if (lines[i].length === 0) {\n break\n }\n\n // Split each line by tab and parse genomic data content\n const lineContent = lines[i].split('\\t')\n const geneSymbol = lineContent[0]\n\n // If current gene entry is not in genomic data map create new hashmap entry\n if (!(geneSymbol in genomicDataMap)) {\n genomicDataMap[geneSymbol] = {}\n }\n\n // Add each entry of genomic data\n for (let j = 1; j < lineContent.length; j++) {\n genomicDataMap[geneSymbol][cancerTypes[j - 1]] = lineContent[j]\n }\n }\n\n const returnObj = {\n genomicDataMap: genomicDataMap,\n visibilityMap: visibleGenomicDataMapByType\n }\n\n return returnObj\n }\n\n updateGenomicDataVisibility = function(_key, isVisible) {\n if (_key in this.visibleGenomicDataMapByType) {\n this.visibleGenomicDataMapByType[_key] = isVisible\n }\n }\n\n hideGenomicData = function() {\n this.cy\n .style()\n .selector('node[type=\"GENE\"]')\n .style('text-margin-y', 0)\n .style('width', function(ele) {\n return 150\n })\n .style('background-image', function(ele) {\n const dataURI = 'data:image/svg+xml;utf8,'\n return dataURI\n })\n .update()\n }\n\n countVisibleGenomicDataByType() {\n // Count the genomic data that will be displayed on nodes' body\n let genomicDataBoxCount = 0\n for (let cancerType in this.visibleGenomicDataMapByType) {\n if (this.visibleGenomicDataMapByType[cancerType]) {\n genomicDataBoxCount++\n }\n }\n\n return genomicDataBoxCount\n }\n\n generateSVGForNode(ele) {\n const genomicDataBoxCount = this.countVisibleGenomicDataByType()\n\n // Experimental data overlay part !\n const dataURI = 'data:image/svg+xml;utf8,'\n const svgNameSpace = 'http://www.w3.org/2000/svg'\n\n const nodeLabel = ele.data('name')\n // If there is no genomic data for this node return !\n if (!(nodeLabel in this.genomicDataMap)) {\n return dataURI\n }\n\n const eleBBox = ele.boundingBox()\n const reqWidth = this.getRequiredWidthForGenomicData(genomicDataBoxCount)\n const overlayRecBoxW = reqWidth - 10\n const overlayRecBoxH = 25\n const svg: any = document.createElementNS(svgNameSpace, 'svg')\n // It seems this should be set according to the node size !\n svg.setAttribute('width', reqWidth)\n svg.setAttribute('height', eleBBox.h)\n // This is important you need to include this to succesfully render in cytoscape.js!\n svg.setAttribute('xmlns', svgNameSpace)\n\n // Overlay Data Rect\n const overLayRectBBox = {\n w: overlayRecBoxW,\n h: overlayRecBoxH,\n x: reqWidth / 2 - overlayRecBoxW / 2,\n y: eleBBox.h / 2 + overlayRecBoxH / 2 - 18\n }\n\n const genomicFrequencyData = this.genomicDataMap[nodeLabel]\n\n let maxGenomicDataBoxCount = /*(genomicDataBoxCount > 3) ? 3:*/ genomicDataBoxCount\n let genomicBoxCounter = 0\n\n for (let i in this.groupedGenomicDataMap) {\n for (let j in this.groupedGenomicDataMap[i]) {\n const cancerType = this.groupedGenomicDataMap[i][j]\n if (!this.visibleGenomicDataMapByType[cancerType]) {\n continue\n }\n\n if (genomicFrequencyData[cancerType] !== undefined) {\n genomicDataRectangleGenerator(\n overLayRectBBox.x +\n (genomicBoxCounter * overLayRectBBox.w) / maxGenomicDataBoxCount,\n overLayRectBBox.y,\n overLayRectBBox.w / maxGenomicDataBoxCount,\n overLayRectBBox.h,\n genomicFrequencyData[cancerType],\n svg\n )\n } else {\n genomicDataRectangleGenerator(\n overLayRectBBox.x +\n (genomicBoxCounter * overLayRectBBox.w) / maxGenomicDataBoxCount,\n overLayRectBBox.y,\n overLayRectBBox.w / maxGenomicDataBoxCount,\n overLayRectBBox.h,\n null,\n svg\n )\n }\n\n genomicBoxCounter++\n }\n }\n\n function genomicDataRectangleGenerator(x, y, w, h, percent, parentSVG) {\n let colorString = ''\n if (percent) {\n const isNegativePercent = percent < 0\n let _percent = Math.abs(percent)\n // Handle special cases here !\n\n _percent = _percent > 0 && _percent < 0.5 ? 0.5 : _percent\n // _percent = _percent === 1 ? 2 : _percent\n // Here we are using non linear regression\n // Fitting points of (0,0), (25,140), (50,220), (100, 255)\n const percentColor = 255 - (-7.118 + 53.9765 * Math.log(_percent + 0.8))\n\n if (_percent === 0 || percent == -101) {\n colorString = 'rgb(255,255,255)'\n } else if (isNegativePercent) {\n colorString =\n 'rgb(' +\n Math.round(percentColor) +\n ',' +\n Math.round(percentColor) +\n ',255)'\n percent = percent.substring(1)\n } else {\n colorString =\n 'rgb(255,' +\n Math.round(percentColor) +\n ',' +\n Math.round(percentColor) +\n ')'\n }\n // Rectangle Part\n const overlayRect = document.createElementNS(svgNameSpace, 'rect')\n overlayRect.setAttribute('x', x)\n overlayRect.setAttribute('y', y)\n overlayRect.setAttribute('width', w)\n overlayRect.setAttribute('height', h)\n overlayRect.setAttribute(\n 'style',\n 'stroke-width:1;stroke:rgb(0,0,0);opacity:1;fill:' + colorString + ';'\n )\n\n // Text Part\n const textPercent =\n percent < 0.5 && percent > 0 ? '<0.5' : Number(percent).toFixed(1)\n const text = percent == -101 ? 'N/P' : textPercent + '%'\n const fontSize = 14\n const textLength = text.length\n const xOffset = w / 2 - textLength * 4\n const yOffset = fontSize / 3\n\n const svgText = document.createElementNS(svgNameSpace, 'text')\n svgText.setAttribute('x', x + xOffset)\n svgText.setAttribute('y', y + h / 2 + yOffset)\n svgText.setAttribute('font-family', 'Arial')\n svgText.setAttribute('font-size', fontSize + '')\n svgText.innerHTML = text\n\n parentSVG.appendChild(overlayRect)\n parentSVG.appendChild(svgText)\n } else {\n colorString = 'rgb(210,210,210)'\n\n // Rectangle Part\n const overlayRect = document.createElementNS(svgNameSpace, 'rect')\n overlayRect.setAttribute('x', x)\n overlayRect.setAttribute('y', y)\n overlayRect.setAttribute('width', w)\n overlayRect.setAttribute('height', h)\n overlayRect.setAttribute(\n 'style',\n 'stroke-width:1;stroke:rgb(0,0,0);opacity:1;fill:' + colorString + ';'\n )\n\n parentSVG.appendChild(overlayRect)\n }\n }\n\n return svg\n }\n\n // Just an utility function to calculate required width for genes for genomic data !\n getRequiredWidthForGenomicData(genomicDataBoxCount) {\n const term = genomicDataBoxCount > 3 ? genomicDataBoxCount - 3 : 0\n return 150 + term * 35\n }\n\n showGenomicData() {\n const self = this\n\n const genomicDataBoxCount = this.countVisibleGenomicDataByType()\n\n if (genomicDataBoxCount < 1) {\n // Hide all genomic data and return\n this.hideGenomicData()\n return\n }\n\n this.cy\n .style()\n .selector('node[type=\"GENE\"]')\n // It used to change the width of nodes only locally\n .style('width', ele => {\n return this.getRequiredWidthForGenomicData(genomicDataBoxCount)\n })\n .style('text-margin-y', function(ele) {\n const nodeLabel = ele.data('name')\n // If there is no genomic data for this node return !\n if (!(nodeLabel in self.genomicDataMap)) {\n return 0\n }\n\n // Else shift label in Y axis\n return -15\n })\n .style('background-image', function(ele) {\n const x = encodeURIComponent(self.generateSVGForNode(ele).outerHTML)\n if (x === 'undefined') {\n return 'none'\n }\n const dataURI = 'data:image/svg+xml;utf8,' + x\n return dataURI\n })\n .update()\n }\n\n parseGenomicData(genomicData, groupID) {\n this.genomicDataMap = this.genomicDataMap || {}\n this.visibleGenomicDataMapByType = this.visibleGenomicDataMapByType || {}\n this.groupedGenomicDataMap = this.groupedGenomicDataMap || {}\n const cancerTypes = []\n\n // By lines\n const lines = genomicData.split('\\n')\n // First line is meta data !\n const metaLineColumns = lines[0].split('\\t')\n\n // Parse cancer types\n for (let i = 1; i < metaLineColumns.length; i++) {\n cancerTypes.push(metaLineColumns[i])\n // Update initially visible genomic data boxes !\n if (i - 1 < this.DEFAULT_VISIBLE_GENOMIC_DATA_COUNT) {\n this.visibleGenomicDataMapByType[cancerTypes[i - 1]] = true\n } else {\n this.visibleGenomicDataMapByType[cancerTypes[i - 1]] = false\n }\n\n if (this.groupedGenomicDataMap[groupID] === undefined) {\n this.groupedGenomicDataMap[groupID] = []\n }\n this.groupedGenomicDataMap[groupID].push(cancerTypes[i - 1])\n }\n\n // parse genomic data\n for (let i = 1; i < lines.length; i++) {\n // EOF check\n if (lines[i].length === 0) {\n break\n }\n\n // Split each line by tab and parse genomic data content\n const lineContent = lines[i].split('\\t')\n const geneSymbol = lineContent[0]\n\n // If current gene entry is not in genomic data map create new map\n if (!(geneSymbol in this.genomicDataMap)) {\n this.genomicDataMap[geneSymbol] = {}\n }\n\n // Add each entry of genomic data\n for (let j = 1; j < lineContent.length; j++) {\n this.genomicDataMap[geneSymbol][cancerTypes[j - 1]] = lineContent[j]\n }\n }\n }\n\n // Simple observer-observable pattern for views!!!!!\n registerObserver(observer) {\n this.observers.push(observer)\n }\n\n notifyObservers() {\n for (const observer of this.observers) {\n observer.notify()\n }\n }\n\n //This method is needed to calculate the alteration Types for each gene\n getAlterationCountForPatient(geneData) {\n let count = 0\n for (let altType in geneData) {\n count++\n }\n return count\n }\n\n //These methods are created to be used in CbioPortal PatientView they are not used\n //in ResultView Page or PathwayMapper Editor\n\n showPatientData() {\n const self = this\n\n const data = this.patientData\n\n // const genomicDataBoxCount = 3 //this.countVisibleGenomicDataByType(); //CHANGE\n const genomicDataBoxCount = data.geneticTrackData\n ? data.geneticTrackData.length\n : 3\n if (genomicDataBoxCount < 1) {\n // Hide all genomic data and return\n this.hideGenomicData()\n return\n }\n\n this.cy\n .style()\n .selector('node[type=\"GENE\"]')\n // It used to change the width of nodes only locally\n .style('width', ele => {\n return this.getRequiredWidthForGenomicData(genomicDataBoxCount)\n })\n .style('text-margin-y', function(ele) {\n const nodeLabel = ele.data('name')\n\n // If there is no genomic data for this node return !\n if (!(nodeLabel in data)) {\n return 0\n }\n\n // Else shift label in Y axis\n return -15\n })\n .style('background-image', function(ele) {\n const x = encodeURIComponent(\n // self.generateSVGForPatientNode(ele, data).outerHTML\n self.generateOncoprintForPatientNode(ele).outerHTML\n )\n if (x === 'undefined') {\n return 'none'\n }\n const dataURI = 'data:image/svg+xml;utf8,' + x\n return dataURI\n })\n .update()\n\n this.cy.on('mouseover', 'node[type=\"GENE\"]', function(event) {\n var node = event.target || event.cyTarget\n const nodeLabel = node.data('name')\n if (!data[nodeLabel]) {\n return\n }\n node.qtip(\n {\n content: {\n text: function() {\n return self.generateHTMLContentForNodeTooltip(node, data)\n }\n },\n style: {\n classes: 'qtip-light qtip-rounded'\n },\n show: {\n event: 'showqtipevent'\n },\n hide: {\n event: 'mouseout'\n }\n },\n event\n )\n node.trigger('showqtipevent')\n })\n }\n\n //Every mutation type has a unique color coded. This method is used to retrieve the colors\n getOncoprintColors(selectedGene) {\n const oncoprintColors = {\n Missense_Mutation: 'rgb(0,128,0)',\n inframe: '#993404',\n truncating: '#000000',\n Fusion: 'rgb(139,0,201)',\n AMP: 'rgb(255,0,0)',\n gain: '#ffb6c1',\n heatloss: '#8fd8d8',\n homdel: 'rgb(0,0,255)',\n DeepDel: 'rgb(0,0,255)',\n \"5'Flank\": 'rgb(207,88,188)',\n in_frame_del: 'rgb(166,128,40)'\n }\n\n if (oncoprintColors[selectedGene] !== undefined) {\n return oncoprintColors[selectedGene]\n } else {\n //Types are not on the list corresponds to black\n return 'rgb(0,0,0)'\n }\n }\n generateSVGForPatientNode(ele, patientData) {\n //Here we should use the parameter patientData when calculating the expressions\n const genomicDataBoxCount = this.countVisibleGenomicDataByType()\n // Experimental data overlay part !\n const dataURI = 'data:image/svg+xml;utf8,'\n const svgNameSpace = 'http://www.w3.org/2000/svg'\n //nodeLabel refers to the nodeLabels in the overlay data\n const nodeLabel = ele.data('name')\n // If there is no genomic data for this node return !\n if (!(nodeLabel in patientData)) {\n return dataURI\n }\n //this parameter refers to the count of alteration types for each gene\n const alterationBoxCount = this.getAlterationCountForPatient(\n patientData[nodeLabel]\n )\n\n const eleBBox = ele.boundingBox()\n const svg: any = document.createElementNS(svgNameSpace, 'svg')\n //this parameter is set to 12 since there are 12 different possiblities for types\n const term = alterationBoxCount > 12 ? alterationBoxCount - 12 : 0\n const reqWidth = 150 + term * 35\n\n const overlayRecBoxW = reqWidth - 10\n const overlayRecBoxH = 25\n\n // It seems this should be set according to the node size !\n svg.setAttribute('width', reqWidth)\n svg.setAttribute('height', eleBBox.h)\n // This is important you need to include this to succesfully render in cytoscape.js!\n svg.setAttribute('xmlns', svgNameSpace)\n\n // Overlay Data Rect\n const overLayRectBBox = {\n w: overlayRecBoxW,\n h: overlayRecBoxH,\n x: reqWidth / 2 - overlayRecBoxW / 2,\n y: eleBBox.h / 2 + overlayRecBoxH / 2 - 18\n }\n let genomicBoxCounter = 0\n //required width is calculated for each gene since box count is different for each gene\n for (let j in patientData[nodeLabel]) {\n const genomicAlterationData = patientData[nodeLabel]\n const alterationType = j\n\n if (!this.visibleGenomicDataMapByType[nodeLabel]) {\n continue\n }\n //get the color string corresponding to the alterationType\n let colorString = this.getOncoprintColors(alterationType)\n\n if (genomicAlterationData[alterationType] !== undefined) {\n genomicDataRectangleGeneratorPatient(\n overLayRectBBox.x +\n (genomicBoxCounter * overLayRectBBox.w) / alterationBoxCount,\n overLayRectBBox.y,\n overLayRectBBox.w / alterationBoxCount,\n overLayRectBBox.h,\n 100,\n svg,\n alterationType,\n colorString\n )\n } else {\n genomicDataRectangleGeneratorPatient(\n overLayRectBBox.x +\n (genomicBoxCounter * overLayRectBBox.w) / alterationBoxCount,\n overLayRectBBox.y,\n overLayRectBBox.w / alterationBoxCount,\n overLayRectBBox.h,\n null,\n svg,\n '',\n null\n )\n }\n\n genomicBoxCounter++\n }\n //This function differs from genomicRectangleGenerator. genomicDataRectangleGeneratorPatient\n //has an extra parameter text. In patient view alterationTypes of genes are displayed instead of\n //alteration percentage. Hence a text is sent to this method which is alterationType\n function genomicDataRectangleGeneratorPatient(\n x,\n y,\n w,\n h,\n percent,\n parentSVG,\n text,\n colorString\n ) {\n if (percent) {\n const isNegativePercent = percent < 0\n // Rectangle Part\n const overlayRect = document.createElementNS(svgNameSpace, 'rect')\n overlayRect.setAttribute('x', x)\n overlayRect.setAttribute('y', y)\n overlayRect.setAttribute('width', w)\n overlayRect.setAttribute('height', h)\n overlayRect.setAttribute(\n 'style',\n 'stroke-width:1;stroke:rgb(0,0,0);opacity:1;fill:' + colorString + ';'\n )\n\n // Text Part\n const fontSize = 14\n const textLength = 4\n const xOffset = w / 2 - textLength * 4\n const yOffset = fontSize / 3\n\n const svgText = document.createElementNS(svgNameSpace, 'text')\n if (colorString === 'rgb(0,0,0)') {\n svgText.setAttribute('fill', 'white')\n }\n svgText.setAttribute('x', x + xOffset)\n svgText.setAttribute('y', y + h / 2 + yOffset)\n\n svgText.setAttribute('font-family', 'Arial')\n svgText.setAttribute('font-size', fontSize + '')\n\n //first 4 letters of the alterationTypes are used\n svgText.innerHTML = text.substring(0, 4)\n parentSVG.appendChild(overlayRect)\n parentSVG.appendChild(svgText)\n } else {\n //Normally\n colorString = 'rgb(210,210,210)'\n }\n }\n\n return svg\n }\n\n generateOncoprintForPatientNode(ele) {\n // const dataURI = 'data:image/svg+xml;utf8,'\n // nodeLabel refers to the nodeLabels in the overlay data\n const patientData = this.patientData\n const nodeLabel = ele.data('name')\n const genomicData = patientData[nodeLabel]\n\n const svgNameSpace = 'http://www.w3.org/2000/svg'\n const svgElement: any = document.createElementNS(svgNameSpace, 'svg')\n\n if (!genomicData) {\n return { outerHTML: '' }\n }\n\n const ruleset = new GeneticAlterationRuleSet(\n genomicData.geneticTrackRuleSetParams\n )\n const cellWidth = 6\n const cellPadding = 3\n const cellHeight = 23\n const cellVerticalPadding = 8\n\n const shapesPerDatum = ruleset.apply(\n genomicData.geneticTrackData,\n cellWidth,\n cellHeight\n )\n\n shapesPerDatum.forEach((shapes, index) => {\n const offsetX = index * (cellWidth + cellPadding) // width + padding\n const offsetY = cellVerticalPadding\n const g = document.createElementNS(svgNameSpace, 'g')\n shapes.forEach(shape =>\n g.appendChild(shapeToSvg(shape, offsetX, offsetY))\n )\n svgElement.appendChild(g)\n })\n\n // It seems this should be set according to the node size !\n svgElement.setAttribute(\n 'width',\n ((cellWidth + cellPadding) * shapesPerDatum.length).toString()\n )\n svgElement.setAttribute(\n 'height',\n (cellHeight + cellVerticalPadding).toString()\n )\n // This is important you need to include this to succesfully render in cytoscape.js!\n svgElement.setAttribute('xmlns', svgNameSpace)\n\n return svgElement\n }\n\n // Mapping of alteration type keys to strings\n // See: https://github.com/cBioPortal/cbioportal-frontend/blob/442e108208846255feb1ed5b309218cd44927fb9/src/shared/components/oncoprint/TooltipUtils.ts#L599\n getCNADisplayString(alterationTypeKey: number) {\n const disp_cna: { [integerCN: string]: string } = {\n '-2': 'HOMODELETED',\n '-1': 'HETLOSS',\n '1': 'GAIN',\n '2': 'AMPLIFIED'\n }\n return disp_cna[alterationTypeKey]\n }\n\n generateSvgIconForSample(iconColor: string, iconText: string) {\n var html =\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n iconText +\n '' +\n '' +\n ''\n\n return html\n }\n\n generateHTMLContentForNodeTooltip(ele, patientData) {\n const tooltipMaxHeight = '200px'\n const tooltipMaxWidth = '200px'\n const marginBetweenSamples = '10px'\n const sampleIconColorMap = patientData.sampleColors\n const sampleIndexMap = patientData.sampleIndex\n\n const nodeLabel = ele.data('name')\n const data = patientData[nodeLabel]\n\n // Outer wrapper for the entire tooltip\n var wrapper = $('
')\n wrapper.css({\n 'max-width': tooltipMaxWidth,\n 'max-height': tooltipMaxHeight,\n 'word-wrap': 'break-word',\n 'overflow-y': 'auto'\n })\n\n data.geneticTrackData.forEach((sample, sampleIndex) => {\n const sampleId = sample.sample\n const iconColor = sampleIconColorMap[sampleId]\n const iconText = (sampleIndexMap[sampleId] + 1).toString()\n const sampleIconSvgHTML = this.generateSvgIconForSample(\n iconColor,\n iconText\n )\n\n const margin = sampleIndex > 0 ? marginBetweenSamples : '0px'\n\n // Inner wrapper for a single sample\n var sampleWrapper = $('
')\n sampleWrapper.css({\n 'margin-top': margin\n })\n\n const sampleData = sample.data\n var mutationInfo = []\n var cnaInfo = []\n var fusionInfo = []\n sampleData.forEach(data => {\n const geneSymbol = data.gene.hugoGeneSymbol\n\n if (\n sample.disp_mut &&\n data.proteinChange &&\n data.mutationType !== 'Fusion'\n ) {\n const proteinChange = data.proteinChange\n mutationInfo.push({\n gene: geneSymbol,\n proteinChange: proteinChange\n })\n }\n\n if (sample.disp_cna && data.alteration) {\n const cnaLabelKey = data.alteration\n const cnaLabel = this.getCNADisplayString(cnaLabelKey)\n cnaInfo.push({\n gene: geneSymbol,\n cnaLabel: cnaLabel\n })\n }\n\n if (\n sample.disp_fusion &&\n data.proteinChange &&\n data.mutationType === 'Fusion'\n ) {\n const proteinChange = data.proteinChange\n fusionInfo.push({\n gene: geneSymbol,\n proteinChange: proteinChange\n })\n }\n })\n // Prepare HTML for tooltip\n var mutationInfoHTML = mutationInfo.length > 0 ? 'Mutation: ' : ''\n var cnaInfoHTML = cnaInfo.length > 0 ? 'CNA: ' : ''\n var fusionInfoHTML = fusionInfo.length > 0 ? 'Fusion: ' : ''\n\n mutationInfo.forEach((mutation, index) => {\n mutationInfoHTML +=\n '' + mutation.gene + ' ' + mutation.proteinChange + ''\n if (index !== mutationInfo.length - 1) {\n mutationInfoHTML += ', '\n } else {\n mutationInfoHTML += '
'\n }\n })\n\n cnaInfo.forEach((cna, index) => {\n cnaInfoHTML += '' + cna.gene + ' ' + cna.cnaLabel + ''\n if (index !== cnaInfo.length - 1) {\n cnaInfoHTML += ', '\n } else {\n cnaInfoHTML += '
'\n }\n })\n\n fusionInfo.forEach((fusion, index) => {\n fusionInfoHTML +=\n '' + fusion.gene + ' ' + fusion.proteinChange + ''\n if (index !== fusionInfo.length - 1) {\n fusionInfoHTML += ', '\n } else {\n fusionInfoHTML += '
'\n }\n })\n const sampleIdHTML = ' ' + sampleId + '' + '
'\n sampleWrapper.append(\n $(\n '
' +\n sampleIconSvgHTML +\n sampleIdHTML +\n mutationInfoHTML +\n cnaInfoHTML +\n fusionInfoHTML +\n +'
'\n )\n )\n wrapper.append(sampleWrapper)\n })\n\n return wrapper\n }\n}\n","import { action, makeObservable, observable } from \"mobx\";\nimport LayoutProperties, { ILayoutProperties } from \"../modals/LayoutProperties\";\nimport { IProfileMetaData } from \"../ui/react-pathway-mapper\";\nimport CBioPortalAccessor from \"../utils/CBioPortalAccessor\";\nimport SVGExporter from \"../utils/SVGExporter\";\nimport GenomicDataOverlayManager from \"./GenomicDataOverlayManager\";\nimport ShareDBManager from \"./ShareDBManager\";\n\nconst _ = require('lodash');\n\nexport default class EditorActionsManager{\n\n public static defaultLayoutProperties: ILayoutProperties =\n {\n name: 'cose-bilkent',\n nodeRepulsion: 4500,\n idealEdgeLength: 50,\n edgeElasticity: 0.45,\n nestingFactor: 0.1,\n gravity: 0.25,\n numIter: 2500,\n tile: true,\n animate: true,\n randomize: false,\n gravityRangeCompound: 1.5,\n // Gravity force (constant) for compounds\n gravityCompound: 1.0,\n // Gravity range (constant)\n gravityRange: 3.8,\n // Amount of vertical space to put between degree zero nodes during tiling (can also be a function)\n tilingPaddingVertical: 10,\n // Amount of horizontal space to put between degree zero nodes during tiling (can also be a function)\n tilingPaddingHorizontal: 10,\n // Initial cooling factor for incremental layout\n initialEnergyOnIncremental: 0.5,\n animationDuration: 2000,\n animationEasing: 'cubic-bezier(0.17,0.72,0.41,0.98)',\n };\n \n public cy: any;\n public genomicDataOverlayManager: GenomicDataOverlayManager;\n public edgeEditing: any;\n public selectedNodeStack: any;\n public layoutProperties: ILayoutProperties;\n \n private FIT_CONSTANT: number;\n private observers: any[];\n private svgExporter: SVGExporter;\n private undoRedoManager: any;\n private isCbioPortal: boolean;\n private isCollaborative: boolean;\n private shareDBManager: ShareDBManager;\n private portalAccessor: CBioPortalAccessor;\n\n @observable\n private profiles: IProfileMetaData[];\n\n constructor(isCollaborative: boolean, shareDBManager: any, cyInst: any, isCBioPortal: boolean,\n undoRedoManager: any, portalAccessor: CBioPortalAccessor, profiles: IProfileMetaData[])\n {\n // Set cy instance and set real time manager reference if collaborative mode\n makeObservable(this);\n this.cy = cyInst;\n this.isCollaborative = isCollaborative;\n this.isCbioPortal = isCBioPortal;\n this.profiles = profiles;\n const edgeEditingOptions = {\n // this function specifies the positions of bend points\n bendPositionsFunction: function (ele: any) {\n return ele.data('bendPointPositions');\n },\n // whether to initilize bend points on creation of this extension automatically\n initBendPointsAutomatically: true,\n // whether the bend editing operations are undoable (requires cytoscape-undo-redo.js)\n undoable: true,\n // the size of bend shape is obtained by multipling width of edge with this parameter\n bendShapeSizeFactor: 6,\n // whether to start the plugin in the enabled state\n enabled: !this.isCbioPortal,\n // title of add bend point menu item (User may need to adjust width of menu items according to length of this option)\n addBendMenuItemTitle: \"Add Bend Point\",\n // title of remove bend point menu item (User may need to adjust width of menu items according to length of this option)\n removeBendMenuItemTitle: \"Remove Bend Point\",\n \n handleReconnectEdge: this.reconnectEdge.bind(this),\n };\n \n this.edgeEditing = this.cy.edgeEditing(edgeEditingOptions);\n this.portalAccessor = portalAccessor;\n if(this.isCollaborative) {\n this.shareDBManager = shareDBManager;\n }\n\n this.FIT_CONSTANT = 50;\n\n this.layoutProperties = _.clone(EditorActionsManager.defaultLayoutProperties);\n this.observers = [];\n this.genomicDataOverlayManager = new GenomicDataOverlayManager(this.cy);\n this.svgExporter = new SVGExporter(this.edgeEditing, this);\n\n this.selectedNodeStack = {};\n this.undoRedoManager = undoRedoManager;\n this.undoRedoManager.action(\"changePositions\", this.doChangePosition, this.undoChangePosition);\n this.undoRedoManager.action(\"changeNodeSize\", this.doChangeNodeSize, this.undoChangeNodeSize);\n this.undoRedoManager.action(\"changeCompoundSize\", this.doChangeCompoundSize, this.undoChangeCompoundSize);\n this.undoRedoManager.action(\"changeName\", this.doChangename, this.undoChangeName);\n this.undoRedoManager.action(\"hideNode\", this.doHide, this.undoHide);\n this.undoRedoManager.action(\"showAllNodes\", this.doShow, this.undoShow);\n // HighlightOthers is the type of highlight from the menu and by searching, while highlightInvalidGenes is for only invalid genes\n this.undoRedoManager.action(\"highlightInvalidGenes\", this.doHighlightInvalidGenes, this.undoHighlightInvalidGenes);\n this.undoRedoManager.action(\"removeHighlightInvalidGenes\", this.undoHighlightInvalidGenes, this.doHighlightInvalidGenes);\n this.undoRedoManager.action(\"highlightOthers\", this.doHighlight, this.undoHighlight);\n this.undoRedoManager.action(\"removeOtherHighlight\", this.undoHighlight, this.doHighlight);\n\n };\n\n @action.bound\n setProfile(index: number, profile: IProfileMetaData) {\n this.profiles[index] = profile;\n }\n\n @action.bound\n addProfile(profile: IProfileMetaData) {\n this.profiles.push(profile);\n }\n\n @action.bound\n removeProfiles() {\n this.profiles.length = 0;\n }\n\n handleChangePositionByAlignment(movedNodeArr: any)\n {\n if (this.isCollaborative)\n this.shareDBManager.changeElementsPositionByAlignment(movedNodeArr);\n else\n this.undoRedoManager.do(\"changePositions\", movedNodeArr)\n };\n\n /*\n * Undo redo for changing positions of nodes via programatically (node.position)\n * **/\n doChangePosition(movedNodes: any)\n {\n const newMovedNodes = [];\n\n for(let i = 0; i < movedNodes.length; i++)\n {\n const currentNodePosition =\n {\n x: movedNodes[i].node.position().x,\n y: movedNodes[i].node.position().y\n };\n newMovedNodes.push({node: movedNodes[i].node, oldPosition: currentNodePosition, nextPosition: movedNodes[i].nextPosition});\n movedNodes[i].node.position(movedNodes[i].nextPosition);\n }\n\n return newMovedNodes;\n };\n\n undoChangePosition(movedNodes: any)\n {\n var newMovedNodes = [];\n\n for(var i = 0; i < movedNodes.length; i++)\n {\n var currentNodePosition =\n {\n x: movedNodes[i].node.position().x,\n y: movedNodes[i].node.position().y\n };\n newMovedNodes.push({node: movedNodes[i].node, oldPosition: movedNodes[i].oldPosition, nextPosition: currentNodePosition});\n movedNodes[i].node.position(movedNodes[i].oldPosition);\n }\n\n return newMovedNodes;\n };\n\n changeNodePositionsByArrows(selectedNodes: any)\n {\n if (this.isCollaborative)\n this.shareDBManager.changeNodePositionsShareDB(selectedNodes);\n //resize-node extension already deals for the movement in local mode\n };\n\n /*\n * Undo redo for changing size of nodes\n * **/\n doChangeNodeSize (args: any)\n {\n args.ele.data('w', args.newWidth);\n args.ele.data('h', args.newHeight);\n args.ele.style('width', args.newWidth);\n args.ele.style('height', args.newHeight);\n\n return args;\n };\n\n undoChangeNodeSize(args: any)\n {\n args.ele.data('w', args.oldWidth);\n args.ele.data('h', args.oldHeight);\n args.ele.style('width', args.oldWidth);\n args.ele.style('height', args.oldHeight);\n\n return args;\n };\n\n /*\n * Undo redo for changing size of compounds\n * **/\n doChangeCompoundSize(args: any)\n {\n args.ele.style('min-width', args.newMinWidth);\n args.ele.style('min-width-bias-left', args.newMinWidthBiasLeft);\n args.ele.style('min-width-bias-right', args.newMinWidthBiasRight);\n args.ele.style('min-height', args.newMinHeight);\n args.ele.style('min-height-bias-top', args.newMinHeightBiasTop);\n args.ele.style('min-height-bias-bottom', args.newMinHeightBiasBottom);\n\n return args;\n };\n\n undoChangeCompoundSize(args: any)\n {\n if (args.oldMinWidth == undefined)\n {\n args.ele.style('min-width', 0);\n args.ele.style('min-width-bias-left', 0);\n args.ele.style('min-width-bias-right', 0);\n\n }\n else {\n args.ele.style('min-width', args.oldMinWidth);\n args.ele.style('min-width-bias-left', args.oldMinWidthBiasLeft);\n args.ele.style('min-width-bias-right', args.oldMinWidthBiasRight);\n }\n if (args.oldMinHeight == undefined)\n {\n args.ele.style('min-height', 0);\n args.ele.style('min-height-bias-top', 0);\n args.ele.style('min-height-bias-bottom', 0);\n }\n else {\n args.ele.style('min-height', args.oldMinHeight);\n args.ele.style('min-height-bias-top', args.oldMinHeightBiasTop);\n args.ele.style('min-height-bias-bottom', args.oldMinHeightBiasBottom);\n }\n\n return args;\n };\n\n changeName(ele: any, newName: any)\n {\n if (this.isCollaborative)\n {\n this.shareDBManager.changeName(ele, newName);\n }\n else\n {\n this.changeNameCy(ele, newName);\n }\n };\n\n changeNameCy(ele: any, newName: any)\n {\n var currentName = ele.data('name');\n var args = {ele: ele, oldName: currentName, newName: newName};\n this.undoRedoManager.do('changeName', args);\n };\n\n /*\n * Undo redo for changing name of nodes\n * **/\n doChangename(args: any)\n {\n\n var currentName = args.ele.data('name');\n var newArgs = {ele: args.ele, newName: args.newName, oldName: currentName};\n args.ele.data('name', args.newName);\n args.ele.css('content', args.newName);\n\n return newArgs;\n };\n\n undoChangeName(args: any)\n {\n\n var currentName = args.ele.data('name');\n var newArgs = {ele: args.ele, newName: args.newName, oldName: currentName};\n args.ele.data('name', args.oldName);\n args.ele.css('content', args.oldName);\n\n return newArgs;\n };\n\n hideSelectedNodes()\n {\n //Hides the selected elements\n var sel = this.cy.nodes(\":selected\");\n var nodesToHide = sel;\n var b = true;\n //Hides the parents if they have no children\n sel.parent().each((parent: any) =>\n {\n b=true;\n parent.children().each(function(ch: any)\n {\n if (!ch.selected())\n {\n if (ch.visible()) b=false;\n }\n }\n );\n if (b) nodesToHide = nodesToHide.add(parent);\n });\n this.cy.elements(\":selected\").unselect();\n if (this.isCollaborative)\n this.shareDBManager.changeVisibility(nodesToHide, true);\n else\n this.undoRedoManager.do('hideNode', nodesToHide);\n };\n\n /*\n * Undo redo for hiding nodes\n * **/\n doHide(args: any)\n {\n args.hide();\n return args;\n };\n\n undoHide(args: any)\n {\n args.show();\n return args;\n };\n\n showAllNodes()\n {\n var hid = this.cy.nodes(\":hidden\");\n if (this.isCollaborative)\n this.shareDBManager.changeVisibility(hid, false);\n else\n this.undoRedoManager.do('showAllNodes', hid);\n };\n\n /*\n * Undo redo for showing all nodes\n * **/\n doShow(args: any)\n {\n args.show();\n return args;\n };\n\n undoShow(args: any)\n {\n args.hide();\n return args;\n };\n\n highlightElementsInitially(invalidHighlightedGenesIDs: string[], invalidGenesIDs: string[],\n highlightedGenesIDs: string[], highlightedEdgesIDs: string[], hiddenGenesIDs: string[])\n {\n for (var i in invalidHighlightedGenesIDs)\n {\n this.cy.$('#'+invalidHighlightedGenesIDs[i]).addClass('invalidGeneHighlight');\n }\n for (var i in invalidGenesIDs)\n {\n this.cy.$('#'+invalidGenesIDs[i]).addClass('invalidGene');\n }\n for (var i in highlightedGenesIDs)\n {\n this.cy.$('#'+highlightedGenesIDs[i]).addClass('highlightedNode');\n }\n for (var i in highlightedEdgesIDs)\n {\n this.cy.$('#'+highlightedEdgesIDs[i]).addClass('highlightedEdge');\n }\n for (var i in hiddenGenesIDs)\n {\n this.cy.$('#'+hiddenGenesIDs[i]).hide();\n }\n };\n\n validateGenes()\n {\n var geneSymbols = this.getGeneSymbols();\n this.portalAccessor.validateGenes(geneSymbols, this);\n }\n\n //Get all gene symbols\n getGeneSymbols()\n {\n var geneSymbols: any[] = [];\n this.cy.nodes().forEach( function (gene: any)\n {\n if(gene.data().type === \"GENE\")\n geneSymbols.push(gene.data().name);\n });\n return geneSymbols;\n }\n\n\n highlightInvalidGenes(validGeneSymbols: any)\n {\n if (this.isCollaborative)\n {\n var invalidGenes: any[] = [];\n this.cy.nodes().forEach( function (gene: any)\n {\n if(gene.data().type === \"GENE\")\n {\n var geneName = gene.data().name;\n if(validGeneSymbols.indexOf(geneName) < 0)\n invalidGenes.push(gene.id());\n }\n });\n this.shareDBManager.changeHighlightInvalidGenes(invalidGenes, true);\n // TODO: Amendment by Ziya\n /*\n if (invalidGenes.length > 0)\n this.notificationManager.createNotification(\"Invalid genes are highlighted\",\"fail\");\n else\n this.notificationManager.createNotification(\"All gene symbols are valid\",\"success\");*/\n }\n else\n {\n var highlightedGenes = this.cy.collection();\n this.cy.nodes().forEach( function (gene: any)\n {\n if(gene.data().type === \"GENE\")\n {\n var geneName = gene.data().name;\n if(validGeneSymbols.indexOf(geneName) < 0)\n highlightedGenes = highlightedGenes.add(gene);\n }\n });\n // TODO: Amendment by Ziya\n /*\n if (highlightedGenes.size() > 0)\n this.notificationManager.createNotification(\"Invalid genes are highlighted\",\"fail\");\n else\n this.notificationManager.createNotification(\"All gene symbols are valid\",\"success\");*/\n\n var nodesToAddInvalidHighlight = this.cy.collection();\n highlightedGenes.forEach(function(ele: any){\n if (!ele.hasClass('invalidGeneHighlight') && !ele.hasClass('invalidGene'))\n nodesToAddInvalidHighlight = nodesToAddInvalidHighlight.union(ele);\n });\n this.undoRedoManager.do('highlightInvalidGenes', nodesToAddInvalidHighlight);\n }\n }\n\n removeInvalidGeneHighlights(actions: any[])\n {\n if (this.isCollaborative)\n {\n var geneIDs: any[] = [];\n this.cy.nodes().forEach( function (gene: any)\n {\n if(gene.data().type === \"GENE\")\n {\n if(gene.hasClass('invalidGeneHighlight') || gene.hasClass('invalidGene'))\n geneIDs.push(gene.id());\n }\n });\n this.shareDBManager.changeHighlightInvalidGenes(geneIDs, false);\n }\n else\n {\n var nodesToRemoveInvalidHighlight = this.cy.collection();\n this.cy.nodes().forEach(function(ele: any){\n if (ele.hasClass('invalidGeneHighlight') || ele.hasClass('invalidGene'))\n nodesToRemoveInvalidHighlight = nodesToRemoveInvalidHighlight.union(ele);\n });\n actions.push({name: \"removeHighlightInvalidGenes\", param: nodesToRemoveInvalidHighlight});\n // this.undoRedoManager.do('removeHighlightInvalidGenes', nodesToRemoveInvalidHighlight);\n }\n }\n\n doHighlightInvalidGenes(args: any)\n {\n args.each(function(n: any)\n {\n if(n.hasClass('highlightedNode'))\n {\n n.removeClass('highlightedNode');\n n.addClass(\"invalidGeneHighlight\");\n }\n else\n n.addClass(\"invalidGene\");\n });\n return args;\n };\n\n undoHighlightInvalidGenes(args: any)\n {\n args.each(function(n: any)\n {\n if(n.hasClass('invalidGeneHighlight'))\n {\n n.removeClass('invalidGeneHighlight');\n n.addClass(\"highlightedNode\");\n }\n else\n n.removeClass(\"invalidGene\");\n });\n return args;\n }\n\n highlightSelected()\n {\n var sel = this.cy.elements(\":selected\");\n sel.unselect();\n var elementsToHighlight = this.cy.collection();\n sel.forEach(function(ele: any){\n if (!ele.hasClass('invalidGeneHighlight') && !ele.hasClass('highlightedNode') && !ele.hasClass('highlightedEdge'))\n elementsToHighlight = elementsToHighlight.union(ele);\n });\n if (this.isCollaborative)\n this.shareDBManager.changeHighlight(elementsToHighlight, true);\n else\n this.undoRedoManager.do('highlightOthers', elementsToHighlight);\n };\n\n highlightNeighbors()\n {\n var sel = this.cy.elements(\":selected\");\n var neighbors = sel.neighborhood();\n neighbors = neighbors.union(sel);\n neighbors.unselect();\n var elementsToHighlight = this.cy.collection();\n neighbors.forEach(function(ele: any){\n if (!ele.hasClass('invalidGeneHighlight') && !ele.hasClass('highlightedNode') && !ele.hasClass('highlightedEdge'))\n elementsToHighlight = elementsToHighlight.union(ele);\n });\n if (this.isCollaborative)\n this.shareDBManager.changeHighlight(elementsToHighlight, true);\n else\n this.undoRedoManager.do('highlightOthers', elementsToHighlight);\n };\n\n highlightBySearch(args: any[])\n {\n if (this.isCollaborative)\n this.shareDBManager.changeHighlight(args, true);\n else\n this.undoRedoManager.do('highlightOthers', args);\n };\n\n removeOtherHighlight(actions: any[])\n {\n var nodesToRemoveHighlight = this.cy.collection();\n //TODO cytoscape selectors may provide more handy functionality instead of iterating over !\n this.cy.elements().forEach(function(ele: any){\n if (ele.hasClass('highlightedNode') || ele.hasClass('highlightedEdge') || ele.hasClass('invalidGeneHighlight'))\n nodesToRemoveHighlight = nodesToRemoveHighlight.add(ele);\n });\n\n if (this.isCollaborative)\n this.shareDBManager.changeHighlight(nodesToRemoveHighlight, false);\n else\n actions.push({name: \"removeOtherHighlight\", param: nodesToRemoveHighlight});\n // this.undoRedoManager.do('removeOtherHighlight', nodesToRemoveHighlight);\n };\n\n /*\n * Undo redo for highlighting of nodes\n * **/\n doHighlight(args: any)\n {\n args.each(function(n: any)\n {\n if (n.isEdge())\n n.addClass(\"highlightedEdge\");\n else\n {\n if(n.hasClass('invalidGene'))\n {\n n.removeClass(\"invalidGene\");\n n.addClass(\"invalidGeneHighlight\");\n }\n else\n n.addClass(\"highlightedNode\");\n }\n });\n return args;\n };\n\n undoHighlight(args: any)\n {\n args.each(function(n: any)\n {\n if (n.isEdge())\n n.removeClass(\"highlightedEdge\");\n else\n {\n if(n.hasClass('invalidGeneHighlight'))\n {\n n.removeClass(\"invalidGeneHighlight\");\n n.addClass(\"invalidGene\");\n }\n else\n n.removeClass(\"highlightedNode\");\n }\n });\n return args;\n };\n\n removeAllHighlight()\n {\n let actions: any[] = [];\n this.removeInvalidGeneHighlights(actions);\n this.removeOtherHighlight(actions);\n this.cy.undoRedo().do(\"batch\", actions);\n };\n\n postLayout()\n {\n if (this.isCollaborative)\n {\n //Previously this.cy.nodes() was sent as an argument in moveElements function but it caused a problem when\n // the compound node was moved before the child nodes\n var movedNodes = this.cy.collection();\n var parentNodes = this.cy.collection();\n this.cy.nodes().forEach(function(node: any)\n {\n if (!node.isParent())\n movedNodes = movedNodes.add(node);\n else\n parentNodes = parentNodes.add(node);\n });\n this.moveElements(movedNodes);\n this.moveElements(parentNodes);\n\n var newState = {\n zoomLevel: this.cy.zoom(),\n panLevel: this.cy.pan()\n };\n this.updateGlobalOptions(newState);\n }\n };\n\n /*\n * Gets the first empty index from the list in cloud model\n * **/\n getEmptyGroupID()\n {\n if(this.isCollaborative)\n return this.shareDBManager.getEmptyGroupID();\n else\n return this.genomicDataOverlayManager.getEmptyGroupID();\n };\n\n /*\n * Gets the first empty index from the list in cloud model\n * **/\n groupGenomicData(cancerNames: any[], groupID: string)\n {\n return this.shareDBManager.groupGenomicData(cancerNames, groupID);\n };\n\n addPubmedIDs(edge: any, pubmedIDs: number[])\n {\n if (this.isCollaborative)\n {\n this.shareDBManager.addPubmedIDs(edge.id(), pubmedIDs);\n }\n else\n {\n var pubmedArray = edge.data('pubmedIDs');\n var validPubmedIDs = _.filter(pubmedIDs, function(id: number){\n return !isNaN(id);\n });\n pubmedArray.push.apply(pubmedArray,validPubmedIDs);\n edge.data('pubmedIDs', _.uniq(pubmedArray));\n }\n }\n\n removePubmedID(edge: any, pubmedIDs: number[])\n {\n if (this.isCollaborative)\n {\n this.shareDBManager.removePubmedID(edge.id(), pubmedIDs);\n }\n else\n {\n var pubmedArray = edge.data('pubmedIDs');\n edge.data('pubmedIDs', _.difference(pubmedArray, pubmedIDs));\n }\n }\n\n updateEdgeBendPoints(edge: any)\n {\n if (this.isCollaborative)\n {\n var numberOfBendPoints = 0;\n if (this.edgeEditing.getSegmentPoints(edge) !== undefined)\n numberOfBendPoints = this.edgeEditing.getSegmentPoints(edge).length/2;\n var bendPointsArray = [];\n for (var j = 0; j < numberOfBendPoints; j++)\n {\n bendPointsArray.push(\n {\n x: this.edgeEditing.getSegmentPoints(edge)[2*j],\n y: this.edgeEditing.getSegmentPoints(edge)[2*j+1]\n }\n );\n }\n // edge.data(\"bendPointPositions\", bendPointsArray);\n // edgeEditing.initBendPoints(edge);\n \n this.shareDBManager.updateEdgeBendPoints(edge.id(), bendPointsArray);\n }\n }\n\n //Related to order the nodes according to the selection of user\n pushSelectedNodeStack(ele: any)\n {\n this.selectedNodeStack[ele.id()] = ele;\n }\n\n removeElementFromSelectedNodeStack(ele: any)\n {\n var nodeID = ele.id();\n if (nodeID in this.selectedNodeStack)\n delete this.selectedNodeStack[ele.id()];\n }\n\n clearSelectedNodeStack()\n {\n this.selectedNodeStack = {};\n }\n\n exportSVG()\n {\n return this.svgExporter.exportGraph(this.cy.nodes(), this.cy.edges());\n }\n\n //Simple observer-observable pattern for views!!!!!\n registerObserver(observer: any)\n {\n this.observers.push(observer);\n };\n\n notifyObservers()\n {\n for (var i in this.observers)\n {\n var observer = this.observers[i];\n observer.notify();\n }\n };\n\n registerGenomicDataObserver(observer: any)\n {\n this.genomicDataOverlayManager.registerObserver(observer);\n }\n\n updateGenomicDataVisibility(dataMap: any)\n {\n if(this.isCollaborative)\n {\n //TODO compound OP\n // this.shareDBManager.clearGenomicVisData();\n this.shareDBManager.addGenomicVisibilityData(dataMap);\n }\n else\n {\n for (var _key in dataMap)\n {\n this.genomicDataOverlayManager.updateGenomicDataVisibility(_key, dataMap[_key]);\n }\n this.genomicDataOverlayManager.showGenomicData();\n }\n }\n\n //Global options related functions, zoom etc..\n getGlobalOptions()\n {\n return {\n zoomLevel: this.cy.zoom(),\n panLevel: this.cy.pan()\n };\n }\n\n changeGlobalOptions(op: any)\n {\n var globalOptions = op.li;\n this.cy.zoom(globalOptions.zoomLevel);\n this.cy.pan(globalOptions.panLevel);\n }\n\n updateGlobalOptions(newOptions: any)\n {\n if(this.isCollaborative)\n this.shareDBManager.updateGlobalOptions(newOptions);\n }\n\n //Layout properties related functions\n saveLayoutProperties(newLayoutProps: any)\n {\n if(this.isCollaborative)\n {\n // Call a real time function that updated real time object and\n // its callback (updateLayoutPropertiesCallback) will handle sync of this object\n // across collaborators\n this.shareDBManager.updateLayoutProperties(newLayoutProps);\n }\n else\n {\n this.layoutProperties = _.clone(newLayoutProps);\n }\n };\n\n updateLayoutPropertiesCallback(op: any)\n {\n var newLayoutProps = op.li;\n this.layoutProperties = _.clone(newLayoutProps);\n LayoutProperties.layoutProperties = _.clone(this.layoutProperties);\n //Notify observers to reflect changes on colalborative object to the views\n this.notifyObservers();\n };\n\n performLayout()\n {\n this.undoRedoManager.do(\"layout\", {options: this.layoutProperties, eles: null, zoom: this.cy.zoom(), pan: this.cy.pan()});\n };\n\n //Node Related Functions\n addNode(nodeData: any, posData: any)\n {\n if (this.isCollaborative)\n {\n this.addNewNodeToShareDB(nodeData, posData);\n }\n else\n {\n this.addNodetoCy(nodeData,posData);\n }\n };\n\n addNodes(nodes: any[])\n {\n for (var i in nodes)\n {\n this.addNode(nodes[i].data, nodes[i].position);\n }\n };\n\n addNodesCy(nodes: any[])\n {\n var nodeArr: any[] = [];\n for (var i in nodes)\n {\n var nodeData = nodes[i].data;\n var posData = nodes[i].position;\n\n var newNode =\n {\n group: \"nodes\",\n data: nodeData,\n position: {}\n };\n\n if (nodeData.parent === undefined )\n {\n delete newNode.data.parent;\n }\n\n if (posData)\n {\n newNode.position =\n {\n x: posData.x,\n y: posData.y\n }\n }\n nodeArr[i] = newNode;\n }\n\n this.cy.add(nodeArr);\n this.cy.nodes().updateCompoundBounds();\n\n };\n\n addNodetoCy(nodeData: any, posData: any)\n {\n var newNode =\n {\n group: \"nodes\",\n data: nodeData,\n position: {}\n };\n\n if (nodeData.parent === undefined )\n {\n delete newNode.data.parent;\n }\n\n if (posData)\n {\n newNode.position =\n {\n x: posData.x,\n y: posData.y\n }\n }\n\n //his.cy.add(newNode);\n this.cy.nodes().updateCompoundBounds();\n this.undoRedoManager.do(\"add\", newNode);\n //Width was not properly updated only by changing data property\n var thatEle = this.cy.getElementById(nodeData.id);\n thatEle.style('width', thatEle.data('w'));\n };\n\n shareDBNodeAddRemoveEventCallBack(op: any)\n {\n //Get real time node object and sync it to node addition or removal\n var isRemove = Object.keys(op)[1] === 'od';\n var node = op.oi || op.od;\n //Removal Operation\n if (isRemove)\n {\n var nodeID = op.p[1];\n //Remove element from existing graph\n var cyEle = this.cy.$(\"#\" + nodeID);\n this.removeElementCy(cyEle);\n this.cy.nodes().updateCompoundBounds();\n }\n //Addition Operation\n else\n {\n this.addNewNodeLocally(node);\n }\n };\n\n addNewNodeLocally(realtimeNode: any)\n {\n var nodeData =\n {\n id: realtimeNode.id,\n type: realtimeNode.type,\n name: realtimeNode.name,\n parent: realtimeNode.parent,\n w: realtimeNode.w,\n h: realtimeNode.h\n };\n\n if (realtimeNode.x != \"undefined\" && realtimeNode.y != \"undefined\")\n {\n this.addNodetoCy(nodeData, {x: realtimeNode.x, y: realtimeNode.y});\n }\n else\n {\n // TODO: Amendment by Ziya\n this.addNodetoCy(nodeData, null);\n }\n\n this.cy.nodes().updateCompoundBounds();\n };\n\n addNewNodeToShareDB(nodeData: any, posData: any)\n {\n this.shareDBManager.addNewNode(nodeData,posData);\n };\n\n //Edge related functions\n addEdge(edgeData: any)\n {\n if (this.isCollaborative)\n {\n this.addNewEdgeShareDB(edgeData);\n }\n else\n {\n this.addNewEdgetoCy(edgeData);\n }\n };\n\n addEdges(edges: any[])\n {\n for (var i in edges)\n {\n this.addEdge(edges[i].data);\n }\n };\n\n addEdgesCy(edges: any[])\n {\n const newEdges = [];\n\n\n for (var i in edges)\n {\n const newEdge =\n {\n group: \"edges\",\n data: edges[i].data\n };\n newEdges.push(newEdge);\n }\n this.cy.add(newEdges);\n };\n\n addNewEdgeShareDB(edgeData: any)\n {\n this.shareDBManager.addNewEdge(edgeData);\n };\n\n addNewEdgetoCy(edgeData: any)\n {\n var newEdge =\n {\n group: \"edges\",\n data: edgeData\n };\n this.undoRedoManager.do(\"add\", newEdge);\n };\n\n shareDBEdgeAddRemoveEventCallBack(op: any)\n {\n\n //Get real time node object and sync it to node addition or removal\n var isRemove = Object.keys(op)[1] === 'od';\n var edge = op.oi || op.od;\n\n //Removal Operation\n if (isRemove)\n {\n var edgeID = op.p[1];\n //Remove element from existing graph\n var cyEle = this.cy.$(\"#\" + edgeID);\n this.removeElementCy(cyEle);\n }\n //Addition Operation\n else\n {\n this.addNewEdgeLocally(edge);\n }\n };\n\n addNewElementsLocally(realTimeNodeArray: any[], realTimeEdgeArray: any[])\n {\n const nodeList: any[] = [];\n const nodeMap: any = {};\n\n for (var i in realTimeNodeArray)\n {\n var realTimeNode = realTimeNodeArray[i];\n\n var nodeID = realTimeNode.id;\n\n //Added for backward compatibility when width was not defined\n var nodeWidth = (realTimeNode.w == undefined) ? 150 : realTimeNode.w ;\n var nodeHeight = (realTimeNode.h == undefined) ? 52 : realTimeNode.h ;\n var compoundMinWidth = (realTimeNode.minWidth == undefined) ? 0 : realTimeNode.minWidth ;\n var compoundMinWidthBiasLeft = (realTimeNode.minWidthBiasLeft == undefined) ? 0 : realTimeNode.minWidthBiasLeft ;\n var compoundMinWidthBiasRight = (realTimeNode.minWidthBiasRight == undefined) ? 0 : realTimeNode.minWidthBiasRight ;\n var compoundMinHeight = (realTimeNode.minHeight == undefined) ? 0 : realTimeNode.minHeight ;\n var compoundMinHeightBiasTop = (realTimeNode.minHeightBiasTop == undefined) ? 0 : realTimeNode.minHeightBiasTop ;\n var compoundMinHeightBiasBottom = (realTimeNode.minHeightBiasBottom == undefined) ? 0 : realTimeNode.minHeightBiasBottom;\n\n const nodeData =\n {\n group: 'nodes',\n // TODO: Amendment by Ziya\n position: {},\n data:\n {\n id: nodeID,\n type: realTimeNode.type,\n name: realTimeNode.name,\n parent: realTimeNode.parent,\n w: nodeWidth,\n h: nodeHeight\n },\n style:\n {\n 'width': nodeWidth,\n 'height': nodeHeight,\n 'min-width': compoundMinWidth,\n 'min-width-bias-left': compoundMinWidthBiasLeft,\n 'min-width-bias-right': compoundMinWidthBiasRight,\n 'min-height': compoundMinHeight,\n 'min-height-bias-top': compoundMinHeightBiasTop,\n 'min-height-bias-bottom': compoundMinHeightBiasBottom\n }\n };\n\n if (nodeData.data.parent === undefined )\n {\n delete nodeData.data.parent;\n }\n\n if (realTimeNode.x && realTimeNode.y)\n {\n nodeData.position =\n {\n x: realTimeNode.x,\n y: realTimeNode.y\n }\n }\n\n nodeMap[nodeID] = nodeData;\n nodeList.push(nodeData);\n }\n\n var edgeList = [];\n for (var i in realTimeEdgeArray)\n {\n var edge = realTimeEdgeArray[i];\n var edgeID = edge.id;\n\n //If source and and target is somehow lost in remote model do not create this edge\n if(!(edge.source in nodeMap && edge.target in nodeMap))\n continue\n\n var edgeData =\n {\n group: 'edges',\n data:\n {\n id: edgeID,\n type: edge.type,\n source: edge.source,\n target: edge.target,\n pubmedIDs: edge.pubmedIDs,\n name: edge.name,\n bendPointPositions: edge.bendPoint\n }\n };\n\n edgeList.push(edgeData);\n }\n\n this.cy.add(nodeList);\n this.cy.add(edgeList);\n\n this.edgeEditing.initBendPoints(this.cy.edges());\n\n this.cy.nodes().updateCompoundBounds();\n }\n\n addNewEdgeLocally(edge: any)\n {\n var edgeData =\n {\n id: edge.id,\n type: edge.type,\n source: edge.source,\n target: edge.target,\n pubmedIDs: edge.pubmedIDs,\n name: edge.name,\n bendPointPositions: edge.bendPoint\n };\n this.addNewEdgetoCy(edgeData);\n this.edgeEditing.initBendPoints(this.cy.getElementById( edge.id ));\n };\n\n reconnectEdge(sourceID: string, targetID: string, edgeData: any) {\n\n if(this.isCollaborative){\n var edge = this.cy.getElementById(edgeData.id);\n this.reconnectEdgeInShareDB(sourceID, targetID, edgeData);\n }\n else{\n var location = {\n source: sourceID,\n target: targetID\n };\n\n var edge = this.cy.getElementById(edgeData.id);\n edge.move(location);\n }\n\n return this.cy.getElementById(edgeData.id);\n };\n\n reconnectEdgeInShareDB(sourceID: string, targetID: string, edgeData: any) {\n this.shareDBManager.reconnectEdge(sourceID, targetID, edgeData);\n };\n\n //Removal functions\n removeElement(ele: any)\n {\n if (this.isCollaborative)\n {\n this.removeElementsFromShareDB(ele);\n }\n else\n {\n this.removeElementsCy(ele);\n }\n };\n\n removeElementCy(ele: any)\n {\n this.undoRedoManager.do(\"remove\", ele);\n };\n\n removeElementsCy(ele: any)\n {\n this.undoRedoManager.do(\"remove\", ele);\n };\n\n removeElementsFromShareDB(eles: any[])\n {\n var self = this;\n eles.forEach(function (ele)\n {\n self.shareDBManager.removeElement(ele.id());\n });\n };\n\n removeElementFromShareDB(ele: any)\n {\n this.shareDBManager.removeElement(ele.id());\n };\n\n changeParents(eles: any[], newParentId: string)\n {\n if(this.isCollaborative)\n {\n this.changeParentShareDB(eles, newParentId);\n }\n else\n {\n var parentData = newParentId ? newParentId : null;\n\n // Old manual way to change parents in local mode\n //this.changeParentCy(eles, newParentId);\n\n //Save element's previous width & height in dim array\n const dim : any[]= [];\n const id : any[]= [];\n eles.forEach(function (ele: any)\n {\n var parameters =\n {\n id: ele.id(),\n width: ele.style(\"width\"),\n height: ele.style(\"height\")\n };\n dim.push(parameters);\n id.push(ele.id());\n });\n\n const parentElem = this.cy.getElementById(parentData);\n var param = {\n firstTime: true,\n parentData: parentData, // It keeps the newParentId (Just an id for each nodes for the first time)\n nodes: eles,\n posDiffX: (!parentData) ? 0 : parentElem.position('x') - eles[0].position('x'),\n posDiffY: (!parentData) ? 0 : parentElem.position('y') - eles[0].position('y')\n };\n this.undoRedoManager.do('changeParent', param);\n\n //The elements after change parent operation are different so we find them by using the saved ids\n // and add them to the collection\n var collection = this.cy.collection();\n for (var i in id)\n {\n var elementById = this.cy.getElementById(id[i]);\n collection = collection.add(elementById);\n }\n //Set their previous size to the new elements in the collection\n collection.forEach(function (ele: any, i: number)\n {\n if (ele.id() == dim[i].id)\n ele.style(\"width\", dim[i].width);\n ele.style(\"height\", dim[i].height);\n });\n }\n };\n\n changeParentShareDB (eles: any, newParentId: string)\n {\n\n var classRef = this;\n function getTopLevelParents(eles: any[])\n {\n var tpMostNodes = classRef.cy.collection();\n const parentMap : any = {};\n\n //Get all parents\n eles.forEach(function (node)\n {\n if(node.isParent())\n parentMap[node.id()] = node;\n });\n\n //Get all parents\n eles.forEach(function (node)\n {\n var nodeParent = node.parent();\n\n if(parentMap[nodeParent.id()] === undefined)\n tpMostNodes = tpMostNodes.union(node);\n });\n\n return tpMostNodes;\n }\n\n\n class NodeObj{\n public nodeRef: any;\n public children: any;\n constructor(nodeObj: any){\n this.nodeRef = nodeObj;\n this.children = [];\n }\n }\n var connectedEdges = eles.connectedEdges();\n // Traverses given elements and constructs subgraph relations\n // creates a nested structure into rootnodeObj\n function traverseNodes(eles: any[], rootNodeObj: any)\n {\n eles.forEach(function (ele)\n {\n connectedEdges = connectedEdges.union(ele.connectedEdges());\n\n if(ele.isParent())\n {\n rootNodeObj.children.push(new NodeObj(ele));\n var lengthOfChildrenArray = rootNodeObj.children.length;\n traverseNodes(ele.children(), rootNodeObj.children[lengthOfChildrenArray-1]);\n }\n else\n {\n rootNodeObj.children.push(new NodeObj(ele));\n }\n });\n }\n\n //Create new collection\n var topMostNodes = getTopLevelParents(eles);\n\n var rootNodeR = new NodeObj(null);\n\n traverseNodes(topMostNodes, rootNodeR);\n this.shareDBManager.changeParent(rootNodeR, newParentId, connectedEdges);\n };\n\n changeParentCy(eles: any[], newParentId: string)\n {\n let lockedNodes: any = {};\n const self = this;\n\n function removeNodes(nodes: any)\n {\n //Get removed edges first\n let removedEles = nodes.connectedEdges().remove();\n const children = nodes.children();\n\n if (children != null && children.length > 0)\n {\n children.forEach(function(childNode: any)\n {\n lockedNodes[childNode.id()] = true;\n });\n\n removedEles = removedEles.union(removeNodes(children));\n }\n\n removedEles = removedEles.union(nodes.remove());\n self.cy.nodes().updateCompoundBounds();\n return removedEles;\n }\n\n\n var removedEles = removeNodes(eles);\n this.undoRedoManager.do(\"remove\", removedEles);\n\n for (var i = 0; i < removedEles.length; i++)\n {\n var removedNode = removedEles[i];\n\n //Just alter the parent id of corresponding nodes !\n if (removedNode.isEdge() || lockedNodes[removedNode.id()])\n {\n continue;\n }\n\n removedNode._private.data.parent = newParentId;\n if(removedNode._private.parent){\n delete removedNode._private.parent;\n }\n }\n\n self.cy.add(removedEles);\n this.undoRedoManager.do(\"add\", removedEles);\n self.cy.nodes().updateCompoundBounds();\n };\n\n moveElements(eles: any[])\n {\n var classRef = this;\n //Sync movement to real time api\n if(this.isCollaborative)\n {\n eles.forEach(function (ele: any)\n {\n classRef.shareDBManager.moveElement(ele);\n });\n }\n };\n\n resizeElements(ele: any)\n {\n if(this.isCollaborative) {\n if (!ele.isParent()) {\n var previousWidth = ele.width();\n var previousHeight = ele.height();\n //Sync movement to real time api\n this.shareDBManager.resizeElement(ele, previousWidth, previousHeight);\n }\n else {\n var minWidth = ele.style('min-width');\n var minWidthBiasLeft = ele.style('min-width-bias-left');\n var minWidthBiasRight = ele.style('min-width-bias-right');\n var minHeight = ele.style('min-height');\n var minHeightBiasTop = ele.style('min-height-bias-top');\n var minHeightBiasBottom = ele.style('min-height-bias-bottom');\n\n //Sync movement to real time api\n this.shareDBManager.resizeCompound(ele, minWidth, minWidthBiasLeft, minWidthBiasRight, minHeight, minHeightBiasTop, minHeightBiasBottom);\n }\n }\n };\n\n mergeGraph(nodes: any[], edges: any[])\n {\n if (this.isCollaborative)\n {\n //Collaborative usage\n this.shareDBManager.mergeGraph(nodes,edges);\n }\n else\n {\n //Local usage file load\n this.mergeGraphCy(nodes,edges);\n }\n this.fitGraph();\n };\n\n mergeGraphCy(nodes: any[], edges: any[])\n {\n //Define arrays and maps\n const nodesToBeAdded = [];\n const edgesToBeAdded = [];\n const nodeMap : any= {};\n\n //Iterate over nodes and find nodes that does not exist in current graph by looking their name\n for (var index in nodes)\n {\n var ele = nodes[index];\n nodeMap[ele.data.id] = ele;\n\n if (this.cy.filter('node[name = \"'+ele.data.name+'\"]').length <= 0)\n {\n delete ele.data.id;\n //TODO need to update parent ?\n nodesToBeAdded.push(ele);\n }\n }\n\n this.cy.add(nodesToBeAdded);\n\n //Iterate over all edges\n for (var index in edges)\n {\n //Get corresponding source and target node in merge file\n var ele = edges[index];\n var sourceNode = nodeMap[ele.data.source];\n var targetNode = nodeMap[ele.data.target];\n\n //Check if there are nodes with same name in current graph\n var cySourceNode = this.cy.nodes('[name=\"'+sourceNode.data.name+'\"]');\n var targetNode = this.cy.nodes('[name=\"'+targetNode.data.name+'\"]');\n\n if (cySourceNode.length > 0)\n {\n ele.data.source = cySourceNode.id();\n }\n\n if (targetNode.length > 0)\n {\n ele.data.target = targetNode.id();\n }\n\n if (targetNode.length < 0 && cySourceNode.length < 0 ) {\n continue;\n }\n\n var edgesBtw = this.cy.filter('edge[source = \"'+cySourceNode.id()+'\"][target = \"'+targetNode.id()+'\"]');\n\n //We assume there could be one edge between source and target node with same type\n var isFound = false;\n edgesBtw.forEach(function(edge: any)\n {\n if (edge.data().type == ele.data.type)\n {\n isFound = true;\n return false;\n }\n //TODO: AMENDMENT by Ziya\n return true;\n });\n\n if (!isFound)\n {\n delete ele.data.id;\n edgesToBeAdded.push(ele);\n }\n }\n\n this.cy.add(edgesToBeAdded);\n };\n\n fitGraph()\n {\n if(this.isCollaborative)\n {\n this.cy.fit(this.FIT_CONSTANT);\n var newState =\n {\n zoomLevel: this.cy.zoom(),\n panLevel: this.cy.pan()\n };\n this.updateGlobalOptions(newState);\n }\n else\n {\n this.cy.fit(this.FIT_CONSTANT);\n }\n }\n\n loadFile(nodes: any[], edges: any[])\n {\n if (this.isCollaborative)\n {\n //Real time load graph\n this.loadfileShareDB(nodes, edges);\n }\n else\n {\n //Local usage file load\n this.loadFileCy(nodes,edges);\n }\n this.cy.edgeEditing('get').initBendPoints(this.cy.edges());\n this.fitGraph();\n };\n\n loadFileCy(nodes: any[], edges: any[])\n {\n //Remove all elements\n this.removeElementCy(this.cy.elements());\n\n this.addNodesCy(nodes);\n this.addEdgesCy(edges);\n };\n\n loadfileShareDB(nodes: any[], edges: any[])\n {\n this.shareDBManager.loadGraph(nodes,edges);\n };\n\n removeAllElements()\n {\n if (this.isCollaborative)\n {\n this.shareDBManager.removeAllElements();\n }\n else\n {\n this.cy.remove(this.cy.elements());\n }\n };\n\n updateHighlight(ele: any, isHighlighted: boolean)\n {\n if (isHighlighted)\n this.undoRedoManager.do('highlightOthers', ele);\n else\n this.undoRedoManager.do('removeOtherHighlight', ele);\n };\n\n\n updateVisibility(ele: any, isHidden: boolean)\n {\n if (isHidden)\n ele.hide();\n else\n ele.show();\n };\n\n updateElementCallback(op: any)\n {\n var ele = op.oi;\n var eleID = ele.id;\n var cyEle = this.cy.$(\"#\" + eleID);\n this.changeNameCy(cyEle, ele.name);\n\n if (cyEle.isNode())\n {\n //Width and height of simple nodes and compounds is changed differently\n if (cyEle.isParent())\n {\n cyEle.style(\"min-width\", ele.minWidth);\n cyEle.style(\"min-width-bias-left\", ele.minWidthBiasLeft);\n cyEle.style(\"min-width-bias-right\", ele.minWidthBiasRight);\n cyEle.style(\"min-height\", ele.minHeight);\n cyEle.style(\"min-height-bias-top\", ele.minHeightBiasTop);\n cyEle.style(\"min-height-bias-bottom\", ele.minHeightBiasBottom);\n }\n else\n {\n cyEle.data.w = ele.w;\n cyEle.data.h = ele.h;\n cyEle.style(\"width\", ele.w);\n cyEle.style(\"height\", ele.h);\n //Position is changed only for simple nodes because the\n //position of compounds is defined by simple nodes' position\n cyEle.position({x: ele.x, y: ele.y});\n }\n\n this.updateVisibility(cyEle, ele.isHidden);\n this.updateHighlight(cyEle, ele.isHighlighted);\n\n if(ele.isInvalidGene)\n {\n this.doHighlightInvalidGenes(cyEle);\n }\n else\n {\n this.undoHighlightInvalidGenes(cyEle);\n }\n //Refresh grapples when the node being changed from another collaborator is selected in current window\n // this.cy.nodeResize('get').refreshGrapples();\n }\n else if(cyEle.isEdge())\n {\n var pubmedArray = ele.pubmedIDs;\n cyEle.data('pubmedIDs', pubmedArray);\n this.updateHighlight(cyEle, ele.isHighlighted);\n\n var bendPoint = ele.bendPoint;\n var numberOfBendPositions = cyEle.data('bendPointPositions').length; // Holds the number of bend positions in data before being updated\n\n\n\n //If edge is reconnected\n if ( ele.source !== cyEle.source().id() || ele.target !== cyEle.target().id()){\n var location = {\n source: ele.source,\n target: ele.target\n };\n cyEle.move(location);\n //make sure that bend points are same\n this.updateEdgeBendPoints(cyEle);\n }\n else {\n cyEle.data('bendPointPositions', bendPoint);\n if (numberOfBendPositions !== undefined && numberOfBendPositions > 0)\n this.edgeEditing.deleteSelectedBendPoint(cyEle,0);\n this.edgeEditing.initBendPoints(cyEle);\n }\n }\n };\n\n getGenomicDataSVG(node: any)\n {\n // @ts-ignore\n return this.genomicDataOverlayManager.generateSVGForNode(node);\n }\n\n getOncoprintDataSVG(node: any) \n {\n return this.genomicDataOverlayManager.generateOncoprintForPatientNode(node);\n }\n\n removeGenomicData()\n {\n if(this.isCollaborative)\n {\n this.shareDBManager.clearGenomicData();\n }\n else\n {\n // TODO wrap this in afunction in genomic data overlay manager\n this.genomicDataOverlayManager.clearAllGenomicData();\n this.genomicDataOverlayManager.hideGenomicData();\n this.genomicDataOverlayManager.notifyObservers();\n }\n\n }\n\n addGenomicData(genomicData: any)\n {\n const groupID = this.getEmptyGroupID();\n\n if(this.isCollaborative)\n {\n var parsedGenomicData = this.genomicDataOverlayManager.prepareGenomicDataShareDB(genomicData);\n this.shareDBManager.addGenomicData(parsedGenomicData.genomicDataMap);\n this.shareDBManager.groupGenomicData(Object.keys(parsedGenomicData.visibilityMap),\n groupID);\n this.shareDBManager.addGenomicVisibilityData(parsedGenomicData.visibilityMap);\n }\n else\n {\n this.genomicDataOverlayManager.addGenomicDataLocally(genomicData, groupID);\n }\n }\n\n adjustVisibilityShareDB(profileId: string, isEnabled: boolean){\n const targetProfileIndex = this.profiles.map(profile => profile.profileId).indexOf(profileId);\n this.setProfile(targetProfileIndex, {\n ...this.profiles[targetProfileIndex],\n enabled: isEnabled\n }); \n }\n\n addToProfiles(profileId: string){\n // Check if this profile already exists\n if(this.profiles.map(profile => profile.profileId).includes(profileId)){\n return;\n }\n\n this.addProfile({\n profileId: profileId, \n enabled: true\n });\n }\n\n addPortalGenomicData(genomicData: any, groupID: any)\n {\n \n if(this.isCollaborative)\n {\n var parsedGenomicData = this.genomicDataOverlayManager.preparePortalGenomicDataShareDB(genomicData);\n this.shareDBManager.addGenomicData(parsedGenomicData.genomicDataMap);\n this.shareDBManager.groupGenomicData(Object.keys(parsedGenomicData.visibilityMap),\n groupID);\n this.shareDBManager.addGenomicVisibilityData(parsedGenomicData.visibilityMap);\n }\n else\n {\n this.genomicDataOverlayManager.addPortalGenomicData(genomicData, groupID);\n }\n }\n\n shareDBGenomicDataHandler(op: any)\n {\n var isRemove = Object.keys(op)[1] === 'od';\n var newData = op.oi;\n var geneSymbol = op.p[1];\n\n\n if(!isRemove)\n {\n this.genomicDataOverlayManager.addGenomicDataWithGeneSymbol(geneSymbol, newData);\n\n }\n // Removal\n else\n {\n this.genomicDataOverlayManager.removeGenomicDataWithGeneSymbol(geneSymbol);\n }\n }\n\n\n shareDBGenomicDataGroupChangeHandler(op: any)\n {\n\n var isRemove = Object.keys(op)[1] === 'od';\n var data = op.oi;\n var key = op.p[1];\n\n // Addition\n if(!isRemove)\n {\n this.genomicDataOverlayManager.addGenomicGroupData(key, data);\n if(data.length !== 1){\n console.log(\"Grouped genomic data expected to be of length 1\");\n }\n data.forEach((profileId: any) => {this.addToProfiles(profileId)});\n }\n // //Removal\n // else\n // {\n //\n // }\n this.genomicDataOverlayManager.showGenomicData();\n this.genomicDataOverlayManager.notifyObservers();\n }\n\n shareDBGenomicDataVisibilityHandler(op: any)\n {\n var data = op.oi;\n var key = op.p[1];\n var isRemove = Object.keys(op)[1] === 'od';\n // Addition\n if(!isRemove)\n {\n this.genomicDataOverlayManager.addGenomicVisData(key, data);\n\n this.adjustVisibilityShareDB(key, data);\n }\n // Removal\n else\n {\n this.genomicDataOverlayManager.removeGenomicVisData();\n this.removeProfiles();\n }\n\n this.genomicDataOverlayManager.showGenomicData();\n this.genomicDataOverlayManager.notifyObservers();\n }\n\n resizeNodesToContent(nodes: any[])\n {\n if(this.isCollaborative)\n {\n const visibleNumberOfData = this.genomicDataOverlayManager.countVisibleGenomicDataByType();\n const labelWithData = 148 + (visibleNumberOfData-3) * 36;\n const rt = this.shareDBManager;\n nodes.forEach(function( ele ){\n if (!ele.isParent())\n {\n var newWidth = 150;\n var newHeight = 52;\n if (ele.data('name') != \"\")\n {\n var labelLength = ele.style('label').length*10 + 6;\n newWidth = labelLength;\n newHeight = 24;\n }\n if (visibleNumberOfData > 0)\n {\n newHeight = 52;\n if (visibleNumberOfData < 4)\n {\n if (150 > newWidth)\n newWidth = 150;\n }\n else\n {\n if (labelWithData > newWidth)\n newWidth = labelWithData;\n }\n }\n rt.setSizeOfElement(ele, newWidth, newHeight);\n }\n else\n {\n //Set the minWidth, minHeight and other properties of compound to 0\n rt.resizeCompound(ele, 0, 0, 0, 0, 0, 0);\n }\n });\n }\n else\n {\n const ur = this.cy.undoRedo();\n const actions: any[] = [];\n\n const visibleNumberOfData = this.genomicDataOverlayManager.countVisibleGenomicDataByType();\n const labelWithData = 150 + (visibleNumberOfData-3) * 36;\n nodes.forEach(function( ele: any){\n if (!ele.isParent())\n {\n let newWidth = 150;\n let newHeight = 52;\n if (ele.data('name') != \"\") {\n var labelLength = ele.style('label').length * 6 + 24;\n newWidth = labelLength;\n newHeight = 24;\n }\n if (visibleNumberOfData > 0) {\n newHeight = 52;\n if (visibleNumberOfData < 4) {\n if (150 > newWidth)\n newWidth = 150;\n }\n else {\n if (labelWithData > newWidth)\n newWidth = labelWithData;\n }\n }\n const args = {\n ele: ele,\n oldWidth: ele.width(),\n newWidth: newWidth,\n oldHeight: ele.height(),\n newHeight: newHeight\n };\n actions.push({name: \"changeNodeSize\", param: args});\n }\n else\n {\n const args = {\n ele: ele,\n oldMinWidth: ele.style(\"min-width\"),\n newMinWidth: 0,\n oldMinWidthBiasLeft: ele.style(\"min-width-bias-left\"),\n newMinWidthBiasLeft: 0,\n oldMinWidthBiasRight: ele.style(\"min-width-bias-right\"),\n newMinWidthBiasRight: 0,\n oldMinHeight: ele.style(\"min-height\"),\n newMinHeight: 0,\n oldMinHeightBiasTop: ele.style(\"min-height-bias-top\"),\n newMinHeightBiasTop: 0,\n oldMinHeightBiasBottom: ele.style(\"min-height-bias-bottom\"),\n newMinHeightBiasBottom: 0\n };\n actions.push({name: \"changeCompoundSize\", param: args});\n }\n });\n\n ur.do(\"batch\", actions);\n }\n this.cy.nodeResize('get').refreshGrapples();\n };\n\n\n\n}\n","import _ from 'lodash';\nimport { observer } from 'mobx-react';\nimport React from 'react';\nimport { Button, Checkbox, Col, ControlLabel, Form, FormControl, InputGroup, Modal } from 'react-bootstrap';\nimport EditorActionsManager from '../managers/EditorActionsManager';\nimport { EModalType } from '../ui/react-pathway-mapper';\nimport PathwayActions from '../utils/PathwayActions';\n\ninterface ILayoutPropertiesProps{\n isModalShown: boolean;\n handleClose: (modelId: EModalType) => void;\n pathwayActions: PathwayActions;\n}\n\nexport interface ILayoutProperties{\n name: string;\n animationDuration: number;\n animationEasing: string;\n nodeRepulsion: number;\n idealEdgeLength: number;\n edgeElasticity: number;\n nestingFactor: number;\n gravity: number;\n numIter: number;\n gravityRangeCompound: number;\n gravityCompound: number;\n gravityRange: number;\n tilingPaddingVertical: number;\n tilingPaddingHorizontal: number;\n initialEnergyOnIncremental: number;\n tile: boolean;\n animate: boolean;\n randomize: boolean;\n}\n\n@observer\nexport default class LayoutProperties extends React.Component{\n \n static layoutProperties: ILayoutProperties;\n \n constructor(props: ILayoutPropertiesProps){\n super(props);\n LayoutProperties.layoutProperties = _.clone(EditorActionsManager.defaultLayoutProperties);\n }\n \n\n updateLayoutProperties(property: string, val: boolean | number){\n LayoutProperties.layoutProperties[property] = val;\n }\n \n\n render(){\n\n return(\n\n {this.props.handleClose(EModalType.LAYOUT);}}\n >\n \n \n

Layout Properties

\n
\n
\n \n
\n \n \n \n Node Repulsion:\n \n\n \n {LayoutProperties.layoutProperties.nodeRepulsion = Number(e.target.value);}} />\n \n \n \n \n Ideal Edge Length:\n \n\n \n {LayoutProperties.layoutProperties.idealEdgeLength = Number(e.target.value);}}/>\n \n \n \n \n Edge Elasticity:\n \n\n \n {LayoutProperties.layoutProperties.edgeElasticity = e.target.value;}} />\n \n \n \n \n Nesting Factor:\n \n\n \n {LayoutProperties.layoutProperties.nestingFactor = e.target.value;}} />\n \n \n \n \n Gravity:\n \n\n \n {LayoutProperties.layoutProperties.gravity = e.target.value;}} />\n \n \n \n \n Gravity Range:\n \n\n \n {LayoutProperties.layoutProperties.gravityRange = e.target.value;}} />\n \n \n \n \n Compound Gravity:\n \n\n \n {LayoutProperties.layoutProperties.gravityCompound = e.target.value;}}/>\n \n \n \n \n Compound Gravity Range:\n \n\n \n {LayoutProperties.layoutProperties.gravityRangeCompound = e.target.value;}} />\n \n \n \n \n Number of Iterations:\n \n\n \n {LayoutProperties.layoutProperties.numIter = e.target.value;}} />\n \n \n \n \n Tiling Vertical Padding:\n \n\n \n {LayoutProperties.layoutProperties.tilingPaddingVertical = e.target.value;}} />\n \n \n \n \n Tiling Horizontal Padding:\n \n\n \n {LayoutProperties.layoutProperties.tilingPaddingHorizontal = e.target.value;}} />\n \n \n \n \n Tile Disconnected:\n \n\n \n {LayoutProperties.layoutProperties.tile = !LayoutProperties.layoutProperties.tile;}}>\n \n \n \n \n Animate:\n \n\n \n {LayoutProperties.layoutProperties.animate = !LayoutProperties.layoutProperties.animate;}}>\n \n \n \n \n Incremental:\n \n\n \n {LayoutProperties.layoutProperties.randomize = !LayoutProperties.layoutProperties.randomize;}}>\n \n \n \n \n Incremental Cooling Factor:\n \n\n \n {LayoutProperties.layoutProperties.initialEnergyOnIncremental = e.target.value;}} />\n \n \n
\n\n
\n\n\n \n \n\n \n\n \n \n );\n }\n}","import { observer } from 'mobx-react';\nimport React from 'react';\nimport { Button, Col, ControlLabel, Form, FormControl, InputGroup, Modal } from 'react-bootstrap';\nimport { IPathwayInfo } from '../managers/FileOperationsManager';\nimport { EModalType } from '../ui/react-pathway-mapper';\nimport PathwayActions from '../utils/PathwayActions';\n\ninterface IPathwayDetailsModalProps{\n isModalShown: boolean;\n handleClose: Function;\n pathwayActions: PathwayActions;\n}\n\n@observer\nexport default class PathwayDetailsModal extends React.Component{\n\n pathwayInfo: IPathwayInfo;\n\n constructor(props: IPathwayDetailsModalProps){\n super(props);\n }\n\n render(){\n\n this.pathwayInfo = this.props.pathwayActions.getPathwayInfo;\n\n return(\n\n {this.props.handleClose(4)}}>\n \n Pathway Properties\n \n \n
\n \n \n File Name:\n \n \n {this.pathwayInfo.fileName = e.target.value;}}value={this.pathwayInfo.fileName}/>\n \n \n\n \n \n Pathway Title:\n \n \n {this.pathwayInfo.pathwayTitle = e.target.value;}}value={this.pathwayInfo.pathwayTitle}/>\n \n \n\n \n \n Pathway Description:\n \n \n \n \n \n\n
\n
\n\n \n \n \n
\n\n )\n\n }\n}","import { computed, makeObservable } from \"mobx\";\nimport { observer } from \"mobx-react\";\nimport React from \"react\";\nimport { Label, Modal } from \"react-bootstrap\";\nimport EditorActionsManager from \"../managers/EditorActionsManager\";\nimport { EModalType, IProfileMetaData } from \"../ui/react-pathway-mapper\";\ninterface IProfilesModalProps {\n profiles: IProfileMetaData[];\n editor: EditorActionsManager;\n isModalShown: boolean;\n handleClose: Function;\n handleProfileLabelClicked: (index: number) => void; \n}\n\n@observer\nexport default class ProfilesModal extends React.Component{\n\n constructor(props: IProfilesModalProps){\n super(props);\n\n makeObservable(this);\n }\n\n @computed get profileEnabledMap(){\n const profileEnabledMap = {};\n this.props.profiles.forEach((profile: IProfileMetaData) => {profileEnabledMap[profile.profileId] = profile.enabled});\n return profileEnabledMap;\n }\n\n handleProfileLabelClicked(index: number) {\n this.props.handleProfileLabelClicked(index);\n }\n\n render(){\n \n\n const profileLabels = this.props.profiles.map((profile: IProfileMetaData, i: number) => \n \n \n
\n
\n
\n );\n\n return (\n\n {this.props.handleClose(EModalType.PROFILES)}}>\n \n Genomic Data Set(s) to Show\n \n \n {(profileLabels.length > 0 ? profileLabels :

There is currently no data to show

)}\n
\n
\n\n )\n }\n\n}","import React from 'react';\nimport { EModalType } from '../ui/react-pathway-mapper';\nimport {Modal} from 'react-bootstrap';\ninterface IQuickHelpModalProps{\n isModalShown: boolean;\n handleClose: (modalId: EModalType) => void;\n}\n\nexport default class QuickHelpModal extends React.Component{\n\n constructor(props: IQuickHelpModalProps){\n super(props);\n }\n\n render(){\n\n\n return(\n {this.props.handleClose(EModalType.HELP)}}>\n \n Quick Help\n \n \n
    \n
  • To add a node: Drag and drop from node palette
  • \n
  • To add an interaction: Click on interaction type; then click on small circle on source node and release on target node
  • \n
  • To add a node into a container (family, complex, compartment or process): Drag the node into its container node or select nodes to be contained and right click on container node and choose \"Add Selected Into This\"
  • \n
  • To delete nodes/interactions: Select and perform Edit > Delete Selected
  • \n
  • To overlay experiment data: Select Alteration % > Load From cBioPortal...
  • \n
\n
\n\n
\n\n );\n }\n\n\n}","import EditorActionsManager from \"../managers/EditorActionsManager\";\nimport _ from \"lodash\";\n\nimport {toast} from 'react-toastify';\n\nexport default class CBioPortalAccessor{\n static readonly CNA_GAIN = 2;\n\n static readonly GET_ALL_CANCER_STUDIES_URL = \"https://www.cbioportal.org/webservice.do?cmd=getCancerStudies\";\n static readonly GET_GENETIC_PROFILES_URL = \"https://www.cbioportal.org/webservice.do?cmd=getGeneticProfiles&cancer_study_id=\";\n static readonly GET_PROFILE_DATA_URL = \"https://www.cbioportal.org/webservice.do?cmd=getProfileData\";\n static readonly MRNA_EXP_STUDY_NAME = \"_mrna_median_Zscores\";\n static readonly CNA_EXP_STUDY_NAME = \"_gistic\";\n static readonly VALIDATE_GENES_URL = 'https://www.cbioportal.org/api/genes/fetch?geneIdType=HUGO_GENE_SYMBOL&projection=ID'\n static readonly MUTATION_EXP_STUDY_NAME = \"_mutations\";\n\n static readonly CNA_DELETION = -2;\n static readonly Z_SCORE_UPPER_THRESHOLD = 2;\n static readonly Z_SCORE_LOWER_THRESHOLD = -2;\n \n static readonly MUTATION = \"Mutation\";\n static readonly GENE_EXPRESSION = \"Gene Expression\";\n static readonly CNA = \"Copy Number Alteration\";\n\n getDataTypes(){\n return [CBioPortalAccessor.MUTATION, CBioPortalAccessor.GENE_EXPRESSION, CBioPortalAccessor.CNA];\n }\n\n /*\n * Retrieves all cancer studies from cBioPortal\n * **/\n fetchCancerStudies(callbackFunction)\n {\n var cancerStudies = {};\n var request = new XMLHttpRequest();\n request.onreadystatechange = function ()\n {\n if(request.readyState === XMLHttpRequest.DONE && request.status === 200)\n {\n // By lines\n // Match all new line character representations\n var seperator = /\\r?\\n|\\r/;\n var lines = request.responseText.split(seperator);\n\n // start from first line skip node meta data\n for(var i = 1; i < lines.length; i++)\n {\n if (lines[i].length <= 0)\n continue;\n\n var lineData = lines[i].split('\\t');\n cancerStudies[lineData[0]] = lineData;\n }\n callbackFunction(cancerStudies);\n }\n else if (request.readyState === XMLHttpRequest.DONE && request.status !== 200)\n {\n toast.error(\"Error retrieving studies\");\n }\n };\n request.open(\"GET\", CBioPortalAccessor.GET_ALL_CANCER_STUDIES_URL);\n request.send();\n };\n\n /*\n * Retrieves all genetic profiles for given cancerStudy from cBioPortal\n * **/\n getSupportedGeneticProfiles(cancerStudy, callbackFunction)\n {\n var outData = {};\n var request = new XMLHttpRequest();\n var self = this;\n request.onreadystatechange = function ()\n {\n if(request.readyState === XMLHttpRequest.DONE && request.status === 200)\n {\n // By lines\n // Match all new line character representations\n var seperator = /\\r?\\n|\\r/;\n var lines = request.responseText.split(seperator);\n\n // start from first line skip node meta data\n for(var i = 1; i < lines.length; i++)\n {\n if (lines[i].length <= 0)\n continue;\n\n var lineData = lines[i].split('\\t');\n var cancerProfileName = lineData[0];\n if(self.isSupportedCancerProfile(cancerProfileName))\n {\n outData[cancerProfileName] = lineData;\n }\n }\n\n callbackFunction(outData);\n }\n else if (request.readyState === XMLHttpRequest.DONE && request.status !== 200)\n {\n console.error(\"Error retrieving studies\");\n // window.notificationManager.createNotification(\"Error retrieving genetic profiles\", \"fail\")\n }\n };\n request.open(\"GET\", CBioPortalAccessor.GET_GENETIC_PROFILES_URL + cancerStudy);\n request.send();\n };\n\n isSupportedCancerProfile(cancerProfileName: string)\n {\n return (cancerProfileName.endsWith(CBioPortalAccessor.MRNA_EXP_STUDY_NAME) ||\n cancerProfileName.endsWith(CBioPortalAccessor.CNA_EXP_STUDY_NAME) ||\n cancerProfileName.endsWith(CBioPortalAccessor.MUTATION_EXP_STUDY_NAME));\n };\n\n static getDataType(cancerProfileName: string)\n {\n if ( cancerProfileName.endsWith(this.MRNA_EXP_STUDY_NAME))\n {\n return this.GENE_EXPRESSION;\n }\n else if ( cancerProfileName.endsWith(this.CNA_EXP_STUDY_NAME))\n {\n return this.CNA;\n }\n else if ( cancerProfileName.endsWith(this.MUTATION_EXP_STUDY_NAME))\n {\n return this.MUTATION;\n }\n\n return \"\";\n }\n \n\n calcAlterationPercentages(paramLines, geneticProfileId, callbackFunction)\n {\n // By lines\n // Match all new line character representations\n const seperator = /\\r?\\n|\\r/;\n const lines = paramLines.split(seperator);\n let startIndex = 0;\n\n //Find starting index of actual data skip commented lines\n for (const i in lines)\n {\n if(!lines[i].startsWith('#'))\n {\n startIndex = parseInt(i);\n break;\n }\n }\n\n //Total number of tumor samples in the response\n const tumorSamples = lines[startIndex].split('\\t');\n const numOfTumorSamples = tumorSamples.length - 2;\n const outData: {} = {};\n outData[geneticProfileId] = {};\n\n const geneticProfileType = CBioPortalAccessor.getDataType(geneticProfileId);\n // skip meta line and iterate over tumor sample data\n for(let i = startIndex + 1; i < lines.length; i++)\n {\n if (lines[i].length <= 0)\n continue;\n\n //Iterate over samples for each gene to calculate profile data\n const lineData: string[] = lines[i].split('\\t');\n let profileDataAlteration = 0;\n for(let j = 2; j < lineData.length; j++)\n {\n if(lineData[j] !== 'NaN')\n {\n if( geneticProfileType === CBioPortalAccessor.MUTATION )\n profileDataAlteration++;\n else if ( (geneticProfileType === CBioPortalAccessor.CNA) \n && ( parseInt(lineData[j]) === CBioPortalAccessor.CNA_GAIN || parseInt(lineData[j]) === CBioPortalAccessor.CNA_DELETION ) ){\n profileDataAlteration++;\n }\n else if ( (geneticProfileType === CBioPortalAccessor.GENE_EXPRESSION) \n && (parseFloat(lineData[j]) >= CBioPortalAccessor.Z_SCORE_UPPER_THRESHOLD \n || parseFloat(lineData[j]) <= CBioPortalAccessor.Z_SCORE_LOWER_THRESHOLD)){\n profileDataAlteration++;\n }\n }\n }\n\n //\n outData[geneticProfileId][lineData[1]] = ( profileDataAlteration / numOfTumorSamples ) * 100;\n }\n\n callbackFunction(outData);\n }\n\n\n /*\n *\n * Retrieves profile data associated with the parameters below from cBioPortal\n * @params\n {\n caseSetId: \"gbm_tcga\",\n geneticProfileId: \"gbm_tcga_mutations\",\n genes: [\"BRCA1\", \"BRCA2\", \"TP53\"]\n }\n * */\n getProfileData(params, callbackFunction)\n {\n //params\n //caseSetId, geneticProfileId, genes\n\n const outData = {};\n const request = new XMLHttpRequest();\n const self = this;\n request.onreadystatechange = function ()\n {\n if(request.readyState === XMLHttpRequest.DONE && request.status === 200)\n {\n self.calcAlterationPercentages(request.responseText, params.geneticProfileId, callbackFunction);\n toast.success(params.geneticProfileId + \" is succesfully loaded from cBioPortal\");\n\n }\n };\n\n //Create query URL\n let queryURL = CBioPortalAccessor.GET_PROFILE_DATA_URL;\n //Fetch sequenced case list !!\n queryURL += \"&case_set_id=\" + params.caseSetId + \"_sequenced\";\n queryURL += \"&genetic_profile_id=\" + params.geneticProfileId;\n queryURL += \"&gene_list=\";\n let isFirst = true;\n for(const gene of params.genes)\n {\n if(!isFirst){\n queryURL += \"+\";\n } else {\n isFirst = false;\n }\n queryURL += gene;\n \n }\n request.open(\"GET\", queryURL);\n request.send();\n };\n\n validateGenes(nodeSymbols, editor: EditorActionsManager)\n {\n const request = new XMLHttpRequest();\n const self = this;\n\n request.onreadystatechange = function ()\n {\n if(request.readyState === XMLHttpRequest.DONE && request.status === 200)\n {\n const validGeneSymbols = JSON.parse(request.responseText);\n const validGeneArray = _.map(validGeneSymbols, function(object)\n {\n return object.hugoGeneSymbol;\n });\n editor.highlightInvalidGenes(validGeneArray);\n }\n };\n const queryURL = CBioPortalAccessor.VALIDATE_GENES_URL;\n request.open(\"POST\", queryURL);\n request.setRequestHeader(\"Content-type\", \"application/json\");\n request.send(JSON.stringify(nodeSymbols));\n }\n}\n","import React from 'react';\nimport {Modal, MenuItem, DropdownButton, Checkbox, Button} from 'react-bootstrap';\nimport { action, computed, makeObservable, observable } from 'mobx';\nimport autobind from 'autobind-decorator';\nimport { IDataTypeMetaData, EModalType } from '../ui/react-pathway-mapper';\nimport CBioPortalAccessor from '../utils/CBioPortalAccessor';\nimport { observer } from 'mobx-react';\n\ninterface IStudyModalProps {\n isModalShown: boolean;\n loadFromCBio : Function;\n handleClose : Function;\n}\n\n@observer\nexport default class StudyModal extends React.Component{\n\n @observable\n dataTypes: {[dataType: string]: IDataTypeMetaData} = {};\n \n itemArray: any[];\n \n @observable\n selectedStudyData: any[];\n @observable\n portalAccessor: CBioPortalAccessor;\n\n constructor(props: IStudyModalProps){\n super(props);\n makeObservable(this);\n\n this.selectedStudyData = [];\n this.portalAccessor = new CBioPortalAccessor();\n this.fetchStudy();\n }\n\n @action.bound\n setSelectedStudyData(data: any[]) {\n this.selectedStudyData = data;\n }\n\n @action.bound\n setDataTypeProperties(dataType: string, properties: IDataTypeMetaData) {\n this.dataTypes[dataType] = properties;\n }\n\n preparePortalAccess(studyId: string){\n this.portalAccessor.getSupportedGeneticProfiles(studyId, (data) => {\n this.disableAllDataTypes();\n // Iterate through profiles\n for(const profile of Object.keys(data)){\n const type = CBioPortalAccessor.getDataType(profile);\n if(type !== \"\"){\n this.setDataTypeProperties(type, {\n ...this.dataTypes[type], \n enabled: true, \n profile: profile\n });\n }\n }\n });\n }\n\n disableAllDataTypes(){\n for(const dataType of Object.keys(this.dataTypes)){\n this.setDataTypeProperties(dataType, {\n enabled: false,\n checked: false,\n profile: undefined\n });\n }\n }\n\n fetchStudy(){ \n this.itemArray = [];\n\n\n this.portalAccessor.getDataTypes().forEach((dataType) => {\n this.setDataTypeProperties(dataType, {\n enabled: false,\n checked: false,\n profile: undefined\n });\n });\n \n this.portalAccessor.fetchCancerStudies((cancerStudies: any) => {\n for(const study in cancerStudies){\n\n if(!cancerStudies.hasOwnProperty(study)){\n continue;\n }\n const item = {\n this.setSelectedStudyData(cancerStudies[study]); \n this.preparePortalAccess(cancerStudies[study][0]);\n }}>\n {cancerStudies[study][1]}\n ;\n \n this.itemArray.push(item);\n }\n });\n }\n\n @autobind\n resetModal(){\n this.disableAllDataTypes();\n this.setSelectedStudyData([]);\n }\n\n @autobind\n handleCheckboxClick(dataType){\n this.setDataTypeProperties(dataType, {\n ...this.dataTypes[dataType],\n checked: !this.dataTypes[dataType].checked\n });\n }\n\n @computed\n get selectedStudyDataTitle() {\n if (this.selectedStudyData.length > 1) {\n return this.selectedStudyData[1] || \"Choose study\";\n }\n else {\n return \"Choose study\";\n }\n }\n\n render(){\n return(\n {this.props.handleClose(EModalType.STUDY); this.resetModal();}}>\n \n Profile Data from cBioPortal\n \n \n\n
\n

Select Cancer Study

\n \n {this.itemArray}\n \n
\n { Object.keys(this.dataTypes).map((dataType: string) => {\n return {this.handleCheckboxClick(dataType);}} checked={this.dataTypes[dataType].checked}> \n {dataType}\n ;\n })\n }\n \n
\n
\n\n \n \n \n
\n );\n }\n}","import autobind from \"autobind-decorator\";\nimport { action, makeObservable, observable } from \"mobx\";\nimport { observer } from \"mobx-react\";\nimport React from 'react';\nimport { Checkbox, DropdownButton, MenuItem } from \"react-bootstrap\";\nimport PathwayActions from '../utils/PathwayActions.js';\nimport { IPathwayMapperTable } from \"./react-pathway-mapper\";\n\ninterface IRankingProps{\n pathwayActions: PathwayActions;\n bestPathwaysAlgos: any[][];\n tableComponent: (data: IPathwayMapperTable[], selectedPathway: string, onPathwaySelect: (pathway: string) => void) => JSX.Element;\n patientView ?: boolean;\n}\n\nconst TCGA_PANCAN_PATHWAY_NAMES = [\n \"Cell Cycle\", \n \"HIPPO\", \n \"MYC\",\n \"NOTCH\",\n \"NRF2\",\n \"PI3K\",\n \"RTK-RAS\",\n \"TGF-Beta\",\n \"TP53\",\n \"WNT\"\n];\n\n\n@observer\nexport default class Ranking extends React.Component{\n @observable\n bestPathways: any[];\n\n @observable\n shownPathways: any[];\n\n @observable\n dropDownTitle: string;\n\n @observable\n selectedPathway: string;\n isPercentageMatch: number;\n isAlterationEnabled: number;\n\n @observable\n considerOnlyTCGAPanPathways: boolean;\n\n @observable\n isExpanded: boolean;\n\n readonly COUNT_PERC_EXPLANATION = \"Whether we should favor the number of genes of interest matching the ones in a pathway or the percentage of such genes in that pathway. For instance, suppose genes of interest are A, B, and C, and the pathway contains genes B, C, D, and E. When we consider count, the score is 2 (for the two genes that match). However, when we consider percentage the score will be 50% as 2 of the 4 genes in the pathway are among genes of interest.\";\n readonly ALTERATION_EXPLANATION = \"When this is checked, each matching gene will not directly contribute to the score as 1 unit but with the alteration frequency percentage of that gene. For instance, suppose genes of interest are A, B, and C with alteration frequencies of 0.5, 0.2, and 0.3, respectively, and the pathway contains genes B, C, D, and E. When this is option isn't checked, the score will be 2 for match count and 50% for the match percentage. However, when this option is checked, the scores will be 0.2+0.3=0.5 and (0.2+0.3)/4=12.5% for match count and percentage, respectively.\";\n readonly TCGA_PANCAN_EXPLANATION = \"The pathways listed above were retrieved from PathwayMapper. When this option is checked, only the pathways under TCGA > PanCanAtlas will be shown. Uncheck to show all.\";\n\n constructor(props: IRankingProps){\n super(props);\n makeObservable(this);\n \n this.isPercentageMatch = 0;\n this.isAlterationEnabled = 0;\n this.considerOnlyTCGAPanPathways = true;\n this.dropDownTitle = \"Match count\";\n this.isExpanded = false;\n this.setBestPathwayMethod(0);\n this.shownPathways = this.bestPathways.filter((data: any) => {\n if (this.considerOnlyTCGAPanPathways) {\n return TCGA_PANCAN_PATHWAY_NAMES.indexOf(data.pathwayName) > -1;\n }\n return true;\n });\n this.selectedPathway = this.shownPathways[0].pathwayName;\n }\n\n @autobind\n setBestPathwayMethod(i: number){\n this.bestPathways = this.props.bestPathwaysAlgos[i];\n //this.selectedPathway = this.bestPathways[0].pathwayName;\n //this.props.pathwayActions.changePathway(this.selectedPathway);\n }\n\n @autobind\n onPathwayClick(pathway: string){\n this.selectedPathway = pathway;\n this.props.pathwayActions.changePathway(this.selectedPathway);\n }\n\n @autobind\n onApplyClick(){\n // Mapping from dropdown + checkbox selection to pathway method.\n this.setBestPathwayMethod(2 * this.isAlterationEnabled + this.isPercentageMatch);\n }\n\n @action.bound\n toggleConsiderOnlyTCGAPanPathways() {\n this.considerOnlyTCGAPanPathways = !this.considerOnlyTCGAPanPathways;\n this.shownPathways = this.bestPathways.filter((data: any) => {\n if (this.considerOnlyTCGAPanPathways) {\n return TCGA_PANCAN_PATHWAY_NAMES.indexOf(data.pathwayName) > -1;\n }\n return true;\n });\n // change selected pathway if we are filtered and doesn't exist\n if (this.considerOnlyTCGAPanPathways \n && TCGA_PANCAN_PATHWAY_NAMES.indexOf(this.selectedPathway) < 0) {\n this.selectedPathway = this.shownPathways[0].pathwayName;\n this.props.pathwayActions.changePathway(this.selectedPathway);\n }\n }\n\n\n componentDidMount(): void {\n this.props.pathwayActions.changePathway(this.selectedPathway);\n }\n\n render(){\n const lengthThreshold = 13;\n \n return (\n
\n\n {/*\n
\n  Pathways\n
*/}\n\n { this.props.tableComponent &&\n this.props.tableComponent(\n this.shownPathways.map((data: any) => ({\n name: data.pathwayName, score: data.score, genes: data.genesMatched\n })),\n this.selectedPathway,\n this.onPathwayClick)\n }\n {\n
\n \n Show TCGA PanCancer Atlas pathways only  \n \n \n
\n }\n {(!this.props.patientView &&\n
\n {\n
\n \n  Ranking options\n \n
\n }\n
\n \n {this.isPercentageMatch = 0; this.dropDownTitle = \"Match count\"; this.onApplyClick();} }>Match count\n {this.isPercentageMatch = 1; this.dropDownTitle = \"Match percentage\"; this.onApplyClick();}}>Match percentage\n \n   \n
\n\n {this.isAlterationEnabled = (this.isAlterationEnabled === 1) ? 0 : 1; this.onApplyClick();}}\n style={{fontSize: \"13px\", marginTop: \"18px\", bottom: \"4px\"}}>\n Consider alteration frequency  \n \n \n
\n
\n )}\n
\n \n );\n \n }\n\n \n}\n","import { makeObservable, observable } from \"mobx\";\nimport { observer } from \"mobx-react\";\nimport React from 'react';\n// @ts-ignore\nimport openImage from \"../images/toolbar/edit.svg\";\n// @ts-ignore\nimport layoutImage from \"../images/toolbar/layout-cose.svg\";\n// @ts-ignore\nimport savePNGImage from \"../images/toolbar/save_png.svg\";\n// @ts-ignore\nimport saveSVGImage from \"../images/toolbar/save_svg.svg\";\nimport EditorActionsManager from \"../managers/EditorActionsManager\";\nimport { EModalType, IAlterationData } from '../ui/react-pathway-mapper';\nimport PathwayActions from '../utils/PathwayActions';\n// @ts-ignore\nconst addSelImage = require(\"../images/toolbar/add-selected.svg\");\n// @ts-ignore\nconst addAllImage = require(\"../images/toolbar/add-all.svg\");\n// @ts-ignore\nconst aboutImage = require(\"../images/toolbar/about.svg\");\n\n\ninterface IToolbarProps {\n pathwayActions: PathwayActions;\n selectedPathway: string;\n alterationData: IAlterationData;\n handleOpen: (modalId: number) => void;\n genes: any[];\n validGenes: any;\n showMessage: (message: string) => void;\n pathwayGenes: string[];\n onAddGenes: (selectedGenes: string[]) => void;\n patientView ?: boolean;\n}\n\n@observer\nexport default class Toolbar extends React.Component{\n\n\n @observable\n selectedGenes: string[];\n\n @observable\n private editor: EditorActionsManager;\n constructor(props: IToolbarProps){\n super(props);\n makeObservable(this);\n\n this.selectedGenes = [];\n }\n\n \n render(){\n\n\n const studyQuery = \"q=\" + JSON.stringify(this.props.alterationData) + \"&g=\" + this.props.genes.map(gene => gene.hugoGeneSymbol).join(\"+\");\n return (\n
\n {this.props.pathwayActions.saveAs(\"PNG\");}}/>\n\n {this.props.pathwayActions.saveAs(\"SVG\");}}/>\n\n \n {(!this.props.patientView && [\n {\n this.selectedGenes = this.props.pathwayActions.getSelectedNodes()\n .filter((node: any) => node.data().type === \"GENE\")\n .map((node: any) => node.data().name as string);\n\t const noneGeneList = this.props.pathwayActions.getSelectedNodes()\n .filter((node: any) => node.data().type !== \"GENE\")\n .map((node: any) => node.data().name as string);\n const invalidGenes: string[] = [];\n\t let message = \"\";\n if(noneGeneList.length > 0){\n message += \"Selection contains nodes that are not genes: \" + noneGeneList.join(', ') + \". \";\n }\n\n this.selectedGenes.forEach((gene: string) => {\n if(!this.props.validGenes.hasOwnProperty(gene)){\n invalidGenes.push(gene);\n }\n });\n\n if(invalidGenes.length === 0){\n\n if(this.selectedGenes.length > 0 && noneGeneList.length === 0){\n this.props.onAddGenes(this.selectedGenes);\n }\n } else {\n\t message += \"Following gene symbols are invalid or already in gene list: \" + invalidGenes.join(\", \") + \".\";\n }\n\n\t if(message.length > 0) {\n\t this.props.showMessage(message);\n\t }\n }}/>\n ,\n \n {\n\n this.selectedGenes = this.props.pathwayGenes.filter((gene: string) => {\n return this.props.validGenes.hasOwnProperty(gene);\n });\n \n if(this.selectedGenes.length > 0){\n this.props.onAddGenes(this.selectedGenes);\n }\n }}/>,\n \n\n {{window.open(\"http://pathwaymapper.org/?pathwayName=\" + this.props.selectedPathway +\"&\"+ studyQuery )}}}/>\n ])}\n {this.props.handleOpen(EModalType.CHELP); }}/>\n \n
);\n }\n}\n","import autobind from \"autobind-decorator\";\nimport { action, computed, makeObservable, observable } from \"mobx\";\nimport EditorActionsManager from \"../managers/EditorActionsManager\";\nimport FileOperationsManager, {\n IPathwayInfo\n} from \"../managers/FileOperationsManager\";\nimport GridOptionsManager from \"../managers/GridOptionsManager\";\nimport ViewOperationsManager from \"../managers/ViewOperationsManager\";\nimport ConfirmationModal from \"../modals/ConfirmationModal\";\nimport { EGridType } from \"../modals/GridSettings\";\nimport { ILayoutProperties } from \"../modals/LayoutProperties\";\nimport {\n EModalType, IPathwayData, IProfileMetaData\n} from \"../ui/react-pathway-mapper\";\nimport SaveLoadUtility from \"./SaveLoadUtility\";\n\nexport default class PathwayActions {\n @observable\n selectedPathway: string;\n fileManager: FileOperationsManager;\n editor: EditorActionsManager;\n undoRedoManager: any;\n pathwayHandler: (pathwayName: string) => void;\n handleOpen: (modalId: EModalType) => void;\n eh: any;\n profiles: IProfileMetaData[];\n gridOptionsManager: GridOptionsManager;\n\n uploader: any;\n merger: any;\n isCBioPortal: boolean;\n isCollaborative: boolean;\n viewOperationsManager: ViewOperationsManager;\n overlayUploader: any;\n\n @observable\n enabledType: EGridType;\n\n constructor(\n pathwayHandler: (pathwayName: string) => void,\n profiles: IProfileMetaData[],\n fileManager: FileOperationsManager,\n handleOpen: (modalId: EModalType) => void,\n isCBioPortal: boolean,\n isCollaborative: boolean\n ) {\n makeObservable(this);\n this.pathwayHandler = pathwayHandler;\n this.profiles = profiles;\n this.fileManager = fileManager;\n this.handleOpen = handleOpen;\n this.isCBioPortal = isCBioPortal;\n this.isCollaborative = isCollaborative;\n this.enabledType = EGridType.NONE;\n }\n\n @action.bound\n addProfile(profile: IProfileMetaData) {\n this.profiles.push(profile);\n }\n\n @action.bound\n clearProfiles() {\n this.profiles.length = 0;\n }\n\n emphasiseQueryGenes(queryGenes: string[]) {\n if (this.editor)\n this.editor.cy.nodes().forEach((node: any) => {\n const nodeName = node.data().name;\n const nodeType = node.data().type;\n if (queryGenes.includes(nodeName) && nodeType === \"GENE\") {\n node.style({ \"border-width\": \"4px\", \"font-weight\": \"bold\" });\n }\n });\n }\n\n getSelectedNodes() {\n return this.editor.cy.nodes(\":selected\");\n }\n\n setLayoutProperties(layoutProperties: ILayoutProperties) {\n this.editor.saveLayoutProperties(layoutProperties);\n }\n\n doesCyHaveElements() {\n return this.editor.cy.elements().length > 0;\n }\n\n @autobind\n toggleGrid(isEnabled: boolean) {\n this.gridOptionsManager.setSnapToGuidelines(false);\n this.gridOptionsManager.setShowGrid(isEnabled);\n }\n\n @autobind\n toggleGuide(isEnabled: boolean) {\n this.gridOptionsManager.setSnapToGuidelines(isEnabled);\n this.gridOptionsManager.setShowGrid(false);\n }\n\n adjustGridSettings(gridSize: number, color: string) {\n this.gridOptionsManager.currentProperties.gridSpacing = gridSize;\n this.gridOptionsManager.currentProperties.guidelinesStyle.strokeStyle = color;\n this.gridOptionsManager.currentProperties.guidelinesStyle.horizontalDistColor = color;\n this.gridOptionsManager.currentProperties.guidelinesStyle.verticalDistColor = color;\n }\n\n @autobind\n resizeToContent() {\n this.editor.resizeNodesToContent(this.editor.cy.nodes());\n }\n\n @autobind\n align(param: string) {\n this.viewOperationsManager.handleNodeAlignment(param);\n }\n\n @autobind\n onChangeFile(e: any, isMerge: boolean) {\n const file = e.target.files[0] as File;\n this.processFile(file, isMerge);\n }\n\n uploadOverlay() {\n this.overlayUploader.click();\n }\n\n overlayFromText(file: File) {\n // Create a new FormData object.\n const formData = new FormData();\n formData.append(\"graphFile\", file);\n const request = new XMLHttpRequest();\n request.onreadystatechange = () => {\n if (\n request.readyState === XMLHttpRequest.DONE &&\n request.status === 200\n ) {\n const linesOfData = request.responseText.split(\"\\n\");\n if (linesOfData.length > 0) {\n const profileIdsFromFile = linesOfData[0].split(\"\\t\").slice(1);\n profileIdsFromFile.forEach(id =>\n this.addProfile({ profileId: id, enabled: true })\n );\n } else {\n console.log(\"Error: No valid data\");\n }\n this.editor.addGenomicData(request.responseText);\n }\n };\n request.open(\"POST\", \"/loadGraph\");\n request.send(formData);\n }\n\n @autobind\n upload() {\n if (this.editor.cy.elements().length > 0) {\n this.handleOpen(EModalType.CONFIRMATION);\n ConfirmationModal.pendingFunction = () => {\n this.uploader.click();\n };\n } else {\n this.uploader.click();\n }\n }\n\n @autobind\n merge() {\n this.merger.click();\n }\n\n setOverlayUploader(inputRef: any) {\n this.overlayUploader = inputRef;\n }\n\n @autobind\n setUploaders(inputRef: any, isMerge: boolean) {\n if (isMerge) this.merger = inputRef;\n else this.uploader = inputRef;\n }\n\n @computed\n get getPathwayInfo() {\n return this.fileManager.getPathwayInfo;\n }\n\n @autobind\n setPathwayInfo(other: IPathwayInfo) {\n this.fileManager.setPathwayInfo(other);\n }\n\n @autobind\n undo() {\n this.undoRedoManager.undo();\n }\n\n @autobind\n redo() {\n this.undoRedoManager.redo();\n }\n\n @autobind\n export(isSIFNX: boolean) {\n //this.editor.cy.remove('.eh-handle');\n this.eh.hide();\n this.fileManager.saveGraph(isSIFNX, this.editor);\n }\n\n @autobind\n resetUndoStack() {\n this.undoRedoManager.reset();\n }\n\n @autobind\n newPathway() {\n const commitNewPathway = () => {\n this.editor.removeAllElements();\n this.fileManager.setPathwayInfo({\n pathwayTitle: \"New Pathway\",\n pathwayDetails: \"\",\n fileName: \"pathway.txt\"\n });\n //this.removeAllData()\n this.resetUndoStack();\n this.pathwayHandler(\"Dummy\");\n };\n\n if (this.editor.cy.elements().length > 0) {\n this.handleOpen(EModalType.CONFIRMATION);\n ConfirmationModal.pendingFunction = commitNewPathway;\n } else {\n commitNewPathway();\n }\n }\n\n @autobind\n changePathway(pathwayName: string) {\n this.pathwayHandler(pathwayName);\n\n if (!this.isCBioPortal) {\n this.fileManager.setPathwayInfo({\n pathwayTitle: pathwayName,\n pathwayDetails: \"\",\n fileName: pathwayName + \".txt\"\n });\n // At the beginning changePathway is called editor is not ready hence removeData shall not be called\n if (this.editor) {\n //this.removeAllData()\n this.resetUndoStack();\n }\n }\n }\n\n @autobind\n highlightNeighbours() {\n this.editor.highlightNeighbors();\n }\n\n @autobind\n highlightSelected() {\n this.editor.highlightSelected();\n }\n\n @autobind\n validateGenes() {\n this.editor.validateGenes();\n }\n\n @autobind\n showAll() {\n this.editor.showAllNodes();\n }\n\n @autobind\n hideSelected() {\n this.editor.hideSelectedNodes();\n }\n\n @autobind\n deleteSelected() {\n const selectedEles = this.editor.cy.elements(\":selected\");\n this.editor.removeElement(selectedEles);\n }\n\n @autobind\n addEdge(edgeTypeIndex: number) {\n // @ts-ignore\n window.edgeAddingMode = edgeTypeIndex + 1;\n if (edgeTypeIndex === -1) {\n this.eh.disable();\n this.eh.hide();\n return;\n } else {\n // @ts-ignore\n this.eh.enable();\n }\n }\n\n @autobind\n changeNodeName(oldName: string, newName: string) {\n const cyNode = this.editor.cy.$('[name=\"' + oldName + '\"]')[0];\n this.editor.changeName(cyNode, newName);\n }\n\n @autobind\n addNode(nodeType) {\n const nodeData = {\n type: nodeType.toUpperCase(),\n name: \"New \" + nodeType,\n w: \"150\",\n h: \"52\"\n };\n const extent = this.editor.cy.extent();\n const posData = {\n x: (extent.x1 + extent.x2) / 2,\n y: (extent.y1 + extent.y2) / 2\n };\n\n this.editor.addNode(nodeData, posData);\n this.pathwayHandler(\"Additional Pathway\");\n }\n\n @autobind\n searchGene(geneName: string) {\n const selector = \"node[name @*= '\" + geneName + \"']\";\n const nodesContainingSearchedGene = this.editor.cy.filter(selector);\n let nodesToSelect = this.editor.cy.collection();\n nodesContainingSearchedGene.forEach(function(ele, index) {\n if (\n !ele.hasClass(\"highlightedNode\") &&\n !ele.hasClass(\"invalidGeneHighlight\")\n )\n nodesToSelect = nodesToSelect.union(ele);\n });\n this.editor.highlightBySearch(nodesToSelect);\n }\n\n @autobind\n removeAllData() {\n this.editor.removeGenomicData();\n this.clearProfiles();\n }\n\n @autobind\n removeAllHighlight() {\n this.editor.removeAllHighlight();\n }\n\n @autobind\n processFile(file: File, isMerge: boolean) {\n // Create a new FormData object.\n const formData = new FormData();\n formData.append(\"graphFile\", file);\n const request = new XMLHttpRequest();\n request.onreadystatechange = () => {\n if (request.readyState === XMLHttpRequest.DONE) {\n if (request.status === 200) {\n const pathwayData: IPathwayData = SaveLoadUtility.parseGraph(\n request.responseText,\n false\n );\n\n if (isMerge) {\n this.editor.mergeGraph(pathwayData.nodes, pathwayData.edges);\n const graphJSON = this.editor.cy.json();\n\n //TODO change file name maybe, probabyly not necessary ?\n // Pathway nodes and edges are now combination of both previous and new pathway.\n pathwayData.nodes = graphJSON.elements.nodes; //this.editor.cy.nodes().map((node) => ({data: node.data()}));\n pathwayData.edges = graphJSON.elements.edges; //this.editor.cy.edges().map((edge) => ({data: edge.data()}));\n pathwayData.title = \"Additional Pathway\";\n } else {\n this.editor.loadFile(pathwayData.nodes, pathwayData.edges);\n this.fileManager.setPathwayInfo({\n pathwayTitle: pathwayData.title,\n pathwayDetails: pathwayData.description,\n fileName: pathwayData.title + \".txt\"\n });\n }\n\n this.pathwayHandler(pathwayData.title + \"_imported\");\n this.resetUndoStack();\n } else {\n console.error(\n \"Error processing file: \" +\n request.readyState +\n request.responseText\n );\n }\n }\n };\n request.open(\"POST\", \"/loadGraph\");\n request.send(formData);\n }\n\n @autobind\n saveAs(type: string) {\n if (type === \"SVG\") {\n this.fileManager.saveAsSVG(this.editor);\n } else if (type === \"PNG\") {\n this.fileManager.saveAsPNG(this.editor.cy);\n } else if (type === \"JPEG\") {\n this.fileManager.saveAsJPEG(this.editor.cy);\n }\n }\n\n @autobind\n editorHandler(\n editor,\n eh,\n undoRedoManager,\n viewOperationsManager: ViewOperationsManager,\n gridOptionsManager: GridOptionsManager\n ) {\n this.editor = editor;\n this.eh = eh;\n this.undoRedoManager = undoRedoManager;\n this.viewOperationsManager = viewOperationsManager;\n this.gridOptionsManager = gridOptionsManager;\n }\n\n @autobind\n loadSampleData() {\n const data =\n \"gene\\tlung\\tovarian\\tbreast\\ty\\n\" +\n \"PTEN\\t-7\\t-20\\t10\\t20\\n\" +\n \"NF1\\t-12\\t-4\\t30\\t20\\n\" +\n \"PIK3CA\\t18\\t40\\t-50\\t20\\n\" +\n \"KRAS\\t11\\t-5\\t0\\t20\\n\" +\n \"ZIYA\\t0\\t-2\\t0\\t20\\n\" +\n \"AKT1\\t3\\t30\\t-10\\t20\\n\" +\n \"AKT2\\t6\\t-3\\t20\\t20\\n\" +\n \"AKT3\\t6\\t-3\\t20\\t20\\n\" +\n \"\\n\";\n this.editor.addGenomicData(data);\n\n this.addProfile({ profileId: \"lung\", enabled: true });\n this.addProfile({ profileId: \"ovarian\", enabled: true });\n this.addProfile({ profileId: \"breast\", enabled: true });\n }\n\n @autobind\n performLayout() {\n this.editor.performLayout();\n }\n}\n","import { makeObservable, observable } from \"mobx\";\nimport { observer } from \"mobx-react\";\nimport React from \"react\";\nimport { Button, ButtonGroup, ButtonToolbar, FormControl, FormGroup, Glyphicon, InputGroup, Navbar } from \"react-bootstrap\";\n// @ts-ignore\nimport aboutSvg from '../images/toolbar/about.svg';\n// @ts-ignore\nimport ahbSvg from '../images/toolbar/align/align-horizontal-bottom.svg';\n// @ts-ignore\nimport ahmSvg from '../images/toolbar/align/align-horizontal-middle.svg';\n// @ts-ignore\nimport ahtSvg from '../images/toolbar/align/align-horizontal-top.svg';\n// @ts-ignore\nimport avcSvg from '../images/toolbar/align/align-vertical-center.svg';\n// @ts-ignore\nimport avlSvg from '../images/toolbar/align/align-vertical-left.svg';\n// @ts-ignore\nimport avrSvg from '../images/toolbar/align/align-vertical-right.svg';\n// @ts-ignore\nimport deleteSvg from '../images/toolbar/delete-simple.svg';\n// @ts-ignore\nimport gridSvg from '../images/toolbar/grid.svg';\n// @ts-ignore\nimport guideSvg from '../images/toolbar/guidelines.svg';\n// @ts-ignore\nimport hideSvg from '../images/toolbar/hide-selected.svg';\n// @ts-ignore\nimport layoutSvg from '../images/toolbar/layout-cose.svg';\n// @ts-ignore\nimport layoutPropSvg from '../images/toolbar/layout-properties.svg';\n// @ts-ignore\nimport loadSvg from '../images/toolbar/load.svg';\n// @ts-ignore\nimport newSvg from '../images/toolbar/new.svg';\n// @ts-ignore\nimport portalSvg from '../images/toolbar/portal.svg';\n// @ts-ignore\nimport helpSvg from '../images/toolbar/quick-help.svg';\n// @ts-ignore\nimport redoSvg from '../images/toolbar/redo.svg';\n// @ts-ignore\nimport saveSvg from '../images/toolbar/save.svg';\n// @ts-ignore\nimport setingsSvg from '../images/toolbar/settings.svg';\n// @ts-ignore\nimport showSvg from '../images/toolbar/show-all.svg';\n// @ts-ignore\nimport undoSvg from '../images/toolbar/undo.svg';\nimport { EGridType } from \"../modals/GridSettings\";\nimport PathwayActions from \"../utils/PathwayActions\";\nimport { EModalType } from \"./react-pathway-mapper\";\n\n\ninterface IButtonbarProps {\n pathwayActions: PathwayActions;\n handleOpen: (modelId: EModalType) => void;\n}\n\ninterface ISVGFunction{\n svg: any;\n function: () => void;\n tooltip: string; \n isFocused?: boolean;\n}\n\n\n@observer\nexport default class Buttonbar extends React.Component{\n\n\n @observable\n private searchedGene: string;\n\n\n constructor(props: IButtonbarProps) {\n super(props);\n makeObservable(this);\n \n this.searchedGene = \"\";\n this.props.pathwayActions.enabledType = EGridType.NONE;\n }\n\n setEnabledType(newType: EGridType){\n if(newType === this.props.pathwayActions.enabledType){\n this.props.pathwayActions.enabledType = EGridType.NONE;\n } else {\n this.props.pathwayActions.enabledType = newType;\n }\n\n // Enabled type calculated\n\n if(this.props.pathwayActions.enabledType === EGridType.GRID){\n this.props.pathwayActions.toggleGrid(true);\n }\n else if(this.props.pathwayActions.enabledType === EGridType.GUIDE){\n this.props.pathwayActions.toggleGuide(true);\n } else {\n this.props.pathwayActions.toggleGrid(false); // This will disable both.\n }\n }\n render() {\n \n const fileFunctions: ISVGFunction[] = [\n {svg: newSvg, function: this.props.pathwayActions.newPathway, tooltip: \"New Pathway\"},\n {svg: loadSvg, function: this.props.pathwayActions.upload, tooltip: \"Import Pathway\" },\n {svg: saveSvg, function: () => {this.props.pathwayActions.export(false)}, tooltip: \"Export Pathway\"}];\n \n const modFunctions: ISVGFunction[] = [\n {svg: deleteSvg, function: this.props.pathwayActions.deleteSelected, tooltip: \"Delete Selected\"}];\n\n if(!this.props.pathwayActions.isCollaborative){\n modFunctions.push({svg: undoSvg, function: () => {this.props.pathwayActions.undo();}, tooltip: \"Undo\"},\n {svg: redoSvg, function: () => {this.props.pathwayActions.redo();}, tooltip: \"Redo\"});\n }\n const alignFunctions: ISVGFunction[] = [\n {svg: ahtSvg, function: () => {this.props.pathwayActions.align(\"hTop\");}, tooltip: \"Align Horizontal Top\"},\n {svg: ahmSvg, function: () => {this.props.pathwayActions.align(\"hMid\");}, tooltip: \"Align Horizontal Middle\"},\n {svg: ahbSvg, function: () => {this.props.pathwayActions.align(\"hBot\");}, tooltip: \"Align Horizontal Bottom\"},\n {svg: avlSvg, function: () => {this.props.pathwayActions.align(\"vLeft\");}, tooltip: \"Align Vertical Left\"},\n {svg: avcSvg, function: () => {this.props.pathwayActions.align(\"vCen\");}, tooltip: \"Align Vertical Center\"},\n {svg: avrSvg, function: () => {this.props.pathwayActions.align(\"vRight\");}, tooltip: \"Align Vertical Right\"}];\n \n const utilFunctions: ISVGFunction[] = [\n {isFocused: this.props.pathwayActions.enabledType === EGridType.GRID, svg: gridSvg, function: () => {this.setEnabledType(EGridType.GRID);}, tooltip: \"Enable Grid: Show and snap to grid\"},\n {isFocused: this.props.pathwayActions.enabledType === EGridType.GUIDE, svg: guideSvg, function: () => {this.setEnabledType(EGridType.GUIDE);}, tooltip: \"Enable Guidelines: Enable and snap to alignment guidelines\"}];\n\n const visibilityFunctions: ISVGFunction[] = [\n {svg: hideSvg, function: () => {this.props.pathwayActions.hideSelected();}, tooltip: \"Hide Selected\"},\n {svg: showSvg, function: () => {this.props.pathwayActions.showAll();}, tooltip: \"Show All\"}];\n\n const layoutFunctions: ISVGFunction[] = [\n {svg: layoutSvg, function: () => {this.props.pathwayActions.performLayout();}, tooltip: \"Perform Layout\"},\n {svg: layoutPropSvg, function: () => {this.props.handleOpen(EModalType.LAYOUT);}, tooltip: \"Layout Properties\"}];\n\n const portalFunctions: ISVGFunction[] = [\n {svg: portalSvg, function: () => {this.props.handleOpen(EModalType.STUDY);}, tooltip: \"Fetch Genomic Data From cBioPortal\"},\n {svg: setingsSvg, function: () => {this.props.handleOpen(EModalType.PROFILES);}, tooltip: \"Genomic Data Visibility Settings\"}];\n\n const infoFunctions: ISVGFunction[] = [\n {svg: helpSvg, function: () => {this.props.handleOpen(EModalType.HELP);}, tooltip: \"Quick Help\"},\n {svg: aboutSvg, function: () => {this.props.handleOpen(EModalType.ABOUT);}, tooltip: \"About\"}];\n \n const allFunctions = [fileFunctions, modFunctions, alignFunctions, utilFunctions, visibilityFunctions, portalFunctions, layoutFunctions, infoFunctions];\n\n \n return (\n \n \n { allFunctions.map((functions, index) =>\n \n { functions.map((svg: ISVGFunction, index) => \n (\n )\n )\n }\n )\n }\n \n \n \n { this.searchedGene = e.target.value;}}\n placeholder=\"Search Genes...\"\n onKeyPress={(e: any) => { if (e.key !== \"Enter\") return; this.props.pathwayActions.searchGene(this.searchedGene) }} />\n {this.props.pathwayActions.searchGene(this.searchedGene)}}\n style={{cursor: 'pointer'}}\n >\n \n \n \n \n \n \n \n )\n }\n\n}\n","import { EModalType } from \"../ui/react-pathway-mapper\";\nimport EditorActionsManager from \"./EditorActionsManager\";\n\nexport default class ContextMenuManager {\n private cy: any;\n private editor: EditorActionsManager;\n private handleOpen: (modalId: EModalType) => void;\n private undoRedoManager: any;\n private isCollaborative: any;\n constructor(cy: any, editor: EditorActionsManager,\n handleOpen: (modalId: EModalType) => void, undoRedoManager: any,\n isCollaborative: boolean){\n this.cy = cy;\n this.editor = editor;\n this.handleOpen = handleOpen;\n this.undoRedoManager = undoRedoManager;\n this.isCollaborative = isCollaborative;\n this.init();\n }\n\n init() {\n const classRef = this;\n\n const ctxMenus = this.cy.contextMenus();\n\n let menuItems = [\n {\n id: 'deleteSelected', // ID of menu item\n content: 'Delete Selected', // content of menu item\n // Filters the elements to have this menu item on cxttap\n // If the selector is not truthy no elements will have this menu item on cxttap\n coreAsWell: true,\n onClickFunction: (event) => {\n const selectedEles = this.cy.elements(':selected');\n classRef.editor.removeElement(selectedEles);\n },\n disabled: false, // Whether the item will be created as disabled\n hasTrailingDivider: true, // Whether the item will have a trailing divider\n },\n {\n id: 'hideSelected', // ID of menu item\n content: 'Hide Selected', // content of menu item\n // Filters the elements to have this menu item on cxttap\n // If the selector is not truthy no elements will have this menu item on cxttap\n coreAsWell: true,\n onClickFunction: function (event) {\n classRef.editor.hideSelectedNodes();\n },\n disabled: false, // Whether the item will be created as disabled\n hasTrailingDivider: true, // Whether the item will have a trailing divider\n },\n {\n id: 'loadFromCBioPortal', // ID of menu item\n content: 'Load From cBioPortal...', // content of menu item\n // Filters the elements to have this menu item on cxttap\n // If the selector is not truthy no elements will have this menu item on cxttap\n coreAsWell: true,\n onClickFunction: (event) => {\n this.handleOpen(EModalType.STUDY);\n },\n disabled: false, // Whether the item will be created as disabled\n hasTrailingDivider: true, // Whether the item will have a trailing divider\n },\n //Context menu items when clicking on nodes/compounds\n {\n id: 'remove', // ID of menu item\n content: 'Delete', // content of menu item\n // Filters the elements to have this menu item on cxttap\n // If the selector is not truthy no elements will have this menu item on cxttap\n selector: 'node, edge',\n onClickFunction: function (event) {\n var ele = event.target;\n // The function to be executed on click\n var selectedElements = classRef.cy.nodes(':selected').union(ele);\n classRef.editor.removeElement(selectedElements);\n },\n disabled: false, // Whether the item will be created as disabled\n hasTrailingDivider: true, // Whether the item will have a trailing divider\n coreAsWell: false // Whether core instance have this item on cxttap\n },\n {\n id: 'addSelected', // ID of menu item\n content: 'Add Selected Into This', // content of menu item\n // Filters the elements to have this menu item on cxttap\n // If the selector is not truthy no elements will have this menu item on cxttap\n selector: 'node',\n onClickFunction: function (event)\n {\n var ele = event.target;\n var selectedNodes = classRef.cy.nodes(':selected');\n var containerType = ele.data('type');\n var validNodes = classRef.cy.collection();\n\n //Do nothing if node is GENE\n if (ele._private.data['type'] === 'GENE' || selectedNodes.size() < 1) {\n return;\n }\n //Prevent actions like adding root node to children & addition to itself\n else\n {\n var notValid = false;\n selectedNodes.forEach(function (tmpNode, i)\n {\n if (ele.id() == tmpNode.id()) {\n notValid = true;\n return false;\n }\n\n if (tmpNode.isParent()) {\n notValid = classRef.isChildren(tmpNode, ele);\n if (notValid) {\n return false;\n }\n }\n\n return true;\n });\n\n if (notValid) {\n return;\n }\n }\n\n\n selectedNodes.forEach(function (tmpNode, i)\n {\n\n if(containerType == \"FAMILY\" || containerType == \"COMPLEX\")\n {\n if(tmpNode.data('type') != \"COMPARTMENT\" && tmpNode.data('type') != \"PROCESS\")\n {\n validNodes = validNodes.add(tmpNode);\n }\n }\n else\n {\n validNodes = validNodes.add(tmpNode);\n }\n\n });\n\n var compId = ele.id();\n classRef.editor.changeParents(validNodes, compId);\n //Unselecting nodes to remove them from selectedNodeStack\n selectedNodes.unselect();\n\n },\n disabled: false, // Whether the item will be created as disabled\n hasTrailingDivider: true, // Whether the item will have a trailing divider\n coreAsWell: false // Whether core instance have this item on cxttap\n },\n {\n id: 'removeSelected', // ID of menu item\n content: 'Remove Selected From Parent', // content of menu item\n // Filters the elements to have this menu item on cxttap\n // If the selector is not truthy no elements will have this menu item on cxttap\n selector: 'node',\n onClickFunction: function (event) {\n const ele = event.target;\n const selectedNodes = classRef.cy.nodes(':selected');\n\n let notValid = false;\n selectedNodes.forEach(function (tmpNode, i) {\n\n if (tmpNode.isParent()) {\n notValid = classRef.isChildren(tmpNode, ele);\n if (notValid) {\n return false;\n }\n }\n\n return true;\n });\n\n if (notValid) {\n return;\n }\n\n classRef.editor.changeParents(selectedNodes, null);\n //Unselecting nodes to remove them from selectedNodeStack\n selectedNodes.unselect();\n },\n disabled: false, // Whether the item will be created as disabled\n hasTrailingDivider: true, // Whether the item will have a trailing divider\n coreAsWell: false // Whether core instance have this item on cxttap\n },\n {\n id: 'performLayout', // ID of menu item\n content: 'Perform Layout', // content of menu item\n // Filters the elements to have this menu item on cxttap\n // If the selector is not truthy no elements will have this menu item on cxttap\n coreAsWell: true,\n onClickFunction: (event) => {\n this.editor.performLayout();\n },\n disabled: false, // Whether the item will be created as disabled\n hasTrailingDivider: true, // Whether the item will have a trailing divider\n }\n\n ];\n let nonCollabItems = [ \n //Context menu items when clicking on blank space\n {\n id: 'undoAction', // ID of menu item\n content: 'Undo', // content of menu item\n // Filters the elements to have this menu item on cxttap\n // If the selector is not truthy no elements will have this menu item on cxttap\n coreAsWell: true,\n onClickFunction: (event) => {\n this.undoRedoManager.undo();\n },\n disabled: false, // Whether the item will be created as disabled\n hasTrailingDivider: true, // Whether the item will have a trailing divider\n },\n {\n id: 'redoAction', // ID of menu item\n content: 'Redo', // content of menu item\n // Filters the elements to have this menu item on cxttap\n // If the selector is not truthy no elements will have this menu item on cxttap\n coreAsWell: true,\n onClickFunction: (event) => {\n this.undoRedoManager.redo();\n },\n disabled: false, // Whether the item will be created as disabled\n hasTrailingDivider: true, // Whether the item will have a trailing divider\n }\n ];\n\n if(!this.isCollaborative){\n menuItems = menuItems.concat(nonCollabItems);\n }\n ctxMenus.appendMenuItems(menuItems);\n }\n\n\n //TODO ??????\n //window.edgeAddingMode = false;\n\n //TODO better move this to another class\n //Utility function to check whether query node is children of given node\n isChildren(node, queryNode)\n {\n var parent = queryNode.parent()[0];\n while(parent)\n {\n if (parent.id() == node.id()) {\n return true;\n }\n parent = parent.parent()[0];\n }\n return false;\n }\n}\n","import $ from 'jquery';\nimport EditorActionsManager from \"./EditorActionsManager\";\nexport default class QtipManager{\n private cy: any;\n private editor: any;\n constructor(cy: any, editor: EditorActionsManager)\n {\n this.cy = cy;\n this.editor = editor;\n }\n\n generateEdgeQtipContentHTML(edge)\n {\n var self = this;\n var textInput = $('
');\n var pubmedIDList = $('
');\n var pubmedURL = 'https://www.ncbi.nlm.nih.gov/pubmed/';\n var pubmedData = edge.data('pubmedIDs');\n var edgeLabelInput = $('
');\n\n function generatePubmedLinks(argData)\n {\n for (var key in argData)\n {\n if(!argData.hasOwnProperty(key)){\n continue;\n }\n var pubmedID = argData[key];\n\n if (isNaN(pubmedID))\n continue;\n\n const pubmedIDRemoveButton = $(\"\");\n pubmedIDRemoveButton.on('click', function(event)\n {\n $(event.target).parent().remove();\n var edge = self.cy.$('#'+$(event.target).attr('edgeId'));\n var pubmedId = [$(event.target).parent().find('a').text()];\n self.editor.removePubmedID(edge, pubmedId);\n if($('.pubmedIDList').children().length < 3)\n {\n $('.pubmedIDList').children().remove();\n }\n });\n\n const pubmedContent = $(\"
\\\n \\\n
\");\n pubmedContent.first().append(pubmedIDRemoveButton);\n pubmedIDList.append(pubmedContent);\n }\n }\n\n function generatePubmedLinksHeader()\n {\n pubmedIDList.append($('
'));\n pubmedIDList.append($(''));\n }\n\n if (pubmedData.length > 0)\n {\n generatePubmedLinksHeader();\n generatePubmedLinks(pubmedData);\n }\n\n textInput.change(function()\n {\n var edgeID = $(this).find('input').attr('edgeid');\n const val: string = $(this).find('input').val() as string;\n var pumbedIDs = val.split(';');\n $(this).find('input').val(\"\");\n\n if($('.pubmedIDList').children().length === 0)\n {\n generatePubmedLinksHeader();\n }\n\n self.editor.addPubmedIDs(edge, pumbedIDs);\n\n generatePubmedLinks(pumbedIDs);\n\n });\n\n edgeLabelInput.change(function()\n {\n var edgeID = $(this).find('input').attr('edgeid');\n\n var cyEdge = self.cy.$('#'+edgeID)[0];\n var newName = $(this).find('input').val();\n $(this).find('input').val(\"\");\n\n //TODO call associated Editor Actions Manager function\n self.editor.changeName(cyEdge, newName);\n });\n\n var wrapper = $('
');\n var pubmedRow = $('
\\\n
Add PubmedID(s):
\\\n
');\n\n pubmedRow.append(textInput);\n var labelRow = $('
\\\n
Label:
\\\n
');\n\n labelRow.append(edgeLabelInput);\n wrapper.append(labelRow);\n wrapper.append('
');\n pubmedRow.append(textInput);\n wrapper.append(pubmedRow);\n wrapper.append(pubmedIDList);\n return wrapper;\n }\n\n generateNodeQtipContentHTML(ele)\n {\n const self = this;\n const nodeData = ele.data();\n const textInput = $('
');\n textInput.change(function()\n {\n const nodeID = $(this).find('input').attr('nodeid');\n\n const cyNode = self.cy.$('#'+nodeID)[0];\n const newName = $(this).find('input').val();\n self.editor.changeName(cyNode, newName);\n });\n\n var wrapper = $('
');\n var row = $('
\\\n
Name:
\\\n
');\n\n row.append(textInput);\n wrapper.append(row);\n\n if (ele.data().type === \"GENE\")\n {\n var entrezGeneButton = $('
');\n entrezGeneButton.find('button').on('click', function(event)\n {\n event.preventDefault();\n var nodeID = $(this).attr('nodeid');\n var nodeSymbol = self.cy.$('#'+nodeID)[0]._private.data['name'];\n var parent = $(this).parent();\n window.open('https://www.mycancergenome.org/content/gene/' + nodeSymbol);\n\n\n });\n wrapper.append(entrezGeneButton);\n }\n\n return wrapper;\n }\n\n addQtipToElements(eles)\n {\n var self = this;\n eles.forEach(function(ele,)\n {\n var qTipOpts = {};\n if (ele.isNode())\n {\n qTipOpts =\n {\n content:\n {\n text: function()\n {\n return self.generateNodeQtipContentHTML(this);\n },\n title: function()\n {\n return ele.data().type.toUpperCase() + ' DETAILS';\n }\n },\n position: {\n my: 'top center',\n at: 'bottom center'\n },\n style:\n {\n classes: 'qtip-tipsy qtip-rounded',\n width: 400\n } ,\n show:{\n event :\"showqtipevent\"\n } \n };\n\n }\n else if(ele.isEdge())\n {\n qTipOpts =\n {\n content:\n {\n text: function()\n {\n return self.generateEdgeQtipContentHTML(this);\n },\n title: function()\n {\n return 'INTERACTION DETAILS';\n }\n },\n position: {\n my: 'top center',\n at: 'bottom center'\n },\n style:\n {\n classes: 'qtip-tipsy qtip-rounded',\n width: 400\n } ,\n show:{\n event :\"showqtipevent\"\n } \n };\n }\n ele.qtip(qTipOpts);\n });\n }\n\n\n //Utility Functions\n capitalizeFirstLetter(string)\n {\n return string.charAt(0).toUpperCase() + string.slice(1);\n }\n\n\n}\n","import EditorActionsManager from \"./EditorActionsManager\";\nimport _ from \"lodash\";\nimport GraphUtilities from \"../utils/GraphUtilities\";\n\nlet sharedb;\nlet socket;\nlet connection;\n\nexport default class ShareDBManager {\n\n readonly NODEMAP_NAME = 'nodes';\n readonly EDGEMAP_NAME = 'edges';\n readonly LAYOUT_PROPS_NAME = 'layoutProperties';\n readonly GLOBAL_OPTS_NAME = 'globalOptions';\n //For storing genomic data information per gene\n readonly GENOMIC_DATA_MAP_NAME = 'genomicDataMap';\n //For storing visibility information of genomic data according to the cancer type\n readonly VISIBLE_GENOMIC_DATA_MAP_NAME = 'visibleGenomicDataMapByType';\n readonly GENOMIC_DATA_GROUP_NAME = 'genomicDataGroupList';\n readonly GENOMIC_DATA_GROUP_COUNT = 'genomicDataGroupCount';\n \n graphUtilities: GraphUtilities;\n doc: any;\n postFileLoad: any;\n editor: EditorActionsManager;\n constructor(postFileLoadCallback) {\n //Doc data maps names and keys\n this.postFileLoad = postFileLoadCallback;\n this.graphUtilities = new GraphUtilities();\n };\n\n\n\n getDoc(){\n return this.doc;\n }\n\n setEditor(editor: EditorActionsManager){\n this.editor = editor;\n }\n\n //Applies any given sharDB opeation to shared document and notifies other clients\n applyShareDBOperation(op) {\n this.doc.submitOp(op, this.shareDBError);\n };\n\n //Clears genomic data in shared document and notifies other clients\n clearShareDBGenomicData() {\n var ops = [];\n var genomicMap = this.doc.data[this.GENOMIC_DATA_MAP_NAME];\n var visMap = this.doc.data[this.VISIBLE_GENOMIC_DATA_MAP_NAME];\n var genomicDataGroupMap = this.doc.data[this.GENOMIC_DATA_GROUP_NAME];\n var genomicDataGroupCount = this.doc.data[this.GENOMIC_DATA_GROUP_COUNT];\n //Reset all genomic maps\n for (const key of Object.keys(genomicMap)) {\n ops.push({p: [this.GENOMIC_DATA_GROUP_NAME, key], od: genomicMap[key]});\n }\n for (const key of Object.keys(visMap)) {\n ops.push({p: [this.VISIBLE_GENOMIC_DATA_MAP_NAME, key], od: visMap[key]});\n }\n for (const key of Object.keys(genomicDataGroupMap)) {\n ops.push({p: [this.GENOMIC_DATA_GROUP_NAME, key], od: genomicDataGroupMap[key]});\n }\n //Reset genomic data group count to 0\n ops.push({p: [this.GENOMIC_DATA_GROUP_COUNT], na: -genomicDataGroupCount});\n this.doc.submitOp(ops, this.shareDBError);\n };\n\n /*\n * Updates shared document object\n * @param mapName: map name of the object\n * @param objectKey: key of the object\n * @param object: new object\n *\n */\n updateShareDBObject(mapName, objectKey, object) {\n this.doc.submitOp([{\n p: [mapName, objectKey],\n od: this.doc.data[mapName][objectKey],\n oi: object\n }], this.shareDBError);\n };\n\n /*\n * Inserts a new shared document object\n * @param mapName: map name of the object\n * @param objectKey: key of the object\n * @param object: new object\n *\n */\n insertShareDBObject(mapName, objectKey, object) {\n this.doc.submitOp([{p: [mapName, objectKey], oi: object}], this.shareDBError);\n };\n\n /*\n * Deletes a shared document object\n * @param mapName: map name of the object\n * @param objectKey: key of the object\n *\n */\n deleteShareDBObject(mapName, objectKey) {\n this.doc.submitOp([{p: [mapName, objectKey], od: this.doc.data[mapName][objectKey]}], this.shareDBError);\n };\n\n //Initializes layout properties of the shared document\n initializeShareDBLayoutProperties() {\n this.doc.submitOp([{\n p: [this.LAYOUT_PROPS_NAME, 0],\n li: [this.editor.layoutProperties]\n }], this.shareDBError);\n };\n\n //Initializes global options of the shared document\n initializeShareDBGlobalOptions() {\n this.doc.submitOp([{\n p: [this.GLOBAL_OPTS_NAME, 0],\n li: [this.editor.getGlobalOptions()]\n }], this.shareDBError);\n };\n\n /*\n * Updates layout properties of the shared document and notifies other clients\n * @param object: new layout properties object\n *\n */\n updateShareDBLayoutProperties(object) {\n this.doc.submitOp([{\n p: [this.LAYOUT_PROPS_NAME, 0],\n ld: this.doc.data[this.LAYOUT_PROPS_NAME][0],\n li: object\n }], this.shareDBError);\n };\n\n /*\n * Updates global options of the shared document and notifies other clients\n * @param object: new global options object\n *\n */\n updateShareDBGlobalOptions(object) {\n this.doc.submitOp([{\n p: [this.GLOBAL_OPTS_NAME, 0],\n ld: this.doc.data[this.GLOBAL_OPTS_NAME][0],\n li: object\n }], this.shareDBError);\n };\n\n //Increments shared data group count\n //Use this function to increment and keep the group count synchronized\n incrementShareDBGroupCount() {\n this.doc.submitOp([{p: [this.GENOMIC_DATA_GROUP_COUNT], na: 1}], this.shareDBError);\n };\n\n //Checks whether given operation is a replace or add/delete operation\n isShareDBReplaceEvent(op) {\n return (op.hasOwnProperty(\"oi\") && op.hasOwnProperty(\"od\"))\n || (op.hasOwnProperty(\"li\") && op.hasOwnProperty(\"ld\"));\n };\n\n /*\n * Gets the initial value of the shared document\n * without this function shared document values cannot be reached\n */\n initializeSharedDBDoc() {\n this.doc.subscribe();\n };\n\n shareDBError(err) {\n if (err) {\n console.error(err);\n }\n };\n\n initShareDB() {\n sharedb = require('sharedb/lib/client');\n socket = new WebSocket('ws://' + window.location.host);\n connection = new sharedb.Connection(socket);\n\n var self = this;\n\n var id = this.getParam('id');\n\n var loadFileCallback = function () {\n self.onFileLoaded();\n };\n\n //Creates new shared db document and initializes values\n var createNewDocument = () => {\n var new_id = self.getCustomObjId();\n var data = {\n nodes: {},\n edges: {},\n layoutProperties: [this.editor.layoutProperties],\n globalOptions: [this.editor.getGlobalOptions()],\n genomicDataMap: {},\n visibleGenomicDataMapByType: {},\n genomicDataGroupList: {},\n genomicDataGroupCount: 0\n };\n window.history.pushState(null, null, '?id=' + new_id);\n self.doc = connection.get('cy', new_id);\n self.doc.create(data, loadFileCallback);\n };\n\n //Check if id exists in parameters\n //If exists open the shared document\n if (id) {\n // Check any document exists with given id\n this.doc = connection.get('cy', id);\n this.doc.fetch(function (err) {\n if (err)\n throw err;\n\n if (self.doc.type === null) {\n createNewDocument();\n return;\n }\n self.doc.subscribe(loadFileCallback);\n });\n }\n else {\n //Create new shared document\n createNewDocument();\n }\n };\n\n /*\n * After a file has been initialized and loaded, we can access the\n * document. We will wire up the data in shared document to the UI.\n *\n */\n onFileLoaded() {\n this.initializeSharedDBDoc();\n this.syncInitialSharedDocData();\n this.initSharedDocEventHandlers();\n\n this.postFileLoad();\n };\n\n /*\n * Synchronizes initial data in the shared document to\n * client's application.\n */\n syncInitialSharedDocData() {\n var self = this;\n var nodeMap = self.doc.data[this.NODEMAP_NAME];\n var edgeMap = self.doc.data[this.EDGEMAP_NAME];\n var shareDBLayoutProperties = self.doc.data[this.LAYOUT_PROPS_NAME][0];\n var globalOptions = self.doc.data[this.GLOBAL_OPTS_NAME][0];\n var genomicDataMap = self.doc.data[this.GENOMIC_DATA_MAP_NAME];\n var visDataMap = self.doc.data[this.VISIBLE_GENOMIC_DATA_MAP_NAME];\n var groupedGenomicDataMap = self.doc.data[this.GENOMIC_DATA_GROUP_NAME];\n var groupedGenomicDataCount = self.doc.data[this.GENOMIC_DATA_GROUP_COUNT];\n\n\n var invalidGenes = [];\n var highlightedGenes = [];\n var invalidHighlightedGenes = [];\n var hiddenGenes = [];\n for (const key of Object.keys(nodeMap)) {\n var tmpNode = nodeMap[key];\n var tmpNodeId = tmpNode.id;\n\n if (tmpNode.isInvalidGene && tmpNode.isHighlighted) {\n invalidHighlightedGenes.push(tmpNodeId);\n }\n else if (tmpNode.isInvalidGene) {\n invalidGenes.push(tmpNodeId);\n }\n else if (tmpNode.isHighlighted) {\n highlightedGenes.push(tmpNodeId);\n }\n if (tmpNode.isHidden) {\n hiddenGenes.push(tmpNodeId);\n }\n }\n var highlightedEdges = [];\n for (const key of Object.keys(edgeMap)) {\n var tmpEdge = edgeMap[key];\n var tmpEdgeId = tmpEdge.id;\n if (tmpEdge.isHighlighted) {\n highlightedEdges.push(tmpEdgeId);\n }\n }\n\n //TODO Workaround for legacy pathways\n\n // Workaround for backward compatibility of legacy pathways\n // Addition of pubmed id field on server if legacy collaborative\n // pathways does not have !\n for (const key of Object.keys(edgeMap)) {\n var tmpEdge = edgeMap[key];\n\n if (tmpEdge.pubmedIDs == undefined || tmpEdge.name == undefined || tmpEdge.bendPoint == undefined) {\n var pubmedIDs = (tmpEdge.pubmedIDs == undefined) ? [] : tmpEdge.pubmedID;\n var edgeLabel = (tmpEdge.name == undefined) ? \"\" : tmpEdge.name;\n var bendPoint = (tmpEdge.bendPoint == undefined) ? [] : tmpEdge.bendPoint;\n\n var param = {\n type: tmpEdge.type,\n source: tmpEdge.source,\n id: self.getCustomObjId(),\n target: tmpEdge.target,\n pubmedID: pubmedIDs,\n name: edgeLabel,\n bendPoint: bendPoint\n };\n\n var newEdge: any = self.edgeInitializer(param);\n\n\n var tmpEdgeID = tmpEdge.id;\n var newEdgeID = newEdge.id;\n\n var ops = [\n {p: [self.EDGEMAP_NAME, tmpEdgeID], od: tmpEdge},\n {p: [self.EDGEMAP_NAME, newEdgeID], oi: newEdge}\n ]\n self.applyShareDBOperation(ops);\n }\n\n }\n\n //Add real time nodes to local graph\n this.editor.addNewElementsLocally(nodeMap, edgeMap);\n //Adds different type of highlight to nodes and hides if their property is hidden\n this.editor.highlightElementsInitially(invalidHighlightedGenes, invalidGenes, highlightedGenes, highlightedEdges, hiddenGenes);\n\n //Update layout properties & global options!!\n this.editor.updateLayoutPropertiesCallback({li: shareDBLayoutProperties});\n this.editor.changeGlobalOptions({li: globalOptions});\n\n //Sync already available genomic data !\n\n if (!groupedGenomicDataMap) {\n\n self.insertShareDBObject(self.GENOMIC_DATA_MAP_NAME, '0', []);\n for (const key of Object.keys(visDataMap)) {\n var currentMap = _.clone(groupedGenomicDataMap['0']);\n // currentMap.push(visibilityMapKeys[key]);\n self.updateShareDBObject(self.GENOMIC_DATA_MAP_NAME, '0', currentMap);\n }\n }\n\n if (!groupedGenomicDataCount) {\n var count = self.doc.data[self.GENOMIC_DATA_GROUP_COUNT];\n var op = [{\n p: [self.GENOMIC_DATA_GROUP_COUNT],\n na: -count\n }];\n self.applyShareDBOperation(op);\n groupedGenomicDataCount = self.doc.data[self.GENOMIC_DATA_GROUP_COUNT];\n }\n\n\n for (const key_g of Object.keys(genomicDataMap)) {\n this.editor.genomicDataOverlayManager.genomicDataMap[key_g] =\n genomicDataMap[key_g];\n\n }\n\n for (const key_g of Object.keys(groupedGenomicDataMap)) {\n this.editor.genomicDataOverlayManager.groupedGenomicDataMap[key_g] =\n groupedGenomicDataMap[key_g];\n const data = groupedGenomicDataMap[key_g];\n if(data.length !== 1){\n console.log(\"Grouped genomic data expected to be of length 1 (from sync)\");\n }\n data.forEach((profileId: any) => {this.editor.addToProfiles(profileId)});\n }\n\n for (const key_g of Object.keys(visDataMap)) {\n this.editor.genomicDataOverlayManager.visibleGenomicDataMapByType[key_g] =\n visDataMap[key_g];\n this.editor.adjustVisibilityShareDB(key_g, visDataMap[key_g]);\n \n }\n\n //Does not seem necessary for not but just for sake of completeness\n this.editor.genomicDataOverlayManager.groupedGenomicDataCount = groupedGenomicDataCount;\n\n this.editor.genomicDataOverlayManager.showGenomicData();\n this.editor.genomicDataOverlayManager.notifyObservers();\n this.editor.cy.fit(50);\n };\n\n /*\n * Initialize event listeners for any operation coming from shareDB\n *\n */\n initSharedDocEventHandlers () {\n\n var self = this;\n\n //Setup event handlers for maps\n var nodeAddRemoveHandler = function (op) {\n self.editor.shareDBNodeAddRemoveEventCallBack(op);\n };\n\n var edgeAddRemoveHandler = function (op) {\n self.editor.shareDBEdgeAddRemoveEventCallBack(op);\n };\n\n var genomicDataAddRemoveHandler = function (op) {\n self.editor.shareDBGenomicDataHandler(op);\n };\n\n var genomicDataVisibilityChangeHandler = function (op) {\n self.editor.shareDBGenomicDataVisibilityHandler(op);\n self.checkShareDBGenomicData();\n };\n\n var genomicDataGroupChangeHandler = function (op) {\n self.editor.shareDBGenomicDataGroupChangeHandler(op);\n };\n\n var updateElementHandler = function (op) {\n self.editor.updateElementCallback(op);\n };\n\n var updateLayoutPropsHandler = function (op) {\n self.editor.updateLayoutPropertiesCallback(op);\n };\n\n var updateGlobalOptionsHandler = function (op) {\n self.editor.changeGlobalOptions(op);\n };\n\n\n //Event listeners for maps\n this.doc.on('op', function (op, source) {\n for (var i = 0; i < op.length; i++) {\n var handleOp = op[i];\n var path = handleOp.p[0];\n var isReplaceEvent = self.isShareDBReplaceEvent(handleOp);\n\n if (!isReplaceEvent) {\n if (path === self.NODEMAP_NAME) {\n nodeAddRemoveHandler(handleOp);\n }\n else if (path === self.EDGEMAP_NAME) {\n edgeAddRemoveHandler(handleOp);\n }\n else if (path === self.GENOMIC_DATA_MAP_NAME) {\n genomicDataAddRemoveHandler(handleOp);\n }\n else if (path === self.VISIBLE_GENOMIC_DATA_MAP_NAME) {\n genomicDataVisibilityChangeHandler(handleOp);\n }\n else if (path === self.GENOMIC_DATA_GROUP_NAME) {\n genomicDataGroupChangeHandler(handleOp);\n }\n }\n else { //Then it is update event\n if (path === self.NODEMAP_NAME) {\n updateElementHandler(handleOp);\n }\n else if (path === self.EDGEMAP_NAME) {\n updateElementHandler(handleOp);\n }\n else if (path === self.LAYOUT_PROPS_NAME) {\n updateLayoutPropsHandler(handleOp);\n }\n else if (path === self.GLOBAL_OPTS_NAME) {\n updateGlobalOptionsHandler(handleOp);\n }\n }\n }\n });\n };\n\n /*\n * Make sure that genomic cloud data is syncronized\n */\n checkShareDBGenomicData () {\n\n var self = this;\n var genomicDataMap = self.doc.data[this.GENOMIC_DATA_MAP_NAME];\n var visDataMap = self.doc.data[this.VISIBLE_GENOMIC_DATA_MAP_NAME];\n var groupedGenomicDataMap = self.doc.data[this.GENOMIC_DATA_GROUP_NAME];\n var groupedGenomicDataCount = self.doc.data[this.GENOMIC_DATA_GROUP_COUNT];\n\n for (var key in genomicDataMap) {\n this.editor.genomicDataOverlayManager.genomicDataMap[key] =\n genomicDataMap[key];\n }\n\n for (var key in visDataMap) {\n this.editor.genomicDataOverlayManager.visibleGenomicDataMapByType[key] =\n visDataMap[key];\n }\n\n for (var key in groupedGenomicDataMap) {\n this.editor.genomicDataOverlayManager.groupedGenomicDataMap[key] =\n groupedGenomicDataMap[key];\n }\n this.editor.genomicDataOverlayManager.groupedGenomicDataCount = groupedGenomicDataCount;\n this.editor.genomicDataOverlayManager.showGenomicData();\n this.editor.genomicDataOverlayManager.notifyObservers();\n };\n \n /*\n * Gets the first empty index from the shared document\n * genomic data group count and increments counter by 1\n *\n */\n\n getEmptyGroupID() {\n var returnCount = this.doc.data[this.GENOMIC_DATA_GROUP_COUNT];\n this.incrementShareDBGroupCount();\n return returnCount;\n };\n\n /*\n * Gets the first empty index from the shared document\n * Initializes & inserts a new genomic data\n * by group id or group name\n *\n */\n groupGenomicData(cancerNames, inGroupId) {\n var genomicGroupMap = this.doc.data[this.GENOMIC_DATA_GROUP_NAME];\n var genomicVisMap = this.doc.data[this.VISIBLE_GENOMIC_DATA_MAP_NAME];\n\n var groupID = \"\" + inGroupId;\n var currentGroup = [];\n\n if (genomicGroupMap.hasOwnProperty(groupID))\n currentGroup = _.clone(genomicGroupMap[groupID]);\n\n for (var i in cancerNames) {\n if (!genomicVisMap.hasOwnProperty(cancerNames[i]))\n currentGroup.push(cancerNames[i]);\n }\n\n // If group id already exists change existing object\n if (genomicGroupMap.hasOwnProperty(groupID)) {\n this.updateShareDBObject(this.GENOMIC_DATA_GROUP_NAME, groupID, currentGroup);\n }\n else {\n //Insert new group\n this.insertShareDBObject(this.GENOMIC_DATA_GROUP_NAME, groupID, currentGroup);\n }\n\n };\n\n //Clears genomic data on shared document\n clearGenomicData() {\n this.clearShareDBGenomicData();\n };\n\n addGenomicData(geneData) {\n var genomicMap = this.doc.data[this.GENOMIC_DATA_MAP_NAME];\n\n //Iterate over all genmoic data which is mapped by geneSymbol to list of alteration values\n //that are also mapped by cancer name and associated value\n var ops = [];\n for (var geneSymbol in geneData) {\n var genomicMapEntry = {};\n if (genomicMap.hasOwnProperty(geneSymbol))\n genomicMapEntry = _.clone(genomicMap[geneSymbol]);\n\n for (var cancerType in geneData[geneSymbol]) {\n if (!(cancerType in genomicMapEntry))\n genomicMapEntry[cancerType] = parseInt(geneData[geneSymbol][cancerType]).toFixed(2);\n }\n ops.push({\n p: [this.GENOMIC_DATA_MAP_NAME, geneSymbol],\n oi: genomicMapEntry\n });\n }\n this.applyShareDBOperation(ops);\n };\n\n addGenomicVisibilityData(visMap) {\n var ops = [];\n for (var cancerStudy in visMap) {\n ops.push({\n p: [this.VISIBLE_GENOMIC_DATA_MAP_NAME, cancerStudy],\n oi: visMap[cancerStudy]\n });\n }\n this.applyShareDBOperation(ops);\n };\n\n changeVisibility(nodesToHide, isHidden) {\n var self = this;\n var nodeMap = self.doc.data[this.NODEMAP_NAME];\n\n nodesToHide.forEach(function (ele) {\n var nodeID = ele.id();\n if (nodeMap.hasOwnProperty(nodeID)) {\n var realTimeNode = nodeMap[nodeID];\n realTimeNode.isHidden = isHidden;\n self.updateShareDBObject(self.NODEMAP_NAME, nodeID, realTimeNode);\n }\n });\n };\n\n changeHighlight(elementsToHighlight, isHighlighted) {\n var self = this;\n var nodeMap = self.doc.data[this.NODEMAP_NAME];\n var edgeMap = self.doc.data[this.EDGEMAP_NAME];\n\n elementsToHighlight.forEach(function (ele) {\n var elementID = ele.id();\n if (nodeMap.hasOwnProperty(elementID)) {\n var realTimeNode = nodeMap[elementID];\n realTimeNode.isHighlighted = isHighlighted;\n self.updateShareDBObject(self.NODEMAP_NAME, elementID, realTimeNode);\n }\n if (edgeMap.hasOwnProperty(elementID)) {\n var realTimeEdge = edgeMap[elementID];\n realTimeEdge.isHighlighted = isHighlighted;\n self.updateShareDBObject(self.EDGEMAP_NAME, elementID, realTimeEdge);\n }\n });\n };\n\n addNewNode(nodeData, posData) {\n var realTimeGeneratedID = this.getCustomObjId();\n var params = {\n name: nodeData.name,\n type: nodeData.type,\n id: realTimeGeneratedID,\n parent: nodeData.parent,\n w: nodeData.w,\n h: nodeData.h,\n minWidth: nodeData.minWidth,\n minWidthBiasLeft: nodeData.minWidthBiasLeft,\n minWidthBiasRight: nodeData.minWidthBiasRight,\n minHeight: nodeData.minHeight,\n minHeightBiasTop: nodeData.minHeightBiasTop,\n minHeightBiasBottom: nodeData.minHeightBiasBottom\n };\n\n //Ensures new node is compatible with the other nodes\n var newNode = this.nodeInitializer(params);\n if (posData) {\n newNode.x = posData.x;\n newNode.y = posData.y;\n }\n this.insertShareDBObject(this.NODEMAP_NAME, realTimeGeneratedID, newNode);\n };\n\n addNewEdge(edgeData) {\n var realTimeGeneratedID = this.getCustomObjId();\n var params = {\n type: edgeData.type,\n id: realTimeGeneratedID,\n source: edgeData.source,\n target: edgeData.target,\n pubmedIDs: edgeData.pubmedIDs,\n name: edgeData.name,\n bendPoint: edgeData.bendPoint\n };\n\n //Ensures new edge is compatible with the other edge\n var newEdge = this.edgeInitializer(params);\n this.insertShareDBObject(this.EDGEMAP_NAME, realTimeGeneratedID, newEdge);\n };\n\n reconnectEdge = function(sourceID, targetID, edgeData) {\n var edgeMap = this.doc.data[this.EDGEMAP_NAME];\n var edge = edgeMap[edgeData.id];\n var edgeID = edge.id;\n\n edge.source = sourceID;\n edge.target = targetID;\n\n if(edgeMap.hasOwnProperty(edgeID)) {\n this.updateShareDBObject(this.EDGEMAP_NAME, edgeID, edge);\n }\n else {\n throw new Error('Element does not exist in Real Time');\n }\n };\n\n\n removeElement (elementID) {\n var edgeMap = this.doc.data[this.EDGEMAP_NAME];\n var nodeMap = this.doc.data[this.NODEMAP_NAME];\n\n if (nodeMap.hasOwnProperty(elementID)) {\n this.deleteShareDBObject(this.NODEMAP_NAME, elementID);\n }\n else if (edgeMap.hasOwnProperty(elementID)) {\n this.deleteShareDBObject(this.EDGEMAP_NAME, elementID);\n }\n else {\n throw new Error('Element does not exist in Real Time');\n }\n };\n\n moveElement (ele) {\n var nodeMap = this.doc.data[this.NODEMAP_NAME];\n\n var elementID = ele.id();\n var newPos = ele.position();\n\n if (nodeMap.hasOwnProperty(elementID)) {\n var tmpNode = nodeMap[elementID];\n tmpNode.x = newPos.x;\n tmpNode.y = newPos.y;\n this.updateShareDBObject(this.NODEMAP_NAME, elementID, tmpNode);\n }\n else {\n throw new Error('Element does not exist in nodes !!! ');\n }\n };\n\n //This function is used for movements of all selected elements wrt alignment selected\n changeElementsPositionByAlignment (coll) {\n var self = this;\n var nodeMap = self.doc.data[this.NODEMAP_NAME];\n\n coll.forEach(function (ele) {\n var elementID = ele.node.id();\n if (nodeMap.hasOwnProperty(elementID)) {\n var tmpNode = nodeMap[elementID];\n tmpNode.x = ele.nextPosition.x;\n tmpNode.y = ele.nextPosition.y;\n self.updateShareDBObject(self.NODEMAP_NAME, elementID, tmpNode);\n }\n else {\n throw new Error('Element does not exist in nodes !!! ');\n }\n });\n };\n\n resizeElement (ele, previousWidth, previousHeight) {\n var nodeMap = this.doc.data[this.NODEMAP_NAME];\n\n var elementID = ele.id();\n var newWidth = ele.width();\n var newHeight = ele.height();\n var currentX = ele.position('x');\n var currentY = ele.position('y');\n\n if (nodeMap.hasOwnProperty(elementID)) {\n var tmpNode = nodeMap[elementID];\n tmpNode.x = currentX + newWidth - previousWidth;\n tmpNode.y = currentY + newHeight - previousHeight;\n tmpNode.w = newWidth;\n tmpNode.h = newHeight;\n this.updateShareDBObject(this.NODEMAP_NAME, elementID, tmpNode);\n }\n else {\n throw new Error('Element does not exist in nodes !!! ');\n }\n };\n\n setSizeOfElement (ele, newWidth, newHeight) {\n var nodeMap = this.doc.data[this.NODEMAP_NAME];\n\n var elementID = ele.id();\n\n if (nodeMap.hasOwnProperty(elementID)) {\n var tmpNode = nodeMap[elementID];\n tmpNode.w = newWidth;\n tmpNode.h = newHeight;\n this.updateShareDBObject(this.NODEMAP_NAME, elementID, tmpNode);\n }\n else {\n throw new Error('Element does not exist in nodes !!! ');\n }\n };\n\n resizeCompound (ele, minWidth, minWidthBiasLeft, minWidthBiasRight, minHeight, minHeightBiasTop, minHeightBiasBottom) {\n var nodeMap = this.doc.data[this.NODEMAP_NAME];\n\n var elementID = ele.id();\n var currentX = ele.position('x');\n var currentY = ele.position('y');\n\n if (nodeMap.hasOwnProperty(elementID)) {\n var tmpNode = nodeMap[elementID];\n tmpNode.x = currentX;\n tmpNode.y = currentY;\n tmpNode.minWidth = minWidth;\n tmpNode.minWidthBiasLeft = minWidthBiasLeft;\n tmpNode.minWidthBiasRight = minWidthBiasRight;\n tmpNode.minHeight = minHeight;\n tmpNode.minHeightBiasTop = minHeightBiasTop;\n tmpNode.minHeightBiasBottom = minHeightBiasBottom;\n this.updateShareDBObject(this.NODEMAP_NAME, elementID, tmpNode);\n }\n else {\n throw new Error('Element does not exist in nodes !!! ');\n }\n };\n\n changeNodePositionsShareDB (nodes) {\n var self = this;\n var nodeMap = self.doc.data[self.NODEMAP_NAME];\n\n nodes.forEach(function (ele) {\n var nodeID = ele.id();\n if (nodeMap.hasOwnProperty(nodeID)) {\n var realTimeNode = nodeMap[nodeID];\n realTimeNode.x = ele.position('x');\n realTimeNode.y = ele.position('y');\n self.updateShareDBObject(self\n .NODEMAP_NAME, nodeID, realTimeNode);\n }\n else {\n throw new Error('Element does not exist in nodes !!! ');\n }\n });\n };\n\n changeHighlightInvalidGenes (nodeIDs, isInvalid) {\n var nodeMap = this.doc.data[this.NODEMAP_NAME];\n\n //TODO check compound operation inside or outside of for ?\n for (var i in nodeIDs) {\n var nodeID = nodeIDs[i];\n if (nodeMap.hasOwnProperty(nodeID)) {\n var collaborativeNode = nodeMap[nodeID];\n collaborativeNode.isInvalidGene = isInvalid;\n this.updateShareDBObject(this.NODEMAP_NAME, nodeID, collaborativeNode);\n }\n }\n\n };\n\n addPubmedIDs (edgeID, pubmedIDs) {\n var edgeMap = this.doc.data[this.EDGEMAP_NAME];\n\n\n if (edgeMap.hasOwnProperty(edgeID)) {\n var tmpEdge = edgeMap[edgeID];\n var nonDuplicateArray = [];\n for (var i = 0; i < pubmedIDs.length; i++) {\n if (tmpEdge.pubmedIDs.indexOf(pubmedIDs[i]) < 0) {\n nonDuplicateArray.push(pubmedIDs[i]);\n }\n }\n tmpEdge.pubmedIDs = tmpEdge.pubmedIDs.concat(nonDuplicateArray);\n this.updateShareDBObject(this.EDGEMAP_NAME, edgeID, tmpEdge);\n }\n else {\n throw new Error('Edge does not exist in real time !!! ');\n }\n };\n\n removePubmedID(edgeID, pubmedIDs) {\n var edgeMap = this.doc.data[this.EDGEMAP_NAME];\n\n if (edgeMap.hasOwnProperty(edgeID)) {\n var tmpEdge = edgeMap[edgeID];\n var removedIndices = [];\n for (var i = 0; i < pubmedIDs.length; i++) {\n var tmpID = pubmedIDs[i];\n var index = tmpEdge.pubmedIDs.indexOf(tmpID);\n if (index >= 0) {\n removedIndices.push(index);\n }\n }\n for (var i = 0; i < removedIndices.length; i++) {\n tmpEdge.pubmedIDs.remove(removedIndices[i]);\n }\n this.updateShareDBObject(this.EDGEMAP_NAME, edgeID, tmpEdge);\n\n }\n else {\n throw new Error('Edge does not exist in real time !!! ');\n }\n };\n\n updateEdgeBendPoints(edgeID, bendPointsArray) {\n\n var edgeMap = this.doc.data[this.EDGEMAP_NAME];\n \n if (edgeMap.hasOwnProperty(edgeID)) {\n var tmpEdge = edgeMap[edgeID];\n tmpEdge.bendPoint = bendPointsArray;\n this.updateShareDBObject(this.EDGEMAP_NAME, edgeID, tmpEdge);\n }\n else {\n throw new Error('Edge does not exist in real time !!! ');\n }\n };\n\n changeName(ele, newName) {\n var nodeMap = this.doc.data[this.NODEMAP_NAME];\n var edgeMap = this.doc.data[this.EDGEMAP_NAME];\n\n var elementID = ele.id();\n\n if (ele.isNode()) {\n if (nodeMap.hasOwnProperty(elementID)) {\n var tmpNode = nodeMap[elementID];\n tmpNode.name = newName;\n this.updateShareDBObject(this.NODEMAP_NAME, elementID, tmpNode);\n }\n else {\n throw new Error('Element does not exist in nodes !!! ');\n }\n }\n else {\n if (edgeMap.hasOwnProperty(elementID)) {\n var tmpEdge = edgeMap[elementID];\n tmpEdge.name = newName;\n this.updateShareDBObject(this.EDGEMAP_NAME, elementID, tmpEdge);\n }\n else {\n throw new Error('Element does not exist in edges !!! ');\n }\n }\n };\n\n changeParent(rootNode, newParentId, connectedEdges) {\n var self = this;\n var nodeLookupTable = {};\n\n function traverseFromRoot(rootNode, parId) {\n /*\n remove outermost node,\n create new real time node with given parentId,\n pass id of this real time node to children,\n repeat in a recursive manner\n after that restore the edges that dissapear by removed nodes\n during change parent\n */\n\n var refNode = rootNode.nodeRef;\n var children = rootNode.children;\n var newParentId = parId;\n\n if (refNode) {\n var refNodeId = refNode.id();\n var nodeData = refNode.data();\n var posData = refNode.position();\n var currentWidth = refNode.data('w');\n var currentHeight = refNode.data('h');\n\n var newNodeData =\n {\n name: nodeData.name,\n type: nodeData.type,\n x: posData.x,\n y: posData.y,\n w: currentWidth,\n h: currentHeight,\n parent: -1\n };\n\n if (parId) {\n newNodeData.parent = parId;\n }\n\n self.removeElement(refNodeId);\n var newNode = self.nodeInitializer(newNodeData);\n var newNodeId = newNode.id;\n self.insertShareDBObject(self.NODEMAP_NAME, newNodeId, newNode);\n newParentId = newNodeId;\n nodeLookupTable[refNodeId] = newNodeId;\n }\n\n for (const childNode of children) {\n traverseFromRoot(childNode, newParentId);\n }\n }\n\n //Begin traversing from given root node\n traverseFromRoot(rootNode, newParentId);\n\n //Restore edges that dissapear by the change parent operation\n //TODO compound operations ?\n connectedEdges.forEach(function (edge, index) {\n var edgeData = edge.data();\n self.removeElement(edge.id());\n\n var newSource = nodeLookupTable[edgeData.source];\n var newTarget = nodeLookupTable[edgeData.target];\n\n if (newSource) {\n edgeData.source = newSource;\n }\n\n if (newTarget) {\n edgeData.target = newTarget;\n }\n\n self.addNewEdge(edgeData);\n });\n };\n\n removeAllElements() {\n var nodeMap = this.doc.data[this.NODEMAP_NAME];\n var edgeMap = this.doc.data[this.EDGEMAP_NAME];\n var ops = [];\n\n //Remove all real time nodes\n for (const key of Object.keys(nodeMap)) {\n ops.push({\n p: [this.NODEMAP_NAME, key],\n od: nodeMap[key]\n });\n }\n\n //Remove all real time edges\n for (const key of Object.keys(edgeMap)) {\n ops.push({\n p: [this.EDGEMAP_NAME, key],\n od: edgeMap[key]\n });\n }\n\n this.applyShareDBOperation(ops);\n };\n\n loadGraph(nodes, edges) {\n var self = this;\n this.removeAllElements();\n\n //Function that traverses graph tree recursively.\n var oldIdNewIdMap = {};\n\n function traverseTree(node, newParentId) {\n node.data.x = node.position.x;\n node.data.y = node.position.y;\n\n //Update parent !\n if (newParentId) {\n var parent = node.data.parent;\n if (parent) {\n node.data.parent = newParentId;\n }\n }\n\n //Create new real time node\n var newNodeId = self.getCustomObjId();\n var params = node.data;\n oldIdNewIdMap[params.id] = newNodeId;\n var newNode = self.nodeInitializer(params);\n newNode.id = newNodeId;\n\n self.insertShareDBObject(self.NODEMAP_NAME, newNodeId, newNode);\n\n //If node has children recursively traverse sub graphs and update parent field of child nodes\n if (node.children.length > 0) {\n for (const tmpNode of node.children) {\n traverseTree(tmpNode, newNodeId);\n }\n }\n }\n\n //Create graph hierarchy from given list of flat nodes\n var tree = this.graphUtilities.createGraphHierarchyRealTime(nodes);\n //Traverse from root nodes of tree\n for (const rootLevelNode of tree) {\n traverseTree(rootLevelNode, undefined);\n }\n\n /*\n Create real time edges, update the source and target fields, since new ids will be generated for the nodes in\n real time\n */\n for (const edge of edges) {\n edge.data.source = oldIdNewIdMap[edge.data.source];\n edge.data.target = oldIdNewIdMap[edge.data.target];\n var params = edge.data;\n var newEdgeID = self.getCustomObjId();\n params.id = newEdgeID;\n var newEdge = self.edgeInitializer(params);\n self.insertShareDBObject(self.EDGEMAP_NAME, newEdgeID, newEdge);\n }\n };\n\n mergeGraph (nodes, edges) {\n var self = this;\n var nodeMap = self.doc.data[this.NODEMAP_NAME];\n\n var realTimeNodeMap = nodeMap;\n var realTimeNodeLookupTable = {};\n var realTimeNodeNameLookupTable = {};\n var oldIdNewIdMap = {};\n\n //Create lookup table for real time nodes\n //items are stored in an array in the resulting array of nodeMap.items()\n // [0] - id, [1] - object\n for (var i in realTimeNodeMap) {\n var nodeMapItem = realTimeNodeMap[i];\n realTimeNodeLookupTable[nodeMapItem.id] = nodeMapItem;\n realTimeNodeNameLookupTable[nodeMapItem.name] = nodeMapItem;\n }\n\n //Recursive traverse definition\n function traverseTree(node, newParentId) {\n //Search by name !\n //We have not found a node that exist in the graph, add normally\n if (!(node.data.name in realTimeNodeNameLookupTable)) {\n node.data.x = node.position.x;\n node.data.y = node.position.y;\n\n //Update parent !\n if (newParentId) {\n var parent = node.data.parent;\n if (parent) {\n node.data.parent = newParentId;\n }\n }\n\n //Create new real time node\n var newNodeId = self.getCustomObjId();\n oldIdNewIdMap[node.data.id] = newNodeId;\n var newNode = self.nodeInitializer(node.data);\n newNode.id = newNodeId;\n self.insertShareDBObject(self.NODEMAP_NAME, newNodeId, newNode);\n\n //If node has children recursively traverse sub graphs and update parent field of child nodes\n if (node.children.length > 0) {\n for (const tmpNode of node.children) {\n traverseTree(tmpNode, newNodeId);\n }\n }\n }\n // At this point there exists another node in the graph with the same name as 'node'\n // we need to update parent field of children of this node if any\n else {\n var sameNameNode = realTimeNodeNameLookupTable[node.data.name];\n var sameNodeId = sameNameNode.id;\n oldIdNewIdMap[node.data.id] = sameNodeId;\n\n //If node has children recursively traverse sub graphs and update parent field of child nodes\n if (node.children.length > 0) {\n for (const tmpNode of node.children) {\n traverseTree(tmpNode, sameNodeId);\n }\n }\n }\n }\n\n //Traverse from root nodes of tree\n var tree = this.graphUtilities.createGraphHierarchyRealTime(nodes);\n for (const rootLevelNode of tree) {\n traverseTree(rootLevelNode, rootLevelNode.data.id);\n }\n\n /*\n Create real time edges, update the source and target fields, since new ids will be generated for the nodes in\n real time\n */\n var ops = [];\n for (const edge of edges) {\n edge.data.source = oldIdNewIdMap[edge.data.source];\n edge.data.target = oldIdNewIdMap[edge.data.target];\n var newEdge = self.edgeInitializer(edge.data);\n var newEdgeID = this.getCustomObjId();\n newEdge.id = newEdgeID;\n ops.push({\n p: [self.EDGEMAP_NAME, newEdgeID],\n oi: newEdge\n });\n }\n self.applyShareDBOperation(ops);\n };\n\n updateLayoutProperties (newLayoutProperties) {\n this.updateShareDBLayoutProperties(newLayoutProperties);\n };\n\n updateGlobalOptions (newOptions) {\n this.updateShareDBGlobalOptions(newOptions);\n };\n\n /*\n * Creates graph hierarchy from given flat list of nodes list, nodes list is assumed to have parent-child\n * relationship by a field 'parent' which represents to the id of the parent node This function is specific\n * for the needs of TCGA Pathway Curation Tool 04/07/2016\n *\n * @param nodes {array}: flat list of nodes of a graph\n * @return {array}: Tree representation in array, entries are root level nodes. node.children gives children nodes\n * of each node in the returned array.\n * a node in corresponding level.\n *\n * */\n createGraphHierarchy (nodes) {\n //Some arrays and maps for creating graph hierarchy\n var tree = [];\n var mappedArr = {};\n\n // First map the nodes of the array to an object -> create a hash table.\n for (var i = 0, len = nodes.length; i < len; i++) {\n var arrElem = nodes[i];\n mappedArr[arrElem.data.id] = arrElem;\n mappedArr[arrElem.data.id].children = [];\n }\n\n for (const id of Object.keys(mappedArr)) {\n var mappedElem = mappedArr[id];\n\n // If the element is not at the root level, add it to its parent array of children.\n if (mappedElem.data.parent) {\n mappedArr[mappedElem.data.parent].children.push(mappedElem);\n }\n // If the element is at the root level, add it to first level elements array.\n else {\n tree.push(mappedElem);\n }\n }\n return tree;\n };\n\n //Makes sure that edge is compatible with edges in shared document\n edgeInitializer (params) {\n var edge: any = {};\n edge.id = params.id || this.getCustomObjId();\n edge.type = params.type || \"undefined\";\n edge.source = params.source || \"undefined\";\n edge.target = params.target || \"undefined\";\n edge.name = params.name || \"\";\n edge.isHighlighted = params.isHighlighted || false;\n\n if (params.pubmedIDs) {\n if (edge.pubmedIDs == undefined) {\n edge.pubmedIDs = [];\n }\n if(params.pubmedIDs.length > 0)\n edge.pubmedIDs.push(params.pubmedIDs);\n }\n else {\n edge.pubmedIDs = [];\n }\n\n if (params.bendPoint) {\n if (edge.bendPoint == undefined) {\n edge.bendPoint = [];\n }\n edge.bendPoint.push(params.bendPoint);\n }\n else {\n edge.bendPoint = [];\n }\n return edge;\n };\n\n //Makes sure that node is compatible with nodes in shared document\n nodeInitializer(params) {\n var node: any = {};\n node.id = params.id || this.getCustomObjId();\n node.name = params.name || \"undefined\";\n node.type = params.type || \"undefined\";\n node.parent = params.parent || \"undefined\";\n node.x = params.x || \"undefined\";\n node.y = params.y || \"undefined\";\n node.w = params.w || \"undefined\";\n node.h = params.h || \"undefined\";\n node.minWidth = params.minWidth || 0;\n node.minWidthBiasLeft = params.minWidth || 0;\n node.minWidthBiasRight = params.minWidth || 0;\n node.minHeight = params.minWidth || 0;\n node.minHeightBiasTop = params.minWidth || 0;\n node.minHeightBiasBottom = params.minWidth || 0;\n node.isHidden = params.isHidden || false;\n node.isInvalidGene = params.isInvalidGene || false;\n node.isHighlighted = params.isHighlighted || false;\n return node;\n };\n\n //Makes sure that layout properties is compatible with layout properties in shared document\n layoutPropertiesInitializer (params) {\n var layoutProperties: any = {};\n layoutProperties.name = params.name || 'undefined';\n layoutProperties.nodeRepulsion = params.nodeRepulsion || 'undefined';\n // this.nodeOverlap = params.nodeOverlap || 'undefined';\n layoutProperties.idealEdgeLength = params.idealEdgeLength || 'undefined';\n layoutProperties.edgeElasticity = params.edgeElasticity || 'undefined';\n layoutProperties.nestingFactor = params.nestingFactor || 'undefined';\n layoutProperties.gravity = params.gravity || 'undefined';\n layoutProperties.numIter = params.numIter || 'undefined';\n layoutProperties.tile = params.tile || 'undefined';\n layoutProperties.animate = params.animate || 'undefined';\n layoutProperties.randomize = params.randomize || false;\n layoutProperties.gravityRangeCompound = params.gravityRangeCompound || 'undefined';\n layoutProperties.gravityCompound = params.gravityCompound || 'undefined';\n layoutProperties.gravityRange = params.gravityRange || 'undefined';\n layoutProperties.tilingPaddingVertical = params.tilingPaddingVertical || 'undefined';\n layoutProperties.tilingPaddingHorizontal = params.tilingPaddingHorizontal || 'undefined';\n layoutProperties.initialEnergyOnIncremental = params.initialEnergyOnIncremental || 'undefined';\n return layoutProperties;\n };\n\n //Makes sure that global options is compatible with global options in shared document\n globalOptionsInitializer (params) {\n var globalOptions: any = {};\n globalOptions.zoomLevel = params.zoomLevel || 'undefined';\n globalOptions.panLevel = params.panLevel || 'undefined';\n return globalOptions;\n };\n\n //Create unique ID for elements\n getCustomObjId () {\n // see http://stackoverflow.com/a/8809472\n // we need to take care of our own IDs because the ones automatically generated by cytoscape (also UUID)\n // don't comply with xsd:SID type that must not begin with a number\n // Public Domain/MIT\n var d = Date.now();\n if (typeof performance !== 'undefined' && typeof performance.now === 'function') {\n d += performance.now(); //use high-precision timer if available\n }\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n var r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);\n });\n };\n\n getParam (urlParam) {\n const regExp = new RegExp(urlParam + '=(.*?)($|&)', 'g');\n let match: any = window.location.search.match(regExp);\n if (match && match.length) {\n match = match[0];\n match = match.replace(urlParam + '=', '').replace('&', '');\n } else {\n match = null;\n }\n return match;\n };\n\n}\n","import EditorActionsManager from \"../managers/EditorActionsManager\";\nimport $ from \"jquery\";\nimport 'jquery-ui-dist/jquery-ui';\nimport cytoscape from 'cytoscape';\n\n\nexport default class DragDropNodeAddPlugin {\n\n\n\n pathwayHandler: (pathwayName: string) => void;\n\n private cy: any;\n private editor: EditorActionsManager;\n\n constructor(editor: EditorActionsManager, cy: any, pathwayHandler: (pathwayName: string) => void)\n {\n this.editor = editor;\n this.cy = cy;\n this.pathwayHandler = pathwayHandler;\n this.initNodeAdd();\n }\n\n //TODO JQUERY IS IGNORED\n initNodeAdd()\n {\n var nodeAddClass = this;\n var defaults = {\n height: 30, //height of the icon container\n width: 30, //width of the icon container\n padding: 5, //padding of the icon container(from right & top)\n backgroundColorDiv: '#fbfbfb', //background color of the icon container\n borderColorDiv: '#fff', //border color of the icon container\n borderWidthDiv: '0px', //border width of the icon container\n borderRadiusDiv: '5px', //border radius of the icon container\n\n icon: '', //icon class name\n\n nodeParams: function(){\n // return element object to be passed to cy.add() for adding node\n return {};\n }\n };\n\n const self = this;\n\n // @ts-ignore\n $.fn.cytoscapeNodeadd = function(params: any) {\n var options = $.extend(true, {}, defaults, params);\n var fn = params;\n\n var functions = {\n destroy: function() {\n var $this = $(this);\n\n $this.find(\".ui-cytoscape-nodeadd\").remove();\n },\n init: function()\n {\n return $(this).each(function()\n {\n var components = options.components;\n for (const component of components)\n {\n var dragContainer = component.container;\n //var explanationText = component.explanationText;\n\n var $nodeadd = $('
');\n dragContainer.append($nodeadd);\n var $nodeDragHandle = $('
\\\n \\\n \\\n \\\n
');\n $nodeadd.append($nodeDragHandle);\n\n $nodeDragHandle.bind(\"mousedown\", function(e: any)\n {\n e.stopPropagation(); // don't trigger dragging of nodeadd\n e.preventDefault(); // don't cause text selection\n });\n\n //Setup UI\n dragContainer.find(\".ui-cytoscape-nodeadd-nodediv\").css({\n background: options.backgroundColorDiv,\n border: options.borderWidthDiv + ' solid ' + options.borderColorDiv,\n 'border-radius': options.borderRadiusDiv\n });\n\n //Init Draggable\n dragContainer.find(\"#ui-cytoscape-nodeadd-icon\").draggable({\n helper: \"clone\",\n cursor: \"pointer\"\n });\n }\n\n // @ts-ignore TODO: AMENDMENT ATTENTION\n var $container = $(this);\n //Init Droppable\n // @ts-ignore TODO: Droppable is ignored\n $container.droppable({\n activeClass: \"ui-state-highlight\",\n // accept: \"#ui-cytoscape-nodeadd-icon\",\n drop: function(event: any, ui: any) {\n $container.removeClass(\"ui-state-highlight\");\n\n var currentOffset = $container.offset();\n var relX = event.pageX - currentOffset.left;\n var relY = event.pageY - currentOffset.top;\n\n var nodeType = $(ui.helper).attr('nodeType').toUpperCase();\n\n var cy = nodeAddClass.cy;\n\n //Hold a map for parents and candidate parent nodes for this addition\n var nodeMap = {};\n var parentMap = {};\n //Loop through nodes for hit testing about drag position on canvas\n cy.nodes().forEach(function(node: any)\n {\n var nodeBbox = node.renderedBoundingBox();\n //Rectangle point test\n if ( (relX <= nodeBbox.x2 && relX >= nodeBbox.x1) && (relY <= nodeBbox.y2 && relY >= nodeBbox.y1) && node.data().type != 'GENE' )\n {\n //If node has a children put an entry to the parentMap\n if (node.children().length > 0)\n {\n parentMap[node.id()] = true;\n }\n\n //If parent of this node is already added to the node map remove it, since our candidate is in deeper level !\n if (parentMap[node._private.data.parent])\n {\n delete nodeMap[node._private.data.parent];\n }\n\n //Add an entry to node map\n nodeMap[node.id()] = node;\n }\n });\n\n //Check if any parent found, if so set parent field\n var parent = nodeMap[Object.keys(nodeMap)[0]];\n var nodeData = {w: \"0\", h: \"100\", parent: 0, type: nodeType, name:'New '+ $(ui.helper).attr('nodeType')};\n if (parent)\n {\n if(parent.data().type == \"FAMILY\" || parent.data().type == \"COMPLEX\")\n {\n if(nodeType != \"COMPARTMENT\" && nodeType != \"PROCESS\")\n {\n nodeData.parent = parent.id();\n }\n }\n else\n {\n nodeData.parent = parent.id();\n }\n }\n //TODO one place access to these\n nodeData.w = \"150\";\n nodeData.h = \"52\";\n\n //Adjust position according to the zoom level and pan !\n //To set rendered position !!!\n //TODO refactor this !\n relX = relX / cy.zoom() + cy.extent().x1;\n relY = relY / cy.zoom() + cy.extent().y1;\n nodeAddClass.editor.addNode(nodeData,{x: relX,y: relY});\n self.pathwayHandler(\"Additional Pathway\");\n\n }\n });\n\n });\n }\n };\n\n if (functions[fn]) {\n return functions[fn].apply(this, Array.prototype.slice.call(arguments, 1));\n } else if (typeof fn == 'object' || !fn) {\n return functions.init.apply(this, arguments);\n } else {\n $.error(\"No such function `\" + fn + \"` for jquery.cytoscapenodeadd\");\n }\n\n return $(this);\n };\n\n // @ts-ignore\n $.fn.cynodeadd = $.fn.cytoscapeNodeadd;\n try{\n /* Adding as an extension to the core functionality of cytoscape.js*/\n cytoscape('core', 'nodeadd', function(options: any) {\n\n // @ts-ignore\n $(this.container()).cytoscapeNodeadd(options);\n });\n } catch(err){\n console.log(err);\n }\n }\n\n\n\n\n}\n","import autobind from \"autobind-decorator\";\nimport cytoscape from 'cytoscape';\nimport $ from \"jquery\";\nimport { observer } from \"mobx-react\";\nimport React from 'react';\n// @ts-ignore\nimport resizeCue from '../../node_modules/cytoscape-node-resize/resizeCue.svg';\nimport pathways from \"../data/pathways.json\";\n// @ts-ignore\nimport compartmentImg from \"../images/nodes/compartment.svg\";\n// @ts-ignore\nimport complexImg from \"../images/nodes/complex.svg\";\n// @ts-ignore\nimport familyImg from \"../images/nodes/family.svg\";\n// @ts-ignore\nimport geneImg from \"../images/nodes/gene.svg\";\n// @ts-ignore\nimport processImg from \"../images/nodes/process.svg\";\nimport ContextMenuManager from \"../managers/ContextMenuManager\";\nimport EditorActionsManager from \"../managers/EditorActionsManager\";\nimport QtipManager from \"../managers/QtipManager\";\nimport ShareDBManager from \"../managers/ShareDBManager\";\nimport ViewOperationsManager from \"../managers/ViewOperationsManager\";\nimport CBioPortalAccessor from \"../utils/CBioPortalAccessor\";\nimport DragDropNodeAddPlugin from \"../utils/DragDropNodeAddPlugin\";\nimport SaveLoadUtility from \"../utils/SaveLoadUtility\";\nimport { EModalType, IProfileMetaData } from './react-pathway-mapper';\n// @ts-ignore\nwindow.$ = $;\n\nconst edgeHandles = require('cytoscape-edgehandles');\nconst edgeEditing = require('cytoscape-edge-editing');\nconst regCose = require('cytoscape-cose-bilkent');\nconst nodeResize = require('cytoscape-node-resize');\nconst undoRedo = require('cytoscape-undo-redo');\nconst panzoom = require('cytoscape-panzoom');\nconst styleSheet = require('../utils/GraphStyleSheet.tsx');\nconst panzoomOpts = require('../utils/PanzoomOptions.tsx');\nconst navigator = require('cytoscape-navigator');\nconst contextMenus = require('cytoscape-context-menus');\nconst konva = require('konva');\nconst viewUtilities = require('cytoscape-view-utilities');\nconst grid_guide = require('cytoscape-grid-guide');\nconst cyqtip = require('cytoscape-qtip');\n\ntype PathwayMapperType = {\n isCollaborative: boolean;\n isCbioPortal: boolean;\n editorHandler: Function;\n selectedPathway: string;\n setActiveEdge: Function;\n profiles: IProfileMetaData[];\n pathwayHandler: (pathwayName: string) => void;\n handleOpen: (modalId: EModalType) => void;\n};\n@observer\nexport default class CytoscapeArea extends React.Component{\n private cy:any;\n private cyDiv: HTMLDivElement | undefined;\n private editor: EditorActionsManager;\n private edgeAddingMode: any;\n private viewOperationsManager: ViewOperationsManager;\n private qtipManager: QtipManager;\n private genomicDataExplorerView: any;\n private pathwayDetailsView: any;\n private viewUtilities: any;\n private isCollaborative: boolean;\n private isCbioPortal: boolean;\n private shareDBManager: ShareDBManager;\n private cxtMenuManager: ContextMenuManager;\n private dragDropNodeAddManager: DragDropNodeAddPlugin;\n private undoRedoManager: any;\n private portalAccessor: CBioPortalAccessor;\n private isMountedFirst = true;\n private eh: any;\n private lastSelectedEdge: any;\n\n\n constructor (props: PathwayMapperType) {\n super(props);\n this.isCollaborative = props.isCollaborative;\n this.edgeAddingMode = 0;\n this.isCbioPortal = props.isCbioPortal;\n // this.init();\n // this.createSampleMenu(); //TODO: AMENDMENT Menu must be react.\n // this.createCBioPortalAccessModal();\n }\n\n\n componentWillUpdate(nextProps: PathwayMapperType) {\n this.getPathway(nextProps.selectedPathway);\n }\n\n // This method only opens pathways that are available in pathway.json. Namely, imported or merged pathways are not opened via this method.\n // Yet, they individually call parsing method.\n getPathway(selectedPathway: string){\n\n if(!selectedPathway || selectedPathway === '') return;\n\n const data = pathways[selectedPathway];\n\n // It might be non-existent due to pathway being created using collaborative mode, or pathway loaded elsewhere (import vs.)\n if(!data){ \n return;\n }\n // TODO Problematic const data = pathways[\"../samples/BLCA-2014-RTK-RAS-PI(3)K-pathway.txt\"];\n\n const parsedGraph = SaveLoadUtility.parseGraph(data, true);\n\n\n const allEles = parsedGraph;\n this.editor.loadFile(allEles.nodes, allEles.edges);\n }\n\n render(){\n return (
\n
\n
\n
);\n }\n\n componentDidMount(): void {\n if(this.isMountedFirst){\n this.init();\n this.isMountedFirst = false;\n }\n this.getPathway(this.props.selectedPathway);\n }\n\n @autobind\n cyDivHandler(div:HTMLDivElement){\n this.cyDiv = div;\n }\n\n init(){\n\n // Create portal accessor\n this.portalAccessor = new CBioPortalAccessor();\n\n // Initializes cytoscape\n this.initCyJS();\n // Initialize cytoscape based handlers here\n this.initCyHandlers();\n this.initKeyboardHandlers();\n this.initUndoRedoFunctionality();\n this.initCBioPortalFunctionalities();\n this.placePanzoomAndOverlay();\n\n //this.appManager = this;\n }\n\n placePanzoomAndOverlay(){\n //TODO place navigator !!!\n var offset = 5;\n // @ts-ignore\n var topCy = $(this.cyDiv).offset().top;\n //var bottomCy = $('.cyContainer').offset().bottom;\n // @ts-ignore\n var leftCy = $(this.cyDiv).offset().left;\n //var rightCy = $('.cyContainer').offset().right;\n // @ts-ignore\n var heightCy = $(this.cyDiv).outerHeight();\n // @ts-ignore\n var widthCy = $(this.cyDiv).outerWidth();\n var heightNavigator = $('.cytoscape-navigator-wrapper').outerHeight();\n var widthNavigator = $('.cytoscape-navigator-wrapper').outerWidth();\n var heightPatwayNavbar = $('.pathway-navbar').outerHeight();\n var heightPathwayToolbar = $('.pathway-toolbar').outerHeight();\n var widthSideBar = $('.sideBarWrapper').outerWidth();\n var widthcBioPortalSideBar = $('.cBioPortal-sidebar').outerWidth();\n\n//706px 1513.15px\n//694px 1391.15px\n //var heightPanzoom = $('.cy-panzoom').outerHeight();\n //var widthPanzoom = $('.cy-panzoom').outerWidth();\n\n if(!this.isCbioPortal) {\n \n $('.cytoscape-navigator-wrapper').css('top', heightCy + topCy - heightNavigator - offset + 13);\n $('.cytoscape-navigator-wrapper').css('left', widthCy + leftCy - widthNavigator - offset + 21 - 0.5 + 0.35);\n //$('.cytoscape-navigator-wrapper').css('left', widthCy + leftCy - widthNavigator - offset);\n }\n else {\n $('.cytoscape-navigator-wrapper').css('bottom', 10.5);\n $('.cytoscape-navigator-wrapper').css('right', 0);\n //$('.cytoscape-navigator-wrapper').css('left', widthCy + leftCy - widthNavigator + widthcBioPortalSideBar + offset - widthSideBar);\n }\n $('.cytoscape-navigator-wrapper').css('z-index', 1039);\n\n //Relative is used so that its position depends on the below properties\n $('.cy-panzoom').css('position', 'relative');\n $('.cy-panzoom').css('top', 2);\n $('.cy-panzoom').css('left', widthCy - 57);\n $('.cy-panzoom').css('z-index', 1039);\n //Makes the width of panzoom container to 0\n $('.cy-panzoom').css('width', 200);\n }\n\n getPathwayData() {\n return this.pathwayDetailsView.getPathwayData();\n }\n\n initCyJS() {\n try{\n panzoom(cytoscape, $); // register extension\n } catch(err){\n console.log(err);\n }\n // cxtmenu( cytoscape, $ ); // register extension\n try { \n regCose(cytoscape); // register extension\n } catch(err){\n console.log(err);\n }\n try { \n navigator(cytoscape); // register extension\n } catch(err){\n console.log(err);\n }\n try { \n grid_guide(cytoscape, $); // register extension\n } catch(err){\n console.log(err);\n }\n try { \n undoRedo(cytoscape); // register extension\n } catch(err){\n console.log(err);\n }\n try { \n contextMenus(cytoscape, $); // register extension\n } catch(err){\n console.log(err);\n }\n try { \n nodeResize(cytoscape, $, konva); // register extension\n } catch(err){\n console.log(err);\n }\n try { \n edgeEditing(cytoscape, $); // register extension\n } catch(err){\n console.log(err);\n }\n try { \n viewUtilities(cytoscape, $); // register extension\n } catch(err){\n console.log(err);\n }\n try { \n cyqtip(cytoscape, $); // register extension\n } catch(err){\n console.log(err);\n }\n try { \n edgeHandles(cytoscape, $);\n } catch(err){\n console.log(err);\n }\n\n this.edgeAddingMode = 0;\n // var allEles = SaveLoadUtilities.parseGraph(sampleGraph);\n this.cy = cytoscape({\n container: this.cyDiv,\n boxSelectionEnabled: true,\n autounselectify: false,\n wheelSensitivity: 0.1,\n style: styleSheet,\n // elements: allEles,\n textureOnViewport: false,\n motionBlur: true,\n layout: {name: 'preset'}\n });\n\n \n\n this.undoRedoManager = this.cy.undoRedo();\n // Create Manager Classes\n this.shareDBManager = new ShareDBManager(() => {\n const dbDoc = this.shareDBManager.getDoc();\n });\n this.editor = new EditorActionsManager(this.isCollaborative,\n this.shareDBManager,\n this.cy,\n this.isCbioPortal,\n this.undoRedoManager,\n this.portalAccessor,\n this.props.profiles);\n this.shareDBManager.setEditor(this.editor);\n if(this.isCollaborative){\n this.shareDBManager.initShareDB();\n }\n //@ts-ignore\n window.editorActionsManager = this.editor;\n\n\n this.qtipManager = new QtipManager(this.cy, this.editor);\n \n this.cxtMenuManager = new ContextMenuManager(this.cy, \n this.editor,\n this.props.handleOpen, \n this.undoRedoManager, \n this.props.isCollaborative);\n \n this.dragDropNodeAddManager = new DragDropNodeAddPlugin(this.editor, this.cy, this.props.pathwayHandler);\n\n // Initialize panzoom\n this.cy.panzoom(panzoomOpts);\n\n // Node Add initialization\n this.cy.nodeadd(\n {\n // Once the explanationText is cast to uppercase they will be node types\n components:\n [\n {\n container: $('#simpleNodeDiv'),\n nodeType: 'Gene',\n icon: geneImg\n },\n {\n container: $('#familyNodeDiv'),\n nodeType: 'Family',\n icon: familyImg\n },\n {\n container: $('#complexNodeDiv'),\n nodeType: 'Complex',\n icon: complexImg\n },\n {\n container: $('#compartmentNodeDiv'),\n nodeType: 'Compartment',\n icon: compartmentImg\n },\n {\n container: $('#processNodeDiv'),\n nodeType: 'Process',\n icon: processImg\n }\n ]\n\n });\n const self = this;\n const edgeHandleDefaults ={\n preview: true, // whether to show added edges preview before releasing selection\n stackOrder: 4, // Controls stack order of edgehandles canvas element by setting it's z-index\n handleSize: 10, // the size of the edge handle put on nodes\n handleColor: '#1abc9c', // the colour of the handle and the line drawn from it\n handleLineType: 'ghost', // can be 'ghost' for real edge, 'straight' for a straight line, or 'draw' for a draw-as-you-go line\n handleLineWidth: 1, // width of handle line in pixels\n handleNodes: 'node', // selector/filter function for whether edges can be made from a given node\n hoverDelay: 1, // time spend over a target node before it is considered a target selection\n cxt: false, // whether cxt events trigger edgehandles (useful on touch)\n enabled: false, // whether to start the extension in the enabled state\n toggleOffOnLeave: true, // whether an edge is cancelled by leaving a node (true), or whether you need to go over again to cancel (false; allows multiple edges in one pass)\n edgeType: function( sourceNode, targetNode ) {\n // can return 'flat' for flat edges between nodes or 'node' for intermediate node between them\n // returning null/undefined means an edge can't be added between the two nodes\n return 'flat';\n },\n handlePosition: function( node ){\n return 'middle top'; // sets the position of the handle in the format of \"X-AXIS Y-AXIS\" such as \"left top\", \"middle top\"\n },\n loopAllowed: function( node ) {\n // for the specified node, return whether edges from itself to itself are allowed\n return false;\n },\n nodeLoopOffset: -50, // offset for edgeType: 'node' loops\n nodeParams: function( sourceNode, targetNode ) {\n // for edges between the specified source and target\n // return element object to be passed to cy.add() for intermediary node\n return {};\n },\n edgeParams: function( sourceNode, targetNode, i ) {\n // for edges between the specified source and target\n // return element object to be passed to cy.add() for edge\n // NB: i indicates edge index in case of edgeType: 'node'\n return {};\n },\n start: function( sourceNode )\n {\n // fired when edgehandles interaction starts (drag on handle)\n var type = self.getGlobalEdgeType();\n //self.cy.edgehandles('option', 'ghostEdgeType', type);\n },\n complete: function( sourceNode, targetNodes, addedEntities )\n {\n // // Remove recently added edge !\n // // FBI takes this case from now on :O\n // // We will take care of addition in our manager :)\n self.cy.remove(addedEntities);\n self.editor.addEdge({\n source: sourceNode.id(),\n target: targetNodes[0].id(),\n // @ts-ignore\n type: self.getGlobalEdgeType(window.edgeAddingMode),\n pubmedIDs: [],\n name: \"\"\n });\n },\n stop: function( sourceNode )\n {\n // fired when edgehandles interaction is stopped (either complete with added edges or incomplete)\n //TODO refactor this, so terrible for now\n //$('.edge-palette a').blur().removeClass('active');\n self.edgeAddingMode = -1;\n self.eh.disable();\n self.eh.hide();\n self.props.setActiveEdge(-1);\n },\n };\n //Edge Handles initialization\n this.eh = this.cy.edgehandles(edgeHandleDefaults);\n this.eh.disable();\n this.props.editorHandler(this.editor, this.eh, this.undoRedoManager);\n\n if(!this.isCbioPortal)\n this.cy.nodeResize({\n padding: 5, // spacing between node and grapples/rectangle\n undoable: true, // and if cy.undoRedo exists\n\n grappleSize: 8, // size of square dots\n grappleColor: \"#ffc90e\", // color of grapples\n inactiveGrappleStroke: \"inside 1px blue\",\n boundingRectangle: true, // enable/disable bounding rectangle\n boundingRectangleLineDash: [4, 8], // line dash of bounding rectangle\n boundingRectangleLineColor: \"ffc90e\",\n boundingRectangleLineWidth: 1.5,\n zIndex: 999,\n\n moveSelectedNodesOnKeyEvents: function () {\n return true;\n },\n\n minWidth: function (node) {\n var data = node.data(\"resizeMinWidth\");\n return data ? data : 15;\n }, // a function returns min width of node\n minHeight: function (node) {\n var data = node.data(\"resizeMinHeight\");\n return data ? data : 15;\n }, // a function returns min height of node\n\n // Getters for some style properties the defaults returns ele.css('property-name')\n // you are encouraged to override these getters\n getCompoundMinWidth: function (node) {\n return node.style('min-width');\n },\n getCompoundMinHeight: function (node) {\n return node.style('min-height');\n },\n getCompoundMinWidthBiasRight: function (node) {\n return node.style('min-width-bias-right');\n },\n getCompoundMinWidthBiasLeft: function (node) {\n return node.style('min-width-bias-left');\n },\n getCompoundMinHeightBiasTop: function (node) {\n return node.style('min-height-bias-top');\n },\n getCompoundMinHeightBiasBottom: function (node) {\n return node.style('min-height-bias-bottom');\n },\n\n\n isFixedAspectRatioResizeMode: function (node) {\n return node.is(\".fixedAspectRatioResizeMode\")\n },// with only 4 active grapples (at corners)\n isNoResizeMode: function (node) {\n return undefined;\n }, // no active grapples\n\n // These optional function will be executed to set the width/height of a node in this extension\n // Using node.css() is not a recommended way (http://js.cytoscape.org/#eles.style) to do this. Therefore, overriding these defaults\n // so that a data field or something like that will be used to set node dimentions instead of directly calling node.css()\n // is highly recommended (Of course this will require a proper setting in the stylesheet).\n setWidth: function (node, width) {\n node.style('width', width);\n },\n setHeight: function (node, height) {\n node.style('height', height);\n },\n setCompoundMinWidth: function (node, minWidth) {\n node.style('min-width', minWidth);\n },\n setCompoundMinHeight: function (node, minHeight) {\n node.style('min-height', minHeight);\n },\n setCompoundMinWidthBiasLeft: function (node, minWidthBiasLeft) {\n node.style('min-width-bias-left', minWidthBiasLeft);\n },\n setCompoundMinWidthBiasRight: function (node, minHeightBiasRight) {\n node.style('min-width-bias-right', minHeightBiasRight);\n },\n setCompoundMinHeightBiasTop: function (node, minHeightBiasTop) {\n node.style('min-height-bias-top', minHeightBiasTop);\n },\n setCompoundMinHeightBiasBottom: function (node, minHeightBiasBottom) {\n node.style('min-height-bias-bottom', minHeightBiasBottom);\n },\n\n cursors: { // See http://www.w3schools.com/cssref/tryit.asp?filename=trycss_cursor\n // May take any \"cursor\" css property\n default: \"default\", // to be set after resizing finished or mouseleave\n inactive: \"not-allowed\",\n nw: \"nw-resize\",\n n: \"n-resize\",\n ne: \"ne-resize\",\n e: \"e-resize\",\n se: \"se-resize\",\n s: \"s-resize\",\n sw: \"sw-resize\",\n w: \"w-resize\"\n },\n resizeToContentCueImage: resizeCue,\n resizeToContentFunction: this.editor.resizeNodesToContent.bind(this.editor),\n\n });\n\n //Navigator for cytoscape js\n var navDefaults = {\n container: '.cytoscape-navigator-wrapper' // can be a HTML or jQuery element or jQuery selector\n , viewLiveFramerate: 0 // set false to update graph pan only on drag end; set 0 to do it instantly; set a number (frames per second) to update not more than N times per second\n , thumbnailEventFramerate: 10 // max thumbnail's updates per second triggered by graph updates\n , thumbnailLiveFramerate: false // max thumbnail's updates per second. Set false to disable\n , dblClickDelay: 200 // milliseconds\n , removeCustomContainer: true // destroy the container specified by user on plugin destroy\n , rerenderDelay: 100 // ms to throttle rerender updates to the panzoom for performance\n };\n\n //TODO: AMENDMENT declaration removed\n this.cy.navigator(navDefaults); // get navigator instance, nav\n\n const viewUtilitiesOpts = {\n node: {\n highlighted: {\n 'border-width': 2,\n 'border-color': '#bc1142'\n }, // styles for when nodes are highlighted.\n unhighlighted: {\n 'opacity': function (ele: any) {\n // We return the same opacity because to override the unhibhlighted ele opacity in view-utilities\n return ele.css('opacity');\n }\n }// styles for when nodes are unhighlighted.}\n },\n edge: {\n highlighted: {}, // styles for when edges are highlighted.\n unhighlighted: {\n 'opacity': function (ele: any) {\n // We return the same opacity because to override the unhibhlighted ele opacity in view-utilities\n return ele.css('opacity');\n }\n } // styles for when edges are unhighlighted.\n },\n setVisibilityOnHide: false, // whether to set visibility on hide/show\n setDisplayOnHide: true, // whether to set display on hide/show\n neighbor: () => { // return desired neighbors of tapheld node\n return false;\n },\n neighborSelectTime: 500 //ms, time to taphold to select desired neighbors\n };\n\n this.viewUtilities = this.cy.viewUtilities(viewUtilitiesOpts);\n\n this.placePanzoomAndOverlay();\n }\n\n getGlobalEdgeType()\n {\n var type = \"NONE\";\n // @ts-ignore\n if (window.edgeAddingMode === 1)\n {\n type = 'ACTIVATES';\n }\n // @ts-ignore\n else if (window.edgeAddingMode === 2)\n {\n type = 'INHIBITS';\n }\n // @ts-ignore\n else if (window.edgeAddingMode === 3)\n {\n type = 'INDUCES';\n }\n // @ts-ignore\n else if (window.edgeAddingMode === 4)\n {\n type = 'REPRESSES';\n }\n // @ts-ignore\n else if (window.edgeAddingMode === 5)\n {\n type = 'BINDS';\n }\n return type;\n }\n\n initCyHandlers(){\n var that = this;\n\n var tappedBefore: any;\n var tappedTimeout: number;\n this.cy.on('tap', function (event: any) {\n var tappedNow = event.target;\n if (tappedTimeout !== -1 && tappedBefore !== -1) {\n clearTimeout(tappedTimeout);\n }\n if (tappedBefore === tappedNow) {\n tappedNow.trigger('doubleTap');\n tappedBefore = -1;\n } else {\n // @ts-ignore TODO AMENDMENTsa\n tappedTimeout = setTimeout(function () {\n tappedBefore = -1;\n }, 300);\n\n if(tappedNow && tappedNow.isNode && tappedNow.isNode()){\n $(\".qtip\").remove();\n }\n if(tappedNow && tappedNow.isEdge && tappedNow.isEdge()){\n $(\".qtip\").remove();\n }\n tappedBefore = tappedNow;\n }\n });\n\n this.cy.on('doubleTap', 'node', function (e: any) {\n\n // if cBioPortal ignore\n if(that.props.isCbioPortal) return;\n\n const eventIsDirect = (e.target === this);\n \n if (eventIsDirect) { \n $(\".qtip\").remove();\n that.qtipManager.addQtipToElements(e.target); \n e.target.trigger(\"showqtipevent\");\n }\n });\n \n this.cy.on('doubleTap', 'edge', function (e: any) {\n \n // if cBioPortal ignore\n if(that.props.isCbioPortal) return;\n \n const eventIsDirect = (e.target === this);\n \n if (eventIsDirect) {\n $(\".qtip\").remove();\n that.qtipManager.addQtipToElements(e.target); \n e.target.trigger(\"showqtipevent\");\n }\n });\n\n this.cy.on('select', 'node', (e: any) => {\n this.editor.pushSelectedNodeStack(e.target);\n });\n\n // this.cy.on('select', 'edge', function( e )\n // {\n // var eventIsDirect = (e.target === this);\n // $(\".qtip\").remove();\n //\n // if( eventIsDirect ) {\n // that.qtipManager.addQtipToElements(e.target);\n // }\n // });\n\n this.cy.on('unselect', 'node', (e: any) => {\n this.editor.removeElementFromSelectedNodeStack(e.target);\n });\n\n this.cy.on('free', 'node', (e: any) => {\n //Collect all nodes with descendants in case of compounds\n var selectedNodes = this.cy.nodes(':selected');\n var nodes = e.target;\n nodes = nodes.union(nodes.descendants());\n nodes = nodes.union(selectedNodes);\n this.editor.moveElements(nodes);\n });\n\n this.cy.on('layoutstop', () => {\n this.editor.postLayout();\n });\n\n // //TODO fix this when cytoscape is updated !!!\n // //Due to cytoscape.js bug, only workaround that worked :(\n // this.cy.on('add', 'node', function(event)\n // {\n // // event.target.select();\n // this.cy.style().update();\n // this.cy.forceRender();\n // });\n\n this.cy.on(\"noderesize.resizeend\", (_e: any, _type: any, node: any) => {\n \n //Updates 'data' properties from 'style'\n node.data('w', node.width());\n node.data('h', node.height());\n //Used for collaborative mode\n this.editor.resizeElements(node);\n });\n\n this.cy.on('select', 'edge', (e: any) => {\n this.lastSelectedEdge = e.target;\n });\n\n this.cy.on('bendPointMovement', () => {\n this.editor.updateEdgeBendPoints(this.lastSelectedEdge);\n });\n\n this.cy.on('noderesize.moveend', () => {\n this.editor.changeNodePositionsByArrows(this.cy.nodes(\":selected\"));\n });\n\n\n }\n\n initKeyboardHandlers() {\n if (!this.isCollaborative && !this.isCbioPortal) {\n $(document).keydown((e: any) => {\n if (e.which === 89 && (e.ctrlKey || e.metaKey)) {\n this.undoRedoManager.redo();\n }\n else if (e.which === 90 && (e.ctrlKey || e.metaKey)) {\n this.undoRedoManager.undo();\n }\n });\n }\n else {\n $('a[role=\"redo\"]').hide();\n $('a[role=\"undo\"]').hide();\n }\n $(document).keydown((e: any) => {\n if (e.which === 65 && (e.ctrlKey || e.metaKey)) {\n // @ts-ignore\n var tn = document.activeElement.tagName;\n if (tn != \"TEXTAREA\" && tn != \"INPUT\") {\n e.preventDefault();\n this.cy.elements().select();\n }\n }\n else if (e.which === 8 || e.which === 46) {\n // @ts-ignore\n var tn = document.activeElement.tagName;\n if (tn != \"TEXTAREA\" && tn != \"INPUT\") {\n var selectedElements = this.cy.$(':selected');\n this.editor.removeElement(selectedElements);\n }\n }\n });\n }\n\n initUndoRedoFunctionality() {\n if (this.isCollaborative || this.isCbioPortal) {\n $('[role=\"undo\"]').hide();\n $('[role=\"redo\"]').hide();\n /* TODO: AMENDMENT\n document.getElementById(\"localOrCollaborativeToolbar\").style.display = \"none\";\n */\n }\n }\n\n\n initCBioPortalFunctionalities() {\n if (this.isCbioPortal) {\n const contextMenu = this.cy.contextMenus('get');\n\n contextMenu.destroy();\n }\n }\n\n\n}","import React from 'react';\nimport { MenuItem, Nav, Navbar, NavDropdown } from 'react-bootstrap';\nimport pathways from \"../data/pathways.json\";\nimport ConfirmationModal from '../modals/ConfirmationModal';\nimport PathwayActions from '../utils/PathwayActions';\nimport { EModalType } from './react-pathway-mapper';\n\ninterface IMenubarProps{\n pathwayActions: PathwayActions;\n handleOpen: (modalId: EModalType) => void;\n setActiveEdge: Function;\n}\n\n\nexport default class Menubar extends React.Component{\n\n\n constructor(props: IMenubarProps){\n super(props);\n }\n\n render(){\n const nodeTypes = [\"Gene\", \"Family\", \"Complex\", \"Compartment\", \"Process\"];\n const edgeTypes = [\"Activates\", \"Inhibits\", \"Induces\", \"Represses\", \"Binds\"];\n\n const pathwayDropdownData: {[pwHead: string]: string[]} = {};\n for(const pwName of Object.keys(pathways)){\n // If a pathway name ain't include 'pathway' word then it is under pancanatlas.\n const isPancanatlas = !pwName.includes('pathway');\n const dashPos = pwName.indexOf('-');\n const pwHead = (isPancanatlas) ? 'PanCanAtlas' : pwName.substring(0, dashPos);\n if(pwHead in pathwayDropdownData){\n pathwayDropdownData[pwHead].push(pwName);\n } else {\n pathwayDropdownData[pwHead] = [pwName];\n }\n }\n\n return(\n \n \n \n \n );\n }\n}","import { action, makeObservable, observable } from \"mobx\";\nimport { observer } from \"mobx-react\";\nimport React from \"react\";\nimport { Button, Panel } from \"react-bootstrap\";\nimport \"../css/supp.css\";\n// @ts-ignore\nimport acImg from \"../images/edges/activates.svg\";\n// @ts-ignore\nimport bindImg from \"../images/edges/binds.svg\";\n// @ts-ignore\nimport indImg from \"../images/edges/induces.svg\";\n// @ts-ignore\nimport inhImg from \"../images/edges/inhibits.svg\";\n// @ts-ignore\nimport repImg from \"../images/edges/represses.svg\";\nimport PathwayActions from \"../utils/PathwayActions\";\nimport { EModalType } from \"./react-pathway-mapper\";\n\n\n\ninterface ISideBarProps{\n pathwayActions: PathwayActions;\n setActiveEdgeHandler: Function;\n handleOpen: Function;\n}\n\n@observer\nexport default class Sidebar extends React.Component{\n\n @observable\n activeEdge: number = -1;\n\n constructor(props: ISideBarProps){\n super(props);\n makeObservable(this);\n props.setActiveEdgeHandler(this.setActiveEdge);\n }\n\n addEdge(edgeIndex: number){\n if(edgeIndex === this.activeEdge){\n this.setActiveEdge(-1);\n this.props.pathwayActions.addEdge(-1);\n return;\n }\n this.setActiveEdge(edgeIndex);\n this.props.pathwayActions.addEdge(edgeIndex);\n }\n\n @action.bound\n setActiveEdge(edgeIndex: number){\n this.activeEdge = edgeIndex;\n }\n\n render(){\n\n const edgeTypes = [\"Activates\", \"Inhibits\", \"Induces\", \"Represses\", \"Binds\"];\n\n const edgeImgs = [acImg, inhImg, indImg, repImg, bindImg];\n\n const nodeIds = [\"simpleNodeDiv\", \"familyNodeDiv\", \"complexNodeDiv\", \"compartmentNodeDiv\", \"processNodeDiv\"];\n\n return(\n
\n \n \n Network\n \n \n \n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n\n \n \n Node Palette\n \n \n \n {\n nodeIds.map((id) => {\n return (\n
\n
);\n })\n }\n
\n
\n\n \n \n Interaction Palette\n \n \n
\n {\n edgeTypes.map((edgeType: string, i: number) => {\n return ();\n })\n }\n
\n
\n
\n
\n );\n }\n}","import autobind from \"autobind-decorator\";\nimport { action, computed, makeObservable, observable } from \"mobx\";\nimport { observer } from \"mobx-react\";\nimport { IGeneticAlterationRuleSetParams } from 'oncoprintjs';\nimport React from 'react';\nimport { Col, Row } from \"react-bootstrap\";\nimport { toast, ToastContainer } from 'react-toastify';\nimport ReactTooltip from 'react-tooltip';\nimport \"../css/pmv1.css\";\nimport \"../css/pmv2.css\";\nimport '../css/qtip.css';\nimport pathways from \"../data/pathways.json\";\nimport EditorActionsManager from \"../managers/EditorActionsManager\";\nimport FileOperationsManager from '../managers/FileOperationsManager';\nimport GridOptionsManager from '../managers/GridOptionsManager';\nimport ViewOperationsManager from '../managers/ViewOperationsManager';\nimport AboutModal from '../modals/AboutModal';\nimport CBioHelpModal from '../modals/CBioHelpModal';\nimport ConfirmationModal from '../modals/ConfirmationModal';\nimport GridSettings from '../modals/GridSettings';\nimport LayoutProperties from '../modals/LayoutProperties';\nimport PathwayDetailsModal from '../modals/PathwayDetailsModal';\nimport ProfilesModal from '../modals/ProfilesModal';\nimport QuickHelpModal from '../modals/QuickHelpModal';\nimport StudyModal from '../modals/StudyModal';\nimport Ranking from \"../ui/Ranking\";\nimport Toolbar from \"../ui/Toolbar\";\nimport CBioPortalAccessor from '../utils/CBioPortalAccessor';\nimport PathwayActions from '../utils/PathwayActions';\nimport SaveLoadUtility from '../utils/SaveLoadUtility';\nimport Buttonbar from \"./Buttonbar\";\nimport CytoscapeArea from \"./CytoscapeArea\";\nimport Menubar from './Menubar';\nimport Sidebar from './Sidebar';\n\n\n\nconst maxHeapFn = require('@datastructures-js/max-heap');\nlet maxHeap = maxHeapFn();\n\n\ninterface IPathwayMapperProps{\n isCBioPortal: boolean;\n genes: any[];\n isCollaborative?: boolean;\n cBioAlterationData?: ICBioData[];\n sampleIconData?: ISampleIconData,\n pathwayName? : string;\n alterationData?: IAlterationData;\n onAddGenes?: (selectedGenes: string[]) => void;\n changePathwayHandler?: (pathwayGenes: string[]) => void;\n addGenomicDataHandler?: (addGenomicData: (alterationData: ICBioData[]) => void) => void;\n tableComponent?: (data: IPathwayMapperTable[], selectedPathway: string, onPathwaySelect: (pathway: string) => void) => JSX.Element;\n validGenes?: any;\n toast: any;\n showMessage: (message: string) => void;\n //PatientView variable\n patientView ?: boolean;\n messageBanner? : () => JSX.Element;\n}\n\nexport interface ICBioData{\n altered: number;\n gene: string;\n percentAltered: string​;\n sequenced: number;\n geneticTrackData?: any[]; // TODO GeneticTrackDatum[]: this is currently a private type within cbioportal repo\n geneticTrackRuleSetParams?: IGeneticAlterationRuleSetParams;\n}\n\nexport interface ISampleIconData {\n sampleIndex: { [s: string]: number },\n sampleColors: { [s: string]: string }\n}\n\nexport enum EModalType{\n STUDY,\n CONFIRMATION,\n PROFILES,\n ABOUT,\n PW_DETAILS,\n GRID,\n HELP,\n LAYOUT,\n CHELP\n}\n\nexport interface IPathwayData{\n title: string;\n description: string;\n nodes: any[];\n edges: any[];\n}\n\nexport interface IAlterationData{\n [key: string]: {[key: string]: number};\n}\n\nexport interface IProfileMetaData{\n profileId: string;\n studyId?: string;\n enabled: boolean;\n}\n\nexport interface IDataTypeMetaData{\n enabled: boolean;\n checked: boolean;\n profile: string;\n}\n\nexport interface IPathwayMapperTable{\n name: string;\n score: number;\n genes: string[];\n}\n\n@observer\nexport default class PathwayMapper extends React.Component {\n static readonly CBIO_PROFILE_NAME = \"cBioPortal_data\";\n\n readonly NUMBER_OF_PATHWAYS_TO_SHOW = 10;\n \n @observable\n selectedPathway: string;\n\n fileManager: FileOperationsManager;\n\n @observable\n editor: EditorActionsManager;\n\n pathwayActions: PathwayActions;\n\n @observable\n isModalShown: boolean[];\n\n portalAcessor: CBioPortalAccessor;\n\n @observable\n alterationData: IAlterationData;\n\n @observable\n patientData: any [][] = [];\n\n @observable\n pathwayGeneMap: {[key: string]: {[key: string]: string}} = {};\n\n bestPathwaysAlgos: any[][] = [];\n\n @observable\n oldName = \"\";\n \n @observable\n profiles: IProfileMetaData[] = [];\n\n setActiveEdge: (edgeId: number) => void;\n viewOperationsManager: ViewOperationsManager;\n gridOptionsManager: GridOptionsManager;\n\n\n\n constructor(props: IPathwayMapperProps){\n super(props);\n makeObservable(this);\n \n this.fileManager = new FileOperationsManager();\n this.pathwayActions = new PathwayActions(this.pathwayHandler, this.profiles, this.fileManager, \n this.handleOpen, this.props.isCBioPortal, this.props.isCollaborative);\n this.selectedPathway = \"\";\n if(this.props.pathwayName){\n this.pathwayActions.changePathway(this.props.pathwayName);\n }\n this.isModalShown = [false, false, false, false, false, false, false, false, false];\n // TODO: Change below\n this.alterationData = {}; //{\"study1_gistic\" : {\"CDK4\": 11, \"MDM2\": 19, \"TP53\": 29}, \"study2_gistic\" : {\"MDM2\": 99, \"TP53\": 98}, \"study3_mutations\": {\"MDM2\": 1, \"TP53\": 2}};\n this.extractAllGenes();\n if(this.props.isCBioPortal){\n //this.overlayPortalData();\n \n // If cBioPortal mode is 'on' it is very likely to have cBioALterationData\n // but to be on the safe side below assertion is made.\n if(this.props.cBioAlterationData ){\n if( this.props.patientView){\n //PatientView PathwayMapper has a different functionality\n //Alteration types are overlayed instead of alterationpercentage\n this.calculatePatientData(this.props.cBioAlterationData);\n this.addSampleIconData(this.props.sampleIconData);\n }\n else{\n this.calculateAlterationData(this.props.cBioAlterationData);\n\n }\n }\n\n if(this.props.addGenomicDataHandler){\n this.props.addGenomicDataHandler(this.addGenomicData);\n }\n\n this.profiles.push({profileId: PathwayMapper.CBIO_PROFILE_NAME, enabled: true});\n this.getBestPathway(0);\n this.getBestPathway(1);\n this.getBestPathway(2);\n this.getBestPathway(3);\n }\n /*\n const profile1 = {profileId: \"study1_gistic\", studyId: \"study1\", enabled: true};\n const profile2 = {profileId: \"study2_gistic\", studyId: \"study2\", enabled: true};\n const profile3 = {profileId: \"study3_mutations\", studyId: \"study3\", enabled: true};\n const profile4 = {profileId: \"study3_mutations\", studyId: \"study3\", enabled: true};\n const profile5 = {profileId: \"study3_mutations\", studyId: \"study3\", enabled: true};\n const profile6 = {profileId: \"study3_mutations\", studyId: \"study3\", enabled: true};\n this.profiles.push(profile1, profile2, profile3, profile4, profile5, profile6);\n */\n\n }\n\n @action\n setSelectedPathway(pathway: string) {\n this.selectedPathway = pathway;\n }\n\n @action\n setEditor(editor: EditorActionsManager) {\n this.editor = editor;\n }\n\n @action\n addProfile(profile: IProfileMetaData) {\n this.profiles.push(profile);\n }\n\n @action\n toggleProfileEnabled(index: number) {\n this.profiles[index].enabled = !this.profiles[index].enabled;\n }\n\n calculateAlterationData(cBioAlterationData: ICBioData[]){\n // Transform cBioDataAlteration into AlterationData\n this.alterationData[PathwayMapper.CBIO_PROFILE_NAME] = {};\n cBioAlterationData.forEach((geneAltData: ICBioData) => {\n const perc = (geneAltData.altered / geneAltData.sequenced) * 100;\n \n // NaN value is replaced with -101 since NaN value leads to some runtime exceptions (such as with toFixed() function),\n // hence it is represented as -101. It will be recognized in the genomic data svg creation to show N/P instead of\n // a percentage. -101 is chosen because this percentage is impossible to get.\n this.alterationData[PathwayMapper.CBIO_PROFILE_NAME][geneAltData.gene] = ((Object.is(perc, NaN) ? -101 : perc));\n \n\n });\n }\n \n calculatePatientData(cBioAlterationData: ICBioData[]){\n // Transform cBioDataAlteration into Patient Data every alteration is accepted 100% altered\n\n this.alterationData[PathwayMapper.CBIO_PROFILE_NAME] = {};\n \n const allTypes = cBioAlterationData.map(x => x.gene); \n //const allTypes = cBioAlterationData.map(x => x.percentAltered);\n const uniqueTypes = allTypes.filter((x, i, a) => a.indexOf(x) == i)\n //This is a flag for GenomicDataOverlayManager showPatientData\n this.patientData[\"PatientView\"] = 1;\n\n uniqueTypes.forEach(x => {\n this.patientData[x]= {};\n });\n\n cBioAlterationData.forEach((geneAltData: ICBioData) => {\n const perc = (geneAltData.altered / geneAltData.sequenced) * 100;\n\n this.alterationData[PathwayMapper.CBIO_PROFILE_NAME][geneAltData.gene] = ((Object.is(perc, NaN) ? -101 : perc));\n\n this.patientData[geneAltData.gene][geneAltData.percentAltered] = ((Object.is(perc, NaN) ? -101 : perc));\n this.patientData[geneAltData.gene][\"geneticTrackData\"] = geneAltData.geneticTrackData;\n this.patientData[geneAltData.gene][\"geneticTrackRuleSetParams\"] = geneAltData.geneticTrackRuleSetParams;\n });\n\n }\n\n addSampleIconData(sampleIconData: any) {\n if (sampleIconData) {\n this.patientData[\"sampleColors\"] = sampleIconData.sampleColors;\n this.patientData[\"sampleIndex\"] = sampleIconData.sampleIndex;\n }\n }\n\n getGeneStudyMap(studyGeneMap: any){\n \n const genomicDataMap: any = {};\n for (const cancerStudy of Object.keys(studyGeneMap)) {\n\n const cancerData = studyGeneMap[cancerStudy];\n\n for (const geneSymbol of Object.keys(cancerData)) {\n if (genomicDataMap[geneSymbol] === undefined) genomicDataMap[geneSymbol] = {};\n\n genomicDataMap[geneSymbol][cancerStudy] = studyGeneMap[cancerStudy][geneSymbol].toFixed(2);\n }\n }\n return genomicDataMap;\n }\n\n getAlterationAveragePerGene(genomicDataMap: any){\n\n const geneAlterationMap: any = {};\n for(const gene of Object.keys(genomicDataMap)){\n let sum = 0, count = 0;\n\n for(const alteration of Object.values(genomicDataMap[gene])){\n sum += parseFloat(alteration as string);\n count++;\n }\n if(count === 0){\n geneAlterationMap[gene] = 0;\n } else {\n geneAlterationMap[gene] = sum / count;\n }\n }\n\n return geneAlterationMap;\n }\n\n\n /**\n * \n * @param rankingMode: number => 0 = Count, 1 = Percentage, 2 = Count with Alteration, 3 = Percentage with Alteration\n * \n */\n getBestPathway(rankingMode: number) {\n \n const genomicDataMap = this.getGeneStudyMap(this.alterationData);\n const alterationPerGene = this.getAlterationAveragePerGene(genomicDataMap);\n maxHeap = maxHeapFn();\n\n const matchedGenesMap: any = {};\n const bestPathways: any[] = [];\n for(const pathwayName in this.pathwayGeneMap){\n if(this.pathwayGeneMap.hasOwnProperty(pathwayName)){\n \n const genesMatching = [];\n // Calculate sum of all alterations\n let sumOfAlterations = 0;\n for(const gene of this.props.genes){\n \n if(this.pathwayGeneMap[pathwayName].hasOwnProperty(gene.hugoGeneSymbol) \n && this.pathwayGeneMap[pathwayName][gene.hugoGeneSymbol] === \"GENE\"){\n genesMatching.push(gene.hugoGeneSymbol);\n sumOfAlterations += alterationPerGene[gene.hugoGeneSymbol];\n }\n }\n matchedGenesMap[pathwayName] = genesMatching;\n let geneCount = 0;\n // Count number of genes *not processess* in a pathway\n for(const geneType of Object.values(this.pathwayGeneMap[pathwayName])){\n if(geneType === \"GENE\"){\n geneCount++;\n }\n }\n\n if(rankingMode === 0){\n maxHeap.insert(genesMatching.length, {pathwayName: pathwayName});\n } else if(rankingMode === 1){\n maxHeap.insert(genesMatching.length / geneCount * 100, {pathwayName: pathwayName}); \n } else if(rankingMode === 2){\n maxHeap.insert(sumOfAlterations, {pathwayName: pathwayName}); \n } else if(rankingMode === 3){\n maxHeap.insert(genesMatching.length * sumOfAlterations / geneCount, {pathwayName: pathwayName});\n }\n\n }\n }\n while(maxHeap.size() > 0){\n const top = maxHeap.extractMax();\n const pathwayName = top.getValue().pathwayName;\n bestPathways.push({score: top.getKey(), genesMatched: matchedGenesMap[pathwayName], pathwayName: pathwayName});\n }\n if(this.bestPathwaysAlgos.length === 0) // First pathway of the first method is shown as the default pathway.\n this.setSelectedPathway(bestPathways[0].pathwayName);\n this.bestPathwaysAlgos.push(bestPathways);\n }\n \n // This method extracts all genes of a pathway and adds it to the pathwayGeneMap\n // so that it can be used by percentage calculation and genomic data \n // Note: Pathway title\n @autobind\n includePathway(pathwayData?: IPathwayData, pathwayName?: string){\n const genes = pathwayData.nodes;\n const geneHash: any = {};\n\n for(const gene of genes){\n\n if(gene.data.type === \"GENE\")\n geneHash[gene.data.name] = gene.data.type;\n }\n\n this.pathwayGeneMap[pathwayData.title] = geneHash;\n\n }\n\n extractAllGenes(){\n for(const pathwayName in pathways){\n if(pathways.hasOwnProperty(pathwayName)){\n\n const pathwayData: IPathwayData = SaveLoadUtility.parseGraph(pathways[pathwayName], true);\n this.includePathway(pathwayData);\n }\n }\n \n }\n\n\n loadRedirectedPortalData(){\n\n if(!this.props.alterationData){ // If size 0 that means it is not redirected.\n return;\n }\n \n const redirectedProfiles = Object.keys(this.props.alterationData).map((data: string) : IProfileMetaData => ({profileId: data, enabled: true}));\n redirectedProfiles.forEach((redirectedProfile) => {\n this.addProfile(redirectedProfile);\n });\n this.editor.addPortalGenomicData(this.props.alterationData, this.editor.getEmptyGroupID());\n }\n\n @computed get profileEnabledMap(){\n const profileEnabledMap = {};\n this.profiles.forEach((profile: IProfileMetaData) => {profileEnabledMap[profile.profileId] = profile.enabled;});\n return profileEnabledMap;\n }\n\n doesProfileExist(profileId: string){\n\n let exists = false;\n this.profiles.forEach((profile: IProfileMetaData) => {\n if(profile.profileId === profileId){\n exists = true;\n }\n });\n\n return exists;\n }\n\n @autobind\n loadFromCBio(dataTypes: {[dataType: string]: IDataTypeMetaData}, selectedStudyData: any[]){\n if(!this.pathwayActions.doesCyHaveElements()){\n toast.warn(\"Your pathway is empty\");\n return;\n }\n\n for (const dataType of Object.keys(dataTypes))\n {\n if(!dataTypes[dataType].checked) continue;\n if(this.doesProfileExist(dataTypes[dataType].profile)){\n toast.warn(dataTypes[dataType].profile + \" already exists\");\n continue;\n }\n\n\n this.addProfile({studyId: selectedStudyData[0], profileId: dataTypes[dataType].profile, enabled: true});\n this.portalAcessor.getProfileData({\n caseSetId: selectedStudyData[0],\n geneticProfileId: dataTypes[dataType].profile,\n genes: this.editor.cy.json().elements.nodes.filter((node) => (node.data.type === \"GENE\")).map((node) => (node.data.name))\n },\n (data: any) =>{\n this.editor.addPortalGenomicData(data, this.editor.getEmptyGroupID());\n });\n }\n }\n\n @autobind\n setActiveEdgeHandler(setActiveEdge: (edgeId: number) => void){\n this.setActiveEdge = setActiveEdge;\n }\n\n\n @autobind\n addGenomicData(cBioAlterationData: ICBioData[]){\n\n this.calculateAlterationData(cBioAlterationData);\n this.editor.removeGenomicData();\n this.editor.addPortalGenomicData(this.alterationData, this.editor.getEmptyGroupID());\n }\n\n render() {\n const isCBioPortal = this.props.isCBioPortal; \n\n const cytoComp = ;\n\n return (\n\n
\n
\n {!isCBioPortal && \n \n
\n \n
\n
\n \n
\n
\n }\n { isCBioPortal &&\n \n \n \n \n {this.props.messageBanner ?\n {this.props.messageBanner()}\n :\n \n }\n \n {this.selectedPathway}\n \n \n }\n \n
\n {\n (!isCBioPortal && \n
\n \n
)\n }\n\n { isCBioPortal ?\n (\n {cytoComp}\n
Powered by PathwayMapper
\n )\n : (cytoComp)\n }\n {\n (isCBioPortal &&\n \n \n )\n }\n
\n\n {/* isCBioPortal &&\n \n Powered by PathwayMapper\n */\n }\n\n { (
\n\n {\n (
\n \n \n \n \n \n \n \n \n
)\n }\n { !this.props.isCBioPortal &&\n \n \n \n \n }\n \n\n {this.pathwayActions.setUploaders(ref, false);}}\n style={{display: 'none'}}\n onChange={(e) => {this.pathwayActions.onChangeFile(e, false);}}\n />\n {this.pathwayActions.setUploaders(ref, true);}}\n style={{display: 'none'}}\n onChange={(e) => {this.pathwayActions.onChangeFile(e, true);}}\n />\n {this.pathwayActions.setOverlayUploader(ref);}}\n style={{display: 'none'}}\n onChange={(e) => {this.pathwayActions.overlayFromText(e.target.files[0]);}}\n />\n
)\n }\n
\n
\n );\n }\n\n componentDidMount(){\n if(!this.props.isCBioPortal){\n $(\".container\").css('width', \"auto\");\n $(\".container\").css('paddingLeft', 0);\n $(\".container\").css('marginLeft', 5);\n } else {\n this.pathwayActions.emphasiseQueryGenes(this.props.genes.map((gene: any) => gene.hugoGeneSymbol));\n }\n }\n\n componentDidUpdate(){\n if(this.props.isCBioPortal){\n this.pathwayActions.emphasiseQueryGenes(this.props.genes.map((gene: any) => gene.hugoGeneSymbol));\n }\n }\n\n @action.bound\n handleOpen(modalId: EModalType){\n this.isModalShown[modalId] = true;\n }\n\n\n @action.bound\n handleClose(modalId: EModalType){\n this.isModalShown[modalId] = false;\n }\n\n @autobind\n editorHandler(editor, eh, undoRedoManager){\n\n this.setEditor(editor);\n this.gridOptionsManager = new GridOptionsManager(this.editor.cy);\n this.viewOperationsManager = new ViewOperationsManager(this.editor, this.editor.cy);\n this.pathwayActions.editorHandler(editor, eh, undoRedoManager, this.viewOperationsManager, this.gridOptionsManager);\n \n if(this.props.isCBioPortal){\n if(this.props.patientView){\n this.editor.addPortalGenomicData(this.patientData, this.editor.getEmptyGroupID());\n }\n else{\n this.editor.addPortalGenomicData(this.alterationData, this.editor.getEmptyGroupID());\n }\n } else {\n this.portalAcessor = new CBioPortalAccessor();\n this.loadRedirectedPortalData();\n }\n\n }\n\n @autobind\n pathwayHandler(pathway: string){\n this.setSelectedPathway(pathway);\n if(this.pathwayGeneMap[pathway] && this.props.changePathwayHandler)\n this.props.changePathwayHandler(\n Object.keys(this.pathwayGeneMap[pathway])\n .filter(gene => (!this.alterationData[PathwayMapper.CBIO_PROFILE_NAME].hasOwnProperty(gene)))\n );\n }\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/ui/Buttonbar.d.ts b/dist/ui/Buttonbar.d.ts index c18bd69f..f9afb80c 100644 --- a/dist/ui/Buttonbar.d.ts +++ b/dist/ui/Buttonbar.d.ts @@ -1,7 +1,7 @@ import React from "react"; +import { EGridType } from "../modals/GridSettings"; import PathwayActions from "../utils/PathwayActions"; import { EModalType } from "./react-pathway-mapper"; -import { EGridType } from "../modals/GridSettings"; interface IButtonbarProps { pathwayActions: PathwayActions; handleOpen: (modelId: EModalType) => void; diff --git a/dist/ui/CytoscapeArea.d.ts b/dist/ui/CytoscapeArea.d.ts index b7c43304..84ea407a 100644 --- a/dist/ui/CytoscapeArea.d.ts +++ b/dist/ui/CytoscapeArea.d.ts @@ -1,5 +1,5 @@ import React from 'react'; -import { IProfileMetaData, EModalType } from './react-pathway-mapper'; +import { EModalType, IProfileMetaData } from './react-pathway-mapper'; declare type PathwayMapperType = { isCollaborative: boolean; isCbioPortal: boolean; diff --git a/dist/ui/Ranking.d.ts b/dist/ui/Ranking.d.ts index 8881bd02..e7d9cce8 100644 --- a/dist/ui/Ranking.d.ts +++ b/dist/ui/Ranking.d.ts @@ -9,17 +9,21 @@ interface IRankingProps { } export default class Ranking extends React.Component { bestPathways: any[]; + shownPathways: any[]; dropDownTitle: string; selectedPathway: string; isPercentageMatch: number; isAlterationEnabled: number; + considerOnlyTCGAPanPathways: boolean; isExpanded: boolean; readonly COUNT_PERC_EXPLANATION = "Whether we should favor the number of genes of interest matching the ones in a pathway or the percentage of such genes in that pathway. For instance, suppose genes of interest are A, B, and C, and the pathway contains genes B, C, D, and E. When we consider count, the score is 2 (for the two genes that match). However, when we consider percentage the score will be 50% as 2 of the 4 genes in the pathway are among genes of interest."; readonly ALTERATION_EXPLANATION = "When this is checked, each matching gene will not directly contribute to the score as 1 unit but with the alteration frequency percentage of that gene. For instance, suppose genes of interest are A, B, and C with alteration frequencies of 0.5, 0.2, and 0.3, respectively, and the pathway contains genes B, C, D, and E. When this is option isn't checked, the score will be 2 for match count and 50% for the match percentage. However, when this option is checked, the scores will be 0.2+0.3=0.5 and (0.2+0.3)/4=12.5% for match count and percentage, respectively."; + readonly TCGA_PANCAN_EXPLANATION = "The pathways listed above were retrieved from PathwayMapper. When this option is checked, only the pathways under TCGA > PanCanAtlas will be shown. Uncheck to show all."; constructor(props: IRankingProps); setBestPathwayMethod(i: number): void; onPathwayClick(pathway: string): void; onApplyClick(): void; + toggleConsiderOnlyTCGAPanPathways(): void; componentDidMount(): void; render(): JSX.Element; } diff --git a/dist/ui/Sidebar.d.ts b/dist/ui/Sidebar.d.ts index 3800cc9e..60bcac7b 100644 --- a/dist/ui/Sidebar.d.ts +++ b/dist/ui/Sidebar.d.ts @@ -1,6 +1,6 @@ import React from "react"; -import PathwayActions from "../utils/PathwayActions"; import "../css/supp.css"; +import PathwayActions from "../utils/PathwayActions"; interface ISideBarProps { pathwayActions: PathwayActions; setActiveEdgeHandler: Function; diff --git a/dist/ui/Toolbar.d.ts b/dist/ui/Toolbar.d.ts index 8639f831..4ce6e8f5 100644 --- a/dist/ui/Toolbar.d.ts +++ b/dist/ui/Toolbar.d.ts @@ -1,6 +1,6 @@ import React from 'react'; -import PathwayActions from '../utils/PathwayActions'; import { IAlterationData } from '../ui/react-pathway-mapper'; +import PathwayActions from '../utils/PathwayActions'; interface IToolbarProps { pathwayActions: PathwayActions; selectedPathway: string; diff --git a/dist/ui/react-pathway-mapper.d.ts b/dist/ui/react-pathway-mapper.d.ts index e3c397d4..bbb6725a 100644 --- a/dist/ui/react-pathway-mapper.d.ts +++ b/dist/ui/react-pathway-mapper.d.ts @@ -1,14 +1,14 @@ -import React from 'react'; -import EditorActionsManager from "../managers/EditorActionsManager"; -import FileOperationsManager from '../managers/FileOperationsManager'; -import PathwayActions from '../utils/PathwayActions'; -import CBioPortalAccessor from '../utils/CBioPortalAccessor'; import { IGeneticAlterationRuleSetParams } from 'oncoprintjs'; -import ViewOperationsManager from '../managers/ViewOperationsManager'; -import GridOptionsManager from '../managers/GridOptionsManager'; +import React from 'react'; import "../css/pmv1.css"; import "../css/pmv2.css"; import '../css/qtip.css'; +import EditorActionsManager from "../managers/EditorActionsManager"; +import FileOperationsManager from '../managers/FileOperationsManager'; +import GridOptionsManager from '../managers/GridOptionsManager'; +import ViewOperationsManager from '../managers/ViewOperationsManager'; +import CBioPortalAccessor from '../utils/CBioPortalAccessor'; +import PathwayActions from '../utils/PathwayActions'; interface IPathwayMapperProps { isCBioPortal: boolean; genes: any[]; @@ -105,6 +105,8 @@ export default class PathwayMapper extends React.Component void, profiles: IProfileMetaData[], fileManager: FileOperationsManager, handleOpen: (modalId: EModalType) => void, isCBioPortal: boolean, isCollaborative: boolean); + addProfile(profile: IProfileMetaData): void; + clearProfiles(): void; emphasiseQueryGenes(queryGenes: string[]): void; getSelectedNodes(): any; setLayoutProperties(layoutProperties: ILayoutProperties): void; diff --git a/legacy_code/bin/base.min.css b/legacy_code/bin/base.min.css index f13a03a5..92bd4d7e 100644 --- a/legacy_code/bin/base.min.css +++ b/legacy_code/bin/base.min.css @@ -4,4 +4,4 @@ * Licensed under the MIT license - http://opensource.org/licenses/MIT * * Copyright (c) 2016 Daniel Eden - */.animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.animated.hinge{-webkit-animation-duration:2s;animation-duration:2s}.animated.bounceIn,.animated.bounceOut,.animated.flipOutX,.animated.flipOutY{-webkit-animation-duration:.75s;animation-duration:.75s}@-webkit-keyframes bounce{20%,53%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}@keyframes bounce{20%,53%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}.bounce{-webkit-animation-name:bounce;animation-name:bounce;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes flash{50%,from,to{opacity:1}25%,75%{opacity:0}}@keyframes flash{50%,from,to{opacity:1}25%,75%{opacity:0}}.flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}}@keyframes pulse{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}}.pulse{-webkit-animation-name:pulse;animation-name:pulse}@-webkit-keyframes rubberBand{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}}@keyframes rubberBand{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}}.rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shake{from,to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@keyframes shake{from,to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}.shake{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}.headShake{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-name:headShake;animation-name:headShake}@-webkit-keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}to{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}@keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}to{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}.swing{-webkit-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}}@keyframes tada{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}}.tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{from,to{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}}@keyframes wobble{from,to{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}}.wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes jello{11.1%,from,to{-webkit-transform:none;transform:none}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.39062deg) skewY(.39062deg);transform:skewX(.39062deg) skewY(.39062deg)}88.8%{-webkit-transform:skewX(-.19531deg) skewY(-.19531deg);transform:skewX(-.19531deg) skewY(-.19531deg)}}@keyframes jello{11.1%,from,to{-webkit-transform:none;transform:none}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.39062deg) skewY(.39062deg);transform:skewX(.39062deg) skewY(.39062deg)}88.8%{-webkit-transform:skewX(-.19531deg) skewY(-.19531deg);transform:skewX(-.19531deg) skewY(-.19531deg)}}.jello{-webkit-animation-name:jello;animation-name:jello;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes bounceIn{20%,40%,60%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes bounceIn{20%,40%,60%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.bounceIn{-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceInDown{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInDown{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}.bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInLeft{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}.bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInRight{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}.bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes bounceInUp{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}@keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}.bounceOut{-webkit-animation-name:bounceOut;animation-name:bounceOut}@-webkit-keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}.fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}.fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{from{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDownBig{from{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}.fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{from{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeft{from{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{from{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeftBig{from{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{from{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRight{from{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{from{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRightBig{from{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{from{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUp{from{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}.fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{from{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUpBig{from{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}.fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeOut{from{opacity:1}to{opacity:0}}@keyframes fadeOut{from{opacity:1}to{opacity:0}}.fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes fadeOutDown{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes fadeOutDownBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes fadeOutLeft{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes fadeOutLeftBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes fadeOutRight{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes fadeOutRightBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes fadeOutUp{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes fadeOutUpBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes flip{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.animated.flip{-webkit-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes flipInX{from{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{from{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.flipInX{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInX;animation-name:flipInX}.flipInY,.flipOutX{-webkit-backface-visibility:visible!important}@-webkit-keyframes flipInY{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.flipInY{backface-visibility:visible!important;-webkit-animation-name:flipInY;animation-name:flipInY}@-webkit-keyframes flipOutX{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}@keyframes flipOutX{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}.flipOutX{-webkit-animation-name:flipOutX;animation-name:flipOutX;backface-visibility:visible!important}@-webkit-keyframes flipOutY{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}@keyframes flipOutY{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}.flipOutY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipOutY;animation-name:flipOutY}@-webkit-keyframes lightSpeedIn{from{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}to{-webkit-transform:none;transform:none;opacity:1}}@keyframes lightSpeedIn{from{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}to{-webkit-transform:none;transform:none;opacity:1}}.lightSpeedIn{-webkit-animation-name:lightSpeedIn;animation-name:lightSpeedIn;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOut{from{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}@keyframes lightSpeedOut{from{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.lightSpeedOut{-webkit-animation-name:lightSpeedOut;animation-name:lightSpeedOut;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{from{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateIn{from{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}.rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn}@-webkit-keyframes rotateInDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft}@-webkit-keyframes rotateInDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight}@-webkit-keyframes rotateInUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft}@-webkit-keyframes rotateInUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight}@-webkit-keyframes rotateOut{from{-webkit-transform-origin:center;transform-origin:center;opacity:1}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}@keyframes rotateOut{from{-webkit-transform-origin:center;transform-origin:center;opacity:1}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}.rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut}@-webkit-keyframes rotateOutDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}}@keyframes rotateOutDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}}.rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft}@-webkit-keyframes rotateOutDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight}@-webkit-keyframes rotateOutUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft}@-webkit-keyframes rotateOutUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}@keyframes rotateOutUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}.rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight}@-webkit-keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}@keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}.hinge{-webkit-animation-name:hinge;animation-name:hinge}@-webkit-keyframes rollIn{from{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes rollIn{from{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}to{opacity:1;-webkit-transform:none;transform:none}}.rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}@keyframes rollOut{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}.rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}.zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInDown{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInLeft{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInRight{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInUp{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes zoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}.zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown}@-webkit-keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}@keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}.zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft}@-webkit-keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}@keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}.zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight}@-webkit-keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp}@-webkit-keyframes slideInDown{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInDown{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{from{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInLeft{from{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{from{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInRight{from{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideInUp{from{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInUp{from{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.slideInUp{-webkit-animation-name:slideInUp;animation-name:slideInUp}@-webkit-keyframes slideOutDown{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes slideOutDown{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.slideOutDown{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}@-webkit-keyframes slideOutLeft{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes slideOutLeft{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.slideOutLeft{-webkit-animation-name:slideOutLeft;animation-name:slideOutLeft}@-webkit-keyframes slideOutRight{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes slideOutRight{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.slideOutRight{-webkit-animation-name:slideOutRight;animation-name:slideOutRight}@-webkit-keyframes slideOutUp{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes slideOutUp{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.slideOutUp{-webkit-animation-name:slideOutUp;animation-name:slideOutUp}[data-notify=container][class*=alert-pathwayMapper-] .close{opacity:1;color:#FFF;margin-top:7px;outline:0}[data-notify=container][class*=alert-pathwayMapper-] .close:hover{color:#FFF}[data-notify=container].alert-pathwayMapper-success{background-color:#1abc9c;color:#FFF}[data-notify=container].alert-pathwayMapper-fail{background-color:#ff2644;color:#FFF}.toolbar{margin-bottom:5px;padding:5px;background-color:#eff0f2;border-radius:6px}.toolbar .toolbar-button{margin-left:-1px;margin-right:-1px;border:2px solid #eff0f2;border-radius:6px;display:inline-block;cursor:pointer}.toolbar .toolbar-button:hover{border-color:#1abc9c}.toolbar .toolbar-button-focused{border-color:#1abc9c!important}.toolbar .btn-group{margin-right:2px;margin-left:2px;border:2px solid #2f4154;padding:1px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.toolbar #searchGeneToolbar{float:right;margin-right:0!important;border:none!important}.toolbar .input-group.input-group-unstyled input.form-control{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.toolbar .input-group-unstyled .input-group-addon{border-radius:4px;border:0;background-color:transparent}.toolbar .form-group{margin:0!important}.control-label,.input-group input[type=checkbox]{margin-top:10px}.toolbar img{height:22px;margin-left:2px;margin-right:2px}.gridModal{width:350px!important}.geneSearchDiv input{border-radius:6px;border:2px solid #2b2b2d;box-shadow:none!important;-webkit-box-shadow:none!important;-moz-box-shadow:none!important;width:100%}.geneSearchDiv input:focus{border-color:#1abc9c;outline:0;border-style:solid;box-shadow:none!important;-webkit-box-shadow:none!important;-moz-box-shadow:none!important}body{background-color:#fff}input[type=color]{padding:2px}input[type=color]:hover{cursor:pointer}#colorPickerButton{padding-top:10px}.form-control:focus{border:2px solid #1abc9c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #1abc9c;color:#2f4154}.cy-panzoom{position:absolute}.cytoscape-navigatorView{background:#1abc9c}.cytoscape-navigator-wrapper{position:absolute;border:2px solid #2F4154;border-radius:6px;background:#fff;z-index:100;width:300px;height:200px;bottom:8.5%;right:3.5%;overflow:hidden}.btn:focus{outline:0!important}.pathwayPanel .fileNameContent{color:#2f4154;margin-bottom:10px;padding:5px;cursor:pointer;min-width:100px}.pathwayPanel div[contenteditable=true]:focus{outline:#1abc9c solid 2px;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #1abc9c;background-color:#fff}.pathwayPanel textarea{width:170px;height:50px;margin-bottom:10px;z-index:999999}.mainContentWrapper{display:flex}.sideBarWrapper{min-width:130px;max-width:130px;font-size:12px}.control-label{color:rgba(23,22,22,.78)!important;font-weight:300!important}.buttonContainer,.edgePaletteWrapper,.pnl .pnl-header{text-align:center}.input-group{margin-bottom:5px;width:100%}.input-group .form-control{border-radius:6px!important}.edgePaletteWrapper .list-group{margin-bottom:0!important}.edgePaletteWrapper .list-group .list-group-item{border:none!important}.edgePaletteWrapper .edge-palette .list-group-item.active,.edgePaletteWrapper .edge-palette .list-group-item.active:focus,.edgePaletteWrapper .edge-palette .list-group-item.active:hover{background-color:#1abc9c!important}.edgePaletteWrapper .edge-palette .list-group-item{padding:7px 5px}.edgePaletteWrapper .edge-palette a{margin-bottom:5px;border-radius:6px;font-size:12px}.edgePaletteWrapper .edge-palette a img{width:30px}footer{background-color:#eee;color:#393939;height:100%}.pageContentWrapper{margin-bottom:70px}.navbar-nav>.open>a,.navbar-nav>.open>a:focus,.navbar-nav>.open>a:hover{color:#fff!important;background-color:#1abc9c!important;border-left-color:transparent}.navbar-nav>.open>.dropdown-menu>li>a{color:#fff!important;border-radius:4px!important;font-size:12px!important}.navbar-nav>.open>.dropdown-menu{background-color:#2f4154!important}.navbar-nav>li>.dropdown-menu,.navbar-nav>li>.dropdown-submenu{border-radius:4px!important;border:none}.navbar-nav>.open>.dropdown-menu>li>a:focus,.navbar-nav>.open>.dropdown-menu>li>a:hover{color:#fff;background-color:#1abc9c}.navbar{border-radius:0 0 6px 6px;background-color:#2f4154;border:none!important;margin-bottom:5px!important}.navbar-nav a{transition:all .2s linear}.navbar-nav>li>a{color:#fff!important;font-weight:500!important;font-size:12px}.navbar-nav>li>a:hover{color:#1abc9c!important}.navbar-brand{color:#fff!important;font-size:16px;font-weight:700}.pnl{margin-bottom:10px;border-radius:6px;box-shadow:0 1px 1px rgba(0,0,0,.15),0 -1px 1px rgba(0,0,0,.15)}.pnl .pnl-header{background-color:#1abc9c;border-top-left-radius:6px;border-top-right-radius:6px;padding:8px 5px 5px;color:#fff;font-size:12px;font-weight:900}.pnl .pnl-body{background-color:#eff0f2;padding:4px 2px;border-bottom-left-radius:6px;border-bottom-right-radius:6px}.pnl .pnl-body .buttonContainer>button{border:none!important}.pnl .pnl-body .dragButtonContainer{width:115px;margin-left:auto;margin-right:auto}.customMargins{margin-left:3%!important;margin-right:3%!important}.leftPanelFix{padding-left:0}.hiddenfile{width:0;height:0;overflow:hidden}.buttonContainer{margin-bottom:5px}.buttonContainer button{font-size:12px;width:85%}.cyContainer{border:3px solid #1abc9c;height:780px;border-radius:6px;padding-right:0!important;padding-left:0!important;width:100%;margin-left:10px}#cy{height:100%}.btn:focus{background-color:#fff!important}.html5tooltip-box{background-color:rgba(47,65,84,.92);border-radius:8px} \ No newline at end of file + */.animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.animated.hinge{-webkit-animation-duration:2s;animation-duration:2s}.animated.bounceIn,.animated.bounceOut,.animated.flipOutX,.animated.flipOutY{-webkit-animation-duration:.75s;animation-duration:.75s}@-webkit-keyframes bounce{20%,53%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}@keyframes bounce{20%,53%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}.bounce{-webkit-animation-name:bounce;animation-name:bounce;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes flash{50%,from,to{opacity:1}25%,75%{opacity:0}}@keyframes flash{50%,from,to{opacity:1}25%,75%{opacity:0}}.flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}}@keyframes pulse{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}}.pulse{-webkit-animation-name:pulse;animation-name:pulse}@-webkit-keyframes rubberBand{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}}@keyframes rubberBand{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}}.rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shake{from,to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@keyframes shake{from,to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}.shake{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}.headShake{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-name:headShake;animation-name:headShake}@-webkit-keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}to{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}@keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}to{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}.swing{-webkit-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}}@keyframes tada{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}}.tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{from,to{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}}@keyframes wobble{from,to{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}}.wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes jello{11.1%,from,to{-webkit-transform:none;transform:none}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.39062deg) skewY(.39062deg);transform:skewX(.39062deg) skewY(.39062deg)}88.8%{-webkit-transform:skewX(-.19531deg) skewY(-.19531deg);transform:skewX(-.19531deg) skewY(-.19531deg)}}@keyframes jello{11.1%,from,to{-webkit-transform:none;transform:none}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.39062deg) skewY(.39062deg);transform:skewX(.39062deg) skewY(.39062deg)}88.8%{-webkit-transform:skewX(-.19531deg) skewY(-.19531deg);transform:skewX(-.19531deg) skewY(-.19531deg)}}.jello{-webkit-animation-name:jello;animation-name:jello;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes bounceIn{20%,40%,60%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes bounceIn{20%,40%,60%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.bounceIn{-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceInDown{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInDown{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}.bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInLeft{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}.bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInRight{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}.bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes bounceInUp{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}@keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}.bounceOut{-webkit-animation-name:bounceOut;animation-name:bounceOut}@-webkit-keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}.fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}.fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{from{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDownBig{from{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}.fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{from{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeft{from{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{from{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeftBig{from{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{from{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRight{from{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{from{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRightBig{from{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{from{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUp{from{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}.fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{from{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUpBig{from{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}.fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeOut{from{opacity:1}to{opacity:0}}@keyframes fadeOut{from{opacity:1}to{opacity:0}}.fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes fadeOutDown{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes fadeOutDownBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes fadeOutLeft{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes fadeOutLeftBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes fadeOutRight{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes fadeOutRightBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes fadeOutUp{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes fadeOutUpBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes flip{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.animated.flip{-webkit-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes flipInX{from{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{from{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.flipInX{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInX;animation-name:flipInX}.flipInY,.flipOutX{-webkit-backface-visibility:visible!important}@-webkit-keyframes flipInY{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.flipInY{backface-visibility:visible!important;-webkit-animation-name:flipInY;animation-name:flipInY}@-webkit-keyframes flipOutX{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}@keyframes flipOutX{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}.flipOutX{-webkit-animation-name:flipOutX;animation-name:flipOutX;backface-visibility:visible!important}@-webkit-keyframes flipOutY{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}@keyframes flipOutY{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}.flipOutY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipOutY;animation-name:flipOutY}@-webkit-keyframes lightSpeedIn{from{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}to{-webkit-transform:none;transform:none;opacity:1}}@keyframes lightSpeedIn{from{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}to{-webkit-transform:none;transform:none;opacity:1}}.lightSpeedIn{-webkit-animation-name:lightSpeedIn;animation-name:lightSpeedIn;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOut{from{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}@keyframes lightSpeedOut{from{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.lightSpeedOut{-webkit-animation-name:lightSpeedOut;animation-name:lightSpeedOut;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{from{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateIn{from{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}.rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn}@-webkit-keyframes rotateInDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft}@-webkit-keyframes rotateInDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight}@-webkit-keyframes rotateInUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft}@-webkit-keyframes rotateInUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight}@-webkit-keyframes rotateOut{from{-webkit-transform-origin:center;transform-origin:center;opacity:1}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}@keyframes rotateOut{from{-webkit-transform-origin:center;transform-origin:center;opacity:1}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}.rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut}@-webkit-keyframes rotateOutDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}}@keyframes rotateOutDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}}.rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft}@-webkit-keyframes rotateOutDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight}@-webkit-keyframes rotateOutUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft}@-webkit-keyframes rotateOutUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}@keyframes rotateOutUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}.rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight}@-webkit-keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}@keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}.hinge{-webkit-animation-name:hinge;animation-name:hinge}@-webkit-keyframes rollIn{from{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes rollIn{from{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}to{opacity:1;-webkit-transform:none;transform:none}}.rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}@keyframes rollOut{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}.rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}.zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInDown{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInLeft{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInRight{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInUp{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes zoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}.zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown}@-webkit-keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}@keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}.zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft}@-webkit-keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}@keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}.zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight}@-webkit-keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp}@-webkit-keyframes slideInDown{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInDown{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{from{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInLeft{from{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{from{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInRight{from{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideInUp{from{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInUp{from{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.slideInUp{-webkit-animation-name:slideInUp;animation-name:slideInUp}@-webkit-keyframes slideOutDown{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes slideOutDown{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.slideOutDown{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}@-webkit-keyframes slideOutLeft{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes slideOutLeft{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.slideOutLeft{-webkit-animation-name:slideOutLeft;animation-name:slideOutLeft}@-webkit-keyframes slideOutRight{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes slideOutRight{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.slideOutRight{-webkit-animation-name:slideOutRight;animation-name:slideOutRight}@-webkit-keyframes slideOutUp{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes slideOutUp{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.slideOutUp{-webkit-animation-name:slideOutUp;animation-name:slideOutUp}[data-notify=container][class*=alert-pathwayMapper-] .close{opacity:1;color:#FFF;margin-top:7px;outline:0}[data-notify=container][class*=alert-pathwayMapper-] .close:hover{color:#FFF}[data-notify=container].alert-pathwayMapper-success{background-color:#1abc9c;color:#FFF}[data-notify=container].alert-pathwayMapper-fail{background-color:#ff2644;color:#FFF}.toolbar{margin-bottom:5px;padding:5px;background-color:#eff0f2;border-radius:6px}.toolbar .toolbar-button{margin-left:-1px;margin-right:-1px;border:2px solid #eff0f2;border-radius:6px;display:inline-block;cursor:pointer}.toolbar .toolbar-button:hover{border-color:#1abc9c}.toolbar .toolbar-button-focused{border-color:#1abc9c!important}.toolbar .btn-group{margin-right:2px;margin-left:2px;border:2px solid #2f4154;padding:1px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.toolbar #searchGeneToolbar{float:right;margin-right:0!important;border:none!important}.toolbar .input-group.input-group-unstyled input.form-control{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.toolbar .input-group-unstyled .input-group-addon{border-radius:4px;border:0;background-color:transparent}.toolbar .form-group{margin:0!important}.control-label,.input-group input[type=checkbox]{margin-top:10px}.toolbar img{height:22px;margin-left:2px;margin-right:2px}.gridModal{width:350px!important}.geneSearchDiv input{border-radius:6px;border:2px solid #2b2b2d;box-shadow:none!important;-webkit-box-shadow:none!important;-moz-box-shadow:none!important;width:100%}.geneSearchDiv input:focus{border-color:#1abc9c;outline:0;border-style:solid;box-shadow:none!important;-webkit-box-shadow:none!important;-moz-box-shadow:none!important}body{background-color:#fff}input[type=color]{padding:2px}input[type=color]:hover{cursor:pointer}#colorPickerButton{padding-top:10px}.form-control:focus{border:2px solid #1abc9c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #1abc9c;color:#2f4154}.cy-panzoom{position:absolute}.cytoscape-navigatorView{background:#1abc9c}.cytoscape-navigator-wrapper{position:absolute;border:2px solid #2F4154;border-radius:6px;background:#fff;z-index:100;width:300px;height:200px;bottom:8.5%;right:3.5%;overflow:hidden}.btn:focus{outline:0!important}.pathwayPanel .fileNameContent{color:#2f4154;margin-bottom:10px;padding:5px;cursor:pointer;min-width:100px}.pathwayPanel div[contenteditable=true]:focus{outline:#1abc9c solid 2px;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #1abc9c;background-color:#fff}.pathwayPanel textarea{width:170px;height:50px;margin-bottom:10px;z-index:999999}.mainContentWrapper{display:flex}.sideBarWrapper{min-width:130px;max-width:130px;font-size:12px}.control-label{color:rgba(23,22,22,.78)!important;font-weight:300!important}.buttonContainer,.edgePaletteWrapper,.pnl .pnl-header{text-align:center}.input-group{margin-bottom:5px;width:100%}.input-group .form-control{border-radius:6px}.edgePaletteWrapper .list-group{margin-bottom:0!important}.edgePaletteWrapper .list-group .list-group-item{border:none!important}.edgePaletteWrapper .edge-palette .list-group-item.active,.edgePaletteWrapper .edge-palette .list-group-item.active:focus,.edgePaletteWrapper .edge-palette .list-group-item.active:hover{background-color:#1abc9c!important}.edgePaletteWrapper .edge-palette .list-group-item{padding:7px 5px}.edgePaletteWrapper .edge-palette a{margin-bottom:5px;border-radius:6px;font-size:12px}.edgePaletteWrapper .edge-palette a img{width:30px}footer{background-color:#eee;color:#393939;height:100%}.pageContentWrapper{margin-bottom:70px}.navbar-nav>.open>a,.navbar-nav>.open>a:focus,.navbar-nav>.open>a:hover{color:#fff!important;background-color:#1abc9c!important;border-left-color:transparent}.navbar-nav>.open>.dropdown-menu>li>a{color:#fff!important;border-radius:4px!important;font-size:12px!important}.navbar-nav>.open>.dropdown-menu{background-color:#2f4154!important}.navbar-nav>li>.dropdown-menu,.navbar-nav>li>.dropdown-submenu{border-radius:4px!important;border:none}.navbar-nav>.open>.dropdown-menu>li>a:focus,.navbar-nav>.open>.dropdown-menu>li>a:hover{color:#fff;background-color:#1abc9c}.navbar{border-radius:0 0 6px 6px;background-color:#2f4154;border:none!important;margin-bottom:5px!important}.navbar-nav a{transition:all .2s linear}.navbar-nav>li>a{color:#fff!important;font-weight:500!important;font-size:12px}.navbar-nav>li>a:hover{color:#1abc9c!important}.navbar-brand{color:#fff!important;font-size:16px;font-weight:700}.pnl{margin-bottom:10px;border-radius:6px;box-shadow:0 1px 1px rgba(0,0,0,.15),0 -1px 1px rgba(0,0,0,.15)}.pnl .pnl-header{background-color:#1abc9c;border-top-left-radius:6px;border-top-right-radius:6px;padding:8px 5px 5px;color:#fff;font-size:12px;font-weight:900}.pnl .pnl-body{background-color:#eff0f2;padding:4px 2px;border-bottom-left-radius:6px;border-bottom-right-radius:6px}.pnl .pnl-body .buttonContainer>button{border:none!important}.pnl .pnl-body .dragButtonContainer{width:115px;margin-left:auto;margin-right:auto}.customMargins{margin-left:3%!important;margin-right:3%!important}.leftPanelFix{padding-left:0}.hiddenfile{width:0;height:0;overflow:hidden}.buttonContainer{margin-bottom:5px}.buttonContainer button{font-size:12px;width:85%}.cyContainer{border:3px solid #1abc9c;height:780px;border-radius:6px;padding-right:0!important;padding-left:0!important;width:100%;margin-left:10px}#cy{height:100%}.btn:focus{background-color:#fff!important}.html5tooltip-box{background-color:rgba(47,65,84,.92);border-radius:8px} \ No newline at end of file diff --git a/legacy_code/src/css/sass/base.scss b/legacy_code/src/css/sass/base.scss index 51cf18b9..be03bbd7 100755 --- a/legacy_code/src/css/sass/base.scss +++ b/legacy_code/src/css/sass/base.scss @@ -171,7 +171,7 @@ input[type="color"]:hover{ width: 100%; .form-control{ - border-radius: 6px !important; + border-radius: 6px; } input[type="checkbox"]{ margin-top: 10px; diff --git a/package.json b/package.json index 3fa6e053..f57968af 100644 --- a/package.json +++ b/package.json @@ -51,8 +51,8 @@ } }, "prettier": { - "semi": false, - "singleQuote": true + "semi": true, + "singleQuote": false }, "commitlint": { "extends": [ @@ -86,14 +86,14 @@ "file-saver": "^2.0.2", "jquery-ui-dist": "^1.12.1", "konva": "^1.6.3", - "oncoprintjs": "4.2.3", + "lodash": "^4.17.11", + "oncoprintjs": "^4.2.3", "react-loader-spinner": "^2.3.0", "react-scrollbar": "^0.5.6", "react-table": "^6.10.0", "react-toastify": "^5.3.1", "react-tooltip": "^3.10.0", - "sharedb": "^1.1.0", - "underscore": "~1.8.3" + "sharedb": "^1.1.0" }, "devDependencies": { "@commitlint/cli": "^7.1.2", @@ -117,7 +117,6 @@ "cross-env": "^5.2.0", "cz-conventional-changelog": "^2.1.0", "express": "^4.17.1", - "extract-text-webpack-plugin": "^4.0.0-beta.0", "file-loader": "^3.0.1", "html-webpack-plugin": "^3.2.0", "http-server": "^0.11.1", @@ -127,6 +126,7 @@ "jquery": "latest", "lint-staged": "^8.0.0", "lodash.camelcase": "^4.3.0", + "mini-css-extract-plugin": "^0.6.0", "mobx": "^6.0.0", "mobx-react": "^6.0.0", "multer": "^1.4.1", @@ -140,11 +140,12 @@ "replace-in-file": "^3.4.2", "rimraf": "^2.6.2", "semantic-release": "^15.9.16", + "sharedb-mongo": "latest", "shelljs": "^0.8.3", "source-map-loader": "^0.1.6", "travis-deploy-once": "^5.0.9", - "ts-loader": "4.0.0", "ts-jest": "^23.10.2", + "ts-loader": "4.0.0", "ts-node": "^7.0.1", "tslint": "^5.11.0", "tslint-config-prettier": "^1.15.0", @@ -152,13 +153,12 @@ "ttf-loader": "^1.0.2", "typedoc": "^0.12.0", "typescript": "4.1.3", - "sharedb-mongo": "latest", - "websocket-json-stream": "0.0.3", - "ws": "latest", "url-loader": "^1.1.2", "webpack": "^4.32.2", "webpack-cli": "^3.3.2", "webpack-dev-server": "^3.5.1", - "webpack-node-externals": "^1.7.2" + "webpack-node-externals": "^1.7.2", + "websocket-json-stream": "0.0.3", + "ws": "latest" } } diff --git a/src/css/pmv1.css b/src/css/pmv1.css index d81f6f12..3aba7346 100644 --- a/src/css/pmv1.css +++ b/src/css/pmv1.css @@ -1 +1 @@ -.pathwayMapper .modal .modal-body .aboutImageContent,.pathwayMapper .modal .modal-body .adressText{margin-bottom:15px}.pathwayMapper #gridOptionsDiv .modal,.pathwayMapper #gridOptionsDiv .modal-body,.pathwayMapper #layoutPropertiesDiv .modal,.pathwayMapper #layoutPropertiesDiv .modal-body,.pathwayMapper #pathwayDetailsDiv .modal,.pathwayMapper #pathwayDetailsDiv .modal-body{max-height:100%}.pathwayMapper .modal,.pathwayMapper .modal .modal-footer,.pathwayMapper .pubmedIDLabel{text-align:center}.pathwayMapper .modal .modal-body .aboutImageContent label{font-weight:400;font-size:24px;color:#1974b8}.pathwayMapper .modal .modal-body h3,.pathwayMapper .modal .modal-footer a{color:#1abc9c}.pathwayMapper .modal .modal-body .adressText p{margin-bottom:0!important}.pathwayMapper #aboutModal .modal-dialog{width:400px}.pathwayMapper #edge_legend_modal .modal-body img,.pathwayMapper #layoutPropertiesDiv .modal-dialog,.pathwayMapper #node_legend_modal .modal-body img{width:500px}.pathwayMapper #quickHelpModal .modal-body ul li{margin-bottom:15px}.pathwayMapper .ui-cytoscape-nodeadd{z-index:99999;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;margin-bottom:5px}.pathwayMapper #ui-cytoscape-nodeadd-icon{font-size:1.3em!important;cursor:pointer}.pathwayMapper #ui-cytoscape-nodeadd-icon .explanationText{font:14px helvetica neue,helvetica,arial,sans-serif}.pathwayMapper #ui-cytoscape-nodeadd-icon img{width:110px}.pathwayMapper .ui-cytoscape-nodeadd-nodediv{z-index:99999;padding:3px;text-align:center;width:110px;-webkit-backface-visibility:hidden;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.pathwayMapper .dropdown-submenu{position:relative;font-size:12px!important}.pathwayMapper .dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:0;margin-left:0;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;background-color:#34495e!important}.pathwayMapper .dropdown-submenu:hover>.dropdown-menu{display:block}.pathwayMapper .dropdown-submenu>.dropdown-menu>li>a{color:#fff!important;font-size:12px!important}.pathwayMapper .dropdown-submenu>.dropdown-menu>li>a:hover{color:#fff!important;background-color:#1abc9c!important;border-radius:4px!important}.pathwayMapper .dropdown-submenu>a:after{display:block;content:" ";float:right;width:0;height:0;border-color:transparent transparent transparent #ccc;border-style:solid;border-width:5px 0 5px 5px;margin-top:5px;margin-right:-10px}.pathwayMapper #gridOptionsDiv .modal-footer button,.pathwayMapper #layoutPropertiesDiv .modal-footer button,.pathwayMapper #pathwayDetailsDiv .modal-footer button{border:none!important}.pathwayMapper .geneDetails,.pathwayMapper .qtipLabel{margin-top:10px}.pathwayMapper #pathwayDetailsDiv .modal .form-control:focus,.pathwayMapper #pathwayDetailsDiv .modal-body .form-control:focus{box-shadow:inset 0 2px 2px rgba(0,0,0,.075),0 0 8px #1abc9c;color:#2f4154}.pathwayMapper .form-control:focus,.pathwayMapper .qtip-tipsy .form-control:focus{box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #1abc9c}.pathwayMapper .pubmedIDList a{cursor:pointer}.pathwayMapper .qtipRemovePmedID{float:right}.pathwayMapper .qtipRemovePmedID:hover{color:#1abc9c;cursor:pointer}.pathwayMapper .inputCol{padding-left:0!important}.pathwayMapper .qtip-tipsy{background:rgba(47,65,84,.92);color:#fff;border:0 solid transparent;font-size:12px;font-family:'Lucida Grande',sans-serif;font-weight:700;line-height:16px}.pathwayMapper .qtip-tipsy .qtip-content{padding:5px 10px}.pathwayMapper .qtip-tipsy .scrollable{max-height:200px;overflow-y:scroll}.pathwayMapper .qtip-tipsy .form-control:focus{border-color:#1abc9c}.pathwayMapper .qtip-tipsy a{color:#1abc9c}.pathwayMapper .centerText{text-align:center!important}.pathwayMapper .leftText{text-align:left!important}.pathwayMapper .justifyText{text-align:justify!important}.pathwayMapper .popover{max-width:400px}.pathwayMapper .popover span{background-color:#e74c3c}.pathwayMapper .welcomePageContainer{position:fixed;top:0;left:0;background-color:#f6f6f6;z-index:100;height:100%;display:table;width:100%}.pathwayMapper .welcomePageContainer h1,.pathwayMapper .welcomePageContainer h3{color:#2f4154}.pathwayMapper .welcomePageContainer .landingContent{height:100%;position:relative;display:table-cell;vertical-align:middle;padding-top:70px;padding-bottom:70px}.pathwayMapper .welcomePageContainer .landingContent .creditInformation{font-weight:500;margin-top:25px;color:#1abc9c}.pathwayMapper .welcomePageContainer .landingContent .creditInformation a{color:#1abc9c}.pathwayMapper .welcomePageContainer .landingContent .contactInformation{font-weight:500;margin-top:25px;color:#979797}.pathwayMapper .welcomePageContainer .landingContent .contactInformation a{color:#979797}.pathwayMapper .welcomePageContainer .welcomePageLoading{display:none;margin-top:20px;margin-bottom:20px}.pathwayMapper .welcomePageContainer .welcomePageLoading i{color:#1abc9c}.pathwayMapper .welcomePageContainer .welPageButtons{margin-top:30px}.pathwayMapper .welcomePageContainer .welcomePageCheckable{display:inline-block;padding:10px;background-color:#fff;border-radius:6px;border:2px solid #979797;color:#606060;font-weight:500;transition:all .2s linear;min-width:180px;cursor:pointer}.pathwayMapper .welcomePageContainer .welcomePageCheckable i{visibility:hidden}.pathwayMapper .welcomePageContainer .active,.pathwayMapper .welcomePageContainer .welcomePageCheckable:hover{color:#2f4154;border-color:#1abc9c}.pathwayMapper .welcomePageContainer .active i,.pathwayMapper .welcomePageContainer .welcomePageCheckable:hover i{visibility:visible;color:#1abc9c}.pathwayMapper .welcomePageContainer .continueRow{margin-top:30px;visibility:hidden;cursor:pointer}.pathwayMapper .welcomePageContainer .continueButton{padding:10px;background-color:#2f4154;border-radius:6px;color:#fff;font-weight:500;transition:all .2s linear;max-width:200px;margin-left:auto;margin-right:auto}.pathwayMapper .welcomePageContainer .continueButton:hover{background-color:#1abc9c}.pathwayMapper .welcomePageContainer .buttonsSeparator{margin-left:10px;margin-right:10px;font-weight:600}.pathwayMapper .modal .modal-header{background-color:#ececec;border-top-left-radius:6px;border-top-right-radius:6px}.pathwayMapper .modal .modal-footer{background-color:#ececec;border-bottom-left-radius:6px;border-bottom-right-radius:6px}.pathwayMapper .modal .close{outline:0!important}.pathwayMapper .modal .modal-title{color:#2f4154}.pathwayMapper .modal .close:hover{color:#1abc9c}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicLoadButton{padding:10px;border-radius:6px;outline:0;background-color:#fff;border:2px solid #2f4154;color:#2f4154;transition:all .2s linear}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicLoadButton:hover{border-color:#1abc9c;color:#1abc9c}.pathwayMapper #genomicDataExplorerDiv .modal-body .wrapper{margin-top:20px;margin-bottom:20px}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicChecboxDiv{text-align:left!important;margin-left:50px!important}.pathwayMapper #cbioPortalModal .modal-body,.pathwayMapper .control-label{text-align:left}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicDataContentDiv{margin-bottom:15px}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicDataContentDiv h4{margin-bottom:5px}.pathwayMapper .cy-context-menus-cxt-menu{display:none;z-index:1000;position:absolute;padding:0;margin:0;outline:0;border-radius:6px;border:none;opacity:.9}.pathwayMapper .cy-context-menus-cxt-menu:first-child{border-top-left-radius:6px;border-top-right-radius:6px}.pathwayMapper .cy-context-menus-cxt-menu:last-child{border-bottom-left-radius:6px;border-bottom-right-radius:6px}.pathwayMapper .cy-context-menus-cxt-menuitem{display:block;z-index:1000;width:100%;padding:3px 20px;position:relative;margin:0;background-color:#2f4154;font-weight:400;font-size:13px;white-space:nowrap;border:0;text-align:left;outline:0}.pathwayMapper .pathwayPanel .fileNameContent,.pathwayMapper body{font:14px helvetica neue,helvetica,arial,sans-serif}.pathwayMapper .cy-context-menus-cxt-menuitem:enabled{color:#fff}.pathwayMapper .cy-context-menus-ctx-operation:focus{outline:0}.pathwayMapper .cy-context-menus-cxt-menuitem:hover{color:#fff;text-decoration:none;background-color:#1abc9c;background-image:none;cursor:pointer}.pathwayMapper .cy-context-menus-cxt-menuitem[title]:before{content:attr(title)}.pathwayMapper .cy-context-menus-cxt-menuitem:not([title]):before{content:"\2630"}.pathwayMapper #cbioPortalModal .modal-body .bootstrap-select>.dropdown-toggle{width:500px}.pathwayMapper #cbioPortalModal .modal-body .section{margin-bottom:20px}.pathwayMapper .animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.pathwayMapper .animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.pathwayMapper .animated.hinge{-webkit-animation-duration:2s;animation-duration:2s}.pathwayMapper .animated.bounceIn,.pathwayMapper .animated.bounceOut,.pathwayMapper .animated.flipOutX,.pathwayMapper .animated.flipOutY{-webkit-animation-duration:.75s;animation-duration:.75s}@-webkit-keyframes bounce{20%,53%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}@keyframes bounce{20%,53%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}.pathwayMapper .bounce{-webkit-animation-name:bounce;animation-name:bounce;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes flash{50%,from,to{opacity:1}25%,75%{opacity:0}}@keyframes flash{50%,from,to{opacity:1}25%,75%{opacity:0}}.pathwayMapper .flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}}@keyframes pulse{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}}.pathwayMapper .pulse{-webkit-animation-name:pulse;animation-name:pulse}@-webkit-keyframes rubberBand{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}}@keyframes rubberBand{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}}.pathwayMapper .rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shake{from,to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@keyframes shake{from,to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}.pathwayMapper .shake{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}.pathwayMapper .headShake{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-name:headShake;animation-name:headShake}@-webkit-keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}to{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}@keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}to{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}.pathwayMapper .swing{-webkit-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}}@keyframes tada{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}}.pathwayMapper .tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{from,to{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}}@keyframes wobble{from,to{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}}.pathwayMapper .wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes jello{11.1%,from,to{-webkit-transform:none;transform:none}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.39062deg) skewY(.39062deg);transform:skewX(.39062deg) skewY(.39062deg)}88.8%{-webkit-transform:skewX(-.19531deg) skewY(-.19531deg);transform:skewX(-.19531deg) skewY(-.19531deg)}}@keyframes jello{11.1%,from,to{-webkit-transform:none;transform:none}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.39062deg) skewY(.39062deg);transform:skewX(.39062deg) skewY(.39062deg)}88.8%{-webkit-transform:skewX(-.19531deg) skewY(-.19531deg);transform:skewX(-.19531deg) skewY(-.19531deg)}}.pathwayMapper .jello{-webkit-animation-name:jello;animation-name:jello;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes bounceIn{20%,40%,60%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes bounceIn{20%,40%,60%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.pathwayMapper .bounceIn{-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceInDown{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInDown{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}.pathwayMapper .bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInLeft{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}.pathwayMapper .bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInRight{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}.pathwayMapper .bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes bounceInUp{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}@keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}.pathwayMapper .bounceOut{-webkit-animation-name:bounceOut;animation-name:bounceOut}@-webkit-keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.pathwayMapper .bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.pathwayMapper .bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.pathwayMapper .bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.pathwayMapper .bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}.pathwayMapper .fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{from{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDownBig{from{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{from{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeft{from{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{from{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeftBig{from{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{from{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRight{from{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{from{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRightBig{from{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{from{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUp{from{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{from{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUpBig{from{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeOut{from{opacity:1}to{opacity:0}}@keyframes fadeOut{from{opacity:1}to{opacity:0}}.pathwayMapper .fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes fadeOutDown{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.pathwayMapper .fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes fadeOutDownBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.pathwayMapper .fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes fadeOutLeft{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.pathwayMapper .fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes fadeOutLeftBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.pathwayMapper .fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes fadeOutRight{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.pathwayMapper .fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes fadeOutRightBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.pathwayMapper .fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes fadeOutUp{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.pathwayMapper .fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes fadeOutUpBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.pathwayMapper .fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes flip{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.pathwayMapper .animated.flip{-webkit-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes flipInX{from{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{from{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.pathwayMapper .flipInX{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInX;animation-name:flipInX}.pathwayMapper .flipInY,.pathwayMapper .flipOutX{-webkit-backface-visibility:visible!important}@-webkit-keyframes flipInY{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.pathwayMapper .flipInY{backface-visibility:visible!important;-webkit-animation-name:flipInY;animation-name:flipInY}@-webkit-keyframes flipOutX{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}@keyframes flipOutX{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}.pathwayMapper .flipOutX{-webkit-animation-name:flipOutX;animation-name:flipOutX;backface-visibility:visible!important}@-webkit-keyframes flipOutY{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}@keyframes flipOutY{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}.pathwayMapper .flipOutY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipOutY;animation-name:flipOutY}@-webkit-keyframes lightSpeedIn{from{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}to{-webkit-transform:none;transform:none;opacity:1}}@keyframes lightSpeedIn{from{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}to{-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .lightSpeedIn{-webkit-animation-name:lightSpeedIn;animation-name:lightSpeedIn;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOut{from{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}@keyframes lightSpeedOut{from{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.pathwayMapper .lightSpeedOut{-webkit-animation-name:lightSpeedOut;animation-name:lightSpeedOut;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{from{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateIn{from{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn}@-webkit-keyframes rotateInDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft}@-webkit-keyframes rotateInDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight}@-webkit-keyframes rotateInUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft}@-webkit-keyframes rotateInUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight}@-webkit-keyframes rotateOut{from{-webkit-transform-origin:center;transform-origin:center;opacity:1}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}@keyframes rotateOut{from{-webkit-transform-origin:center;transform-origin:center;opacity:1}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}.pathwayMapper .rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut}@-webkit-keyframes rotateOutDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}}@keyframes rotateOutDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}}.pathwayMapper .rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft}@-webkit-keyframes rotateOutDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.pathwayMapper .rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight}@-webkit-keyframes rotateOutUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.pathwayMapper .rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft}@-webkit-keyframes rotateOutUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}@keyframes rotateOutUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}.pathwayMapper .rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight}@-webkit-keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}@keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}.pathwayMapper .hinge{-webkit-animation-name:hinge;animation-name:hinge}@-webkit-keyframes rollIn{from{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes rollIn{from{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}@keyframes rollOut{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}.pathwayMapper .rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}.pathwayMapper .zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInDown{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInLeft{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInRight{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInUp{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes zoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}.pathwayMapper .zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown}@-webkit-keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}@keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}.pathwayMapper .zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft}@-webkit-keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}@keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}.pathwayMapper .zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight}@-webkit-keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp}@-webkit-keyframes slideInDown{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInDown{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{from{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInLeft{from{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{from{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInRight{from{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideInUp{from{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInUp{from{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .slideInUp{-webkit-animation-name:slideInUp;animation-name:slideInUp}@-webkit-keyframes slideOutDown{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes slideOutDown{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.pathwayMapper .slideOutDown{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}@-webkit-keyframes slideOutLeft{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes slideOutLeft{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.pathwayMapper .slideOutLeft{-webkit-animation-name:slideOutLeft;animation-name:slideOutLeft}@-webkit-keyframes slideOutRight{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes slideOutRight{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.pathwayMapper .slideOutRight{-webkit-animation-name:slideOutRight;animation-name:slideOutRight}@-webkit-keyframes slideOutUp{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes slideOutUp{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.pathwayMapper .slideOutUp{-webkit-animation-name:slideOutUp;animation-name:slideOutUp}.pathwayMapper [data-notify=container][class*=alert-pathwayMapper-] .close{opacity:1;color:#fff;margin-top:7px;outline:0}.pathwayMapper .control-label,.pathwayMapper .input-group input[type=checkbox]{margin-top:10px}.pathwayMapper [data-notify=container][class*=alert-pathwayMapper-] .close:hover{color:#fff}.pathwayMapper [data-notify=container].alert-pathwayMapper-success{background-color:#1abc9c;color:#fff}.pathwayMapper [data-notify=container].alert-pathwayMapper-fail{background-color:#ff2644;color:#fff}.pathwayMapper .gridModal{width:350px!important}.pathwayMapper body{background-color:#fff}.pathwayMapper input[type=color]{padding:2px}.pathwayMapper input[type=color]:hover{cursor:pointer}.pathwayMapper #colorPickerButton{padding-top:10px}.pathwayMapper .form-control:focus{border:2px solid #1abc9c;color:#2f4154}.pathwayMapper .cy-panzoom{right:120px;z-index:100}.pathwayMapper .cytoscape-navigatorView{background:#1abc9c}.pathwayMapper .cytoscape-navigator-wrapper{position:absolute;border:2px solid #2f4154;border-radius:6px;background:#fff;z-index:100;width:300px;height:200px;bottom:8.5%;right:3.5%;overflow:hidden}.pathwayMapper .btn:focus{outline:0!important}.pathwayMapper .pathwayPanel .fileNameContent{color:#2f4154;margin-bottom:10px;padding:5px;cursor:pointer;min-width:100px}.pathwayMapper .pathwayPanel div[contenteditable=true]:focus{outline:#1abc9c solid 2px;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #1abc9c;background-color:#fff}.pathwayMapper .pathwayPanel textarea{width:170px;height:50px;margin-bottom:10px;z-index:999999}.pathwayMapper .mainContentWrapper{display:flex}.pathwayMapper .sideBarWrapper{min-width:130px;max-width:130px;font-size:12px}.pathwayMapper .control-label{color:rgba(23,22,22,.78)!important;font-weight:300!important}.pathwayMapper .buttonContainer,.pathwayMapper .edgePaletteWrapper,.pathwayMapper .pnl .pnl-header{text-align:center}.pathwayMapper .input-group{margin-bottom:5px;width:100%}.pathwayMapper .input-group .form-control{border-radius:6px!important}.pathwayMapper .edgePaletteWrapper .list-group{margin-bottom:0!important}.pathwayMapper .edgePaletteWrapper .list-group .list-group-item{border:none!important}.pathwayMapper .edgePaletteWrapper .edge-palette .list-group-item.active,.pathwayMapper .edgePaletteWrapper .edge-palette .list-group-item.active:focus,.pathwayMapper .edgePaletteWrapper .edge-palette .list-group-item.active:hover{background-color:#1abc9c!important}.pathwayMapper .edgePaletteWrapper .edge-palette .list-group-item{padding:7px 5px}.pathwayMapper .edgePaletteWrapper .edge-palette a{margin-bottom:5px;border-radius:6px;font-size:12px}.pathwayMapper .edgePaletteWrapper .edge-palette a img{width:30px}.pathwayMapper footer{background-color:#eee;color:#393939;height:100%}.pathwayMapper .pageContentWrapper{margin-bottom:70px}.pathwayMapper .navbar-nav>.open>a,.pathwayMapper .navbar-nav>.open>a:focus,.pathwayMapper .navbar-nav>.open>a:hover{color:#fff!important;background-color:#1abc9c!important;border-left-color:transparent}.pathwayMapper .navbar-nav>.open>.dropdown-menu>li>a{color:#fff!important;border-radius:4px!important;font-size:12px!important}.pathwayMapper .navbar-nav>.open>.dropdown-menu{background-color:#2f4154!important}.pathwayMapper .navbar-nav>li>.dropdown-menu,.pathwayMapper .navbar-nav>li>.dropdown-submenu{border-radius:4px!important;border:none}.pathwayMapper .navbar-nav>.open>.dropdown-menu>li>a:focus,.pathwayMapper .navbar-nav>.open>.dropdown-menu>li>a:hover{color:#fff;background-color:#1abc9c}.pathwayMapper .navbar{border-radius:0 0 6px 6px;background-color:#2f4154;border:none!important;margin-bottom:10px!important}.pathwayMapper .navbar-nav a{transition:all .2s linear}.pathwayMapper .navbar-nav>li>a{color:#fff!important;font-weight:500!important;font-size:12px}.pathwayMapper .navbar-nav>li>a:hover{color:#1abc9c!important}.pathwayMapper .navbar-brand{color:#fff!important;font-size:16px;font-weight:700}.pathwayMapper .pnl{margin-bottom:10px;border-radius:6px;box-shadow:0 1px 1px rgba(0,0,0,.15),0 -1px 1px rgba(0,0,0,.15)}.pathwayMapper .pnl .pnl-header{background-color:#1abc9c;border-top-left-radius:6px;border-top-right-radius:6px;padding:8px 5px 5px;color:#fff;font-size:12px;font-weight:900}.pathwayMapper .pnl .pnl-body{background-color:#eff0f2;padding:4px 2px;border-bottom-left-radius:6px;border-bottom-right-radius:6px}.pathwayMapper .pnl .pnl-body .buttonContainer>button{border:none!important}.pathwayMapper .pnl .pnl-body .dragButtonContainer{width:115px;margin-left:auto;margin-right:auto}.pathwayMapper .customMargins{margin-left:3%!important;margin-right:3%!important}.pathwayMapper .leftPanelFix{padding-left:0}.pathwayMapper .hiddenfile{width:0;height:0;overflow:hidden}.pathwayMapper .buttonContainer{margin-bottom:5px}.pathwayMapper .buttonContainer button{font-size:12px;width:85%}.pathwayMapper .cyContainer{border:3px solid #1abc9c;height:850px;border-radius:6px;padding-right:0!important;padding-left:0!important;width:100%;margin-left:10px}.pathwayMapper #cy{height:100%} \ No newline at end of file +.pathwayMapper .modal .modal-body .aboutImageContent,.pathwayMapper .modal .modal-body .adressText{margin-bottom:15px}.pathwayMapper #gridOptionsDiv .modal,.pathwayMapper #gridOptionsDiv .modal-body,.pathwayMapper #layoutPropertiesDiv .modal,.pathwayMapper #layoutPropertiesDiv .modal-body,.pathwayMapper #pathwayDetailsDiv .modal,.pathwayMapper #pathwayDetailsDiv .modal-body{max-height:100%}.pathwayMapper .modal,.pathwayMapper .modal .modal-footer,.pathwayMapper .pubmedIDLabel{text-align:center}.pathwayMapper .modal .modal-body .aboutImageContent label{font-weight:400;font-size:24px;color:#1974b8}.pathwayMapper .modal .modal-body h3,.pathwayMapper .modal .modal-footer a{color:#1abc9c}.pathwayMapper .modal .modal-body .adressText p{margin-bottom:0!important}.pathwayMapper #aboutModal .modal-dialog{width:400px}.pathwayMapper #edge_legend_modal .modal-body img,.pathwayMapper #layoutPropertiesDiv .modal-dialog,.pathwayMapper #node_legend_modal .modal-body img{width:500px}.pathwayMapper #quickHelpModal .modal-body ul li{margin-bottom:15px}.pathwayMapper .ui-cytoscape-nodeadd{z-index:99999;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;margin-bottom:5px}.pathwayMapper #ui-cytoscape-nodeadd-icon{font-size:1.3em!important;cursor:pointer}.pathwayMapper #ui-cytoscape-nodeadd-icon .explanationText{font:14px helvetica neue,helvetica,arial,sans-serif}.pathwayMapper #ui-cytoscape-nodeadd-icon img{width:110px}.pathwayMapper .ui-cytoscape-nodeadd-nodediv{z-index:99999;padding:3px;text-align:center;width:110px;-webkit-backface-visibility:hidden;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.pathwayMapper .dropdown-submenu{position:relative;font-size:12px!important}.pathwayMapper .dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:0;margin-left:0;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;background-color:#34495e!important}.pathwayMapper .dropdown-submenu:hover>.dropdown-menu{display:block}.pathwayMapper .dropdown-submenu>.dropdown-menu>li>a{color:#fff!important;font-size:12px!important}.pathwayMapper .dropdown-submenu>.dropdown-menu>li>a:hover{color:#fff!important;background-color:#1abc9c!important;border-radius:4px!important}.pathwayMapper .dropdown-submenu>a:after{display:block;content:" ";float:right;width:0;height:0;border-color:transparent transparent transparent #ccc;border-style:solid;border-width:5px 0 5px 5px;margin-top:5px;margin-right:-10px}.pathwayMapper #gridOptionsDiv .modal-footer button,.pathwayMapper #layoutPropertiesDiv .modal-footer button,.pathwayMapper #pathwayDetailsDiv .modal-footer button{border:none!important}.pathwayMapper .geneDetails,.pathwayMapper .qtipLabel{margin-top:10px}.pathwayMapper #pathwayDetailsDiv .modal .form-control:focus,.pathwayMapper #pathwayDetailsDiv .modal-body .form-control:focus{box-shadow:inset 0 2px 2px rgba(0,0,0,.075),0 0 8px #1abc9c;color:#2f4154}.pathwayMapper .form-control:focus,.pathwayMapper .qtip-tipsy .form-control:focus{box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #1abc9c}.pathwayMapper .pubmedIDList a{cursor:pointer}.pathwayMapper .qtipRemovePmedID{float:right}.pathwayMapper .qtipRemovePmedID:hover{color:#1abc9c;cursor:pointer}.pathwayMapper .inputCol{padding-left:0!important}.pathwayMapper .qtip-tipsy{background:rgba(47,65,84,.92);color:#fff;border:0 solid transparent;font-size:12px;font-family:'Lucida Grande',sans-serif;font-weight:700;line-height:16px}.pathwayMapper .qtip-tipsy .qtip-content{padding:5px 10px}.pathwayMapper .qtip-tipsy .scrollable{max-height:200px;overflow-y:scroll}.pathwayMapper .qtip-tipsy .form-control:focus{border-color:#1abc9c}.pathwayMapper .qtip-tipsy a{color:#1abc9c}.pathwayMapper .centerText{text-align:center!important}.pathwayMapper .leftText{text-align:left!important}.pathwayMapper .justifyText{text-align:justify!important}.pathwayMapper .popover{max-width:400px}.pathwayMapper .popover span{background-color:#e74c3c}.pathwayMapper .welcomePageContainer{position:fixed;top:0;left:0;background-color:#f6f6f6;z-index:100;height:100%;display:table;width:100%}.pathwayMapper .welcomePageContainer h1,.pathwayMapper .welcomePageContainer h3{color:#2f4154}.pathwayMapper .welcomePageContainer .landingContent{height:100%;position:relative;display:table-cell;vertical-align:middle;padding-top:70px;padding-bottom:70px}.pathwayMapper .welcomePageContainer .landingContent .creditInformation{font-weight:500;margin-top:25px;color:#1abc9c}.pathwayMapper .welcomePageContainer .landingContent .creditInformation a{color:#1abc9c}.pathwayMapper .welcomePageContainer .landingContent .contactInformation{font-weight:500;margin-top:25px;color:#979797}.pathwayMapper .welcomePageContainer .landingContent .contactInformation a{color:#979797}.pathwayMapper .welcomePageContainer .welcomePageLoading{display:none;margin-top:20px;margin-bottom:20px}.pathwayMapper .welcomePageContainer .welcomePageLoading i{color:#1abc9c}.pathwayMapper .welcomePageContainer .welPageButtons{margin-top:30px}.pathwayMapper .welcomePageContainer .welcomePageCheckable{display:inline-block;padding:10px;background-color:#fff;border-radius:6px;border:2px solid #979797;color:#606060;font-weight:500;transition:all .2s linear;min-width:180px;cursor:pointer}.pathwayMapper .welcomePageContainer .welcomePageCheckable i{visibility:hidden}.pathwayMapper .welcomePageContainer .active,.pathwayMapper .welcomePageContainer .welcomePageCheckable:hover{color:#2f4154;border-color:#1abc9c}.pathwayMapper .welcomePageContainer .active i,.pathwayMapper .welcomePageContainer .welcomePageCheckable:hover i{visibility:visible;color:#1abc9c}.pathwayMapper .welcomePageContainer .continueRow{margin-top:30px;visibility:hidden;cursor:pointer}.pathwayMapper .welcomePageContainer .continueButton{padding:10px;background-color:#2f4154;border-radius:6px;color:#fff;font-weight:500;transition:all .2s linear;max-width:200px;margin-left:auto;margin-right:auto}.pathwayMapper .welcomePageContainer .continueButton:hover{background-color:#1abc9c}.pathwayMapper .welcomePageContainer .buttonsSeparator{margin-left:10px;margin-right:10px;font-weight:600}.pathwayMapper .modal .modal-header{background-color:#ececec;border-top-left-radius:6px;border-top-right-radius:6px}.pathwayMapper .modal .modal-footer{background-color:#ececec;border-bottom-left-radius:6px;border-bottom-right-radius:6px}.pathwayMapper .modal .close{outline:0!important}.pathwayMapper .modal .modal-title{color:#2f4154}.pathwayMapper .modal .close:hover{color:#1abc9c}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicLoadButton{padding:10px;border-radius:6px;outline:0;background-color:#fff;border:2px solid #2f4154;color:#2f4154;transition:all .2s linear}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicLoadButton:hover{border-color:#1abc9c;color:#1abc9c}.pathwayMapper #genomicDataExplorerDiv .modal-body .wrapper{margin-top:20px;margin-bottom:20px}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicChecboxDiv{text-align:left!important;margin-left:50px!important}.pathwayMapper #cbioPortalModal .modal-body,.pathwayMapper .control-label{text-align:left}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicDataContentDiv{margin-bottom:15px}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicDataContentDiv h4{margin-bottom:5px}.pathwayMapper .cy-context-menus-cxt-menu{display:none;z-index:1000;position:absolute;padding:0;margin:0;outline:0;border-radius:6px;border:none;opacity:.9}.pathwayMapper .cy-context-menus-cxt-menu:first-child{border-top-left-radius:6px;border-top-right-radius:6px}.pathwayMapper .cy-context-menus-cxt-menu:last-child{border-bottom-left-radius:6px;border-bottom-right-radius:6px}.pathwayMapper .cy-context-menus-cxt-menuitem{display:block;z-index:1000;width:100%;padding:3px 20px;position:relative;margin:0;background-color:#2f4154;font-weight:400;font-size:13px;white-space:nowrap;border:0;text-align:left;outline:0}.pathwayMapper .pathwayPanel .fileNameContent,.pathwayMapper body{font:14px helvetica neue,helvetica,arial,sans-serif}.pathwayMapper .cy-context-menus-cxt-menuitem:enabled{color:#fff}.pathwayMapper .cy-context-menus-ctx-operation:focus{outline:0}.pathwayMapper .cy-context-menus-cxt-menuitem:hover{color:#fff;text-decoration:none;background-color:#1abc9c;background-image:none;cursor:pointer}.pathwayMapper .cy-context-menus-cxt-menuitem[title]:before{content:attr(title)}.pathwayMapper .cy-context-menus-cxt-menuitem:not([title]):before{content:"\2630"}.pathwayMapper #cbioPortalModal .modal-body .bootstrap-select>.dropdown-toggle{width:500px}.pathwayMapper #cbioPortalModal .modal-body .section{margin-bottom:20px}.pathwayMapper .animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.pathwayMapper .animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.pathwayMapper .animated.hinge{-webkit-animation-duration:2s;animation-duration:2s}.pathwayMapper .animated.bounceIn,.pathwayMapper .animated.bounceOut,.pathwayMapper .animated.flipOutX,.pathwayMapper .animated.flipOutY{-webkit-animation-duration:.75s;animation-duration:.75s}@-webkit-keyframes bounce{20%,53%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}@keyframes bounce{20%,53%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}.pathwayMapper .bounce{-webkit-animation-name:bounce;animation-name:bounce;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes flash{50%,from,to{opacity:1}25%,75%{opacity:0}}@keyframes flash{50%,from,to{opacity:1}25%,75%{opacity:0}}.pathwayMapper .flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}}@keyframes pulse{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}}.pathwayMapper .pulse{-webkit-animation-name:pulse;animation-name:pulse}@-webkit-keyframes rubberBand{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}}@keyframes rubberBand{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}}.pathwayMapper .rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shake{from,to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@keyframes shake{from,to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}.pathwayMapper .shake{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}.pathwayMapper .headShake{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-name:headShake;animation-name:headShake}@-webkit-keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}to{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}@keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}to{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}.pathwayMapper .swing{-webkit-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}}@keyframes tada{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}}.pathwayMapper .tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{from,to{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}}@keyframes wobble{from,to{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}}.pathwayMapper .wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes jello{11.1%,from,to{-webkit-transform:none;transform:none}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.39062deg) skewY(.39062deg);transform:skewX(.39062deg) skewY(.39062deg)}88.8%{-webkit-transform:skewX(-.19531deg) skewY(-.19531deg);transform:skewX(-.19531deg) skewY(-.19531deg)}}@keyframes jello{11.1%,from,to{-webkit-transform:none;transform:none}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.39062deg) skewY(.39062deg);transform:skewX(.39062deg) skewY(.39062deg)}88.8%{-webkit-transform:skewX(-.19531deg) skewY(-.19531deg);transform:skewX(-.19531deg) skewY(-.19531deg)}}.pathwayMapper .jello{-webkit-animation-name:jello;animation-name:jello;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes bounceIn{20%,40%,60%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes bounceIn{20%,40%,60%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.pathwayMapper .bounceIn{-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceInDown{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInDown{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}.pathwayMapper .bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInLeft{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}.pathwayMapper .bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInRight{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}.pathwayMapper .bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes bounceInUp{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}@keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}.pathwayMapper .bounceOut{-webkit-animation-name:bounceOut;animation-name:bounceOut}@-webkit-keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.pathwayMapper .bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.pathwayMapper .bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.pathwayMapper .bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.pathwayMapper .bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}.pathwayMapper .fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{from{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDownBig{from{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{from{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeft{from{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{from{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeftBig{from{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{from{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRight{from{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{from{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRightBig{from{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{from{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUp{from{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{from{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUpBig{from{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeOut{from{opacity:1}to{opacity:0}}@keyframes fadeOut{from{opacity:1}to{opacity:0}}.pathwayMapper .fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes fadeOutDown{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.pathwayMapper .fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes fadeOutDownBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.pathwayMapper .fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes fadeOutLeft{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.pathwayMapper .fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes fadeOutLeftBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.pathwayMapper .fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes fadeOutRight{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.pathwayMapper .fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes fadeOutRightBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.pathwayMapper .fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes fadeOutUp{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.pathwayMapper .fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes fadeOutUpBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.pathwayMapper .fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes flip{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.pathwayMapper .animated.flip{-webkit-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes flipInX{from{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{from{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.pathwayMapper .flipInX{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInX;animation-name:flipInX}.pathwayMapper .flipInY,.pathwayMapper .flipOutX{-webkit-backface-visibility:visible!important}@-webkit-keyframes flipInY{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.pathwayMapper .flipInY{backface-visibility:visible!important;-webkit-animation-name:flipInY;animation-name:flipInY}@-webkit-keyframes flipOutX{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}@keyframes flipOutX{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}.pathwayMapper .flipOutX{-webkit-animation-name:flipOutX;animation-name:flipOutX;backface-visibility:visible!important}@-webkit-keyframes flipOutY{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}@keyframes flipOutY{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}.pathwayMapper .flipOutY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipOutY;animation-name:flipOutY}@-webkit-keyframes lightSpeedIn{from{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}to{-webkit-transform:none;transform:none;opacity:1}}@keyframes lightSpeedIn{from{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}to{-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .lightSpeedIn{-webkit-animation-name:lightSpeedIn;animation-name:lightSpeedIn;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOut{from{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}@keyframes lightSpeedOut{from{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.pathwayMapper .lightSpeedOut{-webkit-animation-name:lightSpeedOut;animation-name:lightSpeedOut;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{from{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateIn{from{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn}@-webkit-keyframes rotateInDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft}@-webkit-keyframes rotateInDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight}@-webkit-keyframes rotateInUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft}@-webkit-keyframes rotateInUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight}@-webkit-keyframes rotateOut{from{-webkit-transform-origin:center;transform-origin:center;opacity:1}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}@keyframes rotateOut{from{-webkit-transform-origin:center;transform-origin:center;opacity:1}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}.pathwayMapper .rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut}@-webkit-keyframes rotateOutDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}}@keyframes rotateOutDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}}.pathwayMapper .rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft}@-webkit-keyframes rotateOutDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.pathwayMapper .rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight}@-webkit-keyframes rotateOutUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.pathwayMapper .rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft}@-webkit-keyframes rotateOutUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}@keyframes rotateOutUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}.pathwayMapper .rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight}@-webkit-keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}@keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}.pathwayMapper .hinge{-webkit-animation-name:hinge;animation-name:hinge}@-webkit-keyframes rollIn{from{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes rollIn{from{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}@keyframes rollOut{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}.pathwayMapper .rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}.pathwayMapper .zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInDown{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInLeft{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInRight{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInUp{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes zoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}.pathwayMapper .zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown}@-webkit-keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}@keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}.pathwayMapper .zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft}@-webkit-keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}@keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}.pathwayMapper .zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight}@-webkit-keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp}@-webkit-keyframes slideInDown{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInDown{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{from{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInLeft{from{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{from{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInRight{from{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideInUp{from{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInUp{from{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .slideInUp{-webkit-animation-name:slideInUp;animation-name:slideInUp}@-webkit-keyframes slideOutDown{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes slideOutDown{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.pathwayMapper .slideOutDown{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}@-webkit-keyframes slideOutLeft{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes slideOutLeft{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.pathwayMapper .slideOutLeft{-webkit-animation-name:slideOutLeft;animation-name:slideOutLeft}@-webkit-keyframes slideOutRight{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes slideOutRight{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.pathwayMapper .slideOutRight{-webkit-animation-name:slideOutRight;animation-name:slideOutRight}@-webkit-keyframes slideOutUp{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes slideOutUp{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.pathwayMapper .slideOutUp{-webkit-animation-name:slideOutUp;animation-name:slideOutUp}.pathwayMapper [data-notify=container][class*=alert-pathwayMapper-] .close{opacity:1;color:#fff;margin-top:7px;outline:0}.pathwayMapper .control-label,.pathwayMapper .input-group input[type=checkbox]{margin-top:10px}.pathwayMapper [data-notify=container][class*=alert-pathwayMapper-] .close:hover{color:#fff}.pathwayMapper [data-notify=container].alert-pathwayMapper-success{background-color:#1abc9c;color:#fff}.pathwayMapper [data-notify=container].alert-pathwayMapper-fail{background-color:#ff2644;color:#fff}.pathwayMapper .gridModal{width:350px!important}.pathwayMapper body{background-color:#fff}.pathwayMapper input[type=color]{padding:2px}.pathwayMapper input[type=color]:hover{cursor:pointer}.pathwayMapper #colorPickerButton{padding-top:10px}.pathwayMapper .form-control:focus{border:2px solid #1abc9c;color:#2f4154}.pathwayMapper .cy-panzoom{right:120px;z-index:100}.pathwayMapper .cytoscape-navigatorView{background:#1abc9c}.pathwayMapper .cytoscape-navigator-wrapper{position:absolute;border:2px solid #2f4154;border-radius:6px;background:#fff;z-index:100;width:300px;height:200px;bottom:8.5%;right:3.5%;overflow:hidden}.pathwayMapper .btn:focus{outline:0!important}.pathwayMapper .pathwayPanel .fileNameContent{color:#2f4154;margin-bottom:10px;padding:5px;cursor:pointer;min-width:100px}.pathwayMapper .pathwayPanel div[contenteditable=true]:focus{outline:#1abc9c solid 2px;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #1abc9c;background-color:#fff}.pathwayMapper .pathwayPanel textarea{width:170px;height:50px;margin-bottom:10px;z-index:999999}.pathwayMapper .mainContentWrapper{display:flex}.pathwayMapper .sideBarWrapper{min-width:130px;max-width:130px;font-size:12px}.pathwayMapper .control-label{color:rgba(23,22,22,.78)!important;font-weight:300!important}.pathwayMapper .buttonContainer,.pathwayMapper .edgePaletteWrapper,.pathwayMapper .pnl .pnl-header{text-align:center}.pathwayMapper .input-group{margin-bottom:5px;width:100%}.pathwayMapper .input-group .form-control{border-radius:6px}.pathwayMapper .edgePaletteWrapper .list-group{margin-bottom:0!important}.pathwayMapper .edgePaletteWrapper .list-group .list-group-item{border:none!important}.pathwayMapper .edgePaletteWrapper .edge-palette .list-group-item.active,.pathwayMapper .edgePaletteWrapper .edge-palette .list-group-item.active:focus,.pathwayMapper .edgePaletteWrapper .edge-palette .list-group-item.active:hover{background-color:#1abc9c!important}.pathwayMapper .edgePaletteWrapper .edge-palette .list-group-item{padding:7px 5px}.pathwayMapper .edgePaletteWrapper .edge-palette a{margin-bottom:5px;border-radius:6px;font-size:12px}.pathwayMapper .edgePaletteWrapper .edge-palette a img{width:30px}.pathwayMapper footer{background-color:#eee;color:#393939;height:100%}.pathwayMapper .pageContentWrapper{margin-bottom:70px}.pathwayMapper .navbar-nav>.open>a,.pathwayMapper .navbar-nav>.open>a:focus,.pathwayMapper .navbar-nav>.open>a:hover{color:#fff!important;background-color:#1abc9c!important;border-left-color:transparent}.pathwayMapper .navbar-nav>.open>.dropdown-menu>li>a{color:#fff!important;border-radius:4px!important;font-size:12px!important}.pathwayMapper .navbar-nav>.open>.dropdown-menu{background-color:#2f4154!important}.pathwayMapper .navbar-nav>li>.dropdown-menu,.pathwayMapper .navbar-nav>li>.dropdown-submenu{border-radius:4px!important;border:none}.pathwayMapper .navbar-nav>.open>.dropdown-menu>li>a:focus,.pathwayMapper .navbar-nav>.open>.dropdown-menu>li>a:hover{color:#fff;background-color:#1abc9c}.pathwayMapper .navbar{border-radius:0 0 6px 6px;background-color:#2f4154;border:none!important;margin-bottom:10px!important}.pathwayMapper .navbar-nav a{transition:all .2s linear}.pathwayMapper .navbar-nav>li>a{color:#fff!important;font-weight:500!important;font-size:12px}.pathwayMapper .navbar-nav>li>a:hover{color:#1abc9c!important}.pathwayMapper .navbar-brand{color:#fff!important;font-size:16px;font-weight:700}.pathwayMapper .pnl{margin-bottom:10px;border-radius:6px;box-shadow:0 1px 1px rgba(0,0,0,.15),0 -1px 1px rgba(0,0,0,.15)}.pathwayMapper .pnl .pnl-header{background-color:#1abc9c;border-top-left-radius:6px;border-top-right-radius:6px;padding:8px 5px 5px;color:#fff;font-size:12px;font-weight:900}.pathwayMapper .pnl .pnl-body{background-color:#eff0f2;padding:4px 2px;border-bottom-left-radius:6px;border-bottom-right-radius:6px}.pathwayMapper .pnl .pnl-body .buttonContainer>button{border:none!important}.pathwayMapper .pnl .pnl-body .dragButtonContainer{width:115px;margin-left:auto;margin-right:auto}.pathwayMapper .customMargins{margin-left:3%!important;margin-right:3%!important}.pathwayMapper .leftPanelFix{padding-left:0}.pathwayMapper .hiddenfile{width:0;height:0;overflow:hidden}.pathwayMapper .buttonContainer{margin-bottom:5px}.pathwayMapper .buttonContainer button{font-size:12px;width:85%}.pathwayMapper .cyContainer{border:3px solid #1abc9c;height:850px;border-radius:6px;padding-right:0!important;padding-left:0!important;width:100%;margin-left:10px}.pathwayMapper #cy{height:100%} \ No newline at end of file diff --git a/src/css/pmv2.css b/src/css/pmv2.css index 0c1d8066..f3f14c77 100644 --- a/src/css/pmv2.css +++ b/src/css/pmv2.css @@ -1 +1 @@ -.pathwayMapper .modal .modal-body .aboutImageContent,.pathwayMapper .modal .modal-body .adressText{margin-bottom:15px}.pathwayMapper #gridOptionsDiv .modal,.pathwayMapper #gridOptionsDiv .modal-body,.pathwayMapper #layoutPropertiesDiv .modal,.pathwayMapper #layoutPropertiesDiv .modal-body,.pathwayMapper #pathwayDetailsDiv .modal,.pathwayMapper #pathwayDetailsDiv .modal-body{max-height:100%}.pathwayMapper .modal,.pathwayMapper .modal .modal-footer,.pathwayMapper .pubmedIDLabel{text-align:center}.pathwayMapper .modal .modal-body .aboutImageContent label{font-weight:400;font-size:24px;color:#1974b8}.pathwayMapper .modal .modal-body h3,.pathwayMapper .modal .modal-footer a{color:#1abc9c}.pathwayMapper .modal .modal-body .adressText p{margin-bottom:0!important}.pathwayMapper #aboutModal .modal-dialog{width:400px}.pathwayMapper #edge_legend_modal .modal-body img,.pathwayMapper #layoutPropertiesDiv .modal-dialog,.pathwayMapper #node_legend_modal .modal-body img{width:500px}.pathwayMapper #quickHelpModal .modal-body ul li{margin-bottom:15px}.pathwayMapper .ui-cytoscape-nodeadd{z-index:99999;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;margin-bottom:5px}.pathwayMapper #ui-cytoscape-nodeadd-icon{font-size:1.3em!important;cursor:pointer}.pathwayMapper #ui-cytoscape-nodeadd-icon .explanationText{font:14px helvetica neue,helvetica,arial,sans-serif}.pathwayMapper #ui-cytoscape-nodeadd-icon img{width:110px}.pathwayMapper .ui-cytoscape-nodeadd-nodediv{z-index:99999;padding:3px;text-align:center;width:110px;-webkit-backface-visibility:hidden;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.pathwayMapper .dropdown-submenu{position:relative;font-size:12px!important}.pathwayMapper .dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:0;margin-left:0;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;background-color:#34495e!important}.pathwayMapper .dropdown-submenu:hover>.dropdown-menu{display:block}.pathwayMapper .dropdown-submenu>.dropdown-menu>li>a{color:#fff!important;font-size:12px!important}.pathwayMapper .dropdown-submenu>.dropdown-menu>li>a:hover{color:#fff!important;background-color:#1abc9c!important;border-radius:4px!important}.pathwayMapper .dropdown-submenu>a:after{display:block;content:" ";float:right;width:0;height:0;border-color:transparent transparent transparent #ccc;border-style:solid;border-width:5px 0 5px 5px;margin-top:5px;margin-right:-10px}.pathwayMapper #gridOptionsDiv .modal-footer button,.pathwayMapper #layoutPropertiesDiv .modal-footer button,.pathwayMapper #pathwayDetailsDiv .modal-footer button{border:none!important}.pathwayMapper .geneDetails,.pathwayMapper .qtipLabel{margin-top:10px}.pathwayMapper #pathwayDetailsDiv .modal .form-control:focus,.pathwayMapper #pathwayDetailsDiv .modal-body .form-control:focus{box-shadow:inset 0 2px 2px rgba(0,0,0,.075),0 0 8px #1abc9c;color:#2f4154}.pathwayMapper .pubmedIDList a{cursor:pointer}.pathwayMapper .qtipRemovePmedID{float:right}.pathwayMapper .qtipRemovePmedID:hover{color:#1abc9c;cursor:pointer}.pathwayMapper .inputCol{padding-left:0!important}.pathwayMapper .qtip-tipsy{background:rgba(47,65,84,.92);color:#fff;border:0 solid transparent;font-size:12px;font-family:'Lucida Grande',sans-serif;font-weight:700;line-height:16px}.pathwayMapper .qtip-tipsy .qtip-content{padding:5px 10px}.pathwayMapper .qtip-tipsy .scrollable{max-height:200px;overflow-y:scroll}.pathwayMapper .qtip-tipsy .form-control:focus{border-color:#1abc9c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #1abc9c}.pathwayMapper .qtip-tipsy a{color:#1abc9c}.pathwayMapper .centerText{text-align:center!important}.pathwayMapper .leftText{text-align:left!important}.pathwayMapper .justifyText{text-align:justify!important}.pathwayMapper .popover{max-width:410px}.pathwayMapper .popover span{background-color:#e74c3c}.pathwayMapper .welcomePageContainer{position:fixed;top:0;left:0;background-color:#f6f6f6;z-index:100;height:100%;display:table;width:100%}.pathwayMapper .welcomePageContainer h1,.pathwayMapper .welcomePageContainer h3{color:#2f4154}.pathwayMapper .welcomePageContainer .landingContent{height:100%;position:relative;display:table-cell;vertical-align:middle;padding-top:70px;padding-bottom:70px}.pathwayMapper .welcomePageContainer .welcomePageLoading{display:none;margin-top:20px;margin-bottom:20px}.pathwayMapper .welcomePageContainer .welcomePageLoading i{color:#1abc9c}.pathwayMapper .welcomePageContainer .welPageButtons{margin-top:30px}.pathwayMapper .welcomePageContainer .welcomePageCheckable{display:inline-block;padding:10px;background-color:#fff;border-radius:6px;border:2px solid #979797;color:#606060;font-weight:500;transition:all .2s linear;min-width:180px;cursor:pointer}.pathwayMapper .welcomePageContainer .welcomePageCheckable i{visibility:hidden}.pathwayMapper .welcomePageContainer .active,.pathwayMapper .welcomePageContainer .welcomePageCheckable:hover{color:#2f4154;border-color:#1abc9c}.pathwayMapper .welcomePageContainer .active i,.pathwayMapper .welcomePageContainer .welcomePageCheckable:hover i{visibility:visible;color:#1abc9c}.pathwayMapper .welcomePageContainer .continueRow{margin-top:30px;visibility:hidden;cursor:pointer}.pathwayMapper .welcomePageContainer .continueButton{padding:10px;background-color:#2f4154;border-radius:6px;color:#fff;font-weight:500;transition:all .2s linear;max-width:200px;margin-left:auto;margin-right:auto}.pathwayMapper .welcomePageContainer .continueButton:hover{background-color:#1abc9c}.pathwayMapper .welcomePageContainer .buttonsSeparator{margin-left:10px;margin-right:10px;font-weight:600}.pathwayMapper .welcomePageContainer .creditInformation{font-weight:500;margin-top:25px;color:#1abc9c}.pathwayMapper .welcomePageContainer .creditInformation a{color:#1abc9c}.pathwayMapper .welcomePageContainer .contactInformation{font-weight:500;margin-top:25px;color:#979797}.pathwayMapper .welcomePageContainer .contactInformation a{color:#979797}.pathwayMapper .modal .modal-header{background-color:#ececec;border-top-left-radius:6px;border-top-right-radius:6px}.pathwayMapper .modal .modal-footer{background-color:#ececec;border-bottom-left-radius:6px;border-bottom-right-radius:6px}.pathwayMapper .modal .close{outline:0!important}.pathwayMapper .modal .modal-title{color:#2f4154}.pathwayMapper .modal .close:hover{color:#1abc9c}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicLoadButton{padding:10px;border-radius:6px;outline:0;background-color:#fff;border:2px solid #2f4154;color:#2f4154;transition:all .2s linear}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicLoadButton:hover{border-color:#1abc9c;color:#1abc9c}.pathwayMapper #genomicDataExplorerDiv .modal-body .wrapper{margin-top:20px;margin-bottom:20px}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicChecboxDiv{text-align:left!important;margin-left:50px!important}.pathwayMapper #cbioPortalModal .modal-body,.pathwayMapper .control-label{text-align:left}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicDataContentDiv{margin-bottom:15px}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicDataContentDiv h4{margin-bottom:5px}.pathwayMapper .cy-context-menus-cxt-menu{display:none;z-index:1000;position:absolute;border:1px solid #a0a0a0;padding:0;margin:0;width:auto;border-radius:6px;opacity:.9;outline:0}.pathwayMapper #cy-context-menus-cxt-menu:first-child{border-top-left-radius:6px;border-top-right-radius:6px}.pathwayMapper #cy-context-menus-cxt-menu:last-child{border-bottom-left-radius:6px;border-bottom-right-radius:6px}.pathwayMapper .cy-context-menus-cxt-menuitem{display:block;z-index:1000;width:100%;padding:3px 20px;position:relative;margin:0;background-color:#2f4154;font-weight:400;font-size:12px;white-space:nowrap;border:0;text-align:left}.pathwayMapper .pathwayPanel .fileNameContent,.pathwayMapper body{font:14px helvetica neue,helvetica,arial,sans-serif}.pathwayMapper .cy-context-menus-cxt-menuitem:enabled{color:#fff}.pathwayMapper .cy-context-menus-ctx-operation:focus{outline:0}.pathwayMapper .cy-context-menus-cxt-menuitem:hover{color:#fff;text-decoration:none;background-color:#1abc9c;background-image:none;cursor:pointer}.pathwayMapper .cy-context-menus-cxt-menuitem[content]:before{content:attr(content)}.pathwayMapper .cy-context-menus-divider{border-bottom:1px solid #a0a0a0}.pathwayMapper #cbioPortalModal .modal-body .bootstrap-select>.dropdown-toggle{width:500px}.pathwayMapper #cbioPortalModal .modal-body .section{margin-bottom:20px}.pathwayMapper .animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.pathwayMapper .animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.pathwayMapper .animated.hinge{-webkit-animation-duration:2s;animation-duration:2s}.pathwayMapper .animated.bounceIn,.pathwayMapper .animated.bounceOut,.pathwayMapper .animated.flipOutX,.pathwayMapper .animated.flipOutY{-webkit-animation-duration:.75s;animation-duration:.75s}@-webkit-keyframes bounce{20%,53%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}@keyframes bounce{20%,53%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}.pathwayMapper .bounce{-webkit-animation-name:bounce;animation-name:bounce;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes flash{50%,from,to{opacity:1}25%,75%{opacity:0}}@keyframes flash{50%,from,to{opacity:1}25%,75%{opacity:0}}.pathwayMapper .flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}}@keyframes pulse{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}}.pathwayMapper .pulse{-webkit-animation-name:pulse;animation-name:pulse}@-webkit-keyframes rubberBand{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}}@keyframes rubberBand{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}}.pathwayMapper .rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shake{from,to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@keyframes shake{from,to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}.pathwayMapper .shake{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}.pathwayMapper .headShake{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-name:headShake;animation-name:headShake}@-webkit-keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}to{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}@keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}to{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}.pathwayMapper .swing{-webkit-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}}@keyframes tada{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}}.pathwayMapper .tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{from,to{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}}@keyframes wobble{from,to{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}}.pathwayMapper .wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes jello{11.1%,from,to{-webkit-transform:none;transform:none}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.39062deg) skewY(.39062deg);transform:skewX(.39062deg) skewY(.39062deg)}88.8%{-webkit-transform:skewX(-.19531deg) skewY(-.19531deg);transform:skewX(-.19531deg) skewY(-.19531deg)}}@keyframes jello{11.1%,from,to{-webkit-transform:none;transform:none}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.39062deg) skewY(.39062deg);transform:skewX(.39062deg) skewY(.39062deg)}88.8%{-webkit-transform:skewX(-.19531deg) skewY(-.19531deg);transform:skewX(-.19531deg) skewY(-.19531deg)}}.pathwayMapper .jello{-webkit-animation-name:jello;animation-name:jello;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes bounceIn{20%,40%,60%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes bounceIn{20%,40%,60%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.pathwayMapper .bounceIn{-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceInDown{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInDown{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}.pathwayMapper .bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInLeft{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}.pathwayMapper .bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInRight{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}.pathwayMapper .bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes bounceInUp{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}@keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}.pathwayMapper .bounceOut{-webkit-animation-name:bounceOut;animation-name:bounceOut}@-webkit-keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.pathwayMapper .bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.pathwayMapper .bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.pathwayMapper .bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.pathwayMapper .bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}.pathwayMapper .fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{from{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDownBig{from{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{from{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeft{from{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{from{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeftBig{from{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{from{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRight{from{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{from{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRightBig{from{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{from{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUp{from{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{from{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUpBig{from{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeOut{from{opacity:1}to{opacity:0}}@keyframes fadeOut{from{opacity:1}to{opacity:0}}.pathwayMapper .fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes fadeOutDown{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.pathwayMapper .fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes fadeOutDownBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.pathwayMapper .fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes fadeOutLeft{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.pathwayMapper .fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes fadeOutLeftBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.pathwayMapper .fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes fadeOutRight{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.pathwayMapper .fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes fadeOutRightBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.pathwayMapper .fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes fadeOutUp{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.pathwayMapper .fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes fadeOutUpBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.pathwayMapper .fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes flip{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.pathwayMapper .animated.flip{-webkit-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes flipInX{from{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{from{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.pathwayMapper .flipInX{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInX;animation-name:flipInX}.pathwayMapper .flipInY,.pathwayMapper .flipOutX{-webkit-backface-visibility:visible!important}@-webkit-keyframes flipInY{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.pathwayMapper .flipInY{backface-visibility:visible!important;-webkit-animation-name:flipInY;animation-name:flipInY}@-webkit-keyframes flipOutX{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}@keyframes flipOutX{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}.pathwayMapper .flipOutX{-webkit-animation-name:flipOutX;animation-name:flipOutX;backface-visibility:visible!important}@-webkit-keyframes flipOutY{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}@keyframes flipOutY{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}.pathwayMapper .flipOutY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipOutY;animation-name:flipOutY}@-webkit-keyframes lightSpeedIn{from{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}to{-webkit-transform:none;transform:none;opacity:1}}@keyframes lightSpeedIn{from{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}to{-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .lightSpeedIn{-webkit-animation-name:lightSpeedIn;animation-name:lightSpeedIn;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOut{from{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}@keyframes lightSpeedOut{from{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.pathwayMapper .lightSpeedOut{-webkit-animation-name:lightSpeedOut;animation-name:lightSpeedOut;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{from{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateIn{from{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn}@-webkit-keyframes rotateInDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft}@-webkit-keyframes rotateInDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight}@-webkit-keyframes rotateInUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft}@-webkit-keyframes rotateInUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight}@-webkit-keyframes rotateOut{from{-webkit-transform-origin:center;transform-origin:center;opacity:1}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}@keyframes rotateOut{from{-webkit-transform-origin:center;transform-origin:center;opacity:1}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}.pathwayMapper .rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut}@-webkit-keyframes rotateOutDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}}@keyframes rotateOutDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}}.pathwayMapper .rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft}@-webkit-keyframes rotateOutDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.pathwayMapper .rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight}@-webkit-keyframes rotateOutUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.pathwayMapper .rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft}@-webkit-keyframes rotateOutUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}@keyframes rotateOutUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}.pathwayMapper .rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight}@-webkit-keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}@keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}.pathwayMapper .hinge{-webkit-animation-name:hinge;animation-name:hinge}@-webkit-keyframes rollIn{from{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes rollIn{from{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}@keyframes rollOut{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}.pathwayMapper .rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}.pathwayMapper .zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInDown{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInLeft{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInRight{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInUp{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes zoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}.pathwayMapper .zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown}@-webkit-keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}@keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}.pathwayMapper .zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft}@-webkit-keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}@keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}.pathwayMapper .zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight}@-webkit-keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp}@-webkit-keyframes slideInDown{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInDown{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{from{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInLeft{from{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{from{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInRight{from{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideInUp{from{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInUp{from{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .slideInUp{-webkit-animation-name:slideInUp;animation-name:slideInUp}@-webkit-keyframes slideOutDown{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes slideOutDown{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.pathwayMapper .slideOutDown{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}@-webkit-keyframes slideOutLeft{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes slideOutLeft{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.pathwayMapper .slideOutLeft{-webkit-animation-name:slideOutLeft;animation-name:slideOutLeft}@-webkit-keyframes slideOutRight{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes slideOutRight{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.pathwayMapper .slideOutRight{-webkit-animation-name:slideOutRight;animation-name:slideOutRight}@-webkit-keyframes slideOutUp{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes slideOutUp{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.pathwayMapper .slideOutUp{-webkit-animation-name:slideOutUp;animation-name:slideOutUp}.pathwayMapper [data-notify=container][class*=alert-pathwayMapper-] .close{opacity:1;color:#fff;margin-top:7px;outline:0}.pathwayMapper [data-notify=container][class*=alert-pathwayMapper-] .close:hover{color:#fff}.pathwayMapper [data-notify=container].alert-pathwayMapper-success{background-color:#1abc9c;color:#fff}.pathwayMapper [data-notify=container].alert-pathwayMapper-fail{background-color:#ff2644;color:#fff}.pathwayMapper .toolbar{margin-bottom:5px;padding:5px;background-color:#eff0f2;border-radius:6px}.pathwayMapper .toolbar .toolbar-button{margin-left:-1px;margin-right:-1px;border:2px solid #eff0f2;border-radius:6px;display:inline-block;cursor:pointer}.pathwayMapper .toolbar .toolbar-button:hover{border-color:#1abc9c}.pathwayMapper .toolbar .toolbar-button-focused{border-color:#1abc9c!important}.pathwayMapper .toolbar .btn-group{margin-right:2px;margin-left:2px;border:2px solid #2f4154;padding:1px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.pathwayMapper .toolbar #searchGeneToolbar{float:right;margin-right:0!important;border:none!important}.pathwayMapper .toolbar .input-group.input-group-unstyled input.form-control{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.pathwayMapper .toolbar .input-group-unstyled .input-group-addon{border-radius:4px;border:0;background-color:transparent}.pathwayMapper .toolbar .form-group{margin:0!important}.pathwayMapper .control-label,.pathwayMapper .input-group input[type=checkbox]{margin-top:10px}.pathwayMapper .toolbar img{height:22px;margin-left:2px;margin-right:2px}.pathwayMapper .gridModal{width:350px!important}.pathwayMapper .geneSearchDiv input{border-radius:6px;border:2px solid #2b2b2d;box-shadow:none!important;-webkit-box-shadow:none!important;-moz-box-shadow:none!important;width:100%}.pathwayMapper .geneSearchDiv input:focus{border-color:#1abc9c;outline:0;border-style:solid;box-shadow:none!important;-webkit-box-shadow:none!important;-moz-box-shadow:none!important}.pathwayMapper body{background-color:#fff}.pathwayMapper input[type=color]{padding:2px}.pathwayMapper input[type=color]:hover{cursor:pointer}.pathwayMapper #colorPickerButton{padding-top:10px}.pathwayMapper .form-control:focus{border:2px solid #1abc9c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #1abc9c;color:#2f4154}.pathwayMapper .cy-panzoom{position:absolute}.pathwayMapper .cytoscape-navigatorView{background:#1abc9c}.pathwayMapper .cytoscape-navigator-wrapper{position:absolute;border:2px solid #2f4154;border-radius:6px;background:#fff;z-index:100;width:300px;height:200px;bottom:8.5%;right:3.5%;overflow:hidden}.pathwayMapper .btn:focus{outline:0!important}.pathwayMapper .pathwayPanel .fileNameContent{color:#2f4154;margin-bottom:10px;padding:5px;cursor:pointer;min-width:100px}.pathwayMapper .pathwayPanel div[contenteditable=true]:focus{outline:#1abc9c solid 2px;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #1abc9c;background-color:#fff}.pathwayMapper .pathwayPanel textarea{width:170px;height:50px;margin-bottom:10px;z-index:999999}.pathwayMapper .mainContentWrapper{display:flex}.pathwayMapper .sideBarWrapper{min-width:130px;max-width:130px;font-size:12px}.pathwayMapper .control-label{color:rgba(23,22,22,.78)!important;font-weight:300!important}.pathwayMapper .buttonContainer,.pathwayMapper .edgePaletteWrapper,.pathwayMapper .pnl .pnl-header{text-align:center}.pathwayMapper .input-group{margin-bottom:5px;width:100%}.pathwayMapper .input-group .form-control{border-radius:6px!important}.pathwayMapper .edgePaletteWrapper .list-group{margin-bottom:0!important}.pathwayMapper .edgePaletteWrapper .list-group .list-group-item{border:none!important}.pathwayMapper .edgePaletteWrapper .edge-palette .list-group-item.active,.pathwayMapper .edgePaletteWrapper .edge-palette .list-group-item.active:focus,.pathwayMapper .edgePaletteWrapper .edge-palette .list-group-item.active:hover{background-color:#1abc9c!important}.pathwayMapper .edgePaletteWrapper .edge-palette .list-group-item{padding:7px 5px}.pathwayMapper .edgePaletteWrapper .edge-palette a{margin-bottom:5px;border-radius:6px;font-size:12px}.pathwayMapper .edgePaletteWrapper .edge-palette a img{width:30px}.pathwayMapper footer{background-color:#eee;color:#393939;height:100%}.pathwayMapper .pageContentWrapper{margin-bottom:70px}.pathwayMapper .navbar-nav>.open>a,.pathwayMapper .navbar-nav>.open>a:focus,.pathwayMapper .navbar-nav>.open>a:hover{color:#fff!important;background-color:#1abc9c!important;border-left-color:transparent}.pathwayMapper .navbar-nav>.open>.dropdown-menu>li>a{color:#fff!important;border-radius:4px!important;font-size:12px!important}.pathwayMapper .navbar-nav>.open>.dropdown-menu{background-color:#2f4154!important}.pathwayMapper .navbar-nav>li>.dropdown-menu,.pathwayMapper .navbar-nav>li>.dropdown-submenu{border-radius:4px!important;border:none}.pathwayMapper .navbar-nav>.open>.dropdown-menu>li>a:focus,.pathwayMapper .navbar-nav>.open>.dropdown-menu>li>a:hover{color:#fff;background-color:#1abc9c}.pathwayMapper .navbar{border-radius:0 0 6px 6px;background-color:#2f4154;border:none!important;margin-bottom:5px!important}.pathwayMapper .navbar-nav a{transition:all .2s linear}.pathwayMapper .navbar-nav>li>a{color:#fff!important;font-weight:500!important;font-size:12px}.pathwayMapper .navbar-nav>li>a:hover{color:#1abc9c!important}.pathwayMapper .navbar-brand{color:#fff!important;font-size:16px;font-weight:700}.pathwayMapper .pnl{margin-bottom:10px;border-radius:6px;box-shadow:0 1px 1px rgba(0,0,0,.15),0 -1px 1px rgba(0,0,0,.15)}.pathwayMapper .pnl .pnl-header{background-color:#1abc9c;border-top-left-radius:6px;border-top-right-radius:6px;padding:8px 5px 5px;color:#fff;font-size:12px;font-weight:900}.pathwayMapper .pnl .pnl-body{background-color:#eff0f2;padding:4px 2px;border-bottom-left-radius:6px;border-bottom-right-radius:6px}.pathwayMapper .pnl .pnl-body .buttonContainer>button{border:none!important}.pathwayMapper .pnl .pnl-body .dragButtonContainer{width:115px;margin-left:auto;margin-right:auto}.pathwayMapper .customMargins{margin-left:3%!important;margin-right:3%!important}.pathwayMapper .leftPanelFix{padding-left:0}.pathwayMapper .hiddenfile{width:0;height:0;overflow:hidden}.pathwayMapper .buttonContainer{margin-bottom:5px}.pathwayMapper .buttonContainer button{font-size:12px;width:85%}.pathwayMapper .cyContainer{border:3px solid #1abc9c;height:780px;border-radius:6px;padding-right:0!important;padding-left:0!important;width:100%;margin-left:10px}.pathwayMapper #cy{height:100%}.pathwayMapper .html5tooltip-box{background-color:rgba(47,65,84,.92);border-radius:8px} \ No newline at end of file +.pathwayMapper .modal .modal-body .aboutImageContent,.pathwayMapper .modal .modal-body .adressText{margin-bottom:15px}.pathwayMapper #gridOptionsDiv .modal,.pathwayMapper #gridOptionsDiv .modal-body,.pathwayMapper #layoutPropertiesDiv .modal,.pathwayMapper #layoutPropertiesDiv .modal-body,.pathwayMapper #pathwayDetailsDiv .modal,.pathwayMapper #pathwayDetailsDiv .modal-body{max-height:100%}.pathwayMapper .modal,.pathwayMapper .modal .modal-footer,.pathwayMapper .pubmedIDLabel{text-align:center}.pathwayMapper .modal .modal-body .aboutImageContent label{font-weight:400;font-size:24px;color:#1974b8}.pathwayMapper .modal .modal-body h3,.pathwayMapper .modal .modal-footer a{color:#1abc9c}.pathwayMapper .modal .modal-body .adressText p{margin-bottom:0!important}.pathwayMapper #aboutModal .modal-dialog{width:400px}.pathwayMapper #edge_legend_modal .modal-body img,.pathwayMapper #layoutPropertiesDiv .modal-dialog,.pathwayMapper #node_legend_modal .modal-body img{width:500px}.pathwayMapper #quickHelpModal .modal-body ul li{margin-bottom:15px}.pathwayMapper .ui-cytoscape-nodeadd{z-index:99999;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;margin-bottom:5px}.pathwayMapper #ui-cytoscape-nodeadd-icon{font-size:1.3em!important;cursor:pointer}.pathwayMapper #ui-cytoscape-nodeadd-icon .explanationText{font:14px helvetica neue,helvetica,arial,sans-serif}.pathwayMapper #ui-cytoscape-nodeadd-icon img{width:110px}.pathwayMapper .ui-cytoscape-nodeadd-nodediv{z-index:99999;padding:3px;text-align:center;width:110px;-webkit-backface-visibility:hidden;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.pathwayMapper .dropdown-submenu{position:relative;font-size:12px!important}.pathwayMapper .dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:0;margin-left:0;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;background-color:#34495e!important}.pathwayMapper .dropdown-submenu:hover>.dropdown-menu{display:block}.pathwayMapper .dropdown-submenu>.dropdown-menu>li>a{color:#fff!important;font-size:12px!important}.pathwayMapper .dropdown-submenu>.dropdown-menu>li>a:hover{color:#fff!important;background-color:#1abc9c!important;border-radius:4px!important}.pathwayMapper .dropdown-submenu>a:after{display:block;content:" ";float:right;width:0;height:0;border-color:transparent transparent transparent #ccc;border-style:solid;border-width:5px 0 5px 5px;margin-top:5px;margin-right:-10px}.pathwayMapper #gridOptionsDiv .modal-footer button,.pathwayMapper #layoutPropertiesDiv .modal-footer button,.pathwayMapper #pathwayDetailsDiv .modal-footer button{border:none!important}.pathwayMapper .geneDetails,.pathwayMapper .qtipLabel{margin-top:10px}.pathwayMapper #pathwayDetailsDiv .modal .form-control:focus,.pathwayMapper #pathwayDetailsDiv .modal-body .form-control:focus{box-shadow:inset 0 2px 2px rgba(0,0,0,.075),0 0 8px #1abc9c;color:#2f4154}.pathwayMapper .pubmedIDList a{cursor:pointer}.pathwayMapper .qtipRemovePmedID{float:right}.pathwayMapper .qtipRemovePmedID:hover{color:#1abc9c;cursor:pointer}.pathwayMapper .inputCol{padding-left:0!important}.pathwayMapper .qtip-tipsy{background:rgba(47,65,84,.92);color:#fff;border:0 solid transparent;font-size:12px;font-family:'Lucida Grande',sans-serif;font-weight:700;line-height:16px}.pathwayMapper .qtip-tipsy .qtip-content{padding:5px 10px}.pathwayMapper .qtip-tipsy .scrollable{max-height:200px;overflow-y:scroll}.pathwayMapper .qtip-tipsy .form-control:focus{border-color:#1abc9c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #1abc9c}.pathwayMapper .qtip-tipsy a{color:#1abc9c}.pathwayMapper .centerText{text-align:center!important}.pathwayMapper .leftText{text-align:left!important}.pathwayMapper .justifyText{text-align:justify!important}.pathwayMapper .popover{max-width:410px}.pathwayMapper .popover span{background-color:#e74c3c}.pathwayMapper .welcomePageContainer{position:fixed;top:0;left:0;background-color:#f6f6f6;z-index:100;height:100%;display:table;width:100%}.pathwayMapper .welcomePageContainer h1,.pathwayMapper .welcomePageContainer h3{color:#2f4154}.pathwayMapper .welcomePageContainer .landingContent{height:100%;position:relative;display:table-cell;vertical-align:middle;padding-top:70px;padding-bottom:70px}.pathwayMapper .welcomePageContainer .welcomePageLoading{display:none;margin-top:20px;margin-bottom:20px}.pathwayMapper .welcomePageContainer .welcomePageLoading i{color:#1abc9c}.pathwayMapper .welcomePageContainer .welPageButtons{margin-top:30px}.pathwayMapper .welcomePageContainer .welcomePageCheckable{display:inline-block;padding:10px;background-color:#fff;border-radius:6px;border:2px solid #979797;color:#606060;font-weight:500;transition:all .2s linear;min-width:180px;cursor:pointer}.pathwayMapper .welcomePageContainer .welcomePageCheckable i{visibility:hidden}.pathwayMapper .welcomePageContainer .active,.pathwayMapper .welcomePageContainer .welcomePageCheckable:hover{color:#2f4154;border-color:#1abc9c}.pathwayMapper .welcomePageContainer .active i,.pathwayMapper .welcomePageContainer .welcomePageCheckable:hover i{visibility:visible;color:#1abc9c}.pathwayMapper .welcomePageContainer .continueRow{margin-top:30px;visibility:hidden;cursor:pointer}.pathwayMapper .welcomePageContainer .continueButton{padding:10px;background-color:#2f4154;border-radius:6px;color:#fff;font-weight:500;transition:all .2s linear;max-width:200px;margin-left:auto;margin-right:auto}.pathwayMapper .welcomePageContainer .continueButton:hover{background-color:#1abc9c}.pathwayMapper .welcomePageContainer .buttonsSeparator{margin-left:10px;margin-right:10px;font-weight:600}.pathwayMapper .welcomePageContainer .creditInformation{font-weight:500;margin-top:25px;color:#1abc9c}.pathwayMapper .welcomePageContainer .creditInformation a{color:#1abc9c}.pathwayMapper .welcomePageContainer .contactInformation{font-weight:500;margin-top:25px;color:#979797}.pathwayMapper .welcomePageContainer .contactInformation a{color:#979797}.pathwayMapper .modal .modal-header{background-color:#ececec;border-top-left-radius:6px;border-top-right-radius:6px}.pathwayMapper .modal .modal-footer{background-color:#ececec;border-bottom-left-radius:6px;border-bottom-right-radius:6px}.pathwayMapper .modal .close{outline:0!important}.pathwayMapper .modal .modal-title{color:#2f4154}.pathwayMapper .modal .close:hover{color:#1abc9c}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicLoadButton{padding:10px;border-radius:6px;outline:0;background-color:#fff;border:2px solid #2f4154;color:#2f4154;transition:all .2s linear}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicLoadButton:hover{border-color:#1abc9c;color:#1abc9c}.pathwayMapper #genomicDataExplorerDiv .modal-body .wrapper{margin-top:20px;margin-bottom:20px}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicChecboxDiv{text-align:left!important;margin-left:50px!important}.pathwayMapper #cbioPortalModal .modal-body,.pathwayMapper .control-label{text-align:left}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicDataContentDiv{margin-bottom:15px}.pathwayMapper #genomicDataExplorerDiv .modal-body .genomicDataContentDiv h4{margin-bottom:5px}.pathwayMapper .cy-context-menus-cxt-menu{display:none;z-index:1000;position:absolute;border:1px solid #a0a0a0;padding:0;margin:0;width:auto;border-radius:6px;opacity:.9;outline:0}.pathwayMapper #cy-context-menus-cxt-menu:first-child{border-top-left-radius:6px;border-top-right-radius:6px}.pathwayMapper #cy-context-menus-cxt-menu:last-child{border-bottom-left-radius:6px;border-bottom-right-radius:6px}.pathwayMapper .cy-context-menus-cxt-menuitem{display:block;z-index:1000;width:100%;padding:3px 20px;position:relative;margin:0;background-color:#2f4154;font-weight:400;font-size:12px;white-space:nowrap;border:0;text-align:left}.pathwayMapper .pathwayPanel .fileNameContent,.pathwayMapper body{font:14px helvetica neue,helvetica,arial,sans-serif}.pathwayMapper .cy-context-menus-cxt-menuitem:enabled{color:#fff}.pathwayMapper .cy-context-menus-ctx-operation:focus{outline:0}.pathwayMapper .cy-context-menus-cxt-menuitem:hover{color:#fff;text-decoration:none;background-color:#1abc9c;background-image:none;cursor:pointer}.pathwayMapper .cy-context-menus-cxt-menuitem[content]:before{content:attr(content)}.pathwayMapper .cy-context-menus-divider{border-bottom:1px solid #a0a0a0}.pathwayMapper #cbioPortalModal .modal-body .bootstrap-select>.dropdown-toggle{width:500px}.pathwayMapper #cbioPortalModal .modal-body .section{margin-bottom:20px}.pathwayMapper .animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.pathwayMapper .animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.pathwayMapper .animated.hinge{-webkit-animation-duration:2s;animation-duration:2s}.pathwayMapper .animated.bounceIn,.pathwayMapper .animated.bounceOut,.pathwayMapper .animated.flipOutX,.pathwayMapper .animated.flipOutY{-webkit-animation-duration:.75s;animation-duration:.75s}@-webkit-keyframes bounce{20%,53%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}@keyframes bounce{20%,53%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}.pathwayMapper .bounce{-webkit-animation-name:bounce;animation-name:bounce;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes flash{50%,from,to{opacity:1}25%,75%{opacity:0}}@keyframes flash{50%,from,to{opacity:1}25%,75%{opacity:0}}.pathwayMapper .flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}}@keyframes pulse{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}}.pathwayMapper .pulse{-webkit-animation-name:pulse;animation-name:pulse}@-webkit-keyframes rubberBand{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}}@keyframes rubberBand{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}}.pathwayMapper .rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shake{from,to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@keyframes shake{from,to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}.pathwayMapper .shake{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}.pathwayMapper .headShake{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-name:headShake;animation-name:headShake}@-webkit-keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}to{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}@keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}to{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}.pathwayMapper .swing{-webkit-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}}@keyframes tada{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}}.pathwayMapper .tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{from,to{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}}@keyframes wobble{from,to{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}}.pathwayMapper .wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes jello{11.1%,from,to{-webkit-transform:none;transform:none}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.39062deg) skewY(.39062deg);transform:skewX(.39062deg) skewY(.39062deg)}88.8%{-webkit-transform:skewX(-.19531deg) skewY(-.19531deg);transform:skewX(-.19531deg) skewY(-.19531deg)}}@keyframes jello{11.1%,from,to{-webkit-transform:none;transform:none}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.39062deg) skewY(.39062deg);transform:skewX(.39062deg) skewY(.39062deg)}88.8%{-webkit-transform:skewX(-.19531deg) skewY(-.19531deg);transform:skewX(-.19531deg) skewY(-.19531deg)}}.pathwayMapper .jello{-webkit-animation-name:jello;animation-name:jello;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes bounceIn{20%,40%,60%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes bounceIn{20%,40%,60%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.pathwayMapper .bounceIn{-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceInDown{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInDown{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}.pathwayMapper .bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInLeft{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}.pathwayMapper .bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInRight{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}.pathwayMapper .bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes bounceInUp{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}@keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}.pathwayMapper .bounceOut{-webkit-animation-name:bounceOut;animation-name:bounceOut}@-webkit-keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.pathwayMapper .bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.pathwayMapper .bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.pathwayMapper .bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.pathwayMapper .bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}.pathwayMapper .fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{from{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDownBig{from{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{from{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeft{from{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{from{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeftBig{from{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{from{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRight{from{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{from{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRightBig{from{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{from{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUp{from{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{from{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUpBig{from{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeOut{from{opacity:1}to{opacity:0}}@keyframes fadeOut{from{opacity:1}to{opacity:0}}.pathwayMapper .fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes fadeOutDown{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.pathwayMapper .fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes fadeOutDownBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.pathwayMapper .fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes fadeOutLeft{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.pathwayMapper .fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes fadeOutLeftBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.pathwayMapper .fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes fadeOutRight{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.pathwayMapper .fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes fadeOutRightBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.pathwayMapper .fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes fadeOutUp{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.pathwayMapper .fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes fadeOutUpBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.pathwayMapper .fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes flip{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.pathwayMapper .animated.flip{-webkit-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes flipInX{from{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{from{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.pathwayMapper .flipInX{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInX;animation-name:flipInX}.pathwayMapper .flipInY,.pathwayMapper .flipOutX{-webkit-backface-visibility:visible!important}@-webkit-keyframes flipInY{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.pathwayMapper .flipInY{backface-visibility:visible!important;-webkit-animation-name:flipInY;animation-name:flipInY}@-webkit-keyframes flipOutX{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}@keyframes flipOutX{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}.pathwayMapper .flipOutX{-webkit-animation-name:flipOutX;animation-name:flipOutX;backface-visibility:visible!important}@-webkit-keyframes flipOutY{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}@keyframes flipOutY{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}.pathwayMapper .flipOutY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipOutY;animation-name:flipOutY}@-webkit-keyframes lightSpeedIn{from{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}to{-webkit-transform:none;transform:none;opacity:1}}@keyframes lightSpeedIn{from{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}to{-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .lightSpeedIn{-webkit-animation-name:lightSpeedIn;animation-name:lightSpeedIn;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOut{from{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}@keyframes lightSpeedOut{from{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.pathwayMapper .lightSpeedOut{-webkit-animation-name:lightSpeedOut;animation-name:lightSpeedOut;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{from{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateIn{from{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn}@-webkit-keyframes rotateInDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft}@-webkit-keyframes rotateInDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight}@-webkit-keyframes rotateInUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft}@-webkit-keyframes rotateInUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.pathwayMapper .rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight}@-webkit-keyframes rotateOut{from{-webkit-transform-origin:center;transform-origin:center;opacity:1}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}@keyframes rotateOut{from{-webkit-transform-origin:center;transform-origin:center;opacity:1}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}.pathwayMapper .rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut}@-webkit-keyframes rotateOutDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}}@keyframes rotateOutDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}}.pathwayMapper .rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft}@-webkit-keyframes rotateOutDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.pathwayMapper .rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight}@-webkit-keyframes rotateOutUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.pathwayMapper .rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft}@-webkit-keyframes rotateOutUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}@keyframes rotateOutUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}.pathwayMapper .rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight}@-webkit-keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}@keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}.pathwayMapper .hinge{-webkit-animation-name:hinge;animation-name:hinge}@-webkit-keyframes rollIn{from{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes rollIn{from{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}to{opacity:1;-webkit-transform:none;transform:none}}.pathwayMapper .rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}@keyframes rollOut{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}.pathwayMapper .rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}.pathwayMapper .zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInDown{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInLeft{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInRight{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInUp{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes zoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}.pathwayMapper .zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown}@-webkit-keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}@keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}.pathwayMapper .zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft}@-webkit-keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}@keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}.pathwayMapper .zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight}@-webkit-keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.pathwayMapper .zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp}@-webkit-keyframes slideInDown{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInDown{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{from{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInLeft{from{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{from{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInRight{from{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideInUp{from{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInUp{from{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.pathwayMapper .slideInUp{-webkit-animation-name:slideInUp;animation-name:slideInUp}@-webkit-keyframes slideOutDown{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes slideOutDown{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.pathwayMapper .slideOutDown{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}@-webkit-keyframes slideOutLeft{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes slideOutLeft{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.pathwayMapper .slideOutLeft{-webkit-animation-name:slideOutLeft;animation-name:slideOutLeft}@-webkit-keyframes slideOutRight{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes slideOutRight{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.pathwayMapper .slideOutRight{-webkit-animation-name:slideOutRight;animation-name:slideOutRight}@-webkit-keyframes slideOutUp{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes slideOutUp{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.pathwayMapper .slideOutUp{-webkit-animation-name:slideOutUp;animation-name:slideOutUp}.pathwayMapper [data-notify=container][class*=alert-pathwayMapper-] .close{opacity:1;color:#fff;margin-top:7px;outline:0}.pathwayMapper [data-notify=container][class*=alert-pathwayMapper-] .close:hover{color:#fff}.pathwayMapper [data-notify=container].alert-pathwayMapper-success{background-color:#1abc9c;color:#fff}.pathwayMapper [data-notify=container].alert-pathwayMapper-fail{background-color:#ff2644;color:#fff}.pathwayMapper .toolbar{margin-bottom:5px;padding:5px;background-color:#eff0f2;border-radius:6px}.pathwayMapper .toolbar .toolbar-button{margin-left:-1px;margin-right:-1px;border:2px solid #eff0f2;border-radius:6px;display:inline-block;cursor:pointer}.pathwayMapper .toolbar .toolbar-button:hover{border-color:#1abc9c}.pathwayMapper .toolbar .toolbar-button-focused{border-color:#1abc9c!important}.pathwayMapper .toolbar .btn-group{margin-right:2px;margin-left:2px;border:2px solid #2f4154;padding:1px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.pathwayMapper .toolbar #searchGeneToolbar{float:right;margin-right:0!important;border:none!important}.pathwayMapper .toolbar .input-group.input-group-unstyled input.form-control{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.pathwayMapper .toolbar .input-group-unstyled .input-group-addon{border-radius:4px;border:0;background-color:transparent}.pathwayMapper .toolbar .form-group{margin:0!important}.pathwayMapper .control-label,.pathwayMapper .input-group input[type=checkbox]{margin-top:10px}.pathwayMapper .toolbar img{height:22px;margin-left:2px;margin-right:2px}.pathwayMapper .gridModal{width:350px!important}.pathwayMapper .geneSearchDiv input{border-radius:6px;border:2px solid #2b2b2d;box-shadow:none!important;-webkit-box-shadow:none!important;-moz-box-shadow:none!important;width:100%}.pathwayMapper .geneSearchDiv input:focus{border-color:#1abc9c;outline:0;border-style:solid;box-shadow:none!important;-webkit-box-shadow:none!important;-moz-box-shadow:none!important}.pathwayMapper body{background-color:#fff}.pathwayMapper input[type=color]{padding:2px}.pathwayMapper input[type=color]:hover{cursor:pointer}.pathwayMapper #colorPickerButton{padding-top:10px}.pathwayMapper .form-control:focus{border:2px solid #1abc9c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #1abc9c;color:#2f4154}.pathwayMapper .cy-panzoom{position:absolute}.pathwayMapper .cytoscape-navigatorView{background:#1abc9c}.pathwayMapper .cytoscape-navigator-wrapper{position:absolute;border:2px solid #2f4154;border-radius:6px;background:#fff;z-index:100;width:300px;height:200px;bottom:8.5%;right:3.5%;overflow:hidden}.pathwayMapper .btn:focus{outline:0!important}.pathwayMapper .pathwayPanel .fileNameContent{color:#2f4154;margin-bottom:10px;padding:5px;cursor:pointer;min-width:100px}.pathwayMapper .pathwayPanel div[contenteditable=true]:focus{outline:#1abc9c solid 2px;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #1abc9c;background-color:#fff}.pathwayMapper .pathwayPanel textarea{width:170px;height:50px;margin-bottom:10px;z-index:999999}.pathwayMapper .mainContentWrapper{display:flex}.pathwayMapper .sideBarWrapper{min-width:130px;max-width:130px;font-size:12px}.pathwayMapper .control-label{color:rgba(23,22,22,.78)!important;font-weight:300!important}.pathwayMapper .buttonContainer,.pathwayMapper .edgePaletteWrapper,.pathwayMapper .pnl .pnl-header{text-align:center}.pathwayMapper .input-group{margin-bottom:5px;width:100%}.pathwayMapper .input-group .form-control{border-radius:6px}.pathwayMapper .edgePaletteWrapper .list-group{margin-bottom:0!important}.pathwayMapper .edgePaletteWrapper .list-group .list-group-item{border:none!important}.pathwayMapper .edgePaletteWrapper .edge-palette .list-group-item.active,.pathwayMapper .edgePaletteWrapper .edge-palette .list-group-item.active:focus,.pathwayMapper .edgePaletteWrapper .edge-palette .list-group-item.active:hover{background-color:#1abc9c!important}.pathwayMapper .edgePaletteWrapper .edge-palette .list-group-item{padding:7px 5px}.pathwayMapper .edgePaletteWrapper .edge-palette a{margin-bottom:5px;border-radius:6px;font-size:12px}.pathwayMapper .edgePaletteWrapper .edge-palette a img{width:30px}.pathwayMapper footer{background-color:#eee;color:#393939;height:100%}.pathwayMapper .pageContentWrapper{margin-bottom:70px}.pathwayMapper .navbar-nav>.open>a,.pathwayMapper .navbar-nav>.open>a:focus,.pathwayMapper .navbar-nav>.open>a:hover{color:#fff!important;background-color:#1abc9c!important;border-left-color:transparent}.pathwayMapper .navbar-nav>.open>.dropdown-menu>li>a{color:#fff!important;border-radius:4px!important;font-size:12px!important}.pathwayMapper .navbar-nav>.open>.dropdown-menu{background-color:#2f4154!important}.pathwayMapper .navbar-nav>li>.dropdown-menu,.pathwayMapper .navbar-nav>li>.dropdown-submenu{border-radius:4px!important;border:none}.pathwayMapper .navbar-nav>.open>.dropdown-menu>li>a:focus,.pathwayMapper .navbar-nav>.open>.dropdown-menu>li>a:hover{color:#fff;background-color:#1abc9c}.pathwayMapper .navbar{border-radius:0 0 6px 6px;background-color:#2f4154;border:none!important;margin-bottom:5px!important}.pathwayMapper .navbar-nav a{transition:all .2s linear}.pathwayMapper .navbar-nav>li>a{color:#fff!important;font-weight:500!important;font-size:12px}.pathwayMapper .navbar-nav>li>a:hover{color:#1abc9c!important}.pathwayMapper .navbar-brand{color:#fff!important;font-size:16px;font-weight:700}.pathwayMapper .pnl{margin-bottom:10px;border-radius:6px;box-shadow:0 1px 1px rgba(0,0,0,.15),0 -1px 1px rgba(0,0,0,.15)}.pathwayMapper .pnl .pnl-header{background-color:#1abc9c;border-top-left-radius:6px;border-top-right-radius:6px;padding:8px 5px 5px;color:#fff;font-size:12px;font-weight:900}.pathwayMapper .pnl .pnl-body{background-color:#eff0f2;padding:4px 2px;border-bottom-left-radius:6px;border-bottom-right-radius:6px}.pathwayMapper .pnl .pnl-body .buttonContainer>button{border:none!important}.pathwayMapper .pnl .pnl-body .dragButtonContainer{width:115px;margin-left:auto;margin-right:auto}.pathwayMapper .customMargins{margin-left:3%!important;margin-right:3%!important}.pathwayMapper .leftPanelFix{padding-left:0}.pathwayMapper .hiddenfile{width:0;height:0;overflow:hidden}.pathwayMapper .buttonContainer{margin-bottom:5px}.pathwayMapper .buttonContainer button{font-size:12px;width:85%}.pathwayMapper .cyContainer{border:3px solid #1abc9c;height:780px;border-radius:6px;padding-right:0!important;padding-left:0!important;width:100%;margin-left:10px}.pathwayMapper #cy{height:100%}.pathwayMapper .html5tooltip-box{background-color:rgba(47,65,84,.92);border-radius:8px} \ No newline at end of file diff --git a/src/css/supp.css b/src/css/supp.css index 84705ded..03c4ff69 100644 --- a/src/css/supp.css +++ b/src/css/supp.css @@ -179,3 +179,7 @@ transform: scale(0.86); .pathwayMapper .smallToast { width: 325px; } + +.pathwayMapper #search-gene-input-group-addon:hover { + background-color: #fff; +} diff --git a/src/index.jsx b/src/index.jsx index 07afb6cc..d95921f4 100644 --- a/src/index.jsx +++ b/src/index.jsx @@ -5,7 +5,6 @@ import WelcomePage from "./ui/WelcomePage"; window.onload = () => { const rootEl = document.getElementById('app'); - console.log(window.location.search); const placeHolderGenes = [/*{hugoGeneSymbol: "TP53"}, {hugoGeneSymbol: "CDKN2A"}, {hugoGeneSymbol: "CCNE1"}, {hugoGeneSymbol: "MDM4"}*/]; @@ -20,8 +19,6 @@ window.onload = () => { genes = genesParam.split("+").map(gene => ({hugoGeneSymbol: gene})) } - console.log(genes); - const id = findGetParameter("id"); if(!id){ diff --git a/src/managers/ContextMenuManager.tsx b/src/managers/ContextMenuManager.tsx index 5ef22885..4ccece66 100644 --- a/src/managers/ContextMenuManager.tsx +++ b/src/managers/ContextMenuManager.tsx @@ -1,19 +1,17 @@ -import EditorActionsManager from "./EditorActionsManager"; import { EModalType } from "../ui/react-pathway-mapper"; +import EditorActionsManager from "./EditorActionsManager"; export default class ContextMenuManager { private cy: any; private editor: EditorActionsManager; - private isCBioPortal: boolean; private handleOpen: (modalId: EModalType) => void; private undoRedoManager: any; private isCollaborative: any; - constructor(cy: any, editor: EditorActionsManager, isCBioPortal: boolean, + constructor(cy: any, editor: EditorActionsManager, handleOpen: (modalId: EModalType) => void, undoRedoManager: any, isCollaborative: boolean){ this.cy = cy; this.editor = editor; - this.isCBioPortal = isCBioPortal; this.handleOpen = handleOpen; this.undoRedoManager = undoRedoManager; this.isCollaborative = isCollaborative; diff --git a/src/managers/EditorActionsManager.tsx b/src/managers/EditorActionsManager.tsx index c2d6bc9f..febe0f9f 100644 --- a/src/managers/EditorActionsManager.tsx +++ b/src/managers/EditorActionsManager.tsx @@ -1,12 +1,12 @@ -import ShareDBManager from "./ShareDBManager"; +import { action, makeObservable, observable } from "mobx"; +import LayoutProperties, { ILayoutProperties } from "../modals/LayoutProperties"; +import { IProfileMetaData } from "../ui/react-pathway-mapper"; import CBioPortalAccessor from "../utils/CBioPortalAccessor"; import SVGExporter from "../utils/SVGExporter"; import GenomicDataOverlayManager from "./GenomicDataOverlayManager"; -import { IProfileMetaData, IPathwayData } from "../ui/react-pathway-mapper"; -import { observable, makeObservable } from "mobx"; -import LayoutProperties, { ILayoutProperties } from "../modals/LayoutProperties"; +import ShareDBManager from "./ShareDBManager"; -const _ = require('underscore'); +const _ = require('lodash'); export default class EditorActionsManager{ @@ -54,8 +54,6 @@ export default class EditorActionsManager{ @observable private profiles: IProfileMetaData[]; - private modifyPathwayGeneMap: (pathwayData: IPathwayData, isRemove: boolean) => void; - constructor(isCollaborative: boolean, shareDBManager: any, cyInst: any, isCBioPortal: boolean, undoRedoManager: any, portalAccessor: CBioPortalAccessor, profiles: IProfileMetaData[]) @@ -116,6 +114,21 @@ export default class EditorActionsManager{ }; + @action.bound + setProfile(index: number, profile: IProfileMetaData) { + this.profiles[index] = profile; + } + + @action.bound + addProfile(profile: IProfileMetaData) { + this.profiles.push(profile); + } + + @action.bound + removeProfiles() { + this.profiles.length = 0; + } + handleChangePositionByAlignment(movedNodeArr: any) { if (this.isCollaborative) @@ -654,7 +667,6 @@ export default class EditorActionsManager{ { if (this.isCollaborative) { - console.log(edge, pubmedIDs); this.shareDBManager.addPubmedIDs(edge.id(), pubmedIDs); } else @@ -823,7 +835,6 @@ export default class EditorActionsManager{ { if (this.isCollaborative) { - console.log("Add node to DB"); this.addNewNodeToShareDB(nodeData, posData); } else @@ -842,8 +853,6 @@ export default class EditorActionsManager{ addNodesCy(nodes: any[]) { - console.log("From EAM/addNodesCy"); - console.log(nodes); var nodeArr: any[] = []; for (var i in nodes) { @@ -911,8 +920,6 @@ export default class EditorActionsManager{ shareDBNodeAddRemoveEventCallBack(op: any) { - console.log("shareDBNodeAddRemoveEventCallBack"); - console.log(op); //Get real time node object and sync it to node addition or removal var isRemove = Object.keys(op)[1] === 'od'; var node = op.oi || op.od; @@ -997,7 +1004,6 @@ export default class EditorActionsManager{ }; newEdges.push(newEdge); } - console.log("From addEdgesCy"); this.cy.add(newEdges); }; @@ -1244,7 +1250,6 @@ export default class EditorActionsManager{ id.push(ele.id()); }); - console.log(parentData); const parentElem = this.cy.getElementById(parentData); var param = { firstTime: true, @@ -1254,7 +1259,6 @@ export default class EditorActionsManager{ posDiffY: (!parentData) ? 0 : parentElem.position('y') - eles[0].position('y') }; this.undoRedoManager.do('changeParent', param); - console.log(this.undoRedoManager.getUndoStack()); //The elements after change parent operation are different so we find them by using the saved ids // and add them to the collection @@ -1264,7 +1268,6 @@ export default class EditorActionsManager{ var elementById = this.cy.getElementById(id[i]); collection = collection.add(elementById); } - console.log(collection); //Set their previous size to the new elements in the collection collection.forEach(function (ele: any, i: number) { @@ -1542,7 +1545,6 @@ export default class EditorActionsManager{ if (this.isCollaborative) { //Real time load graph - console.log("Real time load graph"); this.loadfileShareDB(nodes, edges); } else @@ -1701,10 +1703,6 @@ export default class EditorActionsManager{ addGenomicData(genomicData: any) { const groupID = this.getEmptyGroupID(); - - console.log("genomicData"); - console.log(genomicData); - if(this.isCollaborative) { @@ -1722,7 +1720,10 @@ export default class EditorActionsManager{ adjustVisibilityShareDB(profileId: string, isEnabled: boolean){ const targetProfileIndex = this.profiles.map(profile => profile.profileId).indexOf(profileId); - this.profiles[targetProfileIndex].enabled = isEnabled; + this.setProfile(targetProfileIndex, { + ...this.profiles[targetProfileIndex], + enabled: isEnabled + }); } addToProfiles(profileId: string){ @@ -1731,7 +1732,10 @@ export default class EditorActionsManager{ return; } - this.profiles.push({profileId: profileId, enabled: true}); + this.addProfile({ + profileId: profileId, + enabled: true + }); } addPortalGenomicData(genomicData: any, groupID: any) @@ -1782,9 +1786,6 @@ export default class EditorActionsManager{ if(!isRemove) { this.genomicDataOverlayManager.addGenomicGroupData(key, data); - console.log("key"); - console.log(key); - console.log(data); if(data.length !== 1){ console.log("Grouped genomic data expected to be of length 1"); } @@ -1814,9 +1815,8 @@ export default class EditorActionsManager{ // Removal else { - console.log("Removal from vis handler"); this.genomicDataOverlayManager.removeGenomicVisData(); - this.profiles.length = 0; + this.removeProfiles(); } this.genomicDataOverlayManager.showGenomicData(); diff --git a/src/managers/FileOperationsManager.tsx b/src/managers/FileOperationsManager.tsx index 9cfbdcb4..6ce021bd 100644 --- a/src/managers/FileOperationsManager.tsx +++ b/src/managers/FileOperationsManager.tsx @@ -1,9 +1,7 @@ -import SaveLoadUtilities from '../utils/SaveLoadUtility.js'; -import {saveAs} from 'file-saver'; -import EditorActionsManager from './EditorActionsManager.js'; -import { observable, computed, makeObservable } from 'mobx'; +import { saveAs } from 'file-saver'; +import { action, computed, makeObservable, observable } from 'mobx'; import SaveLoadUtility from '../utils/SaveLoadUtility'; - +import EditorActionsManager from './EditorActionsManager.js'; export interface IPathwayInfo{ fileName: string; @@ -11,7 +9,6 @@ export interface IPathwayInfo{ pathwayDetails: string; } - export default class FileOperationsManager{ @observable @@ -28,6 +25,7 @@ export default class FileOperationsManager{ return this.pathwayInfo; } + @action setPathwayInfo(other: IPathwayInfo){ this.pathwayInfo = other; } diff --git a/src/managers/GenomicDataOverlayManager.ts b/src/managers/GenomicDataOverlayManager.ts index 8aa1e7f3..338bf909 100644 --- a/src/managers/GenomicDataOverlayManager.ts +++ b/src/managers/GenomicDataOverlayManager.ts @@ -1,6 +1,5 @@ -import { Console } from 'console' -import { GeneticAlterationRuleSet, shapeToSvg } from 'oncoprintjs' import $ from 'jquery' +import { GeneticAlterationRuleSet, shapeToSvg } from 'oncoprintjs' export default class GenomicDataOverlayManager { public genomicDataMap: {} @@ -9,7 +8,6 @@ export default class GenomicDataOverlayManager { public groupedGenomicDataMap: {} public patientData: any private DEFAULT_VISIBLE_GENOMIC_DATA_COUNT: number - private MAX_VISIBLE_GENOMIC_DATA_COUNT: number private observers: any[] private cy: any constructor(cy: any) { @@ -20,7 +18,6 @@ export default class GenomicDataOverlayManager { this.groupedGenomicDataMap = {} this.groupedGenomicDataCount = 0 this.DEFAULT_VISIBLE_GENOMIC_DATA_COUNT = 3 - this.MAX_VISIBLE_GENOMIC_DATA_COUNT = 6 // Observer-observable pattern related stuff this.observers = [] @@ -98,7 +95,7 @@ export default class GenomicDataOverlayManager { } //This parameter is used as flag for PatientView PathwayMapper Functions if (data['PatientView'] == 1) { - this.patientData = data; + this.patientData = data this.showPatientData() } else { this.showGenomicData() @@ -377,9 +374,6 @@ export default class GenomicDataOverlayManager { return } - //console.log('Inside showGenomicData') - //console.log(this.cy) - this.cy .style() .selector('node[type="GENE"]') @@ -484,7 +478,7 @@ export default class GenomicDataOverlayManager { showPatientData() { const self = this - const data = this.patientData; + const data = this.patientData // const genomicDataBoxCount = 3 //this.countVisibleGenomicDataByType(); //CHANGE const genomicDataBoxCount = data.geneticTrackData @@ -527,13 +521,14 @@ export default class GenomicDataOverlayManager { }) .update() - this.cy.on('mouseover', 'node[type="GENE"]', function(event) { - var node = event.target || event.cyTarget - const nodeLabel = node.data('name') - if (!data[nodeLabel]) { - return - } - node.qtip({ + this.cy.on('mouseover', 'node[type="GENE"]', function(event) { + var node = event.target || event.cyTarget + const nodeLabel = node.data('name') + if (!data[nodeLabel]) { + return + } + node.qtip( + { content: { text: function() { return self.generateHTMLContentForNodeTooltip(node, data) @@ -543,14 +538,16 @@ export default class GenomicDataOverlayManager { classes: 'qtip-light qtip-rounded' }, show: { - event: "showqtipevent" + event: 'showqtipevent' }, hide: { event: 'mouseout' } - }, event); - node.trigger("showqtipevent") - }) + }, + event + ) + node.trigger('showqtipevent') + }) } //Every mutation type has a unique color coded. This method is used to retrieve the colors @@ -713,7 +710,7 @@ export default class GenomicDataOverlayManager { generateOncoprintForPatientNode(ele) { // const dataURI = 'data:image/svg+xml;utf8,' // nodeLabel refers to the nodeLabels in the overlay data - const patientData = this.patientData; + const patientData = this.patientData const nodeLabel = ele.data('name') const genomicData = patientData[nodeLabel] @@ -764,57 +761,62 @@ export default class GenomicDataOverlayManager { } // Mapping of alteration type keys to strings - // See: https://github.com/cBioPortal/cbioportal-frontend/blob/442e108208846255feb1ed5b309218cd44927fb9/src/shared/components/oncoprint/TooltipUtils.ts#L599 + // See: https://github.com/cBioPortal/cbioportal-frontend/blob/442e108208846255feb1ed5b309218cd44927fb9/src/shared/components/oncoprint/TooltipUtils.ts#L599 getCNADisplayString(alterationTypeKey: number) { const disp_cna: { [integerCN: string]: string } = { '-2': 'HOMODELETED', '-1': 'HETLOSS', '1': 'GAIN', - '2': 'AMPLIFIED', + '2': 'AMPLIFIED' } return disp_cna[alterationTypeKey] } generateSvgIconForSample(iconColor: string, iconText: string) { - - var html = '' + - '' + - '' + - '' + - '' + + var html = + '' + + '' + + '' + + '' + + '' + '' + - iconText +'' + - '' +'' + iconText + + '' + + '' + + '' - return html; + return html } generateHTMLContentForNodeTooltip(ele, patientData) { - - const tooltipMaxHeight = '200px'; + const tooltipMaxHeight = '200px' const tooltipMaxWidth = '200px' - const marginBetweenSamples = '10px'; + const marginBetweenSamples = '10px' const sampleIconColorMap = patientData.sampleColors const sampleIndexMap = patientData.sampleIndex - const nodeLabel = ele.data('name') + const nodeLabel = ele.data('name') const data = patientData[nodeLabel] // Outer wrapper for the entire tooltip var wrapper = $('
') wrapper.css({ - 'max-width' : tooltipMaxWidth, + 'max-width': tooltipMaxWidth, 'max-height': tooltipMaxHeight, - 'word-wrap' : 'break-word', + 'word-wrap': 'break-word', 'overflow-y': 'auto' }) data.geneticTrackData.forEach((sample, sampleIndex) => { - const sampleId = sample.sample - const iconColor = sampleIconColorMap[sampleId]; - const iconText = (sampleIndexMap[sampleId] + 1).toString(); - const sampleIconSvgHTML = this.generateSvgIconForSample(iconColor, iconText); + const iconColor = sampleIconColorMap[sampleId] + const iconText = (sampleIndexMap[sampleId] + 1).toString() + const sampleIconSvgHTML = this.generateSvgIconForSample( + iconColor, + iconText + ) const margin = sampleIndex > 0 ? marginBetweenSamples : '0px' @@ -823,7 +825,7 @@ export default class GenomicDataOverlayManager { sampleWrapper.css({ 'margin-top': margin }) - + const sampleData = sample.data var mutationInfo = [] var cnaInfo = [] @@ -831,7 +833,11 @@ export default class GenomicDataOverlayManager { sampleData.forEach(data => { const geneSymbol = data.gene.hugoGeneSymbol - if (sample.disp_mut && data.proteinChange && data.mutationType !== 'Fusion') { + if ( + sample.disp_mut && + data.proteinChange && + data.mutationType !== 'Fusion' + ) { const proteinChange = data.proteinChange mutationInfo.push({ gene: geneSymbol, @@ -848,59 +854,66 @@ export default class GenomicDataOverlayManager { }) } - if (sample.disp_fusion && data.proteinChange && data.mutationType === 'Fusion') { + if ( + sample.disp_fusion && + data.proteinChange && + data.mutationType === 'Fusion' + ) { const proteinChange = data.proteinChange fusionInfo.push({ gene: geneSymbol, proteinChange: proteinChange }) } - - }); + }) // Prepare HTML for tooltip var mutationInfoHTML = mutationInfo.length > 0 ? 'Mutation: ' : '' - var cnaInfoHTML = cnaInfo.length > 0 ? 'CNA: ': '' + var cnaInfoHTML = cnaInfo.length > 0 ? 'CNA: ' : '' var fusionInfoHTML = fusionInfo.length > 0 ? 'Fusion: ' : '' mutationInfo.forEach((mutation, index) => { - mutationInfoHTML += "" + mutation.gene + " " - + mutation.proteinChange + "" + mutationInfoHTML += + '' + mutation.gene + ' ' + mutation.proteinChange + '' if (index !== mutationInfo.length - 1) { - mutationInfoHTML += ", " - } - else { - mutationInfoHTML += "
" + mutationInfoHTML += ', ' + } else { + mutationInfoHTML += '
' } }) cnaInfo.forEach((cna, index) => { - cnaInfoHTML += "" + cna.gene + " " + cna.cnaLabel + "" + cnaInfoHTML += '' + cna.gene + ' ' + cna.cnaLabel + '' if (index !== cnaInfo.length - 1) { - cnaInfoHTML += ", " - } - else { - cnaInfoHTML += "
" + cnaInfoHTML += ', ' + } else { + cnaInfoHTML += '
' } }) fusionInfo.forEach((fusion, index) => { - fusionInfoHTML += "" + fusion.gene + " " + fusion.proteinChange + "" + fusionInfoHTML += + '' + fusion.gene + ' ' + fusion.proteinChange + '' if (index !== fusionInfo.length - 1) { - fusionInfoHTML += ", " - } - else { - fusionInfoHTML += "
" + fusionInfoHTML += ', ' + } else { + fusionInfoHTML += '
' } }) - const sampleIdHTML = " " + sampleId + "" + "
" - sampleWrapper.append($('
' + sampleIconSvgHTML + sampleIdHTML - + mutationInfoHTML + cnaInfoHTML - + fusionInfoHTML + - + '
')) + const sampleIdHTML = ' ' + sampleId + '' + '
' + sampleWrapper.append( + $( + '
' + + sampleIconSvgHTML + + sampleIdHTML + + mutationInfoHTML + + cnaInfoHTML + + fusionInfoHTML + + +'
' + ) + ) wrapper.append(sampleWrapper) - }); + }) return wrapper } - } diff --git a/src/managers/QtipManager.tsx b/src/managers/QtipManager.tsx index 6d5adf6f..3d8b02ee 100644 --- a/src/managers/QtipManager.tsx +++ b/src/managers/QtipManager.tsx @@ -1,5 +1,5 @@ -import EditorActionsManager from "./EditorActionsManager"; import $ from 'jquery'; +import EditorActionsManager from "./EditorActionsManager"; export default class QtipManager{ private cy: any; private editor: any; @@ -16,14 +16,10 @@ export default class QtipManager{ var pubmedIDList = $('
'); var pubmedURL = 'https://www.ncbi.nlm.nih.gov/pubmed/'; var pubmedData = edge.data('pubmedIDs'); - console.log("edge.data('pubmedIDs')"); - console.log(edge.data('pubmedIDs')); var edgeLabelInput = $('
'); - function generatePubmedLinks(argData, isInitialDisplay) + function generatePubmedLinks(argData) { - console.log(argData); - console.log(self.cy.edges()); for (var key in argData) { if(!argData.hasOwnProperty(key)){ @@ -70,7 +66,7 @@ export default class QtipManager{ if (pubmedData.length > 0) { generatePubmedLinksHeader(); - generatePubmedLinks(pubmedData, true); + generatePubmedLinks(pubmedData); } textInput.change(function() @@ -87,7 +83,7 @@ export default class QtipManager{ self.editor.addPubmedIDs(edge, pumbedIDs); - generatePubmedLinks(pumbedIDs, false); + generatePubmedLinks(pumbedIDs); }); @@ -166,7 +162,7 @@ export default class QtipManager{ addQtipToElements(eles) { var self = this; - eles.forEach(function(ele,i) + eles.forEach(function(ele,) { var qTipOpts = {}; if (ele.isNode()) diff --git a/src/managers/ShareDBManager.tsx b/src/managers/ShareDBManager.tsx index 8eb4a149..a7756107 100644 --- a/src/managers/ShareDBManager.tsx +++ b/src/managers/ShareDBManager.tsx @@ -1,5 +1,5 @@ import EditorActionsManager from "./EditorActionsManager"; -import _ from "underscore"; +import _ from "lodash"; import GraphUtilities from "../utils/GraphUtilities"; let sharedb; @@ -90,9 +90,6 @@ export default class ShareDBManager { */ insertShareDBObject(mapName, objectKey, object) { this.doc.submitOp([{p: [mapName, objectKey], oi: object}], this.shareDBError); - console.log("this.doc"); - console.log(this.doc); - console.log(mapName, objectKey, object); }; /* @@ -224,9 +221,6 @@ export default class ShareDBManager { //Create new shared document createNewDocument(); } - - console.log("this.doc"); - console.log(this.doc); }; /* @@ -364,9 +358,6 @@ export default class ShareDBManager { } - console.log("visDataMap"); - console.log(visDataMap); - for (const key_g of Object.keys(groupedGenomicDataMap)) { this.editor.genomicDataOverlayManager.groupedGenomicDataMap[key_g] = groupedGenomicDataMap[key_g]; @@ -1056,7 +1047,6 @@ export default class ShareDBManager { //Create graph hierarchy from given list of flat nodes var tree = this.graphUtilities.createGraphHierarchyRealTime(nodes); - console.log(tree) //Traverse from root nodes of tree for (const rootLevelNode of tree) { traverseTree(rootLevelNode, undefined); @@ -1067,7 +1057,6 @@ export default class ShareDBManager { real time */ for (const edge of edges) { - console.log(edge); edge.data.source = oldIdNewIdMap[edge.data.source]; edge.data.target = oldIdNewIdMap[edge.data.target]; var params = edge.data; diff --git a/src/managers/ViewOperationsManager.tsx b/src/managers/ViewOperationsManager.tsx index 2fa4610b..298f73ea 100644 --- a/src/managers/ViewOperationsManager.tsx +++ b/src/managers/ViewOperationsManager.tsx @@ -25,7 +25,7 @@ export default class ViewOperationsManager{ nodes = nodes.add(tmpNodes[key]); } - nodes.forEach(function(node,index) + nodes.forEach(function(node) { if (node.isParent()) { diff --git a/src/modals/AboutModal.tsx b/src/modals/AboutModal.tsx index 1e3ad468..60ff2a2d 100644 --- a/src/modals/AboutModal.tsx +++ b/src/modals/AboutModal.tsx @@ -1,15 +1,9 @@ import React from 'react'; -import {Modal} from 'react-bootstrap'; - -// @ts-ignore -import iVisImg from "../about/i-vis.png"; -// @ts-ignore -import mskccImg from "../about/mskcc.png"; +import { Modal } from 'react-bootstrap'; import { EModalType } from '../ui/react-pathway-mapper'; interface IAboutModalProps{ isModalShown: boolean; handleClose: Function; - } export default class AboutModal extends React.Component { @@ -18,7 +12,6 @@ export default class AboutModal extends React.Component { super(props); } - render(){ @@ -29,9 +22,7 @@ export default class AboutModal extends React.Component { onHide={() => {this.props.handleClose(EModalType.ABOUT)}} > - -

About

-
+ About

PathwayMapper 2.1

diff --git a/src/modals/CBioHelpModal.tsx b/src/modals/CBioHelpModal.tsx index fdb2aa72..0955a398 100644 --- a/src/modals/CBioHelpModal.tsx +++ b/src/modals/CBioHelpModal.tsx @@ -1,22 +1,19 @@ +import { shapeToSvg } from 'oncoprintjs'; import React from 'react'; -import { EModalType } from '../ui/react-pathway-mapper'; -import {Modal} from 'react-bootstrap'; -import {shapeToSvg} from 'oncoprintjs'; -import $ from 'jquery'; +import { Modal } from 'react-bootstrap'; +// @ts-ignore +import openImage from "../images/toolbar/edit.svg"; // @ts-ignore import layoutImage from "../images/toolbar/layout-cose.svg"; // @ts-ignore import savePNGImage from "../images/toolbar/save_png.svg"; // @ts-ignore import saveSVGImage from "../images/toolbar/save_svg.svg"; +import { EModalType } from '../ui/react-pathway-mapper'; // @ts-ignore const addSelImage = require("../images/toolbar/add-selected.svg"); // @ts-ignore const addAllImage = require("../images/toolbar/add-all.svg"); -// @ts-ignore -import openImage from "../images/toolbar/edit.svg"; -// @ts-ignore -import patientImage from "../images/toolbar/PatientViewHelp.png"; interface ICBioHelpModalProps{ @@ -27,12 +24,8 @@ interface ICBioHelpModalProps{ // https://github.com/cBioPortal/cbioportal-frontend/blob/29a93c5e992ca1affd3d027355015164ae3602bd/src/shared/lib/Colors.ts const CNA_COLOR_AMP = '#ff0000'; -const CNA_COLOR_GAIN = '#ffb6c1'; -const CNA_COLOR_HETLOSS = '#8fd8d8'; const CNA_COLOR_HOMDEL = '#0000ff'; const DEFAULT_GREY = '#bebebe'; -const MRNA_COLOR_HIGH = '#ff9999'; -const MRNA_COLOR_LOW = '#6699cc'; const MUT_COLOR_MISSENSE = '#008000'; const MUT_COLOR_MISSENSE_PASSENGER = '#53D400'; const MUT_COLOR_INFRAME = '#993404'; @@ -43,8 +36,6 @@ const MUT_COLOR_FUSION = '#8B00C9'; const MUT_COLOR_PROMOTER = '#00B7CE'; const MUT_COLOR_OTHER = '#cf58bc'; const MUT_COLOR_GERMLINE = '#FFFFFF'; -const PROT_COLOR_HIGH = '#ff3df8'; -const PROT_COLOR_LOW = '#00E1FF'; // always used shape const defaultShape = { @@ -178,7 +169,6 @@ export default class CBioHelpModal extends React.Component{ constructor(props: ICBioHelpModalProps){ super(props); - console.log("CBioModal", this.props.patientView) } generateOncoprintLegend() { @@ -235,7 +225,7 @@ export default class CBioHelpModal extends React.Component{ return( {this.props.handleClose(EModalType.CHELP)}}> - PathwayMapper cBioPortal Edition 2.0 + PathwayMapper cBioPortal Edition 2.1 {(!this.props.patientView && diff --git a/src/modals/ConfirmationModal.tsx b/src/modals/ConfirmationModal.tsx index 2a01fe10..c38f56ed 100644 --- a/src/modals/ConfirmationModal.tsx +++ b/src/modals/ConfirmationModal.tsx @@ -25,9 +25,7 @@ export default class ConfirmationModal extends React.Component {this.props.handleClose(EModalType.CONFIRMATION);}} > - -

Confirmation

-
+ Confirmation
diff --git a/src/modals/GridSettings.tsx b/src/modals/GridSettings.tsx index b829676a..25427e96 100644 --- a/src/modals/GridSettings.tsx +++ b/src/modals/GridSettings.tsx @@ -1,11 +1,10 @@ +import { makeObservable, observable } from 'mobx'; +import { observer } from 'mobx-react'; import React from 'react'; -import {Modal, Form, FormGroup, Col, Row, FormControl, ControlLabel, Checkbox, Button, InputGroup} from 'react-bootstrap'; -import { EModalType } from '../ui/react-pathway-mapper'; -import EditorActionsManager from '../managers/EditorActionsManager'; +import { Button, Checkbox, Col, ControlLabel, Form, FormControl, InputGroup, Modal } from 'react-bootstrap'; import GridOptionsManager from '../managers/GridOptionsManager'; +import { EModalType } from '../ui/react-pathway-mapper'; import PathwayActions from '../utils/PathwayActions'; -import { observer } from 'mobx-react'; -import { makeObservable, observable } from 'mobx'; interface IGridSettingsProps{ isModalShown: boolean; handleClose: Function; diff --git a/src/modals/LayoutProperties.tsx b/src/modals/LayoutProperties.tsx index 3c776bee..09fc1915 100644 --- a/src/modals/LayoutProperties.tsx +++ b/src/modals/LayoutProperties.tsx @@ -1,11 +1,10 @@ +import _ from 'lodash'; +import { observer } from 'mobx-react'; import React from 'react'; -import { EModalType } from '../ui/react-pathway-mapper'; -import {Modal, Form, InputGroup, ControlLabel, Col, FormControl, Checkbox, Button} from 'react-bootstrap'; +import { Button, Checkbox, Col, ControlLabel, Form, FormControl, InputGroup, Modal } from 'react-bootstrap'; import EditorActionsManager from '../managers/EditorActionsManager'; -import _ from 'lodash'; +import { EModalType } from '../ui/react-pathway-mapper'; import PathwayActions from '../utils/PathwayActions'; -import { observable, makeObservable } from 'mobx'; -import { observer } from 'mobx-react'; interface ILayoutPropertiesProps{ isModalShown: boolean; diff --git a/src/modals/PathwayDetailsModal.tsx b/src/modals/PathwayDetailsModal.tsx index 61aeb1ba..166da6b2 100644 --- a/src/modals/PathwayDetailsModal.tsx +++ b/src/modals/PathwayDetailsModal.tsx @@ -1,9 +1,9 @@ -import React from 'react'; -import {Modal, Form, FormGroup, FormControl, Col, Button, InputGroup, ControlLabel} from 'react-bootstrap'; import { observer } from 'mobx-react'; -import PathwayActions from '../utils/PathwayActions'; +import React from 'react'; +import { Button, Col, ControlLabel, Form, FormControl, InputGroup, Modal } from 'react-bootstrap'; import { IPathwayInfo } from '../managers/FileOperationsManager'; import { EModalType } from '../ui/react-pathway-mapper'; +import PathwayActions from '../utils/PathwayActions'; interface IPathwayDetailsModalProps{ isModalShown: boolean; @@ -28,7 +28,7 @@ export default class PathwayDetailsModal extends React.Component {this.props.handleClose(4)}}> -

Pathway Properties

+ Pathway Properties
diff --git a/src/modals/ProfilesModal.tsx b/src/modals/ProfilesModal.tsx index f464639f..f7b531ab 100644 --- a/src/modals/ProfilesModal.tsx +++ b/src/modals/ProfilesModal.tsx @@ -1,14 +1,15 @@ -import React from "react"; -import {Label, Modal} from "react-bootstrap"; +import { computed, makeObservable } from "mobx"; import { observer } from "mobx-react"; -import { IProfileMetaData, EModalType } from "../ui/react-pathway-mapper"; +import React from "react"; +import { Label, Modal } from "react-bootstrap"; import EditorActionsManager from "../managers/EditorActionsManager"; -import { computed, makeObservable } from "mobx"; +import { EModalType, IProfileMetaData } from "../ui/react-pathway-mapper"; interface IProfilesModalProps { profiles: IProfileMetaData[]; editor: EditorActionsManager; isModalShown: boolean; handleClose: Function; + handleProfileLabelClicked: (index: number) => void; } @observer @@ -23,29 +24,38 @@ export default class ProfilesModal extends React.Component {profileEnabledMap[profile.profileId] = profile.enabled}); - console.log(profileEnabledMap); return profileEnabledMap; } + handleProfileLabelClicked(index: number) { + this.props.handleProfileLabelClicked(index); + } + render(){ const profileLabels = this.props.profiles.map((profile: IProfileMetaData, i: number) => - [,
,
]); + + +
+
+
+ ); return ( {this.props.handleClose(EModalType.PROFILES)}}> -

Genomic Data Set(s) to Show

+ Genomic Data Set(s) to Show
{(profileLabels.length > 0 ? profileLabels :

There is currently no data to show

)} diff --git a/src/modals/QuickHelpModal.tsx b/src/modals/QuickHelpModal.tsx index d5105c91..5efc8e08 100644 --- a/src/modals/QuickHelpModal.tsx +++ b/src/modals/QuickHelpModal.tsx @@ -18,7 +18,7 @@ export default class QuickHelpModal extends React.Component {this.props.handleClose(EModalType.HELP)}}> -

Quick Help

+ Quick Help