diff --git a/.gitignore b/.gitignore index 0573d59e1b859b5ce4ee860390c2a53063108bbb..e58cf2f2d0169a17d667c275a6387545ac4ddc42 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ workspace.xml .idea/workspace.xml npm-debug.log .editorconfig +dist/ diff --git a/dist/index.html b/dist/index.html deleted file mode 100644 index 59b46387f4a1e3be088ccf753e9e6b2bad61a1bc..0000000000000000000000000000000000000000 --- a/dist/index.html +++ /dev/null @@ -1,4 +0,0 @@ -vue-admin
\ No newline at end of file diff --git a/dist/static/css/app.775b7fd9ca97ed4dc588a8de48e5e432.css b/dist/static/css/app.775b7fd9ca97ed4dc588a8de48e5e432.css deleted file mode 100644 index b6765350e422f2d95f5145282cf3a1d99d549f7b..0000000000000000000000000000000000000000 --- a/dist/static/css/app.775b7fd9ca97ed4dc588a8de48e5e432.css +++ /dev/null @@ -1,4 +0,0 @@ -body{padding:0;font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei,SimSun,sans-serif;font-size:14px;-webkit-font-smoothing:antialiased}#app{position:absolute;top:0;bottom:0;width:100%}.el-menu-item [class^=fa],.el-submenu [class^=fa]{vertical-align:baseline;margin-right:10px}.toolbar{background:#f2f2f2;padding:10px;margin:10px 0}.toolbar .el-form-item{margin-bottom:10px}.fade-enter-active,.fade-leave-active{transition:all .2s ease}.fade-enter,.fade-leave-active{opacity:0}.fork-me-github{position:absolute;top:0;right:0;border:0}.alipay-adv{position:fixed;right:20px;bottom:0;width:300px;height:auto}.alipay-adv img{width:100%}.close-adv{position:absolute;right:8px;top:-15px;background:#fff;padding:0 5px;font-size:12px;cursor:pointer}/*! normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit;font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}[hidden],template{display:none}.el-pagination--small .arrow.disabled,.el-table--hidden,.el-table .hidden-columns,.el-table td.is-hidden>*,.el-table th.is-hidden>*{visibility:hidden}.el-input__suffix,.el-tree.is-dragging .el-tree-node__content *{pointer-events:none}.el-dropdown .el-dropdown-selfdefine:focus:active,.el-dropdown .el-dropdown-selfdefine:focus:not(.focusing),.el-message__closeBtn:focus,.el-message__content:focus,.el-popover:focus,.el-popover:focus:active,.el-popover__reference:focus:hover,.el-popover__reference:focus:not(.focusing),.el-rate:active,.el-rate:focus,.el-tooltip:focus:hover,.el-tooltip:focus:not(.focusing),.el-upload-list__item.is-success:active,.el-upload-list__item.is-success:not(.focusing):focus{outline-width:0}@font-face{font-family:element-icons;src:url(/static/fonts/element-icons.535877f.woff) format("woff"),url(/static/fonts/element-icons.732389d.ttf) format("truetype");font-weight:400;font-display:"auto";font-style:normal}[class*=" el-icon-"],[class^=el-icon-]{font-family:element-icons!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;vertical-align:baseline;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-icon-ice-cream-round:before{content:"\E6A0"}.el-icon-ice-cream-square:before{content:"\E6A3"}.el-icon-lollipop:before{content:"\E6A4"}.el-icon-potato-strips:before{content:"\E6A5"}.el-icon-milk-tea:before{content:"\E6A6"}.el-icon-ice-drink:before{content:"\E6A7"}.el-icon-ice-tea:before{content:"\E6A9"}.el-icon-coffee:before{content:"\E6AA"}.el-icon-orange:before{content:"\E6AB"}.el-icon-pear:before{content:"\E6AC"}.el-icon-apple:before{content:"\E6AD"}.el-icon-cherry:before{content:"\E6AE"}.el-icon-watermelon:before{content:"\E6AF"}.el-icon-grape:before{content:"\E6B0"}.el-icon-refrigerator:before{content:"\E6B1"}.el-icon-goblet-square-full:before{content:"\E6B2"}.el-icon-goblet-square:before{content:"\E6B3"}.el-icon-goblet-full:before{content:"\E6B4"}.el-icon-goblet:before{content:"\E6B5"}.el-icon-cold-drink:before{content:"\E6B6"}.el-icon-coffee-cup:before{content:"\E6B8"}.el-icon-water-cup:before{content:"\E6B9"}.el-icon-hot-water:before{content:"\E6BA"}.el-icon-ice-cream:before{content:"\E6BB"}.el-icon-dessert:before{content:"\E6BC"}.el-icon-sugar:before{content:"\E6BD"}.el-icon-tableware:before{content:"\E6BE"}.el-icon-burger:before{content:"\E6BF"}.el-icon-knife-fork:before{content:"\E6C1"}.el-icon-fork-spoon:before{content:"\E6C2"}.el-icon-chicken:before{content:"\E6C3"}.el-icon-food:before{content:"\E6C4"}.el-icon-dish-1:before{content:"\E6C5"}.el-icon-dish:before{content:"\E6C6"}.el-icon-moon-night:before{content:"\E6EE"}.el-icon-moon:before{content:"\E6F0"}.el-icon-cloudy-and-sunny:before{content:"\E6F1"}.el-icon-partly-cloudy:before{content:"\E6F2"}.el-icon-cloudy:before{content:"\E6F3"}.el-icon-sunny:before{content:"\E6F6"}.el-icon-sunset:before{content:"\E6F7"}.el-icon-sunrise-1:before{content:"\E6F8"}.el-icon-sunrise:before{content:"\E6F9"}.el-icon-heavy-rain:before{content:"\E6FA"}.el-icon-lightning:before{content:"\E6FB"}.el-icon-light-rain:before{content:"\E6FC"}.el-icon-wind-power:before{content:"\E6FD"}.el-icon-baseball:before{content:"\E712"}.el-icon-soccer:before{content:"\E713"}.el-icon-football:before{content:"\E715"}.el-icon-basketball:before{content:"\E716"}.el-icon-ship:before{content:"\E73F"}.el-icon-truck:before{content:"\E740"}.el-icon-bicycle:before{content:"\E741"}.el-icon-mobile-phone:before{content:"\E6D3"}.el-icon-service:before{content:"\E6D4"}.el-icon-key:before{content:"\E6E2"}.el-icon-unlock:before{content:"\E6E4"}.el-icon-lock:before{content:"\E6E5"}.el-icon-watch:before{content:"\E6FE"}.el-icon-watch-1:before{content:"\E6FF"}.el-icon-timer:before{content:"\E702"}.el-icon-alarm-clock:before{content:"\E703"}.el-icon-map-location:before{content:"\E704"}.el-icon-delete-location:before{content:"\E705"}.el-icon-add-location:before{content:"\E706"}.el-icon-location-information:before{content:"\E707"}.el-icon-location-outline:before{content:"\E708"}.el-icon-location:before{content:"\E79E"}.el-icon-place:before{content:"\E709"}.el-icon-discover:before{content:"\E70A"}.el-icon-first-aid-kit:before{content:"\E70B"}.el-icon-trophy-1:before{content:"\E70C"}.el-icon-trophy:before{content:"\E70D"}.el-icon-medal:before{content:"\E70E"}.el-icon-medal-1:before{content:"\E70F"}.el-icon-stopwatch:before{content:"\E710"}.el-icon-mic:before{content:"\E711"}.el-icon-copy-document:before{content:"\E718"}.el-icon-full-screen:before{content:"\E719"}.el-icon-switch-button:before{content:"\E71B"}.el-icon-aim:before{content:"\E71C"}.el-icon-crop:before{content:"\E71D"}.el-icon-odometer:before{content:"\E71E"}.el-icon-time:before{content:"\E71F"}.el-icon-bangzhu:before{content:"\E724"}.el-icon-close-notification:before{content:"\E726"}.el-icon-microphone:before{content:"\E727"}.el-icon-turn-off-microphone:before{content:"\E728"}.el-icon-position:before{content:"\E729"}.el-icon-postcard:before{content:"\E72A"}.el-icon-message:before{content:"\E72B"}.el-icon-chat-line-square:before{content:"\E72D"}.el-icon-chat-dot-square:before{content:"\E72E"}.el-icon-chat-dot-round:before{content:"\E72F"}.el-icon-chat-square:before{content:"\E730"}.el-icon-chat-line-round:before{content:"\E731"}.el-icon-chat-round:before{content:"\E732"}.el-icon-set-up:before{content:"\E733"}.el-icon-turn-off:before{content:"\E734"}.el-icon-open:before{content:"\E735"}.el-icon-connection:before{content:"\E736"}.el-icon-link:before{content:"\E737"}.el-icon-cpu:before{content:"\E738"}.el-icon-thumb:before{content:"\E739"}.el-icon-female:before{content:"\E73A"}.el-icon-male:before{content:"\E73B"}.el-icon-guide:before{content:"\E73C"}.el-icon-news:before{content:"\E73E"}.el-icon-price-tag:before{content:"\E744"}.el-icon-discount:before{content:"\E745"}.el-icon-wallet:before{content:"\E747"}.el-icon-coin:before{content:"\E748"}.el-icon-money:before{content:"\E749"}.el-icon-bank-card:before{content:"\E74A"}.el-icon-box:before{content:"\E74B"}.el-icon-present:before{content:"\E74C"}.el-icon-sell:before{content:"\E6D5"}.el-icon-sold-out:before{content:"\E6D6"}.el-icon-shopping-bag-2:before{content:"\E74D"}.el-icon-shopping-bag-1:before{content:"\E74E"}.el-icon-shopping-cart-2:before{content:"\E74F"}.el-icon-shopping-cart-1:before{content:"\E750"}.el-icon-shopping-cart-full:before{content:"\E751"}.el-icon-smoking:before{content:"\E752"}.el-icon-no-smoking:before{content:"\E753"}.el-icon-house:before{content:"\E754"}.el-icon-table-lamp:before{content:"\E755"}.el-icon-school:before{content:"\E756"}.el-icon-office-building:before{content:"\E757"}.el-icon-toilet-paper:before{content:"\E758"}.el-icon-notebook-2:before{content:"\E759"}.el-icon-notebook-1:before{content:"\E75A"}.el-icon-files:before{content:"\E75B"}.el-icon-collection:before{content:"\E75C"}.el-icon-receiving:before{content:"\E75D"}.el-icon-suitcase-1:before{content:"\E760"}.el-icon-suitcase:before{content:"\E761"}.el-icon-film:before{content:"\E763"}.el-icon-collection-tag:before{content:"\E765"}.el-icon-data-analysis:before{content:"\E766"}.el-icon-pie-chart:before{content:"\E767"}.el-icon-data-board:before{content:"\E768"}.el-icon-data-line:before{content:"\E76D"}.el-icon-reading:before{content:"\E769"}.el-icon-magic-stick:before{content:"\E76A"}.el-icon-coordinate:before{content:"\E76B"}.el-icon-mouse:before{content:"\E76C"}.el-icon-brush:before{content:"\E76E"}.el-icon-headset:before{content:"\E76F"}.el-icon-umbrella:before{content:"\E770"}.el-icon-scissors:before{content:"\E771"}.el-icon-mobile:before{content:"\E773"}.el-icon-attract:before{content:"\E774"}.el-icon-monitor:before{content:"\E775"}.el-icon-search:before{content:"\E778"}.el-icon-takeaway-box:before{content:"\E77A"}.el-icon-paperclip:before{content:"\E77D"}.el-icon-printer:before{content:"\E77E"}.el-icon-document-add:before{content:"\E782"}.el-icon-document:before{content:"\E785"}.el-icon-document-checked:before{content:"\E786"}.el-icon-document-copy:before{content:"\E787"}.el-icon-document-delete:before{content:"\E788"}.el-icon-document-remove:before{content:"\E789"}.el-icon-tickets:before{content:"\E78B"}.el-icon-folder-checked:before{content:"\E77F"}.el-icon-folder-delete:before{content:"\E780"}.el-icon-folder-remove:before{content:"\E781"}.el-icon-folder-add:before{content:"\E783"}.el-icon-folder-opened:before{content:"\E784"}.el-icon-folder:before{content:"\E78A"}.el-icon-edit-outline:before{content:"\E764"}.el-icon-edit:before{content:"\E78C"}.el-icon-date:before{content:"\E78E"}.el-icon-c-scale-to-original:before{content:"\E7C6"}.el-icon-view:before{content:"\E6CE"}.el-icon-loading:before{content:"\E6CF"}.el-icon-rank:before{content:"\E6D1"}.el-icon-sort-down:before{content:"\E7C4"}.el-icon-sort-up:before{content:"\E7C5"}.el-icon-sort:before{content:"\E6D2"}.el-icon-finished:before{content:"\E6CD"}.el-icon-refresh-left:before{content:"\E6C7"}.el-icon-refresh-right:before{content:"\E6C8"}.el-icon-refresh:before{content:"\E6D0"}.el-icon-video-play:before{content:"\E7C0"}.el-icon-video-pause:before{content:"\E7C1"}.el-icon-d-arrow-right:before{content:"\E6DC"}.el-icon-d-arrow-left:before{content:"\E6DD"}.el-icon-arrow-up:before{content:"\E6E1"}.el-icon-arrow-down:before{content:"\E6DF"}.el-icon-arrow-right:before{content:"\E6E0"}.el-icon-arrow-left:before{content:"\E6DE"}.el-icon-top-right:before{content:"\E6E7"}.el-icon-top-left:before{content:"\E6E8"}.el-icon-top:before{content:"\E6E6"}.el-icon-bottom:before{content:"\E6EB"}.el-icon-right:before{content:"\E6E9"}.el-icon-back:before{content:"\E6EA"}.el-icon-bottom-right:before{content:"\E6EC"}.el-icon-bottom-left:before{content:"\E6ED"}.el-icon-caret-top:before{content:"\E78F"}.el-icon-caret-bottom:before{content:"\E790"}.el-icon-caret-right:before{content:"\E791"}.el-icon-caret-left:before{content:"\E792"}.el-icon-d-caret:before{content:"\E79A"}.el-icon-share:before{content:"\E793"}.el-icon-menu:before{content:"\E798"}.el-icon-s-grid:before{content:"\E7A6"}.el-icon-s-check:before{content:"\E7A7"}.el-icon-s-data:before{content:"\E7A8"}.el-icon-s-opportunity:before{content:"\E7AA"}.el-icon-s-custom:before{content:"\E7AB"}.el-icon-s-claim:before{content:"\E7AD"}.el-icon-s-finance:before{content:"\E7AE"}.el-icon-s-comment:before{content:"\E7AF"}.el-icon-s-flag:before{content:"\E7B0"}.el-icon-s-marketing:before{content:"\E7B1"}.el-icon-s-shop:before{content:"\E7B4"}.el-icon-s-open:before{content:"\E7B5"}.el-icon-s-management:before{content:"\E7B6"}.el-icon-s-ticket:before{content:"\E7B7"}.el-icon-s-release:before{content:"\E7B8"}.el-icon-s-home:before{content:"\E7B9"}.el-icon-s-promotion:before{content:"\E7BA"}.el-icon-s-operation:before{content:"\E7BB"}.el-icon-s-unfold:before{content:"\E7BC"}.el-icon-s-fold:before{content:"\E7A9"}.el-icon-s-platform:before{content:"\E7BD"}.el-icon-s-order:before{content:"\E7BE"}.el-icon-s-cooperation:before{content:"\E7BF"}.el-icon-bell:before{content:"\E725"}.el-icon-message-solid:before{content:"\E799"}.el-icon-video-camera:before{content:"\E772"}.el-icon-video-camera-solid:before{content:"\E796"}.el-icon-camera:before{content:"\E779"}.el-icon-camera-solid:before{content:"\E79B"}.el-icon-download:before{content:"\E77C"}.el-icon-upload2:before{content:"\E77B"}.el-icon-upload:before{content:"\E7C3"}.el-icon-picture-outline-round:before{content:"\E75F"}.el-icon-picture-outline:before{content:"\E75E"}.el-icon-picture:before{content:"\E79F"}.el-icon-close:before{content:"\E6DB"}.el-icon-check:before{content:"\E6DA"}.el-icon-plus:before{content:"\E6D9"}.el-icon-minus:before{content:"\E6D8"}.el-icon-help:before{content:"\E73D"}.el-icon-s-help:before{content:"\E7B3"}.el-icon-circle-close:before{content:"\E78D"}.el-icon-circle-check:before{content:"\E720"}.el-icon-circle-plus-outline:before{content:"\E723"}.el-icon-remove-outline:before{content:"\E722"}.el-icon-zoom-out:before{content:"\E776"}.el-icon-zoom-in:before{content:"\E777"}.el-icon-error:before{content:"\E79D"}.el-icon-success:before{content:"\E79C"}.el-icon-circle-plus:before{content:"\E7A0"}.el-icon-remove:before{content:"\E7A2"}.el-icon-info:before{content:"\E7A1"}.el-icon-question:before{content:"\E7A4"}.el-icon-warning-outline:before{content:"\E6C9"}.el-icon-warning:before{content:"\E7A3"}.el-icon-goods:before{content:"\E7C2"}.el-icon-s-goods:before{content:"\E7B2"}.el-icon-star-off:before{content:"\E717"}.el-icon-star-on:before{content:"\E797"}.el-icon-more-outline:before{content:"\E6CC"}.el-icon-more:before{content:"\E794"}.el-icon-phone-outline:before{content:"\E6CB"}.el-icon-phone:before{content:"\E795"}.el-icon-user:before{content:"\E6E3"}.el-icon-user-solid:before{content:"\E7A5"}.el-icon-setting:before{content:"\E6CA"}.el-icon-s-tools:before{content:"\E7AC"}.el-icon-delete:before{content:"\E6D7"}.el-icon-delete-solid:before{content:"\E7C9"}.el-icon-eleme:before{content:"\E7C7"}.el-icon-platform-eleme:before{content:"\E7CA"}.el-icon-loading{animation:rotating 2s linear infinite}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.el-pagination{white-space:nowrap;padding:2px 5px;color:#303133;font-weight:700}.el-pagination:after,.el-pagination:before{display:table;content:""}.el-pagination:after{clear:both}.el-pagination button,.el-pagination span:not([class*=suffix]){display:inline-block;font-size:13px;min-width:35.5px;height:28px;line-height:28px;vertical-align:top;box-sizing:border-box}.el-pagination .el-input__inner{text-align:center;-moz-appearance:textfield;line-height:normal}.el-pagination .el-input__suffix{right:0;transform:scale(.8)}.el-pagination .el-select .el-input{width:100px;margin:0 5px}.el-pagination .el-select .el-input .el-input__inner{padding-right:25px;border-radius:3px}.el-pagination button{border:none;padding:0 6px;background:0 0}.el-pagination button:focus{outline:0}.el-pagination button:hover{color:#409eff}.el-pagination button:disabled{color:#c0c4cc;background-color:#fff;cursor:not-allowed}.el-pagination .btn-next,.el-pagination .btn-prev{background:50% no-repeat #fff;background-size:16px;cursor:pointer;margin:0;color:#303133}.el-pagination .btn-next .el-icon,.el-pagination .btn-prev .el-icon{display:block;font-size:12px;font-weight:700}.el-pagination .btn-prev{padding-right:12px}.el-pagination .btn-next{padding-left:12px}.el-pagination .el-pager li.disabled{color:#c0c4cc;cursor:not-allowed}.el-pager li,.el-pager li.btn-quicknext:hover,.el-pager li.btn-quickprev:hover{cursor:pointer}.el-pagination--small .btn-next,.el-pagination--small .btn-prev,.el-pagination--small .el-pager li,.el-pagination--small .el-pager li.btn-quicknext,.el-pagination--small .el-pager li.btn-quickprev,.el-pagination--small .el-pager li:last-child{border-color:transparent;font-size:12px;line-height:22px;height:22px;min-width:22px}.el-pagination--small .more:before,.el-pagination--small li.more:before{line-height:24px}.el-pagination--small button,.el-pagination--small span:not([class*=suffix]){height:22px;line-height:22px}.el-pagination--small .el-pagination__editor,.el-pagination--small .el-pagination__editor.el-input .el-input__inner{height:22px}.el-pagination__sizes{margin:0 10px 0 0;font-weight:400;color:#606266}.el-pagination__sizes .el-input .el-input__inner{font-size:13px;padding-left:8px}.el-pagination__sizes .el-input .el-input__inner:hover{border-color:#409eff}.el-pagination__total{margin-right:10px;font-weight:400;color:#606266}.el-pagination__jump{margin-left:24px;font-weight:400;color:#606266}.el-pagination__jump .el-input__inner{padding:0 3px}.el-pagination__rightwrapper{float:right}.el-pagination__editor{line-height:18px;padding:0 2px;height:28px;text-align:center;margin:0 2px;box-sizing:border-box;border-radius:3px}.el-pager,.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev{padding:0}.el-pagination__editor.el-input{width:50px}.el-pagination__editor.el-input .el-input__inner{height:28px}.el-pagination__editor .el-input__inner::-webkit-inner-spin-button,.el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev,.el-pagination.is-background .el-pager li{margin:0 5px;background-color:#f4f4f5;color:#606266;min-width:30px;border-radius:2px}.el-pagination.is-background .btn-next.disabled,.el-pagination.is-background .btn-next:disabled,.el-pagination.is-background .btn-prev.disabled,.el-pagination.is-background .btn-prev:disabled,.el-pagination.is-background .el-pager li.disabled{color:#c0c4cc}.el-pagination.is-background .el-pager li:not(.disabled):hover{color:#409eff}.el-pagination.is-background .el-pager li:not(.disabled).active{background-color:#409eff;color:#fff}.el-dialog,.el-pager li{background:#fff;-webkit-box-sizing:border-box}.el-pagination.is-background.el-pagination--small .btn-next,.el-pagination.is-background.el-pagination--small .btn-prev,.el-pagination.is-background.el-pagination--small .el-pager li{margin:0 3px;min-width:22px}.el-pager,.el-pager li{vertical-align:top;margin:0;display:inline-block}.el-pager{-ms-user-select:none;user-select:none;list-style:none;font-size:0}.el-date-table,.el-pager,.el-table th{-webkit-user-select:none;-moz-user-select:none}.el-pager .more:before{line-height:30px}.el-pager li{padding:0 4px;font-size:13px;min-width:35.5px;height:28px;line-height:28px;box-sizing:border-box;text-align:center}.el-menu--collapse .el-menu .el-submenu,.el-menu--popup{min-width:200px}.el-pager li.btn-quicknext,.el-pager li.btn-quickprev{line-height:28px;color:#303133}.el-pager li.btn-quicknext.disabled,.el-pager li.btn-quickprev.disabled{color:#c0c4cc}.el-pager li.active+li{border-left:0}.el-pager li:hover{color:#409eff}.el-pager li.active{color:#409eff;cursor:default}.el-dialog{position:relative;margin:0 auto 50px;border-radius:2px;box-shadow:0 1px 3px rgba(0,0,0,.3);box-sizing:border-box;width:50%}.el-dialog.is-fullscreen{width:100%;margin-top:0;margin-bottom:0;height:100%;overflow:auto}.el-dialog__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;margin:0}.el-dialog__header{padding:20px 20px 10px}.el-dialog__headerbtn{position:absolute;top:20px;right:20px;padding:0;background:0 0;border:none;outline:0;cursor:pointer;font-size:16px}.el-dialog__headerbtn .el-dialog__close{color:#909399}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:#409eff}.el-dialog__title{line-height:24px;font-size:18px;color:#303133}.el-dialog__body{padding:30px 20px;color:#606266;font-size:14px;word-break:break-all}.el-dialog__footer{padding:10px 20px 20px;text-align:right;box-sizing:border-box}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial;padding:25px 25px 30px}.el-dialog--center .el-dialog__footer{text-align:inherit}.dialog-fade-enter-active{animation:dialog-fade-in .3s}.dialog-fade-leave-active{animation:dialog-fade-out .3s}@keyframes dialog-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}to{transform:translateZ(0);opacity:1}}@keyframes dialog-fade-out{0%{transform:translateZ(0);opacity:1}to{transform:translate3d(0,-20px,0);opacity:0}}.el-autocomplete{position:relative;display:inline-block}.el-autocomplete-suggestion{margin:5px 0;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:4px;border:1px solid #e4e7ed;box-sizing:border-box;background-color:#fff}.el-dropdown-menu,.el-menu--collapse .el-submenu .el-menu{z-index:10;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-autocomplete-suggestion__wrap{max-height:280px;padding:10px 0;box-sizing:border-box}.el-autocomplete-suggestion__list{margin:0;padding:0}.el-autocomplete-suggestion li{padding:0 20px;margin:0;line-height:34px;cursor:pointer;color:#606266;font-size:14px;list-style:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-autocomplete-suggestion li.highlighted,.el-autocomplete-suggestion li:hover{background-color:#f5f7fa}.el-autocomplete-suggestion li.divider{margin-top:6px;border-top:1px solid #000}.el-autocomplete-suggestion li.divider:last-child{margin-bottom:-6px}.el-autocomplete-suggestion.is-loading li{text-align:center;height:100px;line-height:100px;font-size:20px;color:#999}.el-autocomplete-suggestion.is-loading li:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-autocomplete-suggestion.is-loading li:hover{background-color:#fff}.el-autocomplete-suggestion.is-loading .el-icon-loading{vertical-align:middle}.el-dropdown{display:inline-block;position:relative;color:#606266;font-size:14px}.el-dropdown .el-button-group{display:block}.el-dropdown .el-button-group .el-button{float:none}.el-dropdown .el-dropdown__caret-button{padding-left:5px;padding-right:5px;position:relative;border-left:none}.el-dropdown .el-dropdown__caret-button:before{content:"";position:absolute;display:block;width:1px;top:5px;bottom:5px;left:0;background:hsla(0,0%,100%,.5)}.el-dropdown .el-dropdown__caret-button.el-button--default:before{background:rgba(220,223,230,.5)}.el-dropdown .el-dropdown__caret-button:hover:before{top:0;bottom:0}.el-dropdown .el-dropdown__caret-button .el-dropdown__icon{padding-left:0}.el-dropdown__icon{font-size:12px;margin:0 3px}.el-dropdown-menu{position:absolute;top:0;left:0;padding:10px 0;margin:5px 0;background-color:#fff;border:1px solid #ebeef5;border-radius:4px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-dropdown-menu__item{list-style:none;line-height:36px;padding:0 20px;margin:0;font-size:14px;color:#606266;cursor:pointer;outline:0}.el-dropdown-menu__item:focus,.el-dropdown-menu__item:not(.is-disabled):hover{background-color:#ecf5ff;color:#66b1ff}.el-dropdown-menu__item i{margin-right:5px}.el-dropdown-menu__item--divided{position:relative;margin-top:6px;border-top:1px solid #ebeef5}.el-dropdown-menu__item--divided:before{content:"";height:6px;display:block;margin:0 -20px;background-color:#fff}.el-dropdown-menu__item.is-disabled{cursor:default;color:#bbb;pointer-events:none}.el-dropdown-menu--medium{padding:6px 0}.el-dropdown-menu--medium .el-dropdown-menu__item{line-height:30px;padding:0 17px;font-size:14px}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:6px}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:6px;margin:0 -17px}.el-dropdown-menu--small{padding:6px 0}.el-dropdown-menu--small .el-dropdown-menu__item{line-height:27px;padding:0 15px;font-size:13px}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:4px}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:4px;margin:0 -15px}.el-dropdown-menu--mini{padding:3px 0}.el-dropdown-menu--mini .el-dropdown-menu__item{line-height:24px;padding:0 10px;font-size:12px}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:3px}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:3px;margin:0 -10px}.el-menu{border-right:1px solid #e6e6e6;list-style:none;position:relative;margin:0;padding-left:0}.el-menu,.el-menu--horizontal>.el-menu-item:not(.is-disabled):focus,.el-menu--horizontal>.el-menu-item:not(.is-disabled):hover,.el-menu--horizontal>.el-submenu .el-submenu__title:hover{background-color:#fff}.el-menu:after,.el-menu:before{display:table;content:""}.el-menu:after{clear:both}.el-menu.el-menu--horizontal{border-bottom:1px solid #e6e6e6}.el-menu--horizontal{border-right:none}.el-menu--horizontal>.el-menu-item{float:left;height:60px;line-height:60px;margin:0;border-bottom:2px solid transparent;color:#909399}.el-menu--horizontal>.el-menu-item a,.el-menu--horizontal>.el-menu-item a:hover{color:inherit}.el-menu--horizontal>.el-submenu{float:left}.el-menu--horizontal>.el-submenu:focus,.el-menu--horizontal>.el-submenu:hover{outline:0}.el-menu--horizontal>.el-submenu:focus .el-submenu__title,.el-menu--horizontal>.el-submenu:hover .el-submenu__title{color:#303133}.el-menu--horizontal>.el-submenu.is-active .el-submenu__title{border-bottom:2px solid #409eff;color:#303133}.el-menu--horizontal>.el-submenu .el-submenu__title{height:60px;line-height:60px;border-bottom:2px solid transparent;color:#909399}.el-menu--horizontal>.el-submenu .el-submenu__icon-arrow{position:static;vertical-align:middle;margin-left:8px;margin-top:-3px}.el-menu--horizontal .el-menu .el-menu-item,.el-menu--horizontal .el-menu .el-submenu__title{background-color:#fff;float:none;height:36px;line-height:36px;padding:0 10px;color:#909399}.el-menu--horizontal .el-menu .el-menu-item.is-active,.el-menu--horizontal .el-menu .el-submenu.is-active>.el-submenu__title{color:#303133}.el-menu--horizontal .el-menu-item:not(.is-disabled):focus,.el-menu--horizontal .el-menu-item:not(.is-disabled):hover{outline:0;color:#303133}.el-menu--horizontal>.el-menu-item.is-active{border-bottom:2px solid #409eff;color:#303133}.el-menu--collapse{width:64px}.el-menu--collapse>.el-menu-item [class^=el-icon-],.el-menu--collapse>.el-submenu>.el-submenu__title [class^=el-icon-]{margin:0;vertical-align:middle;width:24px;text-align:center}.el-menu--collapse>.el-menu-item .el-submenu__icon-arrow,.el-menu--collapse>.el-submenu>.el-submenu__title .el-submenu__icon-arrow{display:none}.el-menu--collapse>.el-menu-item span,.el-menu--collapse>.el-submenu>.el-submenu__title span{height:0;width:0;overflow:hidden;visibility:hidden;display:inline-block}.el-menu--collapse>.el-menu-item.is-active i{color:inherit}.el-menu--collapse .el-submenu{position:relative}.el-menu--collapse .el-submenu .el-menu{position:absolute;margin-left:5px;top:0;left:100%;border:1px solid #e4e7ed;border-radius:2px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-menu-item,.el-submenu__title{height:56px;line-height:56px;position:relative;-webkit-box-sizing:border-box;white-space:nowrap;list-style:none}.el-menu--collapse .el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{transform:none}.el-menu--popup{z-index:100;border:none;padding:5px 0;border-radius:2px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-menu--popup-bottom-start{margin-top:5px}.el-menu--popup-right-start{margin-left:5px;margin-right:5px}.el-menu-item{font-size:14px;color:#303133;padding:0 20px;cursor:pointer;transition:border-color .3s,background-color .3s,color .3s;box-sizing:border-box}.el-menu-item *{vertical-align:middle}.el-menu-item i{color:#909399}.el-menu-item:focus,.el-menu-item:hover{outline:0;background-color:#ecf5ff}.el-menu-item.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-menu-item [class^=el-icon-]{margin-right:5px;width:24px;text-align:center;font-size:18px;vertical-align:middle}.el-menu-item.is-active{color:#409eff}.el-menu-item.is-active i{color:inherit}.el-submenu{list-style:none;margin:0;padding-left:0}.el-submenu__title{font-size:14px;color:#303133;padding:0 20px;cursor:pointer;transition:border-color .3s,background-color .3s,color .3s;box-sizing:border-box}.el-submenu__title *{vertical-align:middle}.el-submenu__title i{color:#909399}.el-submenu__title:focus,.el-submenu__title:hover{outline:0;background-color:#ecf5ff}.el-submenu__title.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu__title:hover{background-color:#ecf5ff}.el-submenu .el-menu{border:none}.el-submenu .el-menu-item{height:50px;line-height:50px;padding:0 45px;min-width:200px}.el-submenu__icon-arrow{position:absolute;top:50%;right:20px;margin-top:-7px;transition:transform .3s;font-size:12px}.el-submenu.is-active .el-submenu__title{border-bottom-color:#409eff}.el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{transform:rotate(180deg)}.el-submenu.is-disabled .el-menu-item,.el-submenu.is-disabled .el-submenu__title{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu [class^=el-icon-]{vertical-align:middle;margin-right:5px;width:24px;text-align:center;font-size:18px}.el-menu-item-group>ul{padding:0}.el-menu-item-group__title{padding:7px 0 7px 20px;line-height:normal;font-size:12px;color:#909399}.el-radio-button__inner,.el-radio-group{display:inline-block;line-height:1;vertical-align:middle}.horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow{transition:.2s;opacity:0}.el-radio-group{font-size:0}.el-radio-button{position:relative;display:inline-block;outline:0}.el-radio-button__inner{white-space:nowrap;background:#fff;border:1px solid #dcdfe6;font-weight:500;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;box-sizing:border-box;outline:0;margin:0;position:relative;cursor:pointer;transition:all .3s cubic-bezier(.645,.045,.355,1);padding:12px 20px;font-size:14px;border-radius:0}.el-radio-button__inner.is-round{padding:12px 20px}.el-radio-button__inner:hover{color:#409eff}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button:first-child .el-radio-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;box-shadow:none!important}.el-radio-button__orig-radio{opacity:0;outline:0;position:absolute;z-index:-1}.el-radio-button__orig-radio:checked+.el-radio-button__inner{color:#fff;background-color:#409eff;border-color:#409eff;box-shadow:-1px 0 0 0 #409eff}.el-radio-button__orig-radio:disabled+.el-radio-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5;box-shadow:none}.el-radio-button__orig-radio:disabled:checked+.el-radio-button__inner{background-color:#f2f6fc}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 4px 4px 0}.el-popover,.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:4px}.el-radio-button--medium .el-radio-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-radio-button--medium .el-radio-button__inner.is-round{padding:10px 20px}.el-radio-button--small .el-radio-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-radio-button--small .el-radio-button__inner.is-round{padding:9px 15px}.el-radio-button--mini .el-radio-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-radio-button--mini .el-radio-button__inner.is-round{padding:7px 15px}.el-radio-button:focus:not(.is-focus):not(:active):not(.is-disabled){box-shadow:0 0 2px 2px #409eff}.el-switch{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;position:relative;font-size:14px;line-height:20px;height:20px;vertical-align:middle}.el-switch__core,.el-switch__label{display:inline-block;cursor:pointer}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__label{transition:.2s;height:20px;font-size:14px;font-weight:500;vertical-align:middle;color:#303133}.el-switch__label.is-active{color:#409eff}.el-switch__label--left{margin-right:10px}.el-switch__label--right{margin-left:10px}.el-switch__label *{line-height:1;font-size:14px;display:inline-block}.el-switch__input{position:absolute;width:0;height:0;opacity:0;margin:0}.el-switch__core{margin:0;position:relative;width:40px;height:20px;border:1px solid #dcdfe6;outline:0;border-radius:10px;box-sizing:border-box;background:#dcdfe6;transition:border-color .3s,background-color .3s;vertical-align:middle}.el-switch__core:after{content:"";position:absolute;top:1px;left:1px;border-radius:100%;transition:all .3s;width:16px;height:16px;background-color:#fff}.el-switch.is-checked .el-switch__core{border-color:#409eff;background-color:#409eff}.el-switch.is-checked .el-switch__core:after{left:100%;margin-left:-17px}.el-switch.is-disabled{opacity:.6}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.el-switch .label-fade-enter,.el-switch .label-fade-leave-active{opacity:0}.el-select-dropdown{position:absolute;z-index:1001;border:1px solid #e4e7ed;border-radius:4px;background-color:#fff;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-sizing:border-box;margin:5px 0}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:#409eff;background-color:#fff}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover{background-color:#f5f7fa}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected:after{position:absolute;right:20px;font-family:element-icons;content:"\E6DA";font-size:12px;font-weight:700;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:#999;font-size:14px}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{list-style:none;padding:6px 0;margin:0;box-sizing:border-box}.el-select-dropdown__item{font-size:14px;padding:0 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#606266;height:34px;line-height:34px;box-sizing:border-box;cursor:pointer}.el-select-dropdown__item.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-select-dropdown__item.is-disabled:hover{background-color:#fff}.el-select-dropdown__item.hover,.el-select-dropdown__item:hover{background-color:#f5f7fa}.el-select-dropdown__item.selected{color:#409eff;font-weight:700}.el-select-group{margin:0;padding:0}.el-select-group__wrap{position:relative;list-style:none;margin:0;padding:0}.el-select-group__wrap:not(:last-of-type){padding-bottom:24px}.el-select-group__wrap:not(:last-of-type):after{content:"";position:absolute;display:block;left:20px;right:20px;bottom:12px;height:1px;background:#e4e7ed}.el-select-group__title{padding-left:20px;font-size:12px;color:#909399;line-height:30px}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-select{display:inline-block;position:relative}.el-select .el-select__tags>span{display:contents}.el-select:hover .el-input__inner{border-color:#c0c4cc}.el-select .el-input__inner{cursor:pointer;padding-right:35px}.el-select .el-input__inner:focus{border-color:#409eff}.el-select .el-input .el-select__caret{color:#c0c4cc;font-size:14px;transition:transform .3s;transform:rotate(180deg);cursor:pointer}.el-select .el-input .el-select__caret.is-reverse{transform:rotate(0)}.el-select .el-input .el-select__caret.is-show-close{font-size:14px;text-align:center;transform:rotate(180deg);border-radius:100%;color:#c0c4cc;transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-select .el-input .el-select__caret.is-show-close:hover{color:#909399}.el-select .el-input.is-disabled .el-input__inner{cursor:not-allowed}.el-select .el-input.is-disabled .el-input__inner:hover{border-color:#e4e7ed}.el-select .el-input.is-focus .el-input__inner{border-color:#409eff}.el-select>.el-input{display:block}.el-select__input{border:none;outline:0;padding:0;margin-left:15px;color:#666;font-size:14px;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:28px;background-color:transparent}.el-select__input.is-mini{height:14px}.el-select__close{cursor:pointer;position:absolute;top:8px;z-index:1000;right:25px;color:#c0c4cc;line-height:18px;font-size:14px}.el-select__close:hover{color:#909399}.el-select__tags{position:absolute;line-height:normal;white-space:normal;z-index:1;top:50%;transform:translateY(-50%);display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap}.el-select .el-tag__close{margin-top:-2px}.el-select .el-tag{box-sizing:border-box;border-color:transparent;margin:2px 0 2px 6px;background-color:#f0f2f5}.el-select .el-tag__close.el-icon-close{background-color:#c0c4cc;right:-7px;top:0;color:#fff}.el-select .el-tag__close.el-icon-close:hover{background-color:#909399}.el-table,.el-table__expanded-cell{background-color:#fff}.el-select .el-tag__close.el-icon-close:before{display:block;transform:translateY(.5px)}.el-table{position:relative;overflow:hidden;box-sizing:border-box;-ms-flex:1;flex:1;width:100%;max-width:100%;font-size:14px;color:#606266}.el-table--mini,.el-table--small,.el-table__expand-icon{font-size:12px}.el-table__empty-block{min-height:60px;text-align:center;width:100%;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center}.el-table__empty-text{line-height:60px;width:50%;color:#909399}.el-table__expand-column .cell{padding:0;text-align:center}.el-table__expand-icon{position:relative;cursor:pointer;color:#666;transition:transform .2s ease-in-out;height:20px}.el-table__expand-icon--expanded{transform:rotate(90deg)}.el-table__expand-icon>.el-icon{position:absolute;left:50%;top:50%;margin-left:-5px;margin-top:-5px}.el-table__expanded-cell[class*=cell]{padding:20px 50px}.el-table__expanded-cell:hover{background-color:transparent!important}.el-table__placeholder{display:inline-block;width:20px}.el-table__append-wrapper{overflow:hidden}.el-table--fit{border-right:0;border-bottom:0}.el-table--fit td.gutter,.el-table--fit th.gutter{border-right-width:1px}.el-table--scrollable-x .el-table__body-wrapper{overflow-x:auto}.el-table--scrollable-y .el-table__body-wrapper{overflow-y:auto}.el-table thead{color:#909399;font-weight:500}.el-table thead.is-group th{background:#f5f7fa}.el-table th,.el-table tr{background-color:#fff}.el-table td,.el-table th{padding:12px 0;min-width:0;box-sizing:border-box;text-overflow:ellipsis;vertical-align:middle;position:relative;text-align:left}.el-table td.is-center,.el-table th.is-center{text-align:center}.el-table td.is-right,.el-table th.is-right{text-align:right}.el-table td.gutter,.el-table th.gutter{width:15px;border-right-width:0;border-bottom-width:0;padding:0}.el-table--medium td,.el-table--medium th{padding:10px 0}.el-table--small td,.el-table--small th{padding:8px 0}.el-table--mini td,.el-table--mini th{padding:6px 0}.el-table--border td:first-child .cell,.el-table--border th:first-child .cell,.el-table .cell{padding-left:10px}.el-table tr input[type=checkbox]{margin:0}.el-table td,.el-table th.is-leaf{border-bottom:1px solid #ebeef5}.el-table th.is-sortable{cursor:pointer}.el-table th{overflow:hidden;-ms-user-select:none;user-select:none}.el-table th>.cell{display:inline-block;box-sizing:border-box;position:relative;vertical-align:middle;padding-left:10px;padding-right:10px;width:100%}.el-table th>.cell.highlight{color:#409eff}.el-table th.required>div:before{display:inline-block;content:"";width:8px;height:8px;border-radius:50%;background:#ff4d51;margin-right:5px;vertical-align:middle}.el-table td div{box-sizing:border-box}.el-table td.gutter{width:0}.el-table .cell{box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;white-space:normal;word-break:break-all;line-height:23px;padding-right:10px}.el-table .cell.el-tooltip{white-space:nowrap;min-width:50px}.el-table--border,.el-table--group{border:1px solid #ebeef5}.el-table--border:after,.el-table--group:after,.el-table:before{content:"";position:absolute;background-color:#ebeef5;z-index:1}.el-table--border:after,.el-table--group:after{top:0;right:0;width:1px;height:100%}.el-table:before{left:0;bottom:0;width:100%;height:1px}.el-table--border{border-right:none;border-bottom:none}.el-table--border.el-loading-parent--relative{border-color:transparent}.el-table--border td,.el-table--border th,.el-table__body-wrapper .el-table--border.is-scrolling-left~.el-table__fixed{border-right:1px solid #ebeef5}.el-table--border th.gutter:last-of-type{border-bottom:1px solid #ebeef5;border-bottom-width:1px}.el-table--border th,.el-table__fixed-right-patch{border-bottom:1px solid #ebeef5}.el-table__fixed,.el-table__fixed-right{position:absolute;top:0;left:0;overflow-x:hidden;overflow-y:hidden;box-shadow:0 0 10px rgba(0,0,0,.12)}.el-table__fixed-right:before,.el-table__fixed:before{content:"";position:absolute;left:0;bottom:0;width:100%;height:1px;background-color:#ebeef5;z-index:4}.el-table__fixed-right-patch{position:absolute;top:-1px;right:0;background-color:#fff}.el-table__fixed-right{top:0;left:auto;right:0}.el-table__fixed-right .el-table__fixed-body-wrapper,.el-table__fixed-right .el-table__fixed-footer-wrapper,.el-table__fixed-right .el-table__fixed-header-wrapper{left:auto;right:0}.el-table__fixed-header-wrapper{position:absolute;left:0;top:0;z-index:3}.el-table__fixed-footer-wrapper{position:absolute;left:0;bottom:0;z-index:3}.el-table__fixed-footer-wrapper tbody td{border-top:1px solid #ebeef5;background-color:#f5f7fa;color:#606266}.el-table__fixed-body-wrapper{position:absolute;left:0;top:37px;overflow:hidden;z-index:3}.el-table__body-wrapper,.el-table__footer-wrapper,.el-table__header-wrapper{width:100%}.el-table__footer-wrapper{margin-top:-1px}.el-table__footer-wrapper td{border-top:1px solid #ebeef5}.el-table__body,.el-table__footer,.el-table__header{table-layout:fixed;border-collapse:separate}.el-table__footer-wrapper,.el-table__header-wrapper{overflow:hidden}.el-table__footer-wrapper tbody td,.el-table__header-wrapper tbody td{background-color:#f5f7fa;color:#606266}.el-table__body-wrapper{overflow:hidden;position:relative}.el-table__body-wrapper.is-scrolling-left~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed-right,.el-table__body-wrapper.is-scrolling-right~.el-table__fixed-right{box-shadow:none}.el-picker-panel,.el-table-filter{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-table__body-wrapper .el-table--border.is-scrolling-right~.el-table__fixed-right{border-left:1px solid #ebeef5}.el-table .caret-wrapper{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-align:center;align-items:center;height:34px;width:24px;vertical-align:middle;cursor:pointer;overflow:initial;position:relative}.el-table .sort-caret{width:0;height:0;border:5px solid transparent;position:absolute;left:7px}.el-table .sort-caret.ascending{border-bottom-color:#c0c4cc;top:5px}.el-table .sort-caret.descending{border-top-color:#c0c4cc;bottom:7px}.el-table .ascending .sort-caret.ascending{border-bottom-color:#409eff}.el-table .descending .sort-caret.descending{border-top-color:#409eff}.el-table .hidden-columns{position:absolute;z-index:-1}.el-table--striped .el-table__body tr.el-table__row--striped td{background:#fafafa}.el-table--striped .el-table__body tr.el-table__row--striped.current-row td{background-color:#ecf5ff}.el-table__body tr.hover-row.current-row>td,.el-table__body tr.hover-row.el-table__row--striped.current-row>td,.el-table__body tr.hover-row.el-table__row--striped>td,.el-table__body tr.hover-row>td{background-color:#f5f7fa}.el-table__body tr.current-row>td{background-color:#ecf5ff}.el-table__column-resize-proxy{position:absolute;left:200px;top:0;bottom:0;width:0;border-left:1px solid #ebeef5;z-index:10}.el-table__column-filter-trigger{display:inline-block;line-height:34px;cursor:pointer}.el-table__column-filter-trigger i{color:#909399;font-size:12px;transform:scale(.75)}.el-table--enable-row-transition .el-table__body td{transition:background-color .25s ease}.el-table--enable-row-hover .el-table__body tr:hover>td{background-color:#f5f7fa}.el-table--fluid-height .el-table__fixed,.el-table--fluid-height .el-table__fixed-right{bottom:0;overflow:hidden}.el-table [class*=el-table__row--level] .el-table__expand-icon{display:inline-block;width:20px;line-height:20px;height:20px;text-align:center;margin-right:3px}.el-table-column--selection .cell{padding-left:14px;padding-right:14px}.el-table-filter{border:1px solid #ebeef5;border-radius:2px;background-color:#fff;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-sizing:border-box;margin:2px 0}.el-date-table td,.el-date-table td div{height:30px;-webkit-box-sizing:border-box}.el-table-filter__list{padding:5px 0;margin:0;list-style:none;min-width:100px}.el-table-filter__list-item{line-height:36px;padding:0 10px;cursor:pointer;font-size:14px}.el-table-filter__list-item:hover{background-color:#ecf5ff;color:#66b1ff}.el-table-filter__list-item.is-active{background-color:#409eff;color:#fff}.el-table-filter__content{min-width:100px}.el-table-filter__bottom{border-top:1px solid #ebeef5;padding:8px}.el-table-filter__bottom button{background:0 0;border:none;color:#606266;cursor:pointer;font-size:13px;padding:0 3px}.el-date-table.is-week-mode .el-date-table__row.current div,.el-date-table.is-week-mode .el-date-table__row:hover div,.el-date-table td.in-range div,.el-date-table td.in-range div:hover{background-color:#f2f6fc}.el-table-filter__bottom button:hover{color:#409eff}.el-table-filter__bottom button:focus{outline:0}.el-table-filter__bottom button.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-table-filter__wrap{max-height:280px}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{display:block;margin-right:5px;margin-bottom:8px;margin-left:5px}.el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.el-date-table{font-size:12px;-ms-user-select:none;user-select:none}.el-date-table.is-week-mode .el-date-table__row:hover td.available:hover{color:#606266}.el-date-table.is-week-mode .el-date-table__row:hover td:first-child div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table.is-week-mode .el-date-table__row:hover td:last-child div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table td{width:32px;padding:4px 0;box-sizing:border-box;text-align:center;cursor:pointer;position:relative}.el-date-table td div{padding:3px 0;box-sizing:border-box}.el-date-table td span{width:24px;height:24px;display:block;margin:0 auto;line-height:24px;position:absolute;left:50%;transform:translateX(-50%);border-radius:50%}.el-date-table td.next-month,.el-date-table td.prev-month{color:#c0c4cc}.el-date-table td.today{position:relative}.el-date-table td.today span{color:#409eff;font-weight:700}.el-date-table td.today.end-date span,.el-date-table td.today.start-date span{color:#fff}.el-date-table td.available:hover{color:#409eff}.el-date-table td.current:not(.disabled) span{color:#fff;background-color:#409eff}.el-date-table td.end-date div,.el-date-table td.start-date div{color:#fff}.el-date-table td.end-date span,.el-date-table td.start-date span{background-color:#409eff}.el-date-table td.start-date div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table td.end-date div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table td.disabled div{background-color:#f5f7fa;opacity:1;cursor:not-allowed;color:#c0c4cc}.el-date-table td.selected div{margin-left:5px;margin-right:5px;background-color:#f2f6fc;border-radius:15px}.el-date-table td.selected div:hover{background-color:#f2f6fc}.el-date-table td.selected span{background-color:#409eff;color:#fff;border-radius:15px}.el-date-table td.week{font-size:80%;color:#606266}.el-month-table,.el-year-table{font-size:12px;border-collapse:collapse}.el-date-table th{padding:5px;color:#606266;font-weight:400;border-bottom:1px solid #ebeef5}.el-month-table{margin:-1px}.el-month-table td{text-align:center;padding:8px 0;cursor:pointer}.el-month-table td div{height:48px;padding:6px 0;box-sizing:border-box}.el-month-table td.today .cell{color:#409eff;font-weight:700}.el-month-table td.today.end-date .cell,.el-month-table td.today.start-date .cell{color:#fff}.el-month-table td.disabled .cell{background-color:#f5f7fa;cursor:not-allowed;color:#c0c4cc}.el-month-table td.disabled .cell:hover{color:#c0c4cc}.el-month-table td .cell{width:60px;height:36px;display:block;line-height:36px;color:#606266;margin:0 auto;border-radius:18px}.el-month-table td .cell:hover{color:#409eff}.el-month-table td.in-range div,.el-month-table td.in-range div:hover{background-color:#f2f6fc}.el-month-table td.end-date div,.el-month-table td.start-date div{color:#fff}.el-month-table td.end-date .cell,.el-month-table td.start-date .cell{color:#fff;background-color:#409eff}.el-month-table td.start-date div{border-top-left-radius:24px;border-bottom-left-radius:24px}.el-month-table td.end-date div{border-top-right-radius:24px;border-bottom-right-radius:24px}.el-month-table td.current:not(.disabled) .cell{color:#409eff}.el-year-table{margin:-1px}.el-year-table .el-icon{color:#303133}.el-year-table td{text-align:center;padding:20px 3px;cursor:pointer}.el-year-table td.today .cell{color:#409eff;font-weight:700}.el-year-table td.disabled .cell{background-color:#f5f7fa;cursor:not-allowed;color:#c0c4cc}.el-year-table td.disabled .cell:hover{color:#c0c4cc}.el-year-table td .cell{width:48px;height:32px;display:block;line-height:32px;color:#606266;margin:0 auto}.el-year-table td .cell:hover,.el-year-table td.current:not(.disabled) .cell{color:#409eff}.el-date-range-picker{width:646px}.el-date-range-picker.has-sidebar{width:756px}.el-date-range-picker table{table-layout:fixed;width:100%}.el-date-range-picker .el-picker-panel__body{min-width:513px}.el-date-range-picker .el-picker-panel__content{margin:0}.el-date-range-picker__header{position:relative;text-align:center;height:28px}.el-date-range-picker__header [class*=arrow-left]{float:left}.el-date-range-picker__header [class*=arrow-right]{float:right}.el-date-range-picker__header div{font-size:16px;font-weight:500;margin-right:50px}.el-date-range-picker__content{float:left;width:50%;box-sizing:border-box;margin:0;padding:16px}.el-date-range-picker__content.is-left{border-right:1px solid #e4e4e4}.el-date-range-picker__content .el-date-range-picker__header div{margin-left:50px;margin-right:50px}.el-date-range-picker__editors-wrap{box-sizing:border-box;display:table-cell}.el-date-range-picker__editors-wrap.is-right{text-align:right}.el-date-range-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px;display:table;width:100%;box-sizing:border-box}.el-date-range-picker__time-header>.el-icon-arrow-right{font-size:20px;vertical-align:middle;display:table-cell;color:#303133}.el-date-range-picker__time-picker-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-range-picker__time-picker-wrap .el-picker-panel{position:absolute;top:13px;right:0;z-index:1;background:#fff}.el-date-picker{width:322px}.el-date-picker.has-sidebar.has-time{width:434px}.el-date-picker.has-sidebar{width:438px}.el-date-picker.has-time .el-picker-panel__body-wrapper{position:relative}.el-date-picker .el-picker-panel__content{width:292px}.el-date-picker table{table-layout:fixed;width:100%}.el-date-picker__editor-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px;display:table;width:100%;box-sizing:border-box}.el-date-picker__header{margin:12px;text-align:center}.el-date-picker__header--bordered{margin-bottom:0;padding-bottom:12px;border-bottom:1px solid #ebeef5}.el-date-picker__header--bordered+.el-picker-panel__content{margin-top:0}.el-date-picker__header-label{font-size:16px;font-weight:500;padding:0 5px;line-height:22px;text-align:center;cursor:pointer;color:#606266}.el-date-picker__header-label.active,.el-date-picker__header-label:hover{color:#409eff}.el-date-picker__prev-btn{float:left}.el-date-picker__next-btn{float:right}.el-date-picker__time-wrap{padding:10px;text-align:center}.el-date-picker__time-label{float:left;cursor:pointer;line-height:30px;margin-left:10px}.time-select{margin:5px 0;min-width:0}.time-select .el-picker-panel__content{max-height:200px;margin:0}.time-select-item{padding:8px 10px;font-size:14px;line-height:20px}.time-select-item.selected:not(.disabled){color:#409eff;font-weight:700}.time-select-item.disabled{color:#e4e7ed;cursor:not-allowed}.time-select-item:hover{background-color:#f5f7fa;font-weight:700;cursor:pointer}.el-date-editor{position:relative;display:inline-block;text-align:left}.el-date-editor.el-input,.el-date-editor.el-input__inner{width:220px}.el-date-editor--monthrange.el-input,.el-date-editor--monthrange.el-input__inner{width:300px}.el-date-editor--daterange.el-input,.el-date-editor--daterange.el-input__inner,.el-date-editor--timerange.el-input,.el-date-editor--timerange.el-input__inner{width:350px}.el-date-editor--datetimerange.el-input,.el-date-editor--datetimerange.el-input__inner{width:400px}.el-date-editor--dates .el-input__inner{text-overflow:ellipsis;white-space:nowrap}.el-date-editor .el-icon-circle-close{cursor:pointer}.el-date-editor .el-range__icon{font-size:14px;margin-left:-5px;color:#c0c4cc;float:left;line-height:32px}.el-date-editor .el-range-input,.el-date-editor .el-range-separator{height:100%;margin:0;text-align:center;display:inline-block;font-size:14px}.el-date-editor .el-range-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;outline:0;padding:0;width:39%;color:#606266}.el-date-editor .el-range-input:-ms-input-placeholder,.el-date-editor .el-range-input::-ms-input-placeholder{color:#c0c4cc}.el-date-editor .el-range-input::placeholder{color:#c0c4cc}.el-date-editor .el-range-separator{padding:0 5px;line-height:32px;width:5%;color:#303133}.el-date-editor .el-range__close-icon{font-size:14px;color:#c0c4cc;width:25px;display:inline-block;float:right;line-height:32px}.el-range-editor.el-input__inner{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding:3px 10px}.el-range-editor .el-range-input{line-height:1}.el-range-editor.is-active,.el-range-editor.is-active:hover{border-color:#409eff}.el-range-editor--medium.el-input__inner{height:36px}.el-range-editor--medium .el-range-separator{line-height:28px;font-size:14px}.el-range-editor--medium .el-range-input{font-size:14px}.el-range-editor--medium .el-range__close-icon,.el-range-editor--medium .el-range__icon{line-height:28px}.el-range-editor--small.el-input__inner{height:32px}.el-range-editor--small .el-range-separator{line-height:24px;font-size:13px}.el-range-editor--small .el-range-input{font-size:13px}.el-range-editor--small .el-range__close-icon,.el-range-editor--small .el-range__icon{line-height:24px}.el-range-editor--mini.el-input__inner{height:28px}.el-range-editor--mini .el-range-separator{line-height:20px;font-size:12px}.el-range-editor--mini .el-range-input{font-size:12px}.el-range-editor--mini .el-range__close-icon,.el-range-editor--mini .el-range__icon{line-height:20px}.el-range-editor.is-disabled{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-range-editor.is-disabled:focus,.el-range-editor.is-disabled:hover{border-color:#e4e7ed}.el-range-editor.is-disabled input{background-color:#f5f7fa;color:#c0c4cc;cursor:not-allowed}.el-range-editor.is-disabled input:-ms-input-placeholder,.el-range-editor.is-disabled input::-ms-input-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input::placeholder{color:#c0c4cc}.el-range-editor.is-disabled .el-range-separator{color:#c0c4cc}.el-picker-panel{color:#606266;border:1px solid #e4e7ed;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);background:#fff;border-radius:4px;line-height:30px;margin:5px 0}.el-popover,.el-time-panel{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-picker-panel__body-wrapper:after,.el-picker-panel__body:after{content:"";display:table;clear:both}.el-picker-panel__content{position:relative;margin:15px}.el-picker-panel__footer{border-top:1px solid #e4e4e4;padding:4px;text-align:right;background-color:#fff;position:relative;font-size:0}.el-picker-panel__shortcut{display:block;width:100%;border:0;background-color:transparent;line-height:28px;font-size:14px;color:#606266;padding-left:12px;text-align:left;outline:0;cursor:pointer}.el-picker-panel__shortcut:hover{color:#409eff}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#409eff}.el-picker-panel__btn{border:1px solid #dcdcdc;color:#333;line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:0;font-size:12px}.el-picker-panel__btn[disabled]{color:#ccc;cursor:not-allowed}.el-picker-panel__icon-btn{font-size:12px;color:#303133;border:0;background:0 0;cursor:pointer;outline:0;margin-top:8px}.el-picker-panel__icon-btn:hover{color:#409eff}.el-picker-panel__icon-btn.is-disabled{color:#bbb}.el-picker-panel__icon-btn.is-disabled:hover{cursor:not-allowed}.el-picker-panel__link-btn{vertical-align:middle}.el-picker-panel [slot=sidebar],.el-picker-panel__sidebar{position:absolute;top:0;bottom:0;width:110px;border-right:1px solid #e4e4e4;box-sizing:border-box;padding-top:6px;background-color:#fff;overflow:auto}.el-picker-panel [slot=sidebar]+.el-picker-panel__body,.el-picker-panel__sidebar+.el-picker-panel__body{margin-left:110px}.el-time-spinner.has-seconds .el-time-spinner__wrapper{width:33.3%}.el-time-spinner__wrapper{max-height:190px;overflow:auto;display:inline-block;width:50%;vertical-align:top;position:relative}.el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default){padding-bottom:15px}.el-time-spinner__input.el-input .el-input__inner,.el-time-spinner__list{padding:0;text-align:center}.el-time-spinner__wrapper.is-arrow{box-sizing:border-box;text-align:center;overflow:hidden}.el-time-spinner__wrapper.is-arrow .el-time-spinner__list{transform:translateY(-32px)}.el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.disabled):not(.active){background:#fff;cursor:default}.el-time-spinner__arrow{font-size:12px;color:#909399;position:absolute;left:0;width:100%;z-index:1;text-align:center;height:30px;line-height:30px;cursor:pointer}.el-time-spinner__arrow:hover{color:#409eff}.el-time-spinner__arrow.el-icon-arrow-up{top:10px}.el-time-spinner__arrow.el-icon-arrow-down{bottom:10px}.el-time-spinner__input.el-input{width:70%}.el-time-spinner__list{margin:0;list-style:none}.el-time-spinner__list:after,.el-time-spinner__list:before{content:"";display:block;width:100%;height:80px}.el-time-spinner__item{height:32px;line-height:32px;font-size:12px;color:#606266}.el-time-spinner__item:hover:not(.disabled):not(.active){background:#f5f7fa;cursor:pointer}.el-time-spinner__item.active:not(.disabled){color:#303133;font-weight:700}.el-time-spinner__item.disabled{color:#c0c4cc;cursor:not-allowed}.el-time-panel{margin:5px 0;border:1px solid #e4e7ed;background-color:#fff;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:2px;position:absolute;width:180px;left:0;z-index:1000;user-select:none;box-sizing:content-box}.el-slider__button,.el-slider__button-wrapper,.el-time-panel{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.el-time-panel__content{font-size:0;position:relative;overflow:hidden}.el-time-panel__content:after,.el-time-panel__content:before{content:"";top:50%;position:absolute;margin-top:-15px;height:32px;z-index:-1;left:0;right:0;box-sizing:border-box;padding-top:6px;text-align:left;border-top:1px solid #e4e7ed;border-bottom:1px solid #e4e7ed}.el-time-panel__content:after{left:50%;margin-left:12%;margin-right:12%}.el-time-panel__content:before{padding-left:50%;margin-right:12%;margin-left:12%}.el-time-panel__content.has-seconds:after{left:66.66667%}.el-time-panel__content.has-seconds:before{padding-left:33.33333%}.el-time-panel__footer{border-top:1px solid #e4e4e4;padding:4px;height:36px;line-height:25px;text-align:right;box-sizing:border-box}.el-time-panel__btn{border:none;line-height:28px;padding:0 5px;margin:0 5px;cursor:pointer;background-color:transparent;outline:0;font-size:12px;color:#303133}.el-time-panel__btn.confirm{font-weight:800;color:#409eff}.el-time-range-picker{width:354px;overflow:visible}.el-time-range-picker__content{position:relative;text-align:center;padding:10px}.el-time-range-picker__cell{box-sizing:border-box;margin:0;padding:4px 7px 7px;width:50%;display:inline-block}.el-time-range-picker__header{margin-bottom:5px;text-align:center;font-size:14px}.el-time-range-picker__body{border-radius:2px;border:1px solid #e4e7ed}.el-popover{position:absolute;background:#fff;min-width:150px;border:1px solid #ebeef5;padding:12px;z-index:2000;color:#606266;line-height:1.4;text-align:justify;font-size:14px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);word-break:break-all}.el-popover--plain{padding:18px 20px}.el-popover__title{color:#303133;font-size:16px;line-height:1;margin-bottom:12px}.v-modal-enter{animation:v-modal-in .2s ease}.v-modal-leave{animation:v-modal-out .2s ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{to{opacity:0}}.v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:.5;background:#000}.el-popup-parent--hidden{overflow:hidden}.el-message-box{display:inline-block;width:420px;padding-bottom:10px;vertical-align:middle;background-color:#fff;border-radius:4px;border:1px solid #ebeef5;font-size:18px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);text-align:left;overflow:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden}.el-message-box__wrapper{position:fixed;top:0;bottom:0;left:0;right:0;text-align:center}.el-message-box__wrapper:after{content:"";display:inline-block;height:100%;width:0;vertical-align:middle}.el-message-box__header{position:relative;padding:15px 15px 10px}.el-message-box__title{padding-left:0;margin-bottom:0;font-size:18px;line-height:1;color:#303133}.el-message-box__headerbtn{position:absolute;top:15px;right:15px;padding:0;border:none;outline:0;background:0 0;font-size:16px;cursor:pointer}.el-form-item.is-error .el-input__inner,.el-form-item.is-error .el-input__inner:focus,.el-form-item.is-error .el-textarea__inner,.el-form-item.is-error .el-textarea__inner:focus,.el-message-box__input input.invalid,.el-message-box__input input.invalid:focus{border-color:#f56c6c}.el-message-box__headerbtn .el-message-box__close{color:#909399}.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:#409eff}.el-message-box__content{padding:10px 15px;color:#606266;font-size:14px}.el-message-box__container{position:relative}.el-message-box__input{padding-top:15px}.el-message-box__status{position:absolute;top:50%;transform:translateY(-50%);font-size:24px!important}.el-message-box__status:before{padding-left:1px}.el-message-box__status+.el-message-box__message{padding-left:36px;padding-right:12px}.el-message-box__status.el-icon-success{color:#67c23a}.el-message-box__status.el-icon-info{color:#909399}.el-message-box__status.el-icon-warning{color:#e6a23c}.el-message-box__status.el-icon-error{color:#f56c6c}.el-message-box__message{margin:0}.el-message-box__message p{margin:0;line-height:24px}.el-message-box__errormsg{color:#f56c6c;font-size:12px;min-height:18px;margin-top:2px}.el-message-box__btns{padding:5px 15px 0;text-align:right}.el-message-box__btns button:nth-child(2){margin-left:10px}.el-message-box__btns-reverse{-ms-flex-direction:row-reverse;flex-direction:row-reverse}.el-message-box--center{padding-bottom:30px}.el-message-box--center .el-message-box__header{padding-top:30px}.el-message-box--center .el-message-box__title{position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.el-message-box--center .el-message-box__status{position:relative;top:auto;padding-right:5px;text-align:center;transform:translateY(-1px)}.el-message-box--center .el-message-box__message{margin-left:0}.el-message-box--center .el-message-box__btns,.el-message-box--center .el-message-box__content{text-align:center}.el-message-box--center .el-message-box__content{padding-left:27px;padding-right:27px}.msgbox-fade-enter-active{animation:msgbox-fade-in .3s}.msgbox-fade-leave-active{animation:msgbox-fade-out .3s}@keyframes msgbox-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}to{transform:translateZ(0);opacity:1}}@keyframes msgbox-fade-out{0%{transform:translateZ(0);opacity:1}to{transform:translate3d(0,-20px,0);opacity:0}}.el-breadcrumb{font-size:14px;line-height:1}.el-breadcrumb:after,.el-breadcrumb:before{display:table;content:""}.el-breadcrumb:after{clear:both}.el-breadcrumb__separator{margin:0 9px;font-weight:700;color:#c0c4cc}.el-breadcrumb__separator[class*=icon]{margin:0 6px;font-weight:400}.el-breadcrumb__item{float:left}.el-breadcrumb__inner{color:#606266}.el-breadcrumb__inner.is-link,.el-breadcrumb__inner a{font-weight:700;text-decoration:none;transition:color .2s cubic-bezier(.645,.045,.355,1);color:#303133}.el-breadcrumb__inner.is-link:hover,.el-breadcrumb__inner a:hover{color:#409eff;cursor:pointer}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover{font-weight:400;color:#606266;cursor:text}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.el-form--label-left .el-form-item__label{text-align:left}.el-form--label-top .el-form-item__label{float:none;display:inline-block;text-align:left;padding:0 0 10px}.el-form--inline .el-form-item{display:inline-block;margin-right:10px;vertical-align:top}.el-form--inline .el-form-item__label{float:none;display:inline-block}.el-form--inline .el-form-item__content{display:inline-block;vertical-align:top}.el-form--inline.el-form--label-top .el-form-item__content{display:block}.el-form-item{margin-bottom:22px}.el-form-item:after,.el-form-item:before{display:table;content:""}.el-form-item:after{clear:both}.el-form-item .el-form-item{margin-bottom:0}.el-form-item--mini.el-form-item,.el-form-item--small.el-form-item{margin-bottom:18px}.el-form-item .el-input__validateIcon{display:none}.el-form-item--medium .el-form-item__content,.el-form-item--medium .el-form-item__label{line-height:36px}.el-form-item--small .el-form-item__content,.el-form-item--small .el-form-item__label{line-height:32px}.el-form-item--small .el-form-item__error{padding-top:2px}.el-form-item--mini .el-form-item__content,.el-form-item--mini .el-form-item__label{line-height:28px}.el-form-item--mini .el-form-item__error{padding-top:1px}.el-form-item__label-wrap{float:left}.el-form-item__label-wrap .el-form-item__label{display:inline-block;float:none}.el-form-item__label{text-align:right;vertical-align:middle;float:left;font-size:14px;color:#606266;line-height:40px;padding:0 12px 0 0;box-sizing:border-box}.el-form-item__content{line-height:40px;position:relative;font-size:14px}.el-form-item__content:after,.el-form-item__content:before{display:table;content:""}.el-form-item__content:after{clear:both}.el-form-item__content .el-input-group{vertical-align:top}.el-form-item__error{color:#f56c6c;font-size:12px;line-height:1;padding-top:4px;position:absolute;top:100%;left:0}.el-form-item__error--inline{position:relative;top:auto;left:auto;display:inline-block;margin-left:10px}.el-form-item.is-required:not(.is-no-asterisk) .el-form-item__label-wrap>.el-form-item__label:before,.el-form-item.is-required:not(.is-no-asterisk)>.el-form-item__label:before{content:"*";color:#f56c6c;margin-right:4px}.el-form-item.is-error .el-input-group__append .el-input__inner,.el-form-item.is-error .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-error .el-input__validateIcon{color:#f56c6c}.el-form-item--feedback .el-input__validateIcon{display:inline-block}.el-tabs__header{padding:0;position:relative;margin:0 0 15px}.el-tabs__active-bar{position:absolute;bottom:0;left:0;height:2px;background-color:#409eff;z-index:1;transition:transform .3s cubic-bezier(.645,.045,.355,1);list-style:none}.el-tabs__new-tab{float:right;border:1px solid #d3dce6;height:18px;width:18px;line-height:18px;margin:12px 0 9px 10px;border-radius:3px;text-align:center;font-size:12px;color:#d3dce6;cursor:pointer;transition:all .15s}.el-collapse-item__arrow,.el-tabs__nav{-webkit-transition:-webkit-transform .3s}.el-tabs__new-tab .el-icon-plus{transform:scale(.8)}.el-tabs__new-tab:hover{color:#409eff}.el-tabs__nav-wrap{overflow:hidden;margin-bottom:-1px;position:relative}.el-tabs__nav-wrap:after{content:"";position:absolute;left:0;bottom:0;width:100%;height:2px;background-color:#e4e7ed;z-index:1}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap:after,.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs__nav-wrap.is-scrollable{padding:0 20px;box-sizing:border-box}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{position:absolute;cursor:pointer;line-height:44px;font-size:12px;color:#909399}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{white-space:nowrap;position:relative;transition:transform .3s;float:left;z-index:2}.el-tabs__nav.is-stretch{min-width:100%;display:-ms-flexbox;display:flex}.el-tabs__nav.is-stretch>*{-ms-flex:1;flex:1;text-align:center}.el-tabs__item{padding:0 20px;height:40px;box-sizing:border-box;line-height:40px;display:inline-block;list-style:none;font-size:14px;font-weight:500;color:#303133;position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:0}.el-tabs__item:focus.is-active.is-focus:not(:active){box-shadow:inset 0 0 2px 2px #409eff;border-radius:3px}.el-tabs__item .el-icon-close{border-radius:50%;text-align:center;transition:all .3s cubic-bezier(.645,.045,.355,1);margin-left:5px}.el-tabs__item .el-icon-close:before{transform:scale(.9);display:inline-block}.el-tabs__item .el-icon-close:hover{background-color:#c0c4cc;color:#fff}.el-tabs__item.is-active{color:#409eff}.el-tabs__item:hover{color:#409eff;cursor:pointer}.el-tabs__item.is-disabled{color:#c0c4cc;cursor:default}.el-tabs__content{overflow:hidden;position:relative}.el-tabs--card>.el-tabs__header{border-bottom:1px solid #e4e7ed}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid #e4e7ed;border-bottom:none;border-radius:4px 4px 0 0;box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.el-tabs--card>.el-tabs__header .el-tabs__item .el-icon-close{position:relative;font-size:12px;width:0;height:14px;vertical-align:middle;line-height:15px;overflow:hidden;top:-1px;right:-2px;transform-origin:100% 50%}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .el-icon-close,.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .el-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid #e4e7ed;transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1)}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:#fff}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--border-card{background:#fff;border:1px solid #dcdfe6;box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04)}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:#f5f7fa;border-bottom:1px solid #e4e7ed;margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__item{transition:all .3s cubic-bezier(.645,.045,.355,1);border:1px solid transparent;margin-top:-1px;color:#909399}.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item,.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:#409eff;background-color:#fff;border-right-color:#dcdfe6;border-left-color:#dcdfe6}.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:#409eff}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:#c0c4cc}.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:nth-child(2),.el-tabs--bottom .el-tabs__item.is-top:nth-child(2),.el-tabs--top .el-tabs__item.is-bottom:nth-child(2),.el-tabs--top .el-tabs__item.is-top:nth-child(2){padding-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:last-child,.el-tabs--bottom .el-tabs__item.is-top:last-child,.el-tabs--top .el-tabs__item.is-bottom:last-child,.el-tabs--top .el-tabs__item.is-top:last-child{padding-right:0}.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:last-child{padding-right:20px}.el-tabs--bottom .el-tabs__header.is-bottom{margin-bottom:0;margin-top:10px}.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid #dcdfe6}.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-top:-1px;margin-bottom:0}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid transparent}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px}.el-tabs--left,.el-tabs--right{overflow:hidden}.el-tabs--left .el-tabs__header.is-left,.el-tabs--left .el-tabs__header.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-scroll,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{height:100%}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__active-bar.is-right,.el-tabs--right .el-tabs__active-bar.is-left,.el-tabs--right .el-tabs__active-bar.is-right{top:0;bottom:auto;width:2px;height:auto}.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i{transform:rotate(90deg)}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{right:auto;bottom:0}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__nav-wrap.is-left:after{right:0;left:auto}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left:after,.el-tabs--left .el-tabs__nav-wrap.is-right:after,.el-tabs--right .el-tabs__nav-wrap.is-left:after,.el-tabs--right .el-tabs__nav-wrap.is-right:after{height:100%;width:2px;bottom:auto;top:0}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{float:none}.el-tabs--left .el-tabs__item.is-left,.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-right{display:block}.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left,.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs--left .el-tabs__header.is-left{float:left;margin-bottom:0;margin-right:10px}.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-left:none;border-right:1px solid #e4e7ed;border-bottom:none;border-top:1px solid #e4e7ed;text-align:left}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid #e4e7ed;border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid #e4e7ed;border-right-color:#fff;border-left:none;border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-radius:4px 0 0 4px;border-bottom:1px solid #e4e7ed;border-right:none}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid #dfe4ed}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:#d1dbe5 transparent}.el-tabs--right .el-tabs__header.is-right{float:right;margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right:after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid #e4e7ed}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid #e4e7ed;border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid #e4e7ed;border-left-color:#fff;border-right:none;border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-radius:0 4px 4px 0;border-bottom:1px solid #e4e7ed;border-left:none}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid #dfe4ed}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:#d1dbe5 transparent}.slideInLeft-transition,.slideInRight-transition{display:inline-block}.slideInRight-enter{animation:slideInRight-enter .3s}.slideInRight-leave{position:absolute;left:0;right:0;animation:slideInRight-leave .3s}.slideInLeft-enter{animation:slideInLeft-enter .3s}.slideInLeft-leave{position:absolute;left:0;right:0;animation:slideInLeft-leave .3s}@keyframes slideInRight-enter{0%{opacity:0;transform-origin:0 0;transform:translateX(100%)}to{opacity:1;transform-origin:0 0;transform:translateX(0)}}@keyframes slideInRight-leave{0%{transform-origin:0 0;transform:translateX(0);opacity:1}to{transform-origin:0 0;transform:translateX(100%);opacity:0}}@keyframes slideInLeft-enter{0%{opacity:0;transform-origin:0 0;transform:translateX(-100%)}to{opacity:1;transform-origin:0 0;transform:translateX(0)}}@keyframes slideInLeft-leave{0%{transform-origin:0 0;transform:translateX(0);opacity:1}to{transform-origin:0 0;transform:translateX(-100%);opacity:0}}.el-tree{position:relative;cursor:default;background:#fff;color:#606266}.el-tree__empty-block{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-tree__empty-text{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);color:#909399;font-size:14px}.el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:#409eff}.el-tree-node{white-space:nowrap;outline:0}.el-tree-node:focus>.el-tree-node__content{background-color:#f5f7fa}.el-tree-node.is-drop-inner>.el-tree-node__content .el-tree-node__label{background-color:#409eff;color:#fff}.el-tree-node__content{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;height:26px;cursor:pointer}.el-tree-node__content>.el-tree-node__expand-icon{padding:6px}.el-tree-node__content>label.el-checkbox{margin-right:8px}.el-tree-node__content:hover{background-color:#f5f7fa}.el-tree.is-dragging .el-tree-node__content{cursor:move}.el-tree.is-dragging.is-drop-not-allow .el-tree-node__content{cursor:not-allowed}.el-tree-node__expand-icon{cursor:pointer;color:#c0c4cc;font-size:12px;transform:rotate(0);transition:transform .3s ease-in-out}.el-tree-node__expand-icon.expanded{transform:rotate(90deg)}.el-tree-node__expand-icon.is-leaf{color:transparent;cursor:default}.el-tree-node__label{font-size:14px}.el-tree-node__loading-icon{margin-right:8px;font-size:14px;color:#c0c4cc}.el-tree-node>.el-tree-node__children{overflow:hidden;background-color:transparent}.el-tree-node.is-expanded>.el-tree-node__children{display:block}.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:#f0f7ff}.el-alert{width:100%;padding:8px 16px;margin:0;box-sizing:border-box;border-radius:4px;position:relative;background-color:#fff;overflow:hidden;opacity:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;transition:opacity .2s}.el-alert.is-light .el-alert__closebtn{color:#c0c4cc}.el-alert.is-dark .el-alert__closebtn,.el-alert.is-dark .el-alert__description{color:#fff}.el-alert.is-center{-ms-flex-pack:center;justify-content:center}.el-alert--success.is-light{background-color:#f0f9eb;color:#67c23a}.el-alert--success.is-light .el-alert__description{color:#67c23a}.el-alert--success.is-dark{background-color:#67c23a;color:#fff}.el-alert--info.is-light{background-color:#f4f4f5;color:#909399}.el-alert--info.is-dark{background-color:#909399;color:#fff}.el-alert--info .el-alert__description{color:#909399}.el-alert--warning.is-light{background-color:#fdf6ec;color:#e6a23c}.el-alert--warning.is-light .el-alert__description{color:#e6a23c}.el-alert--warning.is-dark{background-color:#e6a23c;color:#fff}.el-alert--error.is-light{background-color:#fef0f0;color:#f56c6c}.el-alert--error.is-light .el-alert__description{color:#f56c6c}.el-alert--error.is-dark{background-color:#f56c6c;color:#fff}.el-alert__content{display:table-cell;padding:0 8px}.el-alert__icon{font-size:16px;width:16px}.el-alert__icon.is-big{font-size:28px;width:28px}.el-alert__title{font-size:13px;line-height:18px}.el-alert__title.is-bold{font-weight:700}.el-alert .el-alert__description{font-size:12px;margin:5px 0 0}.el-alert__closebtn{font-size:12px;opacity:1;position:absolute;top:12px;right:15px;cursor:pointer}.el-alert-fade-enter,.el-alert-fade-leave-active,.el-loading-fade-enter,.el-loading-fade-leave-active,.el-notification-fade-leave-active{opacity:0}.el-alert__closebtn.is-customed{font-style:normal;font-size:13px;top:9px}.el-notification{display:-ms-flexbox;display:flex;width:330px;padding:14px 26px 14px 13px;border-radius:8px;box-sizing:border-box;border:1px solid #ebeef5;position:fixed;background-color:#fff;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s;overflow:hidden}.el-notification.right{right:16px}.el-notification.left{left:16px}.el-notification__group{margin-left:13px;margin-right:8px}.el-notification__title{font-weight:700;font-size:16px;color:#303133;margin:0}.el-notification__content{font-size:14px;line-height:21px;margin:6px 0 0;color:#606266;text-align:justify}.el-notification__content p{margin:0}.el-notification__icon{height:24px;width:24px;font-size:24px}.el-notification__closeBtn{position:absolute;top:18px;right:15px;cursor:pointer;color:#909399;font-size:16px}.el-notification__closeBtn:hover{color:#606266}.el-notification .el-icon-success{color:#67c23a}.el-notification .el-icon-error{color:#f56c6c}.el-notification .el-icon-info{color:#909399}.el-notification .el-icon-warning{color:#e6a23c}.el-notification-fade-enter.right{right:0;transform:translateX(100%)}.el-notification-fade-enter.left{left:0;transform:translateX(-100%)}.el-input-number{position:relative;display:inline-block;width:180px;line-height:38px}.el-input-number .el-input{display:block}.el-input-number .el-input__inner{-webkit-appearance:none;padding-left:50px;padding-right:50px;text-align:center}.el-input-number__decrease,.el-input-number__increase{position:absolute;z-index:1;top:1px;width:40px;height:auto;text-align:center;background:#f5f7fa;color:#606266;cursor:pointer;font-size:13px}.el-input-number__decrease:hover,.el-input-number__increase:hover{color:#409eff}.el-input-number__decrease:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled),.el-input-number__increase:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled){border-color:#409eff}.el-input-number__decrease.is-disabled,.el-input-number__increase.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-input-number__increase{right:1px;border-radius:0 4px 4px 0;border-left:1px solid #dcdfe6}.el-input-number__decrease{left:1px;border-radius:4px 0 0 4px;border-right:1px solid #dcdfe6}.el-input-number.is-disabled .el-input-number__decrease,.el-input-number.is-disabled .el-input-number__increase{border-color:#e4e7ed;color:#e4e7ed}.el-input-number.is-disabled .el-input-number__decrease:hover,.el-input-number.is-disabled .el-input-number__increase:hover{color:#e4e7ed;cursor:not-allowed}.el-input-number--medium{width:200px;line-height:34px}.el-input-number--medium .el-input-number__decrease,.el-input-number--medium .el-input-number__increase{width:36px;font-size:14px}.el-input-number--medium .el-input__inner{padding-left:43px;padding-right:43px}.el-input-number--small{width:130px;line-height:30px}.el-input-number--small .el-input-number__decrease,.el-input-number--small .el-input-number__increase{width:32px;font-size:13px}.el-input-number--small .el-input-number__decrease [class*=el-icon],.el-input-number--small .el-input-number__increase [class*=el-icon]{transform:scale(.9)}.el-input-number--small .el-input__inner{padding-left:39px;padding-right:39px}.el-input-number--mini{width:130px;line-height:26px}.el-input-number--mini .el-input-number__decrease,.el-input-number--mini .el-input-number__increase{width:28px;font-size:12px}.el-input-number--mini .el-input-number__decrease [class*=el-icon],.el-input-number--mini .el-input-number__increase [class*=el-icon]{transform:scale(.8)}.el-input-number--mini .el-input__inner{padding-left:35px;padding-right:35px}.el-input-number.is-without-controls .el-input__inner{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__inner{padding-left:15px;padding-right:50px}.el-input-number.is-controls-right .el-input-number__decrease,.el-input-number.is-controls-right .el-input-number__increase{height:auto;line-height:19px}.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-radius:0 4px 0 0;border-bottom:1px solid #dcdfe6}.el-input-number.is-controls-right .el-input-number__decrease{right:1px;bottom:1px;top:auto;left:auto;border-right:none;border-left:1px solid #dcdfe6;border-radius:0 0 4px}.el-input-number.is-controls-right[class*=medium] [class*=decrease],.el-input-number.is-controls-right[class*=medium] [class*=increase]{line-height:17px}.el-input-number.is-controls-right[class*=small] [class*=decrease],.el-input-number.is-controls-right[class*=small] [class*=increase]{line-height:15px}.el-input-number.is-controls-right[class*=mini] [class*=decrease],.el-input-number.is-controls-right[class*=mini] [class*=increase]{line-height:13px}.el-tooltip__popper{position:absolute;border-radius:4px;padding:10px;z-index:2000;font-size:12px;line-height:1.2;min-width:10px;word-wrap:break-word}.el-tooltip__popper .popper__arrow,.el-tooltip__popper .popper__arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-tooltip__popper .popper__arrow{border-width:6px}.el-tooltip__popper .popper__arrow:after{content:" ";border-width:5px}.el-progress-bar__inner:after,.el-row:after,.el-row:before,.el-slider:after,.el-slider:before,.el-slider__button-wrapper:after,.el-upload-cover:after{content:""}.el-tooltip__popper[x-placement^=top]{margin-bottom:12px}.el-tooltip__popper[x-placement^=top] .popper__arrow{bottom:-6px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=top] .popper__arrow:after{bottom:1px;margin-left:-5px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=bottom]{margin-top:12px}.el-tooltip__popper[x-placement^=bottom] .popper__arrow{top:-6px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=bottom] .popper__arrow:after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=right]{margin-left:12px}.el-tooltip__popper[x-placement^=right] .popper__arrow{left:-6px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=right] .popper__arrow:after{bottom:-5px;left:1px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=left]{margin-right:12px}.el-tooltip__popper[x-placement^=left] .popper__arrow{right:-6px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper[x-placement^=left] .popper__arrow:after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper.is-dark{background:#303133;color:#fff}.el-tooltip__popper.is-light{background:#fff;border:1px solid #303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:#303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow:after{border-top-color:#fff}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow{border-bottom-color:#303133}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow:after{border-bottom-color:#fff}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow{border-left-color:#303133}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow:after{border-left-color:#fff}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow{border-right-color:#303133}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow:after{border-right-color:#fff}.el-slider:after,.el-slider:before{display:table}.el-slider__button-wrapper .el-tooltip,.el-slider__button-wrapper:after{vertical-align:middle;display:inline-block}.el-slider:after{clear:both}.el-slider__runway{width:100%;height:6px;margin:16px 0;background-color:#e4e7ed;border-radius:3px;position:relative;cursor:pointer;vertical-align:middle}.el-slider__runway.show-input{margin-right:160px;width:auto}.el-slider__runway.disabled{cursor:default}.el-slider__runway.disabled .el-slider__bar{background-color:#c0c4cc}.el-slider__runway.disabled .el-slider__button{border-color:#c0c4cc}.el-slider__runway.disabled .el-slider__button-wrapper.dragging,.el-slider__runway.disabled .el-slider__button-wrapper.hover,.el-slider__runway.disabled .el-slider__button-wrapper:hover{cursor:not-allowed}.el-slider__runway.disabled .el-slider__button.dragging,.el-slider__runway.disabled .el-slider__button.hover,.el-slider__runway.disabled .el-slider__button:hover{transform:scale(1);cursor:not-allowed}.el-slider__button-wrapper,.el-slider__stop{-webkit-transform:translateX(-50%);position:absolute}.el-slider__input{float:right;margin-top:3px;width:130px}.el-slider__input.el-input-number--mini{margin-top:5px}.el-slider__input.el-input-number--medium{margin-top:0}.el-slider__input.el-input-number--large{margin-top:-2px}.el-slider__bar{height:6px;background-color:#409eff;border-top-left-radius:3px;border-bottom-left-radius:3px;position:absolute}.el-slider__button-wrapper{height:36px;width:36px;z-index:1001;top:-15px;transform:translateX(-50%);background-color:transparent;text-align:center;user-select:none;line-height:normal}.el-slider__button-wrapper:after{height:100%}.el-slider__button-wrapper.hover,.el-slider__button-wrapper:hover{cursor:grab}.el-slider__button-wrapper.dragging{cursor:grabbing}.el-slider__button{width:16px;height:16px;border:2px solid #409eff;background-color:#fff;border-radius:50%;transition:.2s;user-select:none}.el-image-viewer__btn,.el-step__icon-inner{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.el-slider__button.dragging,.el-slider__button.hover,.el-slider__button:hover{transform:scale(1.2)}.el-slider__button.hover,.el-slider__button:hover{cursor:grab}.el-slider__button.dragging{cursor:grabbing}.el-slider__stop{height:6px;width:6px;border-radius:100%;background-color:#fff;transform:translateX(-50%)}.el-slider__marks{top:0;left:12px;width:18px;height:100%}.el-slider__marks-text{position:absolute;transform:translateX(-50%);font-size:14px;color:#909399;margin-top:15px}.el-slider.is-vertical{position:relative}.el-slider.is-vertical .el-slider__runway{width:6px;height:100%;margin:0 16px}.el-slider.is-vertical .el-slider__bar{width:6px;height:auto;border-radius:0 0 3px 3px}.el-slider.is-vertical .el-slider__button-wrapper{top:auto;left:-15px}.el-slider.is-vertical .el-slider__button-wrapper,.el-slider.is-vertical .el-slider__stop{transform:translateY(50%)}.el-slider.is-vertical.el-slider--with-input{padding-bottom:58px}.el-slider.is-vertical.el-slider--with-input .el-slider__input{overflow:visible;float:none;position:absolute;bottom:22px;width:36px;margin-top:15px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input__inner{text-align:center;padding-left:5px;padding-right:5px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{top:32px;margin-top:-1px;border:1px solid #dcdfe6;line-height:20px;box-sizing:border-box;transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease{width:18px;right:18px;border-bottom-left-radius:4px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{width:19px;border-bottom-right-radius:4px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase~.el-input .el-input__inner{border-bottom-left-radius:0;border-bottom-right-radius:0}.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__increase{border-color:#c0c4cc}.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__increase{border-color:#409eff}.el-slider.is-vertical .el-slider__marks-text{margin-top:0;left:15px;transform:translateY(50%)}.el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{position:absolute;z-index:2000;background-color:hsla(0,0%,100%,.9);margin:0;top:0;right:0;bottom:0;left:0;transition:opacity .3s}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:-25px}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:50px;width:50px}.el-loading-spinner{top:50%;margin-top:-21px;width:100%;text-align:center;position:absolute}.el-col-pull-0,.el-col-pull-1,.el-col-pull-2,.el-col-pull-3,.el-col-pull-4,.el-col-pull-5,.el-col-pull-6,.el-col-pull-7,.el-col-pull-8,.el-col-pull-9,.el-col-pull-10,.el-col-pull-11,.el-col-pull-13,.el-col-pull-14,.el-col-pull-15,.el-col-pull-16,.el-col-pull-17,.el-col-pull-18,.el-col-pull-19,.el-col-pull-20,.el-col-pull-21,.el-col-pull-22,.el-col-pull-23,.el-col-pull-24,.el-col-push-0,.el-col-push-1,.el-col-push-2,.el-col-push-3,.el-col-push-4,.el-col-push-5,.el-col-push-6,.el-col-push-7,.el-col-push-8,.el-col-push-9,.el-col-push-10,.el-col-push-11,.el-col-push-12,.el-col-push-13,.el-col-push-14,.el-col-push-15,.el-col-push-16,.el-col-push-17,.el-col-push-18,.el-col-push-19,.el-col-push-20,.el-col-push-21,.el-col-push-22,.el-col-push-23,.el-col-push-24,.el-row{position:relative}.el-loading-spinner .el-loading-text{color:#409eff;margin:3px 0;font-size:14px}.el-loading-spinner .circular{height:42px;width:42px;animation:loading-rotate 2s linear infinite}.el-loading-spinner .path{animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:#409eff;stroke-linecap:round}.el-loading-spinner i{color:#409eff}@keyframes loading-rotate{to{transform:rotate(1turn)}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}to{stroke-dasharray:90,150;stroke-dashoffset:-120px}}.el-row{box-sizing:border-box}.el-row:after,.el-row:before{display:table}.el-row:after{clear:both}.el-row--flex{display:-ms-flexbox;display:flex}.el-col-0,.el-row--flex:after,.el-row--flex:before{display:none}.el-row--flex.is-justify-center{-ms-flex-pack:center;justify-content:center}.el-row--flex.is-justify-end{-ms-flex-pack:end;justify-content:flex-end}.el-row--flex.is-justify-space-between{-ms-flex-pack:justify;justify-content:space-between}.el-row--flex.is-justify-space-around{-ms-flex-pack:distribute;justify-content:space-around}.el-row--flex.is-align-middle{-ms-flex-align:center;align-items:center}.el-row--flex.is-align-bottom{-ms-flex-align:end;align-items:flex-end}[class*=el-col-]{float:left;box-sizing:border-box}.el-upload--picture-card,.el-upload-dragger{-webkit-box-sizing:border-box;cursor:pointer}.el-col-0{width:0}.el-col-offset-0{margin-left:0}.el-col-pull-0{right:0}.el-col-push-0{left:0}.el-col-1{width:4.16667%}.el-col-offset-1{margin-left:4.16667%}.el-col-pull-1{right:4.16667%}.el-col-push-1{left:4.16667%}.el-col-2{width:8.33333%}.el-col-offset-2{margin-left:8.33333%}.el-col-pull-2{right:8.33333%}.el-col-push-2{left:8.33333%}.el-col-3{width:12.5%}.el-col-offset-3{margin-left:12.5%}.el-col-pull-3{right:12.5%}.el-col-push-3{left:12.5%}.el-col-4{width:16.66667%}.el-col-offset-4{margin-left:16.66667%}.el-col-pull-4{right:16.66667%}.el-col-push-4{left:16.66667%}.el-col-5{width:20.83333%}.el-col-offset-5{margin-left:20.83333%}.el-col-pull-5{right:20.83333%}.el-col-push-5{left:20.83333%}.el-col-6{width:25%}.el-col-offset-6{margin-left:25%}.el-col-pull-6{right:25%}.el-col-push-6{left:25%}.el-col-7{width:29.16667%}.el-col-offset-7{margin-left:29.16667%}.el-col-pull-7{right:29.16667%}.el-col-push-7{left:29.16667%}.el-col-8{width:33.33333%}.el-col-offset-8{margin-left:33.33333%}.el-col-pull-8{right:33.33333%}.el-col-push-8{left:33.33333%}.el-col-9{width:37.5%}.el-col-offset-9{margin-left:37.5%}.el-col-pull-9{right:37.5%}.el-col-push-9{left:37.5%}.el-col-10{width:41.66667%}.el-col-offset-10{margin-left:41.66667%}.el-col-pull-10{right:41.66667%}.el-col-push-10{left:41.66667%}.el-col-11{width:45.83333%}.el-col-offset-11{margin-left:45.83333%}.el-col-pull-11{right:45.83333%}.el-col-push-11{left:45.83333%}.el-col-12{width:50%}.el-col-offset-12{margin-left:50%}.el-col-pull-12{position:relative;right:50%}.el-col-push-12{left:50%}.el-col-13{width:54.16667%}.el-col-offset-13{margin-left:54.16667%}.el-col-pull-13{right:54.16667%}.el-col-push-13{left:54.16667%}.el-col-14{width:58.33333%}.el-col-offset-14{margin-left:58.33333%}.el-col-pull-14{right:58.33333%}.el-col-push-14{left:58.33333%}.el-col-15{width:62.5%}.el-col-offset-15{margin-left:62.5%}.el-col-pull-15{right:62.5%}.el-col-push-15{left:62.5%}.el-col-16{width:66.66667%}.el-col-offset-16{margin-left:66.66667%}.el-col-pull-16{right:66.66667%}.el-col-push-16{left:66.66667%}.el-col-17{width:70.83333%}.el-col-offset-17{margin-left:70.83333%}.el-col-pull-17{right:70.83333%}.el-col-push-17{left:70.83333%}.el-col-18{width:75%}.el-col-offset-18{margin-left:75%}.el-col-pull-18{right:75%}.el-col-push-18{left:75%}.el-col-19{width:79.16667%}.el-col-offset-19{margin-left:79.16667%}.el-col-pull-19{right:79.16667%}.el-col-push-19{left:79.16667%}.el-col-20{width:83.33333%}.el-col-offset-20{margin-left:83.33333%}.el-col-pull-20{right:83.33333%}.el-col-push-20{left:83.33333%}.el-col-21{width:87.5%}.el-col-offset-21{margin-left:87.5%}.el-col-pull-21{right:87.5%}.el-col-push-21{left:87.5%}.el-col-22{width:91.66667%}.el-col-offset-22{margin-left:91.66667%}.el-col-pull-22{right:91.66667%}.el-col-push-22{left:91.66667%}.el-col-23{width:95.83333%}.el-col-offset-23{margin-left:95.83333%}.el-col-pull-23{right:95.83333%}.el-col-push-23{left:95.83333%}.el-col-24{width:100%}.el-col-offset-24{margin-left:100%}.el-col-pull-24{right:100%}.el-col-push-24{left:100%}@media only screen and (max-width:767px){.el-col-xs-0{display:none;width:0}.el-col-xs-offset-0{margin-left:0}.el-col-xs-pull-0{position:relative;right:0}.el-col-xs-push-0{position:relative;left:0}.el-col-xs-1{width:4.16667%}.el-col-xs-offset-1{margin-left:4.16667%}.el-col-xs-pull-1{position:relative;right:4.16667%}.el-col-xs-push-1{position:relative;left:4.16667%}.el-col-xs-2{width:8.33333%}.el-col-xs-offset-2{margin-left:8.33333%}.el-col-xs-pull-2{position:relative;right:8.33333%}.el-col-xs-push-2{position:relative;left:8.33333%}.el-col-xs-3{width:12.5%}.el-col-xs-offset-3{margin-left:12.5%}.el-col-xs-pull-3{position:relative;right:12.5%}.el-col-xs-push-3{position:relative;left:12.5%}.el-col-xs-4{width:16.66667%}.el-col-xs-offset-4{margin-left:16.66667%}.el-col-xs-pull-4{position:relative;right:16.66667%}.el-col-xs-push-4{position:relative;left:16.66667%}.el-col-xs-5{width:20.83333%}.el-col-xs-offset-5{margin-left:20.83333%}.el-col-xs-pull-5{position:relative;right:20.83333%}.el-col-xs-push-5{position:relative;left:20.83333%}.el-col-xs-6{width:25%}.el-col-xs-offset-6{margin-left:25%}.el-col-xs-pull-6{position:relative;right:25%}.el-col-xs-push-6{position:relative;left:25%}.el-col-xs-7{width:29.16667%}.el-col-xs-offset-7{margin-left:29.16667%}.el-col-xs-pull-7{position:relative;right:29.16667%}.el-col-xs-push-7{position:relative;left:29.16667%}.el-col-xs-8{width:33.33333%}.el-col-xs-offset-8{margin-left:33.33333%}.el-col-xs-pull-8{position:relative;right:33.33333%}.el-col-xs-push-8{position:relative;left:33.33333%}.el-col-xs-9{width:37.5%}.el-col-xs-offset-9{margin-left:37.5%}.el-col-xs-pull-9{position:relative;right:37.5%}.el-col-xs-push-9{position:relative;left:37.5%}.el-col-xs-10{width:41.66667%}.el-col-xs-offset-10{margin-left:41.66667%}.el-col-xs-pull-10{position:relative;right:41.66667%}.el-col-xs-push-10{position:relative;left:41.66667%}.el-col-xs-11{width:45.83333%}.el-col-xs-offset-11{margin-left:45.83333%}.el-col-xs-pull-11{position:relative;right:45.83333%}.el-col-xs-push-11{position:relative;left:45.83333%}.el-col-xs-12{width:50%}.el-col-xs-offset-12{margin-left:50%}.el-col-xs-pull-12{position:relative;right:50%}.el-col-xs-push-12{position:relative;left:50%}.el-col-xs-13{width:54.16667%}.el-col-xs-offset-13{margin-left:54.16667%}.el-col-xs-pull-13{position:relative;right:54.16667%}.el-col-xs-push-13{position:relative;left:54.16667%}.el-col-xs-14{width:58.33333%}.el-col-xs-offset-14{margin-left:58.33333%}.el-col-xs-pull-14{position:relative;right:58.33333%}.el-col-xs-push-14{position:relative;left:58.33333%}.el-col-xs-15{width:62.5%}.el-col-xs-offset-15{margin-left:62.5%}.el-col-xs-pull-15{position:relative;right:62.5%}.el-col-xs-push-15{position:relative;left:62.5%}.el-col-xs-16{width:66.66667%}.el-col-xs-offset-16{margin-left:66.66667%}.el-col-xs-pull-16{position:relative;right:66.66667%}.el-col-xs-push-16{position:relative;left:66.66667%}.el-col-xs-17{width:70.83333%}.el-col-xs-offset-17{margin-left:70.83333%}.el-col-xs-pull-17{position:relative;right:70.83333%}.el-col-xs-push-17{position:relative;left:70.83333%}.el-col-xs-18{width:75%}.el-col-xs-offset-18{margin-left:75%}.el-col-xs-pull-18{position:relative;right:75%}.el-col-xs-push-18{position:relative;left:75%}.el-col-xs-19{width:79.16667%}.el-col-xs-offset-19{margin-left:79.16667%}.el-col-xs-pull-19{position:relative;right:79.16667%}.el-col-xs-push-19{position:relative;left:79.16667%}.el-col-xs-20{width:83.33333%}.el-col-xs-offset-20{margin-left:83.33333%}.el-col-xs-pull-20{position:relative;right:83.33333%}.el-col-xs-push-20{position:relative;left:83.33333%}.el-col-xs-21{width:87.5%}.el-col-xs-offset-21{margin-left:87.5%}.el-col-xs-pull-21{position:relative;right:87.5%}.el-col-xs-push-21{position:relative;left:87.5%}.el-col-xs-22{width:91.66667%}.el-col-xs-offset-22{margin-left:91.66667%}.el-col-xs-pull-22{position:relative;right:91.66667%}.el-col-xs-push-22{position:relative;left:91.66667%}.el-col-xs-23{width:95.83333%}.el-col-xs-offset-23{margin-left:95.83333%}.el-col-xs-pull-23{position:relative;right:95.83333%}.el-col-xs-push-23{position:relative;left:95.83333%}.el-col-xs-24{width:100%}.el-col-xs-offset-24{margin-left:100%}.el-col-xs-pull-24{position:relative;right:100%}.el-col-xs-push-24{position:relative;left:100%}}@media only screen and (min-width:768px){.el-col-sm-0{display:none;width:0}.el-col-sm-offset-0{margin-left:0}.el-col-sm-pull-0{position:relative;right:0}.el-col-sm-push-0{position:relative;left:0}.el-col-sm-1{width:4.16667%}.el-col-sm-offset-1{margin-left:4.16667%}.el-col-sm-pull-1{position:relative;right:4.16667%}.el-col-sm-push-1{position:relative;left:4.16667%}.el-col-sm-2{width:8.33333%}.el-col-sm-offset-2{margin-left:8.33333%}.el-col-sm-pull-2{position:relative;right:8.33333%}.el-col-sm-push-2{position:relative;left:8.33333%}.el-col-sm-3{width:12.5%}.el-col-sm-offset-3{margin-left:12.5%}.el-col-sm-pull-3{position:relative;right:12.5%}.el-col-sm-push-3{position:relative;left:12.5%}.el-col-sm-4{width:16.66667%}.el-col-sm-offset-4{margin-left:16.66667%}.el-col-sm-pull-4{position:relative;right:16.66667%}.el-col-sm-push-4{position:relative;left:16.66667%}.el-col-sm-5{width:20.83333%}.el-col-sm-offset-5{margin-left:20.83333%}.el-col-sm-pull-5{position:relative;right:20.83333%}.el-col-sm-push-5{position:relative;left:20.83333%}.el-col-sm-6{width:25%}.el-col-sm-offset-6{margin-left:25%}.el-col-sm-pull-6{position:relative;right:25%}.el-col-sm-push-6{position:relative;left:25%}.el-col-sm-7{width:29.16667%}.el-col-sm-offset-7{margin-left:29.16667%}.el-col-sm-pull-7{position:relative;right:29.16667%}.el-col-sm-push-7{position:relative;left:29.16667%}.el-col-sm-8{width:33.33333%}.el-col-sm-offset-8{margin-left:33.33333%}.el-col-sm-pull-8{position:relative;right:33.33333%}.el-col-sm-push-8{position:relative;left:33.33333%}.el-col-sm-9{width:37.5%}.el-col-sm-offset-9{margin-left:37.5%}.el-col-sm-pull-9{position:relative;right:37.5%}.el-col-sm-push-9{position:relative;left:37.5%}.el-col-sm-10{width:41.66667%}.el-col-sm-offset-10{margin-left:41.66667%}.el-col-sm-pull-10{position:relative;right:41.66667%}.el-col-sm-push-10{position:relative;left:41.66667%}.el-col-sm-11{width:45.83333%}.el-col-sm-offset-11{margin-left:45.83333%}.el-col-sm-pull-11{position:relative;right:45.83333%}.el-col-sm-push-11{position:relative;left:45.83333%}.el-col-sm-12{width:50%}.el-col-sm-offset-12{margin-left:50%}.el-col-sm-pull-12{position:relative;right:50%}.el-col-sm-push-12{position:relative;left:50%}.el-col-sm-13{width:54.16667%}.el-col-sm-offset-13{margin-left:54.16667%}.el-col-sm-pull-13{position:relative;right:54.16667%}.el-col-sm-push-13{position:relative;left:54.16667%}.el-col-sm-14{width:58.33333%}.el-col-sm-offset-14{margin-left:58.33333%}.el-col-sm-pull-14{position:relative;right:58.33333%}.el-col-sm-push-14{position:relative;left:58.33333%}.el-col-sm-15{width:62.5%}.el-col-sm-offset-15{margin-left:62.5%}.el-col-sm-pull-15{position:relative;right:62.5%}.el-col-sm-push-15{position:relative;left:62.5%}.el-col-sm-16{width:66.66667%}.el-col-sm-offset-16{margin-left:66.66667%}.el-col-sm-pull-16{position:relative;right:66.66667%}.el-col-sm-push-16{position:relative;left:66.66667%}.el-col-sm-17{width:70.83333%}.el-col-sm-offset-17{margin-left:70.83333%}.el-col-sm-pull-17{position:relative;right:70.83333%}.el-col-sm-push-17{position:relative;left:70.83333%}.el-col-sm-18{width:75%}.el-col-sm-offset-18{margin-left:75%}.el-col-sm-pull-18{position:relative;right:75%}.el-col-sm-push-18{position:relative;left:75%}.el-col-sm-19{width:79.16667%}.el-col-sm-offset-19{margin-left:79.16667%}.el-col-sm-pull-19{position:relative;right:79.16667%}.el-col-sm-push-19{position:relative;left:79.16667%}.el-col-sm-20{width:83.33333%}.el-col-sm-offset-20{margin-left:83.33333%}.el-col-sm-pull-20{position:relative;right:83.33333%}.el-col-sm-push-20{position:relative;left:83.33333%}.el-col-sm-21{width:87.5%}.el-col-sm-offset-21{margin-left:87.5%}.el-col-sm-pull-21{position:relative;right:87.5%}.el-col-sm-push-21{position:relative;left:87.5%}.el-col-sm-22{width:91.66667%}.el-col-sm-offset-22{margin-left:91.66667%}.el-col-sm-pull-22{position:relative;right:91.66667%}.el-col-sm-push-22{position:relative;left:91.66667%}.el-col-sm-23{width:95.83333%}.el-col-sm-offset-23{margin-left:95.83333%}.el-col-sm-pull-23{position:relative;right:95.83333%}.el-col-sm-push-23{position:relative;left:95.83333%}.el-col-sm-24{width:100%}.el-col-sm-offset-24{margin-left:100%}.el-col-sm-pull-24{position:relative;right:100%}.el-col-sm-push-24{position:relative;left:100%}}@media only screen and (min-width:992px){.el-col-md-0{display:none;width:0}.el-col-md-offset-0{margin-left:0}.el-col-md-pull-0{position:relative;right:0}.el-col-md-push-0{position:relative;left:0}.el-col-md-1{width:4.16667%}.el-col-md-offset-1{margin-left:4.16667%}.el-col-md-pull-1{position:relative;right:4.16667%}.el-col-md-push-1{position:relative;left:4.16667%}.el-col-md-2{width:8.33333%}.el-col-md-offset-2{margin-left:8.33333%}.el-col-md-pull-2{position:relative;right:8.33333%}.el-col-md-push-2{position:relative;left:8.33333%}.el-col-md-3{width:12.5%}.el-col-md-offset-3{margin-left:12.5%}.el-col-md-pull-3{position:relative;right:12.5%}.el-col-md-push-3{position:relative;left:12.5%}.el-col-md-4{width:16.66667%}.el-col-md-offset-4{margin-left:16.66667%}.el-col-md-pull-4{position:relative;right:16.66667%}.el-col-md-push-4{position:relative;left:16.66667%}.el-col-md-5{width:20.83333%}.el-col-md-offset-5{margin-left:20.83333%}.el-col-md-pull-5{position:relative;right:20.83333%}.el-col-md-push-5{position:relative;left:20.83333%}.el-col-md-6{width:25%}.el-col-md-offset-6{margin-left:25%}.el-col-md-pull-6{position:relative;right:25%}.el-col-md-push-6{position:relative;left:25%}.el-col-md-7{width:29.16667%}.el-col-md-offset-7{margin-left:29.16667%}.el-col-md-pull-7{position:relative;right:29.16667%}.el-col-md-push-7{position:relative;left:29.16667%}.el-col-md-8{width:33.33333%}.el-col-md-offset-8{margin-left:33.33333%}.el-col-md-pull-8{position:relative;right:33.33333%}.el-col-md-push-8{position:relative;left:33.33333%}.el-col-md-9{width:37.5%}.el-col-md-offset-9{margin-left:37.5%}.el-col-md-pull-9{position:relative;right:37.5%}.el-col-md-push-9{position:relative;left:37.5%}.el-col-md-10{width:41.66667%}.el-col-md-offset-10{margin-left:41.66667%}.el-col-md-pull-10{position:relative;right:41.66667%}.el-col-md-push-10{position:relative;left:41.66667%}.el-col-md-11{width:45.83333%}.el-col-md-offset-11{margin-left:45.83333%}.el-col-md-pull-11{position:relative;right:45.83333%}.el-col-md-push-11{position:relative;left:45.83333%}.el-col-md-12{width:50%}.el-col-md-offset-12{margin-left:50%}.el-col-md-pull-12{position:relative;right:50%}.el-col-md-push-12{position:relative;left:50%}.el-col-md-13{width:54.16667%}.el-col-md-offset-13{margin-left:54.16667%}.el-col-md-pull-13{position:relative;right:54.16667%}.el-col-md-push-13{position:relative;left:54.16667%}.el-col-md-14{width:58.33333%}.el-col-md-offset-14{margin-left:58.33333%}.el-col-md-pull-14{position:relative;right:58.33333%}.el-col-md-push-14{position:relative;left:58.33333%}.el-col-md-15{width:62.5%}.el-col-md-offset-15{margin-left:62.5%}.el-col-md-pull-15{position:relative;right:62.5%}.el-col-md-push-15{position:relative;left:62.5%}.el-col-md-16{width:66.66667%}.el-col-md-offset-16{margin-left:66.66667%}.el-col-md-pull-16{position:relative;right:66.66667%}.el-col-md-push-16{position:relative;left:66.66667%}.el-col-md-17{width:70.83333%}.el-col-md-offset-17{margin-left:70.83333%}.el-col-md-pull-17{position:relative;right:70.83333%}.el-col-md-push-17{position:relative;left:70.83333%}.el-col-md-18{width:75%}.el-col-md-offset-18{margin-left:75%}.el-col-md-pull-18{position:relative;right:75%}.el-col-md-push-18{position:relative;left:75%}.el-col-md-19{width:79.16667%}.el-col-md-offset-19{margin-left:79.16667%}.el-col-md-pull-19{position:relative;right:79.16667%}.el-col-md-push-19{position:relative;left:79.16667%}.el-col-md-20{width:83.33333%}.el-col-md-offset-20{margin-left:83.33333%}.el-col-md-pull-20{position:relative;right:83.33333%}.el-col-md-push-20{position:relative;left:83.33333%}.el-col-md-21{width:87.5%}.el-col-md-offset-21{margin-left:87.5%}.el-col-md-pull-21{position:relative;right:87.5%}.el-col-md-push-21{position:relative;left:87.5%}.el-col-md-22{width:91.66667%}.el-col-md-offset-22{margin-left:91.66667%}.el-col-md-pull-22{position:relative;right:91.66667%}.el-col-md-push-22{position:relative;left:91.66667%}.el-col-md-23{width:95.83333%}.el-col-md-offset-23{margin-left:95.83333%}.el-col-md-pull-23{position:relative;right:95.83333%}.el-col-md-push-23{position:relative;left:95.83333%}.el-col-md-24{width:100%}.el-col-md-offset-24{margin-left:100%}.el-col-md-pull-24{position:relative;right:100%}.el-col-md-push-24{position:relative;left:100%}}@media only screen and (min-width:1200px){.el-col-lg-0{display:none;width:0}.el-col-lg-offset-0{margin-left:0}.el-col-lg-pull-0{position:relative;right:0}.el-col-lg-push-0{position:relative;left:0}.el-col-lg-1{width:4.16667%}.el-col-lg-offset-1{margin-left:4.16667%}.el-col-lg-pull-1{position:relative;right:4.16667%}.el-col-lg-push-1{position:relative;left:4.16667%}.el-col-lg-2{width:8.33333%}.el-col-lg-offset-2{margin-left:8.33333%}.el-col-lg-pull-2{position:relative;right:8.33333%}.el-col-lg-push-2{position:relative;left:8.33333%}.el-col-lg-3{width:12.5%}.el-col-lg-offset-3{margin-left:12.5%}.el-col-lg-pull-3{position:relative;right:12.5%}.el-col-lg-push-3{position:relative;left:12.5%}.el-col-lg-4{width:16.66667%}.el-col-lg-offset-4{margin-left:16.66667%}.el-col-lg-pull-4{position:relative;right:16.66667%}.el-col-lg-push-4{position:relative;left:16.66667%}.el-col-lg-5{width:20.83333%}.el-col-lg-offset-5{margin-left:20.83333%}.el-col-lg-pull-5{position:relative;right:20.83333%}.el-col-lg-push-5{position:relative;left:20.83333%}.el-col-lg-6{width:25%}.el-col-lg-offset-6{margin-left:25%}.el-col-lg-pull-6{position:relative;right:25%}.el-col-lg-push-6{position:relative;left:25%}.el-col-lg-7{width:29.16667%}.el-col-lg-offset-7{margin-left:29.16667%}.el-col-lg-pull-7{position:relative;right:29.16667%}.el-col-lg-push-7{position:relative;left:29.16667%}.el-col-lg-8{width:33.33333%}.el-col-lg-offset-8{margin-left:33.33333%}.el-col-lg-pull-8{position:relative;right:33.33333%}.el-col-lg-push-8{position:relative;left:33.33333%}.el-col-lg-9{width:37.5%}.el-col-lg-offset-9{margin-left:37.5%}.el-col-lg-pull-9{position:relative;right:37.5%}.el-col-lg-push-9{position:relative;left:37.5%}.el-col-lg-10{width:41.66667%}.el-col-lg-offset-10{margin-left:41.66667%}.el-col-lg-pull-10{position:relative;right:41.66667%}.el-col-lg-push-10{position:relative;left:41.66667%}.el-col-lg-11{width:45.83333%}.el-col-lg-offset-11{margin-left:45.83333%}.el-col-lg-pull-11{position:relative;right:45.83333%}.el-col-lg-push-11{position:relative;left:45.83333%}.el-col-lg-12{width:50%}.el-col-lg-offset-12{margin-left:50%}.el-col-lg-pull-12{position:relative;right:50%}.el-col-lg-push-12{position:relative;left:50%}.el-col-lg-13{width:54.16667%}.el-col-lg-offset-13{margin-left:54.16667%}.el-col-lg-pull-13{position:relative;right:54.16667%}.el-col-lg-push-13{position:relative;left:54.16667%}.el-col-lg-14{width:58.33333%}.el-col-lg-offset-14{margin-left:58.33333%}.el-col-lg-pull-14{position:relative;right:58.33333%}.el-col-lg-push-14{position:relative;left:58.33333%}.el-col-lg-15{width:62.5%}.el-col-lg-offset-15{margin-left:62.5%}.el-col-lg-pull-15{position:relative;right:62.5%}.el-col-lg-push-15{position:relative;left:62.5%}.el-col-lg-16{width:66.66667%}.el-col-lg-offset-16{margin-left:66.66667%}.el-col-lg-pull-16{position:relative;right:66.66667%}.el-col-lg-push-16{position:relative;left:66.66667%}.el-col-lg-17{width:70.83333%}.el-col-lg-offset-17{margin-left:70.83333%}.el-col-lg-pull-17{position:relative;right:70.83333%}.el-col-lg-push-17{position:relative;left:70.83333%}.el-col-lg-18{width:75%}.el-col-lg-offset-18{margin-left:75%}.el-col-lg-pull-18{position:relative;right:75%}.el-col-lg-push-18{position:relative;left:75%}.el-col-lg-19{width:79.16667%}.el-col-lg-offset-19{margin-left:79.16667%}.el-col-lg-pull-19{position:relative;right:79.16667%}.el-col-lg-push-19{position:relative;left:79.16667%}.el-col-lg-20{width:83.33333%}.el-col-lg-offset-20{margin-left:83.33333%}.el-col-lg-pull-20{position:relative;right:83.33333%}.el-col-lg-push-20{position:relative;left:83.33333%}.el-col-lg-21{width:87.5%}.el-col-lg-offset-21{margin-left:87.5%}.el-col-lg-pull-21{position:relative;right:87.5%}.el-col-lg-push-21{position:relative;left:87.5%}.el-col-lg-22{width:91.66667%}.el-col-lg-offset-22{margin-left:91.66667%}.el-col-lg-pull-22{position:relative;right:91.66667%}.el-col-lg-push-22{position:relative;left:91.66667%}.el-col-lg-23{width:95.83333%}.el-col-lg-offset-23{margin-left:95.83333%}.el-col-lg-pull-23{position:relative;right:95.83333%}.el-col-lg-push-23{position:relative;left:95.83333%}.el-col-lg-24{width:100%}.el-col-lg-offset-24{margin-left:100%}.el-col-lg-pull-24{position:relative;right:100%}.el-col-lg-push-24{position:relative;left:100%}}@media only screen and (min-width:1920px){.el-col-xl-0{display:none;width:0}.el-col-xl-offset-0{margin-left:0}.el-col-xl-pull-0{position:relative;right:0}.el-col-xl-push-0{position:relative;left:0}.el-col-xl-1{width:4.16667%}.el-col-xl-offset-1{margin-left:4.16667%}.el-col-xl-pull-1{position:relative;right:4.16667%}.el-col-xl-push-1{position:relative;left:4.16667%}.el-col-xl-2{width:8.33333%}.el-col-xl-offset-2{margin-left:8.33333%}.el-col-xl-pull-2{position:relative;right:8.33333%}.el-col-xl-push-2{position:relative;left:8.33333%}.el-col-xl-3{width:12.5%}.el-col-xl-offset-3{margin-left:12.5%}.el-col-xl-pull-3{position:relative;right:12.5%}.el-col-xl-push-3{position:relative;left:12.5%}.el-col-xl-4{width:16.66667%}.el-col-xl-offset-4{margin-left:16.66667%}.el-col-xl-pull-4{position:relative;right:16.66667%}.el-col-xl-push-4{position:relative;left:16.66667%}.el-col-xl-5{width:20.83333%}.el-col-xl-offset-5{margin-left:20.83333%}.el-col-xl-pull-5{position:relative;right:20.83333%}.el-col-xl-push-5{position:relative;left:20.83333%}.el-col-xl-6{width:25%}.el-col-xl-offset-6{margin-left:25%}.el-col-xl-pull-6{position:relative;right:25%}.el-col-xl-push-6{position:relative;left:25%}.el-col-xl-7{width:29.16667%}.el-col-xl-offset-7{margin-left:29.16667%}.el-col-xl-pull-7{position:relative;right:29.16667%}.el-col-xl-push-7{position:relative;left:29.16667%}.el-col-xl-8{width:33.33333%}.el-col-xl-offset-8{margin-left:33.33333%}.el-col-xl-pull-8{position:relative;right:33.33333%}.el-col-xl-push-8{position:relative;left:33.33333%}.el-col-xl-9{width:37.5%}.el-col-xl-offset-9{margin-left:37.5%}.el-col-xl-pull-9{position:relative;right:37.5%}.el-col-xl-push-9{position:relative;left:37.5%}.el-col-xl-10{width:41.66667%}.el-col-xl-offset-10{margin-left:41.66667%}.el-col-xl-pull-10{position:relative;right:41.66667%}.el-col-xl-push-10{position:relative;left:41.66667%}.el-col-xl-11{width:45.83333%}.el-col-xl-offset-11{margin-left:45.83333%}.el-col-xl-pull-11{position:relative;right:45.83333%}.el-col-xl-push-11{position:relative;left:45.83333%}.el-col-xl-12{width:50%}.el-col-xl-offset-12{margin-left:50%}.el-col-xl-pull-12{position:relative;right:50%}.el-col-xl-push-12{position:relative;left:50%}.el-col-xl-13{width:54.16667%}.el-col-xl-offset-13{margin-left:54.16667%}.el-col-xl-pull-13{position:relative;right:54.16667%}.el-col-xl-push-13{position:relative;left:54.16667%}.el-col-xl-14{width:58.33333%}.el-col-xl-offset-14{margin-left:58.33333%}.el-col-xl-pull-14{position:relative;right:58.33333%}.el-col-xl-push-14{position:relative;left:58.33333%}.el-col-xl-15{width:62.5%}.el-col-xl-offset-15{margin-left:62.5%}.el-col-xl-pull-15{position:relative;right:62.5%}.el-col-xl-push-15{position:relative;left:62.5%}.el-col-xl-16{width:66.66667%}.el-col-xl-offset-16{margin-left:66.66667%}.el-col-xl-pull-16{position:relative;right:66.66667%}.el-col-xl-push-16{position:relative;left:66.66667%}.el-col-xl-17{width:70.83333%}.el-col-xl-offset-17{margin-left:70.83333%}.el-col-xl-pull-17{position:relative;right:70.83333%}.el-col-xl-push-17{position:relative;left:70.83333%}.el-col-xl-18{width:75%}.el-col-xl-offset-18{margin-left:75%}.el-col-xl-pull-18{position:relative;right:75%}.el-col-xl-push-18{position:relative;left:75%}.el-col-xl-19{width:79.16667%}.el-col-xl-offset-19{margin-left:79.16667%}.el-col-xl-pull-19{position:relative;right:79.16667%}.el-col-xl-push-19{position:relative;left:79.16667%}.el-col-xl-20{width:83.33333%}.el-col-xl-offset-20{margin-left:83.33333%}.el-col-xl-pull-20{position:relative;right:83.33333%}.el-col-xl-push-20{position:relative;left:83.33333%}.el-col-xl-21{width:87.5%}.el-col-xl-offset-21{margin-left:87.5%}.el-col-xl-pull-21{position:relative;right:87.5%}.el-col-xl-push-21{position:relative;left:87.5%}.el-col-xl-22{width:91.66667%}.el-col-xl-offset-22{margin-left:91.66667%}.el-col-xl-pull-22{position:relative;right:91.66667%}.el-col-xl-push-22{position:relative;left:91.66667%}.el-col-xl-23{width:95.83333%}.el-col-xl-offset-23{margin-left:95.83333%}.el-col-xl-pull-23{position:relative;right:95.83333%}.el-col-xl-push-23{position:relative;left:95.83333%}.el-col-xl-24{width:100%}.el-col-xl-offset-24{margin-left:100%}.el-col-xl-pull-24{position:relative;right:100%}.el-col-xl-push-24{position:relative;left:100%}}.el-upload{display:inline-block;text-align:center;cursor:pointer;outline:0}.el-upload__input{display:none}.el-upload__tip{font-size:12px;color:#606266;margin-top:7px}.el-upload iframe{position:absolute;z-index:-1;top:0;left:0;opacity:0;filter:alpha(opacity=0)}.el-upload--picture-card{background-color:#fbfdff;border:1px dashed #c0ccda;border-radius:6px;box-sizing:border-box;width:148px;height:148px;line-height:146px;vertical-align:top}.el-upload--picture-card i{font-size:28px;color:#8c939d}.el-upload--picture-card:hover,.el-upload:focus{border-color:#409eff;color:#409eff}.el-upload:focus .el-upload-dragger{border-color:#409eff}.el-upload-dragger{background-color:#fff;border:1px dashed #d9d9d9;border-radius:6px;box-sizing:border-box;width:360px;height:180px;text-align:center;position:relative;overflow:hidden}.el-upload-dragger .el-icon-upload{font-size:67px;color:#c0c4cc;margin:40px 0 16px;line-height:50px}.el-upload-dragger+.el-upload__tip{text-align:center}.el-upload-dragger~.el-upload__files{border-top:1px solid #dcdfe6;margin-top:7px;padding-top:5px}.el-upload-dragger .el-upload__text{color:#606266;font-size:14px;text-align:center}.el-upload-dragger .el-upload__text em{color:#409eff;font-style:normal}.el-upload-dragger:hover{border-color:#409eff}.el-upload-dragger.is-dragover{background-color:rgba(32,159,255,.06);border:2px dashed #409eff}.el-upload-list{margin:0;padding:0;list-style:none}.el-upload-list__item{transition:all .5s cubic-bezier(.55,0,.1,1);font-size:14px;color:#606266;line-height:1.8;margin-top:5px;position:relative;box-sizing:border-box;border-radius:4px;width:100%}.el-upload-list__item .el-progress{position:absolute;top:20px;width:100%}.el-upload-list__item .el-progress__text{position:absolute;right:0;top:-13px}.el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.el-upload-list__item:first-child{margin-top:10px}.el-upload-list__item .el-icon-upload-success{color:#67c23a}.el-upload-list__item .el-icon-close{display:none;position:absolute;top:5px;right:5px;cursor:pointer;opacity:.75;color:#606266}.el-upload-list__item .el-icon-close:hover{opacity:1}.el-upload-list__item .el-icon-close-tip{display:none;position:absolute;top:5px;right:5px;font-size:12px;cursor:pointer;opacity:1;color:#409eff}.el-upload-list__item:hover{background-color:#f5f7fa}.el-upload-list__item:hover .el-icon-close{display:inline-block}.el-upload-list__item:hover .el-progress__text{display:none}.el-upload-list__item.is-success .el-upload-list__item-status-label{display:block}.el-upload-list__item.is-success .el-upload-list__item-name:focus,.el-upload-list__item.is-success .el-upload-list__item-name:hover{color:#409eff;cursor:pointer}.el-upload-list__item.is-success:focus:not(:hover) .el-icon-close-tip{display:inline-block}.el-upload-list__item.is-success:active .el-icon-close-tip,.el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.el-upload-list__item.is-success:hover .el-upload-list__item-status-label,.el-upload-list__item.is-success:not(.focusing):focus .el-icon-close-tip{display:none}.el-upload-list.is-disabled .el-upload-list__item:hover .el-upload-list__item-status-label{display:block}.el-upload-list__item-name{color:#606266;display:block;margin-right:40px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;transition:color .3s;white-space:nowrap}.el-upload-list__item-name [class^=el-icon]{height:100%;margin-right:7px;color:#909399;line-height:inherit}.el-upload-list__item-status-label{position:absolute;right:5px;top:0;line-height:inherit;display:none}.el-upload-list__item-delete{position:absolute;right:10px;top:0;font-size:12px;color:#606266;display:none}.el-upload-list__item-delete:hover{color:#409eff}.el-upload-list--picture-card{margin:0;display:inline;vertical-align:top}.el-upload-list--picture-card .el-upload-list__item{overflow:hidden;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;box-sizing:border-box;width:148px;height:148px;margin:0 8px 8px 0;display:inline-block}.el-upload-list--picture-card .el-upload-list__item .el-icon-check,.el-upload-list--picture-card .el-upload-list__item .el-icon-circle-check{color:#fff}.el-upload-list--picture-card .el-upload-list__item .el-icon-close,.el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture-card .el-upload-list__item-name{display:none}.el-upload-list--picture-card .el-upload-list__item-thumbnail{width:100%;height:100%}.el-upload-list--picture-card .el-upload-list__item-status-label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;transform:rotate(45deg);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-list--picture-card .el-upload-list__item-status-label i{font-size:12px;margin-top:11px;transform:rotate(-45deg)}.el-upload-list--picture-card .el-upload-list__item-actions{position:absolute;width:100%;height:100%;left:0;top:0;cursor:default;text-align:center;color:#fff;opacity:0;font-size:20px;background-color:rgba(0,0,0,.5);transition:opacity .3s}.el-upload-list--picture-card .el-upload-list__item-actions:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-upload-list--picture-card .el-upload-list__item-actions span{display:none;cursor:pointer}.el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:15px}.el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{position:static;font-size:inherit;color:inherit}.el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-block}.el-upload-list--picture-card .el-progress{top:50%;left:50%;transform:translate(-50%,-50%);bottom:auto;width:126px}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.el-upload-list--picture .el-upload-list__item{overflow:hidden;z-index:0;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;box-sizing:border-box;margin-top:10px;padding:10px 10px 10px 90px;height:92px}.el-upload-list--picture .el-upload-list__item .el-icon-check,.el-upload-list--picture .el-upload-list__item .el-icon-circle-check{color:#fff}.el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{background:0 0;box-shadow:none;top:-2px;right:-12px}.el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name{line-height:70px;margin-top:0}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.el-upload-list--picture .el-upload-list__item-thumbnail{vertical-align:middle;display:inline-block;width:70px;height:70px;float:left;position:relative;z-index:1;margin-left:-80px;background-color:#fff}.el-upload-list--picture .el-upload-list__item-name{display:block;margin-top:20px}.el-upload-list--picture .el-upload-list__item-name i{font-size:70px;line-height:1;position:absolute;left:9px;top:10px}.el-upload-list--picture .el-upload-list__item-status-label{position:absolute;right:-17px;top:-7px;width:46px;height:26px;background:#13ce66;text-align:center;transform:rotate(45deg);box-shadow:0 1px 1px #ccc}.el-upload-list--picture .el-upload-list__item-status-label i{font-size:12px;margin-top:12px;transform:rotate(-45deg)}.el-upload-list--picture .el-progress{position:relative;top:-7px}.el-upload-cover{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden;z-index:10;cursor:default}.el-upload-cover:after{display:inline-block;height:100%;vertical-align:middle}.el-upload-cover img{display:block;width:100%;height:100%}.el-upload-cover__label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;transform:rotate(45deg);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-cover__label i{font-size:12px;margin-top:11px;transform:rotate(-45deg);color:#fff}.el-upload-cover__progress{display:inline-block;vertical-align:middle;position:static;width:243px}.el-upload-cover__progress+.el-upload__inner{opacity:0}.el-upload-cover__content{position:absolute;top:0;left:0;width:100%;height:100%}.el-upload-cover__interact{position:absolute;bottom:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.72);text-align:center}.el-upload-cover__interact .btn{display:inline-block;color:#fff;font-size:14px;cursor:pointer;vertical-align:middle;transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);margin-top:60px}.el-upload-cover__interact .btn span{opacity:0;transition:opacity .15s linear}.el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.el-upload-cover__interact .btn:hover{transform:translateY(-13px)}.el-upload-cover__interact .btn:hover span{opacity:1}.el-upload-cover__interact .btn i{color:#fff;display:block;font-size:24px;line-height:inherit;margin:0 auto 5px}.el-upload-cover__title{position:absolute;bottom:0;left:0;background-color:#fff;height:36px;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:400;text-align:left;padding:0 10px;margin:0;line-height:36px;font-size:14px;color:#303133}.el-upload-cover+.el-upload__inner{opacity:0;position:relative;z-index:1}.el-progress{position:relative;line-height:1}.el-progress__text{font-size:14px;color:#606266;display:inline-block;vertical-align:middle;margin-left:10px;line-height:1}.el-progress__text i{vertical-align:middle;display:block}.el-progress--circle,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .el-progress__text{position:absolute;top:50%;left:0;width:100%;text-align:center;margin:0;transform:translateY(-50%)}.el-progress--circle .el-progress__text i,.el-progress--dashboard .el-progress__text i{vertical-align:middle;display:inline-block}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{padding-right:0;margin-right:0;display:block}.el-progress-bar,.el-progress-bar__inner:after,.el-progress-bar__innerText,.el-spinner{display:inline-block;vertical-align:middle}.el-progress--text-inside .el-progress-bar{padding-right:0;margin-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:#67c23a}.el-progress.is-success .el-progress__text{color:#67c23a}.el-progress.is-warning .el-progress-bar__inner{background-color:#e6a23c}.el-progress.is-warning .el-progress__text{color:#e6a23c}.el-progress.is-exception .el-progress-bar__inner{background-color:#f56c6c}.el-progress.is-exception .el-progress__text{color:#f56c6c}.el-progress-bar{padding-right:50px;width:100%;margin-right:-55px;box-sizing:border-box}.el-progress-bar__outer{height:6px;border-radius:100px;background-color:#ebeef5;overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:#409eff;text-align:right;border-radius:100px;line-height:1;white-space:nowrap;transition:width .6s ease}.el-card,.el-message{border-radius:4px;overflow:hidden}.el-progress-bar__inner:after{height:100%}.el-progress-bar__innerText{color:#fff;font-size:12px;margin:0 5px}@keyframes progress{0%{background-position:0 0}to{background-position:32px 0}}.el-time-spinner{width:100%;white-space:nowrap}.el-spinner-inner{animation:rotate 2s linear infinite;width:50px;height:50px}.el-spinner-inner .path{stroke:#ececec;stroke-linecap:round;animation:dash 1.5s ease-in-out infinite}@keyframes rotate{to{transform:rotate(1turn)}}@keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}to{stroke-dasharray:90,150;stroke-dashoffset:-124}}.el-message{min-width:380px;box-sizing:border-box;border:1px solid #ebeef5;position:fixed;left:50%;top:20px;transform:translateX(-50%);background-color:#edf2fc;transition:opacity .3s,transform .4s,top .4s;padding:15px 15px 15px 20px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.el-message.is-center{-ms-flex-pack:center;justify-content:center}.el-message.is-closable .el-message__content{padding-right:16px}.el-message p{margin:0}.el-message--info .el-message__content{color:#909399}.el-message--success{background-color:#f0f9eb;border-color:#e1f3d8}.el-message--success .el-message__content{color:#67c23a}.el-message--warning{background-color:#fdf6ec;border-color:#faecd8}.el-message--warning .el-message__content{color:#e6a23c}.el-message--error{background-color:#fef0f0;border-color:#fde2e2}.el-message--error .el-message__content{color:#f56c6c}.el-message__icon{margin-right:10px}.el-message__content{padding:0;font-size:14px;line-height:1}.el-message__closeBtn{position:absolute;top:50%;right:15px;transform:translateY(-50%);cursor:pointer;color:#c0c4cc;font-size:16px}.el-message__closeBtn:hover{color:#909399}.el-message .el-icon-success{color:#67c23a}.el-message .el-icon-error{color:#f56c6c}.el-message .el-icon-info{color:#909399}.el-message .el-icon-warning{color:#e6a23c}.el-message-fade-enter,.el-message-fade-leave-active{opacity:0;transform:translate(-50%,-100%)}.el-badge{position:relative;vertical-align:middle;display:inline-block}.el-badge__content{background-color:#f56c6c;border-radius:10px;color:#fff;display:inline-block;font-size:12px;height:18px;line-height:18px;padding:0 6px;text-align:center;white-space:nowrap;border:1px solid #fff}.el-badge__content.is-fixed{position:absolute;top:0;right:10px;transform:translateY(-50%) translateX(100%)}.el-rate__icon,.el-rate__item{position:relative;display:inline-block}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{height:8px;width:8px;padding:0;right:0;border-radius:50%}.el-badge__content--primary{background-color:#409eff}.el-badge__content--success{background-color:#67c23a}.el-badge__content--warning{background-color:#e6a23c}.el-badge__content--info{background-color:#909399}.el-badge__content--danger{background-color:#f56c6c}.el-card{border:1px solid #ebeef5;background-color:#fff;color:#303133;transition:.3s}.el-card.is-always-shadow,.el-card.is-hover-shadow:focus,.el-card.is-hover-shadow:hover{box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-card__header{padding:18px 20px;border-bottom:1px solid #ebeef5;box-sizing:border-box}.el-card__body{padding:20px}.el-rate{height:20px;line-height:1}.el-rate__item{font-size:0;vertical-align:middle}.el-rate__icon{font-size:18px;margin-right:6px;color:#c0c4cc;transition:.3s}.el-rate__decimal,.el-rate__icon .path2{position:absolute;top:0;left:0}.el-rate__icon.hover{transform:scale(1.15)}.el-rate__decimal{display:inline-block;overflow:hidden}.el-step.is-vertical,.el-steps{display:-ms-flexbox}.el-rate__text{font-size:14px;vertical-align:middle}.el-steps{display:flex}.el-steps--simple{padding:13px 8%;border-radius:4px;background:#f5f7fa}.el-steps--horizontal{white-space:nowrap}.el-steps--vertical{height:100%;-ms-flex-flow:column;flex-flow:column}.el-step{position:relative;-ms-flex-negative:1;flex-shrink:1}.el-step:last-of-type .el-step__line{display:none}.el-step:last-of-type.is-flex{-ms-flex-preferred-size:auto!important;flex-basis:auto!important;-ms-flex-negative:0;flex-shrink:0;-ms-flex-positive:0;flex-grow:0}.el-step:last-of-type .el-step__description,.el-step:last-of-type .el-step__main{padding-right:0}.el-step__head{position:relative;width:100%}.el-step__head.is-process{color:#303133;border-color:#303133}.el-step__head.is-wait{color:#c0c4cc;border-color:#c0c4cc}.el-step__head.is-success{color:#67c23a;border-color:#67c23a}.el-step__head.is-error{color:#f56c6c;border-color:#f56c6c}.el-step__head.is-finish{color:#409eff;border-color:#409eff}.el-step__icon{position:relative;z-index:1;display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;width:24px;height:24px;font-size:14px;box-sizing:border-box;background:#fff;transition:.15s ease-out}.el-step__icon.is-text{border-radius:50%;border:2px solid;border-color:inherit}.el-step__icon.is-icon{width:40px}.el-step__icon-inner{display:inline-block;user-select:none;text-align:center;font-weight:700;line-height:1;color:inherit}.el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:25px;font-weight:400}.el-step__icon-inner.is-status{transform:translateY(1px)}.el-step__line{position:absolute;border-color:inherit;background-color:#c0c4cc}.el-step__line-inner{display:block;border-width:1px;border-style:solid;border-color:inherit;transition:.15s ease-out;box-sizing:border-box;width:0;height:0}.el-step__main{white-space:normal;text-align:left}.el-step__title{font-size:16px;line-height:38px}.el-step__title.is-process{font-weight:700;color:#303133}.el-step__title.is-wait{color:#c0c4cc}.el-step__title.is-success{color:#67c23a}.el-step__title.is-error{color:#f56c6c}.el-step__title.is-finish{color:#409eff}.el-step__description{padding-right:10%;margin-top:-5px;font-size:12px;line-height:20px;font-weight:400}.el-step__description.is-process{color:#303133}.el-step__description.is-wait{color:#c0c4cc}.el-step__description.is-success{color:#67c23a}.el-step__description.is-error{color:#f56c6c}.el-step__description.is-finish{color:#409eff}.el-step.is-horizontal{display:inline-block}.el-step.is-horizontal .el-step__line{height:2px;top:11px;left:0;right:0}.el-step.is-vertical{display:flex}.el-step.is-vertical .el-step__head{-ms-flex-positive:0;flex-grow:0;width:24px}.el-step.is-vertical .el-step__main{padding-left:10px;-ms-flex-positive:1;flex-grow:1}.el-step.is-vertical .el-step__title{line-height:24px;padding-bottom:8px}.el-step.is-vertical .el-step__line{width:2px;top:0;bottom:0;left:11px}.el-step.is-vertical .el-step__icon.is-icon{width:24px}.el-step.is-center .el-step__head,.el-step.is-center .el-step__main{text-align:center}.el-step.is-center .el-step__description{padding-left:20%;padding-right:20%}.el-step.is-center .el-step__line{left:50%;right:-50%}.el-step.is-simple{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.el-step.is-simple .el-step__head{width:auto;font-size:0;padding-right:10px}.el-step.is-simple .el-step__icon{background:0 0;width:16px;height:16px;font-size:12px}.el-step.is-simple .el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:18px}.el-step.is-simple .el-step__icon-inner.is-status{transform:scale(.8) translateY(1px)}.el-step.is-simple .el-step__main{position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:stretch;align-items:stretch;-ms-flex-positive:1;flex-grow:1}.el-step.is-simple .el-step__title{font-size:16px;line-height:20px}.el-step.is-simple:not(:last-of-type) .el-step__title{max-width:50%;word-break:break-all}.el-step.is-simple .el-step__arrow{-ms-flex-positive:1;flex-grow:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.el-step.is-simple .el-step__arrow:after,.el-step.is-simple .el-step__arrow:before{content:"";display:inline-block;position:absolute;height:15px;width:1px;background:#c0c4cc}.el-step.is-simple .el-step__arrow:before{transform:rotate(-45deg) translateY(-4px);transform-origin:0 0}.el-step.is-simple .el-step__arrow:after{transform:rotate(45deg) translateY(4px);transform-origin:100% 100%}.el-step.is-simple:last-of-type .el-step__arrow{display:none}.el-carousel{position:relative}.el-carousel--horizontal{overflow-x:hidden}.el-carousel--vertical{overflow-y:hidden}.el-carousel__container{position:relative;height:300px}.el-carousel__arrow{border:none;outline:0;padding:0;margin:0;height:36px;width:36px;cursor:pointer;transition:.3s;border-radius:50%;background-color:rgba(31,45,61,.11);color:#fff;position:absolute;top:50%;z-index:10;transform:translateY(-50%);text-align:center;font-size:12px}.el-carousel__arrow--left{left:16px}.el-carousel__arrow--right{right:16px}.el-carousel__arrow:hover{background-color:rgba(31,45,61,.23)}.el-carousel__arrow i{cursor:pointer}.el-carousel__indicators{position:absolute;list-style:none;margin:0;padding:0;z-index:2}.el-carousel__indicators--horizontal{bottom:0;left:50%;transform:translateX(-50%)}.el-carousel__indicators--vertical{right:0;top:50%;transform:translateY(-50%)}.el-carousel__indicators--outside{bottom:26px;text-align:center;position:static;transform:none}.el-carousel__indicators--outside .el-carousel__indicator:hover button{opacity:.64}.el-carousel__indicators--outside button{background-color:#c0c4cc;opacity:.24}.el-carousel__indicators--labels{left:0;right:0;transform:none;text-align:center}.el-carousel__indicators--labels .el-carousel__button{height:auto;width:auto;padding:2px 18px;font-size:12px}.el-carousel__indicators--labels .el-carousel__indicator{padding:6px 4px}.el-carousel__indicator{background-color:transparent;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.el-carousel__indicator--horizontal{display:inline-block;padding:12px 4px}.el-carousel__indicator--vertical{padding:4px 12px}.el-carousel__indicator--vertical .el-carousel__button{width:2px;height:15px}.el-carousel__indicator.is-active button{opacity:1}.el-carousel__button{display:block;opacity:.48;width:30px;height:2px;background-color:#fff;border:none;outline:0;padding:0;margin:0;cursor:pointer;transition:.3s}.el-carousel__item,.el-carousel__mask{height:100%;top:0;left:0;position:absolute}.carousel-arrow-left-enter,.carousel-arrow-left-leave-active{transform:translateY(-50%) translateX(-10px);opacity:0}.carousel-arrow-right-enter,.carousel-arrow-right-leave-active{transform:translateY(-50%) translateX(10px);opacity:0}.el-carousel__item{width:100%;display:inline-block;overflow:hidden;z-index:0}.el-carousel__item.is-active{z-index:2}.el-carousel__item--card,.el-carousel__item.is-animating{transition:transform .4s ease-in-out}.el-carousel__item--card{width:50%}.el-carousel__item--card.is-in-stage{cursor:pointer;z-index:1}.el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask,.el-carousel__item--card.is-in-stage:hover .el-carousel__mask{opacity:.12}.el-carousel__item--card.is-active{z-index:2}.el-carousel__mask{width:100%;background-color:#fff;opacity:.24;transition:.2s}.el-fade-in-enter,.el-fade-in-leave-active,.el-fade-in-linear-enter,.el-fade-in-linear-leave,.el-fade-in-linear-leave-active,.fade-in-linear-enter,.fade-in-linear-leave,.fade-in-linear-leave-active{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active,.fade-in-linear-enter-active,.fade-in-linear-leave-active{transition:opacity .2s linear}.el-fade-in-enter-active,.el-fade-in-leave-active,.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{transition:all .3s cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter,.el-zoom-in-center-leave-active{opacity:0;transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;transform:scaleY(1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transform-origin:center top}.el-zoom-in-top-enter,.el-zoom-in-top-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;transform:scaleY(1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transform-origin:center bottom}.el-zoom-in-bottom-enter,.el-zoom-in-bottom-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;transform:scale(1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transform-origin:top left}.el-zoom-in-left-enter,.el-zoom-in-left-leave-active{opacity:0;transform:scale(.45)}.collapse-transition{transition:height .3s ease-in-out,padding-top .3s ease-in-out,padding-bottom .3s ease-in-out}.horizontal-collapse-transition{transition:width .3s ease-in-out,padding-left .3s ease-in-out,padding-right .3s ease-in-out}.el-list-enter-active,.el-list-leave-active{transition:all 1s}.el-list-enter,.el-list-leave-active{opacity:0;transform:translateY(-30px)}.el-opacity-transition{transition:opacity .3s cubic-bezier(.55,0,.1,1)}.el-collapse{border-top:1px solid #ebeef5;border-bottom:1px solid #ebeef5}.el-collapse-item.is-disabled .el-collapse-item__header{color:#bbb;cursor:not-allowed}.el-collapse-item__header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;height:48px;line-height:48px;background-color:#fff;color:#303133;cursor:pointer;border-bottom:1px solid #ebeef5;font-size:13px;font-weight:500;transition:border-bottom-color .3s;outline:0}.el-collapse-item__arrow{margin:0 8px 0 auto;transition:transform .3s;font-weight:300}.el-collapse-item__arrow.is-active{transform:rotate(90deg)}.el-collapse-item__header.focusing:focus:not(:hover){color:#409eff}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{will-change:height;background-color:#fff;overflow:hidden;box-sizing:border-box;border-bottom:1px solid #ebeef5}.el-cascader__tags,.el-collapse-item__wrap,.el-tag{-webkit-box-sizing:border-box}.el-collapse-item__content{padding-bottom:25px;font-size:13px;color:#303133;line-height:1.769230769230769}.el-collapse-item:last-child{margin-bottom:-1px}.el-popper .popper__arrow,.el-popper .popper__arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popper .popper__arrow{border-width:6px;filter:drop-shadow(0 2px 12px rgba(0,0,0,.03))}.el-popper .popper__arrow:after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow:after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5}.el-popper[x-placement^=bottom] .popper__arrow:after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow:after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5}.el-popper[x-placement^=left] .popper__arrow:after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.el-tag{background-color:#ecf5ff;border:1px solid #d9ecff;display:inline-block;height:32px;padding:0 10px;line-height:30px;font-size:12px;color:#409eff;border-radius:4px;box-sizing:border-box;white-space:nowrap}.el-tag.is-hit{border-color:#409eff}.el-tag .el-tag__close{color:#409eff}.el-tag .el-tag__close:hover{color:#fff;background-color:#409eff}.el-tag.el-tag--info{background-color:#f4f4f5;border-color:#e9e9eb;color:#909399}.el-tag.el-tag--info.is-hit{border-color:#909399}.el-tag.el-tag--info .el-tag__close{color:#909399}.el-tag.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag.el-tag--success{background-color:#f0f9eb;border-color:#e1f3d8;color:#67c23a}.el-tag.el-tag--success.is-hit{border-color:#67c23a}.el-tag.el-tag--success .el-tag__close{color:#67c23a}.el-tag.el-tag--success .el-tag__close:hover{color:#fff;background-color:#67c23a}.el-tag.el-tag--warning{background-color:#fdf6ec;border-color:#faecd8;color:#e6a23c}.el-tag.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#e6a23c}.el-tag.el-tag--danger{background-color:#fef0f0;border-color:#fde2e2;color:#f56c6c}.el-tag.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f56c6c}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;height:16px;width:16px;line-height:16px;vertical-align:middle;top:-1px;right:-5px}.el-tag .el-icon-close:before{display:block}.el-tag--dark{background-color:#409eff;color:#fff}.el-tag--dark,.el-tag--dark.is-hit{border-color:#409eff}.el-tag--dark .el-tag__close{color:#fff}.el-tag--dark .el-tag__close:hover{color:#fff;background-color:#66b1ff}.el-tag--dark.el-tag--info{background-color:#909399;border-color:#909399;color:#fff}.el-tag--dark.el-tag--info.is-hit{border-color:#909399}.el-tag--dark.el-tag--info .el-tag__close{color:#fff}.el-tag--dark.el-tag--info .el-tag__close:hover{color:#fff;background-color:#a6a9ad}.el-tag--dark.el-tag--success{background-color:#67c23a;border-color:#67c23a;color:#fff}.el-tag--dark.el-tag--success.is-hit{border-color:#67c23a}.el-tag--dark.el-tag--success .el-tag__close{color:#fff}.el-tag--dark.el-tag--success .el-tag__close:hover{color:#fff;background-color:#85ce61}.el-tag--dark.el-tag--warning{background-color:#e6a23c;border-color:#e6a23c;color:#fff}.el-tag--dark.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--dark.el-tag--warning .el-tag__close{color:#fff}.el-tag--dark.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#ebb563}.el-tag--dark.el-tag--danger{background-color:#f56c6c;border-color:#f56c6c;color:#fff}.el-tag--dark.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--dark.el-tag--danger .el-tag__close{color:#fff}.el-tag--dark.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f78989}.el-tag--plain{background-color:#fff;border-color:#b3d8ff;color:#409eff}.el-tag--plain.is-hit{border-color:#409eff}.el-tag--plain .el-tag__close{color:#409eff}.el-tag--plain .el-tag__close:hover{color:#fff;background-color:#409eff}.el-tag--plain.el-tag--info{background-color:#fff;border-color:#d3d4d6;color:#909399}.el-tag--plain.el-tag--info.is-hit{border-color:#909399}.el-tag--plain.el-tag--info .el-tag__close{color:#909399}.el-tag--plain.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag--plain.el-tag--success{background-color:#fff;border-color:#c2e7b0;color:#67c23a}.el-tag--plain.el-tag--success.is-hit{border-color:#67c23a}.el-tag--plain.el-tag--success .el-tag__close{color:#67c23a}.el-tag--plain.el-tag--success .el-tag__close:hover{color:#fff;background-color:#67c23a}.el-tag--plain.el-tag--warning{background-color:#fff;border-color:#f5dab1;color:#e6a23c}.el-tag--plain.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#e6a23c}.el-tag--plain.el-tag--danger{background-color:#fff;border-color:#fbc4c4;color:#f56c6c}.el-tag--plain.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f56c6c}.el-tag--medium{height:28px;line-height:26px}.el-tag--medium .el-icon-close{transform:scale(.8)}.el-tag--small{height:24px;padding:0 8px;line-height:22px}.el-tag--small .el-icon-close{transform:scale(.8)}.el-tag--mini{height:20px;padding:0 5px;line-height:19px}.el-tag--mini .el-icon-close{margin-left:-3px;transform:scale(.7)}.el-cascader{display:inline-block;position:relative;font-size:14px;line-height:40px}.el-cascader:not(.is-disabled):hover .el-input__inner{cursor:pointer;border-color:#c0c4cc}.el-cascader .el-input .el-input__inner:focus,.el-cascader .el-input.is-focus .el-input__inner{border-color:#409eff}.el-cascader .el-input{cursor:pointer}.el-cascader .el-input .el-input__inner{text-overflow:ellipsis}.el-cascader .el-input .el-icon-arrow-down{transition:transform .3s;font-size:14px}.el-cascader .el-input .el-icon-arrow-down.is-reverse{transform:rotate(180deg)}.el-cascader .el-input .el-icon-circle-close:hover{color:#909399}.el-cascader--medium{font-size:14px;line-height:36px}.el-cascader--small{font-size:13px;line-height:32px}.el-cascader--mini{font-size:12px;line-height:28px}.el-cascader.is-disabled .el-cascader__label{z-index:2;color:#c0c4cc}.el-cascader__dropdown{margin:5px 0;font-size:14px;background:#fff;border:1px solid #e4e7ed;border-radius:4px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-cascader__tags{position:absolute;left:0;right:30px;top:50%;transform:translateY(-50%);display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;line-height:normal;text-align:left;box-sizing:border-box}.el-cascader__tags .el-tag{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;max-width:100%;margin:2px 0 2px 6px;text-overflow:ellipsis;background:#f0f2f5}.el-cascader__tags .el-tag:not(.is-hit){border-color:transparent}.el-cascader__tags .el-tag>span{-ms-flex:1;flex:1;overflow:hidden;text-overflow:ellipsis}.el-cascader__tags .el-tag .el-icon-close{-ms-flex:none;flex:none;background-color:#c0c4cc;color:#fff}.el-cascader__tags .el-tag .el-icon-close:hover{background-color:#909399}.el-cascader__suggestion-panel{border-radius:4px}.el-cascader__suggestion-list{max-height:204px;margin:0;padding:6px 0;font-size:14px;color:#606266;text-align:center}.el-cascader__suggestion-item{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-align:center;align-items:center;height:34px;padding:0 15px;text-align:left;outline:0;cursor:pointer}.el-cascader__suggestion-item:focus,.el-cascader__suggestion-item:hover{background:#f5f7fa}.el-cascader__suggestion-item.is-checked{color:#409eff;font-weight:700}.el-cascader__suggestion-item>span{margin-right:10px}.el-cascader__empty-text{margin:10px 0;color:#c0c4cc}.el-cascader__search-input{-ms-flex:1;flex:1;height:24px;min-width:60px;margin:2px 0 2px 15px;padding:0;color:#606266;border:none;outline:0;box-sizing:border-box}.el-cascader__search-input:-ms-input-placeholder,.el-cascader__search-input::-ms-input-placeholder{color:#c0c4cc}.el-cascader__search-input::placeholder{color:#c0c4cc}.el-color-predefine{font-size:12px;margin-top:8px;width:280px}.el-color-predefine,.el-color-predefine__colors{display:-ms-flexbox;display:flex}.el-color-predefine__colors{-ms-flex:1;flex:1;-ms-flex-wrap:wrap;flex-wrap:wrap}.el-color-predefine__color-selector{margin:0 0 8px 8px;width:20px;height:20px;border-radius:4px;cursor:pointer}.el-color-predefine__color-selector:nth-child(10n+1){margin-left:0}.el-color-predefine__color-selector.selected{box-shadow:0 0 3px 2px #409eff}.el-color-predefine__color-selector>div{display:-ms-flexbox;display:flex;height:100%;border-radius:3px}.el-color-predefine__color-selector.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-hue-slider{position:relative;box-sizing:border-box;width:280px;height:12px;background-color:red;padding:0 2px}.el-color-hue-slider__bar{position:relative;background:linear-gradient(90deg,red,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red);height:100%}.el-color-hue-slider__thumb{position:absolute;cursor:pointer;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid #f0f0f0;box-shadow:0 0 2px rgba(0,0,0,.6);z-index:1}.el-color-hue-slider.is-vertical{width:12px;height:180px;padding:2px 0}.el-color-hue-slider.is-vertical .el-color-hue-slider__bar{background:linear-gradient(180deg,red,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.el-color-hue-slider.is-vertical .el-color-hue-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-svpanel{position:relative;width:280px;height:180px}.el-color-svpanel__black,.el-color-svpanel__white{position:absolute;top:0;left:0;right:0;bottom:0}.el-color-svpanel__white{background:linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.el-color-svpanel__black{background:linear-gradient(0deg,#000,transparent)}.el-color-svpanel__cursor{position:absolute}.el-color-svpanel__cursor>div{cursor:head;width:4px;height:4px;box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);border-radius:50%;transform:translate(-2px,-2px)}.el-color-alpha-slider{position:relative;box-sizing:border-box;width:280px;height:12px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-alpha-slider__bar{position:relative;background:linear-gradient(90deg,hsla(0,0%,100%,0),#fff);height:100%}.el-color-alpha-slider__thumb{position:absolute;cursor:pointer;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid #f0f0f0;box-shadow:0 0 2px rgba(0,0,0,.6);z-index:1}.el-color-alpha-slider.is-vertical{width:20px;height:180px}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__bar{background:linear-gradient(180deg,hsla(0,0%,100%,0),#fff)}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-dropdown{width:300px}.el-color-dropdown__main-wrapper{margin-bottom:6px}.el-color-dropdown__main-wrapper:after{content:"";display:table;clear:both}.el-color-dropdown__btns{margin-top:6px;text-align:right}.el-color-dropdown__value{float:left;line-height:26px;font-size:12px;color:#000;width:160px}.el-color-dropdown__btn{border:1px solid #dcdcdc;color:#333;line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:0;font-size:12px}.el-color-dropdown__btn[disabled]{color:#ccc;cursor:not-allowed}.el-color-dropdown__btn:hover{color:#409eff;border-color:#409eff}.el-color-dropdown__link-btn{cursor:pointer;color:#409eff;text-decoration:none;padding:15px;font-size:12px}.el-color-dropdown__link-btn:hover{color:tint(#409eff,20%)}.el-color-picker{display:inline-block;position:relative;line-height:normal;height:40px}.el-color-picker.is-disabled .el-color-picker__trigger{cursor:not-allowed}.el-color-picker--medium{height:36px}.el-color-picker--medium .el-color-picker__trigger{height:36px;width:36px}.el-color-picker--medium .el-color-picker__mask{height:34px;width:34px}.el-color-picker--small{height:32px}.el-color-picker--small .el-color-picker__trigger{height:32px;width:32px}.el-color-picker--small .el-color-picker__mask{height:30px;width:30px}.el-color-picker--small .el-color-picker__empty,.el-color-picker--small .el-color-picker__icon{transform:translate3d(-50%,-50%,0) scale(.8)}.el-color-picker--mini{height:28px}.el-color-picker--mini .el-color-picker__trigger{height:28px;width:28px}.el-color-picker--mini .el-color-picker__mask{height:26px;width:26px}.el-color-picker--mini .el-color-picker__empty,.el-color-picker--mini .el-color-picker__icon{transform:translate3d(-50%,-50%,0) scale(.8)}.el-color-picker__mask{height:38px;width:38px;border-radius:4px;position:absolute;top:1px;left:1px;z-index:1;cursor:not-allowed;background-color:hsla(0,0%,100%,.7)}.el-color-picker__trigger{display:inline-block;height:40px;width:40px;padding:4px;border:1px solid #e6e6e6;border-radius:4px;font-size:0;cursor:pointer}.el-color-picker__color,.el-color-picker__trigger{box-sizing:border-box;position:relative}.el-color-picker__color{display:block;border:1px solid #999;border-radius:2px;width:100%;height:100%;text-align:center}.el-color-picker__color.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-picker__color-inner{position:absolute;left:0;top:0;right:0;bottom:0}.el-color-picker__empty,.el-color-picker__icon{top:50%;left:50%;font-size:12px;position:absolute}.el-color-picker__empty{color:#999}.el-color-picker__empty,.el-color-picker__icon{transform:translate3d(-50%,-50%,0)}.el-color-picker__icon{display:inline-block;width:100%;color:#fff;text-align:center}.el-color-picker__panel{position:absolute;z-index:10;padding:6px;box-sizing:content-box;background-color:#fff;border:1px solid #ebeef5;border-radius:4px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.el-textarea__inner{display:block;resize:vertical;padding:5px 15px;line-height:1.5;box-sizing:border-box;width:100%;font-size:inherit;color:#606266;background-color:#fff;background-image:none;border:1px solid #dcdfe6;border-radius:4px;transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-textarea__inner:-ms-input-placeholder,.el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea__inner:hover{border-color:#c0c4cc}.el-textarea__inner:focus{outline:0;border-color:#409eff}.el-textarea .el-input__count{color:#909399;background:#fff;position:absolute;font-size:12px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder,.el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea.is-exceed .el-textarea__inner{border-color:#f56c6c}.el-textarea.is-exceed .el-input__count{color:#f56c6c}.el-input{position:relative;font-size:14px;display:inline-block;width:100%}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner,.el-input::-webkit-scrollbar-track{background:#fff}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.el-input .el-input__clear{color:#c0c4cc;font-size:14px;cursor:pointer;transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-input .el-input__clear:hover{color:#909399}.el-input .el-input__count{height:100%;display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;color:#909399;font-size:12px}.el-input .el-input__count .el-input__count-inner{background:#fff;line-height:normal;display:inline-block;padding:0 5px}.el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #dcdfe6;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:40px;line-height:40px;outline:0;padding:0 15px;transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}.el-input__prefix,.el-input__suffix{position:absolute;top:0;-webkit-transition:all .3s;height:100%;color:#c0c4cc;text-align:center}.el-input__inner:-ms-input-placeholder,.el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input__inner::placeholder{color:#c0c4cc}.el-input__inner:hover{border-color:#c0c4cc}.el-input.is-active .el-input__inner,.el-input__inner:focus{border-color:#409eff;outline:0}.el-input__suffix{right:5px;transition:all .3s}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{left:5px;transition:all .3s}.el-input__icon{height:100%;width:25px;text-align:center;transition:all .3s;line-height:40px}.el-input__icon:after{content:"";height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-input.is-disabled .el-input__inner:-ms-input-placeholder,.el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-link,.el-transfer-panel__filter .el-icon-circle-close{cursor:pointer}.el-input.is-exceed .el-input__inner{border-color:#f56c6c}.el-input.is-exceed .el-input__suffix .el-input__count{color:#f56c6c}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#f5f7fa;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #dcdfe6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group--prepend .el-input__inner,.el-input-group__append{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--append .el-input__inner,.el-input-group__prepend{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.el-input-group__prepend div.el-select:hover .el-input__inner{border-color:transparent;background-color:transparent;color:inherit;border-top:0;border-bottom:0}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0}.el-input-group__append{border-left:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner,.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-transfer{font-size:14px}.el-transfer__buttons{display:inline-block;vertical-align:middle;padding:0 30px}.el-transfer__button{display:block;margin:0 auto;padding:10px;border-radius:50%;color:#fff;background-color:#409eff;font-size:0}.el-transfer-panel__item+.el-transfer-panel__item,.el-transfer__button [class*=el-icon-]+span{margin-left:0}.el-transfer__button.is-with-texts{border-radius:4px}.el-transfer__button.is-disabled,.el-transfer__button.is-disabled:hover{border:1px solid #dcdfe6;background-color:#f5f7fa;color:#c0c4cc}.el-transfer__button:first-child{margin-bottom:10px}.el-transfer__button:nth-child(2){margin:0}.el-transfer__button i,.el-transfer__button span{font-size:14px}.el-transfer-panel{border:1px solid #ebeef5;border-radius:4px;overflow:hidden;background:#fff;display:inline-block;vertical-align:middle;width:200px;max-height:100%;box-sizing:border-box;position:relative}.el-transfer-panel__body{height:246px}.el-transfer-panel__body.is-with-footer{padding-bottom:40px}.el-transfer-panel__list{margin:0;padding:6px 0;list-style:none;height:246px;overflow:auto;box-sizing:border-box}.el-transfer-panel__list.is-filterable{height:194px;padding-top:0}.el-transfer-panel__item{height:30px;line-height:30px;padding-left:15px;display:block!important}.el-transfer-panel__item.el-checkbox{color:#606266}.el-transfer-panel__item:hover{color:#409eff}.el-transfer-panel__item.el-checkbox .el-checkbox__label{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;box-sizing:border-box;padding-left:24px;line-height:30px}.el-transfer-panel__item .el-checkbox__input{position:absolute;top:8px}.el-transfer-panel__filter{text-align:center;margin:15px;box-sizing:border-box;display:block;width:auto}.el-transfer-panel__filter .el-input__inner{height:32px;width:100%;font-size:12px;display:inline-block;box-sizing:border-box;border-radius:16px;padding-right:10px;padding-left:30px}.el-transfer-panel__filter .el-input__icon{margin-left:5px}.el-transfer-panel .el-transfer-panel__header{height:40px;line-height:40px;background:#f5f7fa;margin:0;padding-left:15px;border-bottom:1px solid #ebeef5;box-sizing:border-box;color:#000}.el-transfer-panel .el-transfer-panel__header .el-checkbox{display:block;line-height:40px}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label{font-size:16px;color:#303133;font-weight:400}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span{position:absolute;right:15px;color:#909399;font-size:12px;font-weight:400}.el-divider__text,.el-link{font-weight:500;font-size:14px}.el-transfer-panel .el-transfer-panel__footer{height:40px;background:#fff;margin:0;padding:0;border-top:1px solid #ebeef5;position:absolute;bottom:0;left:0;width:100%;z-index:1}.el-transfer-panel .el-transfer-panel__footer:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-container,.el-timeline-item__node{display:-ms-flexbox}.el-transfer-panel .el-transfer-panel__footer .el-checkbox{padding-left:20px;color:#606266}.el-transfer-panel .el-transfer-panel__empty{margin:0;height:30px;line-height:30px;padding:6px 15px 0;color:#909399;text-align:center}.el-transfer-panel .el-checkbox__label{padding-left:8px}.el-transfer-panel .el-checkbox__inner{height:14px;width:14px;border-radius:3px}.el-transfer-panel .el-checkbox__inner:after{height:6px;width:3px;left:4px}.el-container{display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;box-sizing:border-box;min-width:0}.el-aside,.el-header{-webkit-box-sizing:border-box}.el-container.is-vertical{-ms-flex-direction:column;flex-direction:column}.el-header{padding:0 20px}.el-aside,.el-header{box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-aside{overflow:auto}.el-footer,.el-main{-webkit-box-sizing:border-box}.el-main{display:block;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;overflow:auto;padding:20px}.el-footer,.el-main{box-sizing:border-box}.el-footer{padding:0 20px;-ms-flex-negative:0;flex-shrink:0}.el-timeline{margin:0;font-size:14px;list-style:none}.el-timeline .el-timeline-item:last-child .el-timeline-item__tail{display:none}.el-timeline-item{position:relative;padding-bottom:20px}.el-timeline-item__wrapper{position:relative;padding-left:28px;top:-3px}.el-timeline-item__tail{position:absolute;left:4px;height:100%;border-left:2px solid #e4e7ed}.el-timeline-item__icon{color:#fff;font-size:13px}.el-timeline-item__node{position:absolute;background-color:#e4e7ed;border-radius:50%;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center}.el-image__error,.el-timeline-item__dot{display:-ms-flexbox}.el-timeline-item__node--normal{left:-1px;width:12px;height:12px}.el-timeline-item__node--large{left:-2px;width:14px;height:14px}.el-timeline-item__node--primary{background-color:#409eff}.el-timeline-item__node--success{background-color:#67c23a}.el-timeline-item__node--warning{background-color:#e6a23c}.el-timeline-item__node--danger{background-color:#f56c6c}.el-timeline-item__node--info{background-color:#909399}.el-timeline-item__dot{position:absolute;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center}.el-timeline-item__content{color:#303133}.el-timeline-item__timestamp{color:#909399;line-height:1;font-size:13px}.el-timeline-item__timestamp.is-top{margin-bottom:8px;padding-top:4px}.el-timeline-item__timestamp.is-bottom{margin-top:8px}.el-link{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;vertical-align:middle;position:relative;text-decoration:none;outline:0;padding:0}.el-link.is-underline:hover:after{content:"";position:absolute;left:0;right:0;height:0;bottom:0;border-bottom:1px solid #409eff}.el-link.el-link--default:after,.el-link.el-link--primary.is-underline:hover:after,.el-link.el-link--primary:after{border-color:#409eff}.el-link.is-disabled{cursor:not-allowed}.el-link [class*=el-icon-]+span{margin-left:5px}.el-link.el-link--default{color:#606266}.el-link.el-link--default:hover{color:#409eff}.el-link.el-link--default.is-disabled{color:#c0c4cc}.el-link.el-link--primary{color:#409eff}.el-link.el-link--primary:hover{color:#66b1ff}.el-link.el-link--primary.is-disabled{color:#a0cfff}.el-link.el-link--danger.is-underline:hover:after,.el-link.el-link--danger:after{border-color:#f56c6c}.el-link.el-link--danger{color:#f56c6c}.el-link.el-link--danger:hover{color:#f78989}.el-link.el-link--danger.is-disabled{color:#fab6b6}.el-link.el-link--success.is-underline:hover:after,.el-link.el-link--success:after{border-color:#67c23a}.el-link.el-link--success{color:#67c23a}.el-link.el-link--success:hover{color:#85ce61}.el-link.el-link--success.is-disabled{color:#b3e19d}.el-link.el-link--warning.is-underline:hover:after,.el-link.el-link--warning:after{border-color:#e6a23c}.el-link.el-link--warning{color:#e6a23c}.el-link.el-link--warning:hover{color:#ebb563}.el-link.el-link--warning.is-disabled{color:#f3d19e}.el-link.el-link--info.is-underline:hover:after,.el-link.el-link--info:after{border-color:#909399}.el-link.el-link--info{color:#909399}.el-link.el-link--info:hover{color:#a6a9ad}.el-link.el-link--info.is-disabled{color:#c8c9cc}.el-divider{background-color:#dcdfe6;position:relative}.el-divider--horizontal{display:block;height:1px;width:100%;margin:24px 0}.el-divider--vertical{display:inline-block;width:1px;height:1em;margin:0 8px;vertical-align:middle;position:relative}.el-divider__text{position:absolute;background-color:#fff;padding:0 20px;color:#303133}.el-image__error,.el-image__placeholder{background:#f5f7fa}.el-divider__text.is-left{left:20px;transform:translateY(-50%)}.el-divider__text.is-center{left:50%;transform:translateX(-50%) translateY(-50%)}.el-divider__text.is-right{right:20px;transform:translateY(-50%)}.el-image__error,.el-image__inner,.el-image__placeholder{width:100%;height:100%}.el-image{position:relative;display:inline-block;overflow:hidden}.el-image__inner{vertical-align:top}.el-image__inner--center{position:relative;top:50%;left:50%;transform:translate(-50%,-50%);display:block}.el-image__error{display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;font-size:14px;color:#c0c4cc;vertical-align:middle}.el-image__preview{cursor:pointer}.el-image-viewer__wrapper{position:fixed;top:0;right:0;bottom:0;left:0}.el-image-viewer__btn{position:absolute;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;border-radius:50%;opacity:.8;cursor:pointer;box-sizing:border-box;user-select:none}.el-button,.el-checkbox{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.el-image-viewer__close{top:40px;right:40px;width:40px;height:40px;font-size:40px}.el-image-viewer__canvas{width:100%;height:100%;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center}.el-image-viewer__actions{left:50%;bottom:30px;transform:translateX(-50%);width:282px;height:44px;padding:0 23px;background-color:#606266;border-color:#fff;border-radius:22px}.el-image-viewer__actions__inner{width:100%;height:100%;text-align:justify;cursor:default;font-size:23px;color:#fff;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around}.el-image-viewer__next,.el-image-viewer__prev{top:50%;width:44px;height:44px;font-size:24px;color:#fff;background-color:#606266;border-color:#fff}.el-image-viewer__prev{left:40px}.el-image-viewer__next,.el-image-viewer__prev{transform:translateY(-50%)}.el-image-viewer__next{right:40px;text-indent:2px}.el-image-viewer__mask{position:absolute;width:100%;height:100%;top:0;left:0;opacity:.5;background:#000}.viewer-fade-enter-active{animation:viewer-fade-in .3s}.viewer-fade-leave-active{animation:viewer-fade-out .3s}@keyframes viewer-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}to{transform:translateZ(0);opacity:1}}@keyframes viewer-fade-out{0%{transform:translateZ(0);opacity:1}to{transform:translate3d(0,-20px,0);opacity:0}}.el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#fff;border:1px solid #dcdfe6;color:#606266;-webkit-appearance:none;text-align:center;box-sizing:border-box;outline:0;margin:0;transition:.1s;font-weight:500;padding:12px 20px;font-size:14px;border-radius:4px}.el-button+.el-button{margin-left:10px}.el-button:focus,.el-button:hover{color:#409eff;border-color:#c6e2ff;background-color:#ecf5ff}.el-button:active{color:#3a8ee6;border-color:#3a8ee6;outline:0}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon-]+span{margin-left:5px}.el-button.is-plain:focus,.el-button.is-plain:hover{background:#fff;border-color:#409eff;color:#409eff}.el-button.is-active,.el-button.is-plain:active{color:#3a8ee6;border-color:#3a8ee6}.el-button.is-plain:active{background:#fff;outline:0}.el-button.is-disabled,.el-button.is-disabled:focus,.el-button.is-disabled:hover{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5}.el-button.is-disabled.el-button--text{background-color:transparent}.el-button.is-disabled.is-plain,.el-button.is-disabled.is-plain:focus,.el-button.is-disabled.is-plain:hover{background-color:#fff;border-color:#ebeef5;color:#c0c4cc}.el-button.is-loading{position:relative;pointer-events:none}.el-button.is-loading:before{pointer-events:none;content:"";position:absolute;left:-1px;top:-1px;right:-1px;bottom:-1px;border-radius:inherit;background-color:hsla(0,0%,100%,.35)}.el-button.is-round{border-radius:20px;padding:12px 23px}.el-button.is-circle{border-radius:50%;padding:12px}.el-button--primary{color:#fff;background-color:#409eff;border-color:#409eff}.el-button--primary:focus,.el-button--primary:hover{background:#66b1ff;border-color:#66b1ff;color:#fff}.el-button--primary.is-active,.el-button--primary:active{background:#3a8ee6;border-color:#3a8ee6;color:#fff}.el-button--primary:active{outline:0}.el-button--primary.is-disabled,.el-button--primary.is-disabled:active,.el-button--primary.is-disabled:focus,.el-button--primary.is-disabled:hover{color:#fff;background-color:#a0cfff;border-color:#a0cfff}.el-button--primary.is-plain{color:#409eff;background:#ecf5ff;border-color:#b3d8ff}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#409eff;border-color:#409eff;color:#fff}.el-button--primary.is-plain:active{background:#3a8ee6;border-color:#3a8ee6;color:#fff;outline:0}.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover{color:#8cc5ff;background-color:#ecf5ff;border-color:#d9ecff}.el-button--success{color:#fff;background-color:#67c23a;border-color:#67c23a}.el-button--success:focus,.el-button--success:hover{background:#85ce61;border-color:#85ce61;color:#fff}.el-button--success.is-active,.el-button--success:active{background:#5daf34;border-color:#5daf34;color:#fff}.el-button--success:active{outline:0}.el-button--success.is-disabled,.el-button--success.is-disabled:active,.el-button--success.is-disabled:focus,.el-button--success.is-disabled:hover{color:#fff;background-color:#b3e19d;border-color:#b3e19d}.el-button--success.is-plain{color:#67c23a;background:#f0f9eb;border-color:#c2e7b0}.el-button--success.is-plain:focus,.el-button--success.is-plain:hover{background:#67c23a;border-color:#67c23a;color:#fff}.el-button--success.is-plain:active{background:#5daf34;border-color:#5daf34;color:#fff;outline:0}.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover{color:#a4da89;background-color:#f0f9eb;border-color:#e1f3d8}.el-button--warning{color:#fff;background-color:#e6a23c;border-color:#e6a23c}.el-button--warning:focus,.el-button--warning:hover{background:#ebb563;border-color:#ebb563;color:#fff}.el-button--warning.is-active,.el-button--warning:active{background:#cf9236;border-color:#cf9236;color:#fff}.el-button--warning:active{outline:0}.el-button--warning.is-disabled,.el-button--warning.is-disabled:active,.el-button--warning.is-disabled:focus,.el-button--warning.is-disabled:hover{color:#fff;background-color:#f3d19e;border-color:#f3d19e}.el-button--warning.is-plain{color:#e6a23c;background:#fdf6ec;border-color:#f5dab1}.el-button--warning.is-plain:focus,.el-button--warning.is-plain:hover{background:#e6a23c;border-color:#e6a23c;color:#fff}.el-button--warning.is-plain:active{background:#cf9236;border-color:#cf9236;color:#fff;outline:0}.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover{color:#f0c78a;background-color:#fdf6ec;border-color:#faecd8}.el-button--danger{color:#fff;background-color:#f56c6c;border-color:#f56c6c}.el-button--danger:focus,.el-button--danger:hover{background:#f78989;border-color:#f78989;color:#fff}.el-button--danger.is-active,.el-button--danger:active{background:#dd6161;border-color:#dd6161;color:#fff}.el-button--danger:active{outline:0}.el-button--danger.is-disabled,.el-button--danger.is-disabled:active,.el-button--danger.is-disabled:focus,.el-button--danger.is-disabled:hover{color:#fff;background-color:#fab6b6;border-color:#fab6b6}.el-button--danger.is-plain{color:#f56c6c;background:#fef0f0;border-color:#fbc4c4}.el-button--danger.is-plain:focus,.el-button--danger.is-plain:hover{background:#f56c6c;border-color:#f56c6c;color:#fff}.el-button--danger.is-plain:active{background:#dd6161;border-color:#dd6161;color:#fff;outline:0}.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover{color:#f9a7a7;background-color:#fef0f0;border-color:#fde2e2}.el-button--info{color:#fff;background-color:#909399;border-color:#909399}.el-button--info:focus,.el-button--info:hover{background:#a6a9ad;border-color:#a6a9ad;color:#fff}.el-button--info.is-active,.el-button--info:active{background:#82848a;border-color:#82848a;color:#fff}.el-button--info:active{outline:0}.el-button--info.is-disabled,.el-button--info.is-disabled:active,.el-button--info.is-disabled:focus,.el-button--info.is-disabled:hover{color:#fff;background-color:#c8c9cc;border-color:#c8c9cc}.el-button--info.is-plain{color:#909399;background:#f4f4f5;border-color:#d3d4d6}.el-button--info.is-plain:focus,.el-button--info.is-plain:hover{background:#909399;border-color:#909399;color:#fff}.el-button--info.is-plain:active{background:#82848a;border-color:#82848a;color:#fff;outline:0}.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover{color:#bcbec2;background-color:#f4f4f5;border-color:#e9e9eb}.el-button--text,.el-button--text.is-disabled,.el-button--text.is-disabled:focus,.el-button--text.is-disabled:hover,.el-button--text:active{border-color:transparent}.el-button--medium{padding:10px 20px;font-size:14px;border-radius:4px}.el-button--mini,.el-button--small{font-size:12px;border-radius:3px}.el-button--medium.is-round{padding:10px 20px}.el-button--medium.is-circle{padding:10px}.el-button--small,.el-button--small.is-round{padding:9px 15px}.el-button--small.is-circle{padding:9px}.el-button--mini,.el-button--mini.is-round{padding:7px 15px}.el-button--mini.is-circle{padding:7px}.el-button--text{color:#409eff;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:#66b1ff;border-color:transparent;background-color:transparent}.el-button--text:active{color:#3a8ee6;background-color:transparent}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group:after,.el-button-group:before{display:table;content:""}.el-button-group:after{clear:both}.el-button-group>.el-button{float:left;position:relative}.el-button-group>.el-button+.el-button{margin-left:0}.el-button-group>.el-button.is-disabled{z-index:1}.el-button-group>.el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.el-button-group>.el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group>.el-button:first-child:last-child{border-radius:4px}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:20px}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button:not(:last-child){margin-right:-1px}.el-button-group>.el-button.is-active,.el-button-group>.el-button:active,.el-button-group>.el-button:focus,.el-button-group>.el-button:hover{z-index:1}.el-button-group>.el-dropdown>.el-button{border-top-left-radius:0;border-bottom-left-radius:0;border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--primary:first-child{border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--primary:last-child{border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--primary:not(:first-child):not(:last-child){border-left-color:hsla(0,0%,100%,.5);border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--success:first-child{border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--success:last-child{border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--success:not(:first-child):not(:last-child){border-left-color:hsla(0,0%,100%,.5);border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--warning:first-child{border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--warning:last-child{border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--warning:not(:first-child):not(:last-child){border-left-color:hsla(0,0%,100%,.5);border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--danger:first-child{border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--danger:last-child{border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--danger:not(:first-child):not(:last-child){border-left-color:hsla(0,0%,100%,.5);border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--info:first-child{border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--info:last-child{border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--info:not(:first-child):not(:last-child){border-left-color:hsla(0,0%,100%,.5);border-right-color:hsla(0,0%,100%,.5)}.el-calendar{background-color:#fff}.el-calendar__header{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:12px 20px;border-bottom:1px solid #ebeef5}.el-backtop,.el-page-header{display:-ms-flexbox}.el-calendar__title{color:#000;-ms-flex-item-align:center;align-self:center}.el-calendar__body{padding:12px 20px 35px}.el-calendar-table{table-layout:fixed;width:100%}.el-calendar-table thead th{padding:12px 0;color:#606266;font-weight:400}.el-calendar-table:not(.is-range) td.next,.el-calendar-table:not(.is-range) td.prev{color:#c0c4cc}.el-backtop,.el-calendar-table td.is-today{color:#409eff}.el-calendar-table td{border-bottom:1px solid #ebeef5;border-right:1px solid #ebeef5;vertical-align:top;transition:background-color .2s ease}.el-calendar-table td.is-selected{background-color:#f2f8fe}.el-calendar-table tr:first-child td{border-top:1px solid #ebeef5}.el-calendar-table tr td:first-child{border-left:1px solid #ebeef5}.el-calendar-table tr.el-calendar-table__row--hide-border td{border-top:none}.el-calendar-table .el-calendar-day{box-sizing:border-box;padding:8px;height:85px}.el-calendar-table .el-calendar-day:hover{cursor:pointer;background-color:#f2f8fe}.el-backtop{position:fixed;background-color:#fff;width:40px;height:40px;border-radius:50%;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;font-size:20px;box-shadow:0 0 6px rgba(0,0,0,.12);cursor:pointer;z-index:5}.el-backtop:hover{background-color:#f2f6fc}.el-page-header{display:flex;line-height:24px}.el-page-header__left{display:-ms-flexbox;display:flex;cursor:pointer;margin-right:40px;position:relative}.el-page-header__left:after{content:"";position:absolute;width:1px;height:16px;right:-20px;top:50%;transform:translateY(-50%);background-color:#dcdfe6}.el-checkbox,.el-checkbox__input{display:inline-block;position:relative;white-space:nowrap}.el-page-header__left .el-icon-back{font-size:18px;margin-right:6px;-ms-flex-item-align:center;align-self:center}.el-page-header__title{font-size:14px;font-weight:500}.el-page-header__content{font-size:18px;color:#303133}.el-checkbox{color:#606266;font-weight:500;font-size:14px;cursor:pointer;user-select:none;margin-right:30px}.el-checkbox-button__inner,.el-radio{font-weight:500;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.el-checkbox.is-bordered{padding:9px 20px 9px 10px;border-radius:4px;border:1px solid #dcdfe6;box-sizing:border-box;line-height:normal;height:40px}.el-checkbox.is-bordered.is-checked{border-color:#409eff}.el-checkbox.is-bordered.is-disabled{border-color:#ebeef5;cursor:not-allowed}.el-checkbox.is-bordered+.el-checkbox.is-bordered{margin-left:10px}.el-checkbox.is-bordered.el-checkbox--medium{padding:7px 20px 7px 10px;border-radius:4px;height:36px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label{line-height:17px;font-size:14px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{padding:5px 15px 5px 10px;border-radius:3px;height:32px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{line-height:15px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner:after{height:6px;width:2px}.el-checkbox.is-bordered.el-checkbox--mini{padding:3px 15px 3px 10px;border-radius:3px;height:28px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label{line-height:12px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner:after{height:6px;width:2px}.el-checkbox__input{cursor:pointer;outline:0;line-height:1;vertical-align:middle}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#dcdfe6;cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner:after{cursor:not-allowed;border-color:#c0c4cc}.el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner:after{border-color:#c0c4cc}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner:before{background-color:#c0c4cc;border-color:#c0c4cc}.el-checkbox__input.is-checked .el-checkbox__inner,.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#409eff;border-color:#409eff}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:#c0c4cc;cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner:after{transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:#409eff}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#409eff}.el-checkbox__input.is-indeterminate .el-checkbox__inner:before{content:"";position:absolute;display:block;background-color:#fff;height:2px;transform:scale(.5);left:0;right:0;top:5px}.el-checkbox__input.is-indeterminate .el-checkbox__inner:after{display:none}.el-checkbox__inner{display:inline-block;position:relative;border:1px solid #dcdfe6;border-radius:2px;box-sizing:border-box;width:14px;height:14px;background-color:#fff;z-index:1;transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46)}.el-checkbox__inner:hover{border-color:#409eff}.el-checkbox__inner:after{box-sizing:content-box;content:"";border:1px solid #fff;border-left:0;border-top:0;height:7px;left:4px;position:absolute;top:1px;transform:rotate(45deg) scaleY(0);width:3px;transition:transform .15s ease-in .05s;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;z-index:-1}.el-checkbox-button,.el-checkbox-button__inner{display:inline-block;position:relative}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox:last-of-type{margin-right:0}.el-checkbox-button__inner{line-height:1;white-space:nowrap;vertical-align:middle;cursor:pointer;background:#fff;border:1px solid #dcdfe6;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;box-sizing:border-box;outline:0;margin:0;transition:all .3s cubic-bezier(.645,.045,.355,1);padding:12px 20px;font-size:14px;border-radius:0}.el-checkbox-button__inner.is-round{padding:12px 20px}.el-checkbox-button__inner:hover{color:#409eff}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-radio,.el-radio__input{line-height:1;outline:0;white-space:nowrap}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{opacity:0;outline:0;position:absolute;margin:0;z-index:-1}.el-radio,.el-radio__inner,.el-radio__input{position:relative;display:inline-block}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:#fff;background-color:#409eff;border-color:#409eff;box-shadow:-1px 0 0 0 #8cc5ff}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#409eff}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5;box-shadow:none}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:#ebeef5}.el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#409eff}.el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0}.el-checkbox-button--medium .el-checkbox-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-checkbox-button--medium .el-checkbox-button__inner.is-round{padding:10px 20px}.el-checkbox-button--small .el-checkbox-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:9px 15px}.el-checkbox-button--mini .el-checkbox-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-checkbox-button--mini .el-checkbox-button__inner.is-round{padding:7px 15px}.el-checkbox-group{font-size:0}.el-radio,.el-radio--medium.is-bordered .el-radio__label{font-size:14px}.el-radio{color:#606266;cursor:pointer;margin-right:30px}.el-cascader-node>.el-radio,.el-radio:last-child{margin-right:0}.el-radio.is-bordered{padding:12px 20px 0 10px;border-radius:4px;border:1px solid #dcdfe6;box-sizing:border-box;height:40px}.el-radio.is-bordered.is-checked{border-color:#409eff}.el-radio.is-bordered.is-disabled{cursor:not-allowed;border-color:#ebeef5}.el-radio__input.is-disabled .el-radio__inner,.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:#f5f7fa;border-color:#e4e7ed}.el-radio.is-bordered+.el-radio.is-bordered{margin-left:10px}.el-radio--medium.is-bordered{padding:10px 20px 0 10px;border-radius:4px;height:36px}.el-radio--mini.is-bordered .el-radio__label,.el-radio--small.is-bordered .el-radio__label{font-size:12px}.el-radio--medium.is-bordered .el-radio__inner{height:14px;width:14px}.el-radio--small.is-bordered{padding:8px 15px 0 10px;border-radius:3px;height:32px}.el-radio--small.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio--mini.is-bordered{padding:6px 15px 0 10px;border-radius:3px;height:28px}.el-radio--mini.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio__input{cursor:pointer;vertical-align:middle}.el-radio__input.is-disabled .el-radio__inner{cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner:after{cursor:not-allowed;background-color:#f5f7fa}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner:after{background-color:#c0c4cc}.el-radio__input.is-disabled+span.el-radio__label{color:#c0c4cc;cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{border-color:#409eff;background:#409eff}.el-radio__input.is-checked .el-radio__inner:after{transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-checked+.el-radio__label{color:#409eff}.el-radio__input.is-focus .el-radio__inner{border-color:#409eff}.el-radio__inner{border:1px solid #dcdfe6;border-radius:100%;width:14px;height:14px;background-color:#fff;cursor:pointer;box-sizing:border-box}.el-radio__inner:hover{border-color:#409eff}.el-radio__inner:after{width:4px;height:4px;border-radius:100%;background-color:#fff;content:"";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%) scale(0);transition:transform .15s ease-in}.el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{box-shadow:0 0 2px 2px #409eff}.el-radio__label{font-size:14px;padding-left:10px}.el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active>.el-scrollbar__bar,.el-scrollbar:focus>.el-scrollbar__bar,.el-scrollbar:hover>.el-scrollbar__bar{opacity:1;transition:opacity .34s ease-out}.el-scrollbar__wrap{overflow:scroll;height:100%}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:hsla(220,4%,58%,.3);transition:background-color .3s}.el-scrollbar__thumb:hover{background-color:hsla(220,4%,58%,.5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px;opacity:0;transition:opacity .12s ease-out}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-cascader-panel{display:-ms-flexbox;display:flex;border-radius:4px;font-size:14px}.el-cascader-panel.is-bordered{border:1px solid #e4e7ed;border-radius:4px}.el-cascader-menu{min-width:180px;box-sizing:border-box;color:#606266;border-right:1px solid #e4e7ed}.el-cascader-menu:last-child{border-right:none}.el-cascader-menu:last-child .el-cascader-node{padding-right:20px}.el-cascader-menu__wrap{height:204px}.el-cascader-menu__list{position:relative;min-height:100%;margin:0;padding:6px 0;list-style:none;box-sizing:border-box}.el-avatar,.el-drawer{-webkit-box-sizing:border-box;overflow:hidden}.el-cascader-menu__hover-zone{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.el-cascader-menu__empty-text{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center;color:#c0c4cc}.el-cascader-node{position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:0 30px 0 20px;height:34px;line-height:34px;outline:0}.el-cascader-node.is-selectable.in-active-path{color:#606266}.el-cascader-node.in-active-path,.el-cascader-node.is-active,.el-cascader-node.is-selectable.in-checked-path{color:#409eff;font-weight:700}.el-cascader-node:not(.is-disabled){cursor:pointer}.el-cascader-node:not(.is-disabled):focus,.el-cascader-node:not(.is-disabled):hover{background:#f5f7fa}.el-cascader-node.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-cascader-node__prefix{position:absolute;left:10px}.el-cascader-node__postfix{position:absolute;right:10px}.el-cascader-node__label{-ms-flex:1;flex:1;padding:0 10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-cascader-node>.el-radio .el-radio__label{padding-left:0}.el-avatar{display:inline-block;box-sizing:border-box;text-align:center;color:#fff;background:#c0c4cc;width:40px;height:40px;line-height:40px;font-size:14px}.el-avatar>img{display:block;height:100%;vertical-align:middle}.el-drawer,.el-drawer__header{display:-ms-flexbox}.el-avatar--circle{border-radius:50%}.el-avatar--square{border-radius:4px}.el-avatar--icon{font-size:18px}.el-avatar--large{width:40px;height:40px;line-height:40px}.el-avatar--medium{width:36px;height:36px;line-height:36px}.el-avatar--small{width:28px;height:28px;line-height:28px}.el-drawer.btt,.el-drawer.ttb,.el-drawer__container{left:0;right:0;width:100%}.el-drawer.ltr,.el-drawer.rtl,.el-drawer__container{top:0;bottom:0;height:100%}@keyframes el-drawer-fade-in{0%{opacity:0}to{opacity:1}}@keyframes rtl-drawer-in{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes rtl-drawer-out{0%{transform:translate(0)}to{transform:translate(100%)}}@keyframes ltr-drawer-in{0%{transform:translate(-100%)}to{transform:translate(0)}}@keyframes ltr-drawer-out{0%{transform:translate(0)}to{transform:translate(-100%)}}@keyframes ttb-drawer-in{0%{transform:translateY(-100%)}to{transform:translate(0)}}@keyframes ttb-drawer-out{0%{transform:translate(0)}to{transform:translateY(-100%)}}@keyframes btt-drawer-in{0%{transform:translateY(100%)}to{transform:translate(0)}}@keyframes btt-drawer-out{0%{transform:translate(0)}to{transform:translateY(100%)}}.el-drawer{position:absolute;box-sizing:border-box;background-color:#fff;display:flex;-ms-flex-direction:column;flex-direction:column;box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12)}.el-drawer.rtl{animation:rtl-drawer-out .3s;right:0}.el-drawer__open .el-drawer.rtl{animation:rtl-drawer-in .3s 1ms}.el-drawer.ltr{animation:ltr-drawer-out .3s;left:0}.el-drawer__open .el-drawer.ltr{animation:ltr-drawer-in .3s 1ms}.el-drawer.ttb{animation:ttb-drawer-out .3s;top:0}.el-drawer__open .el-drawer.ttb{animation:ttb-drawer-in .3s 1ms}.el-drawer.btt{animation:btt-drawer-out .3s;bottom:0}.el-drawer__open .el-drawer.btt{animation:btt-drawer-in .3s 1ms}.el-drawer__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:hidden;margin:0}.el-drawer__header{-ms-flex-align:center;align-items:center;color:#72767b;display:flex;margin-bottom:32px;padding:20px 20px 0}.el-drawer__header>:first-child,.el-drawer__title{-ms-flex:1;flex:1}.el-drawer__title{margin:0;line-height:inherit;font-size:1rem}.el-drawer__close-btn{border:none;cursor:pointer;font-size:20px;color:inherit;background-color:transparent}.el-drawer__body{-ms-flex:1;flex:1}.el-drawer__body>*{box-sizing:border-box}.el-drawer__container{position:relative}.el-drawer-fade-enter-active{animation:el-drawer-fade-in .3s}.el-drawer-fade-leave-active{animation:el-drawer-fade-in .3s reverse}.el-popconfirm__main{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.el-popconfirm__icon{margin-right:5px}.el-popconfirm__action{text-align:right;margin:0}#nprogress{pointer-events:none}#nprogress .bar{background:#29d;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #29d,0 0 5px #29d;opacity:1;transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border:2px solid transparent;border-top-color:#29d;border-left-color:#29d;border-radius:50%;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.login-container[data-v-2c8a1058]{border-radius:5px;-moz-border-radius:5px;background-clip:padding-box;margin:180px auto;width:350px;padding:35px 35px 15px;background:#fff;border:1px solid #eaeaea;box-shadow:0 0 25px #cac6c6}.login-container .title[data-v-2c8a1058]{margin:0 auto 40px;text-align:center;color:#505458}.login-container .remember[data-v-2c8a1058]{margin:0 0 35px}.page-container[data-v-552f9c87]{font-size:20px;text-align:center;color:#c0ccda}.container[data-v-51a2c380]{position:absolute;top:0;bottom:0;width:100%;height:100%}.container .header[data-v-51a2c380]{height:60px;line-height:60px;background:#eee;border-left:1px solid #fff;border-bottom:6px solid #c0c1e1}.container .header .userinfo[data-v-51a2c380]{text-align:right;padding-right:120px;float:right}.container .header .userinfo .userinfo-inner[data-v-51a2c380]{cursor:pointer;color:#000}.container .header .userinfo .userinfo-inner img[data-v-51a2c380]{width:40px;height:40px;border-radius:20px;margin:10px 0 10px 10px;float:right}.container .header .logo[data-v-51a2c380]{height:60px;font-size:22px;padding-left:20px;padding-right:20px;border-color:hsla(62,77%,76%,.3);border-right-width:0;border-right-style:solid}.container .header .logo img[data-v-51a2c380]{width:40px;float:left;margin:10px 10px 10px 18px}.container .header .logo .txt[data-v-51a2c380]{color:#fff}.container .header .logo-width[data-v-51a2c380]{width:350px}.container .header .logo-collapse-width[data-v-51a2c380]{width:60px}.container .header .tools[data-v-51a2c380]{padding:0 23px;width:14px;height:60px;line-height:60px;cursor:pointer}.container .header .screenfull[data-v-51a2c380]{vertical-align:middle;height:60px;color:red}.container .main[data-v-51a2c380]{display:flex;position:absolute;top:0;bottom:0;overflow:hidden}.container .main aside[data-v-51a2c380]{flex:0 0 230px;width:230px;height:100%}.container .main aside .el-menu[data-v-51a2c380]{height:100%}.container .main aside .collapsed[data-v-51a2c380]{width:60px}.container .main aside .collapsed .item[data-v-51a2c380]{position:relative}.container .main aside .collapsed .submenu[data-v-51a2c380]{position:absolute;top:0;left:60px;z-index:99999;height:auto;display:none}.container .main .menu-collapsed[data-v-51a2c380]{flex:0 0 60px;width:60px}.container .main .menu-expanded[data-v-51a2c380]{flex:0 0 230px;width:230px}.container .main .el-menu-item[data-v-51a2c380]{min-width:60px}.container .main .el-menu-item.is-active[data-v-51a2c380]{background-color:#353f4f!important;border-right:4px solid #20a0ff;color:#20a0ff}.container .main .menu-list[data-v-51a2c380]{height:45px;line-height:45px}.container .main .menu-list.is-active[data-v-51a2c380]{background-color:#353f4f!important;border-right:4px solid #20a0ff;color:#20a0ff}.container .main .content-container[data-v-51a2c380]{flex:1;overflow-y:scroll}.container .main .content-container .breadcrumb-container .title[data-v-51a2c380]{width:200px;float:left;color:#475669}.container .main .content-container .breadcrumb-container .breadcrumb-inner[data-v-51a2c380]{float:right}.container .main .content-container .content-wrapper[data-v-51a2c380]{background-color:#fff;box-sizing:border-box}.toolbar[data-v-51a2c380]{background-color:#f8f8f8!important}.hand[data-v-51a2c380]{cursor:pointer}.screenfull[data-v-0135f127]{display:inline-block;cursor:pointer;vertical-align:-.15em}.chart-container[data-v-612c0ec1]{width:100%;float:left}.el-col[data-v-612c0ec1]{padding:30px 20px}.threejs-container[data-v-2daed92c]{width:100%;float:left}#demo[data-v-2daed92c]{font-family:Avenir,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:#2c3e50}.babylonjs-container[data-v-fee14efe]{width:100%;float:left}#renderCanvas[data-v-fee14efe]{width:100%;height:100%;touch-action:none}#excel-upload-input[data-v-3d16a820]{display:none;z-index:-9999}#drop[data-v-3d16a820]{border:2px dashed #bbb;width:600px;height:160px;line-height:160px;margin:0 auto;font-size:24px;border-radius:5px;text-align:center;color:#bbb;position:relative}/*! - * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:FontAwesome;src:url(/static/fonts/fontawesome-webfont.674f50d.eot);src:url(/static/fonts/fontawesome-webfont.674f50d.eot?#iefix&v=4.7.0) format("embedded-opentype"),url(/static/fonts/fontawesome-webfont.af7ae50.woff2) format("woff2"),url(/static/fonts/fontawesome-webfont.fee66e7.woff) format("woff"),url(/static/fonts/fontawesome-webfont.b06871f.ttf) format("truetype"),url(/static/img/fontawesome-webfont.912ec66.svg#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{animation:fa-spin 2s infinite linear}.fa-pulse{animation:fa-spin 1s infinite steps(8)}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\F000"}.fa-music:before{content:"\F001"}.fa-search:before{content:"\F002"}.fa-envelope-o:before{content:"\F003"}.fa-heart:before{content:"\F004"}.fa-star:before{content:"\F005"}.fa-star-o:before{content:"\F006"}.fa-user:before{content:"\F007"}.fa-film:before{content:"\F008"}.fa-th-large:before{content:"\F009"}.fa-th:before{content:"\F00A"}.fa-th-list:before{content:"\F00B"}.fa-check:before{content:"\F00C"}.fa-close:before,.fa-remove:before,.fa-times:before{content:"\F00D"}.fa-search-plus:before{content:"\F00E"}.fa-search-minus:before{content:"\F010"}.fa-power-off:before{content:"\F011"}.fa-signal:before{content:"\F012"}.fa-cog:before,.fa-gear:before{content:"\F013"}.fa-trash-o:before{content:"\F014"}.fa-home:before{content:"\F015"}.fa-file-o:before{content:"\F016"}.fa-clock-o:before{content:"\F017"}.fa-road:before{content:"\F018"}.fa-download:before{content:"\F019"}.fa-arrow-circle-o-down:before{content:"\F01A"}.fa-arrow-circle-o-up:before{content:"\F01B"}.fa-inbox:before{content:"\F01C"}.fa-play-circle-o:before{content:"\F01D"}.fa-repeat:before,.fa-rotate-right:before{content:"\F01E"}.fa-refresh:before{content:"\F021"}.fa-list-alt:before{content:"\F022"}.fa-lock:before{content:"\F023"}.fa-flag:before{content:"\F024"}.fa-headphones:before{content:"\F025"}.fa-volume-off:before{content:"\F026"}.fa-volume-down:before{content:"\F027"}.fa-volume-up:before{content:"\F028"}.fa-qrcode:before{content:"\F029"}.fa-barcode:before{content:"\F02A"}.fa-tag:before{content:"\F02B"}.fa-tags:before{content:"\F02C"}.fa-book:before{content:"\F02D"}.fa-bookmark:before{content:"\F02E"}.fa-print:before{content:"\F02F"}.fa-camera:before{content:"\F030"}.fa-font:before{content:"\F031"}.fa-bold:before{content:"\F032"}.fa-italic:before{content:"\F033"}.fa-text-height:before{content:"\F034"}.fa-text-width:before{content:"\F035"}.fa-align-left:before{content:"\F036"}.fa-align-center:before{content:"\F037"}.fa-align-right:before{content:"\F038"}.fa-align-justify:before{content:"\F039"}.fa-list:before{content:"\F03A"}.fa-dedent:before,.fa-outdent:before{content:"\F03B"}.fa-indent:before{content:"\F03C"}.fa-video-camera:before{content:"\F03D"}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:"\F03E"}.fa-pencil:before{content:"\F040"}.fa-map-marker:before{content:"\F041"}.fa-adjust:before{content:"\F042"}.fa-tint:before{content:"\F043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\F044"}.fa-share-square-o:before{content:"\F045"}.fa-check-square-o:before{content:"\F046"}.fa-arrows:before{content:"\F047"}.fa-step-backward:before{content:"\F048"}.fa-fast-backward:before{content:"\F049"}.fa-backward:before{content:"\F04A"}.fa-play:before{content:"\F04B"}.fa-pause:before{content:"\F04C"}.fa-stop:before{content:"\F04D"}.fa-forward:before{content:"\F04E"}.fa-fast-forward:before{content:"\F050"}.fa-step-forward:before{content:"\F051"}.fa-eject:before{content:"\F052"}.fa-chevron-left:before{content:"\F053"}.fa-chevron-right:before{content:"\F054"}.fa-plus-circle:before{content:"\F055"}.fa-minus-circle:before{content:"\F056"}.fa-times-circle:before{content:"\F057"}.fa-check-circle:before{content:"\F058"}.fa-question-circle:before{content:"\F059"}.fa-info-circle:before{content:"\F05A"}.fa-crosshairs:before{content:"\F05B"}.fa-times-circle-o:before{content:"\F05C"}.fa-check-circle-o:before{content:"\F05D"}.fa-ban:before{content:"\F05E"}.fa-arrow-left:before{content:"\F060"}.fa-arrow-right:before{content:"\F061"}.fa-arrow-up:before{content:"\F062"}.fa-arrow-down:before{content:"\F063"}.fa-mail-forward:before,.fa-share:before{content:"\F064"}.fa-expand:before{content:"\F065"}.fa-compress:before{content:"\F066"}.fa-plus:before{content:"\F067"}.fa-minus:before{content:"\F068"}.fa-asterisk:before{content:"\F069"}.fa-exclamation-circle:before{content:"\F06A"}.fa-gift:before{content:"\F06B"}.fa-leaf:before{content:"\F06C"}.fa-fire:before{content:"\F06D"}.fa-eye:before{content:"\F06E"}.fa-eye-slash:before{content:"\F070"}.fa-exclamation-triangle:before,.fa-warning:before{content:"\F071"}.fa-plane:before{content:"\F072"}.fa-calendar:before{content:"\F073"}.fa-random:before{content:"\F074"}.fa-comment:before{content:"\F075"}.fa-magnet:before{content:"\F076"}.fa-chevron-up:before{content:"\F077"}.fa-chevron-down:before{content:"\F078"}.fa-retweet:before{content:"\F079"}.fa-shopping-cart:before{content:"\F07A"}.fa-folder:before{content:"\F07B"}.fa-folder-open:before{content:"\F07C"}.fa-arrows-v:before{content:"\F07D"}.fa-arrows-h:before{content:"\F07E"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\F080"}.fa-twitter-square:before{content:"\F081"}.fa-facebook-square:before{content:"\F082"}.fa-camera-retro:before{content:"\F083"}.fa-key:before{content:"\F084"}.fa-cogs:before,.fa-gears:before{content:"\F085"}.fa-comments:before{content:"\F086"}.fa-thumbs-o-up:before{content:"\F087"}.fa-thumbs-o-down:before{content:"\F088"}.fa-star-half:before{content:"\F089"}.fa-heart-o:before{content:"\F08A"}.fa-sign-out:before{content:"\F08B"}.fa-linkedin-square:before{content:"\F08C"}.fa-thumb-tack:before{content:"\F08D"}.fa-external-link:before{content:"\F08E"}.fa-sign-in:before{content:"\F090"}.fa-trophy:before{content:"\F091"}.fa-github-square:before{content:"\F092"}.fa-upload:before{content:"\F093"}.fa-lemon-o:before{content:"\F094"}.fa-phone:before{content:"\F095"}.fa-square-o:before{content:"\F096"}.fa-bookmark-o:before{content:"\F097"}.fa-phone-square:before{content:"\F098"}.fa-twitter:before{content:"\F099"}.fa-facebook-f:before,.fa-facebook:before{content:"\F09A"}.fa-github:before{content:"\F09B"}.fa-unlock:before{content:"\F09C"}.fa-credit-card:before{content:"\F09D"}.fa-feed:before,.fa-rss:before{content:"\F09E"}.fa-hdd-o:before{content:"\F0A0"}.fa-bullhorn:before{content:"\F0A1"}.fa-bell:before{content:"\F0F3"}.fa-certificate:before{content:"\F0A3"}.fa-hand-o-right:before{content:"\F0A4"}.fa-hand-o-left:before{content:"\F0A5"}.fa-hand-o-up:before{content:"\F0A6"}.fa-hand-o-down:before{content:"\F0A7"}.fa-arrow-circle-left:before{content:"\F0A8"}.fa-arrow-circle-right:before{content:"\F0A9"}.fa-arrow-circle-up:before{content:"\F0AA"}.fa-arrow-circle-down:before{content:"\F0AB"}.fa-globe:before{content:"\F0AC"}.fa-wrench:before{content:"\F0AD"}.fa-tasks:before{content:"\F0AE"}.fa-filter:before{content:"\F0B0"}.fa-briefcase:before{content:"\F0B1"}.fa-arrows-alt:before{content:"\F0B2"}.fa-group:before,.fa-users:before{content:"\F0C0"}.fa-chain:before,.fa-link:before{content:"\F0C1"}.fa-cloud:before{content:"\F0C2"}.fa-flask:before{content:"\F0C3"}.fa-cut:before,.fa-scissors:before{content:"\F0C4"}.fa-copy:before,.fa-files-o:before{content:"\F0C5"}.fa-paperclip:before{content:"\F0C6"}.fa-floppy-o:before,.fa-save:before{content:"\F0C7"}.fa-square:before{content:"\F0C8"}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:"\F0C9"}.fa-list-ul:before{content:"\F0CA"}.fa-list-ol:before{content:"\F0CB"}.fa-strikethrough:before{content:"\F0CC"}.fa-underline:before{content:"\F0CD"}.fa-table:before{content:"\F0CE"}.fa-magic:before{content:"\F0D0"}.fa-truck:before{content:"\F0D1"}.fa-pinterest:before{content:"\F0D2"}.fa-pinterest-square:before{content:"\F0D3"}.fa-google-plus-square:before{content:"\F0D4"}.fa-google-plus:before{content:"\F0D5"}.fa-money:before{content:"\F0D6"}.fa-caret-down:before{content:"\F0D7"}.fa-caret-up:before{content:"\F0D8"}.fa-caret-left:before{content:"\F0D9"}.fa-caret-right:before{content:"\F0DA"}.fa-columns:before{content:"\F0DB"}.fa-sort:before,.fa-unsorted:before{content:"\F0DC"}.fa-sort-desc:before,.fa-sort-down:before{content:"\F0DD"}.fa-sort-asc:before,.fa-sort-up:before{content:"\F0DE"}.fa-envelope:before{content:"\F0E0"}.fa-linkedin:before{content:"\F0E1"}.fa-rotate-left:before,.fa-undo:before{content:"\F0E2"}.fa-gavel:before,.fa-legal:before{content:"\F0E3"}.fa-dashboard:before,.fa-tachometer:before{content:"\F0E4"}.fa-comment-o:before{content:"\F0E5"}.fa-comments-o:before{content:"\F0E6"}.fa-bolt:before,.fa-flash:before{content:"\F0E7"}.fa-sitemap:before{content:"\F0E8"}.fa-umbrella:before{content:"\F0E9"}.fa-clipboard:before,.fa-paste:before{content:"\F0EA"}.fa-lightbulb-o:before{content:"\F0EB"}.fa-exchange:before{content:"\F0EC"}.fa-cloud-download:before{content:"\F0ED"}.fa-cloud-upload:before{content:"\F0EE"}.fa-user-md:before{content:"\F0F0"}.fa-stethoscope:before{content:"\F0F1"}.fa-suitcase:before{content:"\F0F2"}.fa-bell-o:before{content:"\F0A2"}.fa-coffee:before{content:"\F0F4"}.fa-cutlery:before{content:"\F0F5"}.fa-file-text-o:before{content:"\F0F6"}.fa-building-o:before{content:"\F0F7"}.fa-hospital-o:before{content:"\F0F8"}.fa-ambulance:before{content:"\F0F9"}.fa-medkit:before{content:"\F0FA"}.fa-fighter-jet:before{content:"\F0FB"}.fa-beer:before{content:"\F0FC"}.fa-h-square:before{content:"\F0FD"}.fa-plus-square:before{content:"\F0FE"}.fa-angle-double-left:before{content:"\F100"}.fa-angle-double-right:before{content:"\F101"}.fa-angle-double-up:before{content:"\F102"}.fa-angle-double-down:before{content:"\F103"}.fa-angle-left:before{content:"\F104"}.fa-angle-right:before{content:"\F105"}.fa-angle-up:before{content:"\F106"}.fa-angle-down:before{content:"\F107"}.fa-desktop:before{content:"\F108"}.fa-laptop:before{content:"\F109"}.fa-tablet:before{content:"\F10A"}.fa-mobile-phone:before,.fa-mobile:before{content:"\F10B"}.fa-circle-o:before{content:"\F10C"}.fa-quote-left:before{content:"\F10D"}.fa-quote-right:before{content:"\F10E"}.fa-spinner:before{content:"\F110"}.fa-circle:before{content:"\F111"}.fa-mail-reply:before,.fa-reply:before{content:"\F112"}.fa-github-alt:before{content:"\F113"}.fa-folder-o:before{content:"\F114"}.fa-folder-open-o:before{content:"\F115"}.fa-smile-o:before{content:"\F118"}.fa-frown-o:before{content:"\F119"}.fa-meh-o:before{content:"\F11A"}.fa-gamepad:before{content:"\F11B"}.fa-keyboard-o:before{content:"\F11C"}.fa-flag-o:before{content:"\F11D"}.fa-flag-checkered:before{content:"\F11E"}.fa-terminal:before{content:"\F120"}.fa-code:before{content:"\F121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\F122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\F123"}.fa-location-arrow:before{content:"\F124"}.fa-crop:before{content:"\F125"}.fa-code-fork:before{content:"\F126"}.fa-chain-broken:before,.fa-unlink:before{content:"\F127"}.fa-question:before{content:"\F128"}.fa-info:before{content:"\F129"}.fa-exclamation:before{content:"\F12A"}.fa-superscript:before{content:"\F12B"}.fa-subscript:before{content:"\F12C"}.fa-eraser:before{content:"\F12D"}.fa-puzzle-piece:before{content:"\F12E"}.fa-microphone:before{content:"\F130"}.fa-microphone-slash:before{content:"\F131"}.fa-shield:before{content:"\F132"}.fa-calendar-o:before{content:"\F133"}.fa-fire-extinguisher:before{content:"\F134"}.fa-rocket:before{content:"\F135"}.fa-maxcdn:before{content:"\F136"}.fa-chevron-circle-left:before{content:"\F137"}.fa-chevron-circle-right:before{content:"\F138"}.fa-chevron-circle-up:before{content:"\F139"}.fa-chevron-circle-down:before{content:"\F13A"}.fa-html5:before{content:"\F13B"}.fa-css3:before{content:"\F13C"}.fa-anchor:before{content:"\F13D"}.fa-unlock-alt:before{content:"\F13E"}.fa-bullseye:before{content:"\F140"}.fa-ellipsis-h:before{content:"\F141"}.fa-ellipsis-v:before{content:"\F142"}.fa-rss-square:before{content:"\F143"}.fa-play-circle:before{content:"\F144"}.fa-ticket:before{content:"\F145"}.fa-minus-square:before{content:"\F146"}.fa-minus-square-o:before{content:"\F147"}.fa-level-up:before{content:"\F148"}.fa-level-down:before{content:"\F149"}.fa-check-square:before{content:"\F14A"}.fa-pencil-square:before{content:"\F14B"}.fa-external-link-square:before{content:"\F14C"}.fa-share-square:before{content:"\F14D"}.fa-compass:before{content:"\F14E"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:"\F150"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:"\F151"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:"\F152"}.fa-eur:before,.fa-euro:before{content:"\F153"}.fa-gbp:before{content:"\F154"}.fa-dollar:before,.fa-usd:before{content:"\F155"}.fa-inr:before,.fa-rupee:before{content:"\F156"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:"\F157"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:"\F158"}.fa-krw:before,.fa-won:before{content:"\F159"}.fa-bitcoin:before,.fa-btc:before{content:"\F15A"}.fa-file:before{content:"\F15B"}.fa-file-text:before{content:"\F15C"}.fa-sort-alpha-asc:before{content:"\F15D"}.fa-sort-alpha-desc:before{content:"\F15E"}.fa-sort-amount-asc:before{content:"\F160"}.fa-sort-amount-desc:before{content:"\F161"}.fa-sort-numeric-asc:before{content:"\F162"}.fa-sort-numeric-desc:before{content:"\F163"}.fa-thumbs-up:before{content:"\F164"}.fa-thumbs-down:before{content:"\F165"}.fa-youtube-square:before{content:"\F166"}.fa-youtube:before{content:"\F167"}.fa-xing:before{content:"\F168"}.fa-xing-square:before{content:"\F169"}.fa-youtube-play:before{content:"\F16A"}.fa-dropbox:before{content:"\F16B"}.fa-stack-overflow:before{content:"\F16C"}.fa-instagram:before{content:"\F16D"}.fa-flickr:before{content:"\F16E"}.fa-adn:before{content:"\F170"}.fa-bitbucket:before{content:"\F171"}.fa-bitbucket-square:before{content:"\F172"}.fa-tumblr:before{content:"\F173"}.fa-tumblr-square:before{content:"\F174"}.fa-long-arrow-down:before{content:"\F175"}.fa-long-arrow-up:before{content:"\F176"}.fa-long-arrow-left:before{content:"\F177"}.fa-long-arrow-right:before{content:"\F178"}.fa-apple:before{content:"\F179"}.fa-windows:before{content:"\F17A"}.fa-android:before{content:"\F17B"}.fa-linux:before{content:"\F17C"}.fa-dribbble:before{content:"\F17D"}.fa-skype:before{content:"\F17E"}.fa-foursquare:before{content:"\F180"}.fa-trello:before{content:"\F181"}.fa-female:before{content:"\F182"}.fa-male:before{content:"\F183"}.fa-gittip:before,.fa-gratipay:before{content:"\F184"}.fa-sun-o:before{content:"\F185"}.fa-moon-o:before{content:"\F186"}.fa-archive:before{content:"\F187"}.fa-bug:before{content:"\F188"}.fa-vk:before{content:"\F189"}.fa-weibo:before{content:"\F18A"}.fa-renren:before{content:"\F18B"}.fa-pagelines:before{content:"\F18C"}.fa-stack-exchange:before{content:"\F18D"}.fa-arrow-circle-o-right:before{content:"\F18E"}.fa-arrow-circle-o-left:before{content:"\F190"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:"\F191"}.fa-dot-circle-o:before{content:"\F192"}.fa-wheelchair:before{content:"\F193"}.fa-vimeo-square:before{content:"\F194"}.fa-try:before,.fa-turkish-lira:before{content:"\F195"}.fa-plus-square-o:before{content:"\F196"}.fa-space-shuttle:before{content:"\F197"}.fa-slack:before{content:"\F198"}.fa-envelope-square:before{content:"\F199"}.fa-wordpress:before{content:"\F19A"}.fa-openid:before{content:"\F19B"}.fa-bank:before,.fa-institution:before,.fa-university:before{content:"\F19C"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\F19D"}.fa-yahoo:before{content:"\F19E"}.fa-google:before{content:"\F1A0"}.fa-reddit:before{content:"\F1A1"}.fa-reddit-square:before{content:"\F1A2"}.fa-stumbleupon-circle:before{content:"\F1A3"}.fa-stumbleupon:before{content:"\F1A4"}.fa-delicious:before{content:"\F1A5"}.fa-digg:before{content:"\F1A6"}.fa-pied-piper-pp:before{content:"\F1A7"}.fa-pied-piper-alt:before{content:"\F1A8"}.fa-drupal:before{content:"\F1A9"}.fa-joomla:before{content:"\F1AA"}.fa-language:before{content:"\F1AB"}.fa-fax:before{content:"\F1AC"}.fa-building:before{content:"\F1AD"}.fa-child:before{content:"\F1AE"}.fa-paw:before{content:"\F1B0"}.fa-spoon:before{content:"\F1B1"}.fa-cube:before{content:"\F1B2"}.fa-cubes:before{content:"\F1B3"}.fa-behance:before{content:"\F1B4"}.fa-behance-square:before{content:"\F1B5"}.fa-steam:before{content:"\F1B6"}.fa-steam-square:before{content:"\F1B7"}.fa-recycle:before{content:"\F1B8"}.fa-automobile:before,.fa-car:before{content:"\F1B9"}.fa-cab:before,.fa-taxi:before{content:"\F1BA"}.fa-tree:before{content:"\F1BB"}.fa-spotify:before{content:"\F1BC"}.fa-deviantart:before{content:"\F1BD"}.fa-soundcloud:before{content:"\F1BE"}.fa-database:before{content:"\F1C0"}.fa-file-pdf-o:before{content:"\F1C1"}.fa-file-word-o:before{content:"\F1C2"}.fa-file-excel-o:before{content:"\F1C3"}.fa-file-powerpoint-o:before{content:"\F1C4"}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:"\F1C5"}.fa-file-archive-o:before,.fa-file-zip-o:before{content:"\F1C6"}.fa-file-audio-o:before,.fa-file-sound-o:before{content:"\F1C7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\F1C8"}.fa-file-code-o:before{content:"\F1C9"}.fa-vine:before{content:"\F1CA"}.fa-codepen:before{content:"\F1CB"}.fa-jsfiddle:before{content:"\F1CC"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:"\F1CD"}.fa-circle-o-notch:before{content:"\F1CE"}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:"\F1D0"}.fa-empire:before,.fa-ge:before{content:"\F1D1"}.fa-git-square:before{content:"\F1D2"}.fa-git:before{content:"\F1D3"}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:"\F1D4"}.fa-tencent-weibo:before{content:"\F1D5"}.fa-qq:before{content:"\F1D6"}.fa-wechat:before,.fa-weixin:before{content:"\F1D7"}.fa-paper-plane:before,.fa-send:before{content:"\F1D8"}.fa-paper-plane-o:before,.fa-send-o:before{content:"\F1D9"}.fa-history:before{content:"\F1DA"}.fa-circle-thin:before{content:"\F1DB"}.fa-header:before{content:"\F1DC"}.fa-paragraph:before{content:"\F1DD"}.fa-sliders:before{content:"\F1DE"}.fa-share-alt:before{content:"\F1E0"}.fa-share-alt-square:before{content:"\F1E1"}.fa-bomb:before{content:"\F1E2"}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:"\F1E3"}.fa-tty:before{content:"\F1E4"}.fa-binoculars:before{content:"\F1E5"}.fa-plug:before{content:"\F1E6"}.fa-slideshare:before{content:"\F1E7"}.fa-twitch:before{content:"\F1E8"}.fa-yelp:before{content:"\F1E9"}.fa-newspaper-o:before{content:"\F1EA"}.fa-wifi:before{content:"\F1EB"}.fa-calculator:before{content:"\F1EC"}.fa-paypal:before{content:"\F1ED"}.fa-google-wallet:before{content:"\F1EE"}.fa-cc-visa:before{content:"\F1F0"}.fa-cc-mastercard:before{content:"\F1F1"}.fa-cc-discover:before{content:"\F1F2"}.fa-cc-amex:before{content:"\F1F3"}.fa-cc-paypal:before{content:"\F1F4"}.fa-cc-stripe:before{content:"\F1F5"}.fa-bell-slash:before{content:"\F1F6"}.fa-bell-slash-o:before{content:"\F1F7"}.fa-trash:before{content:"\F1F8"}.fa-copyright:before{content:"\F1F9"}.fa-at:before{content:"\F1FA"}.fa-eyedropper:before{content:"\F1FB"}.fa-paint-brush:before{content:"\F1FC"}.fa-birthday-cake:before{content:"\F1FD"}.fa-area-chart:before{content:"\F1FE"}.fa-pie-chart:before{content:"\F200"}.fa-line-chart:before{content:"\F201"}.fa-lastfm:before{content:"\F202"}.fa-lastfm-square:before{content:"\F203"}.fa-toggle-off:before{content:"\F204"}.fa-toggle-on:before{content:"\F205"}.fa-bicycle:before{content:"\F206"}.fa-bus:before{content:"\F207"}.fa-ioxhost:before{content:"\F208"}.fa-angellist:before{content:"\F209"}.fa-cc:before{content:"\F20A"}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:"\F20B"}.fa-meanpath:before{content:"\F20C"}.fa-buysellads:before{content:"\F20D"}.fa-connectdevelop:before{content:"\F20E"}.fa-dashcube:before{content:"\F210"}.fa-forumbee:before{content:"\F211"}.fa-leanpub:before{content:"\F212"}.fa-sellsy:before{content:"\F213"}.fa-shirtsinbulk:before{content:"\F214"}.fa-simplybuilt:before{content:"\F215"}.fa-skyatlas:before{content:"\F216"}.fa-cart-plus:before{content:"\F217"}.fa-cart-arrow-down:before{content:"\F218"}.fa-diamond:before{content:"\F219"}.fa-ship:before{content:"\F21A"}.fa-user-secret:before{content:"\F21B"}.fa-motorcycle:before{content:"\F21C"}.fa-street-view:before{content:"\F21D"}.fa-heartbeat:before{content:"\F21E"}.fa-venus:before{content:"\F221"}.fa-mars:before{content:"\F222"}.fa-mercury:before{content:"\F223"}.fa-intersex:before,.fa-transgender:before{content:"\F224"}.fa-transgender-alt:before{content:"\F225"}.fa-venus-double:before{content:"\F226"}.fa-mars-double:before{content:"\F227"}.fa-venus-mars:before{content:"\F228"}.fa-mars-stroke:before{content:"\F229"}.fa-mars-stroke-v:before{content:"\F22A"}.fa-mars-stroke-h:before{content:"\F22B"}.fa-neuter:before{content:"\F22C"}.fa-genderless:before{content:"\F22D"}.fa-facebook-official:before{content:"\F230"}.fa-pinterest-p:before{content:"\F231"}.fa-whatsapp:before{content:"\F232"}.fa-server:before{content:"\F233"}.fa-user-plus:before{content:"\F234"}.fa-user-times:before{content:"\F235"}.fa-bed:before,.fa-hotel:before{content:"\F236"}.fa-viacoin:before{content:"\F237"}.fa-train:before{content:"\F238"}.fa-subway:before{content:"\F239"}.fa-medium:before{content:"\F23A"}.fa-y-combinator:before,.fa-yc:before{content:"\F23B"}.fa-optin-monster:before{content:"\F23C"}.fa-opencart:before{content:"\F23D"}.fa-expeditedssl:before{content:"\F23E"}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:"\F240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\F241"}.fa-battery-2:before,.fa-battery-half:before{content:"\F242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\F243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\F244"}.fa-mouse-pointer:before{content:"\F245"}.fa-i-cursor:before{content:"\F246"}.fa-object-group:before{content:"\F247"}.fa-object-ungroup:before{content:"\F248"}.fa-sticky-note:before{content:"\F249"}.fa-sticky-note-o:before{content:"\F24A"}.fa-cc-jcb:before{content:"\F24B"}.fa-cc-diners-club:before{content:"\F24C"}.fa-clone:before{content:"\F24D"}.fa-balance-scale:before{content:"\F24E"}.fa-hourglass-o:before{content:"\F250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\F251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\F252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\F253"}.fa-hourglass:before{content:"\F254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\F255"}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:"\F256"}.fa-hand-scissors-o:before{content:"\F257"}.fa-hand-lizard-o:before{content:"\F258"}.fa-hand-spock-o:before{content:"\F259"}.fa-hand-pointer-o:before{content:"\F25A"}.fa-hand-peace-o:before{content:"\F25B"}.fa-trademark:before{content:"\F25C"}.fa-registered:before{content:"\F25D"}.fa-creative-commons:before{content:"\F25E"}.fa-gg:before{content:"\F260"}.fa-gg-circle:before{content:"\F261"}.fa-tripadvisor:before{content:"\F262"}.fa-odnoklassniki:before{content:"\F263"}.fa-odnoklassniki-square:before{content:"\F264"}.fa-get-pocket:before{content:"\F265"}.fa-wikipedia-w:before{content:"\F266"}.fa-safari:before{content:"\F267"}.fa-chrome:before{content:"\F268"}.fa-firefox:before{content:"\F269"}.fa-opera:before{content:"\F26A"}.fa-internet-explorer:before{content:"\F26B"}.fa-television:before,.fa-tv:before{content:"\F26C"}.fa-contao:before{content:"\F26D"}.fa-500px:before{content:"\F26E"}.fa-amazon:before{content:"\F270"}.fa-calendar-plus-o:before{content:"\F271"}.fa-calendar-minus-o:before{content:"\F272"}.fa-calendar-times-o:before{content:"\F273"}.fa-calendar-check-o:before{content:"\F274"}.fa-industry:before{content:"\F275"}.fa-map-pin:before{content:"\F276"}.fa-map-signs:before{content:"\F277"}.fa-map-o:before{content:"\F278"}.fa-map:before{content:"\F279"}.fa-commenting:before{content:"\F27A"}.fa-commenting-o:before{content:"\F27B"}.fa-houzz:before{content:"\F27C"}.fa-vimeo:before{content:"\F27D"}.fa-black-tie:before{content:"\F27E"}.fa-fonticons:before{content:"\F280"}.fa-reddit-alien:before{content:"\F281"}.fa-edge:before{content:"\F282"}.fa-credit-card-alt:before{content:"\F283"}.fa-codiepie:before{content:"\F284"}.fa-modx:before{content:"\F285"}.fa-fort-awesome:before{content:"\F286"}.fa-usb:before{content:"\F287"}.fa-product-hunt:before{content:"\F288"}.fa-mixcloud:before{content:"\F289"}.fa-scribd:before{content:"\F28A"}.fa-pause-circle:before{content:"\F28B"}.fa-pause-circle-o:before{content:"\F28C"}.fa-stop-circle:before{content:"\F28D"}.fa-stop-circle-o:before{content:"\F28E"}.fa-shopping-bag:before{content:"\F290"}.fa-shopping-basket:before{content:"\F291"}.fa-hashtag:before{content:"\F292"}.fa-bluetooth:before{content:"\F293"}.fa-bluetooth-b:before{content:"\F294"}.fa-percent:before{content:"\F295"}.fa-gitlab:before{content:"\F296"}.fa-wpbeginner:before{content:"\F297"}.fa-wpforms:before{content:"\F298"}.fa-envira:before{content:"\F299"}.fa-universal-access:before{content:"\F29A"}.fa-wheelchair-alt:before{content:"\F29B"}.fa-question-circle-o:before{content:"\F29C"}.fa-blind:before{content:"\F29D"}.fa-audio-description:before{content:"\F29E"}.fa-volume-control-phone:before{content:"\F2A0"}.fa-braille:before{content:"\F2A1"}.fa-assistive-listening-systems:before{content:"\F2A2"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:"\F2A3"}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:"\F2A4"}.fa-glide:before{content:"\F2A5"}.fa-glide-g:before{content:"\F2A6"}.fa-sign-language:before,.fa-signing:before{content:"\F2A7"}.fa-low-vision:before{content:"\F2A8"}.fa-viadeo:before{content:"\F2A9"}.fa-viadeo-square:before{content:"\F2AA"}.fa-snapchat:before{content:"\F2AB"}.fa-snapchat-ghost:before{content:"\F2AC"}.fa-snapchat-square:before{content:"\F2AD"}.fa-pied-piper:before{content:"\F2AE"}.fa-first-order:before{content:"\F2B0"}.fa-yoast:before{content:"\F2B1"}.fa-themeisle:before{content:"\F2B2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\F2B3"}.fa-fa:before,.fa-font-awesome:before{content:"\F2B4"}.fa-handshake-o:before{content:"\F2B5"}.fa-envelope-open:before{content:"\F2B6"}.fa-envelope-open-o:before{content:"\F2B7"}.fa-linode:before{content:"\F2B8"}.fa-address-book:before{content:"\F2B9"}.fa-address-book-o:before{content:"\F2BA"}.fa-address-card:before,.fa-vcard:before{content:"\F2BB"}.fa-address-card-o:before,.fa-vcard-o:before{content:"\F2BC"}.fa-user-circle:before{content:"\F2BD"}.fa-user-circle-o:before{content:"\F2BE"}.fa-user-o:before{content:"\F2C0"}.fa-id-badge:before{content:"\F2C1"}.fa-drivers-license:before,.fa-id-card:before{content:"\F2C2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\F2C3"}.fa-quora:before{content:"\F2C4"}.fa-free-code-camp:before{content:"\F2C5"}.fa-telegram:before{content:"\F2C6"}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:"\F2C7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\F2C8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\F2C9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\F2CA"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\F2CB"}.fa-shower:before{content:"\F2CC"}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:"\F2CD"}.fa-podcast:before{content:"\F2CE"}.fa-window-maximize:before{content:"\F2D0"}.fa-window-minimize:before{content:"\F2D1"}.fa-window-restore:before{content:"\F2D2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\F2D3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\F2D4"}.fa-bandcamp:before{content:"\F2D5"}.fa-grav:before{content:"\F2D6"}.fa-etsy:before{content:"\F2D7"}.fa-imdb:before{content:"\F2D8"}.fa-ravelry:before{content:"\F2D9"}.fa-eercast:before{content:"\F2DA"}.fa-microchip:before{content:"\F2DB"}.fa-snowflake-o:before{content:"\F2DC"}.fa-superpowers:before{content:"\F2DD"}.fa-wpexplorer:before{content:"\F2DE"}.fa-meetup:before{content:"\F2E0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}html{font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei,\\5FAE\8F6F\96C5\9ED1,Arial,sans-serif}body,html{height:100%}.fl{float:left}.fr{float:right}.align_center{text-align:center}.align_left{text-align:left}.align_right{text-align:right}.ofh{overflow:hidden}.hide{display:none}.block{display:block}.relative{position:relative}.absolute{position:absolute}.m_auto{margin:auto}.width_100{width:100%}.height_100{height:100%}.nowrap{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.d_box{display:flex;box-sizing:border-box;flex:1;width:100%}.d_boxflex{flex:1;display:block}.body-warp{animation:fadeIn .5s ease}.left-side{position:fixed;top:0;left:0;bottom:0;width:220px;height:100%;overflow-y:auto;background-color:#424f63}.left-side .logo{margin:10px auto;text-align:center}.left-side .menu-box{background-color:#424f63}.left-side .menu-box .el-submenu__title,.left-side .menu-box .menu-list{height:45px;line-height:45px;color:#fff;background-color:#424f63}.left-side .menu-box .el-submenu__title .icon,.left-side .menu-box .menu-list .icon{width:16px;font-size:14px}.left-side .menu-box .el-submenu__title .text,.left-side .menu-box .menu-list .text{margin-left:10px}.left-side .menu-box .el-submenu__title.is-active,.left-side .menu-box .el-submenu__title:hover,.left-side .menu-box .menu-list.is-active,.left-side .menu-box .menu-list:hover{background-color:#353f4f!important;color:#65cea7}.panel{margin-bottom:20px;background-color:#fff;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel .panel-title{padding:0 15px;color:#535351;height:45px;line-height:45px;font-size:14px;font-weight:700;text-transform:uppercase;border-bottom:1px dotted rgba(0,0,0,.2)}.panel .panel-title .panel_title_select{display:inline-block}.panel .panel-title .panel_title_select .el-input__inner{height:28px}.panel .panel-body{padding:15px;overflow:hidden;font-weight:400}.panel .panel-body .bottom-toolbar{margin-top:15px;padding:15px 0}.footer{background:#fff;padding:15px;color:#7a7676;font-size:12px;position:static;bottom:0;width:100%;border-top:1px solid #eff0f4}.dropdown-menu{position:absolute;right:0;top:100%;width:200px;padding:5px;border-radius:5px;background:#65cea7}.dropdown-menu .dropdown-list{padding:0;line-height:normal}.dropdown-menu .dropdown-btn{display:block;color:#fff;font-size:13px;padding:7px 10px;text-align:left;border-radius:3px;cursor:pointer}.dropdown-menu .dropdown-btn:hover{background:#2a323f;color:#fff}.dropdown-menu .dropdown-btn .icon{margin-right:5px} \ No newline at end of file diff --git a/dist/static/css/app.775b7fd9ca97ed4dc588a8de48e5e432.css.map b/dist/static/css/app.775b7fd9ca97ed4dc588a8de48e5e432.css.map deleted file mode 100644 index 8ceffad7b65d7a578fb73f24b6f446d98d2380f0..0000000000000000000000000000000000000000 --- a/dist/static/css/app.775b7fd9ca97ed4dc588a8de48e5e432.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///./src/App.vue","webpack:///./~/normalize.css/normalize.css","webpack:///./~/element-ui/lib/theme-chalk/index.css","webpack:///./~/nprogress/nprogress.css","webpack:///./src/views/Login.vue","webpack:///./src/views/404.vue","webpack:///./src/views/Home.vue","webpack:///./src/components/Screenfull/index.vue","webpack:///./src/views/charts/echarts.vue","webpack:///./src/views/3d/threejs.vue","webpack:///./src/views/3d/babylonjs.vue","webpack:///./src/components/UploadExcel/index.vue","webpack:///./~/font-awesome/css/font-awesome.min.css","webpack:///./src/assets/scss/D:/gitee/vue-admin/src/assets/scss/components/_base.scss","webpack:///./src/assets/scss/D:/gitee/vue-admin/src/assets/scss/components/_layout.scss"],"names":[],"mappings":"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AAC,uBAAuB,iBAAiB,QAAQ,CAAC,+BCCh/lO,WACE,mBAAqB,CAGvB,gBACE,gBAEA,eACA,aACA,MACA,OAEA,WACA,UAAY,CAId,gBACE,cACA,kBACA,QACA,YACA,YACA,sCACA,UAEA,gDACI,4CACI,uCAA6C,CAIvD,oBACE,cACA,eACA,aACA,SACA,UAAY,CAGd,yBACE,WACA,YACA,sBAEA,6BACA,sBACA,uBACA,kBAEA,wDACQ,+CAAmD,CAG7D,yBACE,gBACA,iBAAmB,CAGrB,sFAEE,iBAAmB,CAGrB,qCACE,GAAO,8BAAgC,CACvC,GAAO,+BAAkC,CAAE,CAE7C,6BACE,GAAO,sBAAwB,CAC/B,GAAO,uBAA0B,CAAE,CCtErC,kCAEE,0BACA,kBACA,uBACA,4BACA,kBACA,YACA,uBACA,gBACA,yBACA,2BAA6B,CAE/B,yCACI,mBACA,kBACA,aAAe,CAEnB,4CACI,eAAyB,CCnB7B,iCACE,eACA,kBACA,aAAe,CCHjB,4BACE,kBACA,MACA,SACA,WACA,WAAa,CAEf,oCACI,YACA,iBACA,gBACA,2BACA,+BAAiC,CAErC,8CACM,iBACA,oBACA,WAAa,CAEnB,8DACQ,eACA,UAAa,CAErB,kEACU,WACA,YACA,mBACA,wBACA,WAAa,CAEvB,0CACM,YACA,eACA,kBACA,mBACA,iCACA,qBACA,wBAA0B,CAEhC,8CACQ,WACA,WACA,0BAA4B,CAEpC,+CACQ,UAAY,CAEpB,gDACM,WAAa,CAEnB,yDACM,UAAY,CAElB,2CACM,eACA,WACA,YACA,iBACA,cAAgB,CAEtB,gDACM,sBACA,YACA,SAAW,CAEjB,kCACI,aACA,kBACA,MACA,SACA,eAAiB,CAErB,wCACM,eACA,YACA,WAAa,CAEnB,iDACQ,WAAa,CAErB,mDACQ,UAAY,CAEpB,yDACU,iBAAmB,CAE7B,4DACU,kBACA,MACA,UACA,cACA,YACA,YAAc,CAExB,kDACM,cACA,UAAY,CAElB,iDACM,eACA,WAAa,CAEnB,gDACM,cAAgB,CAEtB,0DACQ,mCACA,+BACA,aAAe,CAEvB,6CACM,YACA,gBAAkB,CA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CE,UAAW,CAGb,YACE,WAAY,CAGd,QACE,mBACA,gBACA,sBAAuB,CAGzB,OACE,aACA,sBACA,OACA,UAAW,CAGb,WACE,OACA,aAAc,CC3EhB,WACE,yBAA0B,CAG5B,WACE,eACA,MACA,OACA,SACA,YACA,YACA,gBACA,wBAAyB,CAyB1B,iBAvBG,iBACA,iBAAkB,CACnB,qBAEC,wBAAyB,CAkB1B,wEAhBG,YACA,iBACA,WACA,wBAAyB,CAY1B,oFAVG,WACA,cAAe,CAChB,oFAEC,gBAAiB,CAClB,gLAEC,mCACA,aAAc,CAMtB,OACE,mBACA,sBACA,kBACA,oCAAwC,CA0BzC,oBAxBG,eACA,cACA,YACA,iBACA,eACA,gBACA,yBACA,uCAA4C,CAO7C,wCALG,oBAAqB,CAItB,yDAFG,WAAY,CACb,mBAIH,aACA,gBACA,eAAmB,CAKpB,mCAHG,gBACA,cAAe,CAKrB,QACE,gBACA,aACA,cACA,eACA,gBACA,SACA,WACA,4BAA6B,CAG/B,eACE,kBACA,QACA,SACA,YACA,YACA,kBACA,kBAAmB,CAqBpB,8BAnBG,UACA,kBAAmB,CACpB,6BAEC,cACA,WACA,eACA,iBACA,gBACA,kBACA,cAAe,CAQhB,mCANG,mBACA,UAAW,CACZ,mCAEC,gBAAiB","file":"static/css/app.775b7fd9ca97ed4dc588a8de48e5e432.css","sourcesContent":["\nbody {\n margin: 0px;\n padding: 0px;\n /*background: url(assets/bg1.jpg) center !important;\n background-size: cover;*/\n font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, SimSun, sans-serif;\n font-size: 14px;\n -webkit-font-smoothing: antialiased;\n}\n#app {\n position: absolute;\n top: 0px;\n bottom: 0px;\n width: 100%;\n}\n.el-submenu [class^=fa] {\n vertical-align: baseline;\n margin-right: 10px;\n}\n.el-menu-item [class^=fa] {\n vertical-align: baseline;\n margin-right: 10px;\n}\n.toolbar {\n background: #f2f2f2;\n padding: 10px;\n margin: 10px 0px;\n}\n.toolbar .el-form-item {\n margin-bottom: 10px;\n}\n.fade-enter-active,\n.fade-leave-active {\n transition: all .2s ease;\n}\n.fade-enter,\n.fade-leave-active {\n opacity: 0;\n}\n.fork-me-github {\n position: absolute;\n top: 0;\n right: 0;\n border: 0;\n}\n.alipay-adv {\n position: fixed;\n right: 20px;\n bottom: 0;\n width: 300px;\n height: auto;\n}\n.alipay-adv img {\n width: 100%;\n}\n.close-adv {\n position: absolute;\n right: 8px;\n top: -15px;\n background: #fff;\n padding: 0 5px;\n font-size: 12px;\n cursor: pointer;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/App.vue","/*! normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */\n\n/**\n * 1. Change the default font family in all browsers (opinionated).\n * 2. Correct the line height in all browsers.\n * 3. Prevent adjustments of font size after orientation changes in\n * IE on Windows Phone and in iOS.\n */\n\n/* Document\n ========================================================================== */\n\nhtml {\n font-family: sans-serif; /* 1 */\n line-height: 1.15; /* 2 */\n -ms-text-size-adjust: 100%; /* 3 */\n -webkit-text-size-adjust: 100%; /* 3 */\n}\n\n/* Sections\n ========================================================================== */\n\n/**\n * Remove the margin in all browsers (opinionated).\n */\n\nbody {\n margin: 0;\n}\n\n/**\n * Add the correct display in IE 9-.\n */\n\narticle,\naside,\nfooter,\nheader,\nnav,\nsection {\n display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * Add the correct display in IE 9-.\n * 1. Add the correct display in IE.\n */\n\nfigcaption,\nfigure,\nmain { /* 1 */\n display: block;\n}\n\n/**\n * Add the correct margin in IE 8.\n */\n\nfigure {\n margin: 1em 40px;\n}\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * 1. Remove the gray background on active links in IE 10.\n * 2. Remove gaps in links underline in iOS 8+ and Safari 8+.\n */\n\na {\n background-color: transparent; /* 1 */\n -webkit-text-decoration-skip: objects; /* 2 */\n}\n\n/**\n * Remove the outline on focused links when they are also active or hovered\n * in all browsers (opinionated).\n */\n\na:active,\na:hover {\n outline-width: 0;\n}\n\n/**\n * 1. Remove the bottom border in Firefox 39-.\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Prevent the duplicate application of `bolder` by the next rule in Safari 6.\n */\n\nb,\nstrong {\n font-weight: inherit;\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font style in Android 4.3-.\n */\n\ndfn {\n font-style: italic;\n}\n\n/**\n * Add the correct background and color in IE 9-.\n */\n\nmark {\n background-color: #ff0;\n color: #000;\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Add the correct display in IE 9-.\n */\n\naudio,\nvideo {\n display: inline-block;\n}\n\n/**\n * Add the correct display in iOS 4-7.\n */\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n/**\n * Remove the border on images inside links in IE 10-.\n */\n\nimg {\n border-style: none;\n}\n\n/**\n * Hide the overflow in IE.\n */\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers (opinionated).\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: sans-serif; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput { /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect { /* 1 */\n text-transform: none;\n}\n\n/**\n * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n * controls in Android 4.\n * 2. Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\nhtml [type=\"button\"], /* 1 */\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; /* 2 */\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Change the border, margin, and padding in all browsers (opinionated).\n */\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\n\nlegend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n/**\n * 1. Add the correct display in IE 9-.\n * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n display: inline-block; /* 1 */\n vertical-align: baseline; /* 2 */\n}\n\n/**\n * Remove the default vertical scrollbar in IE.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10-.\n * 2. Remove the padding in IE 10-.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding and cancel buttons in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/* Interactive\n ========================================================================== */\n\n/*\n * Add the correct display in IE 9-.\n * 1. Add the correct display in Edge, IE, and Firefox.\n */\n\ndetails, /* 1 */\nmenu {\n display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n display: list-item;\n}\n\n/* Scripting\n ========================================================================== */\n\n/**\n * Add the correct display in IE 9-.\n */\n\ncanvas {\n display: inline-block;\n}\n\n/**\n * Add the correct display in IE.\n */\n\ntemplate {\n display: none;\n}\n\n/* Hidden\n ========================================================================== */\n\n/**\n * Add the correct display in IE 10-.\n */\n\n[hidden] {\n display: none;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./~/normalize.css/normalize.css","@charset \"UTF-8\";.el-pagination--small .arrow.disabled,.el-table .hidden-columns,.el-table td.is-hidden>*,.el-table th.is-hidden>*,.el-table--hidden{visibility:hidden}.el-input__suffix,.el-tree.is-dragging .el-tree-node__content *{pointer-events:none}.el-dropdown .el-dropdown-selfdefine:focus:active,.el-dropdown .el-dropdown-selfdefine:focus:not(.focusing),.el-message__closeBtn:focus,.el-message__content:focus,.el-popover:focus,.el-popover:focus:active,.el-popover__reference:focus:hover,.el-popover__reference:focus:not(.focusing),.el-rate:active,.el-rate:focus,.el-tooltip:focus:hover,.el-tooltip:focus:not(.focusing),.el-upload-list__item.is-success:active,.el-upload-list__item.is-success:not(.focusing):focus{outline-width:0}@font-face{font-family:element-icons;src:url(fonts/element-icons.woff) format(\"woff\"),url(fonts/element-icons.ttf) format(\"truetype\");font-weight:400;font-display:\"auto\";font-style:normal}[class*=\" el-icon-\"],[class^=el-icon-]{font-family:element-icons!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;vertical-align:baseline;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-icon-ice-cream-round:before{content:\"\\e6a0\"}.el-icon-ice-cream-square:before{content:\"\\e6a3\"}.el-icon-lollipop:before{content:\"\\e6a4\"}.el-icon-potato-strips:before{content:\"\\e6a5\"}.el-icon-milk-tea:before{content:\"\\e6a6\"}.el-icon-ice-drink:before{content:\"\\e6a7\"}.el-icon-ice-tea:before{content:\"\\e6a9\"}.el-icon-coffee:before{content:\"\\e6aa\"}.el-icon-orange:before{content:\"\\e6ab\"}.el-icon-pear:before{content:\"\\e6ac\"}.el-icon-apple:before{content:\"\\e6ad\"}.el-icon-cherry:before{content:\"\\e6ae\"}.el-icon-watermelon:before{content:\"\\e6af\"}.el-icon-grape:before{content:\"\\e6b0\"}.el-icon-refrigerator:before{content:\"\\e6b1\"}.el-icon-goblet-square-full:before{content:\"\\e6b2\"}.el-icon-goblet-square:before{content:\"\\e6b3\"}.el-icon-goblet-full:before{content:\"\\e6b4\"}.el-icon-goblet:before{content:\"\\e6b5\"}.el-icon-cold-drink:before{content:\"\\e6b6\"}.el-icon-coffee-cup:before{content:\"\\e6b8\"}.el-icon-water-cup:before{content:\"\\e6b9\"}.el-icon-hot-water:before{content:\"\\e6ba\"}.el-icon-ice-cream:before{content:\"\\e6bb\"}.el-icon-dessert:before{content:\"\\e6bc\"}.el-icon-sugar:before{content:\"\\e6bd\"}.el-icon-tableware:before{content:\"\\e6be\"}.el-icon-burger:before{content:\"\\e6bf\"}.el-icon-knife-fork:before{content:\"\\e6c1\"}.el-icon-fork-spoon:before{content:\"\\e6c2\"}.el-icon-chicken:before{content:\"\\e6c3\"}.el-icon-food:before{content:\"\\e6c4\"}.el-icon-dish-1:before{content:\"\\e6c5\"}.el-icon-dish:before{content:\"\\e6c6\"}.el-icon-moon-night:before{content:\"\\e6ee\"}.el-icon-moon:before{content:\"\\e6f0\"}.el-icon-cloudy-and-sunny:before{content:\"\\e6f1\"}.el-icon-partly-cloudy:before{content:\"\\e6f2\"}.el-icon-cloudy:before{content:\"\\e6f3\"}.el-icon-sunny:before{content:\"\\e6f6\"}.el-icon-sunset:before{content:\"\\e6f7\"}.el-icon-sunrise-1:before{content:\"\\e6f8\"}.el-icon-sunrise:before{content:\"\\e6f9\"}.el-icon-heavy-rain:before{content:\"\\e6fa\"}.el-icon-lightning:before{content:\"\\e6fb\"}.el-icon-light-rain:before{content:\"\\e6fc\"}.el-icon-wind-power:before{content:\"\\e6fd\"}.el-icon-baseball:before{content:\"\\e712\"}.el-icon-soccer:before{content:\"\\e713\"}.el-icon-football:before{content:\"\\e715\"}.el-icon-basketball:before{content:\"\\e716\"}.el-icon-ship:before{content:\"\\e73f\"}.el-icon-truck:before{content:\"\\e740\"}.el-icon-bicycle:before{content:\"\\e741\"}.el-icon-mobile-phone:before{content:\"\\e6d3\"}.el-icon-service:before{content:\"\\e6d4\"}.el-icon-key:before{content:\"\\e6e2\"}.el-icon-unlock:before{content:\"\\e6e4\"}.el-icon-lock:before{content:\"\\e6e5\"}.el-icon-watch:before{content:\"\\e6fe\"}.el-icon-watch-1:before{content:\"\\e6ff\"}.el-icon-timer:before{content:\"\\e702\"}.el-icon-alarm-clock:before{content:\"\\e703\"}.el-icon-map-location:before{content:\"\\e704\"}.el-icon-delete-location:before{content:\"\\e705\"}.el-icon-add-location:before{content:\"\\e706\"}.el-icon-location-information:before{content:\"\\e707\"}.el-icon-location-outline:before{content:\"\\e708\"}.el-icon-location:before{content:\"\\e79e\"}.el-icon-place:before{content:\"\\e709\"}.el-icon-discover:before{content:\"\\e70a\"}.el-icon-first-aid-kit:before{content:\"\\e70b\"}.el-icon-trophy-1:before{content:\"\\e70c\"}.el-icon-trophy:before{content:\"\\e70d\"}.el-icon-medal:before{content:\"\\e70e\"}.el-icon-medal-1:before{content:\"\\e70f\"}.el-icon-stopwatch:before{content:\"\\e710\"}.el-icon-mic:before{content:\"\\e711\"}.el-icon-copy-document:before{content:\"\\e718\"}.el-icon-full-screen:before{content:\"\\e719\"}.el-icon-switch-button:before{content:\"\\e71b\"}.el-icon-aim:before{content:\"\\e71c\"}.el-icon-crop:before{content:\"\\e71d\"}.el-icon-odometer:before{content:\"\\e71e\"}.el-icon-time:before{content:\"\\e71f\"}.el-icon-bangzhu:before{content:\"\\e724\"}.el-icon-close-notification:before{content:\"\\e726\"}.el-icon-microphone:before{content:\"\\e727\"}.el-icon-turn-off-microphone:before{content:\"\\e728\"}.el-icon-position:before{content:\"\\e729\"}.el-icon-postcard:before{content:\"\\e72a\"}.el-icon-message:before{content:\"\\e72b\"}.el-icon-chat-line-square:before{content:\"\\e72d\"}.el-icon-chat-dot-square:before{content:\"\\e72e\"}.el-icon-chat-dot-round:before{content:\"\\e72f\"}.el-icon-chat-square:before{content:\"\\e730\"}.el-icon-chat-line-round:before{content:\"\\e731\"}.el-icon-chat-round:before{content:\"\\e732\"}.el-icon-set-up:before{content:\"\\e733\"}.el-icon-turn-off:before{content:\"\\e734\"}.el-icon-open:before{content:\"\\e735\"}.el-icon-connection:before{content:\"\\e736\"}.el-icon-link:before{content:\"\\e737\"}.el-icon-cpu:before{content:\"\\e738\"}.el-icon-thumb:before{content:\"\\e739\"}.el-icon-female:before{content:\"\\e73a\"}.el-icon-male:before{content:\"\\e73b\"}.el-icon-guide:before{content:\"\\e73c\"}.el-icon-news:before{content:\"\\e73e\"}.el-icon-price-tag:before{content:\"\\e744\"}.el-icon-discount:before{content:\"\\e745\"}.el-icon-wallet:before{content:\"\\e747\"}.el-icon-coin:before{content:\"\\e748\"}.el-icon-money:before{content:\"\\e749\"}.el-icon-bank-card:before{content:\"\\e74a\"}.el-icon-box:before{content:\"\\e74b\"}.el-icon-present:before{content:\"\\e74c\"}.el-icon-sell:before{content:\"\\e6d5\"}.el-icon-sold-out:before{content:\"\\e6d6\"}.el-icon-shopping-bag-2:before{content:\"\\e74d\"}.el-icon-shopping-bag-1:before{content:\"\\e74e\"}.el-icon-shopping-cart-2:before{content:\"\\e74f\"}.el-icon-shopping-cart-1:before{content:\"\\e750\"}.el-icon-shopping-cart-full:before{content:\"\\e751\"}.el-icon-smoking:before{content:\"\\e752\"}.el-icon-no-smoking:before{content:\"\\e753\"}.el-icon-house:before{content:\"\\e754\"}.el-icon-table-lamp:before{content:\"\\e755\"}.el-icon-school:before{content:\"\\e756\"}.el-icon-office-building:before{content:\"\\e757\"}.el-icon-toilet-paper:before{content:\"\\e758\"}.el-icon-notebook-2:before{content:\"\\e759\"}.el-icon-notebook-1:before{content:\"\\e75a\"}.el-icon-files:before{content:\"\\e75b\"}.el-icon-collection:before{content:\"\\e75c\"}.el-icon-receiving:before{content:\"\\e75d\"}.el-icon-suitcase-1:before{content:\"\\e760\"}.el-icon-suitcase:before{content:\"\\e761\"}.el-icon-film:before{content:\"\\e763\"}.el-icon-collection-tag:before{content:\"\\e765\"}.el-icon-data-analysis:before{content:\"\\e766\"}.el-icon-pie-chart:before{content:\"\\e767\"}.el-icon-data-board:before{content:\"\\e768\"}.el-icon-data-line:before{content:\"\\e76d\"}.el-icon-reading:before{content:\"\\e769\"}.el-icon-magic-stick:before{content:\"\\e76a\"}.el-icon-coordinate:before{content:\"\\e76b\"}.el-icon-mouse:before{content:\"\\e76c\"}.el-icon-brush:before{content:\"\\e76e\"}.el-icon-headset:before{content:\"\\e76f\"}.el-icon-umbrella:before{content:\"\\e770\"}.el-icon-scissors:before{content:\"\\e771\"}.el-icon-mobile:before{content:\"\\e773\"}.el-icon-attract:before{content:\"\\e774\"}.el-icon-monitor:before{content:\"\\e775\"}.el-icon-search:before{content:\"\\e778\"}.el-icon-takeaway-box:before{content:\"\\e77a\"}.el-icon-paperclip:before{content:\"\\e77d\"}.el-icon-printer:before{content:\"\\e77e\"}.el-icon-document-add:before{content:\"\\e782\"}.el-icon-document:before{content:\"\\e785\"}.el-icon-document-checked:before{content:\"\\e786\"}.el-icon-document-copy:before{content:\"\\e787\"}.el-icon-document-delete:before{content:\"\\e788\"}.el-icon-document-remove:before{content:\"\\e789\"}.el-icon-tickets:before{content:\"\\e78b\"}.el-icon-folder-checked:before{content:\"\\e77f\"}.el-icon-folder-delete:before{content:\"\\e780\"}.el-icon-folder-remove:before{content:\"\\e781\"}.el-icon-folder-add:before{content:\"\\e783\"}.el-icon-folder-opened:before{content:\"\\e784\"}.el-icon-folder:before{content:\"\\e78a\"}.el-icon-edit-outline:before{content:\"\\e764\"}.el-icon-edit:before{content:\"\\e78c\"}.el-icon-date:before{content:\"\\e78e\"}.el-icon-c-scale-to-original:before{content:\"\\e7c6\"}.el-icon-view:before{content:\"\\e6ce\"}.el-icon-loading:before{content:\"\\e6cf\"}.el-icon-rank:before{content:\"\\e6d1\"}.el-icon-sort-down:before{content:\"\\e7c4\"}.el-icon-sort-up:before{content:\"\\e7c5\"}.el-icon-sort:before{content:\"\\e6d2\"}.el-icon-finished:before{content:\"\\e6cd\"}.el-icon-refresh-left:before{content:\"\\e6c7\"}.el-icon-refresh-right:before{content:\"\\e6c8\"}.el-icon-refresh:before{content:\"\\e6d0\"}.el-icon-video-play:before{content:\"\\e7c0\"}.el-icon-video-pause:before{content:\"\\e7c1\"}.el-icon-d-arrow-right:before{content:\"\\e6dc\"}.el-icon-d-arrow-left:before{content:\"\\e6dd\"}.el-icon-arrow-up:before{content:\"\\e6e1\"}.el-icon-arrow-down:before{content:\"\\e6df\"}.el-icon-arrow-right:before{content:\"\\e6e0\"}.el-icon-arrow-left:before{content:\"\\e6de\"}.el-icon-top-right:before{content:\"\\e6e7\"}.el-icon-top-left:before{content:\"\\e6e8\"}.el-icon-top:before{content:\"\\e6e6\"}.el-icon-bottom:before{content:\"\\e6eb\"}.el-icon-right:before{content:\"\\e6e9\"}.el-icon-back:before{content:\"\\e6ea\"}.el-icon-bottom-right:before{content:\"\\e6ec\"}.el-icon-bottom-left:before{content:\"\\e6ed\"}.el-icon-caret-top:before{content:\"\\e78f\"}.el-icon-caret-bottom:before{content:\"\\e790\"}.el-icon-caret-right:before{content:\"\\e791\"}.el-icon-caret-left:before{content:\"\\e792\"}.el-icon-d-caret:before{content:\"\\e79a\"}.el-icon-share:before{content:\"\\e793\"}.el-icon-menu:before{content:\"\\e798\"}.el-icon-s-grid:before{content:\"\\e7a6\"}.el-icon-s-check:before{content:\"\\e7a7\"}.el-icon-s-data:before{content:\"\\e7a8\"}.el-icon-s-opportunity:before{content:\"\\e7aa\"}.el-icon-s-custom:before{content:\"\\e7ab\"}.el-icon-s-claim:before{content:\"\\e7ad\"}.el-icon-s-finance:before{content:\"\\e7ae\"}.el-icon-s-comment:before{content:\"\\e7af\"}.el-icon-s-flag:before{content:\"\\e7b0\"}.el-icon-s-marketing:before{content:\"\\e7b1\"}.el-icon-s-shop:before{content:\"\\e7b4\"}.el-icon-s-open:before{content:\"\\e7b5\"}.el-icon-s-management:before{content:\"\\e7b6\"}.el-icon-s-ticket:before{content:\"\\e7b7\"}.el-icon-s-release:before{content:\"\\e7b8\"}.el-icon-s-home:before{content:\"\\e7b9\"}.el-icon-s-promotion:before{content:\"\\e7ba\"}.el-icon-s-operation:before{content:\"\\e7bb\"}.el-icon-s-unfold:before{content:\"\\e7bc\"}.el-icon-s-fold:before{content:\"\\e7a9\"}.el-icon-s-platform:before{content:\"\\e7bd\"}.el-icon-s-order:before{content:\"\\e7be\"}.el-icon-s-cooperation:before{content:\"\\e7bf\"}.el-icon-bell:before{content:\"\\e725\"}.el-icon-message-solid:before{content:\"\\e799\"}.el-icon-video-camera:before{content:\"\\e772\"}.el-icon-video-camera-solid:before{content:\"\\e796\"}.el-icon-camera:before{content:\"\\e779\"}.el-icon-camera-solid:before{content:\"\\e79b\"}.el-icon-download:before{content:\"\\e77c\"}.el-icon-upload2:before{content:\"\\e77b\"}.el-icon-upload:before{content:\"\\e7c3\"}.el-icon-picture-outline-round:before{content:\"\\e75f\"}.el-icon-picture-outline:before{content:\"\\e75e\"}.el-icon-picture:before{content:\"\\e79f\"}.el-icon-close:before{content:\"\\e6db\"}.el-icon-check:before{content:\"\\e6da\"}.el-icon-plus:before{content:\"\\e6d9\"}.el-icon-minus:before{content:\"\\e6d8\"}.el-icon-help:before{content:\"\\e73d\"}.el-icon-s-help:before{content:\"\\e7b3\"}.el-icon-circle-close:before{content:\"\\e78d\"}.el-icon-circle-check:before{content:\"\\e720\"}.el-icon-circle-plus-outline:before{content:\"\\e723\"}.el-icon-remove-outline:before{content:\"\\e722\"}.el-icon-zoom-out:before{content:\"\\e776\"}.el-icon-zoom-in:before{content:\"\\e777\"}.el-icon-error:before{content:\"\\e79d\"}.el-icon-success:before{content:\"\\e79c\"}.el-icon-circle-plus:before{content:\"\\e7a0\"}.el-icon-remove:before{content:\"\\e7a2\"}.el-icon-info:before{content:\"\\e7a1\"}.el-icon-question:before{content:\"\\e7a4\"}.el-icon-warning-outline:before{content:\"\\e6c9\"}.el-icon-warning:before{content:\"\\e7a3\"}.el-icon-goods:before{content:\"\\e7c2\"}.el-icon-s-goods:before{content:\"\\e7b2\"}.el-icon-star-off:before{content:\"\\e717\"}.el-icon-star-on:before{content:\"\\e797\"}.el-icon-more-outline:before{content:\"\\e6cc\"}.el-icon-more:before{content:\"\\e794\"}.el-icon-phone-outline:before{content:\"\\e6cb\"}.el-icon-phone:before{content:\"\\e795\"}.el-icon-user:before{content:\"\\e6e3\"}.el-icon-user-solid:before{content:\"\\e7a5\"}.el-icon-setting:before{content:\"\\e6ca\"}.el-icon-s-tools:before{content:\"\\e7ac\"}.el-icon-delete:before{content:\"\\e6d7\"}.el-icon-delete-solid:before{content:\"\\e7c9\"}.el-icon-eleme:before{content:\"\\e7c7\"}.el-icon-platform-eleme:before{content:\"\\e7ca\"}.el-icon-loading{-webkit-animation:rotating 2s linear infinite;animation:rotating 2s linear infinite}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@-webkit-keyframes rotating{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}100%{-webkit-transform:rotateZ(360deg);transform:rotateZ(360deg)}}@keyframes rotating{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}100%{-webkit-transform:rotateZ(360deg);transform:rotateZ(360deg)}}.el-pagination{white-space:nowrap;padding:2px 5px;color:#303133;font-weight:700}.el-pagination::after,.el-pagination::before{display:table;content:\"\"}.el-pagination::after{clear:both}.el-pagination button,.el-pagination span:not([class*=suffix]){display:inline-block;font-size:13px;min-width:35.5px;height:28px;line-height:28px;vertical-align:top;-webkit-box-sizing:border-box;box-sizing:border-box}.el-pagination .el-input__inner{text-align:center;-moz-appearance:textfield;line-height:normal}.el-pagination .el-input__suffix{right:0;-webkit-transform:scale(.8);transform:scale(.8)}.el-pagination .el-select .el-input{width:100px;margin:0 5px}.el-pagination .el-select .el-input .el-input__inner{padding-right:25px;border-radius:3px}.el-pagination button{border:none;padding:0 6px;background:0 0}.el-pagination button:focus{outline:0}.el-pagination button:hover{color:#409EFF}.el-pagination button:disabled{color:#C0C4CC;background-color:#FFF;cursor:not-allowed}.el-pagination .btn-next,.el-pagination .btn-prev{background:center center no-repeat #FFF;background-size:16px;cursor:pointer;margin:0;color:#303133}.el-pagination .btn-next .el-icon,.el-pagination .btn-prev .el-icon{display:block;font-size:12px;font-weight:700}.el-pagination .btn-prev{padding-right:12px}.el-pagination .btn-next{padding-left:12px}.el-pagination .el-pager li.disabled{color:#C0C4CC;cursor:not-allowed}.el-pager li,.el-pager li.btn-quicknext:hover,.el-pager li.btn-quickprev:hover{cursor:pointer}.el-pagination--small .btn-next,.el-pagination--small .btn-prev,.el-pagination--small .el-pager li,.el-pagination--small .el-pager li.btn-quicknext,.el-pagination--small .el-pager li.btn-quickprev,.el-pagination--small .el-pager li:last-child{border-color:transparent;font-size:12px;line-height:22px;height:22px;min-width:22px}.el-pagination--small .more::before,.el-pagination--small li.more::before{line-height:24px}.el-pagination--small button,.el-pagination--small span:not([class*=suffix]){height:22px;line-height:22px}.el-pagination--small .el-pagination__editor,.el-pagination--small .el-pagination__editor.el-input .el-input__inner{height:22px}.el-pagination__sizes{margin:0 10px 0 0;font-weight:400;color:#606266}.el-pagination__sizes .el-input .el-input__inner{font-size:13px;padding-left:8px}.el-pagination__sizes .el-input .el-input__inner:hover{border-color:#409EFF}.el-pagination__total{margin-right:10px;font-weight:400;color:#606266}.el-pagination__jump{margin-left:24px;font-weight:400;color:#606266}.el-pagination__jump .el-input__inner{padding:0 3px}.el-pagination__rightwrapper{float:right}.el-pagination__editor{line-height:18px;padding:0 2px;height:28px;text-align:center;margin:0 2px;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:3px}.el-pager,.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev{padding:0}.el-pagination__editor.el-input{width:50px}.el-pagination__editor.el-input .el-input__inner{height:28px}.el-pagination__editor .el-input__inner::-webkit-inner-spin-button,.el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev,.el-pagination.is-background .el-pager li{margin:0 5px;background-color:#f4f4f5;color:#606266;min-width:30px;border-radius:2px}.el-pagination.is-background .btn-next.disabled,.el-pagination.is-background .btn-next:disabled,.el-pagination.is-background .btn-prev.disabled,.el-pagination.is-background .btn-prev:disabled,.el-pagination.is-background .el-pager li.disabled{color:#C0C4CC}.el-pagination.is-background .el-pager li:not(.disabled):hover{color:#409EFF}.el-pagination.is-background .el-pager li:not(.disabled).active{background-color:#409EFF;color:#FFF}.el-dialog,.el-pager li{background:#FFF;-webkit-box-sizing:border-box}.el-pagination.is-background.el-pagination--small .btn-next,.el-pagination.is-background.el-pagination--small .btn-prev,.el-pagination.is-background.el-pagination--small .el-pager li{margin:0 3px;min-width:22px}.el-pager,.el-pager li{vertical-align:top;margin:0;display:inline-block}.el-pager{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;list-style:none;font-size:0}.el-date-table,.el-table th{-webkit-user-select:none;-moz-user-select:none}.el-pager .more::before{line-height:30px}.el-pager li{padding:0 4px;font-size:13px;min-width:35.5px;height:28px;line-height:28px;box-sizing:border-box;text-align:center}.el-menu--collapse .el-menu .el-submenu,.el-menu--popup{min-width:200px}.el-pager li.btn-quicknext,.el-pager li.btn-quickprev{line-height:28px;color:#303133}.el-pager li.btn-quicknext.disabled,.el-pager li.btn-quickprev.disabled{color:#C0C4CC}.el-pager li.active+li{border-left:0}.el-pager li:hover{color:#409EFF}.el-pager li.active{color:#409EFF;cursor:default}@-webkit-keyframes v-modal-in{0%{opacity:0}}@-webkit-keyframes v-modal-out{100%{opacity:0}}.el-dialog{position:relative;margin:0 auto 50px;border-radius:2px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.3);box-shadow:0 1px 3px rgba(0,0,0,.3);box-sizing:border-box;width:50%}.el-dialog.is-fullscreen{width:100%;margin-top:0;margin-bottom:0;height:100%;overflow:auto}.el-dialog__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;margin:0}.el-dialog__header{padding:20px 20px 10px}.el-dialog__headerbtn{position:absolute;top:20px;right:20px;padding:0;background:0 0;border:none;outline:0;cursor:pointer;font-size:16px}.el-dialog__headerbtn .el-dialog__close{color:#909399}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:#409EFF}.el-dialog__title{line-height:24px;font-size:18px;color:#303133}.el-dialog__body{padding:30px 20px;color:#606266;font-size:14px;word-break:break-all}.el-dialog__footer{padding:10px 20px 20px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial;padding:25px 25px 30px}.el-dialog--center .el-dialog__footer{text-align:inherit}.dialog-fade-enter-active{-webkit-animation:dialog-fade-in .3s;animation:dialog-fade-in .3s}.dialog-fade-leave-active{-webkit-animation:dialog-fade-out .3s;animation:dialog-fade-out .3s}@-webkit-keyframes dialog-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes dialog-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@-webkit-keyframes dialog-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes dialog-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}.el-autocomplete{position:relative;display:inline-block}.el-autocomplete-suggestion{margin:5px 0;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:4px;border:1px solid #E4E7ED;-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#FFF}.el-dropdown-menu,.el-menu--collapse .el-submenu .el-menu{z-index:10;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-autocomplete-suggestion__wrap{max-height:280px;padding:10px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-autocomplete-suggestion__list{margin:0;padding:0}.el-autocomplete-suggestion li{padding:0 20px;margin:0;line-height:34px;cursor:pointer;color:#606266;font-size:14px;list-style:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-autocomplete-suggestion li.highlighted,.el-autocomplete-suggestion li:hover{background-color:#F5F7FA}.el-autocomplete-suggestion li.divider{margin-top:6px;border-top:1px solid #000}.el-autocomplete-suggestion li.divider:last-child{margin-bottom:-6px}.el-autocomplete-suggestion.is-loading li{text-align:center;height:100px;line-height:100px;font-size:20px;color:#999}.el-autocomplete-suggestion.is-loading li::after{display:inline-block;content:\"\";height:100%;vertical-align:middle}.el-autocomplete-suggestion.is-loading li:hover{background-color:#FFF}.el-autocomplete-suggestion.is-loading .el-icon-loading{vertical-align:middle}.el-dropdown{display:inline-block;position:relative;color:#606266;font-size:14px}.el-dropdown .el-button-group{display:block}.el-dropdown .el-button-group .el-button{float:none}.el-dropdown .el-dropdown__caret-button{padding-left:5px;padding-right:5px;position:relative;border-left:none}.el-dropdown .el-dropdown__caret-button::before{content:'';position:absolute;display:block;width:1px;top:5px;bottom:5px;left:0;background:rgba(255,255,255,.5)}.el-dropdown .el-dropdown__caret-button.el-button--default::before{background:rgba(220,223,230,.5)}.el-dropdown .el-dropdown__caret-button:hover::before{top:0;bottom:0}.el-dropdown .el-dropdown__caret-button .el-dropdown__icon{padding-left:0}.el-dropdown__icon{font-size:12px;margin:0 3px}.el-dropdown-menu{position:absolute;top:0;left:0;padding:10px 0;margin:5px 0;background-color:#FFF;border:1px solid #EBEEF5;border-radius:4px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-dropdown-menu__item{list-style:none;line-height:36px;padding:0 20px;margin:0;font-size:14px;color:#606266;cursor:pointer;outline:0}.el-dropdown-menu__item:focus,.el-dropdown-menu__item:not(.is-disabled):hover{background-color:#ecf5ff;color:#66b1ff}.el-dropdown-menu__item i{margin-right:5px}.el-dropdown-menu__item--divided{position:relative;margin-top:6px;border-top:1px solid #EBEEF5}.el-dropdown-menu__item--divided:before{content:'';height:6px;display:block;margin:0 -20px;background-color:#FFF}.el-dropdown-menu__item.is-disabled{cursor:default;color:#bbb;pointer-events:none}.el-dropdown-menu--medium{padding:6px 0}.el-dropdown-menu--medium .el-dropdown-menu__item{line-height:30px;padding:0 17px;font-size:14px}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:6px}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:6px;margin:0 -17px}.el-dropdown-menu--small{padding:6px 0}.el-dropdown-menu--small .el-dropdown-menu__item{line-height:27px;padding:0 15px;font-size:13px}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:4px}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:4px;margin:0 -15px}.el-dropdown-menu--mini{padding:3px 0}.el-dropdown-menu--mini .el-dropdown-menu__item{line-height:24px;padding:0 10px;font-size:12px}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:3px}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:3px;margin:0 -10px}.el-menu{border-right:solid 1px #e6e6e6;list-style:none;position:relative;margin:0;padding-left:0;background-color:#FFF}.el-menu--horizontal>.el-menu-item:not(.is-disabled):focus,.el-menu--horizontal>.el-menu-item:not(.is-disabled):hover,.el-menu--horizontal>.el-submenu .el-submenu__title:hover{background-color:#fff}.el-menu::after,.el-menu::before{display:table;content:\"\"}.el-menu::after{clear:both}.el-menu.el-menu--horizontal{border-bottom:solid 1px #e6e6e6}.el-menu--horizontal{border-right:none}.el-menu--horizontal>.el-menu-item{float:left;height:60px;line-height:60px;margin:0;border-bottom:2px solid transparent;color:#909399}.el-menu--horizontal>.el-menu-item a,.el-menu--horizontal>.el-menu-item a:hover{color:inherit}.el-menu--horizontal>.el-submenu{float:left}.el-menu--horizontal>.el-submenu:focus,.el-menu--horizontal>.el-submenu:hover{outline:0}.el-menu--horizontal>.el-submenu:focus .el-submenu__title,.el-menu--horizontal>.el-submenu:hover .el-submenu__title{color:#303133}.el-menu--horizontal>.el-submenu.is-active .el-submenu__title{border-bottom:2px solid #409EFF;color:#303133}.el-menu--horizontal>.el-submenu .el-submenu__title{height:60px;line-height:60px;border-bottom:2px solid transparent;color:#909399}.el-menu--horizontal>.el-submenu .el-submenu__icon-arrow{position:static;vertical-align:middle;margin-left:8px;margin-top:-3px}.el-menu--horizontal .el-menu .el-menu-item,.el-menu--horizontal .el-menu .el-submenu__title{background-color:#FFF;float:none;height:36px;line-height:36px;padding:0 10px;color:#909399}.el-menu--horizontal .el-menu .el-menu-item.is-active,.el-menu--horizontal .el-menu .el-submenu.is-active>.el-submenu__title{color:#303133}.el-menu--horizontal .el-menu-item:not(.is-disabled):focus,.el-menu--horizontal .el-menu-item:not(.is-disabled):hover{outline:0;color:#303133}.el-menu--horizontal>.el-menu-item.is-active{border-bottom:2px solid #409EFF;color:#303133}.el-menu--collapse{width:64px}.el-menu--collapse>.el-menu-item [class^=el-icon-],.el-menu--collapse>.el-submenu>.el-submenu__title [class^=el-icon-]{margin:0;vertical-align:middle;width:24px;text-align:center}.el-menu--collapse>.el-menu-item .el-submenu__icon-arrow,.el-menu--collapse>.el-submenu>.el-submenu__title .el-submenu__icon-arrow{display:none}.el-menu--collapse>.el-menu-item span,.el-menu--collapse>.el-submenu>.el-submenu__title span{height:0;width:0;overflow:hidden;visibility:hidden;display:inline-block}.el-menu--collapse>.el-menu-item.is-active i{color:inherit}.el-menu--collapse .el-submenu{position:relative}.el-menu--collapse .el-submenu .el-menu{position:absolute;margin-left:5px;top:0;left:100%;border:1px solid #E4E7ED;border-radius:2px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-menu-item,.el-submenu__title{height:56px;line-height:56px;position:relative;-webkit-box-sizing:border-box;white-space:nowrap;list-style:none}.el-menu--collapse .el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-webkit-transform:none;transform:none}.el-menu--popup{z-index:100;border:none;padding:5px 0;border-radius:2px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-menu--popup-bottom-start{margin-top:5px}.el-menu--popup-right-start{margin-left:5px;margin-right:5px}.el-menu-item{font-size:14px;color:#303133;padding:0 20px;cursor:pointer;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;box-sizing:border-box}.el-menu-item *{vertical-align:middle}.el-menu-item i{color:#909399}.el-menu-item:focus,.el-menu-item:hover{outline:0;background-color:#ecf5ff}.el-menu-item.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-menu-item [class^=el-icon-]{margin-right:5px;width:24px;text-align:center;font-size:18px;vertical-align:middle}.el-menu-item.is-active{color:#409EFF}.el-menu-item.is-active i{color:inherit}.el-submenu{list-style:none;margin:0;padding-left:0}.el-submenu__title{font-size:14px;color:#303133;padding:0 20px;cursor:pointer;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;box-sizing:border-box}.el-submenu__title *{vertical-align:middle}.el-submenu__title i{color:#909399}.el-submenu__title:focus,.el-submenu__title:hover{outline:0;background-color:#ecf5ff}.el-submenu__title.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu__title:hover{background-color:#ecf5ff}.el-submenu .el-menu{border:none}.el-submenu .el-menu-item{height:50px;line-height:50px;padding:0 45px;min-width:200px}.el-submenu__icon-arrow{position:absolute;top:50%;right:20px;margin-top:-7px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-size:12px}.el-submenu.is-active .el-submenu__title{border-bottom-color:#409EFF}.el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}.el-submenu.is-disabled .el-menu-item,.el-submenu.is-disabled .el-submenu__title{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu [class^=el-icon-]{vertical-align:middle;margin-right:5px;width:24px;text-align:center;font-size:18px}.el-menu-item-group>ul{padding:0}.el-menu-item-group__title{padding:7px 0 7px 20px;line-height:normal;font-size:12px;color:#909399}.el-radio-button__inner,.el-radio-group{display:inline-block;line-height:1;vertical-align:middle}.horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow{-webkit-transition:.2s;transition:.2s;opacity:0}.el-radio-group{font-size:0}.el-radio-button{position:relative;display:inline-block;outline:0}.el-radio-button__inner{white-space:nowrap;background:#FFF;border:1px solid #DCDFE6;font-weight:500;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;position:relative;cursor:pointer;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);padding:12px 20px;font-size:14px;border-radius:0}.el-radio-button__inner.is-round{padding:12px 20px}.el-radio-button__inner:hover{color:#409EFF}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button:first-child .el-radio-button__inner{border-left:1px solid #DCDFE6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-radio-button__orig-radio{opacity:0;outline:0;position:absolute;z-index:-1}.el-radio-button__orig-radio:checked+.el-radio-button__inner{color:#FFF;background-color:#409EFF;border-color:#409EFF;-webkit-box-shadow:-1px 0 0 0 #409EFF;box-shadow:-1px 0 0 0 #409EFF}.el-radio-button__orig-radio:disabled+.el-radio-button__inner{color:#C0C4CC;cursor:not-allowed;background-image:none;background-color:#FFF;border-color:#EBEEF5;-webkit-box-shadow:none;box-shadow:none}.el-radio-button__orig-radio:disabled:checked+.el-radio-button__inner{background-color:#F2F6FC}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 4px 4px 0}.el-popover,.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:4px}.el-radio-button--medium .el-radio-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-radio-button--medium .el-radio-button__inner.is-round{padding:10px 20px}.el-radio-button--small .el-radio-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-radio-button--small .el-radio-button__inner.is-round{padding:9px 15px}.el-radio-button--mini .el-radio-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-radio-button--mini .el-radio-button__inner.is-round{padding:7px 15px}.el-radio-button:focus:not(.is-focus):not(:active):not(.is-disabled){-webkit-box-shadow:0 0 2px 2px #409EFF;box-shadow:0 0 2px 2px #409EFF}.el-switch{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;font-size:14px;line-height:20px;height:20px;vertical-align:middle}.el-switch__core,.el-switch__label{display:inline-block;cursor:pointer}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__label{-webkit-transition:.2s;transition:.2s;height:20px;font-size:14px;font-weight:500;vertical-align:middle;color:#303133}.el-switch__label.is-active{color:#409EFF}.el-switch__label--left{margin-right:10px}.el-switch__label--right{margin-left:10px}.el-switch__label *{line-height:1;font-size:14px;display:inline-block}.el-switch__input{position:absolute;width:0;height:0;opacity:0;margin:0}.el-switch__core{margin:0;position:relative;width:40px;height:20px;border:1px solid #DCDFE6;outline:0;border-radius:10px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#DCDFE6;-webkit-transition:border-color .3s,background-color .3s;transition:border-color .3s,background-color .3s;vertical-align:middle}.el-switch__core:after{content:\"\";position:absolute;top:1px;left:1px;border-radius:100%;-webkit-transition:all .3s;transition:all .3s;width:16px;height:16px;background-color:#FFF}.el-switch.is-checked .el-switch__core{border-color:#409EFF;background-color:#409EFF}.el-switch.is-checked .el-switch__core::after{left:100%;margin-left:-17px}.el-switch.is-disabled{opacity:.6}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.el-switch .label-fade-enter,.el-switch .label-fade-leave-active{opacity:0}.el-select-dropdown{position:absolute;z-index:1001;border:1px solid #E4E7ED;border-radius:4px;background-color:#FFF;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:5px 0}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:#409EFF;background-color:#FFF}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover{background-color:#F5F7FA}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after{position:absolute;right:20px;font-family:element-icons;content:\"\\e6da\";font-size:12px;font-weight:700;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:#999;font-size:14px}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{list-style:none;padding:6px 0;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-select-dropdown__item{font-size:14px;padding:0 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#606266;height:34px;line-height:34px;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer}.el-select-dropdown__item.is-disabled{color:#C0C4CC;cursor:not-allowed}.el-select-dropdown__item.is-disabled:hover{background-color:#FFF}.el-select-dropdown__item.hover,.el-select-dropdown__item:hover{background-color:#F5F7FA}.el-select-dropdown__item.selected{color:#409EFF;font-weight:700}.el-select-group{margin:0;padding:0}.el-select-group__wrap{position:relative;list-style:none;margin:0;padding:0}.el-select-group__wrap:not(:last-of-type){padding-bottom:24px}.el-select-group__wrap:not(:last-of-type)::after{content:'';position:absolute;display:block;left:20px;right:20px;bottom:12px;height:1px;background:#E4E7ED}.el-select-group__title{padding-left:20px;font-size:12px;color:#909399;line-height:30px}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-select{display:inline-block;position:relative}.el-select .el-select__tags>span{display:contents}.el-select:hover .el-input__inner{border-color:#C0C4CC}.el-select .el-input__inner{cursor:pointer;padding-right:35px}.el-select .el-input__inner:focus{border-color:#409EFF}.el-select .el-input .el-select__caret{color:#C0C4CC;font-size:14px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg);cursor:pointer}.el-select .el-input .el-select__caret.is-reverse{-webkit-transform:rotateZ(0);transform:rotateZ(0)}.el-select .el-input .el-select__caret.is-show-close{font-size:14px;text-align:center;-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg);border-radius:100%;color:#C0C4CC;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-select .el-input .el-select__caret.is-show-close:hover{color:#909399}.el-select .el-input.is-disabled .el-input__inner{cursor:not-allowed}.el-select .el-input.is-disabled .el-input__inner:hover{border-color:#E4E7ED}.el-select .el-input.is-focus .el-input__inner{border-color:#409EFF}.el-select>.el-input{display:block}.el-select__input{border:none;outline:0;padding:0;margin-left:15px;color:#666;font-size:14px;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:28px;background-color:transparent}.el-select__input.is-mini{height:14px}.el-select__close{cursor:pointer;position:absolute;top:8px;z-index:1000;right:25px;color:#C0C4CC;line-height:18px;font-size:14px}.el-select__close:hover{color:#909399}.el-select__tags{position:absolute;line-height:normal;white-space:normal;z-index:1;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap}.el-select .el-tag__close{margin-top:-2px}.el-select .el-tag{-webkit-box-sizing:border-box;box-sizing:border-box;border-color:transparent;margin:2px 0 2px 6px;background-color:#f0f2f5}.el-select .el-tag__close.el-icon-close{background-color:#C0C4CC;right:-7px;top:0;color:#FFF}.el-select .el-tag__close.el-icon-close:hover{background-color:#909399}.el-table,.el-table__expanded-cell{background-color:#FFF}.el-select .el-tag__close.el-icon-close::before{display:block;-webkit-transform:translate(0,.5px);transform:translate(0,.5px)}.el-table{position:relative;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:1;-ms-flex:1;flex:1;width:100%;max-width:100%;font-size:14px;color:#606266}.el-table--mini,.el-table--small,.el-table__expand-icon{font-size:12px}.el-table__empty-block{min-height:60px;text-align:center;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-table__empty-text{line-height:60px;width:50%;color:#909399}.el-table__expand-column .cell{padding:0;text-align:center}.el-table__expand-icon{position:relative;cursor:pointer;color:#666;-webkit-transition:-webkit-transform .2s ease-in-out;transition:-webkit-transform .2s ease-in-out;transition:transform .2s ease-in-out;transition:transform .2s ease-in-out,-webkit-transform .2s ease-in-out;height:20px}.el-table__expand-icon--expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-table__expand-icon>.el-icon{position:absolute;left:50%;top:50%;margin-left:-5px;margin-top:-5px}.el-table__expanded-cell[class*=cell]{padding:20px 50px}.el-table__expanded-cell:hover{background-color:transparent!important}.el-table__placeholder{display:inline-block;width:20px}.el-table__append-wrapper{overflow:hidden}.el-table--fit{border-right:0;border-bottom:0}.el-table--fit td.gutter,.el-table--fit th.gutter{border-right-width:1px}.el-table--scrollable-x .el-table__body-wrapper{overflow-x:auto}.el-table--scrollable-y .el-table__body-wrapper{overflow-y:auto}.el-table thead{color:#909399;font-weight:500}.el-table thead.is-group th{background:#F5F7FA}.el-table th,.el-table tr{background-color:#FFF}.el-table td,.el-table th{padding:12px 0;min-width:0;-webkit-box-sizing:border-box;box-sizing:border-box;text-overflow:ellipsis;vertical-align:middle;position:relative;text-align:left}.el-table td.is-center,.el-table th.is-center{text-align:center}.el-table td.is-right,.el-table th.is-right{text-align:right}.el-table td.gutter,.el-table th.gutter{width:15px;border-right-width:0;border-bottom-width:0;padding:0}.el-table--medium td,.el-table--medium th{padding:10px 0}.el-table--small td,.el-table--small th{padding:8px 0}.el-table--mini td,.el-table--mini th{padding:6px 0}.el-table .cell,.el-table--border td:first-child .cell,.el-table--border th:first-child .cell{padding-left:10px}.el-table tr input[type=checkbox]{margin:0}.el-table td,.el-table th.is-leaf{border-bottom:1px solid #EBEEF5}.el-table th.is-sortable{cursor:pointer}.el-table th{overflow:hidden;-ms-user-select:none;user-select:none}.el-table th>.cell{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;vertical-align:middle;padding-left:10px;padding-right:10px;width:100%}.el-table th>.cell.highlight{color:#409EFF}.el-table th.required>div::before{display:inline-block;content:\"\";width:8px;height:8px;border-radius:50%;background:#ff4d51;margin-right:5px;vertical-align:middle}.el-table td div{-webkit-box-sizing:border-box;box-sizing:border-box}.el-table td.gutter{width:0}.el-table .cell{-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;white-space:normal;word-break:break-all;line-height:23px;padding-right:10px}.el-table .cell.el-tooltip{white-space:nowrap;min-width:50px}.el-table--border,.el-table--group{border:1px solid #EBEEF5}.el-table--border::after,.el-table--group::after,.el-table::before{content:'';position:absolute;background-color:#EBEEF5;z-index:1}.el-table--border::after,.el-table--group::after{top:0;right:0;width:1px;height:100%}.el-table::before{left:0;bottom:0;width:100%;height:1px}.el-table--border{border-right:none;border-bottom:none}.el-table--border.el-loading-parent--relative{border-color:transparent}.el-table--border td,.el-table--border th,.el-table__body-wrapper .el-table--border.is-scrolling-left~.el-table__fixed{border-right:1px solid #EBEEF5}.el-table--border th.gutter:last-of-type{border-bottom:1px solid #EBEEF5;border-bottom-width:1px}.el-table--border th,.el-table__fixed-right-patch{border-bottom:1px solid #EBEEF5}.el-table__fixed,.el-table__fixed-right{position:absolute;top:0;left:0;overflow-x:hidden;overflow-y:hidden;-webkit-box-shadow:0 0 10px rgba(0,0,0,.12);box-shadow:0 0 10px rgba(0,0,0,.12)}.el-table__fixed-right::before,.el-table__fixed::before{content:'';position:absolute;left:0;bottom:0;width:100%;height:1px;background-color:#EBEEF5;z-index:4}.el-table__fixed-right-patch{position:absolute;top:-1px;right:0;background-color:#FFF}.el-table__fixed-right{top:0;left:auto;right:0}.el-table__fixed-right .el-table__fixed-body-wrapper,.el-table__fixed-right .el-table__fixed-footer-wrapper,.el-table__fixed-right .el-table__fixed-header-wrapper{left:auto;right:0}.el-table__fixed-header-wrapper{position:absolute;left:0;top:0;z-index:3}.el-table__fixed-footer-wrapper{position:absolute;left:0;bottom:0;z-index:3}.el-table__fixed-footer-wrapper tbody td{border-top:1px solid #EBEEF5;background-color:#F5F7FA;color:#606266}.el-table__fixed-body-wrapper{position:absolute;left:0;top:37px;overflow:hidden;z-index:3}.el-table__body-wrapper,.el-table__footer-wrapper,.el-table__header-wrapper{width:100%}.el-table__footer-wrapper{margin-top:-1px}.el-table__footer-wrapper td{border-top:1px solid #EBEEF5}.el-table__body,.el-table__footer,.el-table__header{table-layout:fixed;border-collapse:separate}.el-table__footer-wrapper,.el-table__header-wrapper{overflow:hidden}.el-table__footer-wrapper tbody td,.el-table__header-wrapper tbody td{background-color:#F5F7FA;color:#606266}.el-table__body-wrapper{overflow:hidden;position:relative}.el-table__body-wrapper.is-scrolling-left~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed-right,.el-table__body-wrapper.is-scrolling-right~.el-table__fixed-right{-webkit-box-shadow:none;box-shadow:none}.el-picker-panel,.el-table-filter{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-table__body-wrapper .el-table--border.is-scrolling-right~.el-table__fixed-right{border-left:1px solid #EBEEF5}.el-table .caret-wrapper{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:34px;width:24px;vertical-align:middle;cursor:pointer;overflow:initial;position:relative}.el-table .sort-caret{width:0;height:0;border:5px solid transparent;position:absolute;left:7px}.el-table .sort-caret.ascending{border-bottom-color:#C0C4CC;top:5px}.el-table .sort-caret.descending{border-top-color:#C0C4CC;bottom:7px}.el-table .ascending .sort-caret.ascending{border-bottom-color:#409EFF}.el-table .descending .sort-caret.descending{border-top-color:#409EFF}.el-table .hidden-columns{position:absolute;z-index:-1}.el-table--striped .el-table__body tr.el-table__row--striped td{background:#FAFAFA}.el-table--striped .el-table__body tr.el-table__row--striped.current-row td{background-color:#ecf5ff}.el-table__body tr.hover-row.current-row>td,.el-table__body tr.hover-row.el-table__row--striped.current-row>td,.el-table__body tr.hover-row.el-table__row--striped>td,.el-table__body tr.hover-row>td{background-color:#F5F7FA}.el-table__body tr.current-row>td{background-color:#ecf5ff}.el-table__column-resize-proxy{position:absolute;left:200px;top:0;bottom:0;width:0;border-left:1px solid #EBEEF5;z-index:10}.el-table__column-filter-trigger{display:inline-block;line-height:34px;cursor:pointer}.el-table__column-filter-trigger i{color:#909399;font-size:12px;-webkit-transform:scale(.75);transform:scale(.75)}.el-table--enable-row-transition .el-table__body td{-webkit-transition:background-color .25s ease;transition:background-color .25s ease}.el-table--enable-row-hover .el-table__body tr:hover>td{background-color:#F5F7FA}.el-table--fluid-height .el-table__fixed,.el-table--fluid-height .el-table__fixed-right{bottom:0;overflow:hidden}.el-table [class*=el-table__row--level] .el-table__expand-icon{display:inline-block;width:20px;line-height:20px;height:20px;text-align:center;margin-right:3px}.el-table-column--selection .cell{padding-left:14px;padding-right:14px}.el-table-filter{border:1px solid #EBEEF5;border-radius:2px;background-color:#FFF;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:2px 0}.el-date-table td,.el-date-table td div{height:30px;-webkit-box-sizing:border-box}.el-table-filter__list{padding:5px 0;margin:0;list-style:none;min-width:100px}.el-table-filter__list-item{line-height:36px;padding:0 10px;cursor:pointer;font-size:14px}.el-table-filter__list-item:hover{background-color:#ecf5ff;color:#66b1ff}.el-table-filter__list-item.is-active{background-color:#409EFF;color:#FFF}.el-table-filter__content{min-width:100px}.el-table-filter__bottom{border-top:1px solid #EBEEF5;padding:8px}.el-table-filter__bottom button{background:0 0;border:none;color:#606266;cursor:pointer;font-size:13px;padding:0 3px}.el-date-table td.in-range div,.el-date-table td.in-range div:hover,.el-date-table.is-week-mode .el-date-table__row.current div,.el-date-table.is-week-mode .el-date-table__row:hover div{background-color:#F2F6FC}.el-table-filter__bottom button:hover{color:#409EFF}.el-table-filter__bottom button:focus{outline:0}.el-table-filter__bottom button.is-disabled{color:#C0C4CC;cursor:not-allowed}.el-table-filter__wrap{max-height:280px}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{display:block;margin-right:5px;margin-bottom:8px;margin-left:5px}.el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.el-date-table{font-size:12px;-ms-user-select:none;user-select:none}.el-date-table.is-week-mode .el-date-table__row:hover td.available:hover{color:#606266}.el-date-table.is-week-mode .el-date-table__row:hover td:first-child div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table.is-week-mode .el-date-table__row:hover td:last-child div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table td{width:32px;padding:4px 0;box-sizing:border-box;text-align:center;cursor:pointer;position:relative}.el-date-table td div{padding:3px 0;box-sizing:border-box}.el-date-table td span{width:24px;height:24px;display:block;margin:0 auto;line-height:24px;position:absolute;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);border-radius:50%}.el-date-table td.next-month,.el-date-table td.prev-month{color:#C0C4CC}.el-date-table td.today{position:relative}.el-date-table td.today span{color:#409EFF;font-weight:700}.el-date-table td.today.end-date span,.el-date-table td.today.start-date span{color:#FFF}.el-date-table td.available:hover{color:#409EFF}.el-date-table td.current:not(.disabled) span{color:#FFF;background-color:#409EFF}.el-date-table td.end-date div,.el-date-table td.start-date div{color:#FFF}.el-date-table td.end-date span,.el-date-table td.start-date span{background-color:#409EFF}.el-date-table td.start-date div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table td.end-date div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table td.disabled div{background-color:#F5F7FA;opacity:1;cursor:not-allowed;color:#C0C4CC}.el-date-table td.selected div{margin-left:5px;margin-right:5px;background-color:#F2F6FC;border-radius:15px}.el-date-table td.selected div:hover{background-color:#F2F6FC}.el-date-table td.selected span{background-color:#409EFF;color:#FFF;border-radius:15px}.el-date-table td.week{font-size:80%;color:#606266}.el-month-table,.el-year-table{font-size:12px;border-collapse:collapse}.el-date-table th{padding:5px;color:#606266;font-weight:400;border-bottom:solid 1px #EBEEF5}.el-month-table{margin:-1px}.el-month-table td{text-align:center;padding:8px 0;cursor:pointer}.el-month-table td div{height:48px;padding:6px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-month-table td.today .cell{color:#409EFF;font-weight:700}.el-month-table td.today.end-date .cell,.el-month-table td.today.start-date .cell{color:#FFF}.el-month-table td.disabled .cell{background-color:#F5F7FA;cursor:not-allowed;color:#C0C4CC}.el-month-table td.disabled .cell:hover{color:#C0C4CC}.el-month-table td .cell{width:60px;height:36px;display:block;line-height:36px;color:#606266;margin:0 auto;border-radius:18px}.el-month-table td .cell:hover{color:#409EFF}.el-month-table td.in-range div,.el-month-table td.in-range div:hover{background-color:#F2F6FC}.el-month-table td.end-date div,.el-month-table td.start-date div{color:#FFF}.el-month-table td.end-date .cell,.el-month-table td.start-date .cell{color:#FFF;background-color:#409EFF}.el-month-table td.start-date div{border-top-left-radius:24px;border-bottom-left-radius:24px}.el-month-table td.end-date div{border-top-right-radius:24px;border-bottom-right-radius:24px}.el-month-table td.current:not(.disabled) .cell{color:#409EFF}.el-year-table{margin:-1px}.el-year-table .el-icon{color:#303133}.el-year-table td{text-align:center;padding:20px 3px;cursor:pointer}.el-year-table td.today .cell{color:#409EFF;font-weight:700}.el-year-table td.disabled .cell{background-color:#F5F7FA;cursor:not-allowed;color:#C0C4CC}.el-year-table td.disabled .cell:hover{color:#C0C4CC}.el-year-table td .cell{width:48px;height:32px;display:block;line-height:32px;color:#606266;margin:0 auto}.el-year-table td .cell:hover,.el-year-table td.current:not(.disabled) .cell{color:#409EFF}.el-date-range-picker{width:646px}.el-date-range-picker.has-sidebar{width:756px}.el-date-range-picker table{table-layout:fixed;width:100%}.el-date-range-picker .el-picker-panel__body{min-width:513px}.el-date-range-picker .el-picker-panel__content{margin:0}.el-date-range-picker__header{position:relative;text-align:center;height:28px}.el-date-range-picker__header [class*=arrow-left]{float:left}.el-date-range-picker__header [class*=arrow-right]{float:right}.el-date-range-picker__header div{font-size:16px;font-weight:500;margin-right:50px}.el-date-range-picker__content{float:left;width:50%;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:16px}.el-date-range-picker__content.is-left{border-right:1px solid #e4e4e4}.el-date-range-picker__content .el-date-range-picker__header div{margin-left:50px;margin-right:50px}.el-date-range-picker__editors-wrap{-webkit-box-sizing:border-box;box-sizing:border-box;display:table-cell}.el-date-range-picker__editors-wrap.is-right{text-align:right}.el-date-range-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px;display:table;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-range-picker__time-header>.el-icon-arrow-right{font-size:20px;vertical-align:middle;display:table-cell;color:#303133}.el-date-range-picker__time-picker-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-range-picker__time-picker-wrap .el-picker-panel{position:absolute;top:13px;right:0;z-index:1;background:#FFF}.el-date-picker{width:322px}.el-date-picker.has-sidebar.has-time{width:434px}.el-date-picker.has-sidebar{width:438px}.el-date-picker.has-time .el-picker-panel__body-wrapper{position:relative}.el-date-picker .el-picker-panel__content{width:292px}.el-date-picker table{table-layout:fixed;width:100%}.el-date-picker__editor-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px;display:table;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-picker__header{margin:12px;text-align:center}.el-date-picker__header--bordered{margin-bottom:0;padding-bottom:12px;border-bottom:solid 1px #EBEEF5}.el-date-picker__header--bordered+.el-picker-panel__content{margin-top:0}.el-date-picker__header-label{font-size:16px;font-weight:500;padding:0 5px;line-height:22px;text-align:center;cursor:pointer;color:#606266}.el-date-picker__header-label.active,.el-date-picker__header-label:hover{color:#409EFF}.el-date-picker__prev-btn{float:left}.el-date-picker__next-btn{float:right}.el-date-picker__time-wrap{padding:10px;text-align:center}.el-date-picker__time-label{float:left;cursor:pointer;line-height:30px;margin-left:10px}.time-select{margin:5px 0;min-width:0}.time-select .el-picker-panel__content{max-height:200px;margin:0}.time-select-item{padding:8px 10px;font-size:14px;line-height:20px}.time-select-item.selected:not(.disabled){color:#409EFF;font-weight:700}.time-select-item.disabled{color:#E4E7ED;cursor:not-allowed}.time-select-item:hover{background-color:#F5F7FA;font-weight:700;cursor:pointer}.el-date-editor{position:relative;display:inline-block;text-align:left}.el-date-editor.el-input,.el-date-editor.el-input__inner{width:220px}.el-date-editor--monthrange.el-input,.el-date-editor--monthrange.el-input__inner{width:300px}.el-date-editor--daterange.el-input,.el-date-editor--daterange.el-input__inner,.el-date-editor--timerange.el-input,.el-date-editor--timerange.el-input__inner{width:350px}.el-date-editor--datetimerange.el-input,.el-date-editor--datetimerange.el-input__inner{width:400px}.el-date-editor--dates .el-input__inner{text-overflow:ellipsis;white-space:nowrap}.el-date-editor .el-icon-circle-close{cursor:pointer}.el-date-editor .el-range__icon{font-size:14px;margin-left:-5px;color:#C0C4CC;float:left;line-height:32px}.el-date-editor .el-range-input,.el-date-editor .el-range-separator{height:100%;margin:0;text-align:center;display:inline-block;font-size:14px}.el-date-editor .el-range-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;outline:0;padding:0;width:39%;color:#606266}.el-date-editor .el-range-input::-webkit-input-placeholder{color:#C0C4CC}.el-date-editor .el-range-input:-ms-input-placeholder{color:#C0C4CC}.el-date-editor .el-range-input::-ms-input-placeholder{color:#C0C4CC}.el-date-editor .el-range-input::placeholder{color:#C0C4CC}.el-date-editor .el-range-separator{padding:0 5px;line-height:32px;width:5%;color:#303133}.el-date-editor .el-range__close-icon{font-size:14px;color:#C0C4CC;width:25px;display:inline-block;float:right;line-height:32px}.el-range-editor.el-input__inner{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:3px 10px}.el-range-editor .el-range-input{line-height:1}.el-range-editor.is-active,.el-range-editor.is-active:hover{border-color:#409EFF}.el-range-editor--medium.el-input__inner{height:36px}.el-range-editor--medium .el-range-separator{line-height:28px;font-size:14px}.el-range-editor--medium .el-range-input{font-size:14px}.el-range-editor--medium .el-range__close-icon,.el-range-editor--medium .el-range__icon{line-height:28px}.el-range-editor--small.el-input__inner{height:32px}.el-range-editor--small .el-range-separator{line-height:24px;font-size:13px}.el-range-editor--small .el-range-input{font-size:13px}.el-range-editor--small .el-range__close-icon,.el-range-editor--small .el-range__icon{line-height:24px}.el-range-editor--mini.el-input__inner{height:28px}.el-range-editor--mini .el-range-separator{line-height:20px;font-size:12px}.el-range-editor--mini .el-range-input{font-size:12px}.el-range-editor--mini .el-range__close-icon,.el-range-editor--mini .el-range__icon{line-height:20px}.el-range-editor.is-disabled{background-color:#F5F7FA;border-color:#E4E7ED;color:#C0C4CC;cursor:not-allowed}.el-range-editor.is-disabled:focus,.el-range-editor.is-disabled:hover{border-color:#E4E7ED}.el-range-editor.is-disabled input{background-color:#F5F7FA;color:#C0C4CC;cursor:not-allowed}.el-range-editor.is-disabled input::-webkit-input-placeholder{color:#C0C4CC}.el-range-editor.is-disabled input:-ms-input-placeholder{color:#C0C4CC}.el-range-editor.is-disabled input::-ms-input-placeholder{color:#C0C4CC}.el-range-editor.is-disabled input::placeholder{color:#C0C4CC}.el-range-editor.is-disabled .el-range-separator{color:#C0C4CC}.el-picker-panel{color:#606266;border:1px solid #E4E7ED;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);background:#FFF;border-radius:4px;line-height:30px;margin:5px 0}.el-popover,.el-time-panel{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-picker-panel__body-wrapper::after,.el-picker-panel__body::after{content:\"\";display:table;clear:both}.el-picker-panel__content{position:relative;margin:15px}.el-picker-panel__footer{border-top:1px solid #e4e4e4;padding:4px;text-align:right;background-color:#FFF;position:relative;font-size:0}.el-picker-panel__shortcut{display:block;width:100%;border:0;background-color:transparent;line-height:28px;font-size:14px;color:#606266;padding-left:12px;text-align:left;outline:0;cursor:pointer}.el-picker-panel__shortcut:hover{color:#409EFF}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#409EFF}.el-picker-panel__btn{border:1px solid #dcdcdc;color:#333;line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:0;font-size:12px}.el-picker-panel__btn[disabled]{color:#ccc;cursor:not-allowed}.el-picker-panel__icon-btn{font-size:12px;color:#303133;border:0;background:0 0;cursor:pointer;outline:0;margin-top:8px}.el-picker-panel__icon-btn:hover{color:#409EFF}.el-picker-panel__icon-btn.is-disabled{color:#bbb}.el-picker-panel__icon-btn.is-disabled:hover{cursor:not-allowed}.el-picker-panel__link-btn{vertical-align:middle}.el-picker-panel [slot=sidebar],.el-picker-panel__sidebar{position:absolute;top:0;bottom:0;width:110px;border-right:1px solid #e4e4e4;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;background-color:#FFF;overflow:auto}.el-picker-panel [slot=sidebar]+.el-picker-panel__body,.el-picker-panel__sidebar+.el-picker-panel__body{margin-left:110px}.el-time-spinner.has-seconds .el-time-spinner__wrapper{width:33.3%}.el-time-spinner__wrapper{max-height:190px;overflow:auto;display:inline-block;width:50%;vertical-align:top;position:relative}.el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default){padding-bottom:15px}.el-time-spinner__input.el-input .el-input__inner,.el-time-spinner__list{padding:0;text-align:center}.el-time-spinner__wrapper.is-arrow{-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;overflow:hidden}.el-time-spinner__wrapper.is-arrow .el-time-spinner__list{-webkit-transform:translateY(-32px);transform:translateY(-32px)}.el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.disabled):not(.active){background:#FFF;cursor:default}.el-time-spinner__arrow{font-size:12px;color:#909399;position:absolute;left:0;width:100%;z-index:1;text-align:center;height:30px;line-height:30px;cursor:pointer}.el-time-spinner__arrow:hover{color:#409EFF}.el-time-spinner__arrow.el-icon-arrow-up{top:10px}.el-time-spinner__arrow.el-icon-arrow-down{bottom:10px}.el-time-spinner__input.el-input{width:70%}.el-time-spinner__list{margin:0;list-style:none}.el-time-spinner__list::after,.el-time-spinner__list::before{content:'';display:block;width:100%;height:80px}.el-time-spinner__item{height:32px;line-height:32px;font-size:12px;color:#606266}.el-time-spinner__item:hover:not(.disabled):not(.active){background:#F5F7FA;cursor:pointer}.el-time-spinner__item.active:not(.disabled){color:#303133;font-weight:700}.el-time-spinner__item.disabled{color:#C0C4CC;cursor:not-allowed}.el-time-panel{margin:5px 0;border:1px solid #E4E7ED;background-color:#FFF;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:2px;position:absolute;width:180px;left:0;z-index:1000;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-box-sizing:content-box;box-sizing:content-box}.el-slider__button,.el-slider__button-wrapper{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.el-time-panel__content{font-size:0;position:relative;overflow:hidden}.el-time-panel__content::after,.el-time-panel__content::before{content:\"\";top:50%;position:absolute;margin-top:-15px;height:32px;z-index:-1;left:0;right:0;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;text-align:left;border-top:1px solid #E4E7ED;border-bottom:1px solid #E4E7ED}.el-time-panel__content::after{left:50%;margin-left:12%;margin-right:12%}.el-time-panel__content::before{padding-left:50%;margin-right:12%;margin-left:12%}.el-time-panel__content.has-seconds::after{left:calc(100% / 3 * 2)}.el-time-panel__content.has-seconds::before{padding-left:calc(100% / 3)}.el-time-panel__footer{border-top:1px solid #e4e4e4;padding:4px;height:36px;line-height:25px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.el-time-panel__btn{border:none;line-height:28px;padding:0 5px;margin:0 5px;cursor:pointer;background-color:transparent;outline:0;font-size:12px;color:#303133}.el-time-panel__btn.confirm{font-weight:800;color:#409EFF}.el-time-range-picker{width:354px;overflow:visible}.el-time-range-picker__content{position:relative;text-align:center;padding:10px}.el-time-range-picker__cell{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:4px 7px 7px;width:50%;display:inline-block}.el-time-range-picker__header{margin-bottom:5px;text-align:center;font-size:14px}.el-time-range-picker__body{border-radius:2px;border:1px solid #E4E7ED}.el-popover{position:absolute;background:#FFF;min-width:150px;border:1px solid #EBEEF5;padding:12px;z-index:2000;color:#606266;line-height:1.4;text-align:justify;font-size:14px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);word-break:break-all}.el-popover--plain{padding:18px 20px}.el-popover__title{color:#303133;font-size:16px;line-height:1;margin-bottom:12px}.v-modal-enter{-webkit-animation:v-modal-in .2s ease;animation:v-modal-in .2s ease}.v-modal-leave{-webkit-animation:v-modal-out .2s ease forwards;animation:v-modal-out .2s ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{100%{opacity:0}}.v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:.5;background:#000}.el-popup-parent--hidden{overflow:hidden}.el-message-box{display:inline-block;width:420px;padding-bottom:10px;vertical-align:middle;background-color:#FFF;border-radius:4px;border:1px solid #EBEEF5;font-size:18px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);text-align:left;overflow:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden}.el-message-box__wrapper{position:fixed;top:0;bottom:0;left:0;right:0;text-align:center}.el-message-box__wrapper::after{content:\"\";display:inline-block;height:100%;width:0;vertical-align:middle}.el-message-box__header{position:relative;padding:15px 15px 10px}.el-message-box__title{padding-left:0;margin-bottom:0;font-size:18px;line-height:1;color:#303133}.el-message-box__headerbtn{position:absolute;top:15px;right:15px;padding:0;border:none;outline:0;background:0 0;font-size:16px;cursor:pointer}.el-form-item.is-error .el-input__inner,.el-form-item.is-error .el-input__inner:focus,.el-form-item.is-error .el-textarea__inner,.el-form-item.is-error .el-textarea__inner:focus,.el-message-box__input input.invalid,.el-message-box__input input.invalid:focus{border-color:#F56C6C}.el-message-box__headerbtn .el-message-box__close{color:#909399}.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:#409EFF}.el-message-box__content{padding:10px 15px;color:#606266;font-size:14px}.el-message-box__container{position:relative}.el-message-box__input{padding-top:15px}.el-message-box__status{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);font-size:24px!important}.el-message-box__status::before{padding-left:1px}.el-message-box__status+.el-message-box__message{padding-left:36px;padding-right:12px}.el-message-box__status.el-icon-success{color:#67C23A}.el-message-box__status.el-icon-info{color:#909399}.el-message-box__status.el-icon-warning{color:#E6A23C}.el-message-box__status.el-icon-error{color:#F56C6C}.el-message-box__message{margin:0}.el-message-box__message p{margin:0;line-height:24px}.el-message-box__errormsg{color:#F56C6C;font-size:12px;min-height:18px;margin-top:2px}.el-message-box__btns{padding:5px 15px 0;text-align:right}.el-message-box__btns button:nth-child(2){margin-left:10px}.el-message-box__btns-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.el-message-box--center{padding-bottom:30px}.el-message-box--center .el-message-box__header{padding-top:30px}.el-message-box--center .el-message-box__title{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-message-box--center .el-message-box__status{position:relative;top:auto;padding-right:5px;text-align:center;-webkit-transform:translateY(-1px);transform:translateY(-1px)}.el-message-box--center .el-message-box__message{margin-left:0}.el-message-box--center .el-message-box__btns,.el-message-box--center .el-message-box__content{text-align:center}.el-message-box--center .el-message-box__content{padding-left:27px;padding-right:27px}.msgbox-fade-enter-active{-webkit-animation:msgbox-fade-in .3s;animation:msgbox-fade-in .3s}.msgbox-fade-leave-active{-webkit-animation:msgbox-fade-out .3s;animation:msgbox-fade-out .3s}@-webkit-keyframes msgbox-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes msgbox-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@-webkit-keyframes msgbox-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes msgbox-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}.el-breadcrumb{font-size:14px;line-height:1}.el-breadcrumb::after,.el-breadcrumb::before{display:table;content:\"\"}.el-breadcrumb::after{clear:both}.el-breadcrumb__separator{margin:0 9px;font-weight:700;color:#C0C4CC}.el-breadcrumb__separator[class*=icon]{margin:0 6px;font-weight:400}.el-breadcrumb__item{float:left}.el-breadcrumb__inner{color:#606266}.el-breadcrumb__inner a,.el-breadcrumb__inner.is-link{font-weight:700;text-decoration:none;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1);color:#303133}.el-breadcrumb__inner a:hover,.el-breadcrumb__inner.is-link:hover{color:#409EFF;cursor:pointer}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover{font-weight:400;color:#606266;cursor:text}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.el-form--label-left .el-form-item__label{text-align:left}.el-form--label-top .el-form-item__label{float:none;display:inline-block;text-align:left;padding:0 0 10px}.el-form--inline .el-form-item{display:inline-block;margin-right:10px;vertical-align:top}.el-form--inline .el-form-item__label{float:none;display:inline-block}.el-form--inline .el-form-item__content{display:inline-block;vertical-align:top}.el-form--inline.el-form--label-top .el-form-item__content{display:block}.el-form-item{margin-bottom:22px}.el-form-item::after,.el-form-item::before{display:table;content:\"\"}.el-form-item::after{clear:both}.el-form-item .el-form-item{margin-bottom:0}.el-form-item--mini.el-form-item,.el-form-item--small.el-form-item{margin-bottom:18px}.el-form-item .el-input__validateIcon{display:none}.el-form-item--medium .el-form-item__content,.el-form-item--medium .el-form-item__label{line-height:36px}.el-form-item--small .el-form-item__content,.el-form-item--small .el-form-item__label{line-height:32px}.el-form-item--small .el-form-item__error{padding-top:2px}.el-form-item--mini .el-form-item__content,.el-form-item--mini .el-form-item__label{line-height:28px}.el-form-item--mini .el-form-item__error{padding-top:1px}.el-form-item__label-wrap{float:left}.el-form-item__label-wrap .el-form-item__label{display:inline-block;float:none}.el-form-item__label{text-align:right;vertical-align:middle;float:left;font-size:14px;color:#606266;line-height:40px;padding:0 12px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-form-item__content{line-height:40px;position:relative;font-size:14px}.el-form-item__content::after,.el-form-item__content::before{display:table;content:\"\"}.el-form-item__content::after{clear:both}.el-form-item__content .el-input-group{vertical-align:top}.el-form-item__error{color:#F56C6C;font-size:12px;line-height:1;padding-top:4px;position:absolute;top:100%;left:0}.el-form-item__error--inline{position:relative;top:auto;left:auto;display:inline-block;margin-left:10px}.el-form-item.is-required:not(.is-no-asterisk) .el-form-item__label-wrap>.el-form-item__label:before,.el-form-item.is-required:not(.is-no-asterisk)>.el-form-item__label:before{content:'*';color:#F56C6C;margin-right:4px}.el-form-item.is-error .el-input-group__append .el-input__inner,.el-form-item.is-error .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-error .el-input__validateIcon{color:#F56C6C}.el-form-item--feedback .el-input__validateIcon{display:inline-block}.el-tabs__header{padding:0;position:relative;margin:0 0 15px}.el-tabs__active-bar{position:absolute;bottom:0;left:0;height:2px;background-color:#409EFF;z-index:1;-webkit-transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);list-style:none}.el-tabs__new-tab{float:right;border:1px solid #d3dce6;height:18px;width:18px;line-height:18px;margin:12px 0 9px 10px;border-radius:3px;text-align:center;font-size:12px;color:#d3dce6;cursor:pointer;-webkit-transition:all .15s;transition:all .15s}.el-collapse-item__arrow,.el-tabs__nav{-webkit-transition:-webkit-transform .3s}.el-tabs__new-tab .el-icon-plus{-webkit-transform:scale(.8,.8);transform:scale(.8,.8)}.el-tabs__new-tab:hover{color:#409EFF}.el-tabs__nav-wrap{overflow:hidden;margin-bottom:-1px;position:relative}.el-tabs__nav-wrap::after{content:\"\";position:absolute;left:0;bottom:0;width:100%;height:2px;background-color:#E4E7ED;z-index:1}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap::after,.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap::after{content:none}.el-tabs__nav-wrap.is-scrollable{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{position:absolute;cursor:pointer;line-height:44px;font-size:12px;color:#909399}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{white-space:nowrap;position:relative;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;float:left;z-index:2}.el-tabs__nav.is-stretch{min-width:100%;display:-webkit-box;display:-ms-flexbox;display:flex}.el-tabs__nav.is-stretch>*{-webkit-box-flex:1;-ms-flex:1;flex:1;text-align:center}.el-tabs__item{padding:0 20px;height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:40px;display:inline-block;list-style:none;font-size:14px;font-weight:500;color:#303133;position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:0}.el-tabs__item:focus.is-active.is-focus:not(:active){-webkit-box-shadow:0 0 2px 2px #409EFF inset;box-shadow:0 0 2px 2px #409EFF inset;border-radius:3px}.el-tabs__item .el-icon-close{border-radius:50%;text-align:center;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);margin-left:5px}.el-tabs__item .el-icon-close:before{-webkit-transform:scale(.9);transform:scale(.9);display:inline-block}.el-tabs__item .el-icon-close:hover{background-color:#C0C4CC;color:#FFF}.el-tabs__item.is-active{color:#409EFF}.el-tabs__item:hover{color:#409EFF;cursor:pointer}.el-tabs__item.is-disabled{color:#C0C4CC;cursor:default}.el-tabs__content{overflow:hidden;position:relative}.el-tabs--card>.el-tabs__header{border-bottom:1px solid #E4E7ED}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid #E4E7ED;border-bottom:none;border-radius:4px 4px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.el-tabs--card>.el-tabs__header .el-tabs__item .el-icon-close{position:relative;font-size:12px;width:0;height:14px;vertical-align:middle;line-height:15px;overflow:hidden;top:-1px;right:-2px;-webkit-transform-origin:100% 50%;transform-origin:100% 50%}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .el-icon-close,.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .el-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid #E4E7ED;-webkit-transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1);transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1)}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:#FFF}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--border-card{background:#FFF;border:1px solid #DCDFE6;-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04);box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04)}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:#F5F7FA;border-bottom:1px solid #E4E7ED;margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__item{-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);border:1px solid transparent;margin-top:-1px;color:#909399}.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item,.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:#409EFF;background-color:#FFF;border-right-color:#DCDFE6;border-left-color:#DCDFE6}.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:#409EFF}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:#C0C4CC}.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:nth-child(2),.el-tabs--bottom .el-tabs__item.is-top:nth-child(2),.el-tabs--top .el-tabs__item.is-bottom:nth-child(2),.el-tabs--top .el-tabs__item.is-top:nth-child(2){padding-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:last-child,.el-tabs--bottom .el-tabs__item.is-top:last-child,.el-tabs--top .el-tabs__item.is-bottom:last-child,.el-tabs--top .el-tabs__item.is-top:last-child{padding-right:0}.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child{padding-right:20px}.el-tabs--bottom .el-tabs__header.is-bottom{margin-bottom:0;margin-top:10px}.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid #DCDFE6}.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-top:-1px;margin-bottom:0}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid transparent}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px}.el-tabs--left,.el-tabs--right{overflow:hidden}.el-tabs--left .el-tabs__header.is-left,.el-tabs--left .el-tabs__header.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-scroll,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{height:100%}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__active-bar.is-right,.el-tabs--right .el-tabs__active-bar.is-left,.el-tabs--right .el-tabs__active-bar.is-right{top:0;bottom:auto;width:2px;height:auto}.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i{-webkit-transform:rotateZ(90deg);transform:rotateZ(90deg)}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{right:auto;bottom:0}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__nav-wrap.is-left::after{right:0;left:auto}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left::after,.el-tabs--left .el-tabs__nav-wrap.is-right::after,.el-tabs--right .el-tabs__nav-wrap.is-left::after,.el-tabs--right .el-tabs__nav-wrap.is-right::after{height:100%;width:2px;bottom:auto;top:0}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{float:none}.el-tabs--left .el-tabs__item.is-left,.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-right{display:block}.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left,.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs--left .el-tabs__header.is-left{float:left;margin-bottom:0;margin-right:10px}.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-left:none;border-right:1px solid #E4E7ED;border-bottom:none;border-top:1px solid #E4E7ED;text-align:left}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid #E4E7ED;border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid #E4E7ED;border-right-color:#fff;border-left:none;border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-radius:4px 0 0 4px;border-bottom:1px solid #E4E7ED;border-right:none}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid #dfe4ed}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:#d1dbe5 transparent}.el-tabs--right .el-tabs__header.is-right{float:right;margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right::after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid #E4E7ED}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid #E4E7ED;border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid #E4E7ED;border-left-color:#fff;border-right:none;border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-radius:0 4px 4px 0;border-bottom:1px solid #E4E7ED;border-left:none}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid #dfe4ed}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:#d1dbe5 transparent}.slideInLeft-transition,.slideInRight-transition{display:inline-block}.slideInRight-enter{-webkit-animation:slideInRight-enter .3s;animation:slideInRight-enter .3s}.slideInRight-leave{position:absolute;left:0;right:0;-webkit-animation:slideInRight-leave .3s;animation:slideInRight-leave .3s}.slideInLeft-enter{-webkit-animation:slideInLeft-enter .3s;animation:slideInLeft-enter .3s}.slideInLeft-leave{position:absolute;left:0;right:0;-webkit-animation:slideInLeft-leave .3s;animation:slideInLeft-leave .3s}@-webkit-keyframes slideInRight-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInRight-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes slideInRight-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}}@keyframes slideInRight-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}}@-webkit-keyframes slideInLeft-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInLeft-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes slideInLeft-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}}@keyframes slideInLeft-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}}.el-tree{position:relative;cursor:default;background:#FFF;color:#606266}.el-tree__empty-block{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-tree__empty-text{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#909399;font-size:14px}.el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:#409EFF}.el-tree-node{white-space:nowrap;outline:0}.el-tree-node:focus>.el-tree-node__content{background-color:#F5F7FA}.el-tree-node.is-drop-inner>.el-tree-node__content .el-tree-node__label{background-color:#409EFF;color:#fff}.el-tree-node__content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:26px;cursor:pointer}.el-tree-node__content>.el-tree-node__expand-icon{padding:6px}.el-tree-node__content>label.el-checkbox{margin-right:8px}.el-tree-node__content:hover{background-color:#F5F7FA}.el-tree.is-dragging .el-tree-node__content{cursor:move}.el-tree.is-dragging.is-drop-not-allow .el-tree-node__content{cursor:not-allowed}.el-tree-node__expand-icon{cursor:pointer;color:#C0C4CC;font-size:12px;-webkit-transform:rotate(0);transform:rotate(0);-webkit-transition:-webkit-transform .3s ease-in-out;transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;transition:transform .3s ease-in-out,-webkit-transform .3s ease-in-out}.el-tree-node__expand-icon.expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-tree-node__expand-icon.is-leaf{color:transparent;cursor:default}.el-tree-node__label{font-size:14px}.el-tree-node__loading-icon{margin-right:8px;font-size:14px;color:#C0C4CC}.el-tree-node>.el-tree-node__children{overflow:hidden;background-color:transparent}.el-tree-node.is-expanded>.el-tree-node__children{display:block}.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:#f0f7ff}.el-alert{width:100%;padding:8px 16px;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;position:relative;background-color:#FFF;overflow:hidden;opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-transition:opacity .2s;transition:opacity .2s}.el-alert.is-light .el-alert__closebtn{color:#C0C4CC}.el-alert.is-dark .el-alert__closebtn,.el-alert.is-dark .el-alert__description{color:#FFF}.el-alert.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-alert--success.is-light{background-color:#f0f9eb;color:#67C23A}.el-alert--success.is-light .el-alert__description{color:#67C23A}.el-alert--success.is-dark{background-color:#67C23A;color:#FFF}.el-alert--info.is-light{background-color:#f4f4f5;color:#909399}.el-alert--info.is-dark{background-color:#909399;color:#FFF}.el-alert--info .el-alert__description{color:#909399}.el-alert--warning.is-light{background-color:#fdf6ec;color:#E6A23C}.el-alert--warning.is-light .el-alert__description{color:#E6A23C}.el-alert--warning.is-dark{background-color:#E6A23C;color:#FFF}.el-alert--error.is-light{background-color:#fef0f0;color:#F56C6C}.el-alert--error.is-light .el-alert__description{color:#F56C6C}.el-alert--error.is-dark{background-color:#F56C6C;color:#FFF}.el-alert__content{display:table-cell;padding:0 8px}.el-alert__icon{font-size:16px;width:16px}.el-alert__icon.is-big{font-size:28px;width:28px}.el-alert__title{font-size:13px;line-height:18px}.el-alert__title.is-bold{font-weight:700}.el-alert .el-alert__description{font-size:12px;margin:5px 0 0}.el-alert__closebtn{font-size:12px;opacity:1;position:absolute;top:12px;right:15px;cursor:pointer}.el-alert-fade-enter,.el-alert-fade-leave-active,.el-loading-fade-enter,.el-loading-fade-leave-active,.el-notification-fade-leave-active{opacity:0}.el-alert__closebtn.is-customed{font-style:normal;font-size:13px;top:9px}.el-notification{display:-webkit-box;display:-ms-flexbox;display:flex;width:330px;padding:14px 26px 14px 13px;border-radius:8px;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #EBEEF5;position:fixed;background-color:#FFF;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;overflow:hidden}.el-notification.right{right:16px}.el-notification.left{left:16px}.el-notification__group{margin-left:13px;margin-right:8px}.el-notification__title{font-weight:700;font-size:16px;color:#303133;margin:0}.el-notification__content{font-size:14px;line-height:21px;margin:6px 0 0;color:#606266;text-align:justify}.el-notification__content p{margin:0}.el-notification__icon{height:24px;width:24px;font-size:24px}.el-notification__closeBtn{position:absolute;top:18px;right:15px;cursor:pointer;color:#909399;font-size:16px}.el-notification__closeBtn:hover{color:#606266}.el-notification .el-icon-success{color:#67C23A}.el-notification .el-icon-error{color:#F56C6C}.el-notification .el-icon-info{color:#909399}.el-notification .el-icon-warning{color:#E6A23C}.el-notification-fade-enter.right{right:0;-webkit-transform:translateX(100%);transform:translateX(100%)}.el-notification-fade-enter.left{left:0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}.el-input-number{position:relative;display:inline-block;width:180px;line-height:38px}.el-input-number .el-input{display:block}.el-input-number .el-input__inner{-webkit-appearance:none;padding-left:50px;padding-right:50px;text-align:center}.el-input-number__decrease,.el-input-number__increase{position:absolute;z-index:1;top:1px;width:40px;height:auto;text-align:center;background:#F5F7FA;color:#606266;cursor:pointer;font-size:13px}.el-input-number__decrease:hover,.el-input-number__increase:hover{color:#409EFF}.el-input-number__decrease:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled),.el-input-number__increase:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled){border-color:#409EFF}.el-input-number__decrease.is-disabled,.el-input-number__increase.is-disabled{color:#C0C4CC;cursor:not-allowed}.el-input-number__increase{right:1px;border-radius:0 4px 4px 0;border-left:1px solid #DCDFE6}.el-input-number__decrease{left:1px;border-radius:4px 0 0 4px;border-right:1px solid #DCDFE6}.el-input-number.is-disabled .el-input-number__decrease,.el-input-number.is-disabled .el-input-number__increase{border-color:#E4E7ED;color:#E4E7ED}.el-input-number.is-disabled .el-input-number__decrease:hover,.el-input-number.is-disabled .el-input-number__increase:hover{color:#E4E7ED;cursor:not-allowed}.el-input-number--medium{width:200px;line-height:34px}.el-input-number--medium .el-input-number__decrease,.el-input-number--medium .el-input-number__increase{width:36px;font-size:14px}.el-input-number--medium .el-input__inner{padding-left:43px;padding-right:43px}.el-input-number--small{width:130px;line-height:30px}.el-input-number--small .el-input-number__decrease,.el-input-number--small .el-input-number__increase{width:32px;font-size:13px}.el-input-number--small .el-input-number__decrease [class*=el-icon],.el-input-number--small .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.9);transform:scale(.9)}.el-input-number--small .el-input__inner{padding-left:39px;padding-right:39px}.el-input-number--mini{width:130px;line-height:26px}.el-input-number--mini .el-input-number__decrease,.el-input-number--mini .el-input-number__increase{width:28px;font-size:12px}.el-input-number--mini .el-input-number__decrease [class*=el-icon],.el-input-number--mini .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.el-input-number--mini .el-input__inner{padding-left:35px;padding-right:35px}.el-input-number.is-without-controls .el-input__inner{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__inner{padding-left:15px;padding-right:50px}.el-input-number.is-controls-right .el-input-number__decrease,.el-input-number.is-controls-right .el-input-number__increase{height:auto;line-height:19px}.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-radius:0 4px 0 0;border-bottom:1px solid #DCDFE6}.el-input-number.is-controls-right .el-input-number__decrease{right:1px;bottom:1px;top:auto;left:auto;border-right:none;border-left:1px solid #DCDFE6;border-radius:0 0 4px}.el-input-number.is-controls-right[class*=medium] [class*=decrease],.el-input-number.is-controls-right[class*=medium] [class*=increase]{line-height:17px}.el-input-number.is-controls-right[class*=small] [class*=decrease],.el-input-number.is-controls-right[class*=small] [class*=increase]{line-height:15px}.el-input-number.is-controls-right[class*=mini] [class*=decrease],.el-input-number.is-controls-right[class*=mini] [class*=increase]{line-height:13px}.el-tooltip__popper{position:absolute;border-radius:4px;padding:10px;z-index:2000;font-size:12px;line-height:1.2;min-width:10px;word-wrap:break-word}.el-tooltip__popper .popper__arrow,.el-tooltip__popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-tooltip__popper .popper__arrow{border-width:6px}.el-tooltip__popper .popper__arrow::after{content:\" \";border-width:5px}.el-progress-bar__inner::after,.el-row::after,.el-row::before,.el-slider::after,.el-slider::before,.el-slider__button-wrapper::after,.el-upload-cover::after{content:\"\"}.el-tooltip__popper[x-placement^=top]{margin-bottom:12px}.el-tooltip__popper[x-placement^=top] .popper__arrow{bottom:-6px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-5px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=bottom]{margin-top:12px}.el-tooltip__popper[x-placement^=bottom] .popper__arrow{top:-6px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=right]{margin-left:12px}.el-tooltip__popper[x-placement^=right] .popper__arrow{left:-6px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=right] .popper__arrow::after{bottom:-5px;left:1px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=left]{margin-right:12px}.el-tooltip__popper[x-placement^=left] .popper__arrow{right:-6px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper.is-dark{background:#303133;color:#FFF}.el-tooltip__popper.is-light{background:#FFF;border:1px solid #303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:#303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow::after{border-top-color:#FFF}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow{border-bottom-color:#303133}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow::after{border-bottom-color:#FFF}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow{border-left-color:#303133}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow::after{border-left-color:#FFF}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow{border-right-color:#303133}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow::after{border-right-color:#FFF}.el-slider::after,.el-slider::before{display:table}.el-slider__button-wrapper .el-tooltip,.el-slider__button-wrapper::after{vertical-align:middle;display:inline-block}.el-slider::after{clear:both}.el-slider__runway{width:100%;height:6px;margin:16px 0;background-color:#E4E7ED;border-radius:3px;position:relative;cursor:pointer;vertical-align:middle}.el-slider__runway.show-input{margin-right:160px;width:auto}.el-slider__runway.disabled{cursor:default}.el-slider__runway.disabled .el-slider__bar{background-color:#C0C4CC}.el-slider__runway.disabled .el-slider__button{border-color:#C0C4CC}.el-slider__runway.disabled .el-slider__button-wrapper.dragging,.el-slider__runway.disabled .el-slider__button-wrapper.hover,.el-slider__runway.disabled .el-slider__button-wrapper:hover{cursor:not-allowed}.el-slider__runway.disabled .el-slider__button.dragging,.el-slider__runway.disabled .el-slider__button.hover,.el-slider__runway.disabled .el-slider__button:hover{-webkit-transform:scale(1);transform:scale(1);cursor:not-allowed}.el-slider__button-wrapper,.el-slider__stop{-webkit-transform:translateX(-50%);position:absolute}.el-slider__input{float:right;margin-top:3px;width:130px}.el-slider__input.el-input-number--mini{margin-top:5px}.el-slider__input.el-input-number--medium{margin-top:0}.el-slider__input.el-input-number--large{margin-top:-2px}.el-slider__bar{height:6px;background-color:#409EFF;border-top-left-radius:3px;border-bottom-left-radius:3px;position:absolute}.el-slider__button-wrapper{height:36px;width:36px;z-index:1001;top:-15px;transform:translateX(-50%);background-color:transparent;text-align:center;user-select:none;line-height:normal}.el-slider__button-wrapper::after{height:100%}.el-slider__button-wrapper.hover,.el-slider__button-wrapper:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button-wrapper.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__button{width:16px;height:16px;border:2px solid #409EFF;background-color:#FFF;border-radius:50%;-webkit-transition:.2s;transition:.2s;user-select:none}.el-image-viewer__btn,.el-step__icon-inner{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.el-slider__button.dragging,.el-slider__button.hover,.el-slider__button:hover{-webkit-transform:scale(1.2);transform:scale(1.2)}.el-slider__button.hover,.el-slider__button:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__stop{height:6px;width:6px;border-radius:100%;background-color:#FFF;transform:translateX(-50%)}.el-slider__marks{top:0;left:12px;width:18px;height:100%}.el-slider__marks-text{position:absolute;-webkit-transform:translateX(-50%);transform:translateX(-50%);font-size:14px;color:#909399;margin-top:15px}.el-slider.is-vertical{position:relative}.el-slider.is-vertical .el-slider__runway{width:6px;height:100%;margin:0 16px}.el-slider.is-vertical .el-slider__bar{width:6px;height:auto;border-radius:0 0 3px 3px}.el-slider.is-vertical .el-slider__button-wrapper{top:auto;left:-15px;-webkit-transform:translateY(50%);transform:translateY(50%)}.el-slider.is-vertical .el-slider__stop{-webkit-transform:translateY(50%);transform:translateY(50%)}.el-slider.is-vertical.el-slider--with-input{padding-bottom:58px}.el-slider.is-vertical.el-slider--with-input .el-slider__input{overflow:visible;float:none;position:absolute;bottom:22px;width:36px;margin-top:15px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input__inner{text-align:center;padding-left:5px;padding-right:5px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{top:32px;margin-top:-1px;border:1px solid #DCDFE6;line-height:20px;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease{width:18px;right:18px;border-bottom-left-radius:4px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{width:19px;border-bottom-right-radius:4px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase~.el-input .el-input__inner{border-bottom-left-radius:0;border-bottom-right-radius:0}.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__increase{border-color:#C0C4CC}.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__increase{border-color:#409EFF}.el-slider.is-vertical .el-slider__marks-text{margin-top:0;left:15px;-webkit-transform:translateY(50%);transform:translateY(50%)}.el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{position:absolute;z-index:2000;background-color:rgba(255,255,255,.9);margin:0;top:0;right:0;bottom:0;left:0;-webkit-transition:opacity .3s;transition:opacity .3s}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:-25px}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:50px;width:50px}.el-loading-spinner{top:50%;margin-top:-21px;width:100%;text-align:center;position:absolute}.el-col-pull-0,.el-col-pull-1,.el-col-pull-10,.el-col-pull-11,.el-col-pull-13,.el-col-pull-14,.el-col-pull-15,.el-col-pull-16,.el-col-pull-17,.el-col-pull-18,.el-col-pull-19,.el-col-pull-2,.el-col-pull-20,.el-col-pull-21,.el-col-pull-22,.el-col-pull-23,.el-col-pull-24,.el-col-pull-3,.el-col-pull-4,.el-col-pull-5,.el-col-pull-6,.el-col-pull-7,.el-col-pull-8,.el-col-pull-9,.el-col-push-0,.el-col-push-1,.el-col-push-10,.el-col-push-11,.el-col-push-12,.el-col-push-13,.el-col-push-14,.el-col-push-15,.el-col-push-16,.el-col-push-17,.el-col-push-18,.el-col-push-19,.el-col-push-2,.el-col-push-20,.el-col-push-21,.el-col-push-22,.el-col-push-23,.el-col-push-24,.el-col-push-3,.el-col-push-4,.el-col-push-5,.el-col-push-6,.el-col-push-7,.el-col-push-8,.el-col-push-9,.el-row{position:relative}.el-loading-spinner .el-loading-text{color:#409EFF;margin:3px 0;font-size:14px}.el-loading-spinner .circular{height:42px;width:42px;-webkit-animation:loading-rotate 2s linear infinite;animation:loading-rotate 2s linear infinite}.el-loading-spinner .path{-webkit-animation:loading-dash 1.5s ease-in-out infinite;animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:#409EFF;stroke-linecap:round}.el-loading-spinner i{color:#409EFF}@-webkit-keyframes loading-rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes loading-rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}100%{stroke-dasharray:90,150;stroke-dashoffset:-120px}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}100%{stroke-dasharray:90,150;stroke-dashoffset:-120px}}.el-row{-webkit-box-sizing:border-box;box-sizing:border-box}.el-row::after,.el-row::before{display:table}.el-row::after{clear:both}.el-row--flex{display:-webkit-box;display:-ms-flexbox;display:flex}.el-col-0,.el-row--flex:after,.el-row--flex:before{display:none}.el-row--flex.is-justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-row--flex.is-justify-end{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.el-row--flex.is-justify-space-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.el-row--flex.is-justify-space-around{-ms-flex-pack:distribute;justify-content:space-around}.el-row--flex.is-align-middle{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-row--flex.is-align-bottom{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}[class*=el-col-]{float:left;-webkit-box-sizing:border-box;box-sizing:border-box}.el-upload--picture-card,.el-upload-dragger{-webkit-box-sizing:border-box;cursor:pointer}.el-col-0{width:0%}.el-col-offset-0{margin-left:0}.el-col-pull-0{right:0}.el-col-push-0{left:0}.el-col-1{width:4.16667%}.el-col-offset-1{margin-left:4.16667%}.el-col-pull-1{right:4.16667%}.el-col-push-1{left:4.16667%}.el-col-2{width:8.33333%}.el-col-offset-2{margin-left:8.33333%}.el-col-pull-2{right:8.33333%}.el-col-push-2{left:8.33333%}.el-col-3{width:12.5%}.el-col-offset-3{margin-left:12.5%}.el-col-pull-3{right:12.5%}.el-col-push-3{left:12.5%}.el-col-4{width:16.66667%}.el-col-offset-4{margin-left:16.66667%}.el-col-pull-4{right:16.66667%}.el-col-push-4{left:16.66667%}.el-col-5{width:20.83333%}.el-col-offset-5{margin-left:20.83333%}.el-col-pull-5{right:20.83333%}.el-col-push-5{left:20.83333%}.el-col-6{width:25%}.el-col-offset-6{margin-left:25%}.el-col-pull-6{right:25%}.el-col-push-6{left:25%}.el-col-7{width:29.16667%}.el-col-offset-7{margin-left:29.16667%}.el-col-pull-7{right:29.16667%}.el-col-push-7{left:29.16667%}.el-col-8{width:33.33333%}.el-col-offset-8{margin-left:33.33333%}.el-col-pull-8{right:33.33333%}.el-col-push-8{left:33.33333%}.el-col-9{width:37.5%}.el-col-offset-9{margin-left:37.5%}.el-col-pull-9{right:37.5%}.el-col-push-9{left:37.5%}.el-col-10{width:41.66667%}.el-col-offset-10{margin-left:41.66667%}.el-col-pull-10{right:41.66667%}.el-col-push-10{left:41.66667%}.el-col-11{width:45.83333%}.el-col-offset-11{margin-left:45.83333%}.el-col-pull-11{right:45.83333%}.el-col-push-11{left:45.83333%}.el-col-12{width:50%}.el-col-offset-12{margin-left:50%}.el-col-pull-12{position:relative;right:50%}.el-col-push-12{left:50%}.el-col-13{width:54.16667%}.el-col-offset-13{margin-left:54.16667%}.el-col-pull-13{right:54.16667%}.el-col-push-13{left:54.16667%}.el-col-14{width:58.33333%}.el-col-offset-14{margin-left:58.33333%}.el-col-pull-14{right:58.33333%}.el-col-push-14{left:58.33333%}.el-col-15{width:62.5%}.el-col-offset-15{margin-left:62.5%}.el-col-pull-15{right:62.5%}.el-col-push-15{left:62.5%}.el-col-16{width:66.66667%}.el-col-offset-16{margin-left:66.66667%}.el-col-pull-16{right:66.66667%}.el-col-push-16{left:66.66667%}.el-col-17{width:70.83333%}.el-col-offset-17{margin-left:70.83333%}.el-col-pull-17{right:70.83333%}.el-col-push-17{left:70.83333%}.el-col-18{width:75%}.el-col-offset-18{margin-left:75%}.el-col-pull-18{right:75%}.el-col-push-18{left:75%}.el-col-19{width:79.16667%}.el-col-offset-19{margin-left:79.16667%}.el-col-pull-19{right:79.16667%}.el-col-push-19{left:79.16667%}.el-col-20{width:83.33333%}.el-col-offset-20{margin-left:83.33333%}.el-col-pull-20{right:83.33333%}.el-col-push-20{left:83.33333%}.el-col-21{width:87.5%}.el-col-offset-21{margin-left:87.5%}.el-col-pull-21{right:87.5%}.el-col-push-21{left:87.5%}.el-col-22{width:91.66667%}.el-col-offset-22{margin-left:91.66667%}.el-col-pull-22{right:91.66667%}.el-col-push-22{left:91.66667%}.el-col-23{width:95.83333%}.el-col-offset-23{margin-left:95.83333%}.el-col-pull-23{right:95.83333%}.el-col-push-23{left:95.83333%}.el-col-24{width:100%}.el-col-offset-24{margin-left:100%}.el-col-pull-24{right:100%}.el-col-push-24{left:100%}@media only screen and (max-width:767px){.el-col-xs-0{display:none;width:0%}.el-col-xs-offset-0{margin-left:0}.el-col-xs-pull-0{position:relative;right:0}.el-col-xs-push-0{position:relative;left:0}.el-col-xs-1{width:4.16667%}.el-col-xs-offset-1{margin-left:4.16667%}.el-col-xs-pull-1{position:relative;right:4.16667%}.el-col-xs-push-1{position:relative;left:4.16667%}.el-col-xs-2{width:8.33333%}.el-col-xs-offset-2{margin-left:8.33333%}.el-col-xs-pull-2{position:relative;right:8.33333%}.el-col-xs-push-2{position:relative;left:8.33333%}.el-col-xs-3{width:12.5%}.el-col-xs-offset-3{margin-left:12.5%}.el-col-xs-pull-3{position:relative;right:12.5%}.el-col-xs-push-3{position:relative;left:12.5%}.el-col-xs-4{width:16.66667%}.el-col-xs-offset-4{margin-left:16.66667%}.el-col-xs-pull-4{position:relative;right:16.66667%}.el-col-xs-push-4{position:relative;left:16.66667%}.el-col-xs-5{width:20.83333%}.el-col-xs-offset-5{margin-left:20.83333%}.el-col-xs-pull-5{position:relative;right:20.83333%}.el-col-xs-push-5{position:relative;left:20.83333%}.el-col-xs-6{width:25%}.el-col-xs-offset-6{margin-left:25%}.el-col-xs-pull-6{position:relative;right:25%}.el-col-xs-push-6{position:relative;left:25%}.el-col-xs-7{width:29.16667%}.el-col-xs-offset-7{margin-left:29.16667%}.el-col-xs-pull-7{position:relative;right:29.16667%}.el-col-xs-push-7{position:relative;left:29.16667%}.el-col-xs-8{width:33.33333%}.el-col-xs-offset-8{margin-left:33.33333%}.el-col-xs-pull-8{position:relative;right:33.33333%}.el-col-xs-push-8{position:relative;left:33.33333%}.el-col-xs-9{width:37.5%}.el-col-xs-offset-9{margin-left:37.5%}.el-col-xs-pull-9{position:relative;right:37.5%}.el-col-xs-push-9{position:relative;left:37.5%}.el-col-xs-10{width:41.66667%}.el-col-xs-offset-10{margin-left:41.66667%}.el-col-xs-pull-10{position:relative;right:41.66667%}.el-col-xs-push-10{position:relative;left:41.66667%}.el-col-xs-11{width:45.83333%}.el-col-xs-offset-11{margin-left:45.83333%}.el-col-xs-pull-11{position:relative;right:45.83333%}.el-col-xs-push-11{position:relative;left:45.83333%}.el-col-xs-12{width:50%}.el-col-xs-offset-12{margin-left:50%}.el-col-xs-pull-12{position:relative;right:50%}.el-col-xs-push-12{position:relative;left:50%}.el-col-xs-13{width:54.16667%}.el-col-xs-offset-13{margin-left:54.16667%}.el-col-xs-pull-13{position:relative;right:54.16667%}.el-col-xs-push-13{position:relative;left:54.16667%}.el-col-xs-14{width:58.33333%}.el-col-xs-offset-14{margin-left:58.33333%}.el-col-xs-pull-14{position:relative;right:58.33333%}.el-col-xs-push-14{position:relative;left:58.33333%}.el-col-xs-15{width:62.5%}.el-col-xs-offset-15{margin-left:62.5%}.el-col-xs-pull-15{position:relative;right:62.5%}.el-col-xs-push-15{position:relative;left:62.5%}.el-col-xs-16{width:66.66667%}.el-col-xs-offset-16{margin-left:66.66667%}.el-col-xs-pull-16{position:relative;right:66.66667%}.el-col-xs-push-16{position:relative;left:66.66667%}.el-col-xs-17{width:70.83333%}.el-col-xs-offset-17{margin-left:70.83333%}.el-col-xs-pull-17{position:relative;right:70.83333%}.el-col-xs-push-17{position:relative;left:70.83333%}.el-col-xs-18{width:75%}.el-col-xs-offset-18{margin-left:75%}.el-col-xs-pull-18{position:relative;right:75%}.el-col-xs-push-18{position:relative;left:75%}.el-col-xs-19{width:79.16667%}.el-col-xs-offset-19{margin-left:79.16667%}.el-col-xs-pull-19{position:relative;right:79.16667%}.el-col-xs-push-19{position:relative;left:79.16667%}.el-col-xs-20{width:83.33333%}.el-col-xs-offset-20{margin-left:83.33333%}.el-col-xs-pull-20{position:relative;right:83.33333%}.el-col-xs-push-20{position:relative;left:83.33333%}.el-col-xs-21{width:87.5%}.el-col-xs-offset-21{margin-left:87.5%}.el-col-xs-pull-21{position:relative;right:87.5%}.el-col-xs-push-21{position:relative;left:87.5%}.el-col-xs-22{width:91.66667%}.el-col-xs-offset-22{margin-left:91.66667%}.el-col-xs-pull-22{position:relative;right:91.66667%}.el-col-xs-push-22{position:relative;left:91.66667%}.el-col-xs-23{width:95.83333%}.el-col-xs-offset-23{margin-left:95.83333%}.el-col-xs-pull-23{position:relative;right:95.83333%}.el-col-xs-push-23{position:relative;left:95.83333%}.el-col-xs-24{width:100%}.el-col-xs-offset-24{margin-left:100%}.el-col-xs-pull-24{position:relative;right:100%}.el-col-xs-push-24{position:relative;left:100%}}@media only screen and (min-width:768px){.el-col-sm-0{display:none;width:0%}.el-col-sm-offset-0{margin-left:0}.el-col-sm-pull-0{position:relative;right:0}.el-col-sm-push-0{position:relative;left:0}.el-col-sm-1{width:4.16667%}.el-col-sm-offset-1{margin-left:4.16667%}.el-col-sm-pull-1{position:relative;right:4.16667%}.el-col-sm-push-1{position:relative;left:4.16667%}.el-col-sm-2{width:8.33333%}.el-col-sm-offset-2{margin-left:8.33333%}.el-col-sm-pull-2{position:relative;right:8.33333%}.el-col-sm-push-2{position:relative;left:8.33333%}.el-col-sm-3{width:12.5%}.el-col-sm-offset-3{margin-left:12.5%}.el-col-sm-pull-3{position:relative;right:12.5%}.el-col-sm-push-3{position:relative;left:12.5%}.el-col-sm-4{width:16.66667%}.el-col-sm-offset-4{margin-left:16.66667%}.el-col-sm-pull-4{position:relative;right:16.66667%}.el-col-sm-push-4{position:relative;left:16.66667%}.el-col-sm-5{width:20.83333%}.el-col-sm-offset-5{margin-left:20.83333%}.el-col-sm-pull-5{position:relative;right:20.83333%}.el-col-sm-push-5{position:relative;left:20.83333%}.el-col-sm-6{width:25%}.el-col-sm-offset-6{margin-left:25%}.el-col-sm-pull-6{position:relative;right:25%}.el-col-sm-push-6{position:relative;left:25%}.el-col-sm-7{width:29.16667%}.el-col-sm-offset-7{margin-left:29.16667%}.el-col-sm-pull-7{position:relative;right:29.16667%}.el-col-sm-push-7{position:relative;left:29.16667%}.el-col-sm-8{width:33.33333%}.el-col-sm-offset-8{margin-left:33.33333%}.el-col-sm-pull-8{position:relative;right:33.33333%}.el-col-sm-push-8{position:relative;left:33.33333%}.el-col-sm-9{width:37.5%}.el-col-sm-offset-9{margin-left:37.5%}.el-col-sm-pull-9{position:relative;right:37.5%}.el-col-sm-push-9{position:relative;left:37.5%}.el-col-sm-10{width:41.66667%}.el-col-sm-offset-10{margin-left:41.66667%}.el-col-sm-pull-10{position:relative;right:41.66667%}.el-col-sm-push-10{position:relative;left:41.66667%}.el-col-sm-11{width:45.83333%}.el-col-sm-offset-11{margin-left:45.83333%}.el-col-sm-pull-11{position:relative;right:45.83333%}.el-col-sm-push-11{position:relative;left:45.83333%}.el-col-sm-12{width:50%}.el-col-sm-offset-12{margin-left:50%}.el-col-sm-pull-12{position:relative;right:50%}.el-col-sm-push-12{position:relative;left:50%}.el-col-sm-13{width:54.16667%}.el-col-sm-offset-13{margin-left:54.16667%}.el-col-sm-pull-13{position:relative;right:54.16667%}.el-col-sm-push-13{position:relative;left:54.16667%}.el-col-sm-14{width:58.33333%}.el-col-sm-offset-14{margin-left:58.33333%}.el-col-sm-pull-14{position:relative;right:58.33333%}.el-col-sm-push-14{position:relative;left:58.33333%}.el-col-sm-15{width:62.5%}.el-col-sm-offset-15{margin-left:62.5%}.el-col-sm-pull-15{position:relative;right:62.5%}.el-col-sm-push-15{position:relative;left:62.5%}.el-col-sm-16{width:66.66667%}.el-col-sm-offset-16{margin-left:66.66667%}.el-col-sm-pull-16{position:relative;right:66.66667%}.el-col-sm-push-16{position:relative;left:66.66667%}.el-col-sm-17{width:70.83333%}.el-col-sm-offset-17{margin-left:70.83333%}.el-col-sm-pull-17{position:relative;right:70.83333%}.el-col-sm-push-17{position:relative;left:70.83333%}.el-col-sm-18{width:75%}.el-col-sm-offset-18{margin-left:75%}.el-col-sm-pull-18{position:relative;right:75%}.el-col-sm-push-18{position:relative;left:75%}.el-col-sm-19{width:79.16667%}.el-col-sm-offset-19{margin-left:79.16667%}.el-col-sm-pull-19{position:relative;right:79.16667%}.el-col-sm-push-19{position:relative;left:79.16667%}.el-col-sm-20{width:83.33333%}.el-col-sm-offset-20{margin-left:83.33333%}.el-col-sm-pull-20{position:relative;right:83.33333%}.el-col-sm-push-20{position:relative;left:83.33333%}.el-col-sm-21{width:87.5%}.el-col-sm-offset-21{margin-left:87.5%}.el-col-sm-pull-21{position:relative;right:87.5%}.el-col-sm-push-21{position:relative;left:87.5%}.el-col-sm-22{width:91.66667%}.el-col-sm-offset-22{margin-left:91.66667%}.el-col-sm-pull-22{position:relative;right:91.66667%}.el-col-sm-push-22{position:relative;left:91.66667%}.el-col-sm-23{width:95.83333%}.el-col-sm-offset-23{margin-left:95.83333%}.el-col-sm-pull-23{position:relative;right:95.83333%}.el-col-sm-push-23{position:relative;left:95.83333%}.el-col-sm-24{width:100%}.el-col-sm-offset-24{margin-left:100%}.el-col-sm-pull-24{position:relative;right:100%}.el-col-sm-push-24{position:relative;left:100%}}@media only screen and (min-width:992px){.el-col-md-0{display:none;width:0%}.el-col-md-offset-0{margin-left:0}.el-col-md-pull-0{position:relative;right:0}.el-col-md-push-0{position:relative;left:0}.el-col-md-1{width:4.16667%}.el-col-md-offset-1{margin-left:4.16667%}.el-col-md-pull-1{position:relative;right:4.16667%}.el-col-md-push-1{position:relative;left:4.16667%}.el-col-md-2{width:8.33333%}.el-col-md-offset-2{margin-left:8.33333%}.el-col-md-pull-2{position:relative;right:8.33333%}.el-col-md-push-2{position:relative;left:8.33333%}.el-col-md-3{width:12.5%}.el-col-md-offset-3{margin-left:12.5%}.el-col-md-pull-3{position:relative;right:12.5%}.el-col-md-push-3{position:relative;left:12.5%}.el-col-md-4{width:16.66667%}.el-col-md-offset-4{margin-left:16.66667%}.el-col-md-pull-4{position:relative;right:16.66667%}.el-col-md-push-4{position:relative;left:16.66667%}.el-col-md-5{width:20.83333%}.el-col-md-offset-5{margin-left:20.83333%}.el-col-md-pull-5{position:relative;right:20.83333%}.el-col-md-push-5{position:relative;left:20.83333%}.el-col-md-6{width:25%}.el-col-md-offset-6{margin-left:25%}.el-col-md-pull-6{position:relative;right:25%}.el-col-md-push-6{position:relative;left:25%}.el-col-md-7{width:29.16667%}.el-col-md-offset-7{margin-left:29.16667%}.el-col-md-pull-7{position:relative;right:29.16667%}.el-col-md-push-7{position:relative;left:29.16667%}.el-col-md-8{width:33.33333%}.el-col-md-offset-8{margin-left:33.33333%}.el-col-md-pull-8{position:relative;right:33.33333%}.el-col-md-push-8{position:relative;left:33.33333%}.el-col-md-9{width:37.5%}.el-col-md-offset-9{margin-left:37.5%}.el-col-md-pull-9{position:relative;right:37.5%}.el-col-md-push-9{position:relative;left:37.5%}.el-col-md-10{width:41.66667%}.el-col-md-offset-10{margin-left:41.66667%}.el-col-md-pull-10{position:relative;right:41.66667%}.el-col-md-push-10{position:relative;left:41.66667%}.el-col-md-11{width:45.83333%}.el-col-md-offset-11{margin-left:45.83333%}.el-col-md-pull-11{position:relative;right:45.83333%}.el-col-md-push-11{position:relative;left:45.83333%}.el-col-md-12{width:50%}.el-col-md-offset-12{margin-left:50%}.el-col-md-pull-12{position:relative;right:50%}.el-col-md-push-12{position:relative;left:50%}.el-col-md-13{width:54.16667%}.el-col-md-offset-13{margin-left:54.16667%}.el-col-md-pull-13{position:relative;right:54.16667%}.el-col-md-push-13{position:relative;left:54.16667%}.el-col-md-14{width:58.33333%}.el-col-md-offset-14{margin-left:58.33333%}.el-col-md-pull-14{position:relative;right:58.33333%}.el-col-md-push-14{position:relative;left:58.33333%}.el-col-md-15{width:62.5%}.el-col-md-offset-15{margin-left:62.5%}.el-col-md-pull-15{position:relative;right:62.5%}.el-col-md-push-15{position:relative;left:62.5%}.el-col-md-16{width:66.66667%}.el-col-md-offset-16{margin-left:66.66667%}.el-col-md-pull-16{position:relative;right:66.66667%}.el-col-md-push-16{position:relative;left:66.66667%}.el-col-md-17{width:70.83333%}.el-col-md-offset-17{margin-left:70.83333%}.el-col-md-pull-17{position:relative;right:70.83333%}.el-col-md-push-17{position:relative;left:70.83333%}.el-col-md-18{width:75%}.el-col-md-offset-18{margin-left:75%}.el-col-md-pull-18{position:relative;right:75%}.el-col-md-push-18{position:relative;left:75%}.el-col-md-19{width:79.16667%}.el-col-md-offset-19{margin-left:79.16667%}.el-col-md-pull-19{position:relative;right:79.16667%}.el-col-md-push-19{position:relative;left:79.16667%}.el-col-md-20{width:83.33333%}.el-col-md-offset-20{margin-left:83.33333%}.el-col-md-pull-20{position:relative;right:83.33333%}.el-col-md-push-20{position:relative;left:83.33333%}.el-col-md-21{width:87.5%}.el-col-md-offset-21{margin-left:87.5%}.el-col-md-pull-21{position:relative;right:87.5%}.el-col-md-push-21{position:relative;left:87.5%}.el-col-md-22{width:91.66667%}.el-col-md-offset-22{margin-left:91.66667%}.el-col-md-pull-22{position:relative;right:91.66667%}.el-col-md-push-22{position:relative;left:91.66667%}.el-col-md-23{width:95.83333%}.el-col-md-offset-23{margin-left:95.83333%}.el-col-md-pull-23{position:relative;right:95.83333%}.el-col-md-push-23{position:relative;left:95.83333%}.el-col-md-24{width:100%}.el-col-md-offset-24{margin-left:100%}.el-col-md-pull-24{position:relative;right:100%}.el-col-md-push-24{position:relative;left:100%}}@media only screen and (min-width:1200px){.el-col-lg-0{display:none;width:0%}.el-col-lg-offset-0{margin-left:0}.el-col-lg-pull-0{position:relative;right:0}.el-col-lg-push-0{position:relative;left:0}.el-col-lg-1{width:4.16667%}.el-col-lg-offset-1{margin-left:4.16667%}.el-col-lg-pull-1{position:relative;right:4.16667%}.el-col-lg-push-1{position:relative;left:4.16667%}.el-col-lg-2{width:8.33333%}.el-col-lg-offset-2{margin-left:8.33333%}.el-col-lg-pull-2{position:relative;right:8.33333%}.el-col-lg-push-2{position:relative;left:8.33333%}.el-col-lg-3{width:12.5%}.el-col-lg-offset-3{margin-left:12.5%}.el-col-lg-pull-3{position:relative;right:12.5%}.el-col-lg-push-3{position:relative;left:12.5%}.el-col-lg-4{width:16.66667%}.el-col-lg-offset-4{margin-left:16.66667%}.el-col-lg-pull-4{position:relative;right:16.66667%}.el-col-lg-push-4{position:relative;left:16.66667%}.el-col-lg-5{width:20.83333%}.el-col-lg-offset-5{margin-left:20.83333%}.el-col-lg-pull-5{position:relative;right:20.83333%}.el-col-lg-push-5{position:relative;left:20.83333%}.el-col-lg-6{width:25%}.el-col-lg-offset-6{margin-left:25%}.el-col-lg-pull-6{position:relative;right:25%}.el-col-lg-push-6{position:relative;left:25%}.el-col-lg-7{width:29.16667%}.el-col-lg-offset-7{margin-left:29.16667%}.el-col-lg-pull-7{position:relative;right:29.16667%}.el-col-lg-push-7{position:relative;left:29.16667%}.el-col-lg-8{width:33.33333%}.el-col-lg-offset-8{margin-left:33.33333%}.el-col-lg-pull-8{position:relative;right:33.33333%}.el-col-lg-push-8{position:relative;left:33.33333%}.el-col-lg-9{width:37.5%}.el-col-lg-offset-9{margin-left:37.5%}.el-col-lg-pull-9{position:relative;right:37.5%}.el-col-lg-push-9{position:relative;left:37.5%}.el-col-lg-10{width:41.66667%}.el-col-lg-offset-10{margin-left:41.66667%}.el-col-lg-pull-10{position:relative;right:41.66667%}.el-col-lg-push-10{position:relative;left:41.66667%}.el-col-lg-11{width:45.83333%}.el-col-lg-offset-11{margin-left:45.83333%}.el-col-lg-pull-11{position:relative;right:45.83333%}.el-col-lg-push-11{position:relative;left:45.83333%}.el-col-lg-12{width:50%}.el-col-lg-offset-12{margin-left:50%}.el-col-lg-pull-12{position:relative;right:50%}.el-col-lg-push-12{position:relative;left:50%}.el-col-lg-13{width:54.16667%}.el-col-lg-offset-13{margin-left:54.16667%}.el-col-lg-pull-13{position:relative;right:54.16667%}.el-col-lg-push-13{position:relative;left:54.16667%}.el-col-lg-14{width:58.33333%}.el-col-lg-offset-14{margin-left:58.33333%}.el-col-lg-pull-14{position:relative;right:58.33333%}.el-col-lg-push-14{position:relative;left:58.33333%}.el-col-lg-15{width:62.5%}.el-col-lg-offset-15{margin-left:62.5%}.el-col-lg-pull-15{position:relative;right:62.5%}.el-col-lg-push-15{position:relative;left:62.5%}.el-col-lg-16{width:66.66667%}.el-col-lg-offset-16{margin-left:66.66667%}.el-col-lg-pull-16{position:relative;right:66.66667%}.el-col-lg-push-16{position:relative;left:66.66667%}.el-col-lg-17{width:70.83333%}.el-col-lg-offset-17{margin-left:70.83333%}.el-col-lg-pull-17{position:relative;right:70.83333%}.el-col-lg-push-17{position:relative;left:70.83333%}.el-col-lg-18{width:75%}.el-col-lg-offset-18{margin-left:75%}.el-col-lg-pull-18{position:relative;right:75%}.el-col-lg-push-18{position:relative;left:75%}.el-col-lg-19{width:79.16667%}.el-col-lg-offset-19{margin-left:79.16667%}.el-col-lg-pull-19{position:relative;right:79.16667%}.el-col-lg-push-19{position:relative;left:79.16667%}.el-col-lg-20{width:83.33333%}.el-col-lg-offset-20{margin-left:83.33333%}.el-col-lg-pull-20{position:relative;right:83.33333%}.el-col-lg-push-20{position:relative;left:83.33333%}.el-col-lg-21{width:87.5%}.el-col-lg-offset-21{margin-left:87.5%}.el-col-lg-pull-21{position:relative;right:87.5%}.el-col-lg-push-21{position:relative;left:87.5%}.el-col-lg-22{width:91.66667%}.el-col-lg-offset-22{margin-left:91.66667%}.el-col-lg-pull-22{position:relative;right:91.66667%}.el-col-lg-push-22{position:relative;left:91.66667%}.el-col-lg-23{width:95.83333%}.el-col-lg-offset-23{margin-left:95.83333%}.el-col-lg-pull-23{position:relative;right:95.83333%}.el-col-lg-push-23{position:relative;left:95.83333%}.el-col-lg-24{width:100%}.el-col-lg-offset-24{margin-left:100%}.el-col-lg-pull-24{position:relative;right:100%}.el-col-lg-push-24{position:relative;left:100%}}@media only screen and (min-width:1920px){.el-col-xl-0{display:none;width:0%}.el-col-xl-offset-0{margin-left:0}.el-col-xl-pull-0{position:relative;right:0}.el-col-xl-push-0{position:relative;left:0}.el-col-xl-1{width:4.16667%}.el-col-xl-offset-1{margin-left:4.16667%}.el-col-xl-pull-1{position:relative;right:4.16667%}.el-col-xl-push-1{position:relative;left:4.16667%}.el-col-xl-2{width:8.33333%}.el-col-xl-offset-2{margin-left:8.33333%}.el-col-xl-pull-2{position:relative;right:8.33333%}.el-col-xl-push-2{position:relative;left:8.33333%}.el-col-xl-3{width:12.5%}.el-col-xl-offset-3{margin-left:12.5%}.el-col-xl-pull-3{position:relative;right:12.5%}.el-col-xl-push-3{position:relative;left:12.5%}.el-col-xl-4{width:16.66667%}.el-col-xl-offset-4{margin-left:16.66667%}.el-col-xl-pull-4{position:relative;right:16.66667%}.el-col-xl-push-4{position:relative;left:16.66667%}.el-col-xl-5{width:20.83333%}.el-col-xl-offset-5{margin-left:20.83333%}.el-col-xl-pull-5{position:relative;right:20.83333%}.el-col-xl-push-5{position:relative;left:20.83333%}.el-col-xl-6{width:25%}.el-col-xl-offset-6{margin-left:25%}.el-col-xl-pull-6{position:relative;right:25%}.el-col-xl-push-6{position:relative;left:25%}.el-col-xl-7{width:29.16667%}.el-col-xl-offset-7{margin-left:29.16667%}.el-col-xl-pull-7{position:relative;right:29.16667%}.el-col-xl-push-7{position:relative;left:29.16667%}.el-col-xl-8{width:33.33333%}.el-col-xl-offset-8{margin-left:33.33333%}.el-col-xl-pull-8{position:relative;right:33.33333%}.el-col-xl-push-8{position:relative;left:33.33333%}.el-col-xl-9{width:37.5%}.el-col-xl-offset-9{margin-left:37.5%}.el-col-xl-pull-9{position:relative;right:37.5%}.el-col-xl-push-9{position:relative;left:37.5%}.el-col-xl-10{width:41.66667%}.el-col-xl-offset-10{margin-left:41.66667%}.el-col-xl-pull-10{position:relative;right:41.66667%}.el-col-xl-push-10{position:relative;left:41.66667%}.el-col-xl-11{width:45.83333%}.el-col-xl-offset-11{margin-left:45.83333%}.el-col-xl-pull-11{position:relative;right:45.83333%}.el-col-xl-push-11{position:relative;left:45.83333%}.el-col-xl-12{width:50%}.el-col-xl-offset-12{margin-left:50%}.el-col-xl-pull-12{position:relative;right:50%}.el-col-xl-push-12{position:relative;left:50%}.el-col-xl-13{width:54.16667%}.el-col-xl-offset-13{margin-left:54.16667%}.el-col-xl-pull-13{position:relative;right:54.16667%}.el-col-xl-push-13{position:relative;left:54.16667%}.el-col-xl-14{width:58.33333%}.el-col-xl-offset-14{margin-left:58.33333%}.el-col-xl-pull-14{position:relative;right:58.33333%}.el-col-xl-push-14{position:relative;left:58.33333%}.el-col-xl-15{width:62.5%}.el-col-xl-offset-15{margin-left:62.5%}.el-col-xl-pull-15{position:relative;right:62.5%}.el-col-xl-push-15{position:relative;left:62.5%}.el-col-xl-16{width:66.66667%}.el-col-xl-offset-16{margin-left:66.66667%}.el-col-xl-pull-16{position:relative;right:66.66667%}.el-col-xl-push-16{position:relative;left:66.66667%}.el-col-xl-17{width:70.83333%}.el-col-xl-offset-17{margin-left:70.83333%}.el-col-xl-pull-17{position:relative;right:70.83333%}.el-col-xl-push-17{position:relative;left:70.83333%}.el-col-xl-18{width:75%}.el-col-xl-offset-18{margin-left:75%}.el-col-xl-pull-18{position:relative;right:75%}.el-col-xl-push-18{position:relative;left:75%}.el-col-xl-19{width:79.16667%}.el-col-xl-offset-19{margin-left:79.16667%}.el-col-xl-pull-19{position:relative;right:79.16667%}.el-col-xl-push-19{position:relative;left:79.16667%}.el-col-xl-20{width:83.33333%}.el-col-xl-offset-20{margin-left:83.33333%}.el-col-xl-pull-20{position:relative;right:83.33333%}.el-col-xl-push-20{position:relative;left:83.33333%}.el-col-xl-21{width:87.5%}.el-col-xl-offset-21{margin-left:87.5%}.el-col-xl-pull-21{position:relative;right:87.5%}.el-col-xl-push-21{position:relative;left:87.5%}.el-col-xl-22{width:91.66667%}.el-col-xl-offset-22{margin-left:91.66667%}.el-col-xl-pull-22{position:relative;right:91.66667%}.el-col-xl-push-22{position:relative;left:91.66667%}.el-col-xl-23{width:95.83333%}.el-col-xl-offset-23{margin-left:95.83333%}.el-col-xl-pull-23{position:relative;right:95.83333%}.el-col-xl-push-23{position:relative;left:95.83333%}.el-col-xl-24{width:100%}.el-col-xl-offset-24{margin-left:100%}.el-col-xl-pull-24{position:relative;right:100%}.el-col-xl-push-24{position:relative;left:100%}}@-webkit-keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}}.el-upload{display:inline-block;text-align:center;cursor:pointer;outline:0}.el-upload__input{display:none}.el-upload__tip{font-size:12px;color:#606266;margin-top:7px}.el-upload iframe{position:absolute;z-index:-1;top:0;left:0;opacity:0;filter:alpha(opacity=0)}.el-upload--picture-card{background-color:#fbfdff;border:1px dashed #c0ccda;border-radius:6px;box-sizing:border-box;width:148px;height:148px;line-height:146px;vertical-align:top}.el-upload--picture-card i{font-size:28px;color:#8c939d}.el-upload--picture-card:hover,.el-upload:focus{border-color:#409EFF;color:#409EFF}.el-upload:focus .el-upload-dragger{border-color:#409EFF}.el-upload-dragger{background-color:#fff;border:1px dashed #d9d9d9;border-radius:6px;box-sizing:border-box;width:360px;height:180px;text-align:center;position:relative;overflow:hidden}.el-upload-dragger .el-icon-upload{font-size:67px;color:#C0C4CC;margin:40px 0 16px;line-height:50px}.el-upload-dragger+.el-upload__tip{text-align:center}.el-upload-dragger~.el-upload__files{border-top:1px solid #DCDFE6;margin-top:7px;padding-top:5px}.el-upload-dragger .el-upload__text{color:#606266;font-size:14px;text-align:center}.el-upload-dragger .el-upload__text em{color:#409EFF;font-style:normal}.el-upload-dragger:hover{border-color:#409EFF}.el-upload-dragger.is-dragover{background-color:rgba(32,159,255,.06);border:2px dashed #409EFF}.el-upload-list{margin:0;padding:0;list-style:none}.el-upload-list__item{-webkit-transition:all .5s cubic-bezier(.55,0,.1,1);transition:all .5s cubic-bezier(.55,0,.1,1);font-size:14px;color:#606266;line-height:1.8;margin-top:5px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;width:100%}.el-upload-list__item .el-progress{position:absolute;top:20px;width:100%}.el-upload-list__item .el-progress__text{position:absolute;right:0;top:-13px}.el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.el-upload-list__item:first-child{margin-top:10px}.el-upload-list__item .el-icon-upload-success{color:#67C23A}.el-upload-list__item .el-icon-close{display:none;position:absolute;top:5px;right:5px;cursor:pointer;opacity:.75;color:#606266}.el-upload-list__item .el-icon-close:hover{opacity:1}.el-upload-list__item .el-icon-close-tip{display:none;position:absolute;top:5px;right:5px;font-size:12px;cursor:pointer;opacity:1;color:#409EFF}.el-upload-list__item:hover{background-color:#F5F7FA}.el-upload-list__item:hover .el-icon-close{display:inline-block}.el-upload-list__item:hover .el-progress__text{display:none}.el-upload-list__item.is-success .el-upload-list__item-status-label{display:block}.el-upload-list__item.is-success .el-upload-list__item-name:focus,.el-upload-list__item.is-success .el-upload-list__item-name:hover{color:#409EFF;cursor:pointer}.el-upload-list__item.is-success:focus:not(:hover) .el-icon-close-tip{display:inline-block}.el-upload-list__item.is-success:active .el-icon-close-tip,.el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.el-upload-list__item.is-success:hover .el-upload-list__item-status-label,.el-upload-list__item.is-success:not(.focusing):focus .el-icon-close-tip{display:none}.el-upload-list.is-disabled .el-upload-list__item:hover .el-upload-list__item-status-label{display:block}.el-upload-list__item-name{color:#606266;display:block;margin-right:40px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;-webkit-transition:color .3s;transition:color .3s;white-space:nowrap}.el-upload-list__item-name [class^=el-icon]{height:100%;margin-right:7px;color:#909399;line-height:inherit}.el-upload-list__item-status-label{position:absolute;right:5px;top:0;line-height:inherit;display:none}.el-upload-list__item-delete{position:absolute;right:10px;top:0;font-size:12px;color:#606266;display:none}.el-upload-list__item-delete:hover{color:#409EFF}.el-upload-list--picture-card{margin:0;display:inline;vertical-align:top}.el-upload-list--picture-card .el-upload-list__item{overflow:hidden;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:148px;height:148px;margin:0 8px 8px 0;display:inline-block}.el-upload-list--picture-card .el-upload-list__item .el-icon-check,.el-upload-list--picture-card .el-upload-list__item .el-icon-circle-check{color:#FFF}.el-upload-list--picture-card .el-upload-list__item .el-icon-close,.el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture-card .el-upload-list__item-name{display:none}.el-upload-list--picture-card .el-upload-list__item-thumbnail{width:100%;height:100%}.el-upload-list--picture-card .el-upload-list__item-status-label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 0 1pc 1px rgba(0,0,0,.2);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-list--picture-card .el-upload-list__item-status-label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.el-upload-list--picture-card .el-upload-list__item-actions{position:absolute;width:100%;height:100%;left:0;top:0;cursor:default;text-align:center;color:#fff;opacity:0;font-size:20px;background-color:rgba(0,0,0,.5);-webkit-transition:opacity .3s;transition:opacity .3s}.el-upload-list--picture-card .el-upload-list__item-actions::after{display:inline-block;content:\"\";height:100%;vertical-align:middle}.el-upload-list--picture-card .el-upload-list__item-actions span{display:none;cursor:pointer}.el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:15px}.el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{position:static;font-size:inherit;color:inherit}.el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-block}.el-upload-list--picture-card .el-progress{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);bottom:auto;width:126px}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.el-upload-list--picture .el-upload-list__item{overflow:hidden;z-index:0;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;margin-top:10px;padding:10px 10px 10px 90px;height:92px}.el-upload-list--picture .el-upload-list__item .el-icon-check,.el-upload-list--picture .el-upload-list__item .el-icon-circle-check{color:#FFF}.el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{background:0 0;-webkit-box-shadow:none;box-shadow:none;top:-2px;right:-12px}.el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name{line-height:70px;margin-top:0}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.el-upload-list--picture .el-upload-list__item-thumbnail{vertical-align:middle;display:inline-block;width:70px;height:70px;float:left;position:relative;z-index:1;margin-left:-80px;background-color:#FFF}.el-upload-list--picture .el-upload-list__item-name{display:block;margin-top:20px}.el-upload-list--picture .el-upload-list__item-name i{font-size:70px;line-height:1;position:absolute;left:9px;top:10px}.el-upload-list--picture .el-upload-list__item-status-label{position:absolute;right:-17px;top:-7px;width:46px;height:26px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 1px 1px #ccc;box-shadow:0 1px 1px #ccc}.el-upload-list--picture .el-upload-list__item-status-label i{font-size:12px;margin-top:12px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.el-upload-list--picture .el-progress{position:relative;top:-7px}.el-upload-cover{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden;z-index:10;cursor:default}.el-upload-cover::after{display:inline-block;height:100%;vertical-align:middle}.el-upload-cover img{display:block;width:100%;height:100%}.el-upload-cover__label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 0 1pc 1px rgba(0,0,0,.2);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-cover__label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);color:#fff}.el-upload-cover__progress{display:inline-block;vertical-align:middle;position:static;width:243px}.el-upload-cover__progress+.el-upload__inner{opacity:0}.el-upload-cover__content{position:absolute;top:0;left:0;width:100%;height:100%}.el-upload-cover__interact{position:absolute;bottom:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.72);text-align:center}.el-upload-cover__interact .btn{display:inline-block;color:#FFF;font-size:14px;cursor:pointer;vertical-align:middle;-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);margin-top:60px}.el-upload-cover__interact .btn span{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.el-upload-cover__interact .btn:hover{-webkit-transform:translateY(-13px);transform:translateY(-13px)}.el-upload-cover__interact .btn:hover span{opacity:1}.el-upload-cover__interact .btn i{color:#FFF;display:block;font-size:24px;line-height:inherit;margin:0 auto 5px}.el-upload-cover__title{position:absolute;bottom:0;left:0;background-color:#FFF;height:36px;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:400;text-align:left;padding:0 10px;margin:0;line-height:36px;font-size:14px;color:#303133}.el-upload-cover+.el-upload__inner{opacity:0;position:relative;z-index:1}.el-progress{position:relative;line-height:1}.el-progress__text{font-size:14px;color:#606266;display:inline-block;vertical-align:middle;margin-left:10px;line-height:1}.el-progress__text i{vertical-align:middle;display:block}.el-progress--circle,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .el-progress__text{position:absolute;top:50%;left:0;width:100%;text-align:center;margin:0;-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}.el-progress--circle .el-progress__text i,.el-progress--dashboard .el-progress__text i{vertical-align:middle;display:inline-block}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{padding-right:0;margin-right:0;display:block}.el-progress-bar,.el-progress-bar__inner::after,.el-progress-bar__innerText,.el-spinner{display:inline-block;vertical-align:middle}.el-progress--text-inside .el-progress-bar{padding-right:0;margin-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:#67C23A}.el-progress.is-success .el-progress__text{color:#67C23A}.el-progress.is-warning .el-progress-bar__inner{background-color:#E6A23C}.el-progress.is-warning .el-progress__text{color:#E6A23C}.el-progress.is-exception .el-progress-bar__inner{background-color:#F56C6C}.el-progress.is-exception .el-progress__text{color:#F56C6C}.el-progress-bar{padding-right:50px;width:100%;margin-right:-55px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-progress-bar__outer{height:6px;border-radius:100px;background-color:#EBEEF5;overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:#409EFF;text-align:right;border-radius:100px;line-height:1;white-space:nowrap;-webkit-transition:width .6s ease;transition:width .6s ease}.el-card,.el-message{border-radius:4px;overflow:hidden}.el-progress-bar__inner::after{height:100%}.el-progress-bar__innerText{color:#FFF;font-size:12px;margin:0 5px}@keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}}.el-time-spinner{width:100%;white-space:nowrap}.el-spinner-inner{-webkit-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite;width:50px;height:50px}.el-spinner-inner .path{stroke:#ececec;stroke-linecap:round;-webkit-animation:dash 1.5s ease-in-out infinite;animation:dash 1.5s ease-in-out infinite}@-webkit-keyframes rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}100%{stroke-dasharray:90,150;stroke-dashoffset:-124}}@keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}100%{stroke-dasharray:90,150;stroke-dashoffset:-124}}.el-message{min-width:380px;-webkit-box-sizing:border-box;box-sizing:border-box;border-width:1px;border-style:solid;border-color:#EBEEF5;position:fixed;left:50%;top:20px;-webkit-transform:translateX(-50%);transform:translateX(-50%);background-color:#edf2fc;-webkit-transition:opacity .3s,top .4s,-webkit-transform .4s;transition:opacity .3s,top .4s,-webkit-transform .4s;transition:opacity .3s,transform .4s,top .4s;transition:opacity .3s,transform .4s,top .4s,-webkit-transform .4s;padding:15px 15px 15px 20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-message.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-message.is-closable .el-message__content{padding-right:16px}.el-message p{margin:0}.el-message--info .el-message__content{color:#909399}.el-message--success{background-color:#f0f9eb;border-color:#e1f3d8}.el-message--success .el-message__content{color:#67C23A}.el-message--warning{background-color:#fdf6ec;border-color:#faecd8}.el-message--warning .el-message__content{color:#E6A23C}.el-message--error{background-color:#fef0f0;border-color:#fde2e2}.el-message--error .el-message__content{color:#F56C6C}.el-message__icon{margin-right:10px}.el-message__content{padding:0;font-size:14px;line-height:1}.el-message__closeBtn{position:absolute;top:50%;right:15px;-webkit-transform:translateY(-50%);transform:translateY(-50%);cursor:pointer;color:#C0C4CC;font-size:16px}.el-message__closeBtn:hover{color:#909399}.el-message .el-icon-success{color:#67C23A}.el-message .el-icon-error{color:#F56C6C}.el-message .el-icon-info{color:#909399}.el-message .el-icon-warning{color:#E6A23C}.el-message-fade-enter,.el-message-fade-leave-active{opacity:0;-webkit-transform:translate(-50%,-100%);transform:translate(-50%,-100%)}.el-badge{position:relative;vertical-align:middle;display:inline-block}.el-badge__content{background-color:#F56C6C;border-radius:10px;color:#FFF;display:inline-block;font-size:12px;height:18px;line-height:18px;padding:0 6px;text-align:center;white-space:nowrap;border:1px solid #FFF}.el-badge__content.is-fixed{position:absolute;top:0;right:10px;-webkit-transform:translateY(-50%) translateX(100%);transform:translateY(-50%) translateX(100%)}.el-rate__icon,.el-rate__item{position:relative;display:inline-block}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{height:8px;width:8px;padding:0;right:0;border-radius:50%}.el-badge__content--primary{background-color:#409EFF}.el-badge__content--success{background-color:#67C23A}.el-badge__content--warning{background-color:#E6A23C}.el-badge__content--info{background-color:#909399}.el-badge__content--danger{background-color:#F56C6C}.el-card{border:1px solid #EBEEF5;background-color:#FFF;color:#303133;-webkit-transition:.3s;transition:.3s}.el-card.is-always-shadow,.el-card.is-hover-shadow:focus,.el-card.is-hover-shadow:hover{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-card__header{padding:18px 20px;border-bottom:1px solid #EBEEF5;-webkit-box-sizing:border-box;box-sizing:border-box}.el-card__body{padding:20px}.el-rate{height:20px;line-height:1}.el-rate__item{font-size:0;vertical-align:middle}.el-rate__icon{font-size:18px;margin-right:6px;color:#C0C4CC;-webkit-transition:.3s;transition:.3s}.el-rate__decimal,.el-rate__icon .path2{position:absolute;top:0;left:0}.el-rate__icon.hover{-webkit-transform:scale(1.15);transform:scale(1.15)}.el-rate__decimal{display:inline-block;overflow:hidden}.el-step.is-vertical,.el-steps{display:-webkit-box;display:-ms-flexbox}.el-rate__text{font-size:14px;vertical-align:middle}.el-steps{display:flex}.el-steps--simple{padding:13px 8%;border-radius:4px;background:#F5F7FA}.el-steps--horizontal{white-space:nowrap}.el-steps--vertical{height:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column}.el-step{position:relative;-ms-flex-negative:1;flex-shrink:1}.el-step:last-of-type .el-step__line{display:none}.el-step:last-of-type.is-flex{-ms-flex-preferred-size:auto!important;flex-basis:auto!important;-ms-flex-negative:0;flex-shrink:0;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}.el-step:last-of-type .el-step__description,.el-step:last-of-type .el-step__main{padding-right:0}.el-step__head{position:relative;width:100%}.el-step__head.is-process{color:#303133;border-color:#303133}.el-step__head.is-wait{color:#C0C4CC;border-color:#C0C4CC}.el-step__head.is-success{color:#67C23A;border-color:#67C23A}.el-step__head.is-error{color:#F56C6C;border-color:#F56C6C}.el-step__head.is-finish{color:#409EFF;border-color:#409EFF}.el-step__icon{position:relative;z-index:1;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:24px;height:24px;font-size:14px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#FFF;-webkit-transition:.15s ease-out;transition:.15s ease-out}.el-step__icon.is-text{border-radius:50%;border:2px solid;border-color:inherit}.el-step__icon.is-icon{width:40px}.el-step__icon-inner{display:inline-block;user-select:none;text-align:center;font-weight:700;line-height:1;color:inherit}.el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:25px;font-weight:400}.el-step__icon-inner.is-status{-webkit-transform:translateY(1px);transform:translateY(1px)}.el-step__line{position:absolute;border-color:inherit;background-color:#C0C4CC}.el-step__line-inner{display:block;border-width:1px;border-style:solid;border-color:inherit;-webkit-transition:.15s ease-out;transition:.15s ease-out;-webkit-box-sizing:border-box;box-sizing:border-box;width:0;height:0}.el-step__main{white-space:normal;text-align:left}.el-step__title{font-size:16px;line-height:38px}.el-step__title.is-process{font-weight:700;color:#303133}.el-step__title.is-wait{color:#C0C4CC}.el-step__title.is-success{color:#67C23A}.el-step__title.is-error{color:#F56C6C}.el-step__title.is-finish{color:#409EFF}.el-step__description{padding-right:10%;margin-top:-5px;font-size:12px;line-height:20px;font-weight:400}.el-step__description.is-process{color:#303133}.el-step__description.is-wait{color:#C0C4CC}.el-step__description.is-success{color:#67C23A}.el-step__description.is-error{color:#F56C6C}.el-step__description.is-finish{color:#409EFF}.el-step.is-horizontal{display:inline-block}.el-step.is-horizontal .el-step__line{height:2px;top:11px;left:0;right:0}.el-step.is-vertical{display:flex}.el-step.is-vertical .el-step__head{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;width:24px}.el-step.is-vertical .el-step__main{padding-left:10px;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.el-step.is-vertical .el-step__title{line-height:24px;padding-bottom:8px}.el-step.is-vertical .el-step__line{width:2px;top:0;bottom:0;left:11px}.el-step.is-vertical .el-step__icon.is-icon{width:24px}.el-step.is-center .el-step__head,.el-step.is-center .el-step__main{text-align:center}.el-step.is-center .el-step__description{padding-left:20%;padding-right:20%}.el-step.is-center .el-step__line{left:50%;right:-50%}.el-step.is-simple{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-step.is-simple .el-step__head{width:auto;font-size:0;padding-right:10px}.el-step.is-simple .el-step__icon{background:0 0;width:16px;height:16px;font-size:12px}.el-step.is-simple .el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:18px}.el-step.is-simple .el-step__icon-inner.is-status{-webkit-transform:scale(.8) translateY(1px);transform:scale(.8) translateY(1px)}.el-step.is-simple .el-step__main{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.el-step.is-simple .el-step__title{font-size:16px;line-height:20px}.el-step.is-simple:not(:last-of-type) .el-step__title{max-width:50%;word-break:break-all}.el-step.is-simple .el-step__arrow{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-step.is-simple .el-step__arrow::after,.el-step.is-simple .el-step__arrow::before{content:'';display:inline-block;position:absolute;height:15px;width:1px;background:#C0C4CC}.el-step.is-simple .el-step__arrow::before{-webkit-transform:rotate(-45deg) translateY(-4px);transform:rotate(-45deg) translateY(-4px);-webkit-transform-origin:0 0;transform-origin:0 0}.el-step.is-simple .el-step__arrow::after{-webkit-transform:rotate(45deg) translateY(4px);transform:rotate(45deg) translateY(4px);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.el-step.is-simple:last-of-type .el-step__arrow{display:none}.el-carousel{position:relative}.el-carousel--horizontal{overflow-x:hidden}.el-carousel--vertical{overflow-y:hidden}.el-carousel__container{position:relative;height:300px}.el-carousel__arrow{border:none;outline:0;padding:0;margin:0;height:36px;width:36px;cursor:pointer;-webkit-transition:.3s;transition:.3s;border-radius:50%;background-color:rgba(31,45,61,.11);color:#FFF;position:absolute;top:50%;z-index:10;-webkit-transform:translateY(-50%);transform:translateY(-50%);text-align:center;font-size:12px}.el-carousel__arrow--left{left:16px}.el-carousel__arrow--right{right:16px}.el-carousel__arrow:hover{background-color:rgba(31,45,61,.23)}.el-carousel__arrow i{cursor:pointer}.el-carousel__indicators{position:absolute;list-style:none;margin:0;padding:0;z-index:2}.el-carousel__indicators--horizontal{bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.el-carousel__indicators--vertical{right:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-carousel__indicators--outside{bottom:26px;text-align:center;position:static;-webkit-transform:none;transform:none}.el-carousel__indicators--outside .el-carousel__indicator:hover button{opacity:.64}.el-carousel__indicators--outside button{background-color:#C0C4CC;opacity:.24}.el-carousel__indicators--labels{left:0;right:0;-webkit-transform:none;transform:none;text-align:center}.el-carousel__indicators--labels .el-carousel__button{height:auto;width:auto;padding:2px 18px;font-size:12px}.el-carousel__indicators--labels .el-carousel__indicator{padding:6px 4px}.el-carousel__indicator{background-color:transparent;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.el-carousel__indicator--horizontal{display:inline-block;padding:12px 4px}.el-carousel__indicator--vertical{padding:4px 12px}.el-carousel__indicator--vertical .el-carousel__button{width:2px;height:15px}.el-carousel__indicator.is-active button{opacity:1}.el-carousel__button{display:block;opacity:.48;width:30px;height:2px;background-color:#FFF;border:none;outline:0;padding:0;margin:0;cursor:pointer;-webkit-transition:.3s;transition:.3s}.el-carousel__item,.el-carousel__mask{height:100%;top:0;left:0;position:absolute}.carousel-arrow-left-enter,.carousel-arrow-left-leave-active{-webkit-transform:translateY(-50%) translateX(-10px);transform:translateY(-50%) translateX(-10px);opacity:0}.carousel-arrow-right-enter,.carousel-arrow-right-leave-active{-webkit-transform:translateY(-50%) translateX(10px);transform:translateY(-50%) translateX(10px);opacity:0}.el-carousel__item{width:100%;display:inline-block;overflow:hidden;z-index:0}.el-carousel__item.is-active{z-index:2}.el-carousel__item.is-animating{-webkit-transition:-webkit-transform .4s ease-in-out;transition:-webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out}.el-carousel__item--card{width:50%;-webkit-transition:-webkit-transform .4s ease-in-out;transition:-webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out}.el-carousel__item--card.is-in-stage{cursor:pointer;z-index:1}.el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask,.el-carousel__item--card.is-in-stage:hover .el-carousel__mask{opacity:.12}.el-carousel__item--card.is-active{z-index:2}.el-carousel__mask{width:100%;background-color:#FFF;opacity:.24;-webkit-transition:.2s;transition:.2s}.el-fade-in-enter,.el-fade-in-leave-active,.el-fade-in-linear-enter,.el-fade-in-linear-leave,.el-fade-in-linear-leave-active,.fade-in-linear-enter,.fade-in-linear-leave,.fade-in-linear-leave-active{opacity:0}.fade-in-linear-enter-active,.fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.el-fade-in-enter-active,.el-fade-in-leave-active{-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter,.el-zoom-in-center-leave-active{opacity:0;-webkit-transform:scaleX(0);transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center top;transform-origin:center top}.el-zoom-in-top-enter,.el-zoom-in-top-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center bottom;transform-origin:center bottom}.el-zoom-in-bottom-enter,.el-zoom-in-bottom-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;-webkit-transform:scale(1,1);transform:scale(1,1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:top left;transform-origin:top left}.el-zoom-in-left-enter,.el-zoom-in-left-leave-active{opacity:0;-webkit-transform:scale(.45,.45);transform:scale(.45,.45)}.collapse-transition{-webkit-transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out;transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out}.horizontal-collapse-transition{-webkit-transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out;transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{-webkit-transition:all 1s;transition:all 1s}.el-list-enter,.el-list-leave-active{opacity:0;-webkit-transform:translateY(-30px);transform:translateY(-30px)}.el-opacity-transition{-webkit-transition:opacity .3s cubic-bezier(.55,0,.1,1);transition:opacity .3s cubic-bezier(.55,0,.1,1)}.el-collapse{border-top:1px solid #EBEEF5;border-bottom:1px solid #EBEEF5}.el-collapse-item.is-disabled .el-collapse-item__header{color:#bbb;cursor:not-allowed}.el-collapse-item__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:48px;line-height:48px;background-color:#FFF;color:#303133;cursor:pointer;border-bottom:1px solid #EBEEF5;font-size:13px;font-weight:500;-webkit-transition:border-bottom-color .3s;transition:border-bottom-color .3s;outline:0}.el-collapse-item__arrow{margin:0 8px 0 auto;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-weight:300}.el-collapse-item__arrow.is-active{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-collapse-item__header.focusing:focus:not(:hover){color:#409EFF}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{will-change:height;background-color:#FFF;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;border-bottom:1px solid #EBEEF5}.el-cascader__tags,.el-tag{-webkit-box-sizing:border-box}.el-collapse-item__content{padding-bottom:25px;font-size:13px;color:#303133;line-height:1.769230769230769}.el-collapse-item:last-child{margin-bottom:-1px}.el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popper .popper__arrow{border-width:6px;-webkit-filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03));filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03))}.el-popper .popper__arrow::after{content:\" \";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#EBEEF5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#FFF;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#EBEEF5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#FFF}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#EBEEF5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#FFF;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#EBEEF5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#FFF}.el-tag{background-color:#ecf5ff;border-color:#d9ecff;display:inline-block;height:32px;padding:0 10px;line-height:30px;font-size:12px;color:#409EFF;border-width:1px;border-style:solid;border-radius:4px;box-sizing:border-box;white-space:nowrap}.el-tag.is-hit{border-color:#409EFF}.el-tag .el-tag__close{color:#409eff}.el-tag .el-tag__close:hover{color:#FFF;background-color:#409eff}.el-tag.el-tag--info{background-color:#f4f4f5;border-color:#e9e9eb;color:#909399}.el-tag.el-tag--info.is-hit{border-color:#909399}.el-tag.el-tag--info .el-tag__close{color:#909399}.el-tag.el-tag--info .el-tag__close:hover{color:#FFF;background-color:#909399}.el-tag.el-tag--success{background-color:#f0f9eb;border-color:#e1f3d8;color:#67c23a}.el-tag.el-tag--success.is-hit{border-color:#67C23A}.el-tag.el-tag--success .el-tag__close{color:#67c23a}.el-tag.el-tag--success .el-tag__close:hover{color:#FFF;background-color:#67c23a}.el-tag.el-tag--warning{background-color:#fdf6ec;border-color:#faecd8;color:#e6a23c}.el-tag.el-tag--warning.is-hit{border-color:#E6A23C}.el-tag.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag.el-tag--warning .el-tag__close:hover{color:#FFF;background-color:#e6a23c}.el-tag.el-tag--danger{background-color:#fef0f0;border-color:#fde2e2;color:#f56c6c}.el-tag.el-tag--danger.is-hit{border-color:#F56C6C}.el-tag.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag.el-tag--danger .el-tag__close:hover{color:#FFF;background-color:#f56c6c}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;height:16px;width:16px;line-height:16px;vertical-align:middle;top:-1px;right:-5px}.el-tag .el-icon-close::before{display:block}.el-tag--dark{background-color:#409eff;border-color:#409eff;color:#fff}.el-tag--dark.is-hit{border-color:#409EFF}.el-tag--dark .el-tag__close{color:#fff}.el-tag--dark .el-tag__close:hover{color:#FFF;background-color:#66b1ff}.el-tag--dark.el-tag--info{background-color:#909399;border-color:#909399;color:#fff}.el-tag--dark.el-tag--info.is-hit{border-color:#909399}.el-tag--dark.el-tag--info .el-tag__close{color:#fff}.el-tag--dark.el-tag--info .el-tag__close:hover{color:#FFF;background-color:#a6a9ad}.el-tag--dark.el-tag--success{background-color:#67c23a;border-color:#67c23a;color:#fff}.el-tag--dark.el-tag--success.is-hit{border-color:#67C23A}.el-tag--dark.el-tag--success .el-tag__close{color:#fff}.el-tag--dark.el-tag--success .el-tag__close:hover{color:#FFF;background-color:#85ce61}.el-tag--dark.el-tag--warning{background-color:#e6a23c;border-color:#e6a23c;color:#fff}.el-tag--dark.el-tag--warning.is-hit{border-color:#E6A23C}.el-tag--dark.el-tag--warning .el-tag__close{color:#fff}.el-tag--dark.el-tag--warning .el-tag__close:hover{color:#FFF;background-color:#ebb563}.el-tag--dark.el-tag--danger{background-color:#f56c6c;border-color:#f56c6c;color:#fff}.el-tag--dark.el-tag--danger.is-hit{border-color:#F56C6C}.el-tag--dark.el-tag--danger .el-tag__close{color:#fff}.el-tag--dark.el-tag--danger .el-tag__close:hover{color:#FFF;background-color:#f78989}.el-tag--plain{background-color:#fff;border-color:#b3d8ff;color:#409eff}.el-tag--plain.is-hit{border-color:#409EFF}.el-tag--plain .el-tag__close{color:#409eff}.el-tag--plain .el-tag__close:hover{color:#FFF;background-color:#409eff}.el-tag--plain.el-tag--info{background-color:#fff;border-color:#d3d4d6;color:#909399}.el-tag--plain.el-tag--info.is-hit{border-color:#909399}.el-tag--plain.el-tag--info .el-tag__close{color:#909399}.el-tag--plain.el-tag--info .el-tag__close:hover{color:#FFF;background-color:#909399}.el-tag--plain.el-tag--success{background-color:#fff;border-color:#c2e7b0;color:#67c23a}.el-tag--plain.el-tag--success.is-hit{border-color:#67C23A}.el-tag--plain.el-tag--success .el-tag__close{color:#67c23a}.el-tag--plain.el-tag--success .el-tag__close:hover{color:#FFF;background-color:#67c23a}.el-tag--plain.el-tag--warning{background-color:#fff;border-color:#f5dab1;color:#e6a23c}.el-tag--plain.el-tag--warning.is-hit{border-color:#E6A23C}.el-tag--plain.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close:hover{color:#FFF;background-color:#e6a23c}.el-tag--plain.el-tag--danger{background-color:#fff;border-color:#fbc4c4;color:#f56c6c}.el-tag--plain.el-tag--danger.is-hit{border-color:#F56C6C}.el-tag--plain.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close:hover{color:#FFF;background-color:#f56c6c}.el-tag--medium{height:28px;line-height:26px}.el-tag--medium .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--small{height:24px;padding:0 8px;line-height:22px}.el-tag--small .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--mini{height:20px;padding:0 5px;line-height:19px}.el-tag--mini .el-icon-close{margin-left:-3px;-webkit-transform:scale(.7);transform:scale(.7)}.el-cascader{display:inline-block;position:relative;font-size:14px;line-height:40px}.el-cascader:not(.is-disabled):hover .el-input__inner{cursor:pointer;border-color:#C0C4CC}.el-cascader .el-input .el-input__inner:focus,.el-cascader .el-input.is-focus .el-input__inner{border-color:#409EFF}.el-cascader .el-input{cursor:pointer}.el-cascader .el-input .el-input__inner{text-overflow:ellipsis}.el-cascader .el-input .el-icon-arrow-down{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-size:14px}.el-cascader .el-input .el-icon-arrow-down.is-reverse{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}.el-cascader .el-input .el-icon-circle-close:hover{color:#909399}.el-cascader--medium{font-size:14px;line-height:36px}.el-cascader--small{font-size:13px;line-height:32px}.el-cascader--mini{font-size:12px;line-height:28px}.el-cascader.is-disabled .el-cascader__label{z-index:2;color:#C0C4CC}.el-cascader__dropdown{margin:5px 0;font-size:14px;background:#FFF;border:1px solid #E4E7ED;border-radius:4px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-cascader__tags{position:absolute;left:0;right:30px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;line-height:normal;text-align:left;box-sizing:border-box}.el-cascader__tags .el-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;max-width:100%;margin:2px 0 2px 6px;text-overflow:ellipsis;background:#f0f2f5}.el-cascader__tags .el-tag:not(.is-hit){border-color:transparent}.el-cascader__tags .el-tag>span{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden;text-overflow:ellipsis}.el-cascader__tags .el-tag .el-icon-close{-webkit-box-flex:0;-ms-flex:none;flex:none;background-color:#C0C4CC;color:#FFF}.el-cascader__tags .el-tag .el-icon-close:hover{background-color:#909399}.el-cascader__suggestion-panel{border-radius:4px}.el-cascader__suggestion-list{max-height:204px;margin:0;padding:6px 0;font-size:14px;color:#606266;text-align:center}.el-cascader__suggestion-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:34px;padding:0 15px;text-align:left;outline:0;cursor:pointer}.el-cascader__suggestion-item:focus,.el-cascader__suggestion-item:hover{background:#F5F7FA}.el-cascader__suggestion-item.is-checked{color:#409EFF;font-weight:700}.el-cascader__suggestion-item>span{margin-right:10px}.el-cascader__empty-text{margin:10px 0;color:#C0C4CC}.el-cascader__search-input{-webkit-box-flex:1;-ms-flex:1;flex:1;height:24px;min-width:60px;margin:2px 0 2px 15px;padding:0;color:#606266;border:none;outline:0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-cascader__search-input::-webkit-input-placeholder{color:#C0C4CC}.el-cascader__search-input:-ms-input-placeholder{color:#C0C4CC}.el-cascader__search-input::-ms-input-placeholder{color:#C0C4CC}.el-cascader__search-input::placeholder{color:#C0C4CC}.el-color-predefine{display:-webkit-box;display:-ms-flexbox;display:flex;font-size:12px;margin-top:8px;width:280px}.el-color-predefine__colors{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-wrap:wrap;flex-wrap:wrap}.el-color-predefine__color-selector{margin:0 0 8px 8px;width:20px;height:20px;border-radius:4px;cursor:pointer}.el-color-predefine__color-selector:nth-child(10n+1){margin-left:0}.el-color-predefine__color-selector.selected{-webkit-box-shadow:0 0 3px 2px #409EFF;box-shadow:0 0 3px 2px #409EFF}.el-color-predefine__color-selector>div{display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;border-radius:3px}.el-color-predefine__color-selector.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-hue-slider{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;width:280px;height:12px;background-color:red;padding:0 2px}.el-color-hue-slider__bar{position:relative;background:-webkit-gradient(linear,left top,right top,from(red),color-stop(17%,#ff0),color-stop(33%,#0f0),color-stop(50%,#0ff),color-stop(67%,#00f),color-stop(83%,#f0f),to(red));background:linear-gradient(to right,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);height:100%}.el-color-hue-slider__thumb{position:absolute;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid #f0f0f0;-webkit-box-shadow:0 0 2px rgba(0,0,0,.6);box-shadow:0 0 2px rgba(0,0,0,.6);z-index:1}.el-color-hue-slider.is-vertical{width:12px;height:180px;padding:2px 0}.el-color-hue-slider.is-vertical .el-color-hue-slider__bar{background:-webkit-gradient(linear,left top,left bottom,from(red),color-stop(17%,#ff0),color-stop(33%,#0f0),color-stop(50%,#0ff),color-stop(67%,#00f),color-stop(83%,#f0f),to(red));background:linear-gradient(to bottom,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%)}.el-color-hue-slider.is-vertical .el-color-hue-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-svpanel{position:relative;width:280px;height:180px}.el-color-svpanel__black,.el-color-svpanel__white{position:absolute;top:0;left:0;right:0;bottom:0}.el-color-svpanel__white{background:-webkit-gradient(linear,left top,right top,from(#fff),to(rgba(255,255,255,0)));background:linear-gradient(to right,#fff,rgba(255,255,255,0))}.el-color-svpanel__black{background:-webkit-gradient(linear,left bottom,left top,from(#000),to(rgba(0,0,0,0)));background:linear-gradient(to top,#000,rgba(0,0,0,0))}.el-color-svpanel__cursor{position:absolute}.el-color-svpanel__cursor>div{cursor:head;width:4px;height:4px;-webkit-box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);border-radius:50%;-webkit-transform:translate(-2px,-2px);transform:translate(-2px,-2px)}.el-color-alpha-slider{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;width:280px;height:12px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-alpha-slider__bar{position:relative;background:-webkit-gradient(linear,left top,right top,from(rgba(255,255,255,0)),to(white));background:linear-gradient(to right,rgba(255,255,255,0) 0,#fff 100%);height:100%}.el-color-alpha-slider__thumb{position:absolute;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid #f0f0f0;-webkit-box-shadow:0 0 2px rgba(0,0,0,.6);box-shadow:0 0 2px rgba(0,0,0,.6);z-index:1}.el-color-alpha-slider.is-vertical{width:20px;height:180px}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__bar{background:-webkit-gradient(linear,left top,left bottom,from(rgba(255,255,255,0)),to(white));background:linear-gradient(to bottom,rgba(255,255,255,0) 0,#fff 100%)}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-dropdown{width:300px}.el-color-dropdown__main-wrapper{margin-bottom:6px}.el-color-dropdown__main-wrapper::after{content:\"\";display:table;clear:both}.el-color-dropdown__btns{margin-top:6px;text-align:right}.el-color-dropdown__value{float:left;line-height:26px;font-size:12px;color:#000;width:160px}.el-color-dropdown__btn{border:1px solid #dcdcdc;color:#333;line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:0;font-size:12px}.el-color-dropdown__btn[disabled]{color:#ccc;cursor:not-allowed}.el-color-dropdown__btn:hover{color:#409EFF;border-color:#409EFF}.el-color-dropdown__link-btn{cursor:pointer;color:#409EFF;text-decoration:none;padding:15px;font-size:12px}.el-color-dropdown__link-btn:hover{color:tint(#409EFF,20%)}.el-color-picker{display:inline-block;position:relative;line-height:normal;height:40px}.el-color-picker.is-disabled .el-color-picker__trigger{cursor:not-allowed}.el-color-picker--medium{height:36px}.el-color-picker--medium .el-color-picker__trigger{height:36px;width:36px}.el-color-picker--medium .el-color-picker__mask{height:34px;width:34px}.el-color-picker--small{height:32px}.el-color-picker--small .el-color-picker__trigger{height:32px;width:32px}.el-color-picker--small .el-color-picker__mask{height:30px;width:30px}.el-color-picker--small .el-color-picker__empty,.el-color-picker--small .el-color-picker__icon{-webkit-transform:translate3d(-50%,-50%,0) scale(.8);transform:translate3d(-50%,-50%,0) scale(.8)}.el-color-picker--mini{height:28px}.el-color-picker--mini .el-color-picker__trigger{height:28px;width:28px}.el-color-picker--mini .el-color-picker__mask{height:26px;width:26px}.el-color-picker--mini .el-color-picker__empty,.el-color-picker--mini .el-color-picker__icon{-webkit-transform:translate3d(-50%,-50%,0) scale(.8);transform:translate3d(-50%,-50%,0) scale(.8)}.el-color-picker__mask{height:38px;width:38px;border-radius:4px;position:absolute;top:1px;left:1px;z-index:1;cursor:not-allowed;background-color:rgba(255,255,255,.7)}.el-color-picker__trigger{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;height:40px;width:40px;padding:4px;border:1px solid #e6e6e6;border-radius:4px;font-size:0;position:relative;cursor:pointer}.el-color-picker__color{position:relative;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #999;border-radius:2px;width:100%;height:100%;text-align:center}.el-color-picker__color.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-picker__color-inner{position:absolute;left:0;top:0;right:0;bottom:0}.el-color-picker__empty,.el-color-picker__icon{top:50%;left:50%;font-size:12px;position:absolute}.el-color-picker__empty{color:#999;-webkit-transform:translate3d(-50%,-50%,0);transform:translate3d(-50%,-50%,0)}.el-color-picker__icon{display:inline-block;width:100%;-webkit-transform:translate3d(-50%,-50%,0);transform:translate3d(-50%,-50%,0);color:#FFF;text-align:center}.el-color-picker__panel{position:absolute;z-index:10;padding:6px;-webkit-box-sizing:content-box;box-sizing:content-box;background-color:#FFF;border:1px solid #EBEEF5;border-radius:4px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.el-textarea__inner{display:block;resize:vertical;padding:5px 15px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;font-size:inherit;color:#606266;background-color:#FFF;background-image:none;border:1px solid #DCDFE6;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-textarea__inner::-webkit-input-placeholder{color:#C0C4CC}.el-textarea__inner:-ms-input-placeholder{color:#C0C4CC}.el-textarea__inner::-ms-input-placeholder{color:#C0C4CC}.el-textarea__inner::placeholder{color:#C0C4CC}.el-textarea__inner:hover{border-color:#C0C4CC}.el-textarea__inner:focus{outline:0;border-color:#409EFF}.el-textarea .el-input__count{color:#909399;background:#FFF;position:absolute;font-size:12px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:#F5F7FA;border-color:#E4E7ED;color:#C0C4CC;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#C0C4CC}.el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder{color:#C0C4CC}.el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#C0C4CC}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#C0C4CC}.el-textarea.is-exceed .el-textarea__inner{border-color:#F56C6C}.el-textarea.is-exceed .el-input__count{color:#F56C6C}.el-input{position:relative;font-size:14px;display:inline-block;width:100%}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner{background:#fff}.el-input::-webkit-scrollbar-track{background:#fff}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.el-input .el-input__clear{color:#C0C4CC;font-size:14px;cursor:pointer;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-input .el-input__clear:hover{color:#909399}.el-input .el-input__count{height:100%;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#909399;font-size:12px}.el-input .el-input__count .el-input__count-inner{background:#FFF;line-height:initial;display:inline-block;padding:0 5px}.el-input__inner{-webkit-appearance:none;background-color:#FFF;background-image:none;border-radius:4px;border:1px solid #DCDFE6;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:40px;line-height:40px;outline:0;padding:0 15px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}.el-input__prefix,.el-input__suffix{position:absolute;top:0;-webkit-transition:all .3s;height:100%;color:#C0C4CC;text-align:center}.el-input__inner::-webkit-input-placeholder{color:#C0C4CC}.el-input__inner:-ms-input-placeholder{color:#C0C4CC}.el-input__inner::-ms-input-placeholder{color:#C0C4CC}.el-input__inner::placeholder{color:#C0C4CC}.el-input__inner:hover{border-color:#C0C4CC}.el-input.is-active .el-input__inner,.el-input__inner:focus{border-color:#409EFF;outline:0}.el-input__suffix{right:5px;transition:all .3s}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{left:5px;transition:all .3s}.el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-disabled .el-input__inner{background-color:#F5F7FA;border-color:#E4E7ED;color:#C0C4CC;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#C0C4CC}.el-input.is-disabled .el-input__inner:-ms-input-placeholder{color:#C0C4CC}.el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#C0C4CC}.el-input.is-disabled .el-input__inner::placeholder{color:#C0C4CC}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-link,.el-transfer-panel__filter .el-icon-circle-close{cursor:pointer}.el-input.is-exceed .el-input__inner{border-color:#F56C6C}.el-input.is-exceed .el-input__suffix .el-input__count{color:#F56C6C}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#F5F7FA;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #DCDFE6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group--prepend .el-input__inner,.el-input-group__append{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--append .el-input__inner,.el-input-group__prepend{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.el-input-group__prepend div.el-select:hover .el-input__inner{border-color:transparent;background-color:transparent;color:inherit;border-top:0;border-bottom:0}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0}.el-input-group__append{border-left:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner,.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-transfer{font-size:14px}.el-transfer__buttons{display:inline-block;vertical-align:middle;padding:0 30px}.el-transfer__button{display:block;margin:0 auto;padding:10px;border-radius:50%;color:#FFF;background-color:#409EFF;font-size:0}.el-transfer-panel__item+.el-transfer-panel__item,.el-transfer__button [class*=el-icon-]+span{margin-left:0}.el-transfer__button.is-with-texts{border-radius:4px}.el-transfer__button.is-disabled,.el-transfer__button.is-disabled:hover{border:1px solid #DCDFE6;background-color:#F5F7FA;color:#C0C4CC}.el-transfer__button:first-child{margin-bottom:10px}.el-transfer__button:nth-child(2){margin:0}.el-transfer__button i,.el-transfer__button span{font-size:14px}.el-transfer-panel{border:1px solid #EBEEF5;border-radius:4px;overflow:hidden;background:#FFF;display:inline-block;vertical-align:middle;width:200px;max-height:100%;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative}.el-transfer-panel__body{height:246px}.el-transfer-panel__body.is-with-footer{padding-bottom:40px}.el-transfer-panel__list{margin:0;padding:6px 0;list-style:none;height:246px;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box}.el-transfer-panel__list.is-filterable{height:194px;padding-top:0}.el-transfer-panel__item{height:30px;line-height:30px;padding-left:15px;display:block!important}.el-transfer-panel__item.el-checkbox{color:#606266}.el-transfer-panel__item:hover{color:#409EFF}.el-transfer-panel__item.el-checkbox .el-checkbox__label{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:24px;line-height:30px}.el-transfer-panel__item .el-checkbox__input{position:absolute;top:8px}.el-transfer-panel__filter{text-align:center;margin:15px;-webkit-box-sizing:border-box;box-sizing:border-box;display:block;width:auto}.el-transfer-panel__filter .el-input__inner{height:32px;width:100%;font-size:12px;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:16px;padding-right:10px;padding-left:30px}.el-transfer-panel__filter .el-input__icon{margin-left:5px}.el-transfer-panel .el-transfer-panel__header{height:40px;line-height:40px;background:#F5F7FA;margin:0;padding-left:15px;border-bottom:1px solid #EBEEF5;-webkit-box-sizing:border-box;box-sizing:border-box;color:#000}.el-transfer-panel .el-transfer-panel__header .el-checkbox{display:block;line-height:40px}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label{font-size:16px;color:#303133;font-weight:400}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span{position:absolute;right:15px;color:#909399;font-size:12px;font-weight:400}.el-divider__text,.el-link{font-weight:500;font-size:14px}.el-transfer-panel .el-transfer-panel__footer{height:40px;background:#FFF;margin:0;padding:0;border-top:1px solid #EBEEF5;position:absolute;bottom:0;left:0;width:100%;z-index:1}.el-transfer-panel .el-transfer-panel__footer::after{display:inline-block;content:\"\";height:100%;vertical-align:middle}.el-container,.el-timeline-item__node{display:-webkit-box;display:-ms-flexbox}.el-transfer-panel .el-transfer-panel__footer .el-checkbox{padding-left:20px;color:#606266}.el-transfer-panel .el-transfer-panel__empty{margin:0;height:30px;line-height:30px;padding:6px 15px 0;color:#909399;text-align:center}.el-transfer-panel .el-checkbox__label{padding-left:8px}.el-transfer-panel .el-checkbox__inner{height:14px;width:14px;border-radius:3px}.el-transfer-panel .el-checkbox__inner::after{height:6px;width:3px;left:4px}.el-container{display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;-webkit-box-sizing:border-box;box-sizing:border-box;min-width:0}.el-container.is-vertical,.el-drawer{-webkit-box-orient:vertical;-webkit-box-direction:normal}.el-aside,.el-header{-webkit-box-sizing:border-box}.el-container.is-vertical{-ms-flex-direction:column;flex-direction:column}.el-header{padding:0 20px;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-aside{overflow:auto;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-footer,.el-main{-webkit-box-sizing:border-box}.el-main{display:block;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;overflow:auto;box-sizing:border-box;padding:20px}.el-footer{padding:0 20px;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-timeline{margin:0;font-size:14px;list-style:none}.el-timeline .el-timeline-item:last-child .el-timeline-item__tail{display:none}.el-timeline-item{position:relative;padding-bottom:20px}.el-timeline-item__wrapper{position:relative;padding-left:28px;top:-3px}.el-timeline-item__tail{position:absolute;left:4px;height:100%;border-left:2px solid #E4E7ED}.el-timeline-item__icon{color:#FFF;font-size:13px}.el-timeline-item__node{position:absolute;background-color:#E4E7ED;border-radius:50%;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-image__error,.el-timeline-item__dot{display:-webkit-box;display:-ms-flexbox}.el-timeline-item__node--normal{left:-1px;width:12px;height:12px}.el-timeline-item__node--large{left:-2px;width:14px;height:14px}.el-timeline-item__node--primary{background-color:#409EFF}.el-timeline-item__node--success{background-color:#67C23A}.el-timeline-item__node--warning{background-color:#E6A23C}.el-timeline-item__node--danger{background-color:#F56C6C}.el-timeline-item__node--info{background-color:#909399}.el-timeline-item__dot{position:absolute;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-timeline-item__content{color:#303133}.el-timeline-item__timestamp{color:#909399;line-height:1;font-size:13px}.el-timeline-item__timestamp.is-top{margin-bottom:8px;padding-top:4px}.el-timeline-item__timestamp.is-bottom{margin-top:8px}.el-link{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;vertical-align:middle;position:relative;text-decoration:none;outline:0;padding:0}.el-link.is-underline:hover:after{content:\"\";position:absolute;left:0;right:0;height:0;bottom:0;border-bottom:1px solid #409EFF}.el-link.el-link--default:after,.el-link.el-link--primary.is-underline:hover:after,.el-link.el-link--primary:after{border-color:#409EFF}.el-link.is-disabled{cursor:not-allowed}.el-link [class*=el-icon-]+span{margin-left:5px}.el-link.el-link--default{color:#606266}.el-link.el-link--default:hover{color:#409EFF}.el-link.el-link--default.is-disabled{color:#C0C4CC}.el-link.el-link--primary{color:#409EFF}.el-link.el-link--primary:hover{color:#66b1ff}.el-link.el-link--primary.is-disabled{color:#a0cfff}.el-link.el-link--danger.is-underline:hover:after,.el-link.el-link--danger:after{border-color:#F56C6C}.el-link.el-link--danger{color:#F56C6C}.el-link.el-link--danger:hover{color:#f78989}.el-link.el-link--danger.is-disabled{color:#fab6b6}.el-link.el-link--success.is-underline:hover:after,.el-link.el-link--success:after{border-color:#67C23A}.el-link.el-link--success{color:#67C23A}.el-link.el-link--success:hover{color:#85ce61}.el-link.el-link--success.is-disabled{color:#b3e19d}.el-link.el-link--warning.is-underline:hover:after,.el-link.el-link--warning:after{border-color:#E6A23C}.el-link.el-link--warning{color:#E6A23C}.el-link.el-link--warning:hover{color:#ebb563}.el-link.el-link--warning.is-disabled{color:#f3d19e}.el-link.el-link--info.is-underline:hover:after,.el-link.el-link--info:after{border-color:#909399}.el-link.el-link--info{color:#909399}.el-link.el-link--info:hover{color:#a6a9ad}.el-link.el-link--info.is-disabled{color:#c8c9cc}.el-divider{background-color:#DCDFE6;position:relative}.el-divider--horizontal{display:block;height:1px;width:100%;margin:24px 0}.el-divider--vertical{display:inline-block;width:1px;height:1em;margin:0 8px;vertical-align:middle;position:relative}.el-divider__text{position:absolute;background-color:#FFF;padding:0 20px;color:#303133}.el-image__error,.el-image__placeholder{background:#F5F7FA}.el-divider__text.is-left{left:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-divider__text.is-center{left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.el-divider__text.is-right{right:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-image__error,.el-image__inner,.el-image__placeholder{width:100%;height:100%}.el-image{position:relative;display:inline-block;overflow:hidden}.el-image__inner{vertical-align:top}.el-image__inner--center{position:relative;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);display:block}.el-image__error{display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:14px;color:#C0C4CC;vertical-align:middle}.el-image__preview{cursor:pointer}.el-image-viewer__wrapper{position:fixed;top:0;right:0;bottom:0;left:0}.el-image-viewer__btn{position:absolute;z-index:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:50%;opacity:.8;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;user-select:none}.el-button,.el-checkbox{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.el-image-viewer__close{top:40px;right:40px;width:40px;height:40px;font-size:40px}.el-image-viewer__canvas{width:100%;height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-image-viewer__actions{left:50%;bottom:30px;-webkit-transform:translateX(-50%);transform:translateX(-50%);width:282px;height:44px;padding:0 23px;background-color:#606266;border-color:#fff;border-radius:22px}.el-image-viewer__actions__inner{width:100%;height:100%;text-align:justify;cursor:default;font-size:23px;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around}.el-image-viewer__next,.el-image-viewer__prev{top:50%;width:44px;height:44px;font-size:24px;color:#fff;background-color:#606266;border-color:#fff}.el-image-viewer__prev{-webkit-transform:translateY(-50%);transform:translateY(-50%);left:40px}.el-image-viewer__next{-webkit-transform:translateY(-50%);transform:translateY(-50%);right:40px;text-indent:2px}.el-image-viewer__mask{position:absolute;width:100%;height:100%;top:0;left:0;opacity:.5;background:#000}.viewer-fade-enter-active{-webkit-animation:viewer-fade-in .3s;animation:viewer-fade-in .3s}.viewer-fade-leave-active{-webkit-animation:viewer-fade-out .3s;animation:viewer-fade-out .3s}@-webkit-keyframes viewer-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes viewer-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@-webkit-keyframes viewer-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes viewer-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}.el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#FFF;border:1px solid #DCDFE6;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;-webkit-transition:.1s;transition:.1s;font-weight:500;padding:12px 20px;font-size:14px;border-radius:4px}.el-button+.el-button{margin-left:10px}.el-button:focus,.el-button:hover{color:#409EFF;border-color:#c6e2ff;background-color:#ecf5ff}.el-button:active{color:#3a8ee6;border-color:#3a8ee6;outline:0}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon-]+span{margin-left:5px}.el-button.is-plain:focus,.el-button.is-plain:hover{background:#FFF;border-color:#409EFF;color:#409EFF}.el-button.is-active,.el-button.is-plain:active{color:#3a8ee6;border-color:#3a8ee6}.el-button.is-plain:active{background:#FFF;outline:0}.el-button.is-disabled,.el-button.is-disabled:focus,.el-button.is-disabled:hover{color:#C0C4CC;cursor:not-allowed;background-image:none;background-color:#FFF;border-color:#EBEEF5}.el-button.is-disabled.el-button--text{background-color:transparent}.el-button.is-disabled.is-plain,.el-button.is-disabled.is-plain:focus,.el-button.is-disabled.is-plain:hover{background-color:#FFF;border-color:#EBEEF5;color:#C0C4CC}.el-button.is-loading{position:relative;pointer-events:none}.el-button.is-loading:before{pointer-events:none;content:'';position:absolute;left:-1px;top:-1px;right:-1px;bottom:-1px;border-radius:inherit;background-color:rgba(255,255,255,.35)}.el-button.is-round{border-radius:20px;padding:12px 23px}.el-button.is-circle{border-radius:50%;padding:12px}.el-button--primary{color:#FFF;background-color:#409EFF;border-color:#409EFF}.el-button--primary:focus,.el-button--primary:hover{background:#66b1ff;border-color:#66b1ff;color:#FFF}.el-button--primary.is-active,.el-button--primary:active{background:#3a8ee6;border-color:#3a8ee6;color:#FFF}.el-button--primary:active{outline:0}.el-button--primary.is-disabled,.el-button--primary.is-disabled:active,.el-button--primary.is-disabled:focus,.el-button--primary.is-disabled:hover{color:#FFF;background-color:#a0cfff;border-color:#a0cfff}.el-button--primary.is-plain{color:#409EFF;background:#ecf5ff;border-color:#b3d8ff}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#409EFF;border-color:#409EFF;color:#FFF}.el-button--primary.is-plain:active{background:#3a8ee6;border-color:#3a8ee6;color:#FFF;outline:0}.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover{color:#8cc5ff;background-color:#ecf5ff;border-color:#d9ecff}.el-button--success{color:#FFF;background-color:#67C23A;border-color:#67C23A}.el-button--success:focus,.el-button--success:hover{background:#85ce61;border-color:#85ce61;color:#FFF}.el-button--success.is-active,.el-button--success:active{background:#5daf34;border-color:#5daf34;color:#FFF}.el-button--success:active{outline:0}.el-button--success.is-disabled,.el-button--success.is-disabled:active,.el-button--success.is-disabled:focus,.el-button--success.is-disabled:hover{color:#FFF;background-color:#b3e19d;border-color:#b3e19d}.el-button--success.is-plain{color:#67C23A;background:#f0f9eb;border-color:#c2e7b0}.el-button--success.is-plain:focus,.el-button--success.is-plain:hover{background:#67C23A;border-color:#67C23A;color:#FFF}.el-button--success.is-plain:active{background:#5daf34;border-color:#5daf34;color:#FFF;outline:0}.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover{color:#a4da89;background-color:#f0f9eb;border-color:#e1f3d8}.el-button--warning{color:#FFF;background-color:#E6A23C;border-color:#E6A23C}.el-button--warning:focus,.el-button--warning:hover{background:#ebb563;border-color:#ebb563;color:#FFF}.el-button--warning.is-active,.el-button--warning:active{background:#cf9236;border-color:#cf9236;color:#FFF}.el-button--warning:active{outline:0}.el-button--warning.is-disabled,.el-button--warning.is-disabled:active,.el-button--warning.is-disabled:focus,.el-button--warning.is-disabled:hover{color:#FFF;background-color:#f3d19e;border-color:#f3d19e}.el-button--warning.is-plain{color:#E6A23C;background:#fdf6ec;border-color:#f5dab1}.el-button--warning.is-plain:focus,.el-button--warning.is-plain:hover{background:#E6A23C;border-color:#E6A23C;color:#FFF}.el-button--warning.is-plain:active{background:#cf9236;border-color:#cf9236;color:#FFF;outline:0}.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover{color:#f0c78a;background-color:#fdf6ec;border-color:#faecd8}.el-button--danger{color:#FFF;background-color:#F56C6C;border-color:#F56C6C}.el-button--danger:focus,.el-button--danger:hover{background:#f78989;border-color:#f78989;color:#FFF}.el-button--danger.is-active,.el-button--danger:active{background:#dd6161;border-color:#dd6161;color:#FFF}.el-button--danger:active{outline:0}.el-button--danger.is-disabled,.el-button--danger.is-disabled:active,.el-button--danger.is-disabled:focus,.el-button--danger.is-disabled:hover{color:#FFF;background-color:#fab6b6;border-color:#fab6b6}.el-button--danger.is-plain{color:#F56C6C;background:#fef0f0;border-color:#fbc4c4}.el-button--danger.is-plain:focus,.el-button--danger.is-plain:hover{background:#F56C6C;border-color:#F56C6C;color:#FFF}.el-button--danger.is-plain:active{background:#dd6161;border-color:#dd6161;color:#FFF;outline:0}.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover{color:#f9a7a7;background-color:#fef0f0;border-color:#fde2e2}.el-button--info{color:#FFF;background-color:#909399;border-color:#909399}.el-button--info:focus,.el-button--info:hover{background:#a6a9ad;border-color:#a6a9ad;color:#FFF}.el-button--info.is-active,.el-button--info:active{background:#82848a;border-color:#82848a;color:#FFF}.el-button--info:active{outline:0}.el-button--info.is-disabled,.el-button--info.is-disabled:active,.el-button--info.is-disabled:focus,.el-button--info.is-disabled:hover{color:#FFF;background-color:#c8c9cc;border-color:#c8c9cc}.el-button--info.is-plain{color:#909399;background:#f4f4f5;border-color:#d3d4d6}.el-button--info.is-plain:focus,.el-button--info.is-plain:hover{background:#909399;border-color:#909399;color:#FFF}.el-button--info.is-plain:active{background:#82848a;border-color:#82848a;color:#FFF;outline:0}.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover{color:#bcbec2;background-color:#f4f4f5;border-color:#e9e9eb}.el-button--text,.el-button--text.is-disabled,.el-button--text.is-disabled:focus,.el-button--text.is-disabled:hover,.el-button--text:active{border-color:transparent}.el-button--medium{padding:10px 20px;font-size:14px;border-radius:4px}.el-button--mini,.el-button--small{font-size:12px;border-radius:3px}.el-button--medium.is-round{padding:10px 20px}.el-button--medium.is-circle{padding:10px}.el-button--small,.el-button--small.is-round{padding:9px 15px}.el-button--small.is-circle{padding:9px}.el-button--mini,.el-button--mini.is-round{padding:7px 15px}.el-button--mini.is-circle{padding:7px}.el-button--text{color:#409EFF;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:#66b1ff;border-color:transparent;background-color:transparent}.el-button--text:active{color:#3a8ee6;background-color:transparent}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group::after,.el-button-group::before{display:table;content:\"\"}.el-button-group::after{clear:both}.el-button-group>.el-button{float:left;position:relative}.el-button-group>.el-button+.el-button{margin-left:0}.el-button-group>.el-button.is-disabled{z-index:1}.el-button-group>.el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.el-button-group>.el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group>.el-button:first-child:last-child{border-radius:4px}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:20px}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button:not(:last-child){margin-right:-1px}.el-button-group>.el-button.is-active,.el-button-group>.el-button:active,.el-button-group>.el-button:focus,.el-button-group>.el-button:hover{z-index:1}.el-button-group>.el-dropdown>.el-button{border-top-left-radius:0;border-bottom-left-radius:0;border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-calendar{background-color:#fff}.el-calendar__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:12px 20px;border-bottom:1px solid #EBEEF5}.el-backtop,.el-page-header{display:-webkit-box;display:-ms-flexbox}.el-calendar__title{color:#000;-ms-flex-item-align:center;align-self:center}.el-calendar__body{padding:12px 20px 35px}.el-calendar-table{table-layout:fixed;width:100%}.el-calendar-table thead th{padding:12px 0;color:#606266;font-weight:400}.el-calendar-table:not(.is-range) td.next,.el-calendar-table:not(.is-range) td.prev{color:#C0C4CC}.el-backtop,.el-calendar-table td.is-today{color:#409EFF}.el-calendar-table td{border-bottom:1px solid #EBEEF5;border-right:1px solid #EBEEF5;vertical-align:top;-webkit-transition:background-color .2s ease;transition:background-color .2s ease}.el-calendar-table td.is-selected{background-color:#F2F8FE}.el-calendar-table tr:first-child td{border-top:1px solid #EBEEF5}.el-calendar-table tr td:first-child{border-left:1px solid #EBEEF5}.el-calendar-table tr.el-calendar-table__row--hide-border td{border-top:none}.el-calendar-table .el-calendar-day{-webkit-box-sizing:border-box;box-sizing:border-box;padding:8px;height:85px}.el-calendar-table .el-calendar-day:hover{cursor:pointer;background-color:#F2F8FE}.el-backtop{position:fixed;background-color:#FFF;width:40px;height:40px;border-radius:50%;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:20px;-webkit-box-shadow:0 0 6px rgba(0,0,0,.12);box-shadow:0 0 6px rgba(0,0,0,.12);cursor:pointer;z-index:5}.el-backtop:hover{background-color:#F2F6FC}.el-page-header{display:flex;line-height:24px}.el-page-header__left{display:-webkit-box;display:-ms-flexbox;display:flex;cursor:pointer;margin-right:40px;position:relative}.el-page-header__left::after{content:\"\";position:absolute;width:1px;height:16px;right:-20px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);background-color:#DCDFE6}.el-checkbox,.el-checkbox__input{display:inline-block;position:relative;white-space:nowrap}.el-page-header__left .el-icon-back{font-size:18px;margin-right:6px;-ms-flex-item-align:center;align-self:center}.el-page-header__title{font-size:14px;font-weight:500}.el-page-header__content{font-size:18px;color:#303133}.el-checkbox{color:#606266;font-weight:500;font-size:14px;cursor:pointer;user-select:none;margin-right:30px}.el-checkbox-button__inner,.el-radio{font-weight:500;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.el-checkbox.is-bordered{padding:9px 20px 9px 10px;border-radius:4px;border:1px solid #DCDFE6;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:normal;height:40px}.el-checkbox.is-bordered.is-checked{border-color:#409EFF}.el-checkbox.is-bordered.is-disabled{border-color:#EBEEF5;cursor:not-allowed}.el-checkbox.is-bordered+.el-checkbox.is-bordered{margin-left:10px}.el-checkbox.is-bordered.el-checkbox--medium{padding:7px 20px 7px 10px;border-radius:4px;height:36px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label{line-height:17px;font-size:14px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{padding:5px 15px 5px 10px;border-radius:3px;height:32px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{line-height:15px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox.is-bordered.el-checkbox--mini{padding:3px 15px 3px 10px;border-radius:3px;height:28px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label{line-height:12px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox__input{cursor:pointer;outline:0;line-height:1;vertical-align:middle}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#DCDFE6;cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner::after{cursor:not-allowed;border-color:#C0C4CC}.el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#F2F6FC;border-color:#DCDFE6}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after{border-color:#C0C4CC}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#F2F6FC;border-color:#DCDFE6}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before{background-color:#C0C4CC;border-color:#C0C4CC}.el-checkbox__input.is-checked .el-checkbox__inner,.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#409EFF;border-color:#409EFF}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:#C0C4CC;cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner::after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:#409EFF}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#409EFF}.el-checkbox__input.is-indeterminate .el-checkbox__inner::before{content:'';position:absolute;display:block;background-color:#FFF;height:2px;-webkit-transform:scale(.5);transform:scale(.5);left:0;right:0;top:5px}.el-checkbox__input.is-indeterminate .el-checkbox__inner::after{display:none}.el-checkbox__inner{display:inline-block;position:relative;border:1px solid #DCDFE6;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box;width:14px;height:14px;background-color:#FFF;z-index:1;-webkit-transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46);transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46)}.el-checkbox__inner:hover{border-color:#409EFF}.el-checkbox__inner::after{-webkit-box-sizing:content-box;box-sizing:content-box;content:\"\";border:1px solid #FFF;border-left:0;border-top:0;height:7px;left:4px;position:absolute;top:1px;-webkit-transform:rotate(45deg) scaleY(0);transform:rotate(45deg) scaleY(0);width:3px;-webkit-transition:-webkit-transform .15s ease-in .05s;transition:-webkit-transform .15s ease-in .05s;transition:transform .15s ease-in .05s;transition:transform .15s ease-in .05s,-webkit-transform .15s ease-in .05s;-webkit-transform-origin:center;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;z-index:-1}.el-checkbox-button,.el-checkbox-button__inner{display:inline-block;position:relative}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox:last-of-type{margin-right:0}.el-checkbox-button__inner{line-height:1;white-space:nowrap;vertical-align:middle;cursor:pointer;background:#FFF;border:1px solid #DCDFE6;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);padding:12px 20px;font-size:14px;border-radius:0}.el-checkbox-button__inner.is-round{padding:12px 20px}.el-checkbox-button__inner:hover{color:#409EFF}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-radio,.el-radio__input{line-height:1;outline:0;white-space:nowrap}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{opacity:0;outline:0;position:absolute;margin:0;z-index:-1}.el-radio,.el-radio__inner,.el-radio__input{position:relative;display:inline-block}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:#FFF;background-color:#409EFF;border-color:#409EFF;-webkit-box-shadow:-1px 0 0 0 #8cc5ff;box-shadow:-1px 0 0 0 #8cc5ff}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#409EFF}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#C0C4CC;cursor:not-allowed;background-image:none;background-color:#FFF;border-color:#EBEEF5;-webkit-box-shadow:none;box-shadow:none}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:#EBEEF5}.el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #DCDFE6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#409EFF}.el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0}.el-checkbox-button--medium .el-checkbox-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-checkbox-button--medium .el-checkbox-button__inner.is-round{padding:10px 20px}.el-checkbox-button--small .el-checkbox-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:9px 15px}.el-checkbox-button--mini .el-checkbox-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-checkbox-button--mini .el-checkbox-button__inner.is-round{padding:7px 15px}.el-checkbox-group{font-size:0}.el-radio,.el-radio--medium.is-bordered .el-radio__label{font-size:14px}.el-radio{color:#606266;cursor:pointer;margin-right:30px}.el-cascader-node>.el-radio,.el-radio:last-child{margin-right:0}.el-radio.is-bordered{padding:12px 20px 0 10px;border-radius:4px;border:1px solid #DCDFE6;-webkit-box-sizing:border-box;box-sizing:border-box;height:40px}.el-radio.is-bordered.is-checked{border-color:#409EFF}.el-radio.is-bordered.is-disabled{cursor:not-allowed;border-color:#EBEEF5}.el-radio__input.is-disabled .el-radio__inner,.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:#F5F7FA;border-color:#E4E7ED}.el-radio.is-bordered+.el-radio.is-bordered{margin-left:10px}.el-radio--medium.is-bordered{padding:10px 20px 0 10px;border-radius:4px;height:36px}.el-radio--mini.is-bordered .el-radio__label,.el-radio--small.is-bordered .el-radio__label{font-size:12px}.el-radio--medium.is-bordered .el-radio__inner{height:14px;width:14px}.el-radio--small.is-bordered{padding:8px 15px 0 10px;border-radius:3px;height:32px}.el-radio--small.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio--mini.is-bordered{padding:6px 15px 0 10px;border-radius:3px;height:28px}.el-radio--mini.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio__input{cursor:pointer;vertical-align:middle}.el-radio__input.is-disabled .el-radio__inner{cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner::after{cursor:not-allowed;background-color:#F5F7FA}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner::after{background-color:#C0C4CC}.el-radio__input.is-disabled+span.el-radio__label{color:#C0C4CC;cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{border-color:#409EFF;background:#409EFF}.el-radio__input.is-checked .el-radio__inner::after{-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-checked+.el-radio__label{color:#409EFF}.el-radio__input.is-focus .el-radio__inner{border-color:#409EFF}.el-radio__inner{border:1px solid #DCDFE6;border-radius:100%;width:14px;height:14px;background-color:#FFF;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box}.el-radio__inner:hover{border-color:#409EFF}.el-radio__inner::after{width:4px;height:4px;border-radius:100%;background-color:#FFF;content:\"\";position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%) scale(0);transform:translate(-50%,-50%) scale(0);-webkit-transition:-webkit-transform .15s ease-in;transition:-webkit-transform .15s ease-in;transition:transform .15s ease-in;transition:transform .15s ease-in,-webkit-transform .15s ease-in}.el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #409EFF;box-shadow:0 0 2px 2px #409EFF}.el-radio__label{font-size:14px;padding-left:10px}.el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active>.el-scrollbar__bar,.el-scrollbar:focus>.el-scrollbar__bar,.el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out}.el-scrollbar__wrap{overflow:scroll;height:100%}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(144,147,153,.3);-webkit-transition:.3s background-color;transition:.3s background-color}.el-scrollbar__thumb:hover{background-color:rgba(144,147,153,.5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px;opacity:0;-webkit-transition:opacity 120ms ease-out;transition:opacity 120ms ease-out}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-cascader-panel{display:-webkit-box;display:-ms-flexbox;display:flex;border-radius:4px;font-size:14px}.el-cascader-panel.is-bordered{border:1px solid #E4E7ED;border-radius:4px}.el-cascader-menu{min-width:180px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;border-right:solid 1px #E4E7ED}.el-cascader-menu:last-child{border-right:none}.el-cascader-menu:last-child .el-cascader-node{padding-right:20px}.el-cascader-menu__wrap{height:204px}.el-cascader-menu__list{position:relative;min-height:100%;margin:0;padding:6px 0;list-style:none;-webkit-box-sizing:border-box;box-sizing:border-box}.el-avatar,.el-drawer{-webkit-box-sizing:border-box;overflow:hidden}.el-cascader-menu__hover-zone{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.el-cascader-menu__empty-text{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);text-align:center;color:#C0C4CC}.el-cascader-node{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 30px 0 20px;height:34px;line-height:34px;outline:0}.el-cascader-node.is-selectable.in-active-path{color:#606266}.el-cascader-node.in-active-path,.el-cascader-node.is-active,.el-cascader-node.is-selectable.in-checked-path{color:#409EFF;font-weight:700}.el-cascader-node:not(.is-disabled){cursor:pointer}.el-cascader-node:not(.is-disabled):focus,.el-cascader-node:not(.is-disabled):hover{background:#F5F7FA}.el-cascader-node.is-disabled{color:#C0C4CC;cursor:not-allowed}.el-cascader-node__prefix{position:absolute;left:10px}.el-cascader-node__postfix{position:absolute;right:10px}.el-cascader-node__label{-webkit-box-flex:1;-ms-flex:1;flex:1;padding:0 10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-cascader-node>.el-radio .el-radio__label{padding-left:0}.el-avatar{display:inline-block;box-sizing:border-box;text-align:center;color:#fff;background:#C0C4CC;width:40px;height:40px;line-height:40px;font-size:14px}.el-avatar>img{display:block;height:100%;vertical-align:middle}.el-drawer,.el-drawer__header{display:-webkit-box;display:-ms-flexbox}.el-avatar--circle{border-radius:50%}.el-avatar--square{border-radius:4px}.el-avatar--icon{font-size:18px}.el-avatar--large{width:40px;height:40px;line-height:40px}.el-avatar--medium{width:36px;height:36px;line-height:36px}.el-avatar--small{width:28px;height:28px;line-height:28px}.el-drawer.btt,.el-drawer.ttb,.el-drawer__container{left:0;right:0;width:100%}.el-drawer.ltr,.el-drawer.rtl,.el-drawer__container{top:0;bottom:0;height:100%}@-webkit-keyframes el-drawer-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes el-drawer-fade-in{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes rtl-drawer-in{0%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes rtl-drawer-in{0%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes rtl-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}}@keyframes rtl-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}}@-webkit-keyframes ltr-drawer-in{0%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes ltr-drawer-in{0%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes ltr-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}}@keyframes ltr-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}}@-webkit-keyframes ttb-drawer-in{0%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes ttb-drawer-in{0%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes ttb-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}}@keyframes ttb-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}}@-webkit-keyframes btt-drawer-in{0%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes btt-drawer-in{0%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes btt-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}}@keyframes btt-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}}.el-drawer{position:absolute;box-sizing:border-box;background-color:#FFF;display:flex;-ms-flex-direction:column;flex-direction:column;-webkit-box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12);box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12)}.el-drawer.rtl{-webkit-animation:rtl-drawer-out .3s;animation:rtl-drawer-out .3s;right:0}.el-drawer__open .el-drawer.rtl{-webkit-animation:rtl-drawer-in .3s 1ms;animation:rtl-drawer-in .3s 1ms}.el-drawer.ltr{-webkit-animation:ltr-drawer-out .3s;animation:ltr-drawer-out .3s;left:0}.el-drawer__open .el-drawer.ltr{-webkit-animation:ltr-drawer-in .3s 1ms;animation:ltr-drawer-in .3s 1ms}.el-drawer.ttb{-webkit-animation:ttb-drawer-out .3s;animation:ttb-drawer-out .3s;top:0}.el-drawer__open .el-drawer.ttb{-webkit-animation:ttb-drawer-in .3s 1ms;animation:ttb-drawer-in .3s 1ms}.el-drawer.btt{-webkit-animation:btt-drawer-out .3s;animation:btt-drawer-out .3s;bottom:0}.el-drawer__open .el-drawer.btt{-webkit-animation:btt-drawer-in .3s 1ms;animation:btt-drawer-in .3s 1ms}.el-drawer__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:hidden;margin:0}.el-drawer__header{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#72767b;display:flex;margin-bottom:32px;padding:20px 20px 0}.el-drawer__header>:first-child{-webkit-box-flex:1;-ms-flex:1;flex:1}.el-drawer__title{margin:0;-webkit-box-flex:1;-ms-flex:1;flex:1;line-height:inherit;font-size:1rem}.el-drawer__close-btn{border:none;cursor:pointer;font-size:20px;color:inherit;background-color:transparent}.el-drawer__body{-webkit-box-flex:1;-ms-flex:1;flex:1}.el-drawer__body>*{-webkit-box-sizing:border-box;box-sizing:border-box}.el-drawer__container{position:relative}.el-drawer-fade-enter-active{-webkit-animation:el-drawer-fade-in .3s;animation:el-drawer-fade-in .3s}.el-drawer-fade-leave-active{animation:el-drawer-fade-in .3s reverse}.el-popconfirm__main{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-popconfirm__icon{margin-right:5px}.el-popconfirm__action{text-align:right;margin:0}\n\n\n// WEBPACK FOOTER //\n// ./~/element-ui/lib/theme-chalk/index.css","/* Make clicks pass-through */\n#nprogress {\n pointer-events: none;\n}\n\n#nprogress .bar {\n background: #29d;\n\n position: fixed;\n z-index: 1031;\n top: 0;\n left: 0;\n\n width: 100%;\n height: 2px;\n}\n\n/* Fancy blur effect */\n#nprogress .peg {\n display: block;\n position: absolute;\n right: 0px;\n width: 100px;\n height: 100%;\n box-shadow: 0 0 10px #29d, 0 0 5px #29d;\n opacity: 1.0;\n\n -webkit-transform: rotate(3deg) translate(0px, -4px);\n -ms-transform: rotate(3deg) translate(0px, -4px);\n transform: rotate(3deg) translate(0px, -4px);\n}\n\n/* Remove these to get rid of the spinner */\n#nprogress .spinner {\n display: block;\n position: fixed;\n z-index: 1031;\n top: 15px;\n right: 15px;\n}\n\n#nprogress .spinner-icon {\n width: 18px;\n height: 18px;\n box-sizing: border-box;\n\n border: solid 2px transparent;\n border-top-color: #29d;\n border-left-color: #29d;\n border-radius: 50%;\n\n -webkit-animation: nprogress-spinner 400ms linear infinite;\n animation: nprogress-spinner 400ms linear infinite;\n}\n\n.nprogress-custom-parent {\n overflow: hidden;\n position: relative;\n}\n\n.nprogress-custom-parent #nprogress .spinner,\n.nprogress-custom-parent #nprogress .bar {\n position: absolute;\n}\n\n@-webkit-keyframes nprogress-spinner {\n 0% { -webkit-transform: rotate(0deg); }\n 100% { -webkit-transform: rotate(360deg); }\n}\n@keyframes nprogress-spinner {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./~/nprogress/nprogress.css","\n.login-container[data-v-2c8a1058] {\n /*box-shadow: 0 0px 8px 0 rgba(0, 0, 0, 0.06), 0 1px 0px 0 rgba(0, 0, 0, 0.02);*/\n -webkit-border-radius: 5px;\n border-radius: 5px;\n -moz-border-radius: 5px;\n background-clip: padding-box;\n margin: 180px auto;\n width: 350px;\n padding: 35px 35px 15px 35px;\n background: #fff;\n border: 1px solid #eaeaea;\n box-shadow: 0 0 25px #cac6c6;\n}\n.login-container .title[data-v-2c8a1058] {\n margin: 0px auto 40px auto;\n text-align: center;\n color: #505458;\n}\n.login-container .remember[data-v-2c8a1058] {\n margin: 0px 0px 35px 0px;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/views/Login.vue","\n.page-container[data-v-552f9c87] {\n font-size: 20px;\n text-align: center;\n color: #c0ccda;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/views/404.vue","\n.container[data-v-51a2c380] {\n position: absolute;\n top: 0px;\n bottom: 0px;\n width: 100%;\n height: 100%;\n}\n.container .header[data-v-51a2c380] {\n height: 60px;\n line-height: 60px;\n background: #eeeeee;\n border-left: 1px solid white;\n border-bottom: 6px solid #c0c1e1;\n}\n.container .header .userinfo[data-v-51a2c380] {\n text-align: right;\n padding-right: 120px;\n float: right;\n}\n.container .header .userinfo .userinfo-inner[data-v-51a2c380] {\n cursor: pointer;\n color: black;\n}\n.container .header .userinfo .userinfo-inner img[data-v-51a2c380] {\n width: 40px;\n height: 40px;\n border-radius: 20px;\n margin: 10px 0px 10px 10px;\n float: right;\n}\n.container .header .logo[data-v-51a2c380] {\n height: 60px;\n font-size: 22px;\n padding-left: 20px;\n padding-right: 20px;\n border-color: rgba(238, 241, 146, 0.3);\n border-right-width: 0px;\n border-right-style: solid;\n}\n.container .header .logo img[data-v-51a2c380] {\n width: 40px;\n float: left;\n margin: 10px 10px 10px 18px;\n}\n.container .header .logo .txt[data-v-51a2c380] {\n color: #fff;\n}\n.container .header .logo-width[data-v-51a2c380] {\n width: 350px;\n}\n.container .header .logo-collapse-width[data-v-51a2c380] {\n width: 60px;\n}\n.container .header .tools[data-v-51a2c380] {\n padding: 0px 23px;\n width: 14px;\n height: 60px;\n line-height: 60px;\n cursor: pointer;\n}\n.container .header .screenfull[data-v-51a2c380] {\n vertical-align: middle;\n height: 60px;\n color: red;\n}\n.container .main[data-v-51a2c380] {\n display: flex;\n position: absolute;\n top: 0px;\n bottom: 0px;\n overflow: hidden;\n}\n.container .main aside[data-v-51a2c380] {\n flex: 0 0 230px;\n width: 230px;\n height: 100%;\n}\n.container .main aside .el-menu[data-v-51a2c380] {\n height: 100%;\n}\n.container .main aside .collapsed[data-v-51a2c380] {\n width: 60px;\n}\n.container .main aside .collapsed .item[data-v-51a2c380] {\n position: relative;\n}\n.container .main aside .collapsed .submenu[data-v-51a2c380] {\n position: absolute;\n top: 0px;\n left: 60px;\n z-index: 99999;\n height: auto;\n display: none;\n}\n.container .main .menu-collapsed[data-v-51a2c380] {\n flex: 0 0 60px;\n width: 60px;\n}\n.container .main .menu-expanded[data-v-51a2c380] {\n flex: 0 0 230px;\n width: 230px;\n}\n.container .main .el-menu-item[data-v-51a2c380] {\n min-width: 60px;\n}\n.container .main .el-menu-item.is-active[data-v-51a2c380] {\n background-color: #353f4f !important;\n border-right: 4px solid #20a0ff;\n color: #20a0ff;\n}\n.container .main .menu-list[data-v-51a2c380] {\n height: 45px;\n line-height: 45px;\n}\n.container .main .menu-list.is-active[data-v-51a2c380] {\n background-color: #353f4f !important;\n border-right: 4px solid #20a0ff;\n color: #20a0ff;\n}\n.container .main .content-container[data-v-51a2c380] {\n flex: 1;\n overflow-y: scroll;\n}\n.container .main .content-container .breadcrumb-container .title[data-v-51a2c380] {\n width: 200px;\n float: left;\n color: #475669;\n}\n.container .main .content-container .breadcrumb-container .breadcrumb-inner[data-v-51a2c380] {\n float: right;\n}\n.container .main .content-container .content-wrapper[data-v-51a2c380] {\n background-color: #fff;\n box-sizing: border-box;\n}\n.toolbar[data-v-51a2c380] {\n background-color: #f8f8f8 !important;\n}\n.hand[data-v-51a2c380] {\n cursor: pointer;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/views/Home.vue","\n.screenfull[data-v-0135f127] {\r\n display: inline-block;\r\n cursor: pointer;\r\n vertical-align: -0.15em;\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/Screenfull/index.vue","\n.chart-container[data-v-612c0ec1] {\n width: 100%;\n float: left;\n}\n\n/*.chart div {\n height: 400px;\n float: left;\n}*/\n.el-col[data-v-612c0ec1] {\n padding: 30px 20px;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/views/charts/echarts.vue","\n.threejs-container[data-v-2daed92c] {\n width: 100%;\n float: left;\n}\n#demo[data-v-2daed92c] {\n font-family: 'Avenir', Helvetica, Arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n text-align: center;\n color: #2c3e50;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/views/3d/threejs.vue","\n.babylonjs-container[data-v-fee14efe] {\n width: 100%;\n float: left;\n}\n#renderCanvas[data-v-fee14efe] {\n width: 100%;\n height: 100%;\n touch-action: none;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/views/3d/babylonjs.vue","\n#excel-upload-input[data-v-3d16a820]{\r\n display: none;\r\n z-index: -9999;\n}\n#drop[data-v-3d16a820]{\r\n border: 2px dashed #bbb;\r\n width: 600px;\r\n height: 160px;\r\n line-height: 160px;\r\n margin: 0 auto;\r\n font-size: 24px;\r\n border-radius: 5px;\r\n text-align: center;\r\n color: #bbb;\r\n position: relative;\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/UploadExcel/index.vue","/*!\n * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome\n * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:\"\\f000\"}.fa-music:before{content:\"\\f001\"}.fa-search:before{content:\"\\f002\"}.fa-envelope-o:before{content:\"\\f003\"}.fa-heart:before{content:\"\\f004\"}.fa-star:before{content:\"\\f005\"}.fa-star-o:before{content:\"\\f006\"}.fa-user:before{content:\"\\f007\"}.fa-film:before{content:\"\\f008\"}.fa-th-large:before{content:\"\\f009\"}.fa-th:before{content:\"\\f00a\"}.fa-th-list:before{content:\"\\f00b\"}.fa-check:before{content:\"\\f00c\"}.fa-remove:before,.fa-close:before,.fa-times:before{content:\"\\f00d\"}.fa-search-plus:before{content:\"\\f00e\"}.fa-search-minus:before{content:\"\\f010\"}.fa-power-off:before{content:\"\\f011\"}.fa-signal:before{content:\"\\f012\"}.fa-gear:before,.fa-cog:before{content:\"\\f013\"}.fa-trash-o:before{content:\"\\f014\"}.fa-home:before{content:\"\\f015\"}.fa-file-o:before{content:\"\\f016\"}.fa-clock-o:before{content:\"\\f017\"}.fa-road:before{content:\"\\f018\"}.fa-download:before{content:\"\\f019\"}.fa-arrow-circle-o-down:before{content:\"\\f01a\"}.fa-arrow-circle-o-up:before{content:\"\\f01b\"}.fa-inbox:before{content:\"\\f01c\"}.fa-play-circle-o:before{content:\"\\f01d\"}.fa-rotate-right:before,.fa-repeat:before{content:\"\\f01e\"}.fa-refresh:before{content:\"\\f021\"}.fa-list-alt:before{content:\"\\f022\"}.fa-lock:before{content:\"\\f023\"}.fa-flag:before{content:\"\\f024\"}.fa-headphones:before{content:\"\\f025\"}.fa-volume-off:before{content:\"\\f026\"}.fa-volume-down:before{content:\"\\f027\"}.fa-volume-up:before{content:\"\\f028\"}.fa-qrcode:before{content:\"\\f029\"}.fa-barcode:before{content:\"\\f02a\"}.fa-tag:before{content:\"\\f02b\"}.fa-tags:before{content:\"\\f02c\"}.fa-book:before{content:\"\\f02d\"}.fa-bookmark:before{content:\"\\f02e\"}.fa-print:before{content:\"\\f02f\"}.fa-camera:before{content:\"\\f030\"}.fa-font:before{content:\"\\f031\"}.fa-bold:before{content:\"\\f032\"}.fa-italic:before{content:\"\\f033\"}.fa-text-height:before{content:\"\\f034\"}.fa-text-width:before{content:\"\\f035\"}.fa-align-left:before{content:\"\\f036\"}.fa-align-center:before{content:\"\\f037\"}.fa-align-right:before{content:\"\\f038\"}.fa-align-justify:before{content:\"\\f039\"}.fa-list:before{content:\"\\f03a\"}.fa-dedent:before,.fa-outdent:before{content:\"\\f03b\"}.fa-indent:before{content:\"\\f03c\"}.fa-video-camera:before{content:\"\\f03d\"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:\"\\f03e\"}.fa-pencil:before{content:\"\\f040\"}.fa-map-marker:before{content:\"\\f041\"}.fa-adjust:before{content:\"\\f042\"}.fa-tint:before{content:\"\\f043\"}.fa-edit:before,.fa-pencil-square-o:before{content:\"\\f044\"}.fa-share-square-o:before{content:\"\\f045\"}.fa-check-square-o:before{content:\"\\f046\"}.fa-arrows:before{content:\"\\f047\"}.fa-step-backward:before{content:\"\\f048\"}.fa-fast-backward:before{content:\"\\f049\"}.fa-backward:before{content:\"\\f04a\"}.fa-play:before{content:\"\\f04b\"}.fa-pause:before{content:\"\\f04c\"}.fa-stop:before{content:\"\\f04d\"}.fa-forward:before{content:\"\\f04e\"}.fa-fast-forward:before{content:\"\\f050\"}.fa-step-forward:before{content:\"\\f051\"}.fa-eject:before{content:\"\\f052\"}.fa-chevron-left:before{content:\"\\f053\"}.fa-chevron-right:before{content:\"\\f054\"}.fa-plus-circle:before{content:\"\\f055\"}.fa-minus-circle:before{content:\"\\f056\"}.fa-times-circle:before{content:\"\\f057\"}.fa-check-circle:before{content:\"\\f058\"}.fa-question-circle:before{content:\"\\f059\"}.fa-info-circle:before{content:\"\\f05a\"}.fa-crosshairs:before{content:\"\\f05b\"}.fa-times-circle-o:before{content:\"\\f05c\"}.fa-check-circle-o:before{content:\"\\f05d\"}.fa-ban:before{content:\"\\f05e\"}.fa-arrow-left:before{content:\"\\f060\"}.fa-arrow-right:before{content:\"\\f061\"}.fa-arrow-up:before{content:\"\\f062\"}.fa-arrow-down:before{content:\"\\f063\"}.fa-mail-forward:before,.fa-share:before{content:\"\\f064\"}.fa-expand:before{content:\"\\f065\"}.fa-compress:before{content:\"\\f066\"}.fa-plus:before{content:\"\\f067\"}.fa-minus:before{content:\"\\f068\"}.fa-asterisk:before{content:\"\\f069\"}.fa-exclamation-circle:before{content:\"\\f06a\"}.fa-gift:before{content:\"\\f06b\"}.fa-leaf:before{content:\"\\f06c\"}.fa-fire:before{content:\"\\f06d\"}.fa-eye:before{content:\"\\f06e\"}.fa-eye-slash:before{content:\"\\f070\"}.fa-warning:before,.fa-exclamation-triangle:before{content:\"\\f071\"}.fa-plane:before{content:\"\\f072\"}.fa-calendar:before{content:\"\\f073\"}.fa-random:before{content:\"\\f074\"}.fa-comment:before{content:\"\\f075\"}.fa-magnet:before{content:\"\\f076\"}.fa-chevron-up:before{content:\"\\f077\"}.fa-chevron-down:before{content:\"\\f078\"}.fa-retweet:before{content:\"\\f079\"}.fa-shopping-cart:before{content:\"\\f07a\"}.fa-folder:before{content:\"\\f07b\"}.fa-folder-open:before{content:\"\\f07c\"}.fa-arrows-v:before{content:\"\\f07d\"}.fa-arrows-h:before{content:\"\\f07e\"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:\"\\f080\"}.fa-twitter-square:before{content:\"\\f081\"}.fa-facebook-square:before{content:\"\\f082\"}.fa-camera-retro:before{content:\"\\f083\"}.fa-key:before{content:\"\\f084\"}.fa-gears:before,.fa-cogs:before{content:\"\\f085\"}.fa-comments:before{content:\"\\f086\"}.fa-thumbs-o-up:before{content:\"\\f087\"}.fa-thumbs-o-down:before{content:\"\\f088\"}.fa-star-half:before{content:\"\\f089\"}.fa-heart-o:before{content:\"\\f08a\"}.fa-sign-out:before{content:\"\\f08b\"}.fa-linkedin-square:before{content:\"\\f08c\"}.fa-thumb-tack:before{content:\"\\f08d\"}.fa-external-link:before{content:\"\\f08e\"}.fa-sign-in:before{content:\"\\f090\"}.fa-trophy:before{content:\"\\f091\"}.fa-github-square:before{content:\"\\f092\"}.fa-upload:before{content:\"\\f093\"}.fa-lemon-o:before{content:\"\\f094\"}.fa-phone:before{content:\"\\f095\"}.fa-square-o:before{content:\"\\f096\"}.fa-bookmark-o:before{content:\"\\f097\"}.fa-phone-square:before{content:\"\\f098\"}.fa-twitter:before{content:\"\\f099\"}.fa-facebook-f:before,.fa-facebook:before{content:\"\\f09a\"}.fa-github:before{content:\"\\f09b\"}.fa-unlock:before{content:\"\\f09c\"}.fa-credit-card:before{content:\"\\f09d\"}.fa-feed:before,.fa-rss:before{content:\"\\f09e\"}.fa-hdd-o:before{content:\"\\f0a0\"}.fa-bullhorn:before{content:\"\\f0a1\"}.fa-bell:before{content:\"\\f0f3\"}.fa-certificate:before{content:\"\\f0a3\"}.fa-hand-o-right:before{content:\"\\f0a4\"}.fa-hand-o-left:before{content:\"\\f0a5\"}.fa-hand-o-up:before{content:\"\\f0a6\"}.fa-hand-o-down:before{content:\"\\f0a7\"}.fa-arrow-circle-left:before{content:\"\\f0a8\"}.fa-arrow-circle-right:before{content:\"\\f0a9\"}.fa-arrow-circle-up:before{content:\"\\f0aa\"}.fa-arrow-circle-down:before{content:\"\\f0ab\"}.fa-globe:before{content:\"\\f0ac\"}.fa-wrench:before{content:\"\\f0ad\"}.fa-tasks:before{content:\"\\f0ae\"}.fa-filter:before{content:\"\\f0b0\"}.fa-briefcase:before{content:\"\\f0b1\"}.fa-arrows-alt:before{content:\"\\f0b2\"}.fa-group:before,.fa-users:before{content:\"\\f0c0\"}.fa-chain:before,.fa-link:before{content:\"\\f0c1\"}.fa-cloud:before{content:\"\\f0c2\"}.fa-flask:before{content:\"\\f0c3\"}.fa-cut:before,.fa-scissors:before{content:\"\\f0c4\"}.fa-copy:before,.fa-files-o:before{content:\"\\f0c5\"}.fa-paperclip:before{content:\"\\f0c6\"}.fa-save:before,.fa-floppy-o:before{content:\"\\f0c7\"}.fa-square:before{content:\"\\f0c8\"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:\"\\f0c9\"}.fa-list-ul:before{content:\"\\f0ca\"}.fa-list-ol:before{content:\"\\f0cb\"}.fa-strikethrough:before{content:\"\\f0cc\"}.fa-underline:before{content:\"\\f0cd\"}.fa-table:before{content:\"\\f0ce\"}.fa-magic:before{content:\"\\f0d0\"}.fa-truck:before{content:\"\\f0d1\"}.fa-pinterest:before{content:\"\\f0d2\"}.fa-pinterest-square:before{content:\"\\f0d3\"}.fa-google-plus-square:before{content:\"\\f0d4\"}.fa-google-plus:before{content:\"\\f0d5\"}.fa-money:before{content:\"\\f0d6\"}.fa-caret-down:before{content:\"\\f0d7\"}.fa-caret-up:before{content:\"\\f0d8\"}.fa-caret-left:before{content:\"\\f0d9\"}.fa-caret-right:before{content:\"\\f0da\"}.fa-columns:before{content:\"\\f0db\"}.fa-unsorted:before,.fa-sort:before{content:\"\\f0dc\"}.fa-sort-down:before,.fa-sort-desc:before{content:\"\\f0dd\"}.fa-sort-up:before,.fa-sort-asc:before{content:\"\\f0de\"}.fa-envelope:before{content:\"\\f0e0\"}.fa-linkedin:before{content:\"\\f0e1\"}.fa-rotate-left:before,.fa-undo:before{content:\"\\f0e2\"}.fa-legal:before,.fa-gavel:before{content:\"\\f0e3\"}.fa-dashboard:before,.fa-tachometer:before{content:\"\\f0e4\"}.fa-comment-o:before{content:\"\\f0e5\"}.fa-comments-o:before{content:\"\\f0e6\"}.fa-flash:before,.fa-bolt:before{content:\"\\f0e7\"}.fa-sitemap:before{content:\"\\f0e8\"}.fa-umbrella:before{content:\"\\f0e9\"}.fa-paste:before,.fa-clipboard:before{content:\"\\f0ea\"}.fa-lightbulb-o:before{content:\"\\f0eb\"}.fa-exchange:before{content:\"\\f0ec\"}.fa-cloud-download:before{content:\"\\f0ed\"}.fa-cloud-upload:before{content:\"\\f0ee\"}.fa-user-md:before{content:\"\\f0f0\"}.fa-stethoscope:before{content:\"\\f0f1\"}.fa-suitcase:before{content:\"\\f0f2\"}.fa-bell-o:before{content:\"\\f0a2\"}.fa-coffee:before{content:\"\\f0f4\"}.fa-cutlery:before{content:\"\\f0f5\"}.fa-file-text-o:before{content:\"\\f0f6\"}.fa-building-o:before{content:\"\\f0f7\"}.fa-hospital-o:before{content:\"\\f0f8\"}.fa-ambulance:before{content:\"\\f0f9\"}.fa-medkit:before{content:\"\\f0fa\"}.fa-fighter-jet:before{content:\"\\f0fb\"}.fa-beer:before{content:\"\\f0fc\"}.fa-h-square:before{content:\"\\f0fd\"}.fa-plus-square:before{content:\"\\f0fe\"}.fa-angle-double-left:before{content:\"\\f100\"}.fa-angle-double-right:before{content:\"\\f101\"}.fa-angle-double-up:before{content:\"\\f102\"}.fa-angle-double-down:before{content:\"\\f103\"}.fa-angle-left:before{content:\"\\f104\"}.fa-angle-right:before{content:\"\\f105\"}.fa-angle-up:before{content:\"\\f106\"}.fa-angle-down:before{content:\"\\f107\"}.fa-desktop:before{content:\"\\f108\"}.fa-laptop:before{content:\"\\f109\"}.fa-tablet:before{content:\"\\f10a\"}.fa-mobile-phone:before,.fa-mobile:before{content:\"\\f10b\"}.fa-circle-o:before{content:\"\\f10c\"}.fa-quote-left:before{content:\"\\f10d\"}.fa-quote-right:before{content:\"\\f10e\"}.fa-spinner:before{content:\"\\f110\"}.fa-circle:before{content:\"\\f111\"}.fa-mail-reply:before,.fa-reply:before{content:\"\\f112\"}.fa-github-alt:before{content:\"\\f113\"}.fa-folder-o:before{content:\"\\f114\"}.fa-folder-open-o:before{content:\"\\f115\"}.fa-smile-o:before{content:\"\\f118\"}.fa-frown-o:before{content:\"\\f119\"}.fa-meh-o:before{content:\"\\f11a\"}.fa-gamepad:before{content:\"\\f11b\"}.fa-keyboard-o:before{content:\"\\f11c\"}.fa-flag-o:before{content:\"\\f11d\"}.fa-flag-checkered:before{content:\"\\f11e\"}.fa-terminal:before{content:\"\\f120\"}.fa-code:before{content:\"\\f121\"}.fa-mail-reply-all:before,.fa-reply-all:before{content:\"\\f122\"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:\"\\f123\"}.fa-location-arrow:before{content:\"\\f124\"}.fa-crop:before{content:\"\\f125\"}.fa-code-fork:before{content:\"\\f126\"}.fa-unlink:before,.fa-chain-broken:before{content:\"\\f127\"}.fa-question:before{content:\"\\f128\"}.fa-info:before{content:\"\\f129\"}.fa-exclamation:before{content:\"\\f12a\"}.fa-superscript:before{content:\"\\f12b\"}.fa-subscript:before{content:\"\\f12c\"}.fa-eraser:before{content:\"\\f12d\"}.fa-puzzle-piece:before{content:\"\\f12e\"}.fa-microphone:before{content:\"\\f130\"}.fa-microphone-slash:before{content:\"\\f131\"}.fa-shield:before{content:\"\\f132\"}.fa-calendar-o:before{content:\"\\f133\"}.fa-fire-extinguisher:before{content:\"\\f134\"}.fa-rocket:before{content:\"\\f135\"}.fa-maxcdn:before{content:\"\\f136\"}.fa-chevron-circle-left:before{content:\"\\f137\"}.fa-chevron-circle-right:before{content:\"\\f138\"}.fa-chevron-circle-up:before{content:\"\\f139\"}.fa-chevron-circle-down:before{content:\"\\f13a\"}.fa-html5:before{content:\"\\f13b\"}.fa-css3:before{content:\"\\f13c\"}.fa-anchor:before{content:\"\\f13d\"}.fa-unlock-alt:before{content:\"\\f13e\"}.fa-bullseye:before{content:\"\\f140\"}.fa-ellipsis-h:before{content:\"\\f141\"}.fa-ellipsis-v:before{content:\"\\f142\"}.fa-rss-square:before{content:\"\\f143\"}.fa-play-circle:before{content:\"\\f144\"}.fa-ticket:before{content:\"\\f145\"}.fa-minus-square:before{content:\"\\f146\"}.fa-minus-square-o:before{content:\"\\f147\"}.fa-level-up:before{content:\"\\f148\"}.fa-level-down:before{content:\"\\f149\"}.fa-check-square:before{content:\"\\f14a\"}.fa-pencil-square:before{content:\"\\f14b\"}.fa-external-link-square:before{content:\"\\f14c\"}.fa-share-square:before{content:\"\\f14d\"}.fa-compass:before{content:\"\\f14e\"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:\"\\f150\"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:\"\\f151\"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:\"\\f152\"}.fa-euro:before,.fa-eur:before{content:\"\\f153\"}.fa-gbp:before{content:\"\\f154\"}.fa-dollar:before,.fa-usd:before{content:\"\\f155\"}.fa-rupee:before,.fa-inr:before{content:\"\\f156\"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:\"\\f157\"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:\"\\f158\"}.fa-won:before,.fa-krw:before{content:\"\\f159\"}.fa-bitcoin:before,.fa-btc:before{content:\"\\f15a\"}.fa-file:before{content:\"\\f15b\"}.fa-file-text:before{content:\"\\f15c\"}.fa-sort-alpha-asc:before{content:\"\\f15d\"}.fa-sort-alpha-desc:before{content:\"\\f15e\"}.fa-sort-amount-asc:before{content:\"\\f160\"}.fa-sort-amount-desc:before{content:\"\\f161\"}.fa-sort-numeric-asc:before{content:\"\\f162\"}.fa-sort-numeric-desc:before{content:\"\\f163\"}.fa-thumbs-up:before{content:\"\\f164\"}.fa-thumbs-down:before{content:\"\\f165\"}.fa-youtube-square:before{content:\"\\f166\"}.fa-youtube:before{content:\"\\f167\"}.fa-xing:before{content:\"\\f168\"}.fa-xing-square:before{content:\"\\f169\"}.fa-youtube-play:before{content:\"\\f16a\"}.fa-dropbox:before{content:\"\\f16b\"}.fa-stack-overflow:before{content:\"\\f16c\"}.fa-instagram:before{content:\"\\f16d\"}.fa-flickr:before{content:\"\\f16e\"}.fa-adn:before{content:\"\\f170\"}.fa-bitbucket:before{content:\"\\f171\"}.fa-bitbucket-square:before{content:\"\\f172\"}.fa-tumblr:before{content:\"\\f173\"}.fa-tumblr-square:before{content:\"\\f174\"}.fa-long-arrow-down:before{content:\"\\f175\"}.fa-long-arrow-up:before{content:\"\\f176\"}.fa-long-arrow-left:before{content:\"\\f177\"}.fa-long-arrow-right:before{content:\"\\f178\"}.fa-apple:before{content:\"\\f179\"}.fa-windows:before{content:\"\\f17a\"}.fa-android:before{content:\"\\f17b\"}.fa-linux:before{content:\"\\f17c\"}.fa-dribbble:before{content:\"\\f17d\"}.fa-skype:before{content:\"\\f17e\"}.fa-foursquare:before{content:\"\\f180\"}.fa-trello:before{content:\"\\f181\"}.fa-female:before{content:\"\\f182\"}.fa-male:before{content:\"\\f183\"}.fa-gittip:before,.fa-gratipay:before{content:\"\\f184\"}.fa-sun-o:before{content:\"\\f185\"}.fa-moon-o:before{content:\"\\f186\"}.fa-archive:before{content:\"\\f187\"}.fa-bug:before{content:\"\\f188\"}.fa-vk:before{content:\"\\f189\"}.fa-weibo:before{content:\"\\f18a\"}.fa-renren:before{content:\"\\f18b\"}.fa-pagelines:before{content:\"\\f18c\"}.fa-stack-exchange:before{content:\"\\f18d\"}.fa-arrow-circle-o-right:before{content:\"\\f18e\"}.fa-arrow-circle-o-left:before{content:\"\\f190\"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:\"\\f191\"}.fa-dot-circle-o:before{content:\"\\f192\"}.fa-wheelchair:before{content:\"\\f193\"}.fa-vimeo-square:before{content:\"\\f194\"}.fa-turkish-lira:before,.fa-try:before{content:\"\\f195\"}.fa-plus-square-o:before{content:\"\\f196\"}.fa-space-shuttle:before{content:\"\\f197\"}.fa-slack:before{content:\"\\f198\"}.fa-envelope-square:before{content:\"\\f199\"}.fa-wordpress:before{content:\"\\f19a\"}.fa-openid:before{content:\"\\f19b\"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:\"\\f19c\"}.fa-mortar-board:before,.fa-graduation-cap:before{content:\"\\f19d\"}.fa-yahoo:before{content:\"\\f19e\"}.fa-google:before{content:\"\\f1a0\"}.fa-reddit:before{content:\"\\f1a1\"}.fa-reddit-square:before{content:\"\\f1a2\"}.fa-stumbleupon-circle:before{content:\"\\f1a3\"}.fa-stumbleupon:before{content:\"\\f1a4\"}.fa-delicious:before{content:\"\\f1a5\"}.fa-digg:before{content:\"\\f1a6\"}.fa-pied-piper-pp:before{content:\"\\f1a7\"}.fa-pied-piper-alt:before{content:\"\\f1a8\"}.fa-drupal:before{content:\"\\f1a9\"}.fa-joomla:before{content:\"\\f1aa\"}.fa-language:before{content:\"\\f1ab\"}.fa-fax:before{content:\"\\f1ac\"}.fa-building:before{content:\"\\f1ad\"}.fa-child:before{content:\"\\f1ae\"}.fa-paw:before{content:\"\\f1b0\"}.fa-spoon:before{content:\"\\f1b1\"}.fa-cube:before{content:\"\\f1b2\"}.fa-cubes:before{content:\"\\f1b3\"}.fa-behance:before{content:\"\\f1b4\"}.fa-behance-square:before{content:\"\\f1b5\"}.fa-steam:before{content:\"\\f1b6\"}.fa-steam-square:before{content:\"\\f1b7\"}.fa-recycle:before{content:\"\\f1b8\"}.fa-automobile:before,.fa-car:before{content:\"\\f1b9\"}.fa-cab:before,.fa-taxi:before{content:\"\\f1ba\"}.fa-tree:before{content:\"\\f1bb\"}.fa-spotify:before{content:\"\\f1bc\"}.fa-deviantart:before{content:\"\\f1bd\"}.fa-soundcloud:before{content:\"\\f1be\"}.fa-database:before{content:\"\\f1c0\"}.fa-file-pdf-o:before{content:\"\\f1c1\"}.fa-file-word-o:before{content:\"\\f1c2\"}.fa-file-excel-o:before{content:\"\\f1c3\"}.fa-file-powerpoint-o:before{content:\"\\f1c4\"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:\"\\f1c5\"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:\"\\f1c6\"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:\"\\f1c7\"}.fa-file-movie-o:before,.fa-file-video-o:before{content:\"\\f1c8\"}.fa-file-code-o:before{content:\"\\f1c9\"}.fa-vine:before{content:\"\\f1ca\"}.fa-codepen:before{content:\"\\f1cb\"}.fa-jsfiddle:before{content:\"\\f1cc\"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:\"\\f1cd\"}.fa-circle-o-notch:before{content:\"\\f1ce\"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:\"\\f1d0\"}.fa-ge:before,.fa-empire:before{content:\"\\f1d1\"}.fa-git-square:before{content:\"\\f1d2\"}.fa-git:before{content:\"\\f1d3\"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:\"\\f1d4\"}.fa-tencent-weibo:before{content:\"\\f1d5\"}.fa-qq:before{content:\"\\f1d6\"}.fa-wechat:before,.fa-weixin:before{content:\"\\f1d7\"}.fa-send:before,.fa-paper-plane:before{content:\"\\f1d8\"}.fa-send-o:before,.fa-paper-plane-o:before{content:\"\\f1d9\"}.fa-history:before{content:\"\\f1da\"}.fa-circle-thin:before{content:\"\\f1db\"}.fa-header:before{content:\"\\f1dc\"}.fa-paragraph:before{content:\"\\f1dd\"}.fa-sliders:before{content:\"\\f1de\"}.fa-share-alt:before{content:\"\\f1e0\"}.fa-share-alt-square:before{content:\"\\f1e1\"}.fa-bomb:before{content:\"\\f1e2\"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:\"\\f1e3\"}.fa-tty:before{content:\"\\f1e4\"}.fa-binoculars:before{content:\"\\f1e5\"}.fa-plug:before{content:\"\\f1e6\"}.fa-slideshare:before{content:\"\\f1e7\"}.fa-twitch:before{content:\"\\f1e8\"}.fa-yelp:before{content:\"\\f1e9\"}.fa-newspaper-o:before{content:\"\\f1ea\"}.fa-wifi:before{content:\"\\f1eb\"}.fa-calculator:before{content:\"\\f1ec\"}.fa-paypal:before{content:\"\\f1ed\"}.fa-google-wallet:before{content:\"\\f1ee\"}.fa-cc-visa:before{content:\"\\f1f0\"}.fa-cc-mastercard:before{content:\"\\f1f1\"}.fa-cc-discover:before{content:\"\\f1f2\"}.fa-cc-amex:before{content:\"\\f1f3\"}.fa-cc-paypal:before{content:\"\\f1f4\"}.fa-cc-stripe:before{content:\"\\f1f5\"}.fa-bell-slash:before{content:\"\\f1f6\"}.fa-bell-slash-o:before{content:\"\\f1f7\"}.fa-trash:before{content:\"\\f1f8\"}.fa-copyright:before{content:\"\\f1f9\"}.fa-at:before{content:\"\\f1fa\"}.fa-eyedropper:before{content:\"\\f1fb\"}.fa-paint-brush:before{content:\"\\f1fc\"}.fa-birthday-cake:before{content:\"\\f1fd\"}.fa-area-chart:before{content:\"\\f1fe\"}.fa-pie-chart:before{content:\"\\f200\"}.fa-line-chart:before{content:\"\\f201\"}.fa-lastfm:before{content:\"\\f202\"}.fa-lastfm-square:before{content:\"\\f203\"}.fa-toggle-off:before{content:\"\\f204\"}.fa-toggle-on:before{content:\"\\f205\"}.fa-bicycle:before{content:\"\\f206\"}.fa-bus:before{content:\"\\f207\"}.fa-ioxhost:before{content:\"\\f208\"}.fa-angellist:before{content:\"\\f209\"}.fa-cc:before{content:\"\\f20a\"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:\"\\f20b\"}.fa-meanpath:before{content:\"\\f20c\"}.fa-buysellads:before{content:\"\\f20d\"}.fa-connectdevelop:before{content:\"\\f20e\"}.fa-dashcube:before{content:\"\\f210\"}.fa-forumbee:before{content:\"\\f211\"}.fa-leanpub:before{content:\"\\f212\"}.fa-sellsy:before{content:\"\\f213\"}.fa-shirtsinbulk:before{content:\"\\f214\"}.fa-simplybuilt:before{content:\"\\f215\"}.fa-skyatlas:before{content:\"\\f216\"}.fa-cart-plus:before{content:\"\\f217\"}.fa-cart-arrow-down:before{content:\"\\f218\"}.fa-diamond:before{content:\"\\f219\"}.fa-ship:before{content:\"\\f21a\"}.fa-user-secret:before{content:\"\\f21b\"}.fa-motorcycle:before{content:\"\\f21c\"}.fa-street-view:before{content:\"\\f21d\"}.fa-heartbeat:before{content:\"\\f21e\"}.fa-venus:before{content:\"\\f221\"}.fa-mars:before{content:\"\\f222\"}.fa-mercury:before{content:\"\\f223\"}.fa-intersex:before,.fa-transgender:before{content:\"\\f224\"}.fa-transgender-alt:before{content:\"\\f225\"}.fa-venus-double:before{content:\"\\f226\"}.fa-mars-double:before{content:\"\\f227\"}.fa-venus-mars:before{content:\"\\f228\"}.fa-mars-stroke:before{content:\"\\f229\"}.fa-mars-stroke-v:before{content:\"\\f22a\"}.fa-mars-stroke-h:before{content:\"\\f22b\"}.fa-neuter:before{content:\"\\f22c\"}.fa-genderless:before{content:\"\\f22d\"}.fa-facebook-official:before{content:\"\\f230\"}.fa-pinterest-p:before{content:\"\\f231\"}.fa-whatsapp:before{content:\"\\f232\"}.fa-server:before{content:\"\\f233\"}.fa-user-plus:before{content:\"\\f234\"}.fa-user-times:before{content:\"\\f235\"}.fa-hotel:before,.fa-bed:before{content:\"\\f236\"}.fa-viacoin:before{content:\"\\f237\"}.fa-train:before{content:\"\\f238\"}.fa-subway:before{content:\"\\f239\"}.fa-medium:before{content:\"\\f23a\"}.fa-yc:before,.fa-y-combinator:before{content:\"\\f23b\"}.fa-optin-monster:before{content:\"\\f23c\"}.fa-opencart:before{content:\"\\f23d\"}.fa-expeditedssl:before{content:\"\\f23e\"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:\"\\f240\"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:\"\\f241\"}.fa-battery-2:before,.fa-battery-half:before{content:\"\\f242\"}.fa-battery-1:before,.fa-battery-quarter:before{content:\"\\f243\"}.fa-battery-0:before,.fa-battery-empty:before{content:\"\\f244\"}.fa-mouse-pointer:before{content:\"\\f245\"}.fa-i-cursor:before{content:\"\\f246\"}.fa-object-group:before{content:\"\\f247\"}.fa-object-ungroup:before{content:\"\\f248\"}.fa-sticky-note:before{content:\"\\f249\"}.fa-sticky-note-o:before{content:\"\\f24a\"}.fa-cc-jcb:before{content:\"\\f24b\"}.fa-cc-diners-club:before{content:\"\\f24c\"}.fa-clone:before{content:\"\\f24d\"}.fa-balance-scale:before{content:\"\\f24e\"}.fa-hourglass-o:before{content:\"\\f250\"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:\"\\f251\"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:\"\\f252\"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:\"\\f253\"}.fa-hourglass:before{content:\"\\f254\"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:\"\\f255\"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:\"\\f256\"}.fa-hand-scissors-o:before{content:\"\\f257\"}.fa-hand-lizard-o:before{content:\"\\f258\"}.fa-hand-spock-o:before{content:\"\\f259\"}.fa-hand-pointer-o:before{content:\"\\f25a\"}.fa-hand-peace-o:before{content:\"\\f25b\"}.fa-trademark:before{content:\"\\f25c\"}.fa-registered:before{content:\"\\f25d\"}.fa-creative-commons:before{content:\"\\f25e\"}.fa-gg:before{content:\"\\f260\"}.fa-gg-circle:before{content:\"\\f261\"}.fa-tripadvisor:before{content:\"\\f262\"}.fa-odnoklassniki:before{content:\"\\f263\"}.fa-odnoklassniki-square:before{content:\"\\f264\"}.fa-get-pocket:before{content:\"\\f265\"}.fa-wikipedia-w:before{content:\"\\f266\"}.fa-safari:before{content:\"\\f267\"}.fa-chrome:before{content:\"\\f268\"}.fa-firefox:before{content:\"\\f269\"}.fa-opera:before{content:\"\\f26a\"}.fa-internet-explorer:before{content:\"\\f26b\"}.fa-tv:before,.fa-television:before{content:\"\\f26c\"}.fa-contao:before{content:\"\\f26d\"}.fa-500px:before{content:\"\\f26e\"}.fa-amazon:before{content:\"\\f270\"}.fa-calendar-plus-o:before{content:\"\\f271\"}.fa-calendar-minus-o:before{content:\"\\f272\"}.fa-calendar-times-o:before{content:\"\\f273\"}.fa-calendar-check-o:before{content:\"\\f274\"}.fa-industry:before{content:\"\\f275\"}.fa-map-pin:before{content:\"\\f276\"}.fa-map-signs:before{content:\"\\f277\"}.fa-map-o:before{content:\"\\f278\"}.fa-map:before{content:\"\\f279\"}.fa-commenting:before{content:\"\\f27a\"}.fa-commenting-o:before{content:\"\\f27b\"}.fa-houzz:before{content:\"\\f27c\"}.fa-vimeo:before{content:\"\\f27d\"}.fa-black-tie:before{content:\"\\f27e\"}.fa-fonticons:before{content:\"\\f280\"}.fa-reddit-alien:before{content:\"\\f281\"}.fa-edge:before{content:\"\\f282\"}.fa-credit-card-alt:before{content:\"\\f283\"}.fa-codiepie:before{content:\"\\f284\"}.fa-modx:before{content:\"\\f285\"}.fa-fort-awesome:before{content:\"\\f286\"}.fa-usb:before{content:\"\\f287\"}.fa-product-hunt:before{content:\"\\f288\"}.fa-mixcloud:before{content:\"\\f289\"}.fa-scribd:before{content:\"\\f28a\"}.fa-pause-circle:before{content:\"\\f28b\"}.fa-pause-circle-o:before{content:\"\\f28c\"}.fa-stop-circle:before{content:\"\\f28d\"}.fa-stop-circle-o:before{content:\"\\f28e\"}.fa-shopping-bag:before{content:\"\\f290\"}.fa-shopping-basket:before{content:\"\\f291\"}.fa-hashtag:before{content:\"\\f292\"}.fa-bluetooth:before{content:\"\\f293\"}.fa-bluetooth-b:before{content:\"\\f294\"}.fa-percent:before{content:\"\\f295\"}.fa-gitlab:before{content:\"\\f296\"}.fa-wpbeginner:before{content:\"\\f297\"}.fa-wpforms:before{content:\"\\f298\"}.fa-envira:before{content:\"\\f299\"}.fa-universal-access:before{content:\"\\f29a\"}.fa-wheelchair-alt:before{content:\"\\f29b\"}.fa-question-circle-o:before{content:\"\\f29c\"}.fa-blind:before{content:\"\\f29d\"}.fa-audio-description:before{content:\"\\f29e\"}.fa-volume-control-phone:before{content:\"\\f2a0\"}.fa-braille:before{content:\"\\f2a1\"}.fa-assistive-listening-systems:before{content:\"\\f2a2\"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:\"\\f2a3\"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:\"\\f2a4\"}.fa-glide:before{content:\"\\f2a5\"}.fa-glide-g:before{content:\"\\f2a6\"}.fa-signing:before,.fa-sign-language:before{content:\"\\f2a7\"}.fa-low-vision:before{content:\"\\f2a8\"}.fa-viadeo:before{content:\"\\f2a9\"}.fa-viadeo-square:before{content:\"\\f2aa\"}.fa-snapchat:before{content:\"\\f2ab\"}.fa-snapchat-ghost:before{content:\"\\f2ac\"}.fa-snapchat-square:before{content:\"\\f2ad\"}.fa-pied-piper:before{content:\"\\f2ae\"}.fa-first-order:before{content:\"\\f2b0\"}.fa-yoast:before{content:\"\\f2b1\"}.fa-themeisle:before{content:\"\\f2b2\"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:\"\\f2b3\"}.fa-fa:before,.fa-font-awesome:before{content:\"\\f2b4\"}.fa-handshake-o:before{content:\"\\f2b5\"}.fa-envelope-open:before{content:\"\\f2b6\"}.fa-envelope-open-o:before{content:\"\\f2b7\"}.fa-linode:before{content:\"\\f2b8\"}.fa-address-book:before{content:\"\\f2b9\"}.fa-address-book-o:before{content:\"\\f2ba\"}.fa-vcard:before,.fa-address-card:before{content:\"\\f2bb\"}.fa-vcard-o:before,.fa-address-card-o:before{content:\"\\f2bc\"}.fa-user-circle:before{content:\"\\f2bd\"}.fa-user-circle-o:before{content:\"\\f2be\"}.fa-user-o:before{content:\"\\f2c0\"}.fa-id-badge:before{content:\"\\f2c1\"}.fa-drivers-license:before,.fa-id-card:before{content:\"\\f2c2\"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:\"\\f2c3\"}.fa-quora:before{content:\"\\f2c4\"}.fa-free-code-camp:before{content:\"\\f2c5\"}.fa-telegram:before{content:\"\\f2c6\"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:\"\\f2c7\"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:\"\\f2c8\"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:\"\\f2c9\"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:\"\\f2ca\"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:\"\\f2cb\"}.fa-shower:before{content:\"\\f2cc\"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:\"\\f2cd\"}.fa-podcast:before{content:\"\\f2ce\"}.fa-window-maximize:before{content:\"\\f2d0\"}.fa-window-minimize:before{content:\"\\f2d1\"}.fa-window-restore:before{content:\"\\f2d2\"}.fa-times-rectangle:before,.fa-window-close:before{content:\"\\f2d3\"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:\"\\f2d4\"}.fa-bandcamp:before{content:\"\\f2d5\"}.fa-grav:before{content:\"\\f2d6\"}.fa-etsy:before{content:\"\\f2d7\"}.fa-imdb:before{content:\"\\f2d8\"}.fa-ravelry:before{content:\"\\f2d9\"}.fa-eercast:before{content:\"\\f2da\"}.fa-microchip:before{content:\"\\f2db\"}.fa-snowflake-o:before{content:\"\\f2dc\"}.fa-superpowers:before{content:\"\\f2dd\"}.fa-wpexplorer:before{content:\"\\f2de\"}.fa-meetup:before{content:\"\\f2e0\"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}\n\n\n\n// WEBPACK FOOTER //\n// ./~/font-awesome/css/font-awesome.min.css","html {\r\n font-family: \"Helvetica Neue\", Helvetica, \"PingFang SC\", \"Hiragino Sans GB\", \"Microsoft YaHei\", \"微软雅黑\", Arial, sans-serif;\r\n}\r\n\r\nhtml, body {\r\n height: 100%;\r\n}\r\n\r\n.fl {\r\n float: left;\r\n}\r\n\r\n.fr {\r\n float: right;\r\n}\r\n\r\n.align_center {\r\n text-align: center;\r\n}\r\n\r\n.align_left {\r\n text-align: left;\r\n}\r\n\r\n.align_right {\r\n text-align: right;\r\n}\r\n\r\n.ofh {\r\n overflow: hidden;\r\n}\r\n\r\n.hide {\r\n display: none;\r\n}\r\n\r\n.block {\r\n display: block;\r\n}\r\n\r\n.relative {\r\n position: relative;\r\n}\r\n\r\n.absolute {\r\n position: absolute;\r\n}\r\n\r\n.m_auto {\r\n margin: auto;\r\n}\r\n\r\n.width_100 {\r\n width: 100%;\r\n}\r\n\r\n.height_100 {\r\n height: 100%;\r\n}\r\n\r\n.nowrap {\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n}\r\n\r\n.d_box {\r\n display: flex;\r\n box-sizing: border-box;\r\n flex: 1;\r\n width: 100%;\r\n}\r\n\r\n.d_boxflex {\r\n flex: 1;\r\n display: block;\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/assets/scss/D:/gitee/vue-admin/src/assets/scss/components/_base.scss",".body-warp {\r\n animation: fadeIn .5s ease;\r\n}\r\n\r\n.left-side {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n bottom: 0;\r\n width: 220px;\r\n height: 100%;\r\n overflow-y: auto;\r\n background-color: #424f63;\r\n .logo {\r\n margin: 10px auto;\r\n text-align: center;\r\n }\r\n .menu-box {\r\n background-color: #424f63;\r\n .menu-list, .el-submenu__title {\r\n height: 45px;\r\n line-height: 45px;\r\n color: #fff;\r\n background-color: #424f63;\r\n .icon {\r\n width: 16px;\r\n font-size: 14px;\r\n }\r\n .text {\r\n margin-left: 10px;\r\n }\r\n &.is-active, &:hover {\r\n background-color: #353f4f !important;\r\n color: #65cea7;\r\n }\r\n }\r\n }\r\n}\r\n\r\n.panel {\r\n margin-bottom: 20px;\r\n background-color: #fff;\r\n border-radius: 4px;\r\n box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\r\n .panel-title {\r\n padding: 0 15px;\r\n color: #535351;\r\n height: 45px;\r\n line-height: 45px;\r\n font-size: 14px;\r\n font-weight: bold;\r\n text-transform: uppercase;\r\n border-bottom: 1px dotted rgba(0, 0, 0, 0.2);\r\n .panel_title_select {\r\n display: inline-block;\r\n .el-input__inner {\r\n height: 28px;\r\n }\r\n }\r\n }\r\n .panel-body {\r\n padding: 15px;\r\n overflow: hidden;\r\n font-weight: normal;\r\n .bottom-toolbar {\r\n margin-top: 15px;\r\n padding: 15px 0;\r\n }\r\n }\r\n}\r\n\r\n.footer {\r\n background: #fff;\r\n padding: 15px;\r\n color: #7A7676;\r\n font-size: 12px;\r\n position: static;\r\n bottom: 0;\r\n width: 100%;\r\n border-top: 1px solid #eff0f4;\r\n}\r\n\r\n.dropdown-menu {\r\n position: absolute;\r\n right: 0;\r\n top: 100%;\r\n width: 200px;\r\n padding: 5px;\r\n border-radius: 5px;\r\n background: #65cea7;\r\n .dropdown-list {\r\n padding: 0;\r\n line-height: normal;\r\n }\r\n .dropdown-btn {\r\n display: block;\r\n color: #fff;\r\n font-size: 13px;\r\n padding: 7px 10px;\r\n text-align: left;\r\n border-radius: 3px;\r\n cursor: pointer;\r\n &:hover {\r\n background: #2a323f;\r\n color: #fff;\r\n }\r\n .icon {\r\n margin-right: 5px;\r\n }\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/assets/scss/D:/gitee/vue-admin/src/assets/scss/components/_layout.scss"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/static/fonts/element-icons.535877f.woff b/dist/static/fonts/element-icons.535877f.woff deleted file mode 100644 index 02b9a2539e425a7a8c244faba92527602be76212..0000000000000000000000000000000000000000 Binary files a/dist/static/fonts/element-icons.535877f.woff and /dev/null differ diff --git a/dist/static/fonts/element-icons.732389d.ttf b/dist/static/fonts/element-icons.732389d.ttf deleted file mode 100644 index 91b74de36778b0ff8958d37d07ce70fb3b26f50b..0000000000000000000000000000000000000000 Binary files a/dist/static/fonts/element-icons.732389d.ttf and /dev/null differ diff --git a/dist/static/fonts/fontawesome-webfont.674f50d.eot b/dist/static/fonts/fontawesome-webfont.674f50d.eot deleted file mode 100644 index e9f60ca953f93e35eab4108bd414bc02ddcf3928..0000000000000000000000000000000000000000 Binary files a/dist/static/fonts/fontawesome-webfont.674f50d.eot and /dev/null differ diff --git a/dist/static/fonts/fontawesome-webfont.af7ae50.woff2 b/dist/static/fonts/fontawesome-webfont.af7ae50.woff2 deleted file mode 100644 index 4d13fc60404b91e398a37200c4a77b645cfd9586..0000000000000000000000000000000000000000 Binary files a/dist/static/fonts/fontawesome-webfont.af7ae50.woff2 and /dev/null differ diff --git a/dist/static/fonts/fontawesome-webfont.b06871f.ttf b/dist/static/fonts/fontawesome-webfont.b06871f.ttf deleted file mode 100644 index 35acda2fa1196aad98c2adf4378a7611dd713aa3..0000000000000000000000000000000000000000 Binary files a/dist/static/fonts/fontawesome-webfont.b06871f.ttf and /dev/null differ diff --git a/dist/static/fonts/fontawesome-webfont.fee66e7.woff b/dist/static/fonts/fontawesome-webfont.fee66e7.woff deleted file mode 100644 index 400014a4b06eee3d0c0d54402a47ab2601b2862b..0000000000000000000000000000000000000000 Binary files a/dist/static/fonts/fontawesome-webfont.fee66e7.woff and /dev/null differ diff --git a/dist/static/img/alipay.jpg b/dist/static/img/alipay.jpg deleted file mode 100644 index e36bb7431fcef7384153feec777b0eba328f2a90..0000000000000000000000000000000000000000 Binary files a/dist/static/img/alipay.jpg and /dev/null differ diff --git a/dist/static/img/alipay1.jpg b/dist/static/img/alipay1.jpg deleted file mode 100644 index 2780564ac7a5821b1def76e06fa9b6242f96afcb..0000000000000000000000000000000000000000 Binary files a/dist/static/img/alipay1.jpg and /dev/null differ diff --git a/dist/static/img/fontawesome-webfont.912ec66.svg b/dist/static/img/fontawesome-webfont.912ec66.svg deleted file mode 100644 index 855c845e538b65548118279537a04eab2ec6ef0d..0000000000000000000000000000000000000000 --- a/dist/static/img/fontawesome-webfont.912ec66.svg +++ /dev/null @@ -1,2671 +0,0 @@ - - - - -Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 - By ,,, -Copyright Dave Gandy 2016. All rights reserved. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/dist/static/js/0.fb071b4b3f9f09948d11.js b/dist/static/js/0.fb071b4b3f9f09948d11.js deleted file mode 100644 index f6e88e81f9d60c8061ca761eae130dfef75f2742..0000000000000000000000000000000000000000 --- a/dist/static/js/0.fb071b4b3f9f09948d11.js +++ /dev/null @@ -1,2 +0,0 @@ -webpackJsonp([0],{1118:function(t,e,n){"use strict";function o(t){return t&&t.__esModule?t:{default:t}}function r(t){for(var e=[],n=t.querySelectorAll("tr"),o=[],r=0;r=t.s.r&&r<=t.e.r&&a.length>=t.s.c&&a.length<=t.e.c)for(var e=0;e<=t.e.c-t.s.c;++e)a.push(null)}),(f||u)&&(f=f||1,u=u||1,o.push({s:{r:r,c:a.length},e:{r:r+f-1,c:a.length+u-1}})),a.push(""!==d?d:null),u)for(var b=0;br&&(o.s.r=r),o.s.c>i&&(o.s.c=i),o.e.r0&&void 0!==arguments[0]?arguments[0]:{},e=t.header,n=t.data,o=t.filename,r=t.autoWidth,a=void 0===r||r;o=o||"excel-list",n=[].concat((0,d.default)(n)),n.unshift(e);var c=new l,u=i(n);if(a){for(var f=n.map(function(t){return t.map(function(t){return null==t?{wch:10}:t.toString().charCodeAt(0)>255?{wch:2*t.toString().length}:{wch:t.toString().length}})}),b=f[0],v=1;v1?arguments[1]:void 0,_=void 0!==v,h=0,w=u(d);if(_&&(v=o(v,p>2?arguments[2]:void 0,2)),void 0==w||b==Array&&l(w))for(e=s(d.length),n=new b(e);e>h;h++)c(n,h,_?v(d[h],h):d[h]);else for(f=w.call(d),n=new b;!(r=f.next()).done;h++)c(n,h,_?i(f,v,[r.value,h],!0):r.value);return n.length=h,n}})},1127:function(t,e){t.exports='"use strict";\n\n(function (view) {\n "use strict";\n\n view.URL = view.URL || view.webkitURL;\n\n if (view.Blob && view.URL) {\n try {\n new Blob();\n return;\n } catch (e) {}\n }\n\n var BlobBuilder = view.BlobBuilder || view.WebKitBlobBuilder || view.MozBlobBuilder || function (view) {\n var get_class = function get_class(object) {\n return Object.prototype.toString.call(object).match(/^\\[object\\s(.*)\\]$/)[1];\n },\n FakeBlobBuilder = function BlobBuilder() {\n this.data = [];\n },\n FakeBlob = function Blob(data, type, encoding) {\n this.data = data;\n this.size = data.length;\n this.type = type;\n this.encoding = encoding;\n },\n FBB_proto = FakeBlobBuilder.prototype,\n FB_proto = FakeBlob.prototype,\n FileReaderSync = view.FileReaderSync,\n FileException = function FileException(type) {\n this.code = this[this.name = type];\n },\n file_ex_codes = ("NOT_FOUND_ERR SECURITY_ERR ABORT_ERR NOT_READABLE_ERR ENCODING_ERR " + "NO_MODIFICATION_ALLOWED_ERR INVALID_STATE_ERR SYNTAX_ERR").split(" "),\n file_ex_code = file_ex_codes.length,\n real_URL = view.URL || view.webkitURL || view,\n real_create_object_URL = real_URL.createObjectURL,\n real_revoke_object_URL = real_URL.revokeObjectURL,\n URL = real_URL,\n btoa = view.btoa,\n atob = view.atob,\n ArrayBuffer = view.ArrayBuffer,\n Uint8Array = view.Uint8Array;\n FakeBlob.fake = FB_proto.fake = true;\n while (file_ex_code--) {\n FileException.prototype[file_ex_codes[file_ex_code]] = file_ex_code + 1;\n }\n if (!real_URL.createObjectURL) {\n URL = view.URL = {};\n }\n URL.createObjectURL = function (blob) {\n var type = blob.type,\n data_URI_header;\n if (type === null) {\n type = "application/octet-stream";\n }\n if (blob instanceof FakeBlob) {\n data_URI_header = "data:" + type;\n if (blob.encoding === "base64") {\n return data_URI_header + ";base64," + blob.data;\n } else if (blob.encoding === "URI") {\n return data_URI_header + "," + decodeURIComponent(blob.data);\n }\n if (btoa) {\n return data_URI_header + ";base64," + btoa(blob.data);\n } else {\n return data_URI_header + "," + encodeURIComponent(blob.data);\n }\n } else if (real_create_object_URL) {\n return real_create_object_URL.call(real_URL, blob);\n }\n };\n URL.revokeObjectURL = function (object_URL) {\n if (object_URL.substring(0, 5) !== "data:" && real_revoke_object_URL) {\n real_revoke_object_URL.call(real_URL, object_URL);\n }\n };\n FBB_proto.append = function (data) {\n var bb = this.data;\n\n if (Uint8Array && (data instanceof ArrayBuffer || data instanceof Uint8Array)) {\n var str = "",\n buf = new Uint8Array(data),\n i = 0,\n buf_len = buf.length;\n for (; i < buf_len; i++) {\n str += String.fromCharCode(buf[i]);\n }\n bb.push(str);\n } else if (get_class(data) === "Blob" || get_class(data) === "File") {\n if (FileReaderSync) {\n var fr = new FileReaderSync();\n bb.push(fr.readAsBinaryString(data));\n } else {\n throw new FileException("NOT_READABLE_ERR");\n }\n } else if (data instanceof FakeBlob) {\n if (data.encoding === "base64" && atob) {\n bb.push(atob(data.data));\n } else if (data.encoding === "URI") {\n bb.push(decodeURIComponent(data.data));\n } else if (data.encoding === "raw") {\n bb.push(data.data);\n }\n } else {\n if (typeof data !== "string") {\n data += "";\n }\n\n bb.push(unescape(encodeURIComponent(data)));\n }\n };\n FBB_proto.getBlob = function (type) {\n if (!arguments.length) {\n type = null;\n }\n return new FakeBlob(this.data.join(""), type, "raw");\n };\n FBB_proto.toString = function () {\n return "[object BlobBuilder]";\n };\n FB_proto.slice = function (start, end, type) {\n var args = arguments.length;\n if (args < 3) {\n type = null;\n }\n return new FakeBlob(this.data.slice(start, args > 1 ? end : this.data.length), type, this.encoding);\n };\n FB_proto.toString = function () {\n return "[object Blob]";\n };\n FB_proto.close = function () {\n this.size = this.data.length = 0;\n };\n return FakeBlobBuilder;\n }(view);\n\n view.Blob = function Blob(blobParts, options) {\n var type = options ? options.type || "" : "";\n var builder = new BlobBuilder();\n if (blobParts) {\n for (var i = 0, len = blobParts.length; i < len; i++) {\n builder.append(blobParts[i]);\n }\n }\n return builder.getBlob(type);\n };\n})(typeof self !== "undefined" && self || typeof window !== "undefined" && window || undefined.content || undefined);'},1128:function(t,e){t.exports='/* FileSaver.js\n * A saveAs() FileSaver implementation.\n * 1.3.2\n * 2016-06-16 18:25:19\n *\n * By Eli Grey, http://eligrey.com\n * License: MIT\n * See https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md\n */\n\n/*global self */\n/*jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true */\n\n/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */\n\nvar saveAs = saveAs || (function(view) {\n\t"use strict";\n\t// IE <10 is explicitly unsupported\n\tif (typeof view === "undefined" || typeof navigator !== "undefined" && /MSIE [1-9]\\./.test(navigator.userAgent)) {\n\t\treturn;\n\t}\n\tvar\n\t\t doc = view.document\n\t\t // only get URL when necessary in case Blob.js hasn\'t overridden it yet\n\t\t, get_URL = function() {\n\t\t\treturn view.URL || view.webkitURL || view;\n\t\t}\n\t\t, save_link = doc.createElementNS("http://www.w3.org/1999/xhtml", "a")\n\t\t, can_use_save_link = "download" in save_link\n\t\t, click = function(node) {\n\t\t\tvar event = new MouseEvent("click");\n\t\t\tnode.dispatchEvent(event);\n\t\t}\n\t\t, is_safari = /constructor/i.test(view.HTMLElement) || view.safari\n\t\t, is_chrome_ios =/CriOS\\/[\\d]+/.test(navigator.userAgent)\n\t\t, throw_outside = function(ex) {\n\t\t\t(view.setImmediate || view.setTimeout)(function() {\n\t\t\t\tthrow ex;\n\t\t\t}, 0);\n\t\t}\n\t\t, force_saveable_type = "application/octet-stream"\n\t\t// the Blob API is fundamentally broken as there is no "downloadfinished" event to subscribe to\n\t\t, arbitrary_revoke_timeout = 1000 * 40 // in ms\n\t\t, revoke = function(file) {\n\t\t\tvar revoker = function() {\n\t\t\t\tif (typeof file === "string") { // file is an object URL\n\t\t\t\t\tget_URL().revokeObjectURL(file);\n\t\t\t\t} else { // file is a File\n\t\t\t\t\tfile.remove();\n\t\t\t\t}\n\t\t\t};\n\t\t\tsetTimeout(revoker, arbitrary_revoke_timeout);\n\t\t}\n\t\t, dispatch = function(filesaver, event_types, event) {\n\t\t\tevent_types = [].concat(event_types);\n\t\t\tvar i = event_types.length;\n\t\t\twhile (i--) {\n\t\t\t\tvar listener = filesaver["on" + event_types[i]];\n\t\t\t\tif (typeof listener === "function") {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlistener.call(filesaver, event || filesaver);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tthrow_outside(ex);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t, auto_bom = function(blob) {\n\t\t\t// prepend BOM for UTF-8 XML and text/* types (including HTML)\n\t\t\t// note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF\n\t\t\tif (/^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(blob.type)) {\n\t\t\t\treturn new Blob([String.fromCharCode(0xFEFF), blob], {type: blob.type});\n\t\t\t}\n\t\t\treturn blob;\n\t\t}\n\t\t, FileSaver = function(blob, name, no_auto_bom) {\n\t\t\tif (!no_auto_bom) {\n\t\t\t\tblob = auto_bom(blob);\n\t\t\t}\n\t\t\t// First try a.download, then web filesystem, then object URLs\n\t\t\tvar\n\t\t\t\t filesaver = this\n\t\t\t\t, type = blob.type\n\t\t\t\t, force = type === force_saveable_type\n\t\t\t\t, object_url\n\t\t\t\t, dispatch_all = function() {\n\t\t\t\t\tdispatch(filesaver, "writestart progress write writeend".split(" "));\n\t\t\t\t}\n\t\t\t\t// on any filesys errors revert to saving with object URLs\n\t\t\t\t, fs_error = function() {\n\t\t\t\t\tif ((is_chrome_ios || (force && is_safari)) && view.FileReader) {\n\t\t\t\t\t\t// Safari doesn\'t allow downloading of blob urls\n\t\t\t\t\t\tvar reader = new FileReader();\n\t\t\t\t\t\treader.onloadend = function() {\n\t\t\t\t\t\t\tvar url = is_chrome_ios ? reader.result : reader.result.replace(/^data:[^;]*;/, \'data:attachment/file;\');\n\t\t\t\t\t\t\tvar popup = view.open(url, \'_blank\');\n\t\t\t\t\t\t\tif(!popup) view.location.href = url;\n\t\t\t\t\t\t\turl=undefined; // release reference before dispatching\n\t\t\t\t\t\t\tfilesaver.readyState = filesaver.DONE;\n\t\t\t\t\t\t\tdispatch_all();\n\t\t\t\t\t\t};\n\t\t\t\t\t\treader.readAsDataURL(blob);\n\t\t\t\t\t\tfilesaver.readyState = filesaver.INIT;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t// don\'t create more object URLs than needed\n\t\t\t\t\tif (!object_url) {\n\t\t\t\t\t\tobject_url = get_URL().createObjectURL(blob);\n\t\t\t\t\t}\n\t\t\t\t\tif (force) {\n\t\t\t\t\t\tview.location.href = object_url;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar opened = view.open(object_url, "_blank");\n\t\t\t\t\t\tif (!opened) {\n\t\t\t\t\t\t\t// Apple does not allow window.open, see https://developer.apple.com/library/safari/documentation/Tools/Conceptual/SafariExtensionGuide/WorkingwithWindowsandTabs/WorkingwithWindowsandTabs.html\n\t\t\t\t\t\t\tview.location.href = object_url;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tfilesaver.readyState = filesaver.DONE;\n\t\t\t\t\tdispatch_all();\n\t\t\t\t\trevoke(object_url);\n\t\t\t\t}\n\t\t\t;\n\t\t\tfilesaver.readyState = filesaver.INIT;\n\n\t\t\tif (can_use_save_link) {\n\t\t\t\tobject_url = get_URL().createObjectURL(blob);\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tsave_link.href = object_url;\n\t\t\t\t\tsave_link.download = name;\n\t\t\t\t\tclick(save_link);\n\t\t\t\t\tdispatch_all();\n\t\t\t\t\trevoke(object_url);\n\t\t\t\t\tfilesaver.readyState = filesaver.DONE;\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfs_error();\n\t\t}\n\t\t, FS_proto = FileSaver.prototype\n\t\t, saveAs = function(blob, name, no_auto_bom) {\n\t\t\treturn new FileSaver(blob, name || blob.name || "download", no_auto_bom);\n\t\t}\n\t;\n\t// IE 10+ (native saveAs)\n\tif (typeof navigator !== "undefined" && navigator.msSaveOrOpenBlob) {\n\t\treturn function(blob, name, no_auto_bom) {\n\t\t\tname = name || blob.name || "download";\n\n\t\t\tif (!no_auto_bom) {\n\t\t\t\tblob = auto_bom(blob);\n\t\t\t}\n\t\t\treturn navigator.msSaveOrOpenBlob(blob, name);\n\t\t};\n\t}\n\n\tFS_proto.abort = function(){};\n\tFS_proto.readyState = FS_proto.INIT = 0;\n\tFS_proto.WRITING = 1;\n\tFS_proto.DONE = 2;\n\n\tFS_proto.error =\n\tFS_proto.onwritestart =\n\tFS_proto.onprogress =\n\tFS_proto.onwrite =\n\tFS_proto.onabort =\n\tFS_proto.onerror =\n\tFS_proto.onwriteend =\n\t\tnull;\n\n\treturn saveAs;\n}(\n\t typeof self !== "undefined" && self\n\t|| typeof window !== "undefined" && window\n\t|| this.content\n));\n// `self` is undefined in Firefox for Android content script context\n// while `this` is nsIContentFrameMessageManager\n// with an attribute `content` that corresponds to the window\n\nif (typeof module !== "undefined" && module.exports) {\n module.exports.saveAs = saveAs;\n} else if ((typeof define !== "undefined" && define !== null) && (define.amd !== null)) {\n define("FileSaver.js", function() {\n return saveAs;\n });\n}\n'},1129:function(t,e,n){n(1121)(n(1127))},1130:function(t,e,n){n(1121)(n(1128))}}); -//# sourceMappingURL=0.fb071b4b3f9f09948d11.js.map \ No newline at end of file diff --git a/dist/static/js/0.fb071b4b3f9f09948d11.js.map b/dist/static/js/0.fb071b4b3f9f09948d11.js.map deleted file mode 100644 index 53ef548e0777efb16fe37045fa238676d7bd58f7..0000000000000000000000000000000000000000 --- a/dist/static/js/0.fb071b4b3f9f09948d11.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///static/js/0.fb071b4b3f9f09948d11.js","webpack:///./src/vendor/Export2Excel.js","webpack:///./~/script-loader/addScript.js","webpack:///./~/babel-runtime/core-js/array/from.js","webpack:///./~/babel-runtime/helpers/toConsumableArray.js","webpack:///./~/core-js/library/fn/array/from.js","webpack:///./~/core-js/library/modules/_create-property.js","webpack:///./~/core-js/library/modules/es6.array.from.js","webpack:///./src/vendor/Blob.js","webpack:///./~/file-saver/FileSaver.js","webpack:///./src/vendor/Blob.js?a446","webpack:///./~/file-saver/FileSaver.js?a793"],"names":["webpackJsonp","1118","module","exports","__webpack_require__","_interopRequireDefault","obj","__esModule","default","generateArray","table","out","rows","querySelectorAll","ranges","R","length","outRow","row","columns","C","cell","colspan","getAttribute","rowspan","cellValue","innerText","forEach","range","s","r","e","c","i","push","k","datenum","v","date1904","Date","parse","UTC","sheet_from_array_of_arrays","data","opts","ws","cell_ref","XLSX","utils","encode_cell","t","z","SSF","_table","encode_range","Workbook","this","SheetNames","Sheets","s2ab","buf","ArrayBuffer","view","Uint8Array","charCodeAt","export_table_to_excel","id","theTable","document","getElementById","oo","wb","wbout","write","bookType","bookSST","type","saveAs","Blob","export_json_to_excel","header","filename","autoWidth","unshift","colWidth","map","val","toString","result","j","Object","defineProperty","value","_toConsumableArray2","_toConsumableArray3","_xlsx2","_xlsx","require","1121","src","log","error","console","execScript","attachEvent","addEventListener","eval","call","1122","1123","_from","_from2","arr","Array","isArray","arr2","1124","from","1125","$defineProperty","createDesc","object","index","f","1126","ctx","$export","toObject","isArrayIter","toLength","createProperty","getIterFn","S","F","iter","arrayLike","step","iterator","O","aLen","arguments","mapfn","undefined","mapping","iterFn","next","done","1127","1128","1129","1130"],"mappings":"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","file":"static/js/0.fb071b4b3f9f09948d11.js","sourcesContent":["webpackJsonp([0],{\n\n/***/ 1118:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _toConsumableArray2 = __webpack_require__(1123);\n\nvar _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);\n\nexports.export_table_to_excel = export_table_to_excel;\nexports.export_json_to_excel = export_json_to_excel;\n\nvar _xlsx = __webpack_require__(415);\n\nvar _xlsx2 = _interopRequireDefault(_xlsx);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n__webpack_require__(1130);\n__webpack_require__(1129);\n\n\nfunction generateArray(table) {\n var out = [];\n var rows = table.querySelectorAll('tr');\n var ranges = [];\n for (var R = 0; R < rows.length; ++R) {\n var outRow = [];\n var row = rows[R];\n var columns = row.querySelectorAll('td');\n for (var C = 0; C < columns.length; ++C) {\n var cell = columns[C];\n var colspan = cell.getAttribute('colspan');\n var rowspan = cell.getAttribute('rowspan');\n var cellValue = cell.innerText;\n if (cellValue !== \"\" && cellValue == +cellValue) cellValue = +cellValue;\n\n ranges.forEach(function (range) {\n if (R >= range.s.r && R <= range.e.r && outRow.length >= range.s.c && outRow.length <= range.e.c) {\n for (var i = 0; i <= range.e.c - range.s.c; ++i) {\n outRow.push(null);\n }\n }\n });\n\n if (rowspan || colspan) {\n rowspan = rowspan || 1;\n colspan = colspan || 1;\n ranges.push({\n s: {\n r: R,\n c: outRow.length\n },\n e: {\n r: R + rowspan - 1,\n c: outRow.length + colspan - 1\n }\n });\n };\n\n outRow.push(cellValue !== \"\" ? cellValue : null);\n\n if (colspan) for (var k = 0; k < colspan - 1; ++k) {\n outRow.push(null);\n }\n }\n out.push(outRow);\n }\n return [out, ranges];\n};\n\nfunction datenum(v, date1904) {\n if (date1904) v += 1462;\n var epoch = Date.parse(v);\n return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);\n}\n\nfunction sheet_from_array_of_arrays(data, opts) {\n var ws = {};\n var range = {\n s: {\n c: 10000000,\n r: 10000000\n },\n e: {\n c: 0,\n r: 0\n }\n };\n for (var R = 0; R != data.length; ++R) {\n for (var C = 0; C != data[R].length; ++C) {\n if (range.s.r > R) range.s.r = R;\n if (range.s.c > C) range.s.c = C;\n if (range.e.r < R) range.e.r = R;\n if (range.e.c < C) range.e.c = C;\n var cell = {\n v: data[R][C]\n };\n if (cell.v == null) continue;\n var cell_ref = _xlsx2.default.utils.encode_cell({\n c: C,\n r: R\n });\n\n if (typeof cell.v === 'number') cell.t = 'n';else if (typeof cell.v === 'boolean') cell.t = 'b';else if (cell.v instanceof Date) {\n cell.t = 'n';\n cell.z = _xlsx2.default.SSF._table[14];\n cell.v = datenum(cell.v);\n } else cell.t = 's';\n\n ws[cell_ref] = cell;\n }\n }\n if (range.s.c < 10000000) ws['!ref'] = _xlsx2.default.utils.encode_range(range);\n return ws;\n}\n\nfunction Workbook() {\n if (!(this instanceof Workbook)) return new Workbook();\n this.SheetNames = [];\n this.Sheets = {};\n}\n\nfunction s2ab(s) {\n var buf = new ArrayBuffer(s.length);\n var view = new Uint8Array(buf);\n for (var i = 0; i != s.length; ++i) {\n view[i] = s.charCodeAt(i) & 0xFF;\n }return buf;\n}\n\nfunction export_table_to_excel(id) {\n var theTable = document.getElementById(id);\n var oo = generateArray(theTable);\n var ranges = oo[1];\n\n var data = oo[0];\n var ws_name = \"Sheet1\";\n\n var wb = new Workbook(),\n ws = sheet_from_array_of_arrays(data);\n\n ws['!merges'] = ranges;\n\n wb.SheetNames.push(ws_name);\n wb.Sheets[ws_name] = ws;\n\n var wbout = _xlsx2.default.write(wb, {\n bookType: 'xlsx',\n bookSST: false,\n type: 'binary'\n });\n\n saveAs(new Blob([s2ab(wbout)], {\n type: \"application/octet-stream\"\n }), \"test.xlsx\");\n}\n\nfunction export_json_to_excel() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n header = _ref.header,\n data = _ref.data,\n filename = _ref.filename,\n _ref$autoWidth = _ref.autoWidth,\n autoWidth = _ref$autoWidth === undefined ? true : _ref$autoWidth;\n\n filename = filename || 'excel-list';\n data = [].concat((0, _toConsumableArray3.default)(data));\n data.unshift(header);\n var ws_name = \"Sheet1\";\n var wb = new Workbook(),\n ws = sheet_from_array_of_arrays(data);\n\n if (autoWidth) {\n var colWidth = data.map(function (row) {\n return row.map(function (val) {\n if (val == null) {\n return {\n 'wch': 10\n };\n } else if (val.toString().charCodeAt(0) > 255) {\n return {\n 'wch': val.toString().length * 2\n };\n } else {\n return {\n 'wch': val.toString().length\n };\n }\n });\n });\n\n var result = colWidth[0];\n for (var i = 1; i < colWidth.length; i++) {\n for (var j = 0; j < colWidth[i].length; j++) {\n if (result[j]['wch'] < colWidth[i][j]['wch']) {\n result[j]['wch'] = colWidth[i][j]['wch'];\n }\n }\n }\n ws['!cols'] = result;\n }\n\n wb.SheetNames.push(ws_name);\n wb.Sheets[ws_name] = ws;\n\n var wbout = _xlsx2.default.write(wb, {\n bookType: 'xlsx',\n bookSST: false,\n type: 'binary'\n });\n saveAs(new Blob([s2ab(wbout)], {\n type: \"application/octet-stream\"\n }), filename + \".xlsx\");\n}\n\n/***/ }),\n\n/***/ 1121:\n/***/ (function(module, exports) {\n\n/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\nmodule.exports = function(src) {\n\tfunction log(error) {\n\t\t(typeof console !== \"undefined\")\n\t\t&& (console.error || console.log)(\"[Script Loader]\", error);\n\t}\n\n\t// Check for IE =< 8\n\tfunction isIE() {\n\t\treturn typeof attachEvent !== \"undefined\" && typeof addEventListener === \"undefined\";\n\t}\n\n\ttry {\n\t\tif (typeof execScript !== \"undefined\" && isIE()) {\n\t\t\texecScript(src);\n\t\t} else if (typeof eval !== \"undefined\") {\n\t\t\teval.call(null, src);\n\t\t} else {\n\t\t\tlog(\"EvalError: No eval function available\");\n\t\t}\n\t} catch (error) {\n\t\tlog(error);\n\t}\n}\n\n\n/***/ }),\n\n/***/ 1122:\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = { \"default\": __webpack_require__(1124), __esModule: true };\n\n/***/ }),\n\n/***/ 1123:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _from = __webpack_require__(1122);\n\nvar _from2 = _interopRequireDefault(_from);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n } else {\n return (0, _from2.default)(arr);\n }\n};\n\n/***/ }),\n\n/***/ 1124:\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(254);\n__webpack_require__(1126);\nmodule.exports = __webpack_require__(26).Array.from;\n\n\n/***/ }),\n\n/***/ 1125:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $defineProperty = __webpack_require__(67);\nvar createDesc = __webpack_require__(133);\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n\n\n/***/ }),\n\n/***/ 1126:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ctx = __webpack_require__(132);\nvar $export = __webpack_require__(46);\nvar toObject = __webpack_require__(134);\nvar call = __webpack_require__(412);\nvar isArrayIter = __webpack_require__(411);\nvar toLength = __webpack_require__(253);\nvar createProperty = __webpack_require__(1125);\nvar getIterFn = __webpack_require__(414);\n\n$export($export.S + $export.F * !__webpack_require__(413)(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n\n\n/***/ }),\n\n/***/ 1127:\n/***/ (function(module, exports) {\n\nmodule.exports = \"\\\"use strict\\\";\\n\\n(function (view) {\\n \\\"use strict\\\";\\n\\n view.URL = view.URL || view.webkitURL;\\n\\n if (view.Blob && view.URL) {\\n try {\\n new Blob();\\n return;\\n } catch (e) {}\\n }\\n\\n var BlobBuilder = view.BlobBuilder || view.WebKitBlobBuilder || view.MozBlobBuilder || function (view) {\\n var get_class = function get_class(object) {\\n return Object.prototype.toString.call(object).match(/^\\\\[object\\\\s(.*)\\\\]$/)[1];\\n },\\n FakeBlobBuilder = function BlobBuilder() {\\n this.data = [];\\n },\\n FakeBlob = function Blob(data, type, encoding) {\\n this.data = data;\\n this.size = data.length;\\n this.type = type;\\n this.encoding = encoding;\\n },\\n FBB_proto = FakeBlobBuilder.prototype,\\n FB_proto = FakeBlob.prototype,\\n FileReaderSync = view.FileReaderSync,\\n FileException = function FileException(type) {\\n this.code = this[this.name = type];\\n },\\n file_ex_codes = (\\\"NOT_FOUND_ERR SECURITY_ERR ABORT_ERR NOT_READABLE_ERR ENCODING_ERR \\\" + \\\"NO_MODIFICATION_ALLOWED_ERR INVALID_STATE_ERR SYNTAX_ERR\\\").split(\\\" \\\"),\\n file_ex_code = file_ex_codes.length,\\n real_URL = view.URL || view.webkitURL || view,\\n real_create_object_URL = real_URL.createObjectURL,\\n real_revoke_object_URL = real_URL.revokeObjectURL,\\n URL = real_URL,\\n btoa = view.btoa,\\n atob = view.atob,\\n ArrayBuffer = view.ArrayBuffer,\\n Uint8Array = view.Uint8Array;\\n FakeBlob.fake = FB_proto.fake = true;\\n while (file_ex_code--) {\\n FileException.prototype[file_ex_codes[file_ex_code]] = file_ex_code + 1;\\n }\\n if (!real_URL.createObjectURL) {\\n URL = view.URL = {};\\n }\\n URL.createObjectURL = function (blob) {\\n var type = blob.type,\\n data_URI_header;\\n if (type === null) {\\n type = \\\"application/octet-stream\\\";\\n }\\n if (blob instanceof FakeBlob) {\\n data_URI_header = \\\"data:\\\" + type;\\n if (blob.encoding === \\\"base64\\\") {\\n return data_URI_header + \\\";base64,\\\" + blob.data;\\n } else if (blob.encoding === \\\"URI\\\") {\\n return data_URI_header + \\\",\\\" + decodeURIComponent(blob.data);\\n }\\n if (btoa) {\\n return data_URI_header + \\\";base64,\\\" + btoa(blob.data);\\n } else {\\n return data_URI_header + \\\",\\\" + encodeURIComponent(blob.data);\\n }\\n } else if (real_create_object_URL) {\\n return real_create_object_URL.call(real_URL, blob);\\n }\\n };\\n URL.revokeObjectURL = function (object_URL) {\\n if (object_URL.substring(0, 5) !== \\\"data:\\\" && real_revoke_object_URL) {\\n real_revoke_object_URL.call(real_URL, object_URL);\\n }\\n };\\n FBB_proto.append = function (data) {\\n var bb = this.data;\\n\\n if (Uint8Array && (data instanceof ArrayBuffer || data instanceof Uint8Array)) {\\n var str = \\\"\\\",\\n buf = new Uint8Array(data),\\n i = 0,\\n buf_len = buf.length;\\n for (; i < buf_len; i++) {\\n str += String.fromCharCode(buf[i]);\\n }\\n bb.push(str);\\n } else if (get_class(data) === \\\"Blob\\\" || get_class(data) === \\\"File\\\") {\\n if (FileReaderSync) {\\n var fr = new FileReaderSync();\\n bb.push(fr.readAsBinaryString(data));\\n } else {\\n throw new FileException(\\\"NOT_READABLE_ERR\\\");\\n }\\n } else if (data instanceof FakeBlob) {\\n if (data.encoding === \\\"base64\\\" && atob) {\\n bb.push(atob(data.data));\\n } else if (data.encoding === \\\"URI\\\") {\\n bb.push(decodeURIComponent(data.data));\\n } else if (data.encoding === \\\"raw\\\") {\\n bb.push(data.data);\\n }\\n } else {\\n if (typeof data !== \\\"string\\\") {\\n data += \\\"\\\";\\n }\\n\\n bb.push(unescape(encodeURIComponent(data)));\\n }\\n };\\n FBB_proto.getBlob = function (type) {\\n if (!arguments.length) {\\n type = null;\\n }\\n return new FakeBlob(this.data.join(\\\"\\\"), type, \\\"raw\\\");\\n };\\n FBB_proto.toString = function () {\\n return \\\"[object BlobBuilder]\\\";\\n };\\n FB_proto.slice = function (start, end, type) {\\n var args = arguments.length;\\n if (args < 3) {\\n type = null;\\n }\\n return new FakeBlob(this.data.slice(start, args > 1 ? end : this.data.length), type, this.encoding);\\n };\\n FB_proto.toString = function () {\\n return \\\"[object Blob]\\\";\\n };\\n FB_proto.close = function () {\\n this.size = this.data.length = 0;\\n };\\n return FakeBlobBuilder;\\n }(view);\\n\\n view.Blob = function Blob(blobParts, options) {\\n var type = options ? options.type || \\\"\\\" : \\\"\\\";\\n var builder = new BlobBuilder();\\n if (blobParts) {\\n for (var i = 0, len = blobParts.length; i < len; i++) {\\n builder.append(blobParts[i]);\\n }\\n }\\n return builder.getBlob(type);\\n };\\n})(typeof self !== \\\"undefined\\\" && self || typeof window !== \\\"undefined\\\" && window || undefined.content || undefined);\"\n\n/***/ }),\n\n/***/ 1128:\n/***/ (function(module, exports) {\n\nmodule.exports = \"/* FileSaver.js\\n * A saveAs() FileSaver implementation.\\n * 1.3.2\\n * 2016-06-16 18:25:19\\n *\\n * By Eli Grey, http://eligrey.com\\n * License: MIT\\n * See https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md\\n */\\n\\n/*global self */\\n/*jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true */\\n\\n/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */\\n\\nvar saveAs = saveAs || (function(view) {\\n\\t\\\"use strict\\\";\\n\\t// IE <10 is explicitly unsupported\\n\\tif (typeof view === \\\"undefined\\\" || typeof navigator !== \\\"undefined\\\" && /MSIE [1-9]\\\\./.test(navigator.userAgent)) {\\n\\t\\treturn;\\n\\t}\\n\\tvar\\n\\t\\t doc = view.document\\n\\t\\t // only get URL when necessary in case Blob.js hasn't overridden it yet\\n\\t\\t, get_URL = function() {\\n\\t\\t\\treturn view.URL || view.webkitURL || view;\\n\\t\\t}\\n\\t\\t, save_link = doc.createElementNS(\\\"http://www.w3.org/1999/xhtml\\\", \\\"a\\\")\\n\\t\\t, can_use_save_link = \\\"download\\\" in save_link\\n\\t\\t, click = function(node) {\\n\\t\\t\\tvar event = new MouseEvent(\\\"click\\\");\\n\\t\\t\\tnode.dispatchEvent(event);\\n\\t\\t}\\n\\t\\t, is_safari = /constructor/i.test(view.HTMLElement) || view.safari\\n\\t\\t, is_chrome_ios =/CriOS\\\\/[\\\\d]+/.test(navigator.userAgent)\\n\\t\\t, throw_outside = function(ex) {\\n\\t\\t\\t(view.setImmediate || view.setTimeout)(function() {\\n\\t\\t\\t\\tthrow ex;\\n\\t\\t\\t}, 0);\\n\\t\\t}\\n\\t\\t, force_saveable_type = \\\"application/octet-stream\\\"\\n\\t\\t// the Blob API is fundamentally broken as there is no \\\"downloadfinished\\\" event to subscribe to\\n\\t\\t, arbitrary_revoke_timeout = 1000 * 40 // in ms\\n\\t\\t, revoke = function(file) {\\n\\t\\t\\tvar revoker = function() {\\n\\t\\t\\t\\tif (typeof file === \\\"string\\\") { // file is an object URL\\n\\t\\t\\t\\t\\tget_URL().revokeObjectURL(file);\\n\\t\\t\\t\\t} else { // file is a File\\n\\t\\t\\t\\t\\tfile.remove();\\n\\t\\t\\t\\t}\\n\\t\\t\\t};\\n\\t\\t\\tsetTimeout(revoker, arbitrary_revoke_timeout);\\n\\t\\t}\\n\\t\\t, dispatch = function(filesaver, event_types, event) {\\n\\t\\t\\tevent_types = [].concat(event_types);\\n\\t\\t\\tvar i = event_types.length;\\n\\t\\t\\twhile (i--) {\\n\\t\\t\\t\\tvar listener = filesaver[\\\"on\\\" + event_types[i]];\\n\\t\\t\\t\\tif (typeof listener === \\\"function\\\") {\\n\\t\\t\\t\\t\\ttry {\\n\\t\\t\\t\\t\\t\\tlistener.call(filesaver, event || filesaver);\\n\\t\\t\\t\\t\\t} catch (ex) {\\n\\t\\t\\t\\t\\t\\tthrow_outside(ex);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\t, auto_bom = function(blob) {\\n\\t\\t\\t// prepend BOM for UTF-8 XML and text/* types (including HTML)\\n\\t\\t\\t// note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF\\n\\t\\t\\tif (/^\\\\s*(?:text\\\\/\\\\S*|application\\\\/xml|\\\\S*\\\\/\\\\S*\\\\+xml)\\\\s*;.*charset\\\\s*=\\\\s*utf-8/i.test(blob.type)) {\\n\\t\\t\\t\\treturn new Blob([String.fromCharCode(0xFEFF), blob], {type: blob.type});\\n\\t\\t\\t}\\n\\t\\t\\treturn blob;\\n\\t\\t}\\n\\t\\t, FileSaver = function(blob, name, no_auto_bom) {\\n\\t\\t\\tif (!no_auto_bom) {\\n\\t\\t\\t\\tblob = auto_bom(blob);\\n\\t\\t\\t}\\n\\t\\t\\t// First try a.download, then web filesystem, then object URLs\\n\\t\\t\\tvar\\n\\t\\t\\t\\t filesaver = this\\n\\t\\t\\t\\t, type = blob.type\\n\\t\\t\\t\\t, force = type === force_saveable_type\\n\\t\\t\\t\\t, object_url\\n\\t\\t\\t\\t, dispatch_all = function() {\\n\\t\\t\\t\\t\\tdispatch(filesaver, \\\"writestart progress write writeend\\\".split(\\\" \\\"));\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t// on any filesys errors revert to saving with object URLs\\n\\t\\t\\t\\t, fs_error = function() {\\n\\t\\t\\t\\t\\tif ((is_chrome_ios || (force && is_safari)) && view.FileReader) {\\n\\t\\t\\t\\t\\t\\t// Safari doesn't allow downloading of blob urls\\n\\t\\t\\t\\t\\t\\tvar reader = new FileReader();\\n\\t\\t\\t\\t\\t\\treader.onloadend = function() {\\n\\t\\t\\t\\t\\t\\t\\tvar url = is_chrome_ios ? reader.result : reader.result.replace(/^data:[^;]*;/, 'data:attachment/file;');\\n\\t\\t\\t\\t\\t\\t\\tvar popup = view.open(url, '_blank');\\n\\t\\t\\t\\t\\t\\t\\tif(!popup) view.location.href = url;\\n\\t\\t\\t\\t\\t\\t\\turl=undefined; // release reference before dispatching\\n\\t\\t\\t\\t\\t\\t\\tfilesaver.readyState = filesaver.DONE;\\n\\t\\t\\t\\t\\t\\t\\tdispatch_all();\\n\\t\\t\\t\\t\\t\\t};\\n\\t\\t\\t\\t\\t\\treader.readAsDataURL(blob);\\n\\t\\t\\t\\t\\t\\tfilesaver.readyState = filesaver.INIT;\\n\\t\\t\\t\\t\\t\\treturn;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t// don't create more object URLs than needed\\n\\t\\t\\t\\t\\tif (!object_url) {\\n\\t\\t\\t\\t\\t\\tobject_url = get_URL().createObjectURL(blob);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tif (force) {\\n\\t\\t\\t\\t\\t\\tview.location.href = object_url;\\n\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\tvar opened = view.open(object_url, \\\"_blank\\\");\\n\\t\\t\\t\\t\\t\\tif (!opened) {\\n\\t\\t\\t\\t\\t\\t\\t// Apple does not allow window.open, see https://developer.apple.com/library/safari/documentation/Tools/Conceptual/SafariExtensionGuide/WorkingwithWindowsandTabs/WorkingwithWindowsandTabs.html\\n\\t\\t\\t\\t\\t\\t\\tview.location.href = object_url;\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tfilesaver.readyState = filesaver.DONE;\\n\\t\\t\\t\\t\\tdispatch_all();\\n\\t\\t\\t\\t\\trevoke(object_url);\\n\\t\\t\\t\\t}\\n\\t\\t\\t;\\n\\t\\t\\tfilesaver.readyState = filesaver.INIT;\\n\\n\\t\\t\\tif (can_use_save_link) {\\n\\t\\t\\t\\tobject_url = get_URL().createObjectURL(blob);\\n\\t\\t\\t\\tsetTimeout(function() {\\n\\t\\t\\t\\t\\tsave_link.href = object_url;\\n\\t\\t\\t\\t\\tsave_link.download = name;\\n\\t\\t\\t\\t\\tclick(save_link);\\n\\t\\t\\t\\t\\tdispatch_all();\\n\\t\\t\\t\\t\\trevoke(object_url);\\n\\t\\t\\t\\t\\tfilesaver.readyState = filesaver.DONE;\\n\\t\\t\\t\\t});\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\n\\t\\t\\tfs_error();\\n\\t\\t}\\n\\t\\t, FS_proto = FileSaver.prototype\\n\\t\\t, saveAs = function(blob, name, no_auto_bom) {\\n\\t\\t\\treturn new FileSaver(blob, name || blob.name || \\\"download\\\", no_auto_bom);\\n\\t\\t}\\n\\t;\\n\\t// IE 10+ (native saveAs)\\n\\tif (typeof navigator !== \\\"undefined\\\" && navigator.msSaveOrOpenBlob) {\\n\\t\\treturn function(blob, name, no_auto_bom) {\\n\\t\\t\\tname = name || blob.name || \\\"download\\\";\\n\\n\\t\\t\\tif (!no_auto_bom) {\\n\\t\\t\\t\\tblob = auto_bom(blob);\\n\\t\\t\\t}\\n\\t\\t\\treturn navigator.msSaveOrOpenBlob(blob, name);\\n\\t\\t};\\n\\t}\\n\\n\\tFS_proto.abort = function(){};\\n\\tFS_proto.readyState = FS_proto.INIT = 0;\\n\\tFS_proto.WRITING = 1;\\n\\tFS_proto.DONE = 2;\\n\\n\\tFS_proto.error =\\n\\tFS_proto.onwritestart =\\n\\tFS_proto.onprogress =\\n\\tFS_proto.onwrite =\\n\\tFS_proto.onabort =\\n\\tFS_proto.onerror =\\n\\tFS_proto.onwriteend =\\n\\t\\tnull;\\n\\n\\treturn saveAs;\\n}(\\n\\t typeof self !== \\\"undefined\\\" && self\\n\\t|| typeof window !== \\\"undefined\\\" && window\\n\\t|| this.content\\n));\\n// `self` is undefined in Firefox for Android content script context\\n// while `this` is nsIContentFrameMessageManager\\n// with an attribute `content` that corresponds to the window\\n\\nif (typeof module !== \\\"undefined\\\" && module.exports) {\\n module.exports.saveAs = saveAs;\\n} else if ((typeof define !== \\\"undefined\\\" && define !== null) && (define.amd !== null)) {\\n define(\\\"FileSaver.js\\\", function() {\\n return saveAs;\\n });\\n}\\n\"\n\n/***/ }),\n\n/***/ 1129:\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(1121)(__webpack_require__(1127))\n\n/***/ }),\n\n/***/ 1130:\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(1121)(__webpack_require__(1128))\n\n/***/ })\n\n});\n\n\n// WEBPACK FOOTER //\n// static/js/0.fb071b4b3f9f09948d11.js","/* eslint-disable */\r\nrequire('script-loader!file-saver');\r\nrequire('script-loader!@/vendor/Blob');\r\nimport XLSX from 'xlsx'\r\n\r\nfunction generateArray(table) {\r\n var out = [];\r\n var rows = table.querySelectorAll('tr');\r\n var ranges = [];\r\n for (var R = 0; R < rows.length; ++R) {\r\n var outRow = [];\r\n var row = rows[R];\r\n var columns = row.querySelectorAll('td');\r\n for (var C = 0; C < columns.length; ++C) {\r\n var cell = columns[C];\r\n var colspan = cell.getAttribute('colspan');\r\n var rowspan = cell.getAttribute('rowspan');\r\n var cellValue = cell.innerText;\r\n if (cellValue !== \"\" && cellValue == +cellValue) cellValue = +cellValue;\r\n\r\n //Skip ranges\r\n ranges.forEach(function (range) {\r\n if (R >= range.s.r && R <= range.e.r && outRow.length >= range.s.c && outRow.length <= range.e.c) {\r\n for (var i = 0; i <= range.e.c - range.s.c; ++i) outRow.push(null);\r\n }\r\n });\r\n\r\n //Handle Row Span\r\n if (rowspan || colspan) {\r\n rowspan = rowspan || 1;\r\n colspan = colspan || 1;\r\n ranges.push({\r\n s: {\r\n r: R,\r\n c: outRow.length\r\n },\r\n e: {\r\n r: R + rowspan - 1,\r\n c: outRow.length + colspan - 1\r\n }\r\n });\r\n };\r\n\r\n //Handle Value\r\n outRow.push(cellValue !== \"\" ? cellValue : null);\r\n\r\n //Handle Colspan\r\n if (colspan)\r\n for (var k = 0; k < colspan - 1; ++k) outRow.push(null);\r\n }\r\n out.push(outRow);\r\n }\r\n return [out, ranges];\r\n};\r\n\r\nfunction datenum(v, date1904) {\r\n if (date1904) v += 1462;\r\n var epoch = Date.parse(v);\r\n return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);\r\n}\r\n\r\nfunction sheet_from_array_of_arrays(data, opts) {\r\n var ws = {};\r\n var range = {\r\n s: {\r\n c: 10000000,\r\n r: 10000000\r\n },\r\n e: {\r\n c: 0,\r\n r: 0\r\n }\r\n };\r\n for (var R = 0; R != data.length; ++R) {\r\n for (var C = 0; C != data[R].length; ++C) {\r\n if (range.s.r > R) range.s.r = R;\r\n if (range.s.c > C) range.s.c = C;\r\n if (range.e.r < R) range.e.r = R;\r\n if (range.e.c < C) range.e.c = C;\r\n var cell = {\r\n v: data[R][C]\r\n };\r\n if (cell.v == null) continue;\r\n var cell_ref = XLSX.utils.encode_cell({\r\n c: C,\r\n r: R\r\n });\r\n\r\n if (typeof cell.v === 'number') cell.t = 'n';\r\n else if (typeof cell.v === 'boolean') cell.t = 'b';\r\n else if (cell.v instanceof Date) {\r\n cell.t = 'n';\r\n cell.z = XLSX.SSF._table[14];\r\n cell.v = datenum(cell.v);\r\n } else cell.t = 's';\r\n\r\n ws[cell_ref] = cell;\r\n }\r\n }\r\n if (range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range);\r\n return ws;\r\n}\r\n\r\nfunction Workbook() {\r\n if (!(this instanceof Workbook)) return new Workbook();\r\n this.SheetNames = [];\r\n this.Sheets = {};\r\n}\r\n\r\nfunction s2ab(s) {\r\n var buf = new ArrayBuffer(s.length);\r\n var view = new Uint8Array(buf);\r\n for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;\r\n return buf;\r\n}\r\n\r\nexport function export_table_to_excel(id) {\r\n var theTable = document.getElementById(id);\r\n var oo = generateArray(theTable);\r\n var ranges = oo[1];\r\n\r\n /* original data */\r\n var data = oo[0];\r\n var ws_name = \"Sheet1\";\r\n\r\n var wb = new Workbook(),\r\n ws = sheet_from_array_of_arrays(data);\r\n\r\n /* add ranges to worksheet */\r\n // ws['!cols'] = ['apple', 'banan'];\r\n ws['!merges'] = ranges;\r\n\r\n /* add worksheet to workbook */\r\n wb.SheetNames.push(ws_name);\r\n wb.Sheets[ws_name] = ws;\r\n\r\n var wbout = XLSX.write(wb, {\r\n bookType: 'xlsx',\r\n bookSST: false,\r\n type: 'binary'\r\n });\r\n\r\n saveAs(new Blob([s2ab(wbout)], {\r\n type: \"application/octet-stream\"\r\n }), \"test.xlsx\")\r\n}\r\n\r\nexport function export_json_to_excel({\r\n header,\r\n data,\r\n filename,\r\n autoWidth = true\r\n} = {}) {\r\n /* original data */\r\n filename = filename || 'excel-list'\r\n data = [...data]\r\n data.unshift(header);\r\n var ws_name = \"Sheet1\";\r\n var wb = new Workbook(),\r\n ws = sheet_from_array_of_arrays(data);\r\n\r\n if (autoWidth) {\r\n /*设置worksheet每列的最大宽度*/\r\n const colWidth = data.map(row => row.map(val => {\r\n /*先判断是否为null/undefined*/\r\n if (val == null) {\r\n return {\r\n 'wch': 10\r\n };\r\n }\r\n /*再判断是否为中文*/\r\n else if (val.toString().charCodeAt(0) > 255) {\r\n return {\r\n 'wch': val.toString().length * 2\r\n };\r\n } else {\r\n return {\r\n 'wch': val.toString().length\r\n };\r\n }\r\n }))\r\n /*以第一行为初始值*/\r\n let result = colWidth[0];\r\n for (let i = 1; i < colWidth.length; i++) {\r\n for (let j = 0; j < colWidth[i].length; j++) {\r\n if (result[j]['wch'] < colWidth[i][j]['wch']) {\r\n result[j]['wch'] = colWidth[i][j]['wch'];\r\n }\r\n }\r\n }\r\n ws['!cols'] = result;\r\n }\r\n\r\n /* add worksheet to workbook */\r\n wb.SheetNames.push(ws_name);\r\n wb.Sheets[ws_name] = ws;\r\n\r\n var wbout = XLSX.write(wb, {\r\n bookType: 'xlsx',\r\n bookSST: false,\r\n type: 'binary'\r\n });\r\n saveAs(new Blob([s2ab(wbout)], {\r\n type: \"application/octet-stream\"\r\n }), filename + \".xlsx\");\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/vendor/Export2Excel.js","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\nmodule.exports = function(src) {\n\tfunction log(error) {\n\t\t(typeof console !== \"undefined\")\n\t\t&& (console.error || console.log)(\"[Script Loader]\", error);\n\t}\n\n\t// Check for IE =< 8\n\tfunction isIE() {\n\t\treturn typeof attachEvent !== \"undefined\" && typeof addEventListener === \"undefined\";\n\t}\n\n\ttry {\n\t\tif (typeof execScript !== \"undefined\" && isIE()) {\n\t\t\texecScript(src);\n\t\t} else if (typeof eval !== \"undefined\") {\n\t\t\teval.call(null, src);\n\t\t} else {\n\t\t\tlog(\"EvalError: No eval function available\");\n\t\t}\n\t} catch (error) {\n\t\tlog(error);\n\t}\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/script-loader/addScript.js\n// module id = 1121\n// module chunks = 0","module.exports = { \"default\": require(\"core-js/library/fn/array/from\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/array/from.js\n// module id = 1122\n// module chunks = 0","\"use strict\";\n\nexports.__esModule = true;\n\nvar _from = require(\"../core-js/array/from\");\n\nvar _from2 = _interopRequireDefault(_from);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n } else {\n return (0, _from2.default)(arr);\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/helpers/toConsumableArray.js\n// module id = 1123\n// module chunks = 0","require('../../modules/es6.string.iterator');\nrequire('../../modules/es6.array.from');\nmodule.exports = require('../../modules/_core').Array.from;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/fn/array/from.js\n// module id = 1124\n// module chunks = 0","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_create-property.js\n// module id = 1125\n// module chunks = 0","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/es6.array.from.js\n// module id = 1126\n// module chunks = 0","module.exports = \"\\\"use strict\\\";\\n\\n(function (view) {\\n \\\"use strict\\\";\\n\\n view.URL = view.URL || view.webkitURL;\\n\\n if (view.Blob && view.URL) {\\n try {\\n new Blob();\\n return;\\n } catch (e) {}\\n }\\n\\n var BlobBuilder = view.BlobBuilder || view.WebKitBlobBuilder || view.MozBlobBuilder || function (view) {\\n var get_class = function get_class(object) {\\n return Object.prototype.toString.call(object).match(/^\\\\[object\\\\s(.*)\\\\]$/)[1];\\n },\\n FakeBlobBuilder = function BlobBuilder() {\\n this.data = [];\\n },\\n FakeBlob = function Blob(data, type, encoding) {\\n this.data = data;\\n this.size = data.length;\\n this.type = type;\\n this.encoding = encoding;\\n },\\n FBB_proto = FakeBlobBuilder.prototype,\\n FB_proto = FakeBlob.prototype,\\n FileReaderSync = view.FileReaderSync,\\n FileException = function FileException(type) {\\n this.code = this[this.name = type];\\n },\\n file_ex_codes = (\\\"NOT_FOUND_ERR SECURITY_ERR ABORT_ERR NOT_READABLE_ERR ENCODING_ERR \\\" + \\\"NO_MODIFICATION_ALLOWED_ERR INVALID_STATE_ERR SYNTAX_ERR\\\").split(\\\" \\\"),\\n file_ex_code = file_ex_codes.length,\\n real_URL = view.URL || view.webkitURL || view,\\n real_create_object_URL = real_URL.createObjectURL,\\n real_revoke_object_URL = real_URL.revokeObjectURL,\\n URL = real_URL,\\n btoa = view.btoa,\\n atob = view.atob,\\n ArrayBuffer = view.ArrayBuffer,\\n Uint8Array = view.Uint8Array;\\n FakeBlob.fake = FB_proto.fake = true;\\n while (file_ex_code--) {\\n FileException.prototype[file_ex_codes[file_ex_code]] = file_ex_code + 1;\\n }\\n if (!real_URL.createObjectURL) {\\n URL = view.URL = {};\\n }\\n URL.createObjectURL = function (blob) {\\n var type = blob.type,\\n data_URI_header;\\n if (type === null) {\\n type = \\\"application/octet-stream\\\";\\n }\\n if (blob instanceof FakeBlob) {\\n data_URI_header = \\\"data:\\\" + type;\\n if (blob.encoding === \\\"base64\\\") {\\n return data_URI_header + \\\";base64,\\\" + blob.data;\\n } else if (blob.encoding === \\\"URI\\\") {\\n return data_URI_header + \\\",\\\" + decodeURIComponent(blob.data);\\n }\\n if (btoa) {\\n return data_URI_header + \\\";base64,\\\" + btoa(blob.data);\\n } else {\\n return data_URI_header + \\\",\\\" + encodeURIComponent(blob.data);\\n }\\n } else if (real_create_object_URL) {\\n return real_create_object_URL.call(real_URL, blob);\\n }\\n };\\n URL.revokeObjectURL = function (object_URL) {\\n if (object_URL.substring(0, 5) !== \\\"data:\\\" && real_revoke_object_URL) {\\n real_revoke_object_URL.call(real_URL, object_URL);\\n }\\n };\\n FBB_proto.append = function (data) {\\n var bb = this.data;\\n\\n if (Uint8Array && (data instanceof ArrayBuffer || data instanceof Uint8Array)) {\\n var str = \\\"\\\",\\n buf = new Uint8Array(data),\\n i = 0,\\n buf_len = buf.length;\\n for (; i < buf_len; i++) {\\n str += String.fromCharCode(buf[i]);\\n }\\n bb.push(str);\\n } else if (get_class(data) === \\\"Blob\\\" || get_class(data) === \\\"File\\\") {\\n if (FileReaderSync) {\\n var fr = new FileReaderSync();\\n bb.push(fr.readAsBinaryString(data));\\n } else {\\n throw new FileException(\\\"NOT_READABLE_ERR\\\");\\n }\\n } else if (data instanceof FakeBlob) {\\n if (data.encoding === \\\"base64\\\" && atob) {\\n bb.push(atob(data.data));\\n } else if (data.encoding === \\\"URI\\\") {\\n bb.push(decodeURIComponent(data.data));\\n } else if (data.encoding === \\\"raw\\\") {\\n bb.push(data.data);\\n }\\n } else {\\n if (typeof data !== \\\"string\\\") {\\n data += \\\"\\\";\\n }\\n\\n bb.push(unescape(encodeURIComponent(data)));\\n }\\n };\\n FBB_proto.getBlob = function (type) {\\n if (!arguments.length) {\\n type = null;\\n }\\n return new FakeBlob(this.data.join(\\\"\\\"), type, \\\"raw\\\");\\n };\\n FBB_proto.toString = function () {\\n return \\\"[object BlobBuilder]\\\";\\n };\\n FB_proto.slice = function (start, end, type) {\\n var args = arguments.length;\\n if (args < 3) {\\n type = null;\\n }\\n return new FakeBlob(this.data.slice(start, args > 1 ? end : this.data.length), type, this.encoding);\\n };\\n FB_proto.toString = function () {\\n return \\\"[object Blob]\\\";\\n };\\n FB_proto.close = function () {\\n this.size = this.data.length = 0;\\n };\\n return FakeBlobBuilder;\\n }(view);\\n\\n view.Blob = function Blob(blobParts, options) {\\n var type = options ? options.type || \\\"\\\" : \\\"\\\";\\n var builder = new BlobBuilder();\\n if (blobParts) {\\n for (var i = 0, len = blobParts.length; i < len; i++) {\\n builder.append(blobParts[i]);\\n }\\n }\\n return builder.getBlob(type);\\n };\\n})(typeof self !== \\\"undefined\\\" && self || typeof window !== \\\"undefined\\\" && window || undefined.content || undefined);\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/raw-loader!./~/babel-loader/lib!./src/vendor/Blob.js\n// module id = 1127\n// module chunks = 0","module.exports = \"/* FileSaver.js\\n * A saveAs() FileSaver implementation.\\n * 1.3.2\\n * 2016-06-16 18:25:19\\n *\\n * By Eli Grey, http://eligrey.com\\n * License: MIT\\n * See https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md\\n */\\n\\n/*global self */\\n/*jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true */\\n\\n/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */\\n\\nvar saveAs = saveAs || (function(view) {\\n\\t\\\"use strict\\\";\\n\\t// IE <10 is explicitly unsupported\\n\\tif (typeof view === \\\"undefined\\\" || typeof navigator !== \\\"undefined\\\" && /MSIE [1-9]\\\\./.test(navigator.userAgent)) {\\n\\t\\treturn;\\n\\t}\\n\\tvar\\n\\t\\t doc = view.document\\n\\t\\t // only get URL when necessary in case Blob.js hasn't overridden it yet\\n\\t\\t, get_URL = function() {\\n\\t\\t\\treturn view.URL || view.webkitURL || view;\\n\\t\\t}\\n\\t\\t, save_link = doc.createElementNS(\\\"http://www.w3.org/1999/xhtml\\\", \\\"a\\\")\\n\\t\\t, can_use_save_link = \\\"download\\\" in save_link\\n\\t\\t, click = function(node) {\\n\\t\\t\\tvar event = new MouseEvent(\\\"click\\\");\\n\\t\\t\\tnode.dispatchEvent(event);\\n\\t\\t}\\n\\t\\t, is_safari = /constructor/i.test(view.HTMLElement) || view.safari\\n\\t\\t, is_chrome_ios =/CriOS\\\\/[\\\\d]+/.test(navigator.userAgent)\\n\\t\\t, throw_outside = function(ex) {\\n\\t\\t\\t(view.setImmediate || view.setTimeout)(function() {\\n\\t\\t\\t\\tthrow ex;\\n\\t\\t\\t}, 0);\\n\\t\\t}\\n\\t\\t, force_saveable_type = \\\"application/octet-stream\\\"\\n\\t\\t// the Blob API is fundamentally broken as there is no \\\"downloadfinished\\\" event to subscribe to\\n\\t\\t, arbitrary_revoke_timeout = 1000 * 40 // in ms\\n\\t\\t, revoke = function(file) {\\n\\t\\t\\tvar revoker = function() {\\n\\t\\t\\t\\tif (typeof file === \\\"string\\\") { // file is an object URL\\n\\t\\t\\t\\t\\tget_URL().revokeObjectURL(file);\\n\\t\\t\\t\\t} else { // file is a File\\n\\t\\t\\t\\t\\tfile.remove();\\n\\t\\t\\t\\t}\\n\\t\\t\\t};\\n\\t\\t\\tsetTimeout(revoker, arbitrary_revoke_timeout);\\n\\t\\t}\\n\\t\\t, dispatch = function(filesaver, event_types, event) {\\n\\t\\t\\tevent_types = [].concat(event_types);\\n\\t\\t\\tvar i = event_types.length;\\n\\t\\t\\twhile (i--) {\\n\\t\\t\\t\\tvar listener = filesaver[\\\"on\\\" + event_types[i]];\\n\\t\\t\\t\\tif (typeof listener === \\\"function\\\") {\\n\\t\\t\\t\\t\\ttry {\\n\\t\\t\\t\\t\\t\\tlistener.call(filesaver, event || filesaver);\\n\\t\\t\\t\\t\\t} catch (ex) {\\n\\t\\t\\t\\t\\t\\tthrow_outside(ex);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\t, auto_bom = function(blob) {\\n\\t\\t\\t// prepend BOM for UTF-8 XML and text/* types (including HTML)\\n\\t\\t\\t// note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF\\n\\t\\t\\tif (/^\\\\s*(?:text\\\\/\\\\S*|application\\\\/xml|\\\\S*\\\\/\\\\S*\\\\+xml)\\\\s*;.*charset\\\\s*=\\\\s*utf-8/i.test(blob.type)) {\\n\\t\\t\\t\\treturn new Blob([String.fromCharCode(0xFEFF), blob], {type: blob.type});\\n\\t\\t\\t}\\n\\t\\t\\treturn blob;\\n\\t\\t}\\n\\t\\t, FileSaver = function(blob, name, no_auto_bom) {\\n\\t\\t\\tif (!no_auto_bom) {\\n\\t\\t\\t\\tblob = auto_bom(blob);\\n\\t\\t\\t}\\n\\t\\t\\t// First try a.download, then web filesystem, then object URLs\\n\\t\\t\\tvar\\n\\t\\t\\t\\t filesaver = this\\n\\t\\t\\t\\t, type = blob.type\\n\\t\\t\\t\\t, force = type === force_saveable_type\\n\\t\\t\\t\\t, object_url\\n\\t\\t\\t\\t, dispatch_all = function() {\\n\\t\\t\\t\\t\\tdispatch(filesaver, \\\"writestart progress write writeend\\\".split(\\\" \\\"));\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t// on any filesys errors revert to saving with object URLs\\n\\t\\t\\t\\t, fs_error = function() {\\n\\t\\t\\t\\t\\tif ((is_chrome_ios || (force && is_safari)) && view.FileReader) {\\n\\t\\t\\t\\t\\t\\t// Safari doesn't allow downloading of blob urls\\n\\t\\t\\t\\t\\t\\tvar reader = new FileReader();\\n\\t\\t\\t\\t\\t\\treader.onloadend = function() {\\n\\t\\t\\t\\t\\t\\t\\tvar url = is_chrome_ios ? reader.result : reader.result.replace(/^data:[^;]*;/, 'data:attachment/file;');\\n\\t\\t\\t\\t\\t\\t\\tvar popup = view.open(url, '_blank');\\n\\t\\t\\t\\t\\t\\t\\tif(!popup) view.location.href = url;\\n\\t\\t\\t\\t\\t\\t\\turl=undefined; // release reference before dispatching\\n\\t\\t\\t\\t\\t\\t\\tfilesaver.readyState = filesaver.DONE;\\n\\t\\t\\t\\t\\t\\t\\tdispatch_all();\\n\\t\\t\\t\\t\\t\\t};\\n\\t\\t\\t\\t\\t\\treader.readAsDataURL(blob);\\n\\t\\t\\t\\t\\t\\tfilesaver.readyState = filesaver.INIT;\\n\\t\\t\\t\\t\\t\\treturn;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t// don't create more object URLs than needed\\n\\t\\t\\t\\t\\tif (!object_url) {\\n\\t\\t\\t\\t\\t\\tobject_url = get_URL().createObjectURL(blob);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tif (force) {\\n\\t\\t\\t\\t\\t\\tview.location.href = object_url;\\n\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\tvar opened = view.open(object_url, \\\"_blank\\\");\\n\\t\\t\\t\\t\\t\\tif (!opened) {\\n\\t\\t\\t\\t\\t\\t\\t// Apple does not allow window.open, see https://developer.apple.com/library/safari/documentation/Tools/Conceptual/SafariExtensionGuide/WorkingwithWindowsandTabs/WorkingwithWindowsandTabs.html\\n\\t\\t\\t\\t\\t\\t\\tview.location.href = object_url;\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tfilesaver.readyState = filesaver.DONE;\\n\\t\\t\\t\\t\\tdispatch_all();\\n\\t\\t\\t\\t\\trevoke(object_url);\\n\\t\\t\\t\\t}\\n\\t\\t\\t;\\n\\t\\t\\tfilesaver.readyState = filesaver.INIT;\\n\\n\\t\\t\\tif (can_use_save_link) {\\n\\t\\t\\t\\tobject_url = get_URL().createObjectURL(blob);\\n\\t\\t\\t\\tsetTimeout(function() {\\n\\t\\t\\t\\t\\tsave_link.href = object_url;\\n\\t\\t\\t\\t\\tsave_link.download = name;\\n\\t\\t\\t\\t\\tclick(save_link);\\n\\t\\t\\t\\t\\tdispatch_all();\\n\\t\\t\\t\\t\\trevoke(object_url);\\n\\t\\t\\t\\t\\tfilesaver.readyState = filesaver.DONE;\\n\\t\\t\\t\\t});\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\n\\t\\t\\tfs_error();\\n\\t\\t}\\n\\t\\t, FS_proto = FileSaver.prototype\\n\\t\\t, saveAs = function(blob, name, no_auto_bom) {\\n\\t\\t\\treturn new FileSaver(blob, name || blob.name || \\\"download\\\", no_auto_bom);\\n\\t\\t}\\n\\t;\\n\\t// IE 10+ (native saveAs)\\n\\tif (typeof navigator !== \\\"undefined\\\" && navigator.msSaveOrOpenBlob) {\\n\\t\\treturn function(blob, name, no_auto_bom) {\\n\\t\\t\\tname = name || blob.name || \\\"download\\\";\\n\\n\\t\\t\\tif (!no_auto_bom) {\\n\\t\\t\\t\\tblob = auto_bom(blob);\\n\\t\\t\\t}\\n\\t\\t\\treturn navigator.msSaveOrOpenBlob(blob, name);\\n\\t\\t};\\n\\t}\\n\\n\\tFS_proto.abort = function(){};\\n\\tFS_proto.readyState = FS_proto.INIT = 0;\\n\\tFS_proto.WRITING = 1;\\n\\tFS_proto.DONE = 2;\\n\\n\\tFS_proto.error =\\n\\tFS_proto.onwritestart =\\n\\tFS_proto.onprogress =\\n\\tFS_proto.onwrite =\\n\\tFS_proto.onabort =\\n\\tFS_proto.onerror =\\n\\tFS_proto.onwriteend =\\n\\t\\tnull;\\n\\n\\treturn saveAs;\\n}(\\n\\t typeof self !== \\\"undefined\\\" && self\\n\\t|| typeof window !== \\\"undefined\\\" && window\\n\\t|| this.content\\n));\\n// `self` is undefined in Firefox for Android content script context\\n// while `this` is nsIContentFrameMessageManager\\n// with an attribute `content` that corresponds to the window\\n\\nif (typeof module !== \\\"undefined\\\" && module.exports) {\\n module.exports.saveAs = saveAs;\\n} else if ((typeof define !== \\\"undefined\\\" && define !== null) && (define.amd !== null)) {\\n define(\\\"FileSaver.js\\\", function() {\\n return saveAs;\\n });\\n}\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/raw-loader!./~/file-saver/FileSaver.js\n// module id = 1128\n// module chunks = 0","require(\"!!D:\\\\gitee\\\\vue-admin\\\\node_modules\\\\script-loader\\\\addScript.js\")(require(\"!!D:\\\\gitee\\\\vue-admin\\\\node_modules\\\\raw-loader\\\\index.js!D:\\\\gitee\\\\vue-admin\\\\node_modules\\\\babel-loader\\\\lib\\\\index.js!D:\\\\gitee\\\\vue-admin\\\\src\\\\vendor\\\\Blob.js\"))\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/script-loader!./src/vendor/Blob.js\n// module id = 1129\n// module chunks = 0","require(\"!!D:\\\\gitee\\\\vue-admin\\\\node_modules\\\\script-loader\\\\addScript.js\")(require(\"!!D:\\\\gitee\\\\vue-admin\\\\node_modules\\\\raw-loader\\\\index.js!D:\\\\gitee\\\\vue-admin\\\\node_modules\\\\file-saver\\\\FileSaver.js\"))\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/script-loader!./~/file-saver/FileSaver.js\n// module id = 1130\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/static/js/app.5f386973cae10e35e08c.js b/dist/static/js/app.5f386973cae10e35e08c.js deleted file mode 100644 index d8356d00c6d1ee6427bf04676c1c92d363bf8a80..0000000000000000000000000000000000000000 --- a/dist/static/js/app.5f386973cae10e35e08c.js +++ /dev/null @@ -1,2 +0,0 @@ -webpackJsonp([2],{1016:function(t,e){},1017:function(t,e){},1018:function(t,e){},1019:function(t,e){},1020:function(t,e){},1021:function(t,e){},1022:function(t,e){},1023:function(t,e){},1024:function(t,e){},1025:function(t,e){},1026:function(t,e){},1027:function(t,e){},1028:function(t,e){},1029:function(t,e){},1030:function(t,e){},1044:function(t,e,r){r(1016);var i=r(28)(r(464),r(1059),"data-v-0135f127",null);t.exports=i.exports},1045:function(t,e,r){r(1022);var i=r(28)(r(465),r(1066),"data-v-31addc8e",null);t.exports=i.exports},1046:function(t,e,r){r(1023);var i=r(28)(r(466),r(1067),"data-v-3d16a820",null);t.exports=i.exports},1047:function(t,e,r){r(1030);var i=r(28)(r(467),r(1074),"data-v-fee14efe",null);t.exports=i.exports},1048:function(t,e,r){r(1021);var i=r(28)(r(468),r(1065),"data-v-2daed92c",null);t.exports=i.exports},1049:function(t,e,r){r(1025);var i=r(28)(null,r(1069),"data-v-552f9c87",null);t.exports=i.exports},1050:function(t,e,r){r(1024);var i=r(28)(r(469),r(1068),"data-v-51a2c380",null);t.exports=i.exports},1051:function(t,e,r){r(1020);var i=r(28)(r(470),r(1064),"data-v-2c8a1058",null);t.exports=i.exports},1052:function(t,e,r){r(1026);var i=r(28)(r(471),r(1070),"data-v-612c0ec1",null);t.exports=i.exports},1053:function(t,e,r){r(1027);var i=r(28)(r(472),r(1071),"data-v-73ce23cd",null);t.exports=i.exports},1054:function(t,e,r){var i=r(28)(r(473),r(1061),null,null);t.exports=i.exports},1055:function(t,e,r){r(1017);var i=r(28)(r(474),r(1060),"data-v-0258d1fc",null);t.exports=i.exports},1056:function(t,e,r){r(1029);var i=r(28)(r(475),r(1073),"data-v-d8733d78",null);t.exports=i.exports},1057:function(t,e,r){r(1019);var i=r(28)(r(476),r(1063),"data-v-28b92b86",null);t.exports=i.exports},1058:function(t,e,r){r(1028);var i=r(28)(r(477),r(1072),"data-v-84a81470",null);t.exports=i.exports},1059:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("svg",{staticClass:"icon screenfull",attrs:{xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",t:"1497503607356",viewBox:"0 0 1024 1024",version:"1.1","p-id":"4109",fill:t.fill,width:t.width,height:t.height},on:{click:t.click}},[r("path",{attrs:{d:"M604.157933 512l204.484208 204.484208 82.942037-82.942037c10.364045-10.952446 26.498514-13.83817 40.309054-8.067746 13.249769 5.742794 22.465664 18.99154 22.465664 33.977859l0 258.042008c0 20.168342-16.695241 36.863582-36.863582 36.863582L659.452283 954.357873c-14.986319 0-28.236088-9.215896-33.977859-23.025413-5.770424-13.249769-2.885723-29.384237 8.067746-39.748283l82.942037-82.942037L512 604.157933 307.515792 808.642141l82.942037 82.942037c10.952446 10.364045 13.83817 26.498514 8.067746 39.748283-5.742794 13.809517-18.99154 23.025413-33.977859 23.025413L106.504686 954.357873c-20.168342 0-36.863582-16.695241-36.863582-36.863582L69.641103 659.452283c0-14.986319 9.215896-28.236088 23.025413-33.977859 13.249769-5.770424 29.384237-2.8847 39.748283 8.067746l82.942037 82.942037 204.484208-204.484208L215.357859 307.515792l-82.942037 82.942037c-6.890944 6.918573-16.10684 10.952446-25.911136 10.952446-4.593622 0-9.804297-1.14815-13.83817-2.8847-13.809517-5.742794-23.025413-18.99154-23.025413-33.977859L69.641103 106.504686c0-20.168342 16.695241-36.863582 36.863582-36.863582L364.546693 69.641103c14.986319 0 28.236088 9.215896 33.977859 23.025413 5.770424 13.249769 2.8847 29.384237-8.067746 39.748283l-82.942037 82.942037 204.484208 204.484208L716.484208 215.357859l-82.942037-82.942037c-10.952446-10.364045-13.83817-26.498514-8.067746-39.748283 5.742794-13.809517 18.99154-23.025413 33.977859-23.025413l258.042008 0c20.168342 0 36.863582 16.695241 36.863582 36.863582l0 258.042008c0 14.986319-9.215896 28.236088-22.465664 33.977859-4.593622 1.736551-9.804297 2.8847-14.397918 2.8847-9.804297 0-19.020192-4.033873-25.911136-10.952446l-82.942037-82.942037L604.157933 512z","p-id":"4110"}})])},staticRenderFns:[]}},1060:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("section",[r("el-form",{ref:"form",staticStyle:{margin:"10px"},attrs:{model:t.form},on:{submit:function(e){return e.preventDefault(),t.onSubmit(e)}}},[r("el-form",{staticClass:"demo-form-inline",attrs:{inline:!0,model:t.filters}},[r("el-row",[r("el-col",{staticStyle:{"margin-left":"12px"},attrs:{xs:12,sm:12,md:12,lg:12}},[r("el-form-item",{attrs:{label:"维护项"}},[r("el-input",{staticStyle:{width:"160px"},attrs:{placeholder:"维护项"},model:{value:t.filters.strTitle,callback:function(e){t.$set(t.filters,"strTitle",e)},expression:"filters.strTitle"}})],1)],1),t._v(" "),r("el-col",{attrs:{xs:10,sm:10,md:10,lg:10}},[r("el-form-item",{attrs:{label:"维护内容"}},[r("el-input",{staticStyle:{width:"180px"},attrs:{placeholder:"维护内容"},model:{value:t.filters.strContent,callback:function(e){t.$set(t.filters,"strContent",e)},expression:"filters.strContent"}})],1)],1),t._v(" "),r("el-col",{attrs:{xs:24,sm:24,md:24,lg:12}},[r("el-form-item",{staticClass:"postInfo-container-item",attrs:{"label-width":"80px",label:"创建时间"}},[r("el-date-picker",{attrs:{type:"datetimerange","picker-options":t.pickerOptions2,placeholder:"选择时间范围",align:"right"},model:{value:t.filters.createTime,callback:function(e){t.$set(t.filters,"createTime",e)},expression:"filters.createTime"}})],1)],1),t._v(" "),r("el-col",{attrs:{xs:24,sm:24,md:24,lg:12}},[r("el-form-item",{staticClass:"postInfo-container-item",attrs:{"label-width":"80px",label:"更新时间"}},[r("el-date-picker",{attrs:{type:"datetimerange","picker-options":t.pickerOptions2,placeholder:"选择时间范围",align:"right"},model:{value:t.filters.updateTime,callback:function(e){t.$set(t.filters,"updateTime",e)},expression:"filters.updateTime"}})],1)],1),t._v(" "),r("el-col",{staticStyle:{"margin-left":"12px"},attrs:{xs:24,sm:24,md:24,lg:12}},[r("el-form-item",[r("el-button",{attrs:{type:"primary",icon:"search"},on:{click:t.getMaintains}},[t._v("查询")])],1)],1)],1)],1)],1),t._v(" "),r("div",{staticClass:"panel"},[r("div",{staticClass:"panel-title"},[r("span",{domProps:{textContent:t._s(t.panelTitle)}}),t._v(" "),r("div",{staticClass:"fr"},[r("el-button",{attrs:{size:"small"},on:{click:function(e){return e.stopPropagation(),t.on_refresh(e)}}},[r("i",{staticClass:"fa fa-refresh"})]),t._v(" "),r("el-button",{attrs:{type:"primary",icon:"plus",size:"small"},on:{click:t.handleAdd}},[t._v("新增")])],1)]),t._v(" "),r("div",{staticClass:"panel-body"},[r("el-table",{directives:[{name:"loading",rawName:"v-loading",value:t.listLoading,expression:"listLoading"}],attrs:{data:t.maintains,"highlight-current-row":""},on:{"selection-change":t.selsChange}},[r("el-table-column",{attrs:{type:"selection",width:"55"}}),t._v(" "),r("el-table-column",{attrs:{type:"index",width:"60"}}),t._v(" "),r("el-table-column",{attrs:{label:"维护项名称"},scopedSlots:t._u([{key:"default",fn:function(e){return[r("span",{domProps:{innerHTML:t._s(t.brightenKeyword(e.row.strTitle,t.filters.strTitle))}})]}}])}),t._v(" "),r("el-table-column",{attrs:{label:"维护内容"},scopedSlots:t._u([{key:"default",fn:function(e){return[r("span",{domProps:{innerHTML:t._s(t.brightenKeyword(e.row.strContent,t.filters.strContent))}})]}}])}),t._v(" "),r("el-table-column",{attrs:{prop:"createTime",label:"创建时间"}}),t._v(" "),r("el-table-column",{attrs:{prop:"updateTime",label:"更新时间"}}),t._v(" "),r("el-table-column",{attrs:{label:"操作",width:"150"},scopedSlots:t._u([{key:"default",fn:function(e){return[r("el-button",{attrs:{size:"small"},on:{click:function(r){return t.handleEdit(e.$index,e.row)}}},[t._v("编辑")]),t._v(" "),r("el-button",{attrs:{type:"danger",size:"small"},on:{click:function(r){return t.handleDel(e.$index,e.row)}}},[t._v("删除")])]}}])})],1),t._v(" "),r("el-col",{staticClass:"toolbar",attrs:{span:24}},[r("el-button",{staticClass:"fl",attrs:{type:"danger",disabled:0===this.sels.length},on:{click:t.batchRemove}},[t._v("批量删除")]),t._v(" "),r("el-pagination",{staticClass:"fr",attrs:{"current-page":t.listQuery.curPage,"page-sizes":[10,20,30,50],"page-size":t.listQuery.pageSize,layout:"total, sizes, prev, pager, next, jumper",total:t.total},on:{"size-change":t.handleSizeChange,"current-change":t.handleCurrentChange,"update:currentPage":function(e){return t.$set(t.listQuery,"curPage",e)},"update:current-page":function(e){return t.$set(t.listQuery,"curPage",e)}}})],1)],1)]),t._v(" "),r("el-dialog",{attrs:{title:"编辑维护项",visible:t.editFormVisible,"close-on-click-modal":!1},on:{"update:visible":function(e){t.editFormVisible=e}}},[r("el-form",{ref:"editForm",attrs:{model:t.editForm,"label-width":"80px",rules:t.editFormRules}},[r("el-form-item",{staticStyle:{width:"450px"},attrs:{label:"名称",prop:"strTitle"}},[r("el-input",{attrs:{"auto-complete":"off",placeholder:"请输入名称"},model:{value:t.editForm.strTitle,callback:function(e){t.$set(t.editForm,"strTitle",e)},expression:"editForm.strTitle"}})],1),t._v(" "),r("el-form-item",{staticStyle:{width:"450px"},attrs:{label:"维护内容",prop:"strContent"}},[r("el-input",{attrs:{type:"textarea",rows:2,placeholder:"请输入内容"},model:{value:t.editForm.strContent,callback:function(e){t.$set(t.editForm,"strContent",e)},expression:"editForm.strContent"}})],1)],1),t._v(" "),r("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[r("el-button",{nativeOn:{click:function(e){t.editFormVisible=!1}}},[t._v("取消")]),t._v(" "),r("el-button",{attrs:{type:"primary",loading:t.editLoading},nativeOn:{click:function(e){return t.editSubmit(e)}}},[t._v("提交")])],1)],1),t._v(" "),r("el-dialog",{attrs:{title:"新增维护项",visible:t.addFormVisible,"close-on-click-modal":!1,size:"small"},on:{"update:visible":function(e){t.addFormVisible=e}}},[r("el-form",{ref:"addForm",attrs:{model:t.addForm,"label-width":"80px",rules:t.addFormRules}},[r("el-form-item",{staticStyle:{width:"450px"},attrs:{label:"名称",prop:"strTitle"}},[r("el-input",{attrs:{"auto-complete":"off",placeholder:"请输入名称"},model:{value:t.addForm.strTitle,callback:function(e){t.$set(t.addForm,"strTitle",e)},expression:"addForm.strTitle"}})],1),t._v(" "),r("el-form-item",{staticStyle:{width:"450px"},attrs:{label:"维护内容",prop:"strContent"}},[r("el-input",{attrs:{type:"textarea",rows:2,placeholder:"请输入内容"},model:{value:t.addForm.strContent,callback:function(e){t.$set(t.addForm,"strContent",e)},expression:"addForm.strContent"}})],1)],1),t._v(" "),r("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[r("el-button",{nativeOn:{click:function(e){t.addFormVisible=!1}}},[t._v("取消")]),t._v(" "),r("el-button",{attrs:{type:"primary",loading:t.addLoading},nativeOn:{click:function(e){return t.addSubmit(e)}}},[t._v("提交")])],1)],1)],1)},staticRenderFns:[]}},1061:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("div",{staticStyle:{margin:"10px"}},[r("upload-excel-component",{attrs:{"on-success":t.handleSuccess,"before-upload":t.beforeUpload}}),t._v(" "),r("div",{staticClass:"panel"},[r("div",{staticClass:"panel-title"},[r("span",{domProps:{textContent:t._s(t.panelTitle)}})]),t._v(" "),r("div",{staticClass:"panel-body"},[r("el-table",{staticStyle:{width:"100%","margin-top":"20px"},attrs:{data:t.tableData,border:"","highlight-current-row":""}},t._l(t.tableHeader,function(t){return r("el-table-column",{key:t,attrs:{prop:t,label:t}})}),1)],1)])],1)},staticRenderFns:[]}},1062:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("div",{attrs:{id:"app"}},[r("transition",{attrs:{name:"fade",mode:"out-in"}},[r("router-view")],1),t._v(" "),t._m(0)],1)},staticRenderFns:[function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("a",{attrs:{href:"https://github.com/artdong/vue-admin"}},[r("img",{staticClass:"fork-me-github",attrs:{src:"https://camo.githubusercontent.com/652c5b9acfaddf3a9c326fa6bde407b87f7be0f4/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6f72616e67655f6666373630302e706e67",alt:"Fork me on GitHub","data-canonical-src":"https://s3.amazonaws.com/github/ribbons/forkme_right_orange_ff7600.png"}})])}]}},1063:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("section",[r("el-form",{ref:"form",staticStyle:{margin:"10px"},attrs:{model:t.form},on:{submit:function(e){return e.preventDefault(),t.onSubmit(e)}}},[r("el-form",{attrs:{model:t.filters}},[r("el-row",[r("el-col",{attrs:{span:8}},[r("el-form-item",{staticClass:"postInfo-container-item",attrs:{"label-width":"80px",label:"执行时间"}},[r("el-date-picker",{attrs:{align:"right",type:"date",placeholder:"选择日期","picker-options":t.pickerOptions1},model:{value:t.filters.executeTime,callback:function(e){t.$set(t.filters,"executeTime",e)},expression:"filters.executeTime"}})],1)],1),t._v(" "),r("el-col",{attrs:{span:7}},[r("el-form-item",{attrs:{label:"天数"}},[r("el-select",{attrs:{multiple:"",placeholder:"请选择"},model:{value:t.filters.cycleDay,callback:function(e){t.$set(t.filters,"cycleDay",e)},expression:"filters.cycleDay"}},t._l(t.cycleDays,function(t){return r("el-option",{key:t.value,attrs:{label:t.label,value:t.value}})}),1)],1)],1),t._v(" "),r("el-col",{staticStyle:{"margin-left":"20px"},attrs:{span:6}},[r("el-form-item",{attrs:{label:"是否周期性:"}},[r("el-radio-group",{model:{value:t.filters.isCycle,callback:function(e){t.$set(t.filters,"isCycle",e)},expression:"filters.isCycle"}},[r("el-radio",{staticClass:"radio",attrs:{label:1}},[t._v("是")]),t._v(" "),r("el-radio",{staticClass:"radio",attrs:{label:0}},[t._v("否")])],1)],1)],1),t._v(" "),r("el-col",{attrs:{span:2}},[r("el-form-item",{staticStyle:{"margin-left":"10px"}},[r("el-button",{attrs:{type:"primary",icon:"search"},on:{click:t.getPlans}},[t._v("查询")])],1)],1)],1)],1)],1),t._v(" "),r("div",{staticClass:"panel"},[r("div",{staticClass:"panel-title"},[r("span",{domProps:{textContent:t._s(t.panelTitle)}}),t._v(" "),r("div",{staticClass:"fr"},[r("el-button",{attrs:{size:"small"},on:{click:function(e){return e.stopPropagation(),t.on_refresh(e)}}},[r("i",{staticClass:"fa fa-refresh"})])],1)]),t._v(" "),r("div",{staticClass:"panel-body"},[r("el-table",{directives:[{name:"loading",rawName:"v-loading",value:t.listLoading,expression:"listLoading"}],attrs:{data:t.plans,"highlight-current-row":""},on:{"selection-change":t.selsChange}},[r("el-table-column",{attrs:{type:"index",width:"60"}}),t._v(" "),r("el-table-column",{attrs:{prop:"strTitle",label:"维护项名称",width:"120"}}),t._v(" "),r("el-table-column",{attrs:{prop:"description",label:"描述"}}),t._v(" "),r("el-table-column",{attrs:{prop:"executeTime",label:"执行时间",width:"120",sortable:""}}),t._v(" "),r("el-table-column",{attrs:{prop:"isCycle",label:"是否周期性",width:"130",formatter:t.formatCycle}}),t._v(" "),r("el-table-column",{attrs:{prop:"cStartTime",label:"创建时间",width:"120"}}),t._v(" "),r("el-table-column",{attrs:{prop:"uStartTime",label:"更新时间",width:"120"}})],1),t._v(" "),r("el-col",{staticClass:"toolbar",attrs:{span:24}},[r("el-pagination",{staticClass:"fr",attrs:{"current-page":t.listQuery.curPage,"page-sizes":[10,20,30,50],"page-size":t.listQuery.pageSize,layout:"total, sizes, prev, pager, next, jumper",total:t.total},on:{"size-change":t.handleSizeChange,"current-change":t.handleCurrentChange,"update:currentPage":function(e){return t.$set(t.listQuery,"curPage",e)},"update:current-page":function(e){return t.$set(t.listQuery,"curPage",e)}}})],1)],1)]),t._v(" "),r("el-dialog",{attrs:{title:"编辑维护计划","close-on-click-modal":!1},model:{value:t.editFormVisible,callback:function(e){t.editFormVisible=e},expression:"editFormVisible"}},[r("el-form",{ref:"editForm",attrs:{model:t.editForm,"label-width":"80px",rules:t.editFormRules}},[r("el-form-item",{attrs:{label:"名称",prop:"strTitle"}},[r("el-input",{attrs:{"auto-complete":"off"},model:{value:t.editForm.strTitle,callback:function(e){t.$set(t.editForm,"strTitle",e)},expression:"editForm.strTitle"}})],1),t._v(" "),r("el-form-item",{attrs:{label:"维护内容",prop:"strContent"}},[r("el-input",{attrs:{"auto-complete":"off"},model:{value:t.editForm.strContent,callback:function(e){t.$set(t.editForm,"strContent",e)},expression:"editForm.strContent"}})],1)],1),t._v(" "),r("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[r("el-button",{nativeOn:{click:function(e){t.editFormVisible=!1}}},[t._v("取消")]),t._v(" "),r("el-button",{attrs:{type:"primary",loading:t.editLoading},nativeOn:{click:function(e){return t.editSubmit(e)}}},[t._v("提交")])],1)],1),t._v(" "),r("el-dialog",{attrs:{title:"新增维护计划","close-on-click-modal":!1},model:{value:t.addFormVisible,callback:function(e){t.addFormVisible=e},expression:"addFormVisible"}},[r("el-form",{ref:"addForm",attrs:{model:t.addForm,"label-width":"80px",rules:t.addFormRules}},[r("el-form-item",{attrs:{label:"名称",prop:"strTitle"}},[r("el-input",{attrs:{"auto-complete":"off"},model:{value:t.addForm.strTitle,callback:function(e){t.$set(t.addForm,"strTitle",e)},expression:"addForm.strTitle"}})],1),t._v(" "),r("el-form-item",{attrs:{label:"维护内容",prop:"strContent"}},[r("el-input",{attrs:{"auto-complete":"off"},model:{value:t.addForm.strContent,callback:function(e){t.$set(t.addForm,"strContent",e)},expression:"addForm.strContent"}})],1)],1),t._v(" "),r("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[r("el-button",{nativeOn:{click:function(e){t.addFormVisible=!1}}},[t._v("取消")]),t._v(" "),r("el-button",{attrs:{type:"primary",loading:t.addLoading},nativeOn:{click:function(e){return t.addSubmit(e)}}},[t._v("提交")])],1)],1)],1)},staticRenderFns:[]}},1064:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("el-form",{ref:"ruleForm2",staticClass:"demo-ruleForm login-container",attrs:{model:t.ruleForm2,rules:t.rules2,"label-position":"left","label-width":"0px"}},[r("h3",{staticClass:"title"},[t._v("系统登录")]),t._v(" "),r("el-form-item",{attrs:{prop:"account"}},[r("el-input",{attrs:{type:"text","auto-complete":"off",placeholder:"账号"},model:{value:t.ruleForm2.account,callback:function(e){t.$set(t.ruleForm2,"account",e)},expression:"ruleForm2.account"}})],1),t._v(" "),r("el-form-item",{attrs:{prop:"checkPass"}},[r("el-input",{attrs:{type:"password","auto-complete":"off",placeholder:"密码"},model:{value:t.ruleForm2.checkPass,callback:function(e){t.$set(t.ruleForm2,"checkPass",e)},expression:"ruleForm2.checkPass"}})],1),t._v(" "),r("el-checkbox",{staticClass:"remember",attrs:{checked:""},model:{value:t.checked,callback:function(e){t.checked=e},expression:"checked"}},[t._v("记住密码")]),t._v(" "),r("el-form-item",{staticStyle:{width:"100%"}},[r("el-button",{staticStyle:{width:"100%"},attrs:{type:"primary",loading:t.logining},nativeOn:{click:function(e){return e.preventDefault(),t.handleSubmit2(e)}}},[t._v("登录")])],1)],1)},staticRenderFns:[]}},1065:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement;t._self._c;return t._m(0)},staticRenderFns:[function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("section",{staticClass:"threejs-container"},[r("div",{attrs:{id:"demo"}})])}]}},1066:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("div",{staticStyle:{padding:"12px"}},[r("tinymce-editor",{attrs:{"api-key":"API_KEY",init:{plugins:"wordcount"}}})],1)},staticRenderFns:[]}},1067:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("div",[r("input",{ref:"excel-upload-input",attrs:{id:"excel-upload-input",type:"file",accept:".xlsx, .xls"},on:{change:t.handleClick}}),t._v(" "),r("div",{attrs:{id:"drop"},on:{drop:t.handleDrop,dragover:t.handleDragover,dragenter:t.handleDragover}},[t._v("\n 拖拽文件到此处 或者\n "),r("el-button",{staticStyle:{"margin-left":"16px"},attrs:{loading:t.loading,size:"mini",type:"primary"},on:{click:t.handleUpload}},[t._v("浏览")])],1)])},staticRenderFns:[]}},1068:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("el-row",{staticClass:"container"},[r("el-col",{staticClass:"main",attrs:{span:24}},[r("aside",{class:t.collapsed?"menu-collapsed":"menu-expanded"},[t.collapsed?t._e():r("el-menu",{staticClass:"el-menu-vertical-demo",attrs:{"default-active":t.$route.path,"unique-opened":"",router:""}},[t._l(t.$router.options.routes,function(e,i){return e.hidden?t._e():[e.leaf?t._e():r("el-submenu",{attrs:{index:i+""}},[r("template",{slot:"title"},[r("i",{class:e.iconCls}),t._v(t._s(e.name))]),t._v(" "),t._l(e.children,function(e){return e.hidden?t._e():r("el-menu-item",{key:e.path,staticClass:"menu-list",attrs:{index:e.path}},[t._v(t._s(e.name))])})],2),t._v(" "),e.leaf&&e.children.length>0?r("el-menu-item",{staticClass:"menu-list",attrs:{index:e.children[0].path}},[r("i",{class:e.iconCls}),t._v(t._s(e.children[0].name))]):t._e()]})],2),t._v(" "),t.collapsed?r("ul",{ref:"menuCollapsed",staticClass:"el-menu el-menu-vertical-demo collapsed"},t._l(t.$router.options.routes,function(e,i){return e.hidden?t._e():r("li",{staticClass:"el-submenu item"},[e.leaf?[r("li",{staticClass:"el-submenu"},[r("div",{staticClass:"el-submenu__title el-menu-item",class:t.$route.path==e.children[0].path?"is-active":"",staticStyle:{"padding-left":"20px",height:"56px","line-height":"56px",padding:"0 20px"},on:{click:function(r){return t.$router.push(e.children[0].path)}}},[r("i",{class:e.iconCls})])])]:[r("div",{staticClass:"el-submenu__title",staticStyle:{"padding-left":"20px"},on:{mouseover:function(e){return t.showMenu(i,!0)},mouseout:function(e){return t.showMenu(i,!1)}}},[r("i",{class:e.iconCls})]),t._v(" "),r("ul",{staticClass:"el-menu submenu",class:"submenu-hook-"+i,on:{mouseover:function(e){return t.showMenu(i,!0)},mouseout:function(e){return t.showMenu(i,!1)}}},t._l(e.children,function(e){return e.hidden?t._e():r("li",{key:e.path,staticClass:"el-menu-item",class:t.$route.path==e.path?"is-active":"",staticStyle:{"padding-left":"40px"},on:{click:function(r){return t.$router.push(e.path)}}},[t._v(t._s(e.name))])}),0)]],2)}),0):t._e()],1),t._v(" "),r("section",{staticClass:"content-container"},[r("el-col",{staticClass:"header",attrs:{span:24}},[r("el-col",{attrs:{xs:2,sm:2,md:2,lg:2}},[r("div",{staticClass:"tools",staticStyle:{"margin-bottom":"64px"},on:{click:function(e){return e.preventDefault(),t.collapse(e)}}},[r("i",{staticClass:"fa fa-align-justify",staticStyle:{"vertical-align":"middle",color:"#353f4f"}})])]),t._v(" "),r("el-col",{staticClass:"breadcrumb-container",attrs:{xs:16,sm:16,md:16,lg:16}},[r("strong",{staticClass:"title"},[t._v(t._s(t.$route.name))])]),t._v(" "),r("el-col",{attrs:{xs:2,sm:2,md:2,lg:2}},[r("i",{staticClass:"fa fa-bell fa-lg",staticStyle:{color:"#353f4f"},on:{click:function(e){t.dialogVisible=!0}}}),t._v(" "),r("el-badge",{attrs:{value:12,max:10}})],1),t._v(" "),r("el-col",{attrs:{xs:1,sm:1,md:1,lg:1}},[r("screenfull",{staticClass:"screenfull"})],1),t._v(" "),r("el-col",{staticClass:"userinfo",attrs:{xs:3,sm:3,md:3,lg:3}},[r("el-dropdown",{attrs:{trigger:"hover"}},[r("span",{staticClass:"el-dropdown-link userinfo-inner"},[r("img",{attrs:{src:this.sysUserAvatar}}),t._v(" "+t._s(t.sysUserName))]),t._v(" "),r("el-dropdown-menu",{attrs:{slot:"dropdown"},slot:"dropdown"},[r("router-link",{staticClass:"inlineBlock",staticStyle:{"text-decoration":"none",color:"black"},attrs:{to:"/"}},[r("el-dropdown-item",[t._v("\n\t\t\t\t\t\t\t\t\t\t首页\n\t\t\t\t\t\t\t\t\t")])],1),t._v(" "),r("a",{staticStyle:{"text-decoration":"none",color:"black"},attrs:{target:"_blank",href:"https://github.com/artdong/vue-admin"}},[r("el-dropdown-item",[t._v("\n\t\t\t\t\t\t\t\t\t\t开源项目地址\n\t\t\t\t\t\t\t\t\t")])],1),t._v(" "),r("el-dropdown-item",{attrs:{divided:""},nativeOn:{click:function(e){return t.logout(e)}}},[t._v("退出登录")])],1)],1)],1)],1),t._v(" "),r("div",{staticClass:"grid-content bg-purple-light"},[r("el-col",{staticClass:"content-wrapper",attrs:{span:24}},[r("transition",{attrs:{name:"fade",mode:"out-in"}},[r("router-view")],1)],1)],1),t._v(" "),r("el-dialog",{attrs:{title:"我的任务",visible:t.dialogVisible,"close-on-click-modal":!1},on:{"update:visible":function(e){t.dialogVisible=e}}},[r("el-table",{directives:[{name:"loading",rawName:"v-loading",value:t.listLoading,expression:"listLoading"}],attrs:{data:t.maintains,"highlight-current-row":""},on:{"selection-change":t.selsChange}},[r("el-table-column",{attrs:{type:"selection",width:"55"}}),t._v(" "),r("el-table-column",{attrs:{type:"index",width:"60"}}),t._v(" "),r("el-table-column",{attrs:{prop:"strTitle",label:"维护项"}}),t._v(" "),r("el-table-column",{attrs:{prop:"strContent",label:"维护内容"}}),t._v(" "),r("el-table-column",{attrs:{label:"操作",width:"160"},scopedSlots:t._u([{key:"default",fn:function(e){return[r("el-button",{attrs:{size:"small"},on:{click:function(r){return t.handleConfirm(e.$index,e.row)}}},[t._v("确认")]),t._v(" "),r("el-dropdown",{staticStyle:{"margin-left":"5px"}},[r("span",{staticClass:"el-dropdown-link"},[t._v("\n\t\t\t\t\t\t\t\t\t\t 延迟"),r("i",{staticClass:"el-icon-caret-bottom el-icon--right"})]),t._v(" "),r("el-dropdown-menu",{attrs:{slot:"dropdown"},slot:"dropdown"},[r("el-dropdown-item",[t._v("5分钟")]),t._v(" "),r("el-dropdown-item",[t._v("10分钟")]),t._v(" "),r("el-dropdown-item",[t._v("15分钟")]),t._v(" "),r("el-dropdown-item",[t._v("20分钟")]),t._v(" "),r("el-dropdown-item",{attrs:{divided:""}},[t._v("30分钟")])],1)],1)]}}])})],1),t._v(" "),r("el-col",{staticClass:"toolbar",attrs:{span:24}},[r("el-button",{staticClass:"fl",attrs:{type:"danger",disabled:0===this.sels.length},on:{click:t.batchRemove}},[t._v("批量删除")]),t._v(" "),r("el-pagination",{staticClass:"fr",attrs:{"current-page":t.listQuery.curPage,"page-sizes":[10,20,30,50],"page-size":t.listQuery.pageSize,layout:"total, sizes, prev, pager, next, jumper",total:t.total},on:{"size-change":t.handleSizeChange,"current-change":t.handleCurrentChange,"update:currentPage":function(e){return t.$set(t.listQuery,"curPage",e)},"update:current-page":function(e){return t.$set(t.listQuery,"curPage",e)}}})],1)],1)],1)])],1)},staticRenderFns:[]}},1069:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement;return(t._self._c||e)("p",{staticClass:"page-container"},[t._v("404 page not found")])},staticRenderFns:[]}},1070:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("section",{staticClass:"chart-container"},[r("el-row",[r("el-col",{attrs:{span:12}},[r("div",{staticStyle:{width:"100%",height:"400px"},attrs:{id:"chartColumn"}})]),t._v(" "),r("el-col",{attrs:{span:12}},[r("div",{staticStyle:{width:"100%",height:"400px"},attrs:{id:"chartBar"}})]),t._v(" "),r("el-col",{attrs:{span:12}},[r("div",{staticStyle:{width:"100%",height:"400px"},attrs:{id:"chartLine"}})]),t._v(" "),r("el-col",{attrs:{span:12}},[r("div",{staticStyle:{width:"100%",height:"400px"},attrs:{id:"chartPie"}})]),t._v(" "),r("el-col",{attrs:{span:24}},[r("a",{staticStyle:{float:"right"},attrs:{href:"http://echarts.baidu.com/examples.html",target:"_blank"}},[t._v("more>>")])])],1)],1)},staticRenderFns:[]}},1071:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("section",[r("el-form",{staticStyle:{margin:"10px"}},[r("el-row",[r("el-col",{staticStyle:{"margin-left":"12px"},attrs:{xs:6,sm:6,md:6,lg:6}},[r("el-form-item",{attrs:{label:"文件名:"}},[r("el-input",{staticStyle:{width:"160px"},attrs:{placeholder:"请输入文件名(默认为excel-list)","prefix-icon":"el-icon-document"},model:{value:t.filename,callback:function(e){t.filename=e},expression:"filename"}})],1)],1),t._v(" "),r("el-col",{staticStyle:{"margin-left":"12px"},attrs:{xs:6,sm:6,md:6,lg:6}},[r("el-form-item",{attrs:{label:"单元格自动宽度:"}},[r("el-radio-group",{model:{value:t.autoWidth,callback:function(e){t.autoWidth=e},expression:"autoWidth"}},[r("el-radio",{attrs:{label:1,border:""}},[t._v("是")]),t._v(" "),r("el-radio",{attrs:{label:0,border:""}},[t._v("否")])],1)],1)],1),t._v(" "),r("el-col",{staticStyle:{"margin-left":"12px"},attrs:{xs:6,sm:6,md:6,lg:6}},[r("el-form-item",{staticStyle:{"margin-left":"10px"}},[r("el-button",{attrs:{type:"primary",loading:t.downloadLoading,icon:"document"},on:{click:t.handleDownload}},[t._v("\n 导出Excel\n ")])],1)],1)],1)],1),t._v(" "),t._e(),t._v(" "),r("div",{staticClass:"panel"},[r("div",{staticClass:"panel-title"},[r("span",{domProps:{textContent:t._s(t.panelTitle)}}),t._v(" "),r("div",{staticClass:"fr"},[r("el-button",{attrs:{size:"small"},on:{click:function(e){return e.stopPropagation(),t.on_refresh(e)}}},[r("i",{staticClass:"fa fa-refresh"})]),t._v(" "),r("el-button",{attrs:{type:"primary",icon:"plus",size:"small"},on:{click:t.handleAdd}},[t._v("新增")])],1)]),t._v(" "),r("div",{staticClass:"panel-body"},[r("el-table",{directives:[{name:"loading",rawName:"v-loading",value:t.listLoading,expression:"listLoading"}],attrs:{data:t.maintains,"highlight-current-row":""},on:{"selection-change":t.selsChange}},[r("el-table-column",{attrs:{type:"selection",width:"55"}}),t._v(" "),r("el-table-column",{attrs:{type:"index",width:"60"}}),t._v(" "),r("el-table-column",{attrs:{label:"维护项名称"},scopedSlots:t._u([{key:"default",fn:function(e){return[r("span",{domProps:{innerHTML:t._s(t.brightenKeyword(e.row.strTitle,t.filters.strTitle))}})]}}])}),t._v(" "),r("el-table-column",{attrs:{label:"维护内容"},scopedSlots:t._u([{key:"default",fn:function(e){return[r("span",{domProps:{innerHTML:t._s(t.brightenKeyword(e.row.strContent,t.filters.strContent))}})]}}])}),t._v(" "),r("el-table-column",{attrs:{prop:"createTime",label:"创建时间"}}),t._v(" "),r("el-table-column",{attrs:{prop:"updateTime",label:"更新时间"}}),t._v(" "),r("el-table-column",{attrs:{label:"操作",width:"150"},scopedSlots:t._u([{key:"default",fn:function(e){return[r("el-button",{attrs:{size:"small"},on:{click:function(r){return t.handleEdit(e.$index,e.row)}}},[t._v("编辑")]),t._v(" "),r("el-button",{attrs:{type:"danger",size:"small"},on:{click:function(r){return t.handleDel(e.$index,e.row)}}},[t._v("删除\n ")])]}}])})],1),t._v(" "),r("el-col",{staticClass:"toolbar",attrs:{span:24}},[r("el-button",{staticClass:"fl",attrs:{type:"danger",disabled:0===this.sels.length},on:{click:t.batchRemove}},[t._v("批量删除\n ")]),t._v(" "),r("el-pagination",{staticClass:"fr",attrs:{"current-page":t.listQuery.curPage,"page-sizes":[10,20,30,50],"page-size":t.listQuery.pageSize,layout:"total, sizes, prev, pager, next, jumper",total:t.total},on:{"size-change":t.handleSizeChange,"current-change":t.handleCurrentChange,"update:currentPage":function(e){return t.$set(t.listQuery,"curPage",e)},"update:current-page":function(e){return t.$set(t.listQuery,"curPage",e)}}})],1)],1)]),t._v(" "),r("el-dialog",{attrs:{title:"编辑维护项","close-on-click-modal":!1},model:{value:t.editFormVisible,callback:function(e){t.editFormVisible=e},expression:"editFormVisible"}},[r("el-form",{ref:"editForm",attrs:{model:t.editForm,"label-width":"80px",rules:t.editFormRules}},[r("el-form-item",{staticStyle:{width:"450px"},attrs:{label:"名称",prop:"strTitle"}},[r("el-input",{attrs:{"auto-complete":"off"},model:{value:t.editForm.strTitle,callback:function(e){t.$set(t.editForm,"strTitle",e)},expression:"editForm.strTitle"}})],1),t._v(" "),r("el-form-item",{staticStyle:{width:"450px"},attrs:{label:"维护内容",prop:"strContent"}},[r("el-input",{attrs:{type:"textarea",rows:2,placeholder:"请输入内容"},model:{value:t.editForm.strContent,callback:function(e){t.$set(t.editForm,"strContent",e)},expression:"editForm.strContent"}})],1)],1),t._v(" "),r("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[r("el-button",{nativeOn:{click:function(e){t.editFormVisible=!1}}},[t._v("取消")]),t._v(" "),r("el-button",{attrs:{type:"primary",loading:t.editLoading},nativeOn:{click:function(e){return t.editSubmit(e)}}},[t._v("提交")])],1)],1),t._v(" "),r("el-dialog",{attrs:{title:"新增维护项","close-on-click-modal":!1,size:"small"},model:{value:t.addFormVisible,callback:function(e){t.addFormVisible=e},expression:"addFormVisible"}},[r("el-form",{ref:"addForm",attrs:{model:t.addForm,"label-width":"80px",rules:t.addFormRules}},[r("el-form-item",{staticStyle:{width:"450px"},attrs:{label:"名称",prop:"strTitle"}},[r("el-input",{attrs:{"auto-complete":"off"},model:{value:t.addForm.strTitle,callback:function(e){t.$set(t.addForm,"strTitle",e)},expression:"addForm.strTitle"}})],1),t._v(" "),r("el-form-item",{staticStyle:{width:"450px"},attrs:{label:"维护内容",prop:"strContent"}},[r("el-input",{attrs:{type:"textarea",rows:2,placeholder:"请输入内容"},model:{value:t.addForm.strContent,callback:function(e){t.$set(t.addForm,"strContent",e)},expression:"addForm.strContent"}})],1)],1),t._v(" "),r("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[r("el-button",{nativeOn:{click:function(e){t.addFormVisible=!1}}},[t._v("取消")]),t._v(" "),r("el-button",{attrs:{type:"primary",loading:t.addLoading},nativeOn:{click:function(e){return t.addSubmit(e)}}},[t._v("提交")])],1)],1)],1)},staticRenderFns:[]}},1072:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("section",[r("el-collapse",{model:{value:t.activeNames,callback:function(e){t.activeNames=e},expression:"activeNames"}},[r("el-collapse-item",{attrs:{title:"查询条件",name:"1"}},[r("el-form",{ref:"form",staticStyle:{margin:"10px",width:"60%","min-width":"600px"},attrs:{model:t.form,"label-width":"80px"},on:{submit:function(e){return e.preventDefault(),t.onSubmit(e)}}},[r("el-row",[r("el-col",{attrs:{span:12}},[r("el-form-item",{attrs:{label:"设备编号"}},[r("el-select",{attrs:{placeholder:"全部"},model:{value:t.form.deviceNo,callback:function(e){t.$set(t.form,"deviceNo",e)},expression:"form.deviceNo"}},t._l(t.form.deviceNoItems,function(e){return r("el-option",{key:e,attrs:{value:e.value}},[t._v(t._s(e.text))])}),1),t._v(" "),r("p",[t._v("已选:"+t._s(t.form.deviceNo))])],1)],1),t._v(" "),r("el-col",{attrs:{span:12}},[r("el-form-item",{attrs:{"label-width":"80px",label:"开始时间"}},[r("el-date-picker",{attrs:{type:"datetime",format:"yyyy-MM-dd HH:mm:ss",placeholder:"选择日期时间"},model:{value:t.form.startTime,callback:function(e){t.$set(t.form,"startTime",e)},expression:"form.startTime"}})],1)],1)],1),t._v(" "),r("el-form-item",{attrs:{label:"重复设置"}},[r("el-checkbox-group",{model:{value:t.form.repeat,callback:function(e){t.$set(t.form,"repeat",e)},expression:"form.repeat"}},[r("el-checkbox",{attrs:{label:"一次",name:"repeat"}}),t._v(" "),r("el-checkbox",{attrs:{label:"每天",name:"repeat"}}),t._v(" "),r("el-checkbox",{attrs:{label:"每周",name:"repeat"}}),t._v(" "),r("el-checkbox",{attrs:{label:"每季",name:"repeat"}}),t._v(" "),r("el-checkbox",{attrs:{label:"每年",name:"repeat"}}),t._v(" "),r("p",[t._v("已选:"+t._s(t.form.repeat.join("|")))])],1)],1),t._v(" "),r("el-row",[r("el-col",{attrs:{span:12}},[r("el-form-item",{attrs:{label:"类型选择"}},[r("el-checkbox-group",{model:{value:t.form.type,callback:function(e){t.$set(t.form,"type",e)},expression:"form.type"}},[r("el-checkbox",{attrs:{label:"充电",name:"type"}}),t._v(" "),r("el-checkbox",{attrs:{label:"放电",name:"type"}}),t._v(" "),r("el-checkbox",{attrs:{label:"内阻",name:"type"}})],1),t._v(" "),r("p",[t._v("已选:"+t._s(t.form.type.join("|")))])],1)],1),t._v(" "),r("el-col",{attrs:{span:12}},[r("el-form-item",{attrs:{label:"启用状态"}},[r("el-radio-group",{model:{value:t.form.state,callback:function(e){t.$set(t.form,"state",e)},expression:"form.state"}},[r("el-radio",{staticClass:"radio",attrs:{label:1}},[t._v("已启用")]),t._v(" "),r("el-radio",{staticClass:"radio",attrs:{label:0}},[t._v("未启用")])],1)],1)],1)],1),t._v(" "),r("el-form",{attrs:{model:t.filters}},[r("el-col",{attrs:{span:6}},[r("el-form-item",{staticStyle:{"margin-left":"10px"}},[r("el-input",{attrs:{placeholder:"设备名称"},model:{value:t.filters.siteName,callback:function(e){t.$set(t.filters,"siteName",e)},expression:"filters.siteName"}})],1)],1),t._v(" "),r("el-col",{attrs:{span:4}},[r("el-form-item",{staticStyle:{"margin-left":"30px"}},[r("el-button",{attrs:{type:"primary"},on:{click:t.getUsers}},[t._v("查询")])],1)],1)],1)],1)],1)],1),t._v(" "),r("div",{staticClass:"panel"},[r("div",{staticClass:"panel-title"},[r("span",{domProps:{textContent:t._s(t.panelTitle)}}),t._v(" "),r("div",{staticClass:"fr"},[r("el-button",{attrs:{size:"small"},on:{click:function(e){return e.stopPropagation(),t.on_refresh(e)}}},[r("i",{staticClass:"fa fa-refresh"})]),t._v(" "),r("el-button",{attrs:{type:"primary",icon:"plus",size:"small"},on:{click:t.handleAdd}},[t._v("新增")])],1)]),t._v(" "),r("div",{staticClass:"panel-body"},[r("el-table",{directives:[{name:"loading",rawName:"v-loading",value:t.listLoading,expression:"listLoading"}],staticStyle:{width:"100%"},attrs:{data:t.users,"highlight-current-row":""},on:{"selection-change":t.selsChange}},[r("el-table-column",{attrs:{type:"selection",width:"55"}}),t._v(" "),r("el-table-column",{attrs:{type:"index",width:"60"}}),t._v(" "),r("el-table-column",{attrs:{prop:"siteName",label:"站点名称",width:"120"}}),t._v(" "),r("el-table-column",{attrs:{prop:"deviceNo",label:"设备号",width:"100",sortable:""}}),t._v(" "),r("el-table-column",{attrs:{prop:"startTime",label:"开始时间",width:"120",sortable:""}}),t._v(" "),r("el-table-column",{attrs:{prop:"repeat",label:"重复设置","min-width":"120"}}),t._v(" "),r("el-table-column",{attrs:{prop:"state",label:"启用状态","min-width":"120",formatter:t.formatState}}),t._v(" "),r("el-table-column",{attrs:{prop:"type",label:"类型","min-width":"100"}}),t._v(" "),r("el-table-column",{attrs:{label:"操作",width:"150"},scopedSlots:t._u([{key:"default",fn:function(e){return[r("el-button",{attrs:{size:"small"},on:{click:function(r){return t.handleEdit(e.$index,e.row)}}},[t._v("编辑")]),t._v(" "),r("el-button",{attrs:{type:"danger",size:"small"},on:{click:function(r){return t.handleDel(e.$index,e.row)}}},[t._v("删除")])]}}])})],1),t._v(" "),r("el-col",{staticClass:"toolbar",attrs:{span:24}},[r("el-button",{staticClass:"fl",attrs:{type:"danger",disabled:0===this.sels.length},on:{click:t.batchRemove}},[t._v("批量删除")]),t._v(" "),r("el-pagination",{staticClass:"fr",attrs:{"current-page":t.listQuery.curPage,"page-sizes":[10,20,30,50],"page-size":t.listQuery.pageSize,layout:"total, sizes, prev, pager, next, jumper",total:t.total},on:{"size-change":t.handleSizeChange,"current-change":t.handleCurrentChange,"update:currentPage":function(e){return t.$set(t.listQuery,"curPage",e)},"update:current-page":function(e){return t.$set(t.listQuery,"curPage",e)}}})],1)],1)]),t._v(" "),r("el-dialog",{attrs:{title:"编辑","close-on-click-modal":!1},model:{value:t.editFormVisible,callback:function(e){t.editFormVisible=e},expression:"editFormVisible"}},[r("el-form",{ref:"editForm",attrs:{model:t.editForm,"label-width":"80px",rules:t.editFormRules}},[r("el-form-item",{attrs:{label:"站点名称",prop:"siteName"}},[r("el-input",{attrs:{"auto-complete":"off"},model:{value:t.editForm.siteName,callback:function(e){t.$set(t.editForm,"siteName",e)},expression:"editForm.siteName"}})],1),t._v(" "),r("el-form-item",{attrs:{label:"设备号"}},[r("el-input-number",{attrs:{min:0,max:200},model:{value:t.editForm.deviceNo,callback:function(e){t.$set(t.editForm,"deviceNo",e)},expression:"editForm.deviceNo"}})],1),t._v(" "),r("el-form-item",{attrs:{label:"开始时间"}},[r("el-date-picker",{attrs:{type:"date",placeholder:"选择日期"},model:{value:t.editForm.startTime,callback:function(e){t.$set(t.editForm,"startTime",e)},expression:"editForm.startTime"}})],1),t._v(" "),r("el-form-item",{attrs:{label:"重复设置"}},[r("el-checkbox-group",{model:{value:t.editForm.repeat,callback:function(e){t.$set(t.editForm,"repeat",e)},expression:"editForm.repeat"}},[r("el-checkbox",{attrs:{label:"一次",name:"repeat"}}),t._v(" "),r("el-checkbox",{attrs:{label:"每天",name:"repeat"}}),t._v(" "),r("el-checkbox",{attrs:{label:"每周",name:"repeat"}}),t._v(" "),r("el-checkbox",{attrs:{label:"每季",name:"repeat"}}),t._v(" "),r("el-checkbox",{attrs:{label:"每年",name:"repeat"}})],1)],1),t._v(" "),r("el-row",[r("el-col",{attrs:{span:12}},[r("el-form-item",{attrs:{label:"类型选择"}},[r("el-checkbox-group",{model:{value:t.editForm.type,callback:function(e){t.$set(t.editForm,"type",e)},expression:"editForm.type"}},[r("el-checkbox",{attrs:{label:"充电",name:"type"}}),t._v(" "),r("el-checkbox",{attrs:{label:"放电",name:"type"}}),t._v(" "),r("el-checkbox",{attrs:{label:"内阻",name:"type"}})],1)],1)],1),t._v(" "),r("el-col",{attrs:{span:12}},[r("el-form-item",{attrs:{label:"启用状态"}},[r("el-radio-group",{model:{value:t.editForm.state,callback:function(e){t.$set(t.editForm,"state",e)},expression:"editForm.state"}},[r("el-radio",{staticClass:"radio",attrs:{label:1}},[t._v("已启用")]),t._v(" "),r("el-radio",{staticClass:"radio",attrs:{label:0}},[t._v("未启用")])],1)],1)],1)],1)],1),t._v(" "),r("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[r("el-button",{nativeOn:{click:function(e){t.editFormVisible=!1}}},[t._v("取消")]),t._v(" "),r("el-button",{attrs:{type:"primary",loading:t.editLoading},nativeOn:{click:function(e){return t.editSubmit(e)}}},[t._v("提交")])],1)],1),t._v(" "),r("el-dialog",{attrs:{title:"新增","close-on-click-modal":!1},model:{value:t.addFormVisible,callback:function(e){t.addFormVisible=e},expression:"addFormVisible"}},[r("el-form",{ref:"addForm",attrs:{model:t.addForm,"label-width":"80px",rules:t.addFormRules}},[r("el-form-item",{attrs:{label:"站点名称",prop:"siteName"}},[r("el-input",{attrs:{"auto-complete":"off"},model:{value:t.addForm.siteName,callback:function(e){t.$set(t.addForm,"siteName",e)},expression:"addForm.siteName"}})],1),t._v(" "),r("el-form-item",{attrs:{label:"设备号"}},[r("el-input-number",{attrs:{min:0,max:200},model:{value:t.addForm.deviceNo,callback:function(e){t.$set(t.addForm,"deviceNo",e)},expression:"addForm.deviceNo"}})],1),t._v(" "),r("el-form-item",{attrs:{label:"开始时间"}},[r("el-date-picker",{attrs:{type:"date",placeholder:"选择日期"},model:{value:t.addForm.startTime,callback:function(e){t.$set(t.addForm,"startTime",e)},expression:"addForm.startTime"}})],1),t._v(" "),r("el-form-item",{attrs:{label:"重复设置"}},[r("el-checkbox-group",{model:{value:t.addForm.repeat,callback:function(e){t.$set(t.addForm,"repeat",e)},expression:"addForm.repeat"}},[r("el-checkbox",{attrs:{label:"一次",name:"repeat"}}),t._v(" "),r("el-checkbox",{attrs:{label:"每天",name:"repeat"}}),t._v(" "),r("el-checkbox",{attrs:{label:"每周",name:"repeat"}}),t._v(" "),r("el-checkbox",{attrs:{label:"每季",name:"repeat"}}),t._v(" "),r("el-checkbox",{attrs:{label:"每年",name:"repeat"}})],1)],1),t._v(" "),r("el-row",[r("el-col",{attrs:{span:12}},[r("el-form-item",{attrs:{label:"类型选择"}},[r("el-checkbox-group",{model:{value:t.addForm.type,callback:function(e){t.$set(t.addForm,"type",e)},expression:"addForm.type"}},[r("el-checkbox",{attrs:{label:"充电",name:"type"}}),t._v(" "),r("el-checkbox",{attrs:{label:"放电",name:"type"}}),t._v(" "),r("el-checkbox",{attrs:{label:"内阻",name:"type"}})],1)],1)],1),t._v(" "),r("el-col",{attrs:{span:12}},[r("el-form-item",{attrs:{label:"启用状态"}},[r("el-radio-group",{model:{value:t.editForm.state,callback:function(e){t.$set(t.editForm,"state",e)},expression:"editForm.state"}},[r("el-radio",{staticClass:"radio",attrs:{label:1}},[t._v("已启用")]),t._v(" "),r("el-radio",{staticClass:"radio",attrs:{label:0}},[t._v("未启用")])],1)],1)],1)],1)],1),t._v(" "),r("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[r("el-button",{nativeOn:{click:function(e){t.addFormVisible=!1}}},[t._v("取消")]),t._v(" "),r("el-button",{attrs:{type:"primary",loading:t.addLoading},nativeOn:{click:function(e){return t.addSubmit(e)}}},[t._v("提交")])],1)],1)],1)},staticRenderFns:[]}},1073:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("section",[r("el-collapse",{model:{value:t.activeNames,callback:function(e){t.activeNames=e},expression:"activeNames"}},[r("el-collapse-item",{attrs:{title:"查询条件",name:"1"}},[r("el-form",{ref:"form",staticStyle:{margin:"10px"},attrs:{model:t.form},on:{submit:function(e){return e.preventDefault(),t.onSubmit(e)}}},[r("el-form",{attrs:{model:t.filters}},[r("el-row",[r("el-col",{staticStyle:{"margin-left":"12px"},attrs:{xs:12,sm:12,md:12,lg:5}},[r("el-form-item",[r("el-input",{staticStyle:{width:"160px"},attrs:{placeholder:"计划ID"},model:{value:t.filters.strPlanId,callback:function(e){t.$set(t.filters,"strPlanId",e)},expression:"filters.strPlanId"}})],1)],1),t._v(" "),r("el-col",{attrs:{xs:10,sm:10,md:10,lg:5}},[r("el-form-item",[r("el-input",{staticStyle:{width:"160px"},attrs:{placeholder:"设备类型ID"},model:{value:t.filters.strMaintainId,callback:function(e){t.$set(t.filters,"strMaintainId",e)},expression:"filters.strMaintainId"}})],1)],1),t._v(" "),r("el-col",{staticStyle:{"margin-left":"12px"},attrs:{xs:12,sm:12,md:12,lg:5}},[r("el-form-item",[r("el-input",{staticStyle:{width:"160px"},attrs:{placeholder:"设备ID"},model:{value:t.filters.equipmentCategory,callback:function(e){t.$set(t.filters,"equipmentCategory",e)},expression:"filters.equipmentCategory"}})],1)],1),t._v(" "),r("el-col",{attrs:{xs:10,sm:10,md:10,lg:5}},[r("el-form-item",[r("el-input",{staticStyle:{width:"160px"},attrs:{placeholder:"维护项ID"},model:{value:t.filters.equipmentId,callback:function(e){t.$set(t.filters,"equipmentId",e)},expression:"filters.equipmentId"}})],1)],1),t._v(" "),r("el-col",{attrs:{xs:12,sm:12,md:12,lg:14}},[r("el-form-item",{staticClass:"postInfo-container-item",attrs:{"label-width":"80px",label:"执行时间"}},[r("el-date-picker",{attrs:{type:"datetimerange","picker-options":t.pickerOptions2,placeholder:"选择时间范围",align:"right"},model:{value:t.filters.executeTime,callback:function(e){t.$set(t.filters,"executeTime",e)},expression:"filters.executeTime"}})],1)],1),t._v(" "),r("el-col",{staticStyle:{"margin-left":"20px"},attrs:{xs:10,sm:10,md:10,lg:6}},[r("el-form-item",{attrs:{label:"是否周期性:"}},[r("el-radio-group",{model:{value:t.filters.isCycle,callback:function(e){t.$set(t.filters,"isCycle",e)},expression:"filters.isCycle"}},[r("el-radio",{staticClass:"radio",attrs:{label:1}},[t._v("是")]),t._v(" "),r("el-radio",{staticClass:"radio",attrs:{label:0}},[t._v("否")])],1)],1)],1),t._v(" "),r("el-col",{attrs:{xs:12,sm:12,md:12,lg:12}},[r("el-form-item",{staticStyle:{"margin-left":"10px"}},[r("el-button",{attrs:{type:"primary",icon:"search"},on:{click:t.getPlans}},[t._v("查询")])],1)],1)],1)],1)],1)],1)],1),t._v(" "),r("div",{staticClass:"panel"},[r("div",{staticClass:"panel-title"},[r("span",{domProps:{textContent:t._s(t.panelTitle)}}),t._v(" "),r("div",{staticClass:"fr"},[r("el-button",{attrs:{size:"small"},on:{click:function(e){return e.stopPropagation(),t.on_refresh(e)}}},[r("i",{staticClass:"fa fa-refresh"})]),t._v(" "),r("el-button",{attrs:{type:"primary",icon:"plus",size:"small"},on:{click:t.handleAdd}},[t._v("新增")])],1)]),t._v(" "),r("div",{staticClass:"panel-body"},[r("el-table",{directives:[{name:"loading",rawName:"v-loading",value:t.listLoading,expression:"listLoading"}],attrs:{data:t.plans,"highlight-current-row":""},on:{"selection-change":t.selsChange}},[r("el-table-column",{attrs:{type:"selection",width:"55"}}),t._v(" "),r("el-table-column",{attrs:{type:"index",width:"60"}}),t._v(" "),r("el-table-column",{attrs:{prop:"strTitle",label:"维护项名称",width:"120"}}),t._v(" "),r("el-table-column",{attrs:{prop:"description",label:"描述"}}),t._v(" "),r("el-table-column",{attrs:{prop:"executeTime",label:"执行时间",width:"120",sortable:""}}),t._v(" "),r("el-table-column",{attrs:{prop:"isCycle",label:"是否周期性",width:"120",formatter:t.formatCycle}}),t._v(" "),r("el-table-column",{attrs:{prop:"cycleDay",label:"剩余天数"}}),t._v(" "),r("el-table-column",{attrs:{label:"操作",width:"150"},scopedSlots:t._u([{key:"default",fn:function(e){return[r("el-button",{attrs:{size:"small"},on:{click:function(r){return t.handleEdit(e.$index,e.row)}}},[t._v("编辑")]),t._v(" "),r("el-button",{attrs:{type:"danger",size:"small"},on:{click:function(r){return t.handleDel(e.$index,e.row)}}},[t._v("删除\n ")])]}}])})],1),t._v(" "),r("el-col",{staticClass:"toolbar",attrs:{span:24}},[r("el-button",{staticClass:"fl",attrs:{type:"danger",disabled:0===this.sels.length},on:{click:t.batchRemove}},[t._v("批量删除")]),t._v(" "),r("el-pagination",{staticClass:"fr",attrs:{"current-page":t.listQuery.curPage,"page-sizes":[10,20,30,50],"page-size":t.listQuery.pageSize,layout:"total, sizes, prev, pager, next, jumper",total:t.total},on:{"size-change":t.handleSizeChange,"current-change":t.handleCurrentChange,"update:currentPage":function(e){return t.$set(t.listQuery,"curPage",e)},"update:current-page":function(e){return t.$set(t.listQuery,"curPage",e)}}})],1)],1)]),t._v(" "),r("el-dialog",{attrs:{title:"编辑维护计划",visible:t.editFormVisible,"close-on-click-modal":!1},on:{"update:visible":function(e){t.editFormVisible=e}}},[r("el-form",{ref:"editForm",attrs:{model:t.editForm,"label-width":"80px",rules:t.editFormRules}},[r("el-form-item",{staticStyle:{width:"292px"},attrs:{label:"计划ID",prop:"strPlanId"}},[r("el-input",{attrs:{"auto-complete":"off",disabled:""},model:{value:t.editForm.strPlanId,callback:function(e){t.$set(t.editForm,"strPlanId",e)},expression:"editForm.strPlanId"}})],1),t._v(" "),r("el-form-item",{staticStyle:{width:"292px"},attrs:{label:"维护项ID",prop:"strMaintainId"}},[r("el-input",{attrs:{"auto-complete":"off"},model:{value:t.editForm.strMaintainId,callback:function(e){t.$set(t.editForm,"strMaintainId",e)},expression:"editForm.strMaintainId"}})],1),t._v(" "),r("el-form-item",{attrs:{label:"执行时间",prop:"executeTime"}},[r("el-date-picker",{attrs:{type:"datetime",placeholder:"选择日期时间",align:"right","picker-options":t.pickerOptions1},model:{value:t.editForm.executeTime,callback:function(e){t.$set(t.editForm,"executeTime",e)},expression:"editForm.executeTime"}})],1),t._v(" "),r("el-form-item",{attrs:{label:"是否周期性",prop:"isCycle"}},[r("el-radio-group",{model:{value:t.editForm.isCycle,callback:function(e){t.$set(t.editForm,"isCycle",e)},expression:"editForm.isCycle"}},[r("el-radio",{staticClass:"radio",attrs:{label:1}},[t._v("是")]),t._v(" "),r("el-radio",{staticClass:"radio",attrs:{label:0}},[t._v("否")])],1)],1),t._v(" "),r("el-form-item",{attrs:{label:"执行周期(天)",prop:"cycleDay"}},[t.editForm.isCycle?r("el-input-number",{attrs:{min:1,max:30},on:{change:t.handleChange},model:{value:t.editForm.cycleDay,callback:function(e){t.$set(t.editForm,"cycleDay",e)},expression:"editForm.cycleDay"}}):t._e()],1),t._v(" "),r("el-form-item",{staticStyle:{width:"450px"},attrs:{label:"计划描述",prop:"description"}},[r("el-input",{attrs:{type:"textarea",rows:2,placeholder:"请输入内容"},model:{value:t.editForm.description,callback:function(e){t.$set(t.editForm,"description",e)},expression:"editForm.description"}})],1),t._v(" "),r("el-form-item",{staticStyle:{width:"292px"},attrs:{label:"设备类型ID",prop:"equipmentCategory"}},[r("el-input",{attrs:{"auto-complete":"off"},model:{value:t.editForm.equipmentCategory,callback:function(e){t.$set(t.editForm,"equipmentCategory",e)},expression:"editForm.equipmentCategory"}})],1),t._v(" "),r("el-form-item",{staticStyle:{width:"292px"},attrs:{label:"设备ID",prop:"equipmentId"}},[r("el-input",{attrs:{"auto-complete":"off"},model:{value:t.editForm.equipmentId,callback:function(e){t.$set(t.editForm,"equipmentId",e)},expression:"editForm.equipmentId"}})],1)],1),t._v(" "),r("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[r("el-button",{nativeOn:{click:function(e){t.editFormVisible=!1}}},[t._v("取消")]),t._v(" "),r("el-button",{attrs:{type:"primary",loading:t.editLoading},nativeOn:{click:function(e){return t.editSubmit(e)}}},[t._v("提交")])],1)],1),t._v(" "),r("el-dialog",{attrs:{title:"新增维护计划",visible:t.addFormVisible,"close-on-click-modal":!1},on:{"update:visible":function(e){t.addFormVisible=e}}},[r("el-form",{ref:"addForm",attrs:{model:t.addForm,"label-width":"100px",rules:t.addFormRules}},[r("el-row",[r("el-col",{attrs:{xs:12,sm:12,md:12,lg:12}},[r("el-form-item",{staticStyle:{width:"292px"},attrs:{label:"维护项ID",prop:"strMaintainId"}},[r("el-input",{attrs:{"auto-complete":"off"},model:{value:t.addForm.strMaintainId,callback:function(e){t.$set(t.addForm,"strMaintainId",e)},expression:"addForm.strMaintainId"}})],1)],1),t._v(" "),r("el-col",{attrs:{xs:12,sm:12,md:12,lg:12}},[r("el-form-item",{attrs:{label:"执行时间",prop:"executeTime"}},[r("el-date-picker",{attrs:{type:"datetime",placeholder:"选择日期时间",align:"right","picker-options":t.pickerOptions1},model:{value:t.addForm.executeTime,callback:function(e){t.$set(t.addForm,"executeTime",e)},expression:"addForm.executeTime"}})],1)],1)],1),t._v(" "),r("el-row",[r("el-col",{attrs:{xs:12,sm:12,md:12,lg:12}},[r("el-form-item",{attrs:{label:"是否周期性",prop:"isCycle"}},[r("el-radio-group",{model:{value:t.addForm.isCycle,callback:function(e){t.$set(t.addForm,"isCycle",e)},expression:"addForm.isCycle"}},[r("el-radio",{staticClass:"radio",attrs:{label:1}},[t._v("是")]),t._v(" "),r("el-radio",{staticClass:"radio",attrs:{label:0}},[t._v("否")])],1)],1)],1),t._v(" "),r("el-col",{staticStyle:{"margin-left":"12px"},attrs:{xs:10,sm:10,md:10,lg:10}},[t.addForm.isCycle?r("el-form-item",{attrs:{label:"执行周期(天)",prop:"cycleDay"}},[r("el-input-number",{attrs:{min:1,max:90},on:{change:t.handleChange},model:{value:t.addForm.cycleDay,callback:function(e){t.$set(t.addForm,"cycleDay",e)},expression:"addForm.cycleDay"}})],1):t._e()],1)],1),t._v(" "),r("el-row",[r("el-col",{attrs:{xs:24,sm:24,md:24,lg:24}},[r("el-form-item",{attrs:{label:"提醒时间"}},t._l(t.customDayOptions,function(e){return r("el-tag",{key:e.value,staticStyle:{"margin-left":"2px"},attrs:{closable:!0,type:"primary"},on:{close:function(r){return t.closeViewTabs(e,r)}},model:{value:t.addForm.remindDay,callback:function(e){t.$set(t.addForm,"remindDay",e)},expression:"addForm.remindDay"}},[t._v(t._s(e.label)+"\n ")])}),1)],1)],1),t._v(" "),r("el-row",[r("el-col",{staticStyle:{"margin-left":"12px"},attrs:{xs:10,sm:10,md:10,lg:10}},[r("el-form-item",{attrs:{label:"自定义(天)",prop:"customDay"}},[r("el-input-number",{attrs:{min:1,max:365},on:{change:t.handleCustomDayChange},model:{value:t.addForm.customDay,callback:function(e){t.$set(t.addForm,"customDay",e)},expression:"addForm.customDay"}})],1)],1),t._v(" "),r("el-col",{attrs:{xs:10,sm:10,md:10,lg:10}},[r("el-form-item",[t.showAddCustomDayButton?t._e():r("el-button",{attrs:{type:"primary",disabled:"disabled"}},[t._v("添加")]),t._v(" "),t.showAddCustomDayButton?r("el-button",{attrs:{type:"primary"},on:{click:t.onAddCustomDay}},[t._v("添加")]):t._e()],1)],1)],1),t._v(" "),r("el-form-item",{staticStyle:{width:"450px"},attrs:{label:"计划描述",prop:"description"}},[r("el-input",{attrs:{type:"textarea",rows:2,placeholder:"请输入内容"},model:{value:t.addForm.description,callback:function(e){t.$set(t.addForm,"description",e)},expression:"addForm.description"}})],1),t._v(" "),r("el-form-item",{staticStyle:{width:"292px"},attrs:{label:"设备类型ID",prop:"equipmentCategory"}},[r("el-input",{attrs:{"auto-complete":"off"},model:{value:t.addForm.equipmentCategory,callback:function(e){t.$set(t.addForm,"equipmentCategory",e)},expression:"addForm.equipmentCategory"}})],1),t._v(" "),r("el-form-item",{staticStyle:{width:"292px"},attrs:{label:"设备ID",prop:"equipmentId"}},[r("el-input",{attrs:{"auto-complete":"off"},model:{value:t.addForm.equipmentId,callback:function(e){t.$set(t.addForm,"equipmentId",e)},expression:"addForm.equipmentId"}})],1)],1),t._v(" "),r("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[r("el-button",{nativeOn:{click:function(e){t.addFormVisible=!1}}},[t._v("取消")]),t._v(" "),r("el-button",{attrs:{type:"primary",loading:t.addLoading},nativeOn:{click:function(e){return t.addSubmit(e)}}},[t._v("提交")])],1)],1)],1)},staticRenderFns:[]}},1074:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement;t._self._c;return t._m(0)},staticRenderFns:[function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("section",{staticClass:"babylonjs-container"},[r("canvas",{attrs:{id:"renderCanvas"}})])}]}},111:function(t,e,r){"use strict";function i(t,e){for(var e=e-(t+"").length,r=0;r{b} : {c} ({d}%)"},legend:{orient:"vertical",left:"left",data:["直接访问","邮件营销","联盟广告","视频广告","搜索引擎"]},label:{normal:{formatter:"{b}:{c}: ({d}%)",textStyle:{fontWeight:"normal",fontSize:15}}},series:[{name:"访问来源",type:"pie",radius:"55%",center:["50%","60%"],data:[{value:335,name:"直接访问"},{value:310,name:"邮件营销"},{value:234,name:"联盟广告"},{value:135,name:"视频广告"},{value:1548,name:"搜索引擎"}],itemStyle:{emphasis:{shadowBlur:10,shadowOffsetX:0,shadowColor:"rgba(0, 0, 0, 0.5)"}}}]})},drawCharts:function(){this.drawColumnChart(),this.drawBarChart(),this.drawLineChart(),this.drawPieChart()}},mounted:function(){var t=this;t.drawCharts(),window.onresize=function(){t.chartColumn.resize(),t.chartBar.resize(),t.chartLine.resize(),t.chartPie.resize()}},updated:function(){this.drawCharts()}}},472:function(t,e,r){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=r(99),a=i(n),o=r(111),s=(i(o),r(77));e.default={data:function(){return{myBackToTopStyle:{right:"50px",bottom:"50px",width:"40px",height:"40px","border-radius":"4px","line-height":"45px",background:"#e7eaf1"},filters:{strTitle:"",strContent:"",createTime:"",updateTime:"",cStartTime:""},filename:"",autoWidth:!0,panelTitle:"维护项列表",pickerOptions1:{shortcuts:[{text:"今天",onClick:function(t){t.$emit("pick",new Date)}},{text:"昨天",onClick:function(t){var e=new Date;e.setTime(e.getTime()-864e5),t.$emit("pick",e)}},{text:"一周前",onClick:function(t){var e=new Date;e.setTime(e.getTime()-6048e5),t.$emit("pick",e)}}]},pickerOptions2:{shortcuts:[{text:"最近一周",onClick:function(t){var e=new Date,r=new Date;r.setTime(r.getTime()-6048e5),t.$emit("pick",[r,e])}},{text:"最近一个月",onClick:function(t){var e=new Date,r=new Date;r.setTime(r.getTime()-2592e6),t.$emit("pick",[r,e])}},{text:"最近三个月",onClick:function(t){var e=new Date,r=new Date;r.setTime(r.getTime()-7776e6),t.$emit("pick",[r,e])}}]},maintains:[],total:0,listLoading:!1,downloadLoading:!1,sels:[],form:{strTitle:"",strContent:"",cStartTime:"",cEndTime:"",uStartTime:"",uEndTime:""},listQuery:{curPage:1,limit:20,pageSize:10,importance:void 0,title:void 0,type:void 0,sort:"+id"},editFormVisible:!1,editLoading:!1,editFormRules:{strTitle:[{required:!0,message:"请输入维护项名称",trigger:"blur"}],strContent:[{required:!0,message:"请输入维护内容",trigger:"blur"}]},editForm:{strMaintainId:0,strTitle:"",strContent:""},addFormVisible:!1,addLoading:!1,addFormRules:{strTitle:[{required:!0,message:"请输入维护项名称",trigger:"blur"}],strContent:[{required:!0,message:"请输入维护内容",trigger:"blur"}]},addForm:{strTitle:"",strContent:""}}},methods:{formatState:function(t,e){return 0==t.state?"未启用":1==t.state?"已启用":"未知"},brightenKeyword:function(t,e){var r=new RegExp(e,"i");if(t){return t.replace(r,''+e+"")}},handleSizeChange:function(t){this.listQuery.pageSize=t,this.getMaintains()},handleCurrentChange:function(t){this.listQuery.curPage=t,this.getMaintains()},on_refresh:function(){this.getMaintains()},handleDownload:function(){var t=this,e="";e=this.sels.length?this.sels:this.maintains,this.downloadLoading=!0,r.e(0).then(r.bind(null,1118)).then(function(r){var i=["Id","Title","Content","Time"],n=["strMaintainId","strTitle","strContent","createTime"],a=t.formatJson(n,e);r.export_json_to_excel({titleName:"维护项列表",header:i,data:a,filename:t.filename,autoWidth:t.autoWidth}),t.downloadLoading=!1})},formatJson:function(t,e){return e.map(function(e){return t.map(function(t){return e[t]})})},getMaintains:function(){var t=this,e={curPage:this.listQuery.curPage,pageSize:this.listQuery.pageSize,strOrder:"asc",strTitle:this.filters.strTitle,strContent:this.filters.strContent};this.listLoading=!0,(0,s.getMaintainListPage)(e).then(function(e){t.total=e.data.total,t.maintains=e.data.maintains,t.listLoading=!1})},handleDel:function(t,e){var r=this;this.$confirm("确认删除该记录吗?","提示",{type:"warning"}).then(function(){r.listLoading=!0;var t={strMaintainId:e.strMaintainId};(0,s.removeMaintain)(t).then(function(t){r.listLoading=!1,r.$message({message:"删除成功",type:"success"}),r.getMaintains()})}).catch(function(){})},handleEdit:function(t,e){this.editFormVisible=!0,this.editForm=(0,a.default)({},e)},handleAdd:function(){this.addFormVisible=!0,this.addForm={strTitle:"",strContent:""}},editSubmit:function(){var t=this;this.$refs.editForm.validate(function(e){e&&t.$confirm("确认提交吗?","提示",{}).then(function(){t.editLoading=!0;var e=(0,a.default)({},t.editForm);(0,s.editMaintain)(e).then(function(e){t.editLoading=!1,t.$message({message:"提交成功",type:"success"}),t.$refs.editForm.resetFields(),t.editFormVisible=!1,t.getMaintains()})})})},addSubmit:function(){var t=this;this.$refs.addForm.validate(function(e){e&&t.$confirm("确认提交吗?","提示",{}).then(function(){t.addLoading=!0;var e=(0,a.default)({},t.addForm);(0,s.addMaintain)(e).then(function(e){t.addLoading=!1,t.$message({message:"提交成功",type:"success"}),t.$refs.addForm.resetFields(),t.addFormVisible=!1,t.getMaintains()})})})},selsChange:function(t){this.sels=t},batchRemove:function(){var t=this,e=this.sels.map(function(t){return t.strMaintainId}).toString();this.$confirm("确认删除选中记录吗?","提示",{type:"warning"}).then(function(){t.listLoading=!0;var r={ids:e};(0,s.batchRemoveMaintain)(r).then(function(e){t.listLoading=!1,t.$message({message:"删除成功",type:"success"}),t.getMaintains()})}).catch(function(){})}},mounted:function(){this.getMaintains()}}},473:function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=r(1046),n=function(t){return t&&t.__esModule?t:{default:t}}(i);e.default={name:"UploadExcel",components:{UploadExcelComponent:n.default},data:function(){return{panelTitle:"列表",tableData:[],tableHeader:[]}},methods:{beforeUpload:function(t){return t.size/1024/1024<1||(this.$message({message:"Please do not upload files larger than 1m in size.",type:"warning"}),!1)},handleSuccess:function(t){var e=t.results,r=t.header;this.tableData=e,this.tableHeader=r}}}},474:function(t,e,r){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=r(99),a=i(n),o=r(111),s=(i(o),r(77));e.default={data:function(){return{myBackToTopStyle:{right:"50px",bottom:"50px",width:"40px",height:"40px","border-radius":"4px","line-height":"45px",background:"#e7eaf1"},filters:{strTitle:"",strContent:"",createTime:"",updateTime:"",cStartTime:""},panelTitle:"维护项列表",pickerOptions1:{shortcuts:[{text:"今天",onClick:function(t){t.$emit("pick",new Date)}},{text:"昨天",onClick:function(t){var e=new Date;e.setTime(e.getTime()-864e5),t.$emit("pick",e)}},{text:"一周前",onClick:function(t){var e=new Date;e.setTime(e.getTime()-6048e5),t.$emit("pick",e)}}]},pickerOptions2:{shortcuts:[{text:"最近一周",onClick:function(t){var e=new Date,r=new Date;r.setTime(r.getTime()-6048e5),t.$emit("pick",[r,e])}},{text:"最近一个月",onClick:function(t){var e=new Date,r=new Date;r.setTime(r.getTime()-2592e6),t.$emit("pick",[r,e])}},{text:"最近三个月",onClick:function(t){var e=new Date,r=new Date;r.setTime(r.getTime()-7776e6),t.$emit("pick",[r,e])}}]},maintains:[],total:0,listLoading:!1,sels:[],form:{strTitle:"",strContent:"",cStartTime:"",cEndTime:"",uStartTime:"",uEndTime:""},listQuery:{curPage:1,limit:20,pageSize:10,importance:void 0,title:void 0,type:void 0,sort:"+id"},editFormVisible:!1,editLoading:!1,editFormRules:{strTitle:[{required:!0,message:"请输入维护项名称",trigger:"blur"}],strContent:[{required:!0,message:"请输入维护内容",trigger:"blur"}]},editForm:{strMaintainId:0,strTitle:"",strContent:""},addFormVisible:!1,addLoading:!1,addFormRules:{strTitle:[{required:!0,message:"请输入维护项名称",trigger:"blur"}],strContent:[{required:!0,message:"请输入维护内容",trigger:"blur"}]},addForm:{strTitle:"",strContent:""}}},methods:{formatState:function(t,e){return 0==t.state?"未启用":1==t.state?"已启用":"未知"},brightenKeyword:function(t,e){var r=new RegExp(e,"i");if(t){return t.replace(r,''+e+"")}},handleSizeChange:function(t){this.listQuery.pageSize=t,this.getMaintains()},handleCurrentChange:function(t){this.listQuery.curPage=t,this.getMaintains()},on_refresh:function(){this.getMaintains()},getMaintains:function(){var t=this,e={curPage:this.listQuery.curPage,pageSize:this.listQuery.pageSize,strOrder:"asc",strTitle:this.filters.strTitle,strContent:this.filters.strContent};this.listLoading=!0,(0,s.getMaintainListPage)(e).then(function(e){t.total=e.data.total,t.maintains=e.data.maintains,t.listLoading=!1})},handleDel:function(t,e){var r=this;this.$confirm("确认删除该记录吗?","提示",{type:"warning"}).then(function(){r.listLoading=!0;var t={strMaintainId:e.strMaintainId};(0,s.removeMaintain)(t).then(function(t){r.listLoading=!1,r.$message({message:"删除成功",type:"success"}),r.getMaintains()})}).catch(function(){})},handleEdit:function(t,e){this.editFormVisible=!0,this.editForm=(0,a.default)({},e)},handleAdd:function(){this.addFormVisible=!0,this.addForm={strTitle:"",strContent:""}},editSubmit:function(){var t=this;this.$refs.editForm.validate(function(e){e&&t.$confirm("确认提交吗?","提示",{}).then(function(){t.editLoading=!0;var e=(0,a.default)({},t.editForm);(0,s.editMaintain)(e).then(function(e){t.editLoading=!1,t.$message({message:"提交成功",type:"success"}),t.$refs.editForm.resetFields(),t.editFormVisible=!1,t.getMaintains()})})})},addSubmit:function(){var t=this;this.$refs.addForm.validate(function(e){e&&t.$confirm("确认提交吗?","提示",{}).then(function(){t.addLoading=!0;var e=(0,a.default)({},t.addForm);(0,s.addMaintain)(e).then(function(e){t.addLoading=!1,t.$message({message:"提交成功",type:"success"}),t.$refs.addForm.resetFields(),t.addFormVisible=!1,t.getMaintains()})})})},selsChange:function(t){this.sels=t},batchRemove:function(){var t=this,e=this.sels.map(function(t){return t.strMaintainId}).toString();this.$confirm("确认删除选中记录吗?","提示",{type:"warning"}).then(function(){t.listLoading=!0;var r={ids:e};(0,s.batchRemoveMaintain)(r).then(function(e){t.listLoading=!1,t.$message({message:"删除成功",type:"success"}),t.getMaintains()})}).catch(function(){})}},mounted:function(){this.getMaintains()}}},475:function(t,e,r){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=r(99),a=i(n),o=r(111),s=(i(o),r(77));e.default={data:function(){return{filters:{strPlanId:"",strMaintainId:"",equipmentCategory:"",equipmentId:"",executeTime:"",isCycle:0,cycleDay:[]},panelTitle:"维护计划列表",activeNames:["1"],pickerOptions1:{shortcuts:[{text:"今天",onClick:function(t){t.$emit("pick",new Date)}},{text:"明天",onClick:function(t){var e=new Date;e.setTime(e.getTime()+864e5),t.$emit("pick",e)}},{text:"一周后",onClick:function(t){var e=new Date;e.setTime(e.getTime()+6048e5),t.$emit("pick",e)}}]},pickerOptions2:{shortcuts:[{text:"最近一周",onClick:function(t){var e=new Date,r=new Date;r.setTime(r.getTime()-6048e5),t.$emit("pick",[r,e])}},{text:"最近一个月",onClick:function(t){var e=new Date,r=new Date;r.setTime(r.getTime()-2592e6),t.$emit("pick",[r,e])}},{text:"最近三个月",onClick:function(t){var e=new Date,r=new Date;r.setTime(r.getTime()-7776e6),t.$emit("pick",[r,e])}}]},cycleDays:[{value:"1",label:"1天"},{value:"2",label:"2天"}],customDayOptions:[{value:"1",label:"1天"},{value:"2",label:"2天"},{value:"3",label:"3天"},{value:"4",label:"4天"},{value:"5",label:"5天"}],currentValue:"",showAddCustomDayButton:!1,plans:[],total:0,listLoading:!1,sels:[],form:{strPlanId:0,strMaintainId:"",executeTime:"",isCycle:0,cycleDay:"",description:"",equipmentCategory:"",equipmentId:""},listQuery:{curPage:1,limit:20,pageSize:10,importance:void 0,title:void 0,type:void 0,sort:"+id"},editFormVisible:!1,editLoading:!1,editFormRules:{strMaintainId:[{required:!0,message:"请输入维护项ID",trigger:"blur"}],executeTime:[{required:!0,validator:this.checkExecuteTime,trigger:"blur"}],equipmentCategory:[{required:!0,message:"请输入设备类型ID",trigger:"blur"}],equipmentId:[{required:!0,message:"请输入设备ID",trigger:"blur"}]},editForm:{strPlanId:0,strMaintainId:"",executeTime:"",isCycle:"",cycleDay:"",description:"",equipmentCategory:"",equipmentId:""},addFormVisible:!1,addLoading:!1,addFormRules:{strMaintainId:[{required:!0,message:"请输入维护项ID",trigger:"blur"}],executeTime:[{required:!0,validator:this.checkExecuteTime,trigger:"blur"}],equipmentCategory:[{required:!0,message:"请输入设备类型ID",trigger:"blur"}],equipmentId:[{required:!0,message:"请输入设备ID",trigger:"blur"}]},addForm:{strMaintainId:"",executeTime:"",isCycle:0,cycleDay:"",remindDay:[1,2,3,4,5],customDay:"",description:"",equipmentCategory:"",equipmentId:""}}},methods:{format:function(t){function e(e,r){return t.apply(this,arguments)}return e.toString=function(){return t.toString()},e}(function(t,e){var r=new Date(t),i=function(t){return(t<10?"0":"")+t};return e.replace(/yyyy|MM|dd|HH|mm|ss/g,function(t){switch(t){case"yyyy":return i(r.getFullYear());case"MM":return i(r.getMonth()+1);case"mm":return i(r.getMinutes());case"dd":return i(r.getDate());case"HH":return i(r.getHours());case"ss":return i(r.getSeconds())}})}),checkExecuteTime:function(t,e,r){if(!e)return r(new Error("执行时间不能为空"));setTimeout(function(){var t=new Date;format(e,"yyyy-MM-dd HH:mm:ss")1){for(var i=[],n=0;n0?1:0}),m.MOUSE={LEFT:0,MIDDLE:1,RIGHT:2},m.CullFaceNone=0,m.CullFaceBack=1,m.CullFaceFront=2,m.CullFaceFrontBack=3,m.FrontFaceDirectionCW=0,m.FrontFaceDirectionCCW=1,m.BasicShadowMap=0,m.PCFShadowMap=1,m.PCFSoftShadowMap=2,m.FrontSide=0,m.BackSide=1,m.DoubleSide=2,m.NoShading=0,m.FlatShading=1,m.SmoothShading=2,m.NoColors=0,m.FaceColors=1,m.VertexColors=2,m.NoBlending=0,m.NormalBlending=1,m.AdditiveBlending=2,m.SubtractiveBlending=3,m.MultiplyBlending=4,m.CustomBlending=5,m.AddEquation=100,m.SubtractEquation=101,m.ReverseSubtractEquation=102,m.MinEquation=103,m.MaxEquation=104,m.ZeroFactor=200,m.OneFactor=201,m.SrcColorFactor=202,m.OneMinusSrcColorFactor=203,m.SrcAlphaFactor=204,m.OneMinusSrcAlphaFactor=205,m.DstAlphaFactor=206,m.OneMinusDstAlphaFactor=207,m.DstColorFactor=208,m.OneMinusDstColorFactor=209,m.SrcAlphaSaturateFactor=210,m.MultiplyOperation=0,m.MixOperation=1,m.AddOperation=2,m.UVMapping=function(){},m.CubeReflectionMapping=function(){},m.CubeRefractionMapping=function(){},m.SphericalReflectionMapping=function(){},m.SphericalRefractionMapping=function(){},m.RepeatWrapping=1e3,m.ClampToEdgeWrapping=1001,m.MirroredRepeatWrapping=1002,m.NearestFilter=1003,m.NearestMipMapNearestFilter=1004,m.NearestMipMapLinearFilter=1005,m.LinearFilter=1006,m.LinearMipMapNearestFilter=1007,m.LinearMipMapLinearFilter=1008,m.UnsignedByteType=1009,m.ByteType=1010,m.ShortType=1011,m.UnsignedShortType=1012,m.IntType=1013,m.UnsignedIntType=1014,m.FloatType=1015,m.UnsignedShort4444Type=1016,m.UnsignedShort5551Type=1017,m.UnsignedShort565Type=1018,m.AlphaFormat=1019,m.RGBFormat=1020,m.RGBAFormat=1021,m.LuminanceFormat=1022,m.LuminanceAlphaFormat=1023,m.RGB_S3TC_DXT1_Format=2001,m.RGBA_S3TC_DXT1_Format=2002,m.RGBA_S3TC_DXT3_Format=2003,m.RGBA_S3TC_DXT5_Format=2004,m.RGB_PVRTC_4BPPV1_Format=2100,m.RGB_PVRTC_2BPPV1_Format=2101,m.RGBA_PVRTC_4BPPV1_Format=2102,m.RGBA_PVRTC_2BPPV1_Format=2103,m.Color=function(t){return 3===arguments.length?this.setRGB(arguments[0],arguments[1],arguments[2]):this.set(t)},m.Color.prototype={constructor:m.Color,r:1,g:1,b:1,set:function(t){return t instanceof m.Color?this.copy(t):"number"==typeof t?this.setHex(t):"string"==typeof t&&this.setStyle(t),this},setHex:function(t){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(255&t)/255,this},setRGB:function(t,e,r){return this.r=t,this.g=e,this.b=r,this},setHSL:function(t,e,r){if(0===e)this.r=this.g=this.b=r;else{var i=function(t,e,r){return r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+6*(e-t)*(2/3-r):t},n=r<=.5?r*(1+e):r+e-r*e,a=2*r-n;this.r=i(a,n,t+1/3),this.g=i(a,n,t),this.b=i(a,n,t-1/3)}return this},setStyle:function(t){if(/^rgb\((\d+), ?(\d+), ?(\d+)\)$/i.test(t)){var e=/^rgb\((\d+), ?(\d+), ?(\d+)\)$/i.exec(t);return this.r=Math.min(255,parseInt(e[1],10))/255,this.g=Math.min(255,parseInt(e[2],10))/255,this.b=Math.min(255,parseInt(e[3],10))/255,this}if(/^rgb\((\d+)\%, ?(\d+)\%, ?(\d+)\%\)$/i.test(t)){var e=/^rgb\((\d+)\%, ?(\d+)\%, ?(\d+)\%\)$/i.exec(t);return this.r=Math.min(100,parseInt(e[1],10))/100,this.g=Math.min(100,parseInt(e[2],10))/100,this.b=Math.min(100,parseInt(e[3],10))/100,this}if(/^\#([0-9a-f]{6})$/i.test(t)){var e=/^\#([0-9a-f]{6})$/i.exec(t);return this.setHex(parseInt(e[1],16)),this}if(/^\#([0-9a-f])([0-9a-f])([0-9a-f])$/i.test(t)){var e=/^\#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(t);return this.setHex(parseInt(e[1]+e[1]+e[2]+e[2]+e[3]+e[3],16)),this}if(/^(\w+)$/i.test(t))return this.setHex(m.ColorKeywords[t]),this},copy:function(t){return this.r=t.r,this.g=t.g,this.b=t.b,this},copyGammaToLinear:function(t){return this.r=t.r*t.r,this.g=t.g*t.g,this.b=t.b*t.b,this},copyLinearToGamma:function(t){return this.r=Math.sqrt(t.r),this.g=Math.sqrt(t.g),this.b=Math.sqrt(t.b),this},convertGammaToLinear:function(){var t=this.r,e=this.g,r=this.b;return this.r=t*t,this.g=e*e,this.b=r*r,this},convertLinearToGamma:function(){return this.r=Math.sqrt(this.r),this.g=Math.sqrt(this.g),this.b=Math.sqrt(this.b),this},getHex:function(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0},getHexString:function(){return("000000"+this.getHex().toString(16)).slice(-6)},getHSL:function(t){var e,r,i=t||{h:0,s:0,l:0},n=this.r,a=this.g,o=this.b,s=Math.max(n,a,o),l=Math.min(n,a,o),h=(l+s)/2;if(l===s)e=0,r=0;else{var c=s-l;switch(r=h<=.5?c/(s+l):c/(2-s-l),s){case n:e=(a-o)/c+(a0?(e=.5/Math.sqrt(d+1),this._w=.25/e,this._x=(c-l)*e,this._y=(a-h)*e,this._z=(o-n)*e):i>s&&i>u?(e=2*Math.sqrt(1+i-s-u),this._w=(c-l)/e,this._x=.25*e,this._y=(n+o)/e,this._z=(a+h)/e):s>u?(e=2*Math.sqrt(1+s-i-u),this._w=(a-h)/e,this._x=(n+o)/e,this._y=.25*e,this._z=(l+c)/e):(e=2*Math.sqrt(1+u-i-s),this._w=(o-n)/e,this._x=(a+h)/e,this._y=(l+c)/e,this._z=.25*e),this.onChangeCallback(),this},setFromUnitVectors:function(){var t,e;return function(r,i){return void 0===t&&(t=new m.Vector3),e=r.dot(i)+1,e<1e-6?(e=0,Math.abs(r.x)>Math.abs(r.z)?t.set(-r.y,r.x,0):t.set(0,-r.z,r.y)):t.crossVectors(r,i),this._x=t.x,this._y=t.y,this._z=t.z,this._w=e,this.normalize(),this}}(),inverse:function(){return this.conjugate().normalize(),this},conjugate:function(){return this._x*=-1,this._y*=-1,this._z*=-1,this.onChangeCallback(),this},dot:function(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var t=this.length();return 0===t?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this.onChangeCallback(),this},multiply:function(t,e){return void 0!==e?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(t,e)):this.multiplyQuaternions(this,t)},multiplyQuaternions:function(t,e){var r=t._x,i=t._y,n=t._z,a=t._w,o=e._x,s=e._y,l=e._z,h=e._w;return this._x=r*h+a*o+i*l-n*s,this._y=i*h+a*s+n*o-r*l,this._z=n*h+a*l+r*s-i*o,this._w=a*h-r*o-i*s-n*l,this.onChangeCallback(),this},multiplyVector3:function(t){return console.warn("THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead."),t.applyQuaternion(this)},slerp:function(t,e){if(0===e)return this;if(1===e)return this.copy(t);var r=this._x,i=this._y,n=this._z,a=this._w,o=a*t._w+r*t._x+i*t._y+n*t._z;if(o<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,o=-o):this.copy(t),o>=1)return this._w=a,this._x=r,this._y=i,this._z=n,this;var s=Math.acos(o),l=Math.sqrt(1-o*o);if(Math.abs(l)<.001)return this._w=.5*(a+this._w),this._x=.5*(r+this._x),this._y=.5*(i+this._y),this._z=.5*(n+this._z),this;var h=Math.sin((1-e)*s)/l,c=Math.sin(e*s)/l;return this._w=a*h+this._w*c,this._x=r*h+this._x*c,this._y=i*h+this._y*c,this._z=n*h+this._z*c,this.onChangeCallback(),this},equals:function(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w},fromArray:function(t,e){return void 0===e&&(e=0),this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this.onChangeCallback(),this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t},onChange:function(t){return this.onChangeCallback=t,this},onChangeCallback:function(){},clone:function(){return new m.Quaternion(this._x,this._y,this._z,this._w)}},m.Quaternion.slerp=function(t,e,r,i){return r.copy(t).slerp(e,i)},m.Vector2=function(t,e){this.x=t||0,this.y=e||0},m.Vector2.prototype={constructor:m.Vector2,set:function(t,e){return this.x=t,this.y=e,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setComponent:function(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+t)}},getComponent:function(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}},copy:function(t){return this.x=t.x,this.y=t.y,this},add:function(t,e){return void 0!==e?(console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this)},addVectors:function(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this},addScalar:function(t){return this.x+=t,this.y+=t,this},sub:function(t,e){return void 0!==e?(console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this)},subVectors:function(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this},multiply:function(t){return this.x*=t.x,this.y*=t.y,this},multiplyScalar:function(t){return this.x*=t,this.y*=t,this},divide:function(t){return this.x/=t.x,this.y/=t.y,this},divideScalar:function(t){if(0!==t){var e=1/t;this.x*=e,this.y*=e}else this.x=0,this.y=0;return this},min:function(t){return this.x>t.x&&(this.x=t.x),this.y>t.y&&(this.y=t.y),this},max:function(t){return this.xe.x&&(this.x=e.x),this.ye.y&&(this.y=e.y),this},clampScalar:function(){var t,e;return function(r,i){return void 0===t&&(t=new m.Vector2,e=new m.Vector2),t.set(r,r),e.set(i,i),this.clamp(t,e)}}(),floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},roundToZero:function(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this},negate:function(){return this.x=-this.x,this.y=-this.y,this},dot:function(t){return this.x*t.x+this.y*t.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){return this.divideScalar(this.length())},distanceTo:function(t){return Math.sqrt(this.distanceToSquared(t))},distanceToSquared:function(t){var e=this.x-t.x,r=this.y-t.y;return e*e+r*r},setLength:function(t){var e=this.length();return 0!==e&&t!==e&&this.multiplyScalar(t/e),this},lerp:function(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this},equals:function(t){return t.x===this.x&&t.y===this.y},fromArray:function(t,e){return void 0===e&&(e=0),this.x=t[e],this.y=t[e+1],this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this.x,t[e+1]=this.y,t},clone:function(){return new m.Vector2(this.x,this.y)}},m.Vector3=function(t,e,r){this.x=t||0,this.y=e||0,this.z=r||0},m.Vector3.prototype={constructor:m.Vector3,set:function(t,e,r){return this.x=t,this.y=e,this.z=r,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setZ:function(t){return this.z=t,this},setComponent:function(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}},getComponent:function(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}},copy:function(t){return this.x=t.x,this.y=t.y,this.z=t.z,this},add:function(t,e){return void 0!==e?(console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this)},addScalar:function(t){return this.x+=t,this.y+=t,this.z+=t,this},addVectors:function(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this},sub:function(t,e){return void 0!==e?(console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this)},subVectors:function(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this},multiply:function(t,e){return void 0!==e?(console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(t,e)):(this.x*=t.x,this.y*=t.y,this.z*=t.z,this)},multiplyScalar:function(t){return this.x*=t,this.y*=t,this.z*=t,this},multiplyVectors:function(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this},applyEuler:function(){var t;return function(e){return e instanceof m.Euler==!1&&console.error("THREE.Vector3: .applyEuler() now expects a Euler rotation rather than a Vector3 and order."),void 0===t&&(t=new m.Quaternion),this.applyQuaternion(t.setFromEuler(e)),this}}(),applyAxisAngle:function(){var t;return function(e,r){return void 0===t&&(t=new m.Quaternion),this.applyQuaternion(t.setFromAxisAngle(e,r)),this}}(),applyMatrix3:function(t){var e=this.x,r=this.y,i=this.z,n=t.elements;return this.x=n[0]*e+n[3]*r+n[6]*i,this.y=n[1]*e+n[4]*r+n[7]*i,this.z=n[2]*e+n[5]*r+n[8]*i,this},applyMatrix4:function(t){var e=this.x,r=this.y,i=this.z,n=t.elements;return this.x=n[0]*e+n[4]*r+n[8]*i+n[12],this.y=n[1]*e+n[5]*r+n[9]*i+n[13],this.z=n[2]*e+n[6]*r+n[10]*i+n[14],this},applyProjection:function(t){var e=this.x,r=this.y,i=this.z,n=t.elements,a=1/(n[3]*e+n[7]*r+n[11]*i+n[15]);return this.x=(n[0]*e+n[4]*r+n[8]*i+n[12])*a,this.y=(n[1]*e+n[5]*r+n[9]*i+n[13])*a,this.z=(n[2]*e+n[6]*r+n[10]*i+n[14])*a,this},applyQuaternion:function(t){var e=this.x,r=this.y,i=this.z,n=t.x,a=t.y,o=t.z,s=t.w,l=s*e+a*i-o*r,h=s*r+o*e-n*i,c=s*i+n*r-a*e,u=-n*e-a*r-o*i;return this.x=l*s+u*-n+h*-o-c*-a,this.y=h*s+u*-a+c*-n-l*-o,this.z=c*s+u*-o+l*-a-h*-n,this},project:function(){var t;return function(e){return void 0===t&&(t=new m.Matrix4),t.multiplyMatrices(e.projectionMatrix,t.getInverse(e.matrixWorld)),this.applyProjection(t)}}(),unproject:function(){var t;return function(e){return void 0===t&&(t=new m.Matrix4),t.multiplyMatrices(e.matrixWorld,t.getInverse(e.projectionMatrix)),this.applyProjection(t)}}(),transformDirection:function(t){var e=this.x,r=this.y,i=this.z,n=t.elements;return this.x=n[0]*e+n[4]*r+n[8]*i,this.y=n[1]*e+n[5]*r+n[9]*i,this.z=n[2]*e+n[6]*r+n[10]*i,this.normalize(),this},divide:function(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this},divideScalar:function(t){if(0!==t){var e=1/t;this.x*=e,this.y*=e,this.z*=e}else this.x=0,this.y=0,this.z=0;return this},min:function(t){return this.x>t.x&&(this.x=t.x),this.y>t.y&&(this.y=t.y),this.z>t.z&&(this.z=t.z),this},max:function(t){return this.xe.x&&(this.x=e.x),this.ye.y&&(this.y=e.y),this.ze.z&&(this.z=e.z),this},clampScalar:function(){var t,e;return function(r,i){return void 0===t&&(t=new m.Vector3,e=new m.Vector3),t.set(r,r,r),e.set(i,i,i),this.clamp(t,e)}}(),floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this},roundToZero:function(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this},negate:function(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this},dot:function(t){return this.x*t.x+this.y*t.y+this.z*t.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length())},setLength:function(t){var e=this.length();return 0!==e&&t!==e&&this.multiplyScalar(t/e),this},lerp:function(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this},cross:function(t,e){if(void 0!==e)return console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(t,e);var r=this.x,i=this.y,n=this.z;return this.x=i*t.z-n*t.y,this.y=n*t.x-r*t.z,this.z=r*t.y-i*t.x,this},crossVectors:function(t,e){var r=t.x,i=t.y,n=t.z,a=e.x,o=e.y,s=e.z;return this.x=i*s-n*o,this.y=n*a-r*s,this.z=r*o-i*a,this},projectOnVector:function(){var t,e;return function(r){return void 0===t&&(t=new m.Vector3),t.copy(r).normalize(),e=this.dot(t),this.copy(t).multiplyScalar(e)}}(),projectOnPlane:function(){var t;return function(e){return void 0===t&&(t=new m.Vector3),t.copy(this).projectOnVector(e),this.sub(t)}}(),reflect:function(){var t;return function(e){return void 0===t&&(t=new m.Vector3),this.sub(t.copy(e).multiplyScalar(2*this.dot(e)))}}(),angleTo:function(t){var e=this.dot(t)/(this.length()*t.length());return Math.acos(m.Math.clamp(e,-1,1))},distanceTo:function(t){return Math.sqrt(this.distanceToSquared(t))},distanceToSquared:function(t){var e=this.x-t.x,r=this.y-t.y,i=this.z-t.z;return e*e+r*r+i*i},setEulerFromRotationMatrix:function(t,e){console.error("THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.")},setEulerFromQuaternion:function(t,e){console.error("THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.")},getPositionFromMatrix:function(t){return console.warn("THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition()."),this.setFromMatrixPosition(t)},getScaleFromMatrix:function(t){return console.warn("THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale()."),this.setFromMatrixScale(t)},getColumnFromMatrix:function(t,e){return console.warn("THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn()."),this.setFromMatrixColumn(t,e)},setFromMatrixPosition:function(t){return this.x=t.elements[12],this.y=t.elements[13],this.z=t.elements[14],this},setFromMatrixScale:function(t){var e=this.set(t.elements[0],t.elements[1],t.elements[2]).length(),r=this.set(t.elements[4],t.elements[5],t.elements[6]).length(),i=this.set(t.elements[8],t.elements[9],t.elements[10]).length();return this.x=e,this.y=r,this.z=i,this},setFromMatrixColumn:function(t,e){var r=4*t,i=e.elements;return this.x=i[r],this.y=i[r+1],this.z=i[r+2],this},equals:function(t){return t.x===this.x&&t.y===this.y&&t.z===this.z},fromArray:function(t,e){return void 0===e&&(e=0),this.x=t[e],this.y=t[e+1],this.z=t[e+2],this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t},clone:function(){return new m.Vector3(this.x,this.y,this.z)}},m.Vector4=function(t,e,r,i){this.x=t||0,this.y=e||0,this.z=r||0,this.w=void 0!==i?i:1},m.Vector4.prototype={constructor:m.Vector4,set:function(t,e,r,i){return this.x=t,this.y=e,this.z=r,this.w=i,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setZ:function(t){return this.z=t,this},setW:function(t){return this.w=t,this},setComponent:function(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+t)}},getComponent:function(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+t)}},copy:function(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this},add:function(t,e){return void 0!==e?(console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this)},addScalar:function(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this},addVectors:function(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this},sub:function(t,e){return void 0!==e?(console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this)},subVectors:function(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this},multiplyScalar:function(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this},applyMatrix4:function(t){var e=this.x,r=this.y,i=this.z,n=this.w,a=t.elements;return this.x=a[0]*e+a[4]*r+a[8]*i+a[12]*n,this.y=a[1]*e+a[5]*r+a[9]*i+a[13]*n,this.z=a[2]*e+a[6]*r+a[10]*i+a[14]*n,this.w=a[3]*e+a[7]*r+a[11]*i+a[15]*n,this},divideScalar:function(t){if(0!==t){var e=1/t;this.x*=e,this.y*=e,this.z*=e,this.w*=e}else this.x=0,this.y=0,this.z=0,this.w=1;return this},setAxisAngleFromQuaternion:function(t){this.w=2*Math.acos(t.w);var e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this},setAxisAngleFromRotationMatrix:function(t){var e,r,i,n,a=t.elements,o=a[0],s=a[4],l=a[8],h=a[1],c=a[5],u=a[9],d=a[2],f=a[6],p=a[10];if(Math.abs(s-h)<.01&&Math.abs(l-d)<.01&&Math.abs(u-f)<.01){if(Math.abs(s+h)<.1&&Math.abs(l+d)<.1&&Math.abs(u+f)<.1&&Math.abs(o+c+p-3)<.1)return this.set(1,0,0,0),this;e=Math.PI;var m=(o+1)/2,g=(c+1)/2,v=(p+1)/2,y=(s+h)/4,x=(l+d)/4,b=(u+f)/4;return m>g&&m>v?m<.01?(r=0,i=.707106781,n=.707106781):(r=Math.sqrt(m),i=y/r,n=x/r):g>v?g<.01?(r=.707106781,i=0,n=.707106781):(i=Math.sqrt(g),r=y/i,n=b/i):v<.01?(r=.707106781,i=.707106781,n=0):(n=Math.sqrt(v),r=x/n,i=b/n),this.set(r,i,n,e),this}var _=Math.sqrt((f-u)*(f-u)+(l-d)*(l-d)+(h-s)*(h-s));return Math.abs(_)<.001&&(_=1),this.x=(f-u)/_,this.y=(l-d)/_,this.z=(h-s)/_,this.w=Math.acos((o+c+p-1)/2),this},min:function(t){return this.x>t.x&&(this.x=t.x),this.y>t.y&&(this.y=t.y),this.z>t.z&&(this.z=t.z),this.w>t.w&&(this.w=t.w),this},max:function(t){return this.xe.x&&(this.x=e.x),this.ye.y&&(this.y=e.y),this.ze.z&&(this.z=e.z),this.we.w&&(this.w=e.w),this},clampScalar:function(){var t,e;return function(r,i){return void 0===t&&(t=new m.Vector4,e=new m.Vector4),t.set(r,r,r,r),e.set(i,i,i,i),this.clamp(t,e)}}(),floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this},roundToZero:function(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this.w=this.w<0?Math.ceil(this.w):Math.floor(this.w),this},negate:function(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this},dot:function(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.w},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length())},setLength:function(t){var e=this.length();return 0!==e&&t!==e&&this.multiplyScalar(t/e),this},lerp:function(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this.w+=(t.w-this.w)*e,this},equals:function(t){return t.x===this.x&&t.y===this.y&&t.z===this.z&&t.w===this.w},fromArray:function(t,e){return void 0===e&&(e=0),this.x=t[e],this.y=t[e+1],this.z=t[e+2],this.w=t[e+3],this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t[e+3]=this.w,t},clone:function(){return new m.Vector4(this.x,this.y,this.z,this.w)}},m.Euler=function(t,e,r,i){this._x=t||0,this._y=e||0,this._z=r||0,this._order=i||m.Euler.DefaultOrder},m.Euler.RotationOrders=["XYZ","YZX","ZXY","XZY","YXZ","ZYX"],m.Euler.DefaultOrder="XYZ",m.Euler.prototype={constructor:m.Euler,_x:0,_y:0,_z:0,_order:m.Euler.DefaultOrder,get x(){return this._x},set x(t){this._x=t,this.onChangeCallback()},get y(){return this._y},set y(t){this._y=t,this.onChangeCallback()},get z(){return this._z},set z(t){this._z=t,this.onChangeCallback()},get order(){return this._order},set order(t){this._order=t,this.onChangeCallback()},set:function(t,e,r,i){return this._x=t,this._y=e,this._z=r,this._order=i||this._order,this.onChangeCallback(),this},copy:function(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this.onChangeCallback(),this},setFromRotationMatrix:function(t,e){var r=m.Math.clamp,i=t.elements,n=i[0],a=i[4],o=i[8],s=i[1],l=i[5],h=i[9],c=i[2],u=i[6],d=i[10];return e=e||this._order,"XYZ"===e?(this._y=Math.asin(r(o,-1,1)),Math.abs(o)<.99999?(this._x=Math.atan2(-h,d),this._z=Math.atan2(-a,n)):(this._x=Math.atan2(u,l),this._z=0)):"YXZ"===e?(this._x=Math.asin(-r(h,-1,1)),Math.abs(h)<.99999?(this._y=Math.atan2(o,d),this._z=Math.atan2(s,l)):(this._y=Math.atan2(-c,n),this._z=0)):"ZXY"===e?(this._x=Math.asin(r(u,-1,1)),Math.abs(u)<.99999?(this._y=Math.atan2(-c,d),this._z=Math.atan2(-a,l)):(this._y=0,this._z=Math.atan2(s,n))):"ZYX"===e?(this._y=Math.asin(-r(c,-1,1)),Math.abs(c)<.99999?(this._x=Math.atan2(u,d),this._z=Math.atan2(s,n)):(this._x=0,this._z=Math.atan2(-a,l))):"YZX"===e?(this._z=Math.asin(r(s,-1,1)),Math.abs(s)<.99999?(this._x=Math.atan2(-h,l),this._y=Math.atan2(-c,n)):(this._x=0,this._y=Math.atan2(o,d))):"XZY"===e?(this._z=Math.asin(-r(a,-1,1)),Math.abs(a)<.99999?(this._x=Math.atan2(u,l),this._y=Math.atan2(o,n)):(this._x=Math.atan2(-h,d),this._y=0)):console.warn("THREE.Euler: .setFromRotationMatrix() given unsupported order: "+e),this._order=e,this.onChangeCallback(),this},setFromQuaternion:function(t,e,r){var i=m.Math.clamp,n=t.x*t.x,a=t.y*t.y,o=t.z*t.z,s=t.w*t.w;return e=e||this._order,"XYZ"===e?(this._x=Math.atan2(2*(t.x*t.w-t.y*t.z),s-n-a+o),this._y=Math.asin(i(2*(t.x*t.z+t.y*t.w),-1,1)),this._z=Math.atan2(2*(t.z*t.w-t.x*t.y),s+n-a-o)):"YXZ"===e?(this._x=Math.asin(i(2*(t.x*t.w-t.y*t.z),-1,1)),this._y=Math.atan2(2*(t.x*t.z+t.y*t.w),s-n-a+o),this._z=Math.atan2(2*(t.x*t.y+t.z*t.w),s-n+a-o)):"ZXY"===e?(this._x=Math.asin(i(2*(t.x*t.w+t.y*t.z),-1,1)),this._y=Math.atan2(2*(t.y*t.w-t.z*t.x),s-n-a+o),this._z=Math.atan2(2*(t.z*t.w-t.x*t.y),s-n+a-o)):"ZYX"===e?(this._x=Math.atan2(2*(t.x*t.w+t.z*t.y),s-n-a+o),this._y=Math.asin(i(2*(t.y*t.w-t.x*t.z),-1,1)),this._z=Math.atan2(2*(t.x*t.y+t.z*t.w),s+n-a-o)):"YZX"===e?(this._x=Math.atan2(2*(t.x*t.w-t.z*t.y),s-n+a-o),this._y=Math.atan2(2*(t.y*t.w-t.x*t.z),s+n-a-o),this._z=Math.asin(i(2*(t.x*t.y+t.z*t.w),-1,1))):"XZY"===e?(this._x=Math.atan2(2*(t.x*t.w+t.y*t.z),s-n+a-o),this._y=Math.atan2(2*(t.x*t.z+t.y*t.w),s+n-a-o),this._z=Math.asin(i(2*(t.z*t.w-t.x*t.y),-1,1))):console.warn("THREE.Euler: .setFromQuaternion() given unsupported order: "+e),this._order=e,!1!==r&&this.onChangeCallback(),this},reorder:function(){var t=new m.Quaternion;return function(e){t.setFromEuler(this),this.setFromQuaternion(t,e)}}(),equals:function(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order},fromArray:function(t){return this._x=t[0],this._y=t[1],this._z=t[2],void 0!==t[3]&&(this._order=t[3]),this.onChangeCallback(),this},toArray:function(){return[this._x,this._y,this._z,this._order]},onChange:function(t){return this.onChangeCallback=t,this},onChangeCallback:function(){},clone:function(){return new m.Euler(this._x,this._y,this._z,this._order)}},m.Line3=function(t,e){this.start=void 0!==t?t:new m.Vector3,this.end=void 0!==e?e:new m.Vector3},m.Line3.prototype={constructor:m.Line3,set:function(t,e){return this.start.copy(t),this.end.copy(e),this},copy:function(t){return this.start.copy(t.start),this.end.copy(t.end),this},center:function(t){return(t||new m.Vector3).addVectors(this.start,this.end).multiplyScalar(.5)},delta:function(t){return(t||new m.Vector3).subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)},at:function(t,e){var r=e||new m.Vector3;return this.delta(r).multiplyScalar(t).add(this.start)},closestPointToPointParameter:function(){var t=new m.Vector3,e=new m.Vector3;return function(r,i){t.subVectors(r,this.start),e.subVectors(this.end,this.start);var n=e.dot(e),a=e.dot(t),o=a/n;return i&&(o=m.Math.clamp(o,0,1)),o}}(),closestPointToPoint:function(t,e,r){var i=this.closestPointToPointParameter(t,e),n=r||new m.Vector3;return this.delta(n).multiplyScalar(i).add(this.start)},applyMatrix4:function(t){return this.start.applyMatrix4(t),this.end.applyMatrix4(t),this},equals:function(t){return t.start.equals(this.start)&&t.end.equals(this.end)},clone:function(){return(new m.Line3).copy(this)}},m.Box2=function(t,e){this.min=void 0!==t?t:new m.Vector2(1/0,1/0),this.max=void 0!==e?e:new m.Vector2(-1/0,-1/0)},m.Box2.prototype={constructor:m.Box2,set:function(t,e){return this.min.copy(t),this.max.copy(e),this},setFromPoints:function(t){this.makeEmpty();for(var e=0,r=t.length;ethis.max.x||t.ythis.max.y)},containsBox:function(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y},getParameter:function(t,e){return(e||new m.Vector2).set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y))},isIntersectionBox:function(t){return!(t.max.xthis.max.x||t.max.ythis.max.y)},clampPoint:function(t,e){return(e||new m.Vector2).copy(t).clamp(this.min,this.max)},distanceToPoint:function(){var t=new m.Vector2;return function(e){return t.copy(e).clamp(this.min,this.max).sub(e).length()}}(),intersect:function(t){return this.min.max(t.min),this.max.min(t.max),this},union:function(t){return this.min.min(t.min),this.max.max(t.max),this},translate:function(t){return this.min.add(t),this.max.add(t),this},equals:function(t){return t.min.equals(this.min)&&t.max.equals(this.max)},clone:function(){return(new m.Box2).copy(this)}},m.Box3=function(t,e){this.min=void 0!==t?t:new m.Vector3(1/0,1/0,1/0),this.max=void 0!==e?e:new m.Vector3(-1/0,-1/0,-1/0)},m.Box3.prototype={constructor:m.Box3,set:function(t,e){return this.min.copy(t),this.max.copy(e),this},setFromPoints:function(t){this.makeEmpty();for(var e=0,r=t.length;ethis.max.x||t.ythis.max.y||t.zthis.max.z)},containsBox:function(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z},getParameter:function(t,e){return(e||new m.Vector3).set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))},isIntersectionBox:function(t){return!(t.max.xthis.max.x||t.max.ythis.max.y||t.max.zthis.max.z)},clampPoint:function(t,e){return(e||new m.Vector3).copy(t).clamp(this.min,this.max)},distanceToPoint:function(){var t=new m.Vector3;return function(e){return t.copy(e).clamp(this.min,this.max).sub(e).length()}}(),getBoundingSphere:function(){var t=new m.Vector3;return function(e){var r=e||new m.Sphere;return r.center=this.center(),r.radius=.5*this.size(t).length(),r}}(),intersect:function(t){return this.min.max(t.min),this.max.min(t.max),this},union:function(t){return this.min.min(t.min),this.max.max(t.max),this},applyMatrix4:function(){var t=[new m.Vector3,new m.Vector3,new m.Vector3,new m.Vector3,new m.Vector3,new m.Vector3,new m.Vector3,new m.Vector3];return function(e){return t[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),t[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),t[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),t[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),t[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),t[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),t[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),t[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.makeEmpty(),this.setFromPoints(t),this}}(),translate:function(t){return this.min.add(t),this.max.add(t),this},equals:function(t){return t.min.equals(this.min)&&t.max.equals(this.max)},clone:function(){return(new m.Box3).copy(this)}},m.Matrix3=function(){this.elements=new Float32Array([1,0,0,0,1,0,0,0,1]),arguments.length>0&&console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.")},m.Matrix3.prototype={constructor:m.Matrix3,set:function(t,e,r,i,n,a,o,s,l){var h=this.elements;return h[0]=t,h[3]=e,h[6]=r,h[1]=i,h[4]=n,h[7]=a,h[2]=o,h[5]=s,h[8]=l,this},identity:function(){return this.set(1,0,0,0,1,0,0,0,1),this},copy:function(t){var e=t.elements;return this.set(e[0],e[3],e[6],e[1],e[4],e[7],e[2],e[5],e[8]),this},multiplyVector3:function(t){return console.warn("THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead."),t.applyMatrix3(this)},multiplyVector3Array:function(t){return console.warn("THREE.Matrix3: .multiplyVector3Array() has been renamed. Use matrix.applyToVector3Array( array ) instead."),this.applyToVector3Array(t)},applyToVector3Array:function(){var t=new m.Vector3;return function(e,r,i){void 0===r&&(r=0),void 0===i&&(i=e.length);for(var n=0,a=r;n0&&console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.")},m.Matrix4.prototype={constructor:m.Matrix4,set:function(t,e,r,i,n,a,o,s,l,h,c,u,d,f,p,m){var g=this.elements;return g[0]=t,g[4]=e,g[8]=r,g[12]=i,g[1]=n,g[5]=a,g[9]=o,g[13]=s,g[2]=l,g[6]=h,g[10]=c,g[14]=u,g[3]=d,g[7]=f,g[11]=p,g[15]=m,this},identity:function(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this},copy:function(t){return this.elements.set(t.elements),this},extractPosition:function(t){return console.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition()."),this.copyPosition(t)},copyPosition:function(t){var e=this.elements,r=t.elements;return e[12]=r[12],e[13]=r[13],e[14]=r[14],this},extractRotation:function(){var t=new m.Vector3;return function(e){var r=this.elements,i=e.elements,n=1/t.set(i[0],i[1],i[2]).length(),a=1/t.set(i[4],i[5],i[6]).length(),o=1/t.set(i[8],i[9],i[10]).length();return r[0]=i[0]*n,r[1]=i[1]*n,r[2]=i[2]*n,r[4]=i[4]*a,r[5]=i[5]*a,r[6]=i[6]*a,r[8]=i[8]*o,r[9]=i[9]*o,r[10]=i[10]*o,this}}(),makeRotationFromEuler:function(t){t instanceof m.Euler==!1&&console.error("THREE.Matrix: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");var e=this.elements,r=t.x,i=t.y,n=t.z,a=Math.cos(r),o=Math.sin(r),s=Math.cos(i),l=Math.sin(i),h=Math.cos(n),c=Math.sin(n);if("XYZ"===t.order){var u=a*h,d=a*c,f=o*h,p=o*c;e[0]=s*h,e[4]=-s*c,e[8]=l,e[1]=d+f*l,e[5]=u-p*l,e[9]=-o*s,e[2]=p-u*l,e[6]=f+d*l,e[10]=a*s}else if("YXZ"===t.order){var g=s*h,v=s*c,y=l*h,x=l*c;e[0]=g+x*o,e[4]=y*o-v,e[8]=a*l,e[1]=a*c,e[5]=a*h,e[9]=-o,e[2]=v*o-y,e[6]=x+g*o,e[10]=a*s}else if("ZXY"===t.order){var g=s*h,v=s*c,y=l*h,x=l*c;e[0]=g-x*o,e[4]=-a*c,e[8]=y+v*o,e[1]=v+y*o,e[5]=a*h,e[9]=x-g*o,e[2]=-a*l,e[6]=o,e[10]=a*s}else if("ZYX"===t.order){var u=a*h,d=a*c,f=o*h,p=o*c;e[0]=s*h,e[4]=f*l-d,e[8]=u*l+p,e[1]=s*c,e[5]=p*l+u,e[9]=d*l-f,e[2]=-l,e[6]=o*s,e[10]=a*s}else if("YZX"===t.order){var b=a*s,_=a*l,w=o*s,M=o*l;e[0]=s*h,e[4]=M-b*c,e[8]=w*c+_,e[1]=c,e[5]=a*h,e[9]=-o*h,e[2]=-l*h,e[6]=_*c+w,e[10]=b-M*c}else if("XZY"===t.order){var b=a*s,_=a*l,w=o*s,M=o*l;e[0]=s*h,e[4]=-c,e[8]=l*h,e[1]=b*c+M,e[5]=a*h,e[9]=_*c-w,e[2]=w*c-_,e[6]=o*h,e[10]=M*c+b}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this},setRotationFromQuaternion:function(t){return console.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion()."),this.makeRotationFromQuaternion(t)},makeRotationFromQuaternion:function(t){var e=this.elements,r=t.x,i=t.y,n=t.z,a=t.w,o=r+r,s=i+i,l=n+n,h=r*o,c=r*s,u=r*l,d=i*s,f=i*l,p=n*l,m=a*o,g=a*s,v=a*l;return e[0]=1-(d+p),e[4]=c-v,e[8]=u+g,e[1]=c+v,e[5]=1-(h+p),e[9]=f-m,e[2]=u-g,e[6]=f+m,e[10]=1-(h+d),e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this},lookAt:function(){var t=new m.Vector3,e=new m.Vector3,r=new m.Vector3;return function(i,n,a){var o=this.elements;return r.subVectors(i,n).normalize(),0===r.length()&&(r.z=1),t.crossVectors(a,r).normalize(),0===t.length()&&(r.x+=1e-4,t.crossVectors(a,r).normalize()),e.crossVectors(r,t),o[0]=t.x,o[4]=e.x,o[8]=r.x,o[1]=t.y,o[5]=e.y,o[9]=r.y,o[2]=t.z,o[6]=e.z,o[10]=r.z,this}}(),multiply:function(t,e){return void 0!==e?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(t,e)):this.multiplyMatrices(this,t)},multiplyMatrices:function(t,e){var r=t.elements,i=e.elements,n=this.elements,a=r[0],o=r[4],s=r[8],l=r[12],h=r[1],c=r[5],u=r[9],d=r[13],f=r[2],p=r[6],m=r[10],g=r[14],v=r[3],y=r[7],x=r[11],b=r[15],_=i[0],w=i[4],M=i[8],S=i[12],C=i[1],T=i[5],E=i[9],A=i[13],F=i[2],L=i[6],P=i[10],D=i[14],R=i[3],k=i[7],U=i[11],z=i[15];return n[0]=a*_+o*C+s*F+l*R,n[4]=a*w+o*T+s*L+l*k,n[8]=a*M+o*E+s*P+l*U,n[12]=a*S+o*A+s*D+l*z,n[1]=h*_+c*C+u*F+d*R,n[5]=h*w+c*T+u*L+d*k,n[9]=h*M+c*E+u*P+d*U,n[13]=h*S+c*A+u*D+d*z,n[2]=f*_+p*C+m*F+g*R,n[6]=f*w+p*T+m*L+g*k,n[10]=f*M+p*E+m*P+g*U,n[14]=f*S+p*A+m*D+g*z,n[3]=v*_+y*C+x*F+b*R,n[7]=v*w+y*T+x*L+b*k,n[11]=v*M+y*E+x*P+b*U,n[15]=v*S+y*A+x*D+b*z,this},multiplyToArray:function(t,e,r){var i=this.elements;return this.multiplyMatrices(t,e),r[0]=i[0],r[1]=i[1],r[2]=i[2],r[3]=i[3],r[4]=i[4],r[5]=i[5],r[6]=i[6],r[7]=i[7],r[8]=i[8],r[9]=i[9],r[10]=i[10],r[11]=i[11],r[12]=i[12],r[13]=i[13],r[14]=i[14],r[15]=i[15],this},multiplyScalar:function(t){var e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this},multiplyVector3:function(t){return console.warn("THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) or vector.applyProjection( matrix ) instead."),t.applyProjection(this)},multiplyVector4:function(t){return console.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},multiplyVector3Array:function(t){return console.warn("THREE.Matrix4: .multiplyVector3Array() has been renamed. Use matrix.applyToVector3Array( array ) instead."),this.applyToVector3Array(t)},applyToVector3Array:function(){var t=new m.Vector3;return function(e,r,i){void 0===r&&(r=0),void 0===i&&(i=e.length);for(var n=0,a=r;n=0)if(n=d*p-f,a=d*f-p,s=c*g,n>=0)if(a>=-s)if(a<=s){var v=1/g;n*=v,a*=v,o=n*(n+d*a+2*f)+a*(d*n+a+2*p)+m}else a=c,n=Math.max(0,-(d*a+f)),o=-n*n+a*(a+2*p)+m;else a=-c,n=Math.max(0,-(d*a+f)),o=-n*n+a*(a+2*p)+m;else a<=-s?(n=Math.max(0,-(-d*c+f)),a=n>0?-c:Math.min(Math.max(-c,-p),c),o=-n*n+a*(a+2*p)+m):a<=s?(n=0,a=Math.min(Math.max(-c,-p),c),o=a*(a+2*p)+m):(n=Math.max(0,-(d*c+f)),a=n>0?c:Math.min(Math.max(-c,-p),c),o=-n*n+a*(a+2*p)+m);else a=d>0?-c:c,n=Math.max(0,-(d*a+f)),o=-n*n+a*(a+2*p)+m;return r&&r.copy(this.direction.clone().multiplyScalar(n).add(this.origin)),i&&i.copy(h.clone().multiplyScalar(a).add(l)),o},isIntersectionSphere:function(t){return this.distanceToPoint(t.center)<=t.radius},intersectSphere:function(){var t=new m.Vector3;return function(e,r){t.subVectors(e.center,this.origin);var i=t.dot(this.direction),n=t.dot(t)-i*i,a=e.radius*e.radius;if(n>a)return null;var o=Math.sqrt(a-n),s=i-o,l=i+o;return s<0&&l<0?null:s<0?this.at(l,r):this.at(s,r)}}(),isIntersectionPlane:function(t){var e=t.distanceToPoint(this.origin);return 0===e||t.normal.dot(this.direction)*e<0},distanceToPlane:function(t){var e=t.normal.dot(this.direction);if(0==e)return 0==t.distanceToPoint(this.origin)?0:null;var r=-(this.origin.dot(t.normal)+t.constant)/e;return r>=0?r:null},intersectPlane:function(t,e){var r=this.distanceToPlane(t);return null===r?null:this.at(r,e)},isIntersectionBox:function(){var t=new m.Vector3;return function(e){return null!==this.intersectBox(e,t)}}(),intersectBox:function(t,e){var r,i,n,a,o,s,l=1/this.direction.x,h=1/this.direction.y,c=1/this.direction.z,u=this.origin;return l>=0?(r=(t.min.x-u.x)*l,i=(t.max.x-u.x)*l):(r=(t.max.x-u.x)*l,i=(t.min.x-u.x)*l),h>=0?(n=(t.min.y-u.y)*h,a=(t.max.y-u.y)*h):(n=(t.max.y-u.y)*h,a=(t.min.y-u.y)*h),r>a||n>i?null:((n>r||r!==r)&&(r=n),(a=0?(o=(t.min.z-u.z)*c,s=(t.max.z-u.z)*c):(o=(t.max.z-u.z)*c,s=(t.min.z-u.z)*c),r>s||o>i?null:((o>r||r!==r)&&(r=o),(s=0?r:i,e)))},intersectTriangle:function(){var t=new m.Vector3,e=new m.Vector3,r=new m.Vector3,i=new m.Vector3;return function(n,a,o,s,l){e.subVectors(a,n),r.subVectors(o,n),i.crossVectors(e,r);var h,c=this.direction.dot(i);if(c>0){if(s)return null;h=1}else{if(!(c<0))return null;h=-1,c=-c}t.subVectors(this.origin,n);var u=h*this.direction.dot(r.crossVectors(t,r));if(u<0)return null;var d=h*this.direction.dot(e.cross(t));if(d<0)return null;if(u+d>c)return null;var f=-h*t.dot(i);return f<0?null:this.at(f/c,l)}}(),applyMatrix4:function(t){return this.direction.add(this.origin).applyMatrix4(t),this.origin.applyMatrix4(t),this.direction.sub(this.origin),this.direction.normalize(),this},equals:function(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)},clone:function(){return(new m.Ray).copy(this)}},m.Sphere=function(t,e){this.center=void 0!==t?t:new m.Vector3,this.radius=void 0!==e?e:0},m.Sphere.prototype={constructor:m.Sphere,set:function(t,e){return this.center.copy(t),this.radius=e,this},setFromPoints:function(){var t=new m.Box3;return function(e,r){var i=this.center;void 0!==r?i.copy(r):t.setFromPoints(e).center(i);for(var n=0,a=0,o=e.length;athis.radius*this.radius&&(i.sub(this.center).normalize(),i.multiplyScalar(this.radius).add(this.center)),i},getBoundingBox:function(t){var e=t||new m.Box3;return e.set(this.center,this.center),e.expandByScalar(this.radius),e},applyMatrix4:function(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this},translate:function(t){return this.center.add(t),this},equals:function(t){return t.center.equals(this.center)&&t.radius===this.radius},clone:function(){return(new m.Sphere).copy(this)}},m.Frustum=function(t,e,r,i,n,a){this.planes=[void 0!==t?t:new m.Plane,void 0!==e?e:new m.Plane,void 0!==r?r:new m.Plane,void 0!==i?i:new m.Plane,void 0!==n?n:new m.Plane,void 0!==a?a:new m.Plane]},m.Frustum.prototype={constructor:m.Frustum,set:function(t,e,r,i,n,a){var o=this.planes;return o[0].copy(t),o[1].copy(e),o[2].copy(r),o[3].copy(i),o[4].copy(n),o[5].copy(a),this},copy:function(t){for(var e=this.planes,r=0;r<6;r++)e[r].copy(t.planes[r]);return this},setFromMatrix:function(t){var e=this.planes,r=t.elements,i=r[0],n=r[1],a=r[2],o=r[3],s=r[4],l=r[5],h=r[6],c=r[7],u=r[8],d=r[9],f=r[10],p=r[11],m=r[12],g=r[13],v=r[14],y=r[15];return e[0].setComponents(o-i,c-s,p-u,y-m).normalize(),e[1].setComponents(o+i,c+s,p+u,y+m).normalize(),e[2].setComponents(o+n,c+l,p+d,y+g).normalize(),e[3].setComponents(o-n,c-l,p-d,y-g).normalize(),e[4].setComponents(o-a,c-h,p-f,y-v).normalize(),e[5].setComponents(o+a,c+h,p+f,y+v).normalize(),this},intersectsObject:function(){var t=new m.Sphere;return function(e){var r=e.geometry;return null===r.boundingSphere&&r.computeBoundingSphere(),t.copy(r.boundingSphere),t.applyMatrix4(e.matrixWorld),this.intersectsSphere(t)}}(),intersectsSphere:function(t){for(var e=this.planes,r=t.center,i=-t.radius,n=0;n<6;n++){if(e[n].distanceToPoint(r)0?r.min.x:r.max.x,e.x=a.normal.x>0?r.max.x:r.min.x,t.y=a.normal.y>0?r.min.y:r.max.y,e.y=a.normal.y>0?r.max.y:r.min.y,t.z=a.normal.z>0?r.min.z:r.max.z,e.z=a.normal.z>0?r.max.z:r.min.z;var o=a.distanceToPoint(t),s=a.distanceToPoint(e);if(o<0&&s<0)return!1}return!0}}(),containsPoint:function(t){for(var e=this.planes,r=0;r<6;r++)if(e[r].distanceToPoint(t)<0)return!1;return!0},clone:function(){return(new m.Frustum).copy(this)}},m.Plane=function(t,e){this.normal=void 0!==t?t:new m.Vector3(1,0,0),this.constant=void 0!==e?e:0},m.Plane.prototype={constructor:m.Plane,set:function(t,e){return this.normal.copy(t),this.constant=e,this},setComponents:function(t,e,r,i){return this.normal.set(t,e,r),this.constant=i,this},setFromNormalAndCoplanarPoint:function(t,e){return this.normal.copy(t),this.constant=-e.dot(this.normal),this},setFromCoplanarPoints:function(){var t=new m.Vector3,e=new m.Vector3;return function(r,i,n){var a=t.subVectors(n,i).cross(e.subVectors(r,i)).normalize();return this.setFromNormalAndCoplanarPoint(a,r),this}}(),copy:function(t){return this.normal.copy(t.normal),this.constant=t.constant,this},normalize:function(){var t=1/this.normal.length();return this.normal.multiplyScalar(t),this.constant*=t,this},negate:function(){return this.constant*=-1,this.normal.negate(),this},distanceToPoint:function(t){return this.normal.dot(t)+this.constant},distanceToSphere:function(t){return this.distanceToPoint(t.center)-t.radius},projectPoint:function(t,e){return this.orthoPoint(t,e).sub(t).negate()},orthoPoint:function(t,e){var r=this.distanceToPoint(t);return(e||new m.Vector3).copy(this.normal).multiplyScalar(r)},isIntersectionLine:function(t){var e=this.distanceToPoint(t.start),r=this.distanceToPoint(t.end);return e<0&&r>0||r<0&&e>0},intersectLine:function(){var t=new m.Vector3;return function(e,r){var i=r||new m.Vector3,n=e.delta(t),a=this.normal.dot(n);if(0!=a){var o=-(e.start.dot(this.normal)+this.constant)/a;if(!(o<0||o>1))return i.copy(n).multiplyScalar(o).add(e.start)}else if(0==this.distanceToPoint(e.start))return i.copy(e.start)}}(),coplanarPoint:function(t){return(t||new m.Vector3).copy(this.normal).multiplyScalar(-this.constant)},applyMatrix4:function(){var t=new m.Vector3,e=new m.Vector3,r=new m.Matrix3;return function(i,n){var a=n||r.getNormalMatrix(i),o=t.copy(this.normal).applyMatrix3(a),s=this.coplanarPoint(e);return s.applyMatrix4(i),this.setFromNormalAndCoplanarPoint(o,s),this}}(),translate:function(t){return this.constant=this.constant-t.dot(this.normal),this},equals:function(t){return t.normal.equals(this.normal)&&t.constant==this.constant},clone:function(){return(new m.Plane).copy(this)}},m.Math={generateUUID:function(){var t,e="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),r=new Array(36),i=0;return function(){for(var n=0;n<36;n++)8==n||13==n||18==n||23==n?r[n]="-":14==n?r[n]="4":(i<=2&&(i=33554432+16777216*Math.random()|0),t=15&i,i>>=4,r[n]=e[19==n?3&t|8:t]);return r.join("")}}(),clamp:function(t,e,r){return tr?r:t},clampBottom:function(t,e){return t=r?1:(t=(t-e)/(r-e))*t*(3-2*t)},smootherstep:function(t,e,r){return t<=e?0:t>=r?1:(t=(t-e)/(r-e))*t*t*(t*(6*t-15)+10)},random16:function(){return(65280*Math.random()+255*Math.random())/65535},randInt:function(t,e){return t+Math.floor(Math.random()*(e-t+1))},randFloat:function(t,e){return t+Math.random()*(e-t)},randFloatSpread:function(t){return t*(.5-Math.random())},degToRad:function(){var t=Math.PI/180;return function(e){return e*t}}(),radToDeg:function(){var t=180/Math.PI;return function(e){return e*t}}(),isPowerOfTwo:function(t){return 0==(t&t-1)&&0!==t}},m.Spline=function(t){function e(t,e,r,i,n,a,o){var s=.5*(r-t),l=.5*(i-e);return(2*(e-r)+s+l)*o+(-3*(e-r)-2*s-l)*a+s*n+e}this.points=t;var r,i,n,a,o,s,l,h,c,u=[],d={x:0,y:0,z:0};this.initFromArray=function(t){this.points=[];for(var e=0;ethis.points.length-2?this.points.length-1:i+1,u[3]=i>this.points.length-3?this.points.length-1:i+2,s=this.points[u[0]],l=this.points[u[1]],h=this.points[u[2]],c=this.points[u[3]],a=n*n,o=n*a,d.x=e(s.x,l.x,h.x,c.x,n,a,o),d.y=e(s.y,l.y,h.y,c.y,n,a,o),d.z=e(s.z,l.z,h.z,c.z,n,a,o),d},this.getControlPointsArray=function(){var t,e,r=this.points.length,i=[];for(t=0;t0?a.multiplyScalar(1/Math.sqrt(o)):a.set(0,0,0)}}(),m.Triangle.barycoordFromPoint=function(){var t=new m.Vector3,e=new m.Vector3,r=new m.Vector3;return function(i,n,a,o,s){t.subVectors(o,n),e.subVectors(a,n),r.subVectors(i,n);var l=t.dot(t),h=t.dot(e),c=t.dot(r),u=e.dot(e),d=e.dot(r),f=l*u-h*h,p=s||new m.Vector3;if(0==f)return p.set(-2,-1,-1);var g=1/f,v=(u*c-h*d)*g,y=(l*d-h*c)*g;return p.set(1-v-y,y,v)}}(),m.Triangle.containsPoint=function(){var t=new m.Vector3;return function(e,r,i,n){var a=m.Triangle.barycoordFromPoint(e,r,i,n,t);return a.x>=0&&a.y>=0&&a.x+a.y<=1}}(),m.Triangle.prototype={constructor:m.Triangle,set:function(t,e,r){return this.a.copy(t),this.b.copy(e),this.c.copy(r),this},setFromPointsAndIndices:function(t,e,r,i){return this.a.copy(t[e]),this.b.copy(t[r]),this.c.copy(t[i]),this},copy:function(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this},area:function(){var t=new m.Vector3,e=new m.Vector3;return function(){return t.subVectors(this.c,this.b),e.subVectors(this.a,this.b),.5*t.cross(e).length()}}(),midpoint:function(t){return(t||new m.Vector3).addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},normal:function(t){return m.Triangle.normal(this.a,this.b,this.c,t)},plane:function(t){return(t||new m.Plane).setFromCoplanarPoints(this.a,this.b,this.c)},barycoordFromPoint:function(t,e){return m.Triangle.barycoordFromPoint(t,this.a,this.b,this.c,e)},containsPoint:function(t){return m.Triangle.containsPoint(t,this.a,this.b,this.c)},equals:function(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)},clone:function(){return(new m.Triangle).copy(this)}},m.Clock=function(t){this.autoStart=void 0===t||t,this.startTime=0,this.oldTime=0,this.elapsedTime=0,this.running=!1},m.Clock.prototype={constructor:m.Clock,start:function(){this.startTime=void 0!==self.performance&&void 0!==self.performance.now?self.performance.now():Date.now(),this.oldTime=this.startTime,this.running=!0},stop:function(){this.getElapsedTime(),this.running=!1},getElapsedTime:function(){return this.getDelta(),this.elapsedTime},getDelta:function(){var t=0;if(this.autoStart&&!this.running&&this.start(),this.running){var e=void 0!==self.performance&&void 0!==self.performance.now?self.performance.now():Date.now();t=.001*(e-this.oldTime),this.oldTime=e,this.elapsedTime+=t}return t}},m.EventDispatcher=function(){},m.EventDispatcher.prototype={constructor:m.EventDispatcher,apply:function(t){t.addEventListener=m.EventDispatcher.prototype.addEventListener,t.hasEventListener=m.EventDispatcher.prototype.hasEventListener,t.removeEventListener=m.EventDispatcher.prototype.removeEventListener,t.dispatchEvent=m.EventDispatcher.prototype.dispatchEvent},addEventListener:function(t,e){void 0===this._listeners&&(this._listeners={});var r=this._listeners;void 0===r[t]&&(r[t]=[]),-1===r[t].indexOf(e)&&r[t].push(e)},hasEventListener:function(t,e){if(void 0===this._listeners)return!1;var r=this._listeners;return void 0!==r[t]&&-1!==r[t].indexOf(e)},removeEventListener:function(t,e){if(void 0!==this._listeners){var r=this._listeners,i=r[t];if(void 0!==i){var n=i.indexOf(e);-1!==n&&i.splice(n,1)}}},dispatchEvent:function(t){if(void 0!==this._listeners){var e=this._listeners,r=e[t.type];if(void 0!==r){t.target=this;for(var i=[],n=r.length,a=0;a1){for(var e=0;e1)for(var e=0;e0){i.children=[];for(var a=0;a0,s=3==i[0].vertexNormals.length,l=new Float32Array(3*i.length*3);this.addAttribute("position",new m.BufferAttribute(l,3));var h=new Float32Array(3*i.length*3);if(this.addAttribute("normal",new m.BufferAttribute(h,3)),a!==m.NoColors){var c=new Float32Array(3*i.length*3);this.addAttribute("color",new m.BufferAttribute(c,3))}if(!0===o){var u=new Float32Array(3*i.length*2);this.addAttribute("uv",new m.BufferAttribute(u,2))}for(var d=0,f=0,p=0;d0?this.offsets:[{start:0,count:f.length,index:0}],g=0,v=p.length;gh.index+e){var x={start:o,count:0,index:s};l.push(x),h=x;for(var b=0;b<6;b+=2){var _=d[b+1];_>-1&&_0&&(t.data.offsets=JSON.parse((0,l.default)(r))),null!==i&&(t.data.boundingSphere={center:i.center.toArray(),radius:i.radius}),t},clone:function(){var t=new m.BufferGeometry;for(var e in this.attributes){var r=this.attributes[e];t.addAttribute(e,r.clone())}for(var i=0,n=this.offsets.length;i0&&(t+=e[r].distanceTo(e[r-1])),this.lineDistances[r]=t},computeBoundingBox:function(){null===this.boundingBox&&(this.boundingBox=new m.Box3),this.boundingBox.setFromPoints(this.vertices)},computeBoundingSphere:function(){null===this.boundingSphere&&(this.boundingSphere=new m.Sphere),this.boundingSphere.setFromPoints(this.vertices)},merge:function(t,e,r){if(t instanceof m.Geometry==!1)return void console.error("THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.",t);var i,n=this.vertices.length,a=this.vertices,o=t.vertices,s=this.faces,l=t.faces,h=this.faceVertexUvs[0],c=t.faceVertexUvs[0];void 0===r&&(r=0),void 0!==e&&(i=(new m.Matrix3).getNormalMatrix(e));for(var u=0,d=o.length;u=0;r--){var p=d[r];for(this.faces.splice(p,1),o=0,s=this.faceVertexUvs.length;o0,b=v.vertexNormals.length>0,_=1!==v.color.r||1!==v.color.g||1!==v.color.b,w=v.vertexColors.length>0,M=0;if(M=t(M,0,0),M=t(M,1,!1),M=t(M,2,!1),M=t(M,3,y),M=t(M,4,x),M=t(M,5,b),M=t(M,6,_),M=t(M,7,w),c.push(M),c.push(v.a,v.b,v.c),y){var S=this.faceVertexUvs[0][l];c.push(i(S[0]),i(S[1]),i(S[2]))}if(x&&c.push(e(v.normal)),b){var C=v.vertexNormals;c.push(e(C[0]),e(C[1]),e(C[2]))}if(_&&c.push(r(v.color)),w){var T=v.vertexColors;c.push(r(T[0]),r(T[1]),r(T[2]))}}return n.data={},n.data.vertices=s,n.data.normals=u,f.length>0&&(n.data.colors=f),m.length>0&&(n.data.uvs=[m]),n.data.faces=c,n},clone:function(){for(var t=new m.Geometry,e=this.vertices,r=0,i=e.length;r1?t.skinWeights[i+1]:0,s=e>2?t.skinWeights[i+2]:0,l=e>3?t.skinWeights[i+3]:0;r.skinWeights.push(new m.Vector4(a,o,s,l))}if(t.skinIndices)for(var i=0,n=t.skinIndices.length;i1?t.skinIndices[i+1]:0,u=e>2?t.skinIndices[i+2]:0,d=e>3?t.skinIndices[i+3]:0;r.skinIndices.push(new m.Vector4(h,c,u,d))}r.bones=t.bones,r.bones&&r.bones.length>0&&(r.skinWeights.length!==r.skinIndices.length||r.skinIndices.length!==r.vertices.length)&&console.warn("When skinning, number of vertices ("+r.vertices.length+"), skinIndices ("+r.skinIndices.length+"), and skinWeights ("+r.skinWeights.length+") should match."),r.animation=t.animation,r.animations=t.animations}(),function(e){if(void 0!==t.morphTargets){var i,n,a,o,s,l;for(i=0,n=t.morphTargets.length;io)){var g=e.origin.distanceTo(u);gi.far||n.push({distance:g,point:c.clone().applyMatrix4(this.matrixWorld),face:null,faceIndex:null,object:this})}}}}(),m.Line.prototype.clone=function(t){return void 0===t&&(t=new m.Line(this.geometry,this.material,this.mode)),m.Object3D.prototype.clone.call(this,t),t},m.Mesh=function(t,e){m.Object3D.call(this),this.type="Mesh",this.geometry=void 0!==t?t:new m.Geometry,this.material=void 0!==e?e:new m.MeshBasicMaterial({color:16777215*Math.random()}),this.updateMorphTargets()},m.Mesh.prototype=(0,n.default)(m.Object3D.prototype),m.Mesh.prototype.updateMorphTargets=function(){if(void 0!==this.geometry.morphTargets&&this.geometry.morphTargets.length>0){this.morphTargetBase=-1,this.morphTargetForcedOrder=[],this.morphTargetInfluences=[],this.morphTargetDictionary={};for(var t=0,e=this.geometry.morphTargets.length;to.far||s.push({distance:E,point:T,face:new m.Face3(c,u,d,m.Triangle.normal(i,n,a)),faceIndex:null,object:this})}}}else for(var v=f.position.array,S=0,A=0,C=v.length;So.far||s.push({distance:E,point:T,face:new m.Face3(c,u,d,m.Triangle.normal(i,n,a)),faceIndex:null,object:this})}}}else if(l instanceof m.Geometry)for(var c,u,d,F=this.material instanceof m.MeshFaceMaterial,L=!0===F?this.material.materials:null,p=o.precision,P=l.vertices,D=0,R=l.faces.length;Do.far||s.push({distance:E,point:T,face:k,faceIndex:D,object:this})}}}}}(),m.Mesh.prototype.clone=function(t,e){return void 0===t&&(t=new m.Mesh(this.geometry,this.material)),m.Object3D.prototype.clone.call(this,t,e),t},m.Bone=function(t){m.Object3D.call(this),this.skin=t},m.Bone.prototype=(0,n.default)(m.Object3D.prototype),m.Skeleton=function(t,e,r){if(this.useVertexTexture=void 0===r||r,this.identityMatrix=new m.Matrix4,t=t||[],this.bones=t.slice(0),this.useVertexTexture){var i;i=this.bones.length>256?64:this.bones.length>64?32:this.bones.length>16?16:8,this.boneTextureWidth=i,this.boneTextureHeight=i,this.boneMatrices=new Float32Array(this.boneTextureWidth*this.boneTextureHeight*4),this.boneTexture=new m.DataTexture(this.boneMatrices,this.boneTextureWidth,this.boneTextureHeight,m.RGBAFormat,m.FloatType),this.boneTexture.minFilter=m.NearestFilter,this.boneTexture.magFilter=m.NearestFilter,this.boneTexture.generateMipmaps=!1,this.boneTexture.flipY=!1}else this.boneMatrices=new Float32Array(16*this.bones.length);if(void 0===e)this.calculateInverses();else if(this.bones.length===e.length)this.boneInverses=e.slice(0);else{console.warn("THREE.Skeleton bonInverses is the wrong length."),this.boneInverses=[];for(var n=0,a=this.bones.length;n1){var l=s[1];s[2];r[l]||(r[l]={start:1/0,end:-1/0});var h=r[l];nh.end&&(h.end=n),e||(e=l)}}t.firstAnimation=e},m.MorphAnimMesh.prototype.setAnimationLabel=function(t,e,r){this.geometry.animations||(this.geometry.animations={}),this.geometry.animations[t]={start:e,end:r}},m.MorphAnimMesh.prototype.playAnimation=function(t,e){var r=this.geometry.animations[t];r?(this.setFrameRange(r.start,r.end),this.duration=(r.end-r.start)/e*1e3,this.time=0):console.warn("animation["+t+"] undefined")},m.MorphAnimMesh.prototype.updateAnimation=function(t){var e=this.duration/this.length;this.time+=this.direction*t,this.mirroredLoop?(this.time>this.duration||this.time<0)&&(this.direction*=-1,this.time>this.duration&&(this.time=this.duration,this.directionBackwards=!0),this.time<0&&(this.time=0,this.directionBackwards=!1)):(this.time=this.time%this.duration,this.time<0&&(this.time+=this.duration));var r=this.startKeyframe+m.Math.clamp(Math.floor(this.time/e),0,this.length-1);r!==this.currentKeyframe&&(this.morphTargetInfluences[this.lastKeyframe]=0,this.morphTargetInfluences[this.currentKeyframe]=1,this.morphTargetInfluences[r]=0,this.lastKeyframe=this.currentKeyframe,this.currentKeyframe=r);var i=this.time%e/e;this.directionBackwards&&(i=1-i),this.morphTargetInfluences[this.currentKeyframe]=i,this.morphTargetInfluences[this.lastKeyframe]=1-i},m.MorphAnimMesh.prototype.interpolateTargets=function(t,e,r){for(var i=this.morphTargetInfluences,n=0,a=i.length;n-1&&(i[t]=1-r),e>-1&&(i[e]=r)},m.MorphAnimMesh.prototype.clone=function(t){return void 0===t&&(t=new m.MorphAnimMesh(this.geometry,this.material)),t.duration=this.duration,t.mirroredLoop=this.mirroredLoop,t.time=this.time,t.lastKeyframe=this.lastKeyframe,t.currentKeyframe=this.currentKeyframe,t.direction=this.direction,t.directionBackwards=this.directionBackwards,m.Mesh.prototype.clone.call(this,t),t},m.LOD=function(){m.Object3D.call(this),this.objects=[]},m.LOD.prototype=(0,n.default)(m.Object3D.prototype),m.LOD.prototype.addLevel=function(t,e){void 0===e&&(e=0),e=Math.abs(e);for(var r=0;r1){t.setFromMatrixPosition(r.matrixWorld),e.setFromMatrixPosition(this.matrixWorld);var i=t.distanceTo(e);this.objects[0].object.visible=!0;for(var n=1,a=this.objects.length;n=this.objects[n].distance;n++)this.objects[n-1].object.visible=!1,this.objects[n].object.visible=!0;for(;nthis.scale.x||r.push({distance:i,point:this.position,face:null,object:this})}}(),m.Sprite.prototype.clone=function(t){return void 0===t&&(t=new m.Sprite(this.material)),m.Object3D.prototype.clone.call(this,t),t},m.Particle=m.Sprite,m.LensFlare=function(t,e,r,i,n){m.Object3D.call(this),this.lensFlares=[],this.positionScreen=new m.Vector3,this.customUpdateCallback=void 0,void 0!==t&&this.add(t,e,r,i,n)},m.LensFlare.prototype=(0,n.default)(m.Object3D.prototype),m.LensFlare.prototype.add=function(t,e,r,i,n,a){void 0===e&&(e=-1),void 0===r&&(r=0),void 0===a&&(a=1),void 0===n&&(n=new m.Color(16777215)),void 0===i&&(i=m.NormalBlending),r=Math.min(r,Math.max(0,r)),this.lensFlares.push({texture:t,size:e,distance:r,x:0,y:0,z:0,scale:1,rotation:1,opacity:a,color:n,blending:i})},m.LensFlare.prototype.updateLensFlares=function(){var t,e,r=this.lensFlares.length,i=2*-this.positionScreen.x,n=2*-this.positionScreen.y;for(t=0;t dashSize ) {","\t\tdiscard;","\t}","\tgl_FragColor = vec4( diffuse, opacity );",m.ShaderChunk.logdepthbuf_fragment,m.ShaderChunk.color_fragment,m.ShaderChunk.fog_fragment,"}"].join("\n")},depth:{uniforms:{mNear:{type:"f",value:1},mFar:{type:"f",value:2e3},opacity:{type:"f",value:1}},vertexShader:[m.ShaderChunk.morphtarget_pars_vertex,m.ShaderChunk.logdepthbuf_pars_vertex,"void main() {",m.ShaderChunk.morphtarget_vertex,m.ShaderChunk.default_vertex,m.ShaderChunk.logdepthbuf_vertex,"}"].join("\n"),fragmentShader:["uniform float mNear;","uniform float mFar;","uniform float opacity;",m.ShaderChunk.logdepthbuf_pars_fragment,"void main() {",m.ShaderChunk.logdepthbuf_fragment,"\t#ifdef USE_LOGDEPTHBUF_EXT","\t\tfloat depth = gl_FragDepthEXT / gl_FragCoord.w;","\t#else","\t\tfloat depth = gl_FragCoord.z / gl_FragCoord.w;","\t#endif","\tfloat color = 1.0 - smoothstep( mNear, mFar, depth );","\tgl_FragColor = vec4( vec3( color ), opacity );","}"].join("\n")},normal:{uniforms:{opacity:{type:"f",value:1}},vertexShader:["varying vec3 vNormal;",m.ShaderChunk.morphtarget_pars_vertex,m.ShaderChunk.logdepthbuf_pars_vertex,"void main() {","\tvNormal = normalize( normalMatrix * normal );",m.ShaderChunk.morphtarget_vertex,m.ShaderChunk.default_vertex,m.ShaderChunk.logdepthbuf_vertex,"}"].join("\n"),fragmentShader:["uniform float opacity;","varying vec3 vNormal;",m.ShaderChunk.logdepthbuf_pars_fragment,"void main() {","\tgl_FragColor = vec4( 0.5 * normalize( vNormal ) + 0.5, opacity );",m.ShaderChunk.logdepthbuf_fragment,"}"].join("\n")},normalmap:{uniforms:m.UniformsUtils.merge([m.UniformsLib.fog,m.UniformsLib.lights,m.UniformsLib.shadowmap,{enableAO:{type:"i",value:0},enableDiffuse:{type:"i",value:0},enableSpecular:{type:"i",value:0},enableReflection:{type:"i",value:0},enableDisplacement:{type:"i",value:0},tDisplacement:{type:"t",value:null},tDiffuse:{type:"t",value:null},tCube:{type:"t",value:null},tNormal:{type:"t",value:null},tSpecular:{type:"t",value:null},tAO:{type:"t",value:null},uNormalScale:{type:"v2",value:new m.Vector2(1,1)},uDisplacementBias:{type:"f",value:0},uDisplacementScale:{type:"f",value:1},diffuse:{type:"c",value:new m.Color(16777215)},specular:{type:"c",value:new m.Color(1118481)},ambient:{type:"c",value:new m.Color(16777215)},shininess:{type:"f",value:30},opacity:{type:"f",value:1},useRefract:{type:"i",value:0},refractionRatio:{type:"f",value:.98},reflectivity:{type:"f",value:.5},uOffset:{type:"v2",value:new m.Vector2(0,0)},uRepeat:{type:"v2",value:new m.Vector2(1,1)},wrapRGB:{type:"v3",value:new m.Vector3(1,1,1)}}]),fragmentShader:["uniform vec3 ambient;","uniform vec3 diffuse;","uniform vec3 specular;","uniform float shininess;","uniform float opacity;","uniform bool enableDiffuse;","uniform bool enableSpecular;","uniform bool enableAO;","uniform bool enableReflection;","uniform sampler2D tDiffuse;","uniform sampler2D tNormal;","uniform sampler2D tSpecular;","uniform sampler2D tAO;","uniform samplerCube tCube;","uniform vec2 uNormalScale;","uniform bool useRefract;","uniform float refractionRatio;","uniform float reflectivity;","varying vec3 vTangent;","varying vec3 vBinormal;","varying vec3 vNormal;","varying vec2 vUv;","uniform vec3 ambientLightColor;","#if MAX_DIR_LIGHTS > 0","\tuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];","\tuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];","#endif","#if MAX_HEMI_LIGHTS > 0","\tuniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];","\tuniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];","\tuniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];","#endif","#if MAX_POINT_LIGHTS > 0","\tuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];","\tuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];","\tuniform float pointLightDistance[ MAX_POINT_LIGHTS ];","#endif","#if MAX_SPOT_LIGHTS > 0","\tuniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];","\tuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];","\tuniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];","\tuniform float spotLightAngleCos[ MAX_SPOT_LIGHTS ];","\tuniform float spotLightExponent[ MAX_SPOT_LIGHTS ];","\tuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];","#endif","#ifdef WRAP_AROUND","\tuniform vec3 wrapRGB;","#endif","varying vec3 vWorldPosition;","varying vec3 vViewPosition;",m.ShaderChunk.shadowmap_pars_fragment,m.ShaderChunk.fog_pars_fragment,m.ShaderChunk.logdepthbuf_pars_fragment,"void main() {",m.ShaderChunk.logdepthbuf_fragment,"\tgl_FragColor = vec4( vec3( 1.0 ), opacity );","\tvec3 specularTex = vec3( 1.0 );","\tvec3 normalTex = texture2D( tNormal, vUv ).xyz * 2.0 - 1.0;","\tnormalTex.xy *= uNormalScale;","\tnormalTex = normalize( normalTex );","\tif( enableDiffuse ) {","\t\t#ifdef GAMMA_INPUT","\t\t\tvec4 texelColor = texture2D( tDiffuse, vUv );","\t\t\ttexelColor.xyz *= texelColor.xyz;","\t\t\tgl_FragColor = gl_FragColor * texelColor;","\t\t#else","\t\t\tgl_FragColor = gl_FragColor * texture2D( tDiffuse, vUv );","\t\t#endif","\t}","\tif( enableAO ) {","\t\t#ifdef GAMMA_INPUT","\t\t\tvec4 aoColor = texture2D( tAO, vUv );","\t\t\taoColor.xyz *= aoColor.xyz;","\t\t\tgl_FragColor.xyz = gl_FragColor.xyz * aoColor.xyz;","\t\t#else","\t\t\tgl_FragColor.xyz = gl_FragColor.xyz * texture2D( tAO, vUv ).xyz;","\t\t#endif","\t}",m.ShaderChunk.alphatest_fragment,"\tif( enableSpecular )","\t\tspecularTex = texture2D( tSpecular, vUv ).xyz;","\tmat3 tsb = mat3( normalize( vTangent ), normalize( vBinormal ), normalize( vNormal ) );","\tvec3 finalNormal = tsb * normalTex;","\t#ifdef FLIP_SIDED","\t\tfinalNormal = -finalNormal;","\t#endif","\tvec3 normal = normalize( finalNormal );","\tvec3 viewPosition = normalize( vViewPosition );","\t#if MAX_POINT_LIGHTS > 0","\t\tvec3 pointDiffuse = vec3( 0.0 );","\t\tvec3 pointSpecular = vec3( 0.0 );","\t\tfor ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {","\t\t\tvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );","\t\t\tvec3 pointVector = lPosition.xyz + vViewPosition.xyz;","\t\t\tfloat pointDistance = 1.0;","\t\t\tif ( pointLightDistance[ i ] > 0.0 )","\t\t\t\tpointDistance = 1.0 - min( ( length( pointVector ) / pointLightDistance[ i ] ), 1.0 );","\t\t\tpointVector = normalize( pointVector );","\t\t\t#ifdef WRAP_AROUND","\t\t\t\tfloat pointDiffuseWeightFull = max( dot( normal, pointVector ), 0.0 );","\t\t\t\tfloat pointDiffuseWeightHalf = max( 0.5 * dot( normal, pointVector ) + 0.5, 0.0 );","\t\t\t\tvec3 pointDiffuseWeight = mix( vec3( pointDiffuseWeightFull ), vec3( pointDiffuseWeightHalf ), wrapRGB );","\t\t\t#else","\t\t\t\tfloat pointDiffuseWeight = max( dot( normal, pointVector ), 0.0 );","\t\t\t#endif","\t\t\tpointDiffuse += pointDistance * pointLightColor[ i ] * diffuse * pointDiffuseWeight;","\t\t\tvec3 pointHalfVector = normalize( pointVector + viewPosition );","\t\t\tfloat pointDotNormalHalf = max( dot( normal, pointHalfVector ), 0.0 );","\t\t\tfloat pointSpecularWeight = specularTex.r * max( pow( pointDotNormalHalf, shininess ), 0.0 );","\t\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;","\t\t\tvec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( pointVector, pointHalfVector ), 0.0 ), 5.0 );","\t\t\tpointSpecular += schlick * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * pointDistance * specularNormalization;","\t\t}","\t#endif","\t#if MAX_SPOT_LIGHTS > 0","\t\tvec3 spotDiffuse = vec3( 0.0 );","\t\tvec3 spotSpecular = vec3( 0.0 );","\t\tfor ( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {","\t\t\tvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );","\t\t\tvec3 spotVector = lPosition.xyz + vViewPosition.xyz;","\t\t\tfloat spotDistance = 1.0;","\t\t\tif ( spotLightDistance[ i ] > 0.0 )","\t\t\t\tspotDistance = 1.0 - min( ( length( spotVector ) / spotLightDistance[ i ] ), 1.0 );","\t\t\tspotVector = normalize( spotVector );","\t\t\tfloat spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - vWorldPosition ) );","\t\t\tif ( spotEffect > spotLightAngleCos[ i ] ) {","\t\t\t\tspotEffect = max( pow( max( spotEffect, 0.0 ), spotLightExponent[ i ] ), 0.0 );","\t\t\t\t#ifdef WRAP_AROUND","\t\t\t\t\tfloat spotDiffuseWeightFull = max( dot( normal, spotVector ), 0.0 );","\t\t\t\t\tfloat spotDiffuseWeightHalf = max( 0.5 * dot( normal, spotVector ) + 0.5, 0.0 );","\t\t\t\t\tvec3 spotDiffuseWeight = mix( vec3( spotDiffuseWeightFull ), vec3( spotDiffuseWeightHalf ), wrapRGB );","\t\t\t\t#else","\t\t\t\t\tfloat spotDiffuseWeight = max( dot( normal, spotVector ), 0.0 );","\t\t\t\t#endif","\t\t\t\tspotDiffuse += spotDistance * spotLightColor[ i ] * diffuse * spotDiffuseWeight * spotEffect;","\t\t\t\tvec3 spotHalfVector = normalize( spotVector + viewPosition );","\t\t\t\tfloat spotDotNormalHalf = max( dot( normal, spotHalfVector ), 0.0 );","\t\t\t\tfloat spotSpecularWeight = specularTex.r * max( pow( spotDotNormalHalf, shininess ), 0.0 );","\t\t\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;","\t\t\t\tvec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( spotVector, spotHalfVector ), 0.0 ), 5.0 );","\t\t\t\tspotSpecular += schlick * spotLightColor[ i ] * spotSpecularWeight * spotDiffuseWeight * spotDistance * specularNormalization * spotEffect;","\t\t\t}","\t\t}","\t#endif","\t#if MAX_DIR_LIGHTS > 0","\t\tvec3 dirDiffuse = vec3( 0.0 );","\t\tvec3 dirSpecular = vec3( 0.0 );","\t\tfor( int i = 0; i < MAX_DIR_LIGHTS; i++ ) {","\t\t\tvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );","\t\t\tvec3 dirVector = normalize( lDirection.xyz );","\t\t\t#ifdef WRAP_AROUND","\t\t\t\tfloat directionalLightWeightingFull = max( dot( normal, dirVector ), 0.0 );","\t\t\t\tfloat directionalLightWeightingHalf = max( 0.5 * dot( normal, dirVector ) + 0.5, 0.0 );","\t\t\t\tvec3 dirDiffuseWeight = mix( vec3( directionalLightWeightingFull ), vec3( directionalLightWeightingHalf ), wrapRGB );","\t\t\t#else","\t\t\t\tfloat dirDiffuseWeight = max( dot( normal, dirVector ), 0.0 );","\t\t\t#endif","\t\t\tdirDiffuse += directionalLightColor[ i ] * diffuse * dirDiffuseWeight;","\t\t\tvec3 dirHalfVector = normalize( dirVector + viewPosition );","\t\t\tfloat dirDotNormalHalf = max( dot( normal, dirHalfVector ), 0.0 );","\t\t\tfloat dirSpecularWeight = specularTex.r * max( pow( dirDotNormalHalf, shininess ), 0.0 );","\t\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;","\t\t\tvec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( dirVector, dirHalfVector ), 0.0 ), 5.0 );","\t\t\tdirSpecular += schlick * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight * specularNormalization;","\t\t}","\t#endif","\t#if MAX_HEMI_LIGHTS > 0","\t\tvec3 hemiDiffuse = vec3( 0.0 );","\t\tvec3 hemiSpecular = vec3( 0.0 );","\t\tfor( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {","\t\t\tvec4 lDirection = viewMatrix * vec4( hemisphereLightDirection[ i ], 0.0 );","\t\t\tvec3 lVector = normalize( lDirection.xyz );","\t\t\tfloat dotProduct = dot( normal, lVector );","\t\t\tfloat hemiDiffuseWeight = 0.5 * dotProduct + 0.5;","\t\t\tvec3 hemiColor = mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );","\t\t\themiDiffuse += diffuse * hemiColor;","\t\t\tvec3 hemiHalfVectorSky = normalize( lVector + viewPosition );","\t\t\tfloat hemiDotNormalHalfSky = 0.5 * dot( normal, hemiHalfVectorSky ) + 0.5;","\t\t\tfloat hemiSpecularWeightSky = specularTex.r * max( pow( max( hemiDotNormalHalfSky, 0.0 ), shininess ), 0.0 );","\t\t\tvec3 lVectorGround = -lVector;","\t\t\tvec3 hemiHalfVectorGround = normalize( lVectorGround + viewPosition );","\t\t\tfloat hemiDotNormalHalfGround = 0.5 * dot( normal, hemiHalfVectorGround ) + 0.5;","\t\t\tfloat hemiSpecularWeightGround = specularTex.r * max( pow( max( hemiDotNormalHalfGround, 0.0 ), shininess ), 0.0 );","\t\t\tfloat dotProductGround = dot( normal, lVectorGround );","\t\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;","\t\t\tvec3 schlickSky = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVector, hemiHalfVectorSky ), 0.0 ), 5.0 );","\t\t\tvec3 schlickGround = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVectorGround, hemiHalfVectorGround ), 0.0 ), 5.0 );","\t\t\themiSpecular += hemiColor * specularNormalization * ( schlickSky * hemiSpecularWeightSky * max( dotProduct, 0.0 ) + schlickGround * hemiSpecularWeightGround * max( dotProductGround, 0.0 ) );","\t\t}","\t#endif","\tvec3 totalDiffuse = vec3( 0.0 );","\tvec3 totalSpecular = vec3( 0.0 );","\t#if MAX_DIR_LIGHTS > 0","\t\ttotalDiffuse += dirDiffuse;","\t\ttotalSpecular += dirSpecular;","\t#endif","\t#if MAX_HEMI_LIGHTS > 0","\t\ttotalDiffuse += hemiDiffuse;","\t\ttotalSpecular += hemiSpecular;","\t#endif","\t#if MAX_POINT_LIGHTS > 0","\t\ttotalDiffuse += pointDiffuse;","\t\ttotalSpecular += pointSpecular;","\t#endif","\t#if MAX_SPOT_LIGHTS > 0","\t\ttotalDiffuse += spotDiffuse;","\t\ttotalSpecular += spotSpecular;","\t#endif","\t#ifdef METAL","\t\tgl_FragColor.xyz = gl_FragColor.xyz * ( totalDiffuse + ambientLightColor * ambient + totalSpecular );","\t#else","\t\tgl_FragColor.xyz = gl_FragColor.xyz * ( totalDiffuse + ambientLightColor * ambient ) + totalSpecular;","\t#endif","\tif ( enableReflection ) {","\t\tvec3 vReflect;","\t\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );","\t\tif ( useRefract ) {","\t\t\tvReflect = refract( cameraToVertex, normal, refractionRatio );","\t\t} else {","\t\t\tvReflect = reflect( cameraToVertex, normal );","\t\t}","\t\tvec4 cubeColor = textureCube( tCube, vec3( -vReflect.x, vReflect.yz ) );","\t\t#ifdef GAMMA_INPUT","\t\t\tcubeColor.xyz *= cubeColor.xyz;","\t\t#endif","\t\tgl_FragColor.xyz = mix( gl_FragColor.xyz, cubeColor.xyz, specularTex.r * reflectivity );","\t}",m.ShaderChunk.shadowmap_fragment,m.ShaderChunk.linear_to_gamma_fragment,m.ShaderChunk.fog_fragment,"}"].join("\n"),vertexShader:["attribute vec4 tangent;","uniform vec2 uOffset;","uniform vec2 uRepeat;","uniform bool enableDisplacement;","#ifdef VERTEX_TEXTURES","\tuniform sampler2D tDisplacement;","\tuniform float uDisplacementScale;","\tuniform float uDisplacementBias;","#endif","varying vec3 vTangent;","varying vec3 vBinormal;","varying vec3 vNormal;","varying vec2 vUv;","varying vec3 vWorldPosition;","varying vec3 vViewPosition;",m.ShaderChunk.skinning_pars_vertex,m.ShaderChunk.shadowmap_pars_vertex,m.ShaderChunk.logdepthbuf_pars_vertex,"void main() {",m.ShaderChunk.skinbase_vertex,m.ShaderChunk.skinnormal_vertex,"\t#ifdef USE_SKINNING","\t\tvNormal = normalize( normalMatrix * skinnedNormal.xyz );","\t\tvec4 skinnedTangent = skinMatrix * vec4( tangent.xyz, 0.0 );","\t\tvTangent = normalize( normalMatrix * skinnedTangent.xyz );","\t#else","\t\tvNormal = normalize( normalMatrix * normal );","\t\tvTangent = normalize( normalMatrix * tangent.xyz );","\t#endif","\tvBinormal = normalize( cross( vNormal, vTangent ) * tangent.w );","\tvUv = uv * uRepeat + uOffset;","\tvec3 displacedPosition;","\t#ifdef VERTEX_TEXTURES","\t\tif ( enableDisplacement ) {","\t\t\tvec3 dv = texture2D( tDisplacement, uv ).xyz;","\t\t\tfloat df = uDisplacementScale * dv.x + uDisplacementBias;","\t\t\tdisplacedPosition = position + normalize( normal ) * df;","\t\t} else {","\t\t\t#ifdef USE_SKINNING","\t\t\t\tvec4 skinVertex = bindMatrix * vec4( position, 1.0 );","\t\t\t\tvec4 skinned = vec4( 0.0 );","\t\t\t\tskinned += boneMatX * skinVertex * skinWeight.x;","\t\t\t\tskinned += boneMatY * skinVertex * skinWeight.y;","\t\t\t\tskinned += boneMatZ * skinVertex * skinWeight.z;","\t\t\t\tskinned += boneMatW * skinVertex * skinWeight.w;","\t\t\t\tskinned = bindMatrixInverse * skinned;","\t\t\t\tdisplacedPosition = skinned.xyz;","\t\t\t#else","\t\t\t\tdisplacedPosition = position;","\t\t\t#endif","\t\t}","\t#else","\t\t#ifdef USE_SKINNING","\t\t\tvec4 skinVertex = bindMatrix * vec4( position, 1.0 );","\t\t\tvec4 skinned = vec4( 0.0 );","\t\t\tskinned += boneMatX * skinVertex * skinWeight.x;","\t\t\tskinned += boneMatY * skinVertex * skinWeight.y;","\t\t\tskinned += boneMatZ * skinVertex * skinWeight.z;","\t\t\tskinned += boneMatW * skinVertex * skinWeight.w;","\t\t\tskinned = bindMatrixInverse * skinned;","\t\t\tdisplacedPosition = skinned.xyz;","\t\t#else","\t\t\tdisplacedPosition = position;","\t\t#endif","\t#endif","\tvec4 mvPosition = modelViewMatrix * vec4( displacedPosition, 1.0 );","\tvec4 worldPosition = modelMatrix * vec4( displacedPosition, 1.0 );","\tgl_Position = projectionMatrix * mvPosition;",m.ShaderChunk.logdepthbuf_vertex,"\tvWorldPosition = worldPosition.xyz;","\tvViewPosition = -mvPosition.xyz;","\t#ifdef USE_SHADOWMAP","\t\tfor( int i = 0; i < MAX_SHADOWS; i ++ ) {","\t\t\tvShadowCoord[ i ] = shadowMatrix[ i ] * worldPosition;","\t\t}","\t#endif","}"].join("\n")},cube:{uniforms:{tCube:{type:"t",value:null},tFlip:{type:"f",value:-1}},vertexShader:["varying vec3 vWorldPosition;",m.ShaderChunk.logdepthbuf_pars_vertex,"void main() {","\tvec4 worldPosition = modelMatrix * vec4( position, 1.0 );","\tvWorldPosition = worldPosition.xyz;","\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",m.ShaderChunk.logdepthbuf_vertex,"}"].join("\n"),fragmentShader:["uniform samplerCube tCube;","uniform float tFlip;","varying vec3 vWorldPosition;",m.ShaderChunk.logdepthbuf_pars_fragment,"void main() {","\tgl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );",m.ShaderChunk.logdepthbuf_fragment,"}"].join("\n")},depthRGBA:{uniforms:{},vertexShader:[m.ShaderChunk.morphtarget_pars_vertex,m.ShaderChunk.skinning_pars_vertex,m.ShaderChunk.logdepthbuf_pars_vertex,"void main() {",m.ShaderChunk.skinbase_vertex,m.ShaderChunk.morphtarget_vertex,m.ShaderChunk.skinning_vertex,m.ShaderChunk.default_vertex,m.ShaderChunk.logdepthbuf_vertex,"}"].join("\n"),fragmentShader:[m.ShaderChunk.logdepthbuf_pars_fragment,"vec4 pack_depth( const in float depth ) {","\tconst vec4 bit_shift = vec4( 256.0 * 256.0 * 256.0, 256.0 * 256.0, 256.0, 1.0 );","\tconst vec4 bit_mask = vec4( 0.0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0 );","\tvec4 res = mod( depth * bit_shift * vec4( 255 ), vec4( 256 ) ) / vec4( 255 );","\tres -= res.xxyz * bit_mask;","\treturn res;","}","void main() {",m.ShaderChunk.logdepthbuf_fragment,"\t#ifdef USE_LOGDEPTHBUF_EXT","\t\tgl_FragData[ 0 ] = pack_depth( gl_FragDepthEXT );","\t#else","\t\tgl_FragData[ 0 ] = pack_depth( gl_FragCoord.z );","\t#endif","}"].join("\n")}},m.WebGLRenderer=function(t){function e(t){t.__webglVertexBuffer=zt.createBuffer(),t.__webglColorBuffer=zt.createBuffer(),Vt.info.memory.geometries++}function r(t){t.__webglVertexBuffer=zt.createBuffer(),t.__webglColorBuffer=zt.createBuffer(),t.__webglLineDistanceBuffer=zt.createBuffer(),Vt.info.memory.geometries++}function i(t){t.__webglVertexBuffer=zt.createBuffer(),t.__webglNormalBuffer=zt.createBuffer(),t.__webglTangentBuffer=zt.createBuffer(),t.__webglColorBuffer=zt.createBuffer(),t.__webglUVBuffer=zt.createBuffer(),t.__webglUV2Buffer=zt.createBuffer(),t.__webglSkinIndicesBuffer=zt.createBuffer(),t.__webglSkinWeightsBuffer=zt.createBuffer(),t.__webglFaceBuffer=zt.createBuffer(),t.__webglLineBuffer=zt.createBuffer();var e,r;if(t.numMorphTargets)for(t.__webglMorphTargetsBuffers=[],e=0,r=t.numMorphTargets;e1&&(t.__uv2Array=new Float32Array(2*n)),r.hasTangents&&(t.__tangentArray=new Float32Array(4*n)),e.geometry.skinWeights.length&&e.geometry.skinIndices.length&&(t.__skinIndexArray=new Float32Array(4*n),t.__skinWeightArray=new Float32Array(4*n));var h=null!==xe.get("OES_element_index_uint")&&a>21845?Uint32Array:Uint16Array;t.__typeArray=h,t.__faceArray=new h(3*a),t.__lineArray=new h(2*o);var c,u;if(t.numMorphTargets)for(t.__morphTargetsArrays=[],c=0,u=t.numMorphTargets;c0&&(zt.bindBuffer(zt.ARRAY_BUFFER,t.__webglSkinIndicesBuffer),zt.bufferData(zt.ARRAY_BUFFER,pt,r),zt.bindBuffer(zt.ARRAY_BUFFER,t.__webglSkinWeightsBuffer),zt.bufferData(zt.ARRAY_BUFFER,mt,r))}if(Et){for(a=0,o=Lt.length;a0&&(zt.bindBuffer(zt.ARRAY_BUFFER,t.__webglColorBuffer),zt.bufferData(zt.ARRAY_BUFFER,ft,r))}if(Tt&&_t.hasTangents){for(a=0,o=Lt.length;a0&&(zt.bindBuffer(zt.ARRAY_BUFFER,t.__webglUVBuffer),zt.bufferData(zt.ARRAY_BUFFER,ht,r))}if(St&&Rt){for(a=0,o=Lt.length;a0&&(zt.bindBuffer(zt.ARRAY_BUFFER,t.__webglUV2Buffer),zt.bufferData(zt.ARRAY_BUFFER,ct,r))}if(Mt){for(a=0,o=Lt.length;a=0){var u=n[h];if(void 0!==u){var d=u.itemSize;zt.bindBuffer(zt.ARRAY_BUFFER,u.buffer),v(c),zt.vertexAttribPointer(c,d,zt.FLOAT,!1,0,i*d*4)}else void 0!==t.defaultAttributeValues&&(2===t.defaultAttributeValues[h].length?zt.vertexAttrib2fv(c,t.defaultAttributeValues[h]):3===t.defaultAttributeValues[h].length&&zt.vertexAttrib3fv(c,t.defaultAttributeValues[h]))}}y()}function g(){for(var t=0,e=he.length;t=0?(zt.bindBuffer(zt.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[r.morphTargetBase]),v(i.position),zt.vertexAttribPointer(i.position,3,zt.FLOAT,!1,0,0)):i.position>=0&&(zt.bindBuffer(zt.ARRAY_BUFFER,e.__webglVertexBuffer),v(i.position),zt.vertexAttribPointer(i.position,3,zt.FLOAT,!1,0,0)),r.morphTargetForcedOrder.length)for(var n=0,a=r.morphTargetForcedOrder,o=r.morphTargetInfluences;n=0&&(zt.bindBuffer(zt.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[a[n]]),v(i["morphTarget"+n]),zt.vertexAttribPointer(i["morphTarget"+n],3,zt.FLOAT,!1,0,0)),i["morphNormal"+n]>=0&&t.morphNormals&&(zt.bindBuffer(zt.ARRAY_BUFFER,e.__webglMorphNormalsBuffers[a[n]]),v(i["morphNormal"+n]),zt.vertexAttribPointer(i["morphNormal"+n],3,zt.FLOAT,!1,0,0)),r.__webglMorphTargetInfluences[n]=o[a[n]],n++;else{var s,l,h=[],o=r.morphTargetInfluences,c=o.length;for(l=0;l0&&h.push([s,l]);h.length>t.numSupportedMorphTargets?(h.sort(w),h.length=t.numSupportedMorphTargets):h.length>t.numSupportedMorphNormals?h.sort(w):0===h.length&&h.push([0,0]);for(var u,n=0;n=0&&(zt.bindBuffer(zt.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[u]),v(i["morphTarget"+n]),zt.vertexAttribPointer(i["morphTarget"+n],3,zt.FLOAT,!1,0,0)),i["morphNormal"+n]>=0&&t.morphNormals&&(zt.bindBuffer(zt.ARRAY_BUFFER,e.__webglMorphNormalsBuffers[u]),v(i["morphNormal"+n]),zt.vertexAttribPointer(i["morphNormal"+n],3,zt.FLOAT,!1,0,0)),r.__webglMorphTargetInfluences[n]=o[u]):r.__webglMorphTargetInfluences[n]=0,n++}null!==t.program.uniforms.morphTargetInfluences&&zt.uniform1fv(t.program.uniforms.morphTargetInfluences,r.__webglMorphTargetInfluences)}function b(t,e){return t.material.id!==e.material.id?e.material.id-t.material.id:t.z!==e.z?e.z-t.z:t.id-e.id}function _(t,e){return t.z!==e.z?t.z-e.z:t.id-e.id}function w(t,e){return e[0]-t[0]}function M(t,e){if(!1!==e.visible){if(e instanceof m.Scene||e instanceof m.Group);else if(A(e,t),e instanceof m.Light)Ft.push(e);else if(e instanceof m.Sprite)kt.push(e);else if(e instanceof m.LensFlare)Ut.push(e);else{var r=Lt[e.id];if(r&&(!1===e.frustumCulled||!0===ue.intersectsObject(e))){R(e,t);for(var i=0,n=r.length;in&&(a[f].counter+=1,(r=a[f].hash+"_"+a[f].counter)in l||(i={id:qe++,faces3:[],materialIndex:f,vertices:0,numMorphTargets:o,numMorphNormals:s},l[r]=i,h.push(i))),l[r].faces3.push(c),l[r].vertices+=3}return h}function L(t,e,r){var n=e.material,a=!1;void 0!==Xe[r.id]&&!0!==r.groupsNeedUpdate||(delete Lt[e.id],Xe[r.id]=F(r,n instanceof m.MeshFaceMaterial),r.groupsNeedUpdate=!1);for(var o=Xe[r.id],l=0,h=o.length;l=0;r--)t[r].object===e&&t.splice(r,1)}function B(t,e,r,i){t.addEventListener("dispose",Ie);var n;if(t instanceof m.MeshDepthMaterial?n="depth":t instanceof m.MeshNormalMaterial?n="normal":t instanceof m.MeshBasicMaterial?n="basic":t instanceof m.MeshLambertMaterial?n="lambert":t instanceof m.MeshPhongMaterial?n="phong":t instanceof m.LineBasicMaterial?n="basic":t instanceof m.LineDashedMaterial?n="dashed":t instanceof m.PointCloudMaterial&&(n="particle_basic"),n){var a=m.ShaderLib[n];t.__webglShader={uniforms:m.UniformsUtils.clone(a.uniforms),vertexShader:a.vertexShader,fragmentShader:a.fragmentShader}}else t.__webglShader={uniforms:t.uniforms,vertexShader:t.vertexShader,fragmentShader:t.fragmentShader};var o=mt(e),s=gt(e),l=pt(i),h={precision:xt,supportsVertexTextures:Se,map:!!t.map,envMap:!!t.envMap,lightMap:!!t.lightMap,bumpMap:!!t.bumpMap,normalMap:!!t.normalMap,specularMap:!!t.specularMap,alphaMap:!!t.alphaMap,vertexColors:t.vertexColors,fog:r,useFog:t.fog,fogExp:r instanceof m.FogExp2,sizeAttenuation:t.sizeAttenuation,logarithmicDepthBuffer:Tt,skinning:t.skinning,maxBones:l,useVertexTexture:Ce&&i&&i.skeleton&&i.skeleton.useVertexTexture,morphTargets:t.morphTargets,morphNormals:t.morphNormals,maxMorphTargets:Vt.maxMorphTargets,maxMorphNormals:Vt.maxMorphNormals,maxDirLights:o.directional,maxPointLights:o.point,maxSpotLights:o.spot,maxHemiLights:o.hemi,maxShadows:s,shadowMapEnabled:Vt.shadowMapEnabled&&i.receiveShadow&&s>0,shadowMapType:Vt.shadowMapType,shadowMapDebug:Vt.shadowMapDebug,shadowMapCascade:Vt.shadowMapCascade,alphaTest:t.alphaTest,metal:t.metal,wrapAround:t.wrapAround,doubleSided:t.side===m.DoubleSide,flipSided:t.side===m.BackSide},c=[];if(n?c.push(n):(c.push(t.fragmentShader),c.push(t.vertexShader)),void 0!==t.defines)for(var u in t.defines)c.push(u),c.push(t.defines[u]);for(var u in h)c.push(u),c.push(h[u]);for(var d,f=c.join(),p=0,g=Bt.length;p=0&&t.numSupportedMorphTargets++}if(t.morphNormals){t.numSupportedMorphNormals=0;var x,b="morphNormal";for(_=0;_=0&&t.numSupportedMorphNormals++}t.uniformsList=[];for(var w in t.__webglShader.uniforms){var M=t.program.uniforms[w];M&&t.uniformsList.push([t.__webglShader.uniforms[w],M])}}function N(t,e,r,i,n){Wt=0,i.needsUpdate&&(i.program&&je(i),B(i,e,r,n),i.needsUpdate=!1),i.morphTargets&&(n.__webglMorphTargetInfluences||(n.__webglMorphTargetInfluences=new Float32Array(Vt.maxMorphTargets)));var a=!1,o=!1,s=!1,l=i.program,h=l.uniforms,c=i.__webglShader.uniforms;if(l.id!==Nt&&(zt.useProgram(l.program),Nt=l.id,a=!0,o=!0,s=!0),i.id!==Ot&&(-1===Ot&&(s=!0),Ot=i.id,o=!0),(a||t!==Ht)&&(zt.uniformMatrix4fv(h.projectionMatrix,!1,t.projectionMatrix.elements),Tt&&zt.uniform1f(h.logDepthBufFC,2/(Math.log(t.far+1)/Math.LN2)),t!==Ht&&(Ht=t),(i instanceof m.ShaderMaterial||i instanceof m.MeshPhongMaterial||i.envMap)&&null!==h.cameraPosition&&(pe.setFromMatrixPosition(t.matrixWorld),zt.uniform3f(h.cameraPosition,pe.x,pe.y,pe.z)),(i instanceof m.MeshPhongMaterial||i instanceof m.MeshLambertMaterial||i instanceof m.ShaderMaterial||i.skinning)&&null!==h.viewMatrix&&zt.uniformMatrix4fv(h.viewMatrix,!1,t.matrixWorldInverse.elements)),i.skinning)if(n.bindMatrix&&null!==h.bindMatrix&&zt.uniformMatrix4fv(h.bindMatrix,!1,n.bindMatrix.elements),n.bindMatrixInverse&&null!==h.bindMatrixInverse&&zt.uniformMatrix4fv(h.bindMatrixInverse,!1,n.bindMatrixInverse.elements),Ce&&n.skeleton&&n.skeleton.useVertexTexture){if(null!==h.boneTexture){var u=Q();zt.uniform1i(h.boneTexture,u),Vt.setTexture(n.skeleton.boneTexture,u)}null!==h.boneTextureWidth&&zt.uniform1i(h.boneTextureWidth,n.skeleton.boneTextureWidth),null!==h.boneTextureHeight&&zt.uniform1i(h.boneTextureHeight,n.skeleton.boneTextureHeight)}else n.skeleton&&n.skeleton.boneMatrices&&null!==h.boneGlobalMatrices&&zt.uniformMatrix4fv(h.boneGlobalMatrices,!1,n.skeleton.boneMatrices);return o&&(r&&i.fog&&W(c,r),(i instanceof m.MeshPhongMaterial||i instanceof m.MeshLambertMaterial||i.lights)&&(ge&&(s=!0,rt(e),ge=!1),s?(q(c,ve),$(c,!0)):$(c,!1)),(i instanceof m.MeshBasicMaterial||i instanceof m.MeshLambertMaterial||i instanceof m.MeshPhongMaterial)&&I(c,i),i instanceof m.LineBasicMaterial?O(c,i):i instanceof m.LineDashedMaterial?(O(c,i),G(c,i)):i instanceof m.PointCloudMaterial?H(c,i):i instanceof m.MeshPhongMaterial?j(c,i):i instanceof m.MeshLambertMaterial?X(c,i):i instanceof m.MeshDepthMaterial?(c.mNear.value=t.near,c.mFar.value=t.far,c.opacity.value=i.opacity):i instanceof m.MeshNormalMaterial&&(c.opacity.value=i.opacity),n.receiveShadow&&!i._shadowPass&&Y(c,e),Z(i.uniformsList)),K(h,n),null!==h.modelMatrix&&zt.uniformMatrix4fv(h.modelMatrix,!1,n.matrixWorld.elements),l}function I(t,e){t.opacity.value=e.opacity,Vt.gammaInput?t.diffuse.value.copyGammaToLinear(e.color):t.diffuse.value=e.color,t.map.value=e.map,t.lightMap.value=e.lightMap,t.specularMap.value=e.specularMap,t.alphaMap.value=e.alphaMap,e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale),e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale));var r;if(e.map?r=e.map:e.specularMap?r=e.specularMap:e.normalMap?r=e.normalMap:e.bumpMap?r=e.bumpMap:e.alphaMap&&(r=e.alphaMap),void 0!==r){var i=r.offset,n=r.repeat;t.offsetRepeat.value.set(i.x,i.y,n.x,n.y)}t.envMap.value=e.envMap,t.flipEnvMap.value=e.envMap instanceof m.WebGLRenderTargetCube?1:-1,Vt.gammaInput,t.reflectivity.value=e.reflectivity,t.refractionRatio.value=e.refractionRatio,t.combine.value=e.combine,t.useRefract.value=e.envMap&&e.envMap.mapping instanceof m.CubeRefractionMapping}function O(t,e){t.diffuse.value=e.color,t.opacity.value=e.opacity}function G(t,e){t.dashSize.value=e.dashSize,t.totalSize.value=e.dashSize+e.gapSize,t.scale.value=e.scale}function H(t,e){t.psColor.value=e.color,t.opacity.value=e.opacity,t.size.value=e.size,t.scale.value=vt.height/2,t.map.value=e.map}function W(t,e){t.fogColor.value=e.color,e instanceof m.Fog?(t.fogNear.value=e.near,t.fogFar.value=e.far):e instanceof m.FogExp2&&(t.fogDensity.value=e.density)}function j(t,e){t.shininess.value=e.shininess,Vt.gammaInput?(t.ambient.value.copyGammaToLinear(e.ambient),t.emissive.value.copyGammaToLinear(e.emissive),t.specular.value.copyGammaToLinear(e.specular)):(t.ambient.value=e.ambient,t.emissive.value=e.emissive,t.specular.value=e.specular),e.wrapAround&&t.wrapRGB.value.copy(e.wrapRGB)}function X(t,e){Vt.gammaInput?(t.ambient.value.copyGammaToLinear(e.ambient),t.emissive.value.copyGammaToLinear(e.emissive)):(t.ambient.value=e.ambient,t.emissive.value=e.emissive),e.wrapAround&&t.wrapRGB.value.copy(e.wrapRGB)}function q(t,e){t.ambientLightColor.value=e.ambient,t.directionalLightColor.value=e.directional.colors,t.directionalLightDirection.value=e.directional.positions,t.pointLightColor.value=e.point.colors,t.pointLightPosition.value=e.point.positions,t.pointLightDistance.value=e.point.distances,t.spotLightColor.value=e.spot.colors,t.spotLightPosition.value=e.spot.positions,t.spotLightDistance.value=e.spot.distances,t.spotLightDirection.value=e.spot.directions,t.spotLightAngleCos.value=e.spot.anglesCos,t.spotLightExponent.value=e.spot.exponents,t.hemisphereLightSkyColor.value=e.hemi.skyColors,t.hemisphereLightGroundColor.value=e.hemi.groundColors,t.hemisphereLightDirection.value=e.hemi.positions}function $(t,e){t.ambientLightColor.needsUpdate=e,t.directionalLightColor.needsUpdate=e,t.directionalLightDirection.needsUpdate=e,t.pointLightColor.needsUpdate=e,t.pointLightPosition.needsUpdate=e,t.pointLightDistance.needsUpdate=e,t.spotLightColor.needsUpdate=e,t.spotLightPosition.needsUpdate=e,t.spotLightDistance.needsUpdate=e,t.spotLightDirection.needsUpdate=e,t.spotLightAngleCos.needsUpdate=e,t.spotLightExponent.needsUpdate=e,t.hemisphereLightSkyColor.needsUpdate=e,t.hemisphereLightGroundColor.needsUpdate=e,t.hemisphereLightDirection.needsUpdate=e}function Y(t,e){if(t.shadowMatrix)for(var r=0,i=0,n=e.length;i=be&&console.warn("WebGLRenderer: trying to use "+t+" texture units while this GPU supports only "+be),Wt+=1,t}function Z(t){for(var e,r,i,n=0,a=t.length;n1||e.__oldAnisotropy)&&(zt.texParameterf(t,i.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(e.anisotropy,Vt.getMaxAnisotropy())),e.__oldAnisotropy=e.anisotropy)}function ot(t,e){if(t.width>e||t.height>e){var r=e/Math.max(t.width,t.height),i=document.createElement("canvas");i.width=Math.floor(t.width*r),i.height=Math.floor(t.height*r);return i.getContext("2d").drawImage(t,0,0,t.width,t.height,0,0,i.width,i.height),console.log("THREE.WebGLRenderer:",t,"is too big ("+t.width+"x"+t.height+"). Resized to "+i.width+"x"+i.height+"."),i}return t}function st(t,e){if(6===t.image.length)if(t.needsUpdate){t.image.__webglTextureCube||(t.addEventListener("dispose",Be),t.image.__webglTextureCube=zt.createTexture(),Vt.info.memory.textures++),zt.activeTexture(zt.TEXTURE0+e),zt.bindTexture(zt.TEXTURE_CUBE_MAP,t.image.__webglTextureCube),zt.pixelStorei(zt.UNPACK_FLIP_Y_WEBGL,t.flipY);for(var r=t instanceof m.CompressedTexture,i=t.image[0]instanceof m.DataTexture,n=[],a=0;a<6;a++)!Vt.autoScaleCubemaps||r||i?n[a]=i?t.image[a].image:t.image[a]:n[a]=ot(t.image[a],Me);var o=n[0],s=m.Math.isPowerOfTwo(o.width)&&m.Math.isPowerOfTwo(o.height),l=ft(t.format),h=ft(t.type);at(zt.TEXTURE_CUBE_MAP,t,s);for(var a=0;a<6;a++)if(r)for(var c,u=n[a].mipmaps,d=0,f=u.length;d-1?zt.compressedTexImage2D(zt.TEXTURE_CUBE_MAP_POSITIVE_X+a,d,l,c.width,c.height,0,c.data):console.warn("Attempt to load unsupported compressed texture format"):zt.texImage2D(zt.TEXTURE_CUBE_MAP_POSITIVE_X+a,d,l,c.width,c.height,0,l,h,c.data);else i?zt.texImage2D(zt.TEXTURE_CUBE_MAP_POSITIVE_X+a,0,l,n[a].width,n[a].height,0,l,h,n[a].data):zt.texImage2D(zt.TEXTURE_CUBE_MAP_POSITIVE_X+a,0,l,l,h,n[a]);t.generateMipmaps&&s&&zt.generateMipmap(zt.TEXTURE_CUBE_MAP),t.needsUpdate=!1,t.onUpdate&&t.onUpdate()}else zt.activeTexture(zt.TEXTURE0+e),zt.bindTexture(zt.TEXTURE_CUBE_MAP,t.image.__webglTextureCube)}function lt(t,e){zt.activeTexture(zt.TEXTURE0+e),zt.bindTexture(zt.TEXTURE_CUBE_MAP,t.__webglTexture)}function ht(t,e,r){zt.bindFramebuffer(zt.FRAMEBUFFER,t),zt.framebufferTexture2D(zt.FRAMEBUFFER,zt.COLOR_ATTACHMENT0,r,e.__webglTexture,0)}function ct(t,e){zt.bindRenderbuffer(zt.RENDERBUFFER,t),e.depthBuffer&&!e.stencilBuffer?(zt.renderbufferStorage(zt.RENDERBUFFER,zt.DEPTH_COMPONENT16,e.width,e.height),zt.framebufferRenderbuffer(zt.FRAMEBUFFER,zt.DEPTH_ATTACHMENT,zt.RENDERBUFFER,t)):e.depthBuffer&&e.stencilBuffer?(zt.renderbufferStorage(zt.RENDERBUFFER,zt.DEPTH_STENCIL,e.width,e.height),zt.framebufferRenderbuffer(zt.FRAMEBUFFER,zt.DEPTH_STENCIL_ATTACHMENT,zt.RENDERBUFFER,t)):zt.renderbufferStorage(zt.RENDERBUFFER,zt.RGBA4,e.width,e.height)}function ut(t){t instanceof m.WebGLRenderTargetCube?(zt.bindTexture(zt.TEXTURE_CUBE_MAP,t.__webglTexture),zt.generateMipmap(zt.TEXTURE_CUBE_MAP),zt.bindTexture(zt.TEXTURE_CUBE_MAP,null)):(zt.bindTexture(zt.TEXTURE_2D,t.__webglTexture),zt.generateMipmap(zt.TEXTURE_2D),zt.bindTexture(zt.TEXTURE_2D,null))}function dt(t){return t===m.NearestFilter||t===m.NearestMipMapNearestFilter||t===m.NearestMipMapLinearFilter?zt.NEAREST:zt.LINEAR}function ft(t){var e;if(t===m.RepeatWrapping)return zt.REPEAT;if(t===m.ClampToEdgeWrapping)return zt.CLAMP_TO_EDGE;if(t===m.MirroredRepeatWrapping)return zt.MIRRORED_REPEAT;if(t===m.NearestFilter)return zt.NEAREST;if(t===m.NearestMipMapNearestFilter)return zt.NEAREST_MIPMAP_NEAREST;if(t===m.NearestMipMapLinearFilter)return zt.NEAREST_MIPMAP_LINEAR;if(t===m.LinearFilter)return zt.LINEAR;if(t===m.LinearMipMapNearestFilter)return zt.LINEAR_MIPMAP_NEAREST;if(t===m.LinearMipMapLinearFilter)return zt.LINEAR_MIPMAP_LINEAR;if(t===m.UnsignedByteType)return zt.UNSIGNED_BYTE;if(t===m.UnsignedShort4444Type)return zt.UNSIGNED_SHORT_4_4_4_4;if(t===m.UnsignedShort5551Type)return zt.UNSIGNED_SHORT_5_5_5_1;if(t===m.UnsignedShort565Type)return zt.UNSIGNED_SHORT_5_6_5;if(t===m.ByteType)return zt.BYTE;if(t===m.ShortType)return zt.SHORT;if(t===m.UnsignedShortType)return zt.UNSIGNED_SHORT;if(t===m.IntType)return zt.INT;if(t===m.UnsignedIntType)return zt.UNSIGNED_INT;if(t===m.FloatType)return zt.FLOAT;if(t===m.AlphaFormat)return zt.ALPHA;if(t===m.RGBFormat)return zt.RGB;if(t===m.RGBAFormat)return zt.RGBA;if(t===m.LuminanceFormat)return zt.LUMINANCE;if(t===m.LuminanceAlphaFormat)return zt.LUMINANCE_ALPHA;if(t===m.AddEquation)return zt.FUNC_ADD;if(t===m.SubtractEquation)return zt.FUNC_SUBTRACT;if(t===m.ReverseSubtractEquation)return zt.FUNC_REVERSE_SUBTRACT;if(t===m.ZeroFactor)return zt.ZERO;if(t===m.OneFactor)return zt.ONE;if(t===m.SrcColorFactor)return zt.SRC_COLOR;if(t===m.OneMinusSrcColorFactor)return zt.ONE_MINUS_SRC_COLOR;if(t===m.SrcAlphaFactor)return zt.SRC_ALPHA;if(t===m.OneMinusSrcAlphaFactor)return zt.ONE_MINUS_SRC_ALPHA;if(t===m.DstAlphaFactor)return zt.DST_ALPHA;if(t===m.OneMinusDstAlphaFactor)return zt.ONE_MINUS_DST_ALPHA;if(t===m.DstColorFactor)return zt.DST_COLOR;if(t===m.OneMinusDstColorFactor)return zt.ONE_MINUS_DST_COLOR;if(t===m.SrcAlphaSaturateFactor)return zt.SRC_ALPHA_SATURATE;if(null!==(e=xe.get("WEBGL_compressed_texture_s3tc"))){if(t===m.RGB_S3TC_DXT1_Format)return e.COMPRESSED_RGB_S3TC_DXT1_EXT;if(t===m.RGBA_S3TC_DXT1_Format)return e.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(t===m.RGBA_S3TC_DXT3_Format)return e.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(t===m.RGBA_S3TC_DXT5_Format)return e.COMPRESSED_RGBA_S3TC_DXT5_EXT}if(null!==(e=xe.get("WEBGL_compressed_texture_pvrtc"))){if(t===m.RGB_PVRTC_4BPPV1_Format)return e.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(t===m.RGB_PVRTC_2BPPV1_Format)return e.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(t===m.RGBA_PVRTC_4BPPV1_Format)return e.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(t===m.RGBA_PVRTC_2BPPV1_Format)return e.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(null!==(e=xe.get("EXT_blend_minmax"))){if(t===m.MinEquation)return e.MIN_EXT;if(t===m.MaxEquation)return e.MAX_EXT}return 0}function pt(t){if(Ce&&t&&t.skeleton&&t.skeleton.useVertexTexture)return 1024;var e=zt.getParameter(zt.MAX_VERTEX_UNIFORM_VECTORS),r=Math.floor((e-20)/4),i=r;return void 0!==t&&t instanceof m.SkinnedMesh&&(i=Math.min(t.skeleton.bones.length,i))0,Ce=Se&&xe.get("OES_texture_float"),Te=zt.getShaderPrecisionFormat(zt.VERTEX_SHADER,zt.HIGH_FLOAT),Ee=zt.getShaderPrecisionFormat(zt.VERTEX_SHADER,zt.MEDIUM_FLOAT),Ae=(zt.getShaderPrecisionFormat(zt.VERTEX_SHADER,zt.LOW_FLOAT),zt.getShaderPrecisionFormat(zt.FRAGMENT_SHADER,zt.HIGH_FLOAT)),Fe=zt.getShaderPrecisionFormat(zt.FRAGMENT_SHADER,zt.MEDIUM_FLOAT),Le=(zt.getShaderPrecisionFormat(zt.FRAGMENT_SHADER,zt.LOW_FLOAT),function(){var t;return function(){if(void 0!==t)return t;if(t=[],xe.get("WEBGL_compressed_texture_pvrtc")||xe.get("WEBGL_compressed_texture_s3tc"))for(var e=zt.getParameter(zt.COMPRESSED_TEXTURE_FORMATS),r=0;r0&&Ae.precision>0,De=Ee.precision>0&&Fe.precision>0;"highp"!==xt||Pe||(De?(xt="mediump",console.warn("THREE.WebGLRenderer: highp not supported, using mediump.")):(xt="lowp",console.warn("THREE.WebGLRenderer: highp and mediump not supported, using lowp."))),"mediump"!==xt||De||(xt="lowp",console.warn("THREE.WebGLRenderer: mediump not supported, using lowp."));var Re=new m.ShadowMapPlugin(this,Ft,Lt,Pt),ke=new m.SpritePlugin(this,kt),Ue=new m.LensFlarePlugin(this,Ut);this.getContext=function(){return zt},this.supportsVertexTextures=function(){return Se},this.supportsFloatTextures=function(){return xe.get("OES_texture_float")},this.supportsStandardDerivatives=function(){return xe.get("OES_standard_derivatives")},this.supportsCompressedTextureS3TC=function(){return xe.get("WEBGL_compressed_texture_s3tc")},this.supportsCompressedTexturePVRTC=function(){return xe.get("WEBGL_compressed_texture_pvrtc")},this.supportsBlendMinMax=function(){return xe.get("EXT_blend_minmax")},this.getMaxAnisotropy=function(){var t;return function(){if(void 0!==t)return t;var e=xe.get("EXT_texture_filter_anisotropic");return t=null!==e?zt.getParameter(e.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0}}(),this.getPrecision=function(){return xt},this.setSize=function(t,e,r){vt.width=t*this.devicePixelRatio,vt.height=e*this.devicePixelRatio,!1!==r&&(vt.style.width=t+"px",vt.style.height=e+"px"),this.setViewport(0,0,t,e)},this.setViewport=function(t,e,r,i){ie=t*this.devicePixelRatio,ne=e*this.devicePixelRatio,ae=r*this.devicePixelRatio,oe=i*this.devicePixelRatio,zt.viewport(ie,ne,ae,oe)},this.setScissor=function(t,e,r,i){zt.scissor(t*this.devicePixelRatio,e*this.devicePixelRatio,r*this.devicePixelRatio,i*this.devicePixelRatio)},this.enableScissorTest=function(t){t?zt.enable(zt.SCISSOR_TEST):zt.disable(zt.SCISSOR_TEST)},this.setClearColor=function(t,e){Et.set(t),At=void 0!==e?e:1,zt.clearColor(Et.r,Et.g,Et.b,At)},this.setClearColorHex=function(t,e){console.warn("THREE.WebGLRenderer: .setClearColorHex() is being removed. Use .setClearColor() instead."),this.setClearColor(t,e)},this.getClearColor=function(){return Et},this.getClearAlpha=function(){return At},this.clear=function(t,e,r){var i=0;(void 0===t||t)&&(i|=zt.COLOR_BUFFER_BIT),(void 0===e||e)&&(i|=zt.DEPTH_BUFFER_BIT),(void 0===r||r)&&(i|=zt.STENCIL_BUFFER_BIT),zt.clear(i)},this.clearColor=function(){zt.clear(zt.COLOR_BUFFER_BIT)},this.clearDepth=function(){zt.clear(zt.DEPTH_BUFFER_BIT)},this.clearStencil=function(){zt.clear(zt.STENCIL_BUFFER_BIT)},this.clearTarget=function(t,e,r,i){this.setRenderTarget(t),this.clear(e,r,i)},this.resetGLState=function(){Nt=null,Ht=null,qt=-1,Qt=-1,Zt=-1,jt=-1,Xt=-1,Gt=-1,Ot=-1,ge=!0};var ze=function t(e){e.target.traverse(function(e){e.removeEventListener("remove",t),z(e)})},Ve=function t(e){var r=e.target;r.removeEventListener("dispose",t),Ge(r)},Be=function t(e){var r=e.target;r.removeEventListener("dispose",t),He(r),Vt.info.memory.textures--},Ne=function t(e){var r=e.target;r.removeEventListener("dispose",t),We(r),Vt.info.memory.textures--},Ie=function t(e){var r=e.target;r.removeEventListener("dispose",t),je(r)},Oe=function(t){for(var e=["__webglVertexBuffer","__webglNormalBuffer","__webglTangentBuffer","__webglColorBuffer","__webglUVBuffer","__webglUV2Buffer","__webglSkinIndicesBuffer","__webglSkinWeightsBuffer","__webglFaceBuffer","__webglLineBuffer","__webglLineDistanceBuffer"],r=0,i=e.length;r1&&(s=!0);for(var y=0,x=v.length;y=0?l&&(zt.bindBuffer(zt.ARRAY_BUFFER,n.__webglVertexBuffer),v(s.position),zt.vertexAttribPointer(s.position,3,zt.FLOAT,!1,0,0)):a.morphTargetBase&&x(i,n,a),l){if(n.__webglCustomAttributesList)for(var u=0,d=n.__webglCustomAttributesList.length;u=0&&(zt.bindBuffer(zt.ARRAY_BUFFER,f.buffer),v(s[f.buffer.belongsToAttribute]),zt.vertexAttribPointer(s[f.buffer.belongsToAttribute],f.size,zt.FLOAT,!1,0,0))}s.color>=0&&(a.geometry.colors.length>0||a.geometry.faces.length>0?(zt.bindBuffer(zt.ARRAY_BUFFER,n.__webglColorBuffer),v(s.color),zt.vertexAttribPointer(s.color,3,zt.FLOAT,!1,0,0)):void 0!==i.defaultAttributeValues&&zt.vertexAttrib3fv(s.color,i.defaultAttributeValues.color)),s.normal>=0&&(zt.bindBuffer(zt.ARRAY_BUFFER,n.__webglNormalBuffer),v(s.normal),zt.vertexAttribPointer(s.normal,3,zt.FLOAT,!1,0,0)),s.tangent>=0&&(zt.bindBuffer(zt.ARRAY_BUFFER,n.__webglTangentBuffer),v(s.tangent),zt.vertexAttribPointer(s.tangent,4,zt.FLOAT,!1,0,0)),s.uv>=0&&(a.geometry.faceVertexUvs[0]?(zt.bindBuffer(zt.ARRAY_BUFFER,n.__webglUVBuffer),v(s.uv),zt.vertexAttribPointer(s.uv,2,zt.FLOAT,!1,0,0)):void 0!==i.defaultAttributeValues&&zt.vertexAttrib2fv(s.uv,i.defaultAttributeValues.uv)),s.uv2>=0&&(a.geometry.faceVertexUvs[1]?(zt.bindBuffer(zt.ARRAY_BUFFER,n.__webglUV2Buffer),v(s.uv2),zt.vertexAttribPointer(s.uv2,2,zt.FLOAT,!1,0,0)):void 0!==i.defaultAttributeValues&&zt.vertexAttrib2fv(s.uv2,i.defaultAttributeValues.uv2)),i.skinning&&s.skinIndex>=0&&s.skinWeight>=0&&(zt.bindBuffer(zt.ARRAY_BUFFER,n.__webglSkinIndicesBuffer),v(s.skinIndex),zt.vertexAttribPointer(s.skinIndex,4,zt.FLOAT,!1,0,0),zt.bindBuffer(zt.ARRAY_BUFFER,n.__webglSkinWeightsBuffer),v(s.skinWeight),zt.vertexAttribPointer(s.skinWeight,4,zt.FLOAT,!1,0,0)),s.lineDistance>=0&&(zt.bindBuffer(zt.ARRAY_BUFFER,n.__webglLineDistanceBuffer),v(s.lineDistance),zt.vertexAttribPointer(s.lineDistance,1,zt.FLOAT,!1,0,0))}if(y(),a instanceof m.Mesh){var p=n.__typeArray===Uint32Array?zt.UNSIGNED_INT:zt.UNSIGNED_SHORT;i.wireframe?(it(i.wireframeLinewidth),l&&zt.bindBuffer(zt.ELEMENT_ARRAY_BUFFER,n.__webglLineBuffer),zt.drawElements(zt.LINES,n.__webglLineCount,p,0)):(l&&zt.bindBuffer(zt.ELEMENT_ARRAY_BUFFER,n.__webglFaceBuffer),zt.drawElements(zt.TRIANGLES,n.__webglFaceCount,p,0)),Vt.info.render.calls++,Vt.info.render.vertices+=n.__webglFaceCount,Vt.info.render.faces+=n.__webglFaceCount/3}else if(a instanceof m.Line){var b=a.mode===m.LineStrip?zt.LINE_STRIP:zt.LINES;it(i.linewidth),zt.drawArrays(b,0,n.__webglLineCount),Vt.info.render.calls++}else a instanceof m.PointCloud&&(zt.drawArrays(zt.POINTS,0,n.__webglParticleCount),Vt.info.render.calls++,Vt.info.render.points+=n.__webglParticleCount)}},this.render=function(t,e,r,i){if(e instanceof m.Camera==!1)return void console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");var n=t.fog;Gt=-1,Ot=-1,Ht=null,ge=!0,!0===t.autoUpdate&&t.updateMatrixWorld(),void 0===e.parent&&e.updateMatrixWorld(),t.traverse(function(t){t instanceof m.SkinnedMesh&&t.skeleton.update()}),e.matrixWorldInverse.getInverse(e.matrixWorld),de.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse),ue.setFromMatrix(de),Ft.length=0,Dt.length=0,Rt.length=0,kt.length=0,Ut.length=0,M(t,t),!0===Vt.sortObjects&&(Dt.sort(b),Rt.sort(_)),Re.render(t,e),Vt.info.render.calls=0,Vt.info.render.vertices=0,Vt.info.render.faces=0,Vt.info.render.points=0,this.setRenderTarget(r),(this.autoClear||i)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil);for(var a=0,o=Pt.length;a0&&r){for(var s=0,l=o.length;s-1?zt.compressedTexImage2D(zt.TEXTURE_2D,s,i,a.width,a.height,0,a.data):console.warn("Attempt to load unsupported compressed texture format"):zt.texImage2D(zt.TEXTURE_2D,s,i,a.width,a.height,0,i,n,a.data);else if(o.length>0&&r){for(var s=0,l=o.length;s0;var d;d=l?{vertexShader:["uniform lowp int renderType;","uniform vec3 screenPosition;","uniform vec2 scale;","uniform float rotation;","uniform sampler2D occlusionMap;","attribute vec2 position;","attribute vec2 uv;","varying vec2 vUV;","varying float vVisibility;","void main() {","vUV = uv;","vec2 pos = position;","if( renderType == 2 ) {","vec4 visibility = texture2D( occlusionMap, vec2( 0.1, 0.1 ) );","visibility += texture2D( occlusionMap, vec2( 0.5, 0.1 ) );","visibility += texture2D( occlusionMap, vec2( 0.9, 0.1 ) );","visibility += texture2D( occlusionMap, vec2( 0.9, 0.5 ) );","visibility += texture2D( occlusionMap, vec2( 0.9, 0.9 ) );","visibility += texture2D( occlusionMap, vec2( 0.5, 0.9 ) );","visibility += texture2D( occlusionMap, vec2( 0.1, 0.9 ) );","visibility += texture2D( occlusionMap, vec2( 0.1, 0.5 ) );","visibility += texture2D( occlusionMap, vec2( 0.5, 0.5 ) );","vVisibility = visibility.r / 9.0;","vVisibility *= 1.0 - visibility.g / 9.0;","vVisibility *= visibility.b / 9.0;","vVisibility *= 1.0 - visibility.a / 9.0;","pos.x = cos( rotation ) * position.x - sin( rotation ) * position.y;","pos.y = sin( rotation ) * position.x + cos( rotation ) * position.y;","}","gl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );","}"].join("\n"),fragmentShader:["uniform lowp int renderType;","uniform sampler2D map;","uniform float opacity;","uniform vec3 color;","varying vec2 vUV;","varying float vVisibility;","void main() {","if( renderType == 0 ) {","gl_FragColor = vec4( 1.0, 0.0, 1.0, 0.0 );","} else if( renderType == 1 ) {","gl_FragColor = texture2D( map, vUV );","} else {","vec4 texture = texture2D( map, vUV );","texture.a *= opacity * vVisibility;","gl_FragColor = texture;","gl_FragColor.rgb *= color;","}","}"].join("\n")}:{vertexShader:["uniform lowp int renderType;","uniform vec3 screenPosition;","uniform vec2 scale;","uniform float rotation;","attribute vec2 position;","attribute vec2 uv;","varying vec2 vUV;","void main() {","vUV = uv;","vec2 pos = position;","if( renderType == 2 ) {","pos.x = cos( rotation ) * position.x - sin( rotation ) * position.y;","pos.y = sin( rotation ) * position.x + cos( rotation ) * position.y;","}","gl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );","}"].join("\n"),fragmentShader:["precision mediump float;","uniform lowp int renderType;","uniform sampler2D map;","uniform sampler2D occlusionMap;","uniform float opacity;","uniform vec3 color;","varying vec2 vUV;","void main() {","if( renderType == 0 ) {","gl_FragColor = vec4( texture2D( map, vUV ).rgb, 0.0 );","} else if( renderType == 1 ) {","gl_FragColor = texture2D( map, vUV );","} else {","float visibility = texture2D( occlusionMap, vec2( 0.5, 0.1 ) ).a;","visibility += texture2D( occlusionMap, vec2( 0.9, 0.5 ) ).a;","visibility += texture2D( occlusionMap, vec2( 0.5, 0.9 ) ).a;","visibility += texture2D( occlusionMap, vec2( 0.1, 0.5 ) ).a;","visibility = ( 1.0 - visibility / 4.0 );","vec4 texture = texture2D( map, vUV );","texture.a *= opacity * visibility;","gl_FragColor = texture;","gl_FragColor.rgb *= color;","}","}"].join("\n")},a=r(d),o={vertex:u.getAttribLocation(a,"position"),uv:u.getAttribLocation(a,"uv")},s={renderType:u.getUniformLocation(a,"renderType"),map:u.getUniformLocation(a,"map"),occlusionMap:u.getUniformLocation(a,"occlusionMap"),opacity:u.getUniformLocation(a,"opacity"),color:u.getUniformLocation(a,"color"),scale:u.getUniformLocation(a,"scale"),rotation:u.getUniformLocation(a,"rotation"),screenPosition:u.getUniformLocation(a,"screenPosition")}};this.render=function(r,f,p,g){if(0!==e.length){var v=new m.Vector3,y=g/p,x=.5*p,b=.5*g,_=16/g,w=new m.Vector2(_*y,_),M=new m.Vector3(1,1,0),S=new m.Vector2(1,1);void 0===a&&d(),u.useProgram(a),u.enableVertexAttribArray(o.vertex),u.enableVertexAttribArray(o.uv),u.uniform1i(s.occlusionMap,0),u.uniform1i(s.map,1),u.bindBuffer(u.ARRAY_BUFFER,i),u.vertexAttribPointer(o.vertex,2,u.FLOAT,!1,16,0),u.vertexAttribPointer(o.uv,2,u.FLOAT,!1,16,8),u.bindBuffer(u.ELEMENT_ARRAY_BUFFER,n),u.disable(u.CULL_FACE),u.depthMask(!1);for(var C=0,T=e.length;C0&&S.x0&&S.y.001&&L.scale>.001&&(M.x=L.x,M.y=L.y,M.z=L.z,_=L.size*L.scale/g,w.x=_*y,w.y=_,u.uniform3f(s.screenPosition,M.x,M.y,M.z),u.uniform2f(s.scale,w.x,w.y),u.uniform1f(s.rotation,L.rotation),u.uniform1f(s.opacity,L.opacity),u.uniform3f(s.color,L.color.r,L.color.g,L.color.b),t.setBlending(L.blending,L.blendEquation,L.blendSrc,L.blendDst),t.setTexture(L.texture,1),u.drawElements(u.TRIANGLES,6,u.UNSIGNED_SHORT,0))}}}u.enable(u.CULL_FACE),u.enable(u.DEPTH_TEST),u.depthMask(!0),t.resetGLState()}}},m.ShadowMapPlugin=function(t,e,r,i){function n(t,e,i){if(e.visible){var a=r[e.id];if(a&&e.castShadow&&(!1===e.frustumCulled||!0===p.intersectsObject(e)))for(var o=0,s=a.length;oy.x&&(y.x=o.x),o.yy.y&&(y.y=o.y),o.zy.z&&(y.z=o.z)}r.left=v.x,r.right=y.x,r.top=y.y,r.bottom=v.y,r.updateProjectionMatrix()}function l(t){return t.material instanceof m.MeshFaceMaterial?t.material.materials[0]:t.material}var h,c,u,d,f=t.context,p=new m.Frustum,g=new m.Matrix4,v=new m.Vector3,y=new m.Vector3,x=new m.Vector3,b=[],_=m.ShaderLib.depthRGBA,w=m.UniformsUtils.clone(_.uniforms);h=new m.ShaderMaterial({uniforms:w,vertexShader:_.vertexShader,fragmentShader:_.fragmentShader}),c=new m.ShaderMaterial({uniforms:w,vertexShader:_.vertexShader,fragmentShader:_.fragmentShader,morphTargets:!0}),u=new m.ShaderMaterial({uniforms:w,vertexShader:_.vertexShader,fragmentShader:_.fragmentShader,skinning:!0}),d=new m.ShaderMaterial({uniforms:w,vertexShader:_.vertexShader,fragmentShader:_.fragmentShader,morphTargets:!0,skinning:!0}),h._shadowPass=!0,c._shadowPass=!0,u._shadowPass=!0,d._shadowPass=!0,this.render=function(r,v){if(!1!==t.shadowMapEnabled){var y,_,w,M,S,C,T,E,A,F,L,P,D,R=[],k=0;for(f.clearColor(1,1,1,1),f.disable(f.BLEND),f.enable(f.CULL_FACE),f.frontFace(f.CCW),t.shadowMapCullFace===m.CullFaceFront?f.cullFace(f.FRONT):f.cullFace(f.BACK),t.setDepthTest(!0),y=0,_=e.length;y<_;y++)if(D=e[y],D.castShadow)if(D instanceof m.DirectionalLight&&D.shadowCascade)for(S=0;S0&&N.morphTargets,O=P instanceof m.SkinnedMesh&&N.skinning,F=P.customDepthMaterial?P.customDepthMaterial:O?I?d:u:I?c:h,t.setMaterialFaces(N),A instanceof m.BufferGeometry?t.renderBufferDirect(E,e,null,F,A,P):t.renderBuffer(E,e,null,F,A,P);for(w=0,M=i.length;w 0 ) {","float depth = gl_FragCoord.z / gl_FragCoord.w;","float fogFactor = 0.0;","if ( fogType == 1 ) {","fogFactor = smoothstep( fogNear, fogFar, depth );","} else {","const float LOG2 = 1.442695;","float fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );","fogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );","}","gl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );","}","}"].join("\n")),c.compileShader(r),c.compileShader(i),c.attachShader(e,r),c.attachShader(e,i),c.linkProgram(e),e}function i(t,e){return t.z!==e.z?e.z-t.z:e.id-t.id}var n,a,o,s,l,h,c=t.context,u=function(){var t=new Float32Array([-.5,-.5,0,0,.5,-.5,1,0,.5,.5,1,1,-.5,.5,0,1]),e=new Uint16Array([0,1,2,0,2,3]);n=c.createBuffer(),a=c.createBuffer(),c.bindBuffer(c.ARRAY_BUFFER,n),c.bufferData(c.ARRAY_BUFFER,t,c.STATIC_DRAW),c.bindBuffer(c.ELEMENT_ARRAY_BUFFER,a),c.bufferData(c.ELEMENT_ARRAY_BUFFER,e,c.STATIC_DRAW),o=r(),s={position:c.getAttribLocation(o,"position"),uv:c.getAttribLocation(o,"uv")},l={uvOffset:c.getUniformLocation(o,"uvOffset"),uvScale:c.getUniformLocation(o,"uvScale"),rotation:c.getUniformLocation(o,"rotation"),scale:c.getUniformLocation(o,"scale"),color:c.getUniformLocation(o,"color"),map:c.getUniformLocation(o,"map"),opacity:c.getUniformLocation(o,"opacity"),modelViewMatrix:c.getUniformLocation(o,"modelViewMatrix"),projectionMatrix:c.getUniformLocation(o,"projectionMatrix"),fogType:c.getUniformLocation(o,"fogType"),fogDensity:c.getUniformLocation(o,"fogDensity"),fogNear:c.getUniformLocation(o,"fogNear"),fogFar:c.getUniformLocation(o,"fogFar"),fogColor:c.getUniformLocation(o,"fogColor"),alphaTest:c.getUniformLocation(o,"alphaTest")};var i=document.createElement("canvas");i.width=8,i.height=8;var u=i.getContext("2d");u.fillStyle="white",u.fillRect(0,0,8,8),h=new m.Texture(i),h.needsUpdate=!0};this.render=function(r,d){if(0!==e.length){void 0===o&&u(),c.useProgram(o),c.enableVertexAttribArray(s.position),c.enableVertexAttribArray(s.uv),c.disable(c.CULL_FACE),c.enable(c.BLEND),c.bindBuffer(c.ARRAY_BUFFER,n),c.vertexAttribPointer(s.position,2,c.FLOAT,!1,16,0),c.vertexAttribPointer(s.uv,2,c.FLOAT,!1,16,8),c.bindBuffer(c.ELEMENT_ARRAY_BUFFER,a),c.uniformMatrix4fv(l.projectionMatrix,!1,d.projectionMatrix.elements),c.activeTexture(c.TEXTURE0),c.uniform1i(l.map,0);var f=0,p=0,g=r.fog;g?(c.uniform3f(l.fogColor,g.color.r,g.color.g,g.color.b),g instanceof m.Fog?(c.uniform1f(l.fogNear,g.near),c.uniform1f(l.fogFar,g.far),c.uniform1i(l.fogType,1),f=1,p=1):g instanceof m.FogExp2&&(c.uniform1f(l.fogDensity,g.density),c.uniform1i(l.fogType,2),f=2,p=2)):(c.uniform1i(l.fogType,0),f=0,p=0);for(var v=0,y=e.length;vn-1?n-1:u+1,p=c-1<0?0:c-1,m=c+1>i-1?i-1:c+1,g=[],v=[0,0,s[4*(u*i+c)]/255*e];g.push([-1,0,s[4*(u*i+p)]/255*e]),g.push([-1,-1,s[4*(d*i+p)]/255*e]),g.push([0,-1,s[4*(d*i+c)]/255*e]),g.push([1,-1,s[4*(d*i+m)]/255*e]),g.push([1,0,s[4*(u*i+m)]/255*e]),g.push([1,1,s[4*(f*i+m)]/255*e]),g.push([0,1,s[4*(f*i+c)]/255*e]),g.push([-1,1,s[4*(f*i+p)]/255*e]);for(var y=[],x=g.length,b=0;b0)for(o=0;o2;){if(d--<=0)return console.log("Warning, unable to triangulate polygon!"),e?c:l;if(a=o,u<=a&&(a=0),o=a+1,u<=o&&(o=0),s=o+1,u<=s&&(s=0),i(t,a,o,s,u,h)){var f,p,m,g,v;for(f=h[a],p=h[o],m=h[s],l.push([t[f],t[p],t[m]]),c.push([h[a],h[o],h[s]]),g=o,v=o+1;v(h-s)*(d-l)-(c-l)*(u-s))return!1;var m,g,v,y,x,b,_,w,M,S,C,T,E,A,F;for(m=u-h,g=d-c,v=s-u,y=l-d,x=h-s,b=c-l,o=0;o=-1e-10&&A>=-1e-10&&E>=-1e-10))return!1;return!0};t.Triangulate=e,t.Triangulate.area=r}(m.FontUtils),self._typeface_js={faces:m.FontUtils.faces,loadFace:m.FontUtils.loadFace},m.typeface_js=self._typeface_js,m.Audio=function(t){m.Object3D.call(this),this.type="Audio",this.context=t.context,this.source=this.context.createBufferSource(),this.gain=this.context.createGain(),this.gain.connect(this.context.destination),this.panner=this.context.createPanner(),this.panner.connect(this.gain)},m.Audio.prototype=(0,n.default)(m.Object3D.prototype),m.Audio.prototype.load=function(t){var e=this,r=new XMLHttpRequest;return r.open("GET",t,!0),r.responseType="arraybuffer",r.onload=function(t){e.context.decodeAudioData(this.response,function(t){e.source.buffer=t,e.source.connect(e.panner),e.source.start(0)})},r.send(),this},m.Audio.prototype.setLoop=function(t){this.source.loop=t},m.Audio.prototype.setRefDistance=function(t){this.panner.refDistance=t},m.Audio.prototype.setRolloffFactor=function(t){this.panner.rolloffFactor=t},m.Audio.prototype.updateMatrixWorld=function(){var t=new m.Vector3;return function(e){m.Object3D.prototype.updateMatrixWorld.call(this,e),t.setFromMatrixPosition(this.matrixWorld),this.panner.setPosition(t.x,t.y,t.z)}}(),m.AudioListener=function(){m.Object3D.call(this),this.type="AudioListener",this.context=new(window.AudioContext||window.webkitAudioContext)},m.AudioListener.prototype=(0,n.default)(m.Object3D.prototype),m.AudioListener.prototype.updateMatrixWorld=function(){var t=new m.Vector3,e=new m.Quaternion,r=new m.Vector3,i=new m.Vector3,n=new m.Vector3,a=new m.Vector3;return function(o){m.Object3D.prototype.updateMatrixWorld.call(this,o);var s=this.context.listener;this.matrixWorld.decompose(t,e,r),i.set(0,0,-1).applyQuaternion(e),n.subVectors(t,a),s.setPosition(t.x,t.y,t.z),s.setOrientation(i.x,i.y,i.z,this.up.x,this.up.y,this.up.z),s.setVelocity(n.x,n.y,n.z),a.copy(t)}}(),m.Curve=function(){},m.Curve.prototype.getPoint=function(t){return console.log("Warning, getPoint() not implemented!"),null},m.Curve.prototype.getPointAt=function(t){var e=this.getUtoTmapping(t);return this.getPoint(e)},m.Curve.prototype.getPoints=function(t){t||(t=5);var e,r=[];for(e=0;e<=t;e++)r.push(this.getPoint(e/t));return r},m.Curve.prototype.getSpacedPoints=function(t){t||(t=5);var e,r=[];for(e=0;e<=t;e++)r.push(this.getPointAt(e/t));return r},m.Curve.prototype.getLength=function(){var t=this.getLengths();return t[t.length-1]},m.Curve.prototype.getLengths=function(t){if(t||(t=this.__arcLengthDivisions?this.__arcLengthDivisions:200),this.cacheArcLengths&&this.cacheArcLengths.length==t+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;var e,r,i=[],n=this.getPoint(0),a=0;for(i.push(0),r=1;r<=t;r++)e=this.getPoint(r/t),a+=e.distanceTo(n),i.push(a),n=e;return this.cacheArcLengths=i,i},m.Curve.prototype.updateArcLengths=function(){this.needsUpdate=!0,this.getLengths()},m.Curve.prototype.getUtoTmapping=function(t,e){var r,i=this.getLengths(),n=0,a=i.length;r=e||t*i[a-1];for(var o,s=0,l=a-1;s<=l;)if(n=Math.floor(s+(l-s)/2),(o=i[n]-r)<0)s=n+1;else{if(!(o>0)){l=n;break}l=n-1}if(n=l,i[n]==r){var h=n/(a-1);return h}var c=i[n],u=i[n+1],d=u-c,f=(r-c)/d,h=(n+f)/(a-1);return h},m.Curve.prototype.getTangent=function(t){var e=t-1e-4,r=t+1e-4;e<0&&(e=0),r>1&&(r=1);var i=this.getPoint(e);return this.getPoint(r).clone().sub(i).normalize()},m.Curve.prototype.getTangentAt=function(t){var e=this.getUtoTmapping(t);return this.getTangent(e)},m.Curve.Utils={tangentQuadraticBezier:function(t,e,r,i){return 2*(1-t)*(r-e)+2*t*(i-r)},tangentCubicBezier:function(t,e,r,i,n){return-3*e*(1-t)*(1-t)+3*r*(1-t)*(1-t)-6*t*r*(1-t)+6*t*i*(1-t)-3*t*t*i+3*t*t*n},tangentSpline:function(t,e,r,i,n){return 6*t*t-6*t+(3*t*t-4*t+1)+(-6*t*t+6*t)+(3*t*t-2*t)},interpolate:function(t,e,r,i,n){var a=.5*(r-t),o=.5*(i-e),s=n*n;return(2*e-2*r+a+o)*(n*s)+(-3*e+3*r-2*a-o)*s+a*n+e}},m.Curve.create=function(t,e){return t.prototype=(0,n.default)(m.Curve.prototype),t.prototype.getPoint=e,t},m.CurvePath=function(){this.curves=[],this.bends=[],this.autoClose=!1},m.CurvePath.prototype=(0,n.default)(m.Curve.prototype),m.CurvePath.prototype.add=function(t){this.curves.push(t)},m.CurvePath.prototype.checkConnection=function(){},m.CurvePath.prototype.closePath=function(){var t=this.curves[0].getPoint(0),e=this.curves[this.curves.length-1].getPoint(1);t.equals(e)||this.curves.push(new m.LineCurve(e,t))},m.CurvePath.prototype.getPoint=function(t){for(var e,r,i=t*this.getLength(),n=this.getCurveLengths(),a=0;a=i){e=n[a]-i,r=this.curves[a];var o=1-e/r.getLength();return r.getPointAt(o)}a++}return null},m.CurvePath.prototype.getLength=function(){var t=this.getCurveLengths();return t[t.length-1]},m.CurvePath.prototype.getCurveLengths=function(){if(this.cacheLengths&&this.cacheLengths.length==this.curves.length)return this.cacheLengths;var t,e=[],r=0,i=this.curves.length;for(t=0;tt?t=s.x:s.xe?e=s.y:s.yr?r=s.z:s.z0?(g=_[_.length-1],f=g.x,p=g.y):(g=this.actions[r-1].args,f=g[g.length-2],p=g[g.length-1]),v=1;v<=t;v++)y=v/t,x=m.Shape.Utils.b2(y,f,u,s),b=m.Shape.Utils.b2(y,p,d,l),_.push(new m.Vector2(x,b));break;case m.PathActions.BEZIER_CURVE_TO:for(s=o[4],l=o[5],u=o[0],d=o[1],h=o[2],c=o[3],_.length>0?(g=_[_.length-1],f=g.x,p=g.y):(g=this.actions[r-1].args,f=g[g.length-2],p=g[g.length-1]),v=1;v<=t;v++)y=v/t,x=m.Shape.Utils.b3(y,f,u,h,s),b=m.Shape.Utils.b3(y,p,d,c,l),_.push(new m.Vector2(x,b));break;case m.PathActions.CSPLINE_THRU:g=this.actions[r-1].args;var w=new m.Vector2(g[g.length-2],g[g.length-1]),M=[w],S=t*o[0].length;M=M.concat(o[0]);var C=new m.SplineCurve(M);for(v=1;v<=S;v++)_.push(C.getPointAt(v/S));break;case m.PathActions.ARC:var T,E=o[0],A=o[1],F=o[2],L=o[3],P=o[4],D=!!o[5],R=P-L,k=2*t;for(v=1;v<=k;v++)y=v/k,D||(y=1-y),T=L+y*R,x=E+F*Math.cos(T),b=A+F*Math.sin(T),_.push(new m.Vector2(x,b));break;case m.PathActions.ELLIPSE:var T,E=o[0],A=o[1],U=o[2],z=o[3],L=o[4],P=o[5],D=!!o[6],R=P-L,k=2*t;for(v=1;v<=k;v++)y=v/k,D||(y=1-y),T=L+y*R,x=E+U*Math.cos(T),b=A+z*Math.sin(T),_.push(new m.Vector2(x,b))}var V=_[_.length-1];return Math.abs(V.x-_[0].x)<1e-10&&Math.abs(V.y-_[0].y)<1e-10&&_.splice(_.length-1,1),e&&_.push(_[0]),_},m.Path.prototype.toShapes=function(t,e){function r(t){for(var e=[],r=0,i=t.length;r1){for(var v=!1,y=[],x=0,b=u.length;x1e-10){if(h<0&&(o=e[a],l=-l,s=e[n],h=-h),t.ys.y)continue;if(t.y==o.y){if(t.x==o.x)return!0}else{var c=h*(t.x-o.x)-l*(t.y-o.y);if(0==c)return!0;if(c<0)continue;i=!i}}else{if(t.y!=o.y)continue;if(s.x<=t.x&&t.x<=o.x||o.x<=t.x&&t.x<=s.x)return!0}}return i})(M.p,u[C].p)&&(x!=C&&y.push({froms:x,tos:C,hole:w}),S?(S=!1,c[C].push(M)):v=!0);S&&c[x].push(M)}y.length>0&&(v||(d=c))}var T,E,A;for(p=0,g=u.length;p1e-10){var p;if(d>0){if(f<0||f>d)return[];if((p=h*c-l*u)<0||p>d)return[]}else{if(f>0||f0||pC?[]:b==C?a?[]:[y]:_<=C?[y,x]:[y,M]}function n(t,e,r,i){var n=e.x-t.x,a=e.y-t.y,o=r.x-t.x,s=r.y-t.y,l=i.x-t.x,h=i.y-t.y,c=n*s-a*o,u=n*h-a*l;if(Math.abs(c)>1e-10){var d=l*s-h*o;return c>0?u>=0&&d>=0:u>=0||d>=0}return u>0}for(var a,o,s,l,h,c,u={},d=t.concat(),f=0,p=e.length;f0;){if(--_<0){console.log("Infinite Loop! Holes left:"+g.length+", Probably Hole outside Shape!");break}for(o=b;oi&&(o=0);var s=n(m[t],m[a],m[o],r[e]);if(!s)return!1;var l=r.length-1,h=e-1;h<0&&(h=l);var c=e+1;return c>l&&(c=0),!!(s=n(r[e],r[h],r[c],m[t]))}(o,w)&&!function(t,e){var r,n,a;for(r=0;r0)return!0;return!1}(s,l)&&!function(t,r){var n,a,o,s,l;for(n=0;n0)return!0;return!1}(s,l)){a=w,g.splice(y,1),u=m.slice(0,o+1),d=m.slice(o),f=r.slice(a),p=r.slice(0,a+1),m=u.concat(f).concat(p).concat(d),b=o;break}if(a>=0)break;v[c]=!0}if(a>=0)break}}return m}(t,e),v=m.FontUtils.Triangulate(g,!1);for(a=0,o=v.length;ae.length-2?e.length-1:i+1],l=e[i>e.length-3?e.length-1:i+2],h=new m.Vector2;return h.x=m.Curve.Utils.interpolate(a.x,o.x,s.x,l.x,n),h.y=m.Curve.Utils.interpolate(a.y,o.y,s.y,l.y,n),h},m.EllipseCurve=function(t,e,r,i,n,a,o){this.aX=t,this.aY=e,this.xRadius=r,this.yRadius=i,this.aStartAngle=n,this.aEndAngle=a,this.aClockwise=o},m.EllipseCurve.prototype=(0,n.default)(m.Curve.prototype),m.EllipseCurve.prototype.getPoint=function(t){var e=this.aEndAngle-this.aStartAngle;e<0&&(e+=2*Math.PI),e>2*Math.PI&&(e-=2*Math.PI);var r;r=!0===this.aClockwise?this.aEndAngle+(1-t)*(2*Math.PI-e):this.aStartAngle+t*e;var i=new m.Vector2;return i.x=this.aX+this.xRadius*Math.cos(r),i.y=this.aY+this.yRadius*Math.sin(r),i},m.ArcCurve=function(t,e,r,i,n,a){m.EllipseCurve.call(this,t,e,r,r,i,n,a)},m.ArcCurve.prototype=(0,n.default)(m.EllipseCurve.prototype),m.LineCurve3=m.Curve.create(function(t,e){this.v1=t,this.v2=e},function(t){var e=new m.Vector3;return e.subVectors(this.v2,this.v1),e.multiplyScalar(t),e.add(this.v1),e}),m.QuadraticBezierCurve3=m.Curve.create(function(t,e,r){this.v0=t,this.v1=e,this.v2=r},function(t){var e=new m.Vector3;return e.x=m.Shape.Utils.b2(t,this.v0.x,this.v1.x,this.v2.x),e.y=m.Shape.Utils.b2(t,this.v0.y,this.v1.y,this.v2.y),e.z=m.Shape.Utils.b2(t,this.v0.z,this.v1.z,this.v2.z),e}),m.CubicBezierCurve3=m.Curve.create(function(t,e,r,i){this.v0=t,this.v1=e,this.v2=r,this.v3=i},function(t){var e=new m.Vector3;return e.x=m.Shape.Utils.b3(t,this.v0.x,this.v1.x,this.v2.x,this.v3.x),e.y=m.Shape.Utils.b3(t,this.v0.y,this.v1.y,this.v2.y,this.v3.y),e.z=m.Shape.Utils.b3(t,this.v0.z,this.v1.z,this.v2.z,this.v3.z),e}),m.SplineCurve3=m.Curve.create(function(t){this.points=void 0==t?[]:t},function(t){var e=this.points,r=(e.length-1)*t,i=Math.floor(r),n=r-i,a=e[0==i?i:i-1],o=e[i],s=e[i>e.length-2?e.length-1:i+1],l=e[i>e.length-3?e.length-1:i+2],h=new m.Vector3;return h.x=m.Curve.Utils.interpolate(a.x,o.x,s.x,l.x,n),h.y=m.Curve.Utils.interpolate(a.y,o.y,s.y,l.y,n),h.z=m.Curve.Utils.interpolate(a.z,o.z,s.z,l.z,n),h}),m.ClosedSplineCurve3=m.Curve.create(function(t){this.points=void 0==t?[]:t},function(t){var e=this.points,r=(e.length-0)*t,i=Math.floor(r),n=r-i;i+=i>0?0:(Math.floor(Math.abs(i)/e.length)+1)*e.length;var a=e[(i-1)%e.length],o=e[i%e.length],s=e[(i+1)%e.length],l=e[(i+2)%e.length],h=new m.Vector3;return h.x=m.Curve.Utils.interpolate(a.x,o.x,s.x,l.x,n),h.y=m.Curve.Utils.interpolate(a.y,o.y,s.y,l.y,n),h.z=m.Curve.Utils.interpolate(a.z,o.z,s.z,l.z,n),h}),m.AnimationHandler={LINEAR:0,CATMULLROM:1,CATMULLROM_FORWARD:2,add:function(){console.warn("THREE.AnimationHandler.add() has been deprecated.")},get:function(){console.warn("THREE.AnimationHandler.get() has been deprecated.")},remove:function(){console.warn("THREE.AnimationHandler.remove() has been deprecated.")},animations:[],init:function(t){if(!0!==t.initialized){for(var e=0;eo.index;)o=s,s=this.getNextKeyWith(a,t,s.index+1);i.prevKey[a]=o,i.nextKey[a]=s}}},m.Animation.prototype.resetBlendWeights=function(){for(var t=0,e=this.hierarchy.length;tt.length-2?i:i+1,d[3]=i>t.length-3?i:i+2,l=t[d[0]],h=t[d[1]],c=t[d[2]],u=t[d[3]],o=n*n,s=n*o,f[0]=a(l[0],h[0],c[0],u[0],n,o,s),f[1]=a(l[1],h[1],c[1],u[1],n,o,s),f[2]=a(l[2],h[2],c[2],u[2],n,o,s),f},a=function(t,e,r,i,n,a,o){var s=.5*(r-t),l=.5*(i-e);return(2*(e-r)+s+l)*o+(-3*(e-r)-2*s-l)*a+s*n+e};return function(a){if(!1!==this.isPlaying&&(this.currentTime+=a*this.timeScale,0!==this.weight)){var o=this.data.length;if(this.currentTime>o||this.currentTime<0){if(!this.loop)return void this.stop();this.currentTime%=o,this.currentTime<0&&(this.currentTime+=o),this.reset()}for(var s=0,l=this.hierarchy.length;s0&&g.time<=this.currentTime||this.timeScale<0&&p.time>=this.currentTime){for(p=this.data.hierarchy[s].keys[0],g=this.getNextKeyWith(f,s,1);g.timep.index;)p=g,g=this.getNextKeyWith(f,s,g.index+1);c.prevKey[f]=p,c.nextKey[f]=g}h.matrixAutoUpdate=!0,h.matrixWorldNeedsUpdate=!0;var v=(this.currentTime-p.time)/(g.time-p.time),y=p[f],x=g[f];if(v<0&&(v=0),v>1&&(v=1),"pos"===f){if(this.interpolationType===m.AnimationHandler.LINEAR){r.x=y[0]+(x[0]-y[0])*v,r.y=y[1]+(x[1]-y[1])*v,r.z=y[2]+(x[2]-y[2])*v;var b=this.weight/(this.weight+u.positionWeight);h.position.lerp(r,b),u.positionWeight+=this.weight}else if(this.interpolationType===m.AnimationHandler.CATMULLROM||this.interpolationType===m.AnimationHandler.CATMULLROM_FORWARD){t[0]=this.getPrevKeyWith("pos",s,p.index-1).pos,t[1]=y,t[2]=x,t[3]=this.getNextKeyWith("pos",s,g.index+1).pos,v=.33*v+.33;var _=n(t,v),b=this.weight/(this.weight+u.positionWeight);u.positionWeight+=this.weight;var w=h.position;if(w.x=w.x+(_[0]-w.x)*b,w.y=w.y+(_[1]-w.y)*b,w.z=w.z+(_[2]-w.z)*b,this.interpolationType===m.AnimationHandler.CATMULLROM_FORWARD){var M=n(t,1.01*v);e.set(M[0],M[1],M[2]),e.sub(w),e.y=0,e.normalize();var S=Math.atan2(e.x,e.z);h.rotation.set(0,S,0)}}}else if("rot"===f)if(m.Quaternion.slerp(y,x,i,v),0===u.quaternionWeight)h.quaternion.copy(i),u.quaternionWeight=this.weight;else{var b=this.weight/(this.weight+u.quaternionWeight);m.Quaternion.slerp(h.quaternion,i,h.quaternion,b),u.quaternionWeight+=this.weight}else if("scl"===f){r.x=y[0]+(x[0]-y[0])*v,r.y=y[1]+(x[1]-y[1])*v,r.z=y[2]+(x[2]-y[2])*v;var b=this.weight/(this.weight+u.scaleWeight);h.scale.lerp(r,b),u.scaleWeight+=this.weight}}return!0}}}(),m.Animation.prototype.getNextKeyWith=function(t,e,r){var i=this.data.hierarchy[e].keys;for(this.interpolationType===m.AnimationHandler.CATMULLROM||this.interpolationType===m.AnimationHandler.CATMULLROM_FORWARD?r=r0?r:0:r>=0?r:r+i.length;r>=0;r--)if(void 0!==i[r][t])return i[r];return this.data.hierarchy[e].keys[i.length-1]},m.KeyFrameAnimation=function(t){this.root=t.node,this.data=m.AnimationHandler.init(t),this.hierarchy=m.AnimationHandler.parse(this.root),this.currentTime=0,this.timeScale=.001,this.isPlaying=!1,this.isPaused=!0,this.loop=!0;for(var e=0,r=this.hierarchy.length;ee&&(this.currentTime%=e),this.currentTime=Math.min(this.currentTime,e);for(var r=0,i=this.hierarchy.length;rl.index;)l=h,h=o[l.index+1];s.prevKey=l,s.nextKey=h}h.time>=this.currentTime?l.interpolate(h,this.currentTime):l.interpolate(h,h.time),this.data.hierarchy[r].node.updateMatrix(),n.matrixWorldNeedsUpdate=!0}}}},m.KeyFrameAnimation.prototype.getNextKeyWith=function(t,e,r){var i=this.data.hierarchy[e].keys;for(r%=i.length;r=0?r:r+i.length;r>=0;r--)if(i[r].hasTarget(t))return i[r];return i[i.length-1]},m.MorphAnimation=function(t){this.mesh=t,this.frames=t.morphTargetInfluences.length,this.currentTime=0,this.duration=1e3,this.loop=!0,this.isPlaying=!1},m.MorphAnimation.prototype={play:function(){this.isPlaying=!0},pause:function(){this.isPlaying=!1},update:function(){var t=0,e=0;return function(r){if(!1!==this.isPlaying){this.currentTime+=r,!0===this.loop&&this.currentTime>this.duration&&(this.currentTime%=this.duration),this.currentTime=Math.min(this.currentTime,this.duration);var i=this.duration/this.frames,n=Math.floor(this.currentTime/i);n!=e&&(this.mesh.morphTargetInfluences[t]=0,this.mesh.morphTargetInfluences[e]=1,this.mesh.morphTargetInfluences[n]=0,t=e,e=n),this.mesh.morphTargetInfluences[n]=this.currentTime%i/i,this.mesh.morphTargetInfluences[t]=1-this.mesh.morphTargetInfluences[n]}}}()},m.BoxGeometry=function(t,e,r,i,n,a){function o(t,e,r,i,n,a,o,l){var h,c,u,d=s.widthSegments,f=s.heightSegments,p=n/2,g=a/2,v=s.vertices.length;"x"===t&&"y"===e||"y"===t&&"x"===e?h="z":"x"===t&&"z"===e||"z"===t&&"x"===e?(h="y",f=s.depthSegments):("z"===t&&"y"===e||"y"===t&&"z"===e)&&(h="x",d=s.depthSegments);var y=d+1,x=f+1,b=n/d,_=a/f,w=new m.Vector3;for(w[h]=o>0?1:-1,u=0;u0)for(this.vertices.push(new m.Vector3(0,l,0)),o=0;o0)for(this.vertices.push(new m.Vector3(0,-l,0)),o=0;o1e-10){var f=Math.sqrt(c),p=Math.sqrt(l*l+h*h),g=e.x-s/f,v=e.y+o/f,y=r.x-h/p,x=r.y+l/p,b=((y-g)*h-(x-v)*l)/(o*h-s*l);i=g+o*b-t.x,n=v+s*b-t.y;var _=i*i+n*n;if(_<=2)return new m.Vector2(i,n);a=Math.sqrt(_/2)}else{var w=!1;o>1e-10?l>1e-10&&(w=!0):o<-1e-10?l<-1e-10&&(w=!0):(0,d.default)(s)==(0,d.default)(h)&&(w=!0),w?(i=-s,n=o,a=Math.sqrt(c)):(i=o,n=s,a=Math.sqrt(c/2))}return new m.Vector2(i/a,n/a)}function n(t,e){var r,i;for(q=t.length;--q>=0;){r=q,i=q-1,i<0&&(i=t.length-1);var n=0,a=_+2*y;for(n=0;n=0;B--){for(I=B/y,O=g*(1-I),N=v*Math.sin(I*Math.PI/2),q=0,$=V.length;q<$;q++)G=r(V[q],X[q],N),a(G.x,G.y,p+O);for(A=0,F=k.length;A65535?Uint32Array:Uint16Array)(o*s*6),y=0;y1e-4&&(p.normalize(),i=Math.acos(m.Math.clamp(u[l-1].dot(u[l]),-1,1)),d[l].applyMatrix4(g.makeRotationAxis(p,i))),f[l].crossVectors(u[l],d[l]);if(r)for(i=Math.acos(m.Math.clamp(d[0].dot(d[v-1]),-1,1)),i/=v-1,u[0].dot(p.crossVectors(d[0],d[v-1]))>0&&(i=-i),l=1;l.9&&C<.1&&(_<.2&&(b[0].x+=1),w<.2&&(b[1].x+=1),M<.2&&(b[2].x+=1))}for(var c=0,u=this.vertices.length;c.99999?this.quaternion.set(0,0,0,1):r.y<-.99999?this.quaternion.set(1,0,0,0):(e.set(r.z,0,-r.x).normalize(),t=Math.acos(r.y),this.quaternion.setFromAxisAngle(e,t))}}(),m.ArrowHelper.prototype.setLength=function(t,e,r){void 0===e&&(e=.2*t),void 0===r&&(r=.2*e),this.line.scale.set(1,t,1),this.line.updateMatrix(),this.cone.scale.set(r,e,r),this.cone.position.y=t,this.cone.updateMatrix()},m.ArrowHelper.prototype.setColor=function(t){this.line.material.color.set(t),this.cone.material.color.set(t)},m.BoxHelper=function(t){var e=new m.BufferGeometry;e.addAttribute("position",new m.BufferAttribute(new Float32Array(72),3)),m.Line.call(this,e,new m.LineBasicMaterial({color:16776960}),m.LinePieces),void 0!==t&&this.update(t)},m.BoxHelper.prototype=(0,n.default)(m.Line.prototype),m.BoxHelper.prototype.update=function(t){var e=t.geometry;null===e.boundingBox&&e.computeBoundingBox();var r=e.boundingBox.min,i=e.boundingBox.max,n=this.geometry.attributes.position.array;n[0]=i.x,n[1]=i.y,n[2]=i.z,n[3]=r.x,n[4]=i.y,n[5]=i.z,n[6]=r.x,n[7]=i.y,n[8]=i.z,n[9]=r.x,n[10]=r.y,n[11]=i.z,n[12]=r.x,n[13]=r.y,n[14]=i.z,n[15]=i.x,n[16]=r.y,n[17]=i.z,n[18]=i.x,n[19]=r.y,n[20]=i.z,n[21]=i.x,n[22]=i.y,n[23]=i.z,n[24]=i.x,n[25]=i.y,n[26]=r.z,n[27]=r.x,n[28]=i.y,n[29]=r.z,n[30]=r.x,n[31]=i.y,n[32]=r.z,n[33]=r.x,n[34]=r.y,n[35]=r.z,n[36]=r.x,n[37]=r.y,n[38]=r.z,n[39]=i.x,n[40]=r.y,n[41]=r.z,n[42]=i.x,n[43]=r.y,n[44]=r.z,n[45]=i.x,n[46]=i.y,n[47]=r.z,n[48]=i.x,n[49]=i.y,n[50]=i.z,n[51]=i.x,n[52]=i.y,n[53]=r.z,n[54]=r.x,n[55]=i.y,n[56]=i.z,n[57]=r.x,n[58]=i.y,n[59]=r.z,n[60]=r.x,n[61]=r.y,n[62]=i.z,n[63]=r.x,n[64]=r.y,n[65]=r.z,n[66]=i.x,n[67]=r.y,n[68]=i.z,n[69]=i.x,n[70]=r.y,n[71]=r.z,this.geometry.attributes.position.needsUpdate=!0,this.geometry.computeBoundingSphere(),this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1},m.BoundingBoxHelper=function(t,e){var r=void 0!==e?e:8947848;this.object=t,this.box=new m.Box3,m.Mesh.call(this,new m.BoxGeometry(1,1,1),new m.MeshBasicMaterial({color:r,wireframe:!0}))},m.BoundingBoxHelper.prototype=(0,n.default)(m.Mesh.prototype),m.BoundingBoxHelper.prototype.update=function(){this.box.setFromObject(this.object),this.box.size(this.scale),this.box.center(this.position)},m.CameraHelper=function(t){function e(t,e,i){r(t,i),r(e,i)}function r(t,e){i.vertices.push(new m.Vector3),i.colors.push(new m.Color(e)),void 0===a[t]&&(a[t]=[]),a[t].push(i.vertices.length-1)}var i=new m.Geometry,n=new m.LineBasicMaterial({color:16777215,vertexColors:m.FaceColors}),a={};e("n1","n2",16755200),e("n2","n4",16755200),e("n4","n3",16755200),e("n3","n1",16755200),e("f1","f2",16755200),e("f2","f4",16755200),e("f4","f3",16755200),e("f3","f1",16755200),e("n1","f1",16755200),e("n2","f2",16755200),e("n3","f3",16755200),e("n4","f4",16755200),e("p","n1",16711680),e("p","n2",16711680),e("p","n3",16711680),e("p","n4",16711680),e("u1","u2",43775),e("u2","u3",43775),e("u3","u1",43775),e("c","t",16777215),e("p","c",3355443),e("cn1","cn2",3355443),e("cn3","cn4",3355443),e("cf1","cf2",3355443),e("cf3","cf4",3355443),m.Line.call(this,i,n,m.LinePieces),this.camera=t,this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1,this.pointMap=a,this.update()},m.CameraHelper.prototype=(0,n.default)(m.Line.prototype),m.CameraHelper.prototype.update=function(){var t,e,r=new m.Vector3,i=new m.Camera,n=function(n,a,o,s){r.set(a,o,s).unproject(i);var l=e[n];if(void 0!==l)for(var h=0,c=l.length;h1){var h=l[1];l[2];i[h]||(i[h]={start:1/0,end:-1/0});var c=i[h];ac.end&&(c.end=a),e||(e=h)}}for(var h in i){var c=i[h];this.createAnimation(h,c.start,c.end,t)}this.firstAnimation=e},m.MorphBlendMesh.prototype.setAnimationDirectionForward=function(t){var e=this.animationsMap[t];e&&(e.direction=1,e.directionBackwards=!1)},m.MorphBlendMesh.prototype.setAnimationDirectionBackward=function(t){var e=this.animationsMap[t];e&&(e.direction=-1,e.directionBackwards=!0)},m.MorphBlendMesh.prototype.setAnimationFPS=function(t,e){var r=this.animationsMap[t];r&&(r.fps=e,r.duration=(r.end-r.start)/r.fps)},m.MorphBlendMesh.prototype.setAnimationDuration=function(t,e){var r=this.animationsMap[t];r&&(r.duration=e,r.fps=(r.end-r.start)/r.duration)},m.MorphBlendMesh.prototype.setAnimationWeight=function(t,e){var r=this.animationsMap[t];r&&(r.weight=e)},m.MorphBlendMesh.prototype.setAnimationTime=function(t,e){var r=this.animationsMap[t];r&&(r.time=e)},m.MorphBlendMesh.prototype.getAnimationTime=function(t){var e=0,r=this.animationsMap[t];return r&&(e=r.time),e},m.MorphBlendMesh.prototype.getAnimationDuration=function(t){var e=-1,r=this.animationsMap[t];return r&&(e=r.duration),e},m.MorphBlendMesh.prototype.playAnimation=function(t){var e=this.animationsMap[t];e?(e.time=0,e.active=!0):console.warn("animation["+t+"] undefined")},m.MorphBlendMesh.prototype.stopAnimation=function(t){var e=this.animationsMap[t];e&&(e.active=!1)},m.MorphBlendMesh.prototype.update=function(t){for(var e=0,r=this.animationsList.length;ei.duration||i.time<0)&&(i.direction*=-1,i.time>i.duration&&(i.time=i.duration,i.directionBackwards=!0),i.time<0&&(i.time=0,i.directionBackwards=!1)):(i.time=i.time%i.duration,i.time<0&&(i.time+=i.duration));var a=i.startFrame+m.Math.clamp(Math.floor(i.time/n),0,i.length-1),o=i.weight;a!==i.currentFrame&&(this.morphTargetInfluences[i.lastFrame]=0,this.morphTargetInfluences[i.currentFrame]=1*o,this.morphTargetInfluences[a]=0,i.lastFrame=i.currentFrame,i.currentFrame=a);var s=i.time%n/n;i.directionBackwards&&(s=1-s),this.morphTargetInfluences[i.currentFrame]=s*o,this.morphTargetInfluences[i.lastFrame]=(1-s)*o}}}}).call(e,r(1077)(t))},480:function(t,e,r){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}var n=r(402),a=(i(n),r(30)),o=i(a),s=r(409),l=i(s);r(406);var h=r(403),c=i(h);r(404);var u=r(410),d=i(u),f=r(401),p=i(f),m=r(252),g=i(m),v=r(251),y=i(v);r(407);var x=r(400),b=i(x),_=r(399),w=i(_);r(405),r(408),w.default.bootstrap(),o.default.use(c.default),o.default.use(d.default),o.default.use(g.default),y.default.configure({showSpinner:!1});var M=new d.default({routes:b.default});M.beforeEach(function(t,e,r){y.default.start(),"/login"==t.path&&sessionStorage.removeItem("user"),JSON.parse(sessionStorage.getItem("user"))||"/login"==t.path?r():r({path:"/login"})}),M.afterEach(function(t){y.default.done()}),new o.default({router:M,store:p.default,render:function(t){return t(l.default)}}).$mount("#app")},481:function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Plans=e.Maintains=e.Categories=e.Users=e.LoginUsers=void 0;for(var i=r(1033),n=function(t){return t&&t.__esModule?t:{default:t}}(i),a=[{id:1,username:"admin",password:"123456",avatar:"https://avatars1.githubusercontent.com/u/16631463?v=4&s=460",name:"Admin"}],o=[],s=[],l=[],h=[],c=0;c<86;c++)o.push(n.default.mock({id:n.default.Random.guid(),siteName:n.default.Random.cname(),deviceNo:n.default.Random.integer(0,50),startTime:n.default.Random.date(),repeat:["一次","每天","每周","每季","每年"],type:["充电","放电","内阻"],state:n.default.Random.integer(0,1)}));for(var u=0;u<5;u++)s.push(n.default.mock({id:n.default.Random.guid(),name:n.default.Random.cname(),option:[]}));for(var d=0;d<20;d++)l.push(n.default.mock({strMaintainId:n.default.Random.id(),"strTitle|1":["空调新风设备维护","ups设备维护","油机维护","配电设备维护","机架设备维护","消防设备维护"],"strContent|1":["定期对设备进行维护","定期对设备进行维护","定期对设备进行维护","定期对设备进行维护","定期对设备进行维护","定期对设备进行维护"],createTime:n.default.Random.date(),updateTime:n.default.Random.date(),cStartTime:n.default.Random.date(),cEndTime:n.default.Random.date(),uStartTime:n.default.Random.date(),uEndTime:n.default.Random.date()}));for(var f=0;f<21;f++)h.push(n.default.mock({strPlanId:n.default.Random.guid(),strMaintainId:n.default.Random.guid(),executeTime:n.default.Random.datetime(),isCycle:n.default.Random.integer(0,1),"cycleDay|1":["1","2","3","4","5"],"executeHour|1":["2","4","6","8","10"],"executeMinute|1":["5","10","15","20","30"],"description|1":["定期对设备进行维护,1个月一次","定期对设备进行维护,1周一次","定期对设备进行维护,1天一次","定期对设备进行维护,两周一次","定期对设备进行维护,12小时一次","定期对设备进行维护,1季度一次"],equipmentCategory:n.default.Random.guid(),equipmentId:n.default.Random.guid(),"strTitle|1":["空调新风设备维护","ups设备维护","油机维护","配电设备维护","机架设备维护","消防设备维护"],"strContent|1":["定期对设备进行维护","定期对设备进行维护","定期对设备进行维护","定期对设备进行维护","定期对设备进行维护","定期对设备进行维护"],cStartTime:n.default.Random.date(),cEndTime:n.default.Random.date(),uStartTime:n.default.Random.date(),uEndTime:n.default.Random.date()}));e.LoginUsers=a,e.Users=o,e.Categories=s,e.Maintains=l,e.Plans=h},482:function(t,e,r){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=r(177),a=i(n),o=r(263),s=i(o),l=r(175),h=i(l),c=r(444),u=i(c),d=r(481),f=d.Users,p=d.Categories,m=d.Maintains,g=d.Plans;e.default={bootstrap:function(){var t=new u.default(h.default);t.onGet("/success").reply(200,{msg:"success"}),t.onGet("/error").reply(500,{msg:"failure"}),t.onPost("/login").reply(function(t){var e=JSON.parse(t.data),r=e.username,i=e.password;return new s.default(function(t,e){var n=null;setTimeout(function(){var e=d.LoginUsers.some(function(t){if(t.username===r&&t.password===i)return n=JSON.parse((0,a.default)(t)),n.password=void 0,!0});t(e?[200,{code:200,msg:"请求成功",user:n}]:[200,{code:500,msg:"账号或密码错误"}])},1e3)})}),t.onGet("/user/list").reply(function(t){var e=t.params,r=(e.curPage,e.pageSize,e.siteName),i=f.filter(function(t){return!r||-1!=t.siteName.indexOf(r)});return new s.default(function(t,e){setTimeout(function(){t([200,{users:i}])},1e3)})}),t.onGet("/user/listpage").reply(function(t){var e=t.params,r=e.curPage,i=e.pageSize,n=e.siteName,a=f.filter(function(t){return!n||-1!=t.siteName.indexOf(n)}),o=a.length;return a=a.filter(function(t,e){return e=i*(r-1)}),new s.default(function(t,e){setTimeout(function(){t([200,{total:o,users:a}])},1e3)})}),t.onGet("/user/remove").reply(function(t){var e=t.params.id;return f=f.filter(function(t){return t.id!==e}),new s.default(function(t,e){setTimeout(function(){t([200,{code:200,msg:"删除成功"}])},500)})}),t.onGet("/user/batchremove").reply(function(t){var e=t.params.ids;return e=e.split(","),f=f.filter(function(t){return!e.includes(t.id)}),new s.default(function(t,e){setTimeout(function(){t([200,{code:200,msg:"删除成功"}])},500)})}),t.onGet("/user/edit").reply(function(t){var e=t.params,r=e.id,i=e.siteName,n=e.deviceNo,a=e.startTime,o=e.repeat,l=e.state,h=e.type;return f.some(function(t){if(t.id===r)return t.siteName=i,t.deviceNo=n,t.startTime=a,t.repeat=o,t.state=l,t.type=h,!0}),new s.default(function(t,e){setTimeout(function(){t([200,{code:200,msg:"编辑成功"}])},500)})}),t.onGet("/user/add").reply(function(t){var e=t.params,r=e.siteName,i=e.deviceNo,n=e.startTime,a=e.repeat,o=e.state,l=e.type;return f.push({siteName:r,deviceNo:i,startTime:n,repeat:a,state:o,type:l}),new s.default(function(t,e){setTimeout(function(){t([200,{code:200,msg:"新增成功"}])},500)})}),t.onGet("/category/list").reply(function(t){var e=t.params.name,r=p.filter(function(t){return!e||-1!=t.name.indexOf(e)});return new s.default(function(t,e){setTimeout(function(){t([200,{categories:r}])},1e3)})}),t.onGet("/category/listpage").reply(function(t){var e=t.params,r=e.page,i=e.name,n=p.filter(function(t){return!i||-1!=t.name.indexOf(i)}),a=n.length;return n=n.filter(function(t,e){return e<20*r&&e>=20*(r-1)}),new s.default(function(t,e){setTimeout(function(){t([200,{total:a,categories:n}])},1e3)})}),t.onGet("/category/remove").reply(function(t){var e=t.params.id;return p=p.filter(function(t){return t.id!==e}),new s.default(function(t,e){setTimeout(function(){t([200,{code:200,msg:"删除成功"}])},500)})}),t.onGet("/category/batchremove").reply(function(t){var e=t.params.ids;return e=e.split(","),p=p.filter(function(t){return!e.includes(t.id)}),new s.default(function(t,e){setTimeout(function(){t([200,{code:200,msg:"删除成功"}])},500)})}),t.onGet("/category/edit").reply(function(t){var e=t.params,r=e.id,i=e.name,n=e.option;return p.some(function(t){if(t.id===r)return t.name=i,t.option=n,!0}),new s.default(function(t,e){setTimeout(function(){t([200,{code:200,msg:"编辑成功"}])},500)})}),t.onGet("/category/add").reply(function(t){var e=t.params,r=e.name,i=e.option;return p.push({name:r,option:i}),new s.default(function(t,e){setTimeout(function(){t([200,{code:200,msg:"新增成功"}])},500)})}),t.onGet("/maintain/list").reply(function(t){var e=t.params,r=e.strTitle,i=e.strContent,n=m.filter(function(t){return!r||-1!=t.strTitle.indexOf(r)||!i||-1!=t.strContent.indexOf(i)});return new s.default(function(t,e){setTimeout(function(){t([200,{maintains:n}])},1e3)})}),t.onGet("/maintain/listpage").reply(function(t){var e=t.params,r=e.curPage,i=e.pageSize,n=e.strTitle,a=e.strContent,o=m.filter(function(t){return!(n&&-1==t.strTitle.indexOf(n)||a&&-1==t.strContent.indexOf(a))}),l=o.length;return o=o.filter(function(t,e){return e=i*(r-1)}),new s.default(function(t,e){setTimeout(function(){t([200,{total:l,maintains:o}])},1e3)})}),t.onGet("/maintain/remove").reply(function(t){var e=t.params.strMaintainId;return m=m.filter(function(t){return t.strMaintainId!==e}),new s.default(function(t,e){setTimeout(function(){t([200,{code:200,msg:"删除成功"}])},500)})}),t.onGet("/maintain/batchremove").reply(function(t){var e=t.params.ids;return e=e.split(","),m=m.filter(function(t){return!e.includes(t.strMaintainId)}),new s.default(function(t,e){setTimeout(function(){t([200,{code:200,msg:"删除成功"}])},500)})}),t.onGet("/maintain/edit").reply(function(t){var e=t.params,r=e.strMaintainId,i=e.strTitle,n=e.strContent,a=e.cStartTime,o=e.cEndTime,l=e.uStartTime,h=e.uEndTime;return m.some(function(t){if(t.strMaintainId===r)return t.strTitle=i,t.strContent=n,t.cStartTime=a,t.cEndTime=o,t.uStartTime=l,t.uEndTime=h,!0}),new s.default(function(t,e){setTimeout(function(){t([200,{code:200,msg:"编辑成功"}])},500)})}),t.onGet("/maintain/add").reply(function(t){var e=t.params,r=e.strTitle,i=e.strContent,n=e.cStartTime,a=e.cEndTime,o=e.uStartTime,l=e.uEndTime;return m.push({strTitle:r,strContent:i,cStartTime:n,cEndTime:a,uStartTime:o,uEndTime:l}),new s.default(function(t,e){setTimeout(function(){t([200,{code:200,msg:"新增成功"}])},500)})}),t.onGet("/plan/list").reply(function(t){var e=t.params,r=(e.curPage,e.pageSize,e.executeTime,e.isCycle,g.filter(function(t){return!0}));return new s.default(function(t,e){setTimeout(function(){t([200,{plans:r}])},1e3)})}),t.onGet("/plan/listpage").reply(function(t){var e=t.params,r=e.curPage,i=e.pageSize,n=g.filter(function(t){return!0}),a=n.length;return n=n.filter(function(t,e){return e=i*(r-1)}),new s.default(function(t,e){setTimeout(function(){t([200,{total:a,plans:n}])},1e3)})}),t.onGet("/plan/remove").reply(function(t){var e=t.params.strPlanId;return g=g.filter(function(t){return t.strPlanId!==e}),new s.default(function(t,e){setTimeout(function(){t([200,{code:200,msg:"删除成功"}])},500)})}),t.onGet("/plan/batchremove").reply(function(t){var e=t.params.ids;return e=e.split(","),g=g.filter(function(t){return!e.includes(t.strPlanId)}),new s.default(function(t,e){setTimeout(function(){t([200,{code:200,msg:"删除成功"}])},500)})}),t.onGet("/plan/edit").reply(function(t){var e=t.params,r=e.strPlanId,i=e.strMaintainId,n=e.executeTime,a=e.isCycle,o=e.cycleDay,l=e.executeHour,h=e.executeMinute,c=e.description,u=e.equipmentCategory,d=e.equipmentId;return g.some(function(t){if(t.strPlanId===r)return t.strMaintainId=i,t.executeTime=n,t.isCycle=a,t.cycleDay=o,t.executeHour=l,t.executeMinute=h,t.description=c,t.equipmentCategory=u,t.equipmentId=d,!0}),new s.default(function(t,e){setTimeout(function(){t([200,{code:200,msg:"编辑成功"}])},500)})}),t.onGet("/plan/add").reply(function(t){var e=t.params,r=(e.strPlanId,e.strMaintainId),i=e.executeTime,n=e.isCycle,a=e.cycleDay,o=e.executeHour,l=e.executeMinute,h=e.description,c=e.equipmentCategory,u=e.equipmentId;return g.push({strMaintainId:r,executeTime:i,isCycle:n,cycleDay:a,executeHour:o,executeMinute:l,description:h,equipmentCategory:c,equipmentId:u}),new s.default(function(t,e){setTimeout(function(){t([200,{code:200,msg:"新增成功"}])},500)})})}}},483:function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0});e.increment=function(t){(0,t.commit)("INCREMENT")},e.decrement=function(t){(0,t.commit)("DECREMENT")}},484:function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0});e.getCount=function(t){return t.count}},77:function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.addPlan=e.editPlan=e.batchRemovePlan=e.removePlan=e.getPlanListPage=e.getPlanList=e.addMaintain=e.editMaintain=e.batchRemoveMaintain=e.removeMaintain=e.getMaintainListPage=e.getMaintainList=e.addCategory=e.editCategory=e.batchRemoveCategory=e.removeCategory=e.getCategoryListPage=e.getCategoryList=e.addUser=e.editUser=e.batchRemoveUser=e.removeUser=e.getUserListPage=e.getUserList=e.requestLogin=void 0;var i=r(175),n=function(t){return t&&t.__esModule?t:{default:t}}(i),a=r(478),o=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e.default=t,e}(a);e.requestLogin=function(t){return n.default.post(o.login,t).then(function(t){return t.data})},e.getUserList=function(t){return n.default.get(o.userList,{params:t})},e.getUserListPage=function(t){return n.default.get(o.userListpage,{params:t})},e.removeUser=function(t){return n.default.get(o.userRemove,{params:t})},e.batchRemoveUser=function(t){return n.default.get(o.userBatchremove,{params:t})},e.editUser=function(t){return n.default.get(o.userEdit,{params:t})},e.addUser=function(t){return n.default.get(o.userAdd,{params:t})},e.getCategoryList=function(t){return n.default.get(o.categoryList,{params:t})},e.getCategoryListPage=function(t){return n.default.get(o.categoryListpage,{params:t})},e.removeCategory=function(t){return n.default.get(o.categoryRemove,{params:t})},e.batchRemoveCategory=function(t){return n.default.get(o.categoryBatchremove,{params:t})},e.editCategory=function(t){return n.default.get(o.categoryEdit,{params:t})},e.addCategory=function(t){return n.default.get(o.categoryAdd,{params:t})},e.getMaintainList=function(t){return n.default.get(o.maintainList,{params:t})},e.getMaintainListPage=function(t){return n.default.get(o.maintainListpage,{params:t})},e.removeMaintain=function(t){return n.default.get(o.maintainRemove,{params:t})},e.batchRemoveMaintain=function(t){return n.default.get(o.maintainBatchremove,{params:t})},e.editMaintain=function(t){return n.default.get(o.maintainEdit,{params:t})},e.addMaintain=function(t){return n.default.get(o.maintainAdd,{params:t})},e.getPlanList=function(t){return n.default.get(o.planList,{params:t})},e.getPlanListPage=function(t){return n.default.get(o.planListpage,{params:t})},e.removePlan=function(t){return n.default.get(o.planRemove,{params:t})},e.batchRemovePlan=function(t){return n.default.get(o.planBatchremove,{params:t})},e.editPlan=function(t){return n.default.get(o.planEdit,{params:t})},e.addPlan=function(t){return n.default.get(o.planAdd,{params:t})}}},[480]); -//# sourceMappingURL=app.5f386973cae10e35e08c.js.map \ No newline at end of file diff --git a/dist/static/js/app.5f386973cae10e35e08c.js.map b/dist/static/js/app.5f386973cae10e35e08c.js.map deleted file mode 100644 index 64e53c79b4e36589a7a923a0ee12da05ce322eee..0000000000000000000000000000000000000000 --- a/dist/static/js/app.5f386973cae10e35e08c.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///static/js/app.5f386973cae10e35e08c.js","webpack:///./src/components/Screenfull/index.vue?64ce","webpack:///./src/components/Tinymce/index.vue","webpack:///./src/components/UploadExcel/index.vue?91a9","webpack:///./src/views/3d/babylonjs.vue?4266","webpack:///./src/views/3d/threejs.vue?04db","webpack:///./src/views/404.vue?59f6","webpack:///./src/views/Home.vue?f2d2","webpack:///./src/views/Login.vue?43b7","webpack:///./src/views/charts/echarts.vue?74b4","webpack:///./src/views/excel/export.vue","webpack:///./src/views/excel/uploadExcel.vue","webpack:///./src/views/nav1/Page1.vue","webpack:///./src/views/nav2/Page2.vue","webpack:///./src/views/nav3/Page3.vue","webpack:///./src/views/nav4/Page4.vue","webpack:///./src/components/Screenfull/index.vue?fa05","webpack:///./src/views/nav1/Page1.vue?cce8","webpack:///./src/views/excel/uploadExcel.vue?a9a2","webpack:///./src/App.vue?0823","webpack:///./src/views/nav3/Page3.vue?90d0","webpack:///./src/views/Login.vue?6b99","webpack:///./src/views/3d/threejs.vue?81be","webpack:///./src/components/Tinymce/index.vue?3a43","webpack:///./src/components/UploadExcel/index.vue?67f2","webpack:///./src/views/Home.vue?a193","webpack:///./src/views/404.vue?b86f","webpack:///./src/views/charts/echarts.vue?26e3","webpack:///./src/views/excel/export.vue?54b3","webpack:///./src/views/nav4/Page4.vue?f4e7","webpack:///./src/views/nav2/Page2.vue?89ce","webpack:///./src/views/3d/babylonjs.vue?a807","webpack:///./src/common/js/util.js","webpack:///./src/mock/index.js","webpack:///./src/routes.js","webpack:///./src/vuex/store.js","webpack:///./src/App.vue?35a7","webpack:///App.vue","webpack:///index.vue","webpack:///index.vue?9020","webpack:///index.vue?7f99","webpack:///babylonjs.vue","webpack:///threejs.vue","webpack:///Home.vue","webpack:///Login.vue","webpack:///echarts.vue","webpack:///export.vue","webpack:///uploadExcel.vue","webpack:///Page1.vue","webpack:///Page2.vue","webpack:///Page3.vue","webpack:///Page4.vue","webpack:///./src/api/urlConfig.js","webpack:///./src/assets/libs/three.js","webpack:///./src/main.js","webpack:///./src/mock/data/db.js","webpack:///./src/mock/mock.js","webpack:///./src/vuex/actions.js","webpack:///./src/vuex/getters.js","webpack:///./src/api/api.js"],"names":["webpackJsonp","1016","module","exports","1017","1018","1019","1020","1021","1022","1023","1024","1025","1026","1027","1028","1029","1030","1044","__webpack_require__","Component","1045","1046","1047","1048","1049","1050","1051","1052","1053","1054","1055","1056","1057","1058","1059","render","_vm","this","_h","$createElement","_c","_self","staticClass","attrs","fill","width","height","on","click","staticRenderFns","1060","ref","staticStyle","form","$event","preventDefault","onSubmit","filters","model","value","callback","$$v","$set","expression","_v","pickerOptions2","getMaintains","domProps","_s","panelTitle","stopPropagation","on_refresh","handleAdd","directives","name","rawName","maintains","selsChange","scopedSlots","_u","key","fn","scope","brightenKeyword","row","strTitle","strContent","handleEdit","$index","handleDel","sels","length","batchRemove","listQuery","curPage","pageSize","total","handleSizeChange","handleCurrentChange","editFormVisible","editForm","editFormRules","slot","nativeOn","editLoading","editSubmit","addFormVisible","addForm","addFormRules","addLoading","addSubmit","1061","handleSuccess","beforeUpload","tableData","_l","item","1062","_m","1063","pickerOptions1","label","getPlans","plans","formatCycle","1064","ruleForm2","rules2","checked","logining","handleSubmit2","1065","1066","plugins","1067","handleClick","handleDrop","handleDragover","loading","handleUpload","1068","class","collapsed","_e","$route","path","$router","options","index","hidden","leaf","iconCls","child","children","push","showMenu","collapse","dialogVisible","sysUserAvatar","sysUserName","logout","handleConfirm","1069","1070","1071","filename","autoWidth","downloadLoading","handleDownload","1072","activeNames","text","deviceNo","repeat","join","type","getUsers","users","formatState","1073","handleChange","closeViewTabs","handleCustomDayChange","showAddCustomDayButton","onAddCustomDay","1074","111","padding","s","len","i","Object","defineProperty","SIGN_REGEXP","default","getQueryStringByName","reg","RegExp","r","window","location","search","substr","match","context","formatDate","format","date","pattern","replace","$0","charAt","getFullYear","getMonth","getDate","getDay","getHours","getMinutes","getSeconds","parse","dateString","matchs1","matchs2","_date","Date","_int","parseInt","setFullYear","setMonth","setDate","setHours","setMinutes","setSeconds","1116","1117","398","399","_mock2","obj","__esModule","_mock","mock","400","_interopRequireDefault","_Login2","_Login","_2","_","_Home2","_Home","_Page2","_Page","_Page4","_Page3","_Page6","_Page5","_Page8","_Page7","_echarts2","_echarts","_threejs2","_threejs","_babylonjs2","_babylonjs","_export2","_export","_uploadExcel2","_uploadExcel","_index2","_index","routes","component","Login","NotFound","Home","Page1","Page2","Page3","meta","title","Page4","tinymceEditor","exportExcel","uploadExcel","echarts","threejs","babylonjs","redirect","401","_interopRequireWildcard","newObj","prototype","hasOwnProperty","call","_vue2","_vue","_vuex2","_vuex","actions","getters","Vue","use","Vuex","state","count","mutations","INCREMENT","DECREMENT","Store","404","405","406","407","408","409","463","464","_screenfull","_screenfull2","465","_tinymceVue","_tinymceVue2","466","_promise","_promise2","_xlsx","_xlsx2","props","Function","onSuccess","data","excelData","header","results","methods","generateDate","e","files","$message","error","isExcel","rawFile","upload","dataTransfer","dropEffect","document","getElementById","$refs","readerData","reader","onload","resolve","readAsArrayBuffer","fixdata","l","byteLength","w","get_header_row","C","range","c","cell","sheet","hdr","t","headers","467","468","_three","_three2","469","_methods","_defineProperty2","_defineProperty3","_Screenfull","_Screenfull2","470","_stringify","_stringify2","_api","_nprogress2","_nprogress","471","472","_assign","_assign2","_util","v","j","473","474","475","476","477","_util2","478","login","userList","userListpage","userRemove","userBatchremove","userEdit","userAdd","categoryList","categoryListpage","categoryRemove","categoryBatchremove","categoryEdit","categoryAdd","maintainList","maintainListpage","maintainRemove","maintainBatchremove","maintainEdit","maintainAdd","planList","planListpage","planRemove","planBatchremove","planEdit","planAdd","479","_create","_create2","_keys","_keys2","_defineProperties","_defineProperties2","_sign","_sign2","_typeof2","_typeof3","THREE","REVISION","undefined","Math","sign","x","MOUSE","LEFT","MIDDLE","RIGHT","CullFaceNone","CullFaceBack","CullFaceFront","CullFaceFrontBack","FrontFaceDirectionCW","FrontFaceDirectionCCW","BasicShadowMap","PCFShadowMap","PCFSoftShadowMap","FrontSide","BackSide","DoubleSide","NoShading","FlatShading","SmoothShading","NoColors","FaceColors","VertexColors","NoBlending","NormalBlending","AdditiveBlending","SubtractiveBlending","MultiplyBlending","CustomBlending","AddEquation","SubtractEquation","ReverseSubtractEquation","MinEquation","MaxEquation","ZeroFactor","OneFactor","SrcColorFactor","OneMinusSrcColorFactor","SrcAlphaFactor","OneMinusSrcAlphaFactor","DstAlphaFactor","OneMinusDstAlphaFactor","DstColorFactor","OneMinusDstColorFactor","SrcAlphaSaturateFactor","MultiplyOperation","MixOperation","AddOperation","UVMapping","CubeReflectionMapping","CubeRefractionMapping","SphericalReflectionMapping","SphericalRefractionMapping","RepeatWrapping","ClampToEdgeWrapping","MirroredRepeatWrapping","NearestFilter","NearestMipMapNearestFilter","NearestMipMapLinearFilter","LinearFilter","LinearMipMapNearestFilter","LinearMipMapLinearFilter","UnsignedByteType","ByteType","ShortType","UnsignedShortType","IntType","UnsignedIntType","FloatType","UnsignedShort4444Type","UnsignedShort5551Type","UnsignedShort565Type","AlphaFormat","RGBFormat","RGBAFormat","LuminanceFormat","LuminanceAlphaFormat","RGB_S3TC_DXT1_Format","RGBA_S3TC_DXT1_Format","RGBA_S3TC_DXT3_Format","RGBA_S3TC_DXT5_Format","RGB_PVRTC_4BPPV1_Format","RGB_PVRTC_2BPPV1_Format","RGBA_PVRTC_4BPPV1_Format","RGBA_PVRTC_2BPPV1_Format","Color","color","arguments","setRGB","set","constructor","g","b","copy","setHex","setStyle","hex","floor","setHSL","h","hue2rgb","p","q","style","test","exec","min","ColorKeywords","copyGammaToLinear","copyLinearToGamma","sqrt","convertGammaToLinear","convertLinearToGamma","getHex","getHexString","toString","slice","getHSL","optionalTarget","hue","saturation","hsl","max","lightness","delta","getStyle","offsetHSL","add","addColors","color1","color2","addScalar","multiply","multiplyScalar","lerp","alpha","equals","fromArray","array","toArray","clone","Quaternion","y","z","_x","_y","_z","_w","onChangeCallback","quaternion","setFromEuler","euler","update","Euler","Error","c1","cos","c2","c3","s1","sin","s2","s3","order","setFromAxisAngle","axis","angle","halfAngle","setFromRotationMatrix","m","te","elements","m11","m12","m13","m21","m22","m23","m31","m32","m33","trace","setFromUnitVectors","v1","vFrom","vTo","Vector3","dot","abs","crossVectors","normalize","inverse","conjugate","lengthSq","console","warn","multiplyQuaternions","a","qax","qay","qaz","qaw","qbx","qby","qbz","qbw","multiplyVector3","vector","applyQuaternion","slerp","qb","cosHalfTheta","halfTheta","acos","sinHalfTheta","ratioA","ratioB","offset","onChange","qa","qm","Vector2","setX","setY","setComponent","getComponent","addVectors","sub","subVectors","divide","divideScalar","scalar","invScalar","clamp","clampScalar","minVal","maxVal","ceil","round","roundToZero","negate","distanceTo","distanceToSquared","dx","dy","setLength","oldLength","setZ","multiplyVectors","applyEuler","applyAxisAngle","applyMatrix3","applyMatrix4","applyProjection","d","qx","qy","qz","qw","ix","iy","iz","iw","project","matrix","camera","Matrix4","multiplyMatrices","projectionMatrix","getInverse","matrixWorld","unproject","transformDirection","lengthManhattan","cross","ax","ay","az","bx","by","bz","projectOnVector","projectOnPlane","planeNormal","reflect","normal","angleTo","theta","dz","setEulerFromRotationMatrix","setEulerFromQuaternion","getPositionFromMatrix","setFromMatrixPosition","getScaleFromMatrix","setFromMatrixScale","getColumnFromMatrix","setFromMatrixColumn","sx","sy","sz","me","Vector4","setW","setAxisAngleFromQuaternion","setAxisAngleFromRotationMatrix","PI","xx","yy","zz","xy","xz","yz","_order","DefaultOrder","RotationOrders","asin","atan2","setFromQuaternion","sqx","sqy","sqz","sqw","reorder","newOrder","Line3","start","end","line","center","distanceSq","distance","at","result","closestPointToPointParameter","startP","startEnd","point","clampToLine","startEnd2","startEnd_startP","closestPointToPoint","Box2","Infinity","setFromPoints","points","makeEmpty","il","expandByPoint","setFromCenterAndSize","size","halfSize","box","empty","expandByVector","expandByScalar","containsPoint","containsBox","getParameter","isIntersectionBox","clampPoint","distanceToPoint","intersect","union","translate","Box3","setFromObject","object","updateMatrixWorld","traverse","node","geometry","Geometry","vertices","BufferGeometry","attributes","positions","getBoundingSphere","Sphere","radius","Matrix3","Float32Array","n11","n12","n13","n21","n22","n23","n31","n32","n33","identity","multiplyVector3Array","applyToVector3Array","determinant","f","throwOnInvertible","det","msg","transpose","tmp","flattenToArrayOffset","getNormalMatrix","transposeIntoArray","n14","n24","n34","n41","n42","n43","n44","extractPosition","copyPosition","extractRotation","scaleX","scaleY","scaleZ","makeRotationFromEuler","ae","af","be","bf","ce","cf","de","df","ac","ad","bc","bd","setRotationFromQuaternion","makeRotationFromQuaternion","x2","y2","z2","wx","wy","wz","lookAt","eye","target","up","n","a11","a12","a13","a14","a21","a22","a23","a24","a31","a32","a33","a34","a41","a42","a43","a44","b11","b12","b13","b14","b21","b22","b23","b24","b31","b32","b33","b34","b41","b42","b43","b44","multiplyToArray","multiplyVector4","rotateAxis","crossVector","getPosition","setPosition","rotateX","rotateY","rotateZ","rotateByAxis","scale","getMaxScaleOnAxis","scaleXSq","scaleYSq","scaleZSq","makeTranslation","makeRotationX","makeRotationY","makeRotationZ","makeRotationAxis","tx","ty","makeScale","compose","position","decompose","invSX","invSY","invSZ","makeFrustum","left","right","bottom","top","near","far","makePerspective","fov","aspect","ymax","tan","degToRad","ymin","xmin","xmax","makeOrthographic","Ray","origin","direction","ray","recast","directionDistance","distanceSqToSegment","v0","optionalPointOnRay","optionalPointOnSegment","s0","sqrDist","extDet","segCenter","segDir","segExtent","diff","a01","b0","b1","invDet","isIntersectionSphere","sphere","intersectSphere","tca","d2","radius2","thc","t0","t1","isIntersectionPlane","plane","distToPoint","distanceToPlane","denominator","constant","intersectPlane","intersectBox","tmin","tmax","tymin","tymax","tzmin","tzmax","invdirx","invdiry","invdirz","intersectTriangle","edge1","edge2","backfaceCulling","DdN","DdQxE2","DdE1xQ","QdN","matrix4","optionalCenter","maxRadiusSq","intersectsSphere","radiusSum","deltaLengthSq","getBoundingBox","Frustum","p0","p1","p2","p3","p4","p5","planes","Plane","frustum","setFromMatrix","me0","me1","me2","me3","me4","me5","me6","me7","me8","me9","me10","me11","me12","me13","me14","me15","setComponents","intersectsObject","boundingSphere","computeBoundingSphere","negRadius","intersectsBox","d1","setFromNormalAndCoplanarPoint","setFromCoplanarPoints","v2","inverseNormalLength","distanceToSphere","projectPoint","orthoPoint","perpendicularMagnitude","isIntersectionLine","startSign","endSign","intersectLine","coplanarPoint","m1","optionalNormalMatrix","normalMatrix","newNormal","newCoplanarPoint","generateUUID","chars","split","uuid","Array","rnd","random","clampBottom","mapLinear","a1","a2","b2","smoothstep","smootherstep","random16","randInt","low","high","randFloat","randFloatSpread","degreeToRadiansFactor","degrees","radToDeg","radianToDegreesFactor","radians","isPowerOfTwo","Spline","interpolate","t2","t3","intPoint","weight","w2","w3","pa","pb","pc","pd","v3","initFromArray","getPoint","k","getControlPointsArray","coords","getLength","nSubDivisions","nSamples","oldIntPoint","oldPosition","tmpVec","chunkLengths","totalLength","chunks","reparametrizeByArcLength","samplingCoef","indexCurrent","indexNext","realDistance","sampling","newpoints","sl","Triangle","resultLengthSq","barycoordFromPoint","dot00","dot01","dot02","dot11","dot12","denom","invDenom","u","setFromPointsAndIndices","i0","i1","i2","triangle","area","midpoint","Clock","autoStart","startTime","oldTime","elapsedTime","running","self","performance","now","stop","getElapsedTime","getDelta","newTime","EventDispatcher","apply","addEventListener","hasEventListener","removeEventListener","dispatchEvent","listener","_listeners","listeners","indexOf","listenerArray","splice","event","Raycaster","params","Sprite","Mesh","PointCloud","threshold","LOD","Line","descSort","intersectObject","raycaster","intersects","recursive","raycast","precision","linePrecision","sort","intersectObjects","objects","log","Object3D","Object3DIdCount","parent","DefaultUp","rotation","onRotationChange","onQuaternionChange","enumerable","renderDepth","rotationAutoUpdate","matrixAutoUpdate","matrixWorldNeedsUpdate","visible","castShadow","receiveShadow","frustumCulled","userData","applyMatrix","setRotationFromAxisAngle","setRotationFromEuler","setRotationFromMatrix","rotateOnAxis","q1","translateOnAxis","translateX","translateY","translateZ","localToWorld","worldToLocal","remove","getChildByName","getObjectByName","getObjectById","id","getWorldPosition","getWorldQuaternion","getWorldRotation","getWorldScale","getWorldDirection","traverseVisible","updateMatrix","force","toJSON","output","metadata","version","generator","geometries","parseGeometry","json","materials","parseMaterial","material","parseObject","PerspectiveCamera","OrthographicCamera","AmbientLight","DirectionalLight","intensity","PointLight","SpotLight","exponent","HemisphereLight","groundColor","JSON","Projector","projectVector","unprojectVector","pickingRay","Face3","materialIndex","vertexNormals","vertexColors","vertexTangents","face","Face4","BufferAttribute","itemSize","needsUpdate","copyAt","index1","attribute","index2","setXY","setXYZ","setXYZW","Int8Attribute","Uint8Attribute","Uint8ClampedAttribute","Int16Attribute","Uint16Attribute","Int32Attribute","Uint32Attribute","Float32Attribute","Float64Attribute","GeometryIdCount","attributesKeys","drawcalls","offsets","boundingBox","addAttribute","getAttribute","addDrawCall","indexOffset","fromGeometry","settings","faces","faceVertexUvs","hasFaceVertexUv","hasFaceVertexNormals","normals","colors","uvs","i3","na","nb","nc","fc","vca","vcb","vcc","uva","uvb","uvc","computeBoundingBox","bb","isNaN","computeFaceNormals","computeVertexNormals","vA","vB","vC","pA","pB","pC","cb","ab","indices","jl","normalizeNormals","computeTangents","handleVertex","n2","tan1","tmp2","tan2","tangents","uv","nVertices","tangent","x1","y1","z1","iA","iB","iC","uvA","uvB","uvC","sdir","tdir","computeOffsets","indexBufferSize","facesCount","sortedIndices","Uint16Array","indexPtr","vertexPtr","duplicatedVertices","newVerticeMaps","faceVertices","Int32Array","vertexMap","revVertexMap","findex","vo","vid","new_offset","new_vid","reorderBuffers","merge","indexBuffer","indexMap","vertexCount","sortedAttributes","attr","sourceArray","attrArray","attrSize","sortedAttr","numItems","typeArray","sourceAttr","dispose","morphTargets","morphColors","morphNormals","skinWeights","skinIndices","lineDistances","hasTangents","dynamic","verticesNeedUpdate","elementsNeedUpdate","uvsNeedUpdate","normalsNeedUpdate","tangentsNeedUpdate","colorsNeedUpdate","lineDistancesNeedUpdate","groupsNeedUpdate","fromBufferGeometry","tempNormals","tempUVs","addFace","fl","areaWeighted","vl","computeMorphNormals","__originalFaceNormal","__originalVertexNormals","tmpGeo","faceNormals","faceNormal","dstNormalsFace","dstNormalsVertex","vertexIndex","ua","ub","uc","faceIndex","computeLineDistances","materialIndexOffset","vertexOffset","vertices1","vertices2","faces1","faces2","uvs1","uvs2","vertex","vertexCopy","faceCopy","faceVertexNormals","faceVertexColors","uvCopy","mergeVertices","verticesMap","unique","changes","pow","faceIndicesToRemove","idx","setBit","enabled","getNormalIndex","hash","normalsHash","getColorIndex","colorsHash","getUvIndex","uvsHash","parameters","hasFaceNormal","hasFaceVertexNormal","hasFaceColor","hasFaceVertexColor","faceType","Camera","matrixWorldInverse","CubeCamera","cubeResolution","cameraPX","cameraNX","cameraPY","cameraNY","cameraPZ","cameraNZ","renderTarget","WebGLRenderTargetCube","magFilter","minFilter","updateCubeMap","renderer","scene","generateMipmaps","activeCubeFace","zoom","updateProjectionMatrix","cx","cy","setLens","focalLength","frameHeight","atan","setViewOffset","fullWidth","fullHeight","Light","light","AreaLight","constantAttenuation","linearAttenuation","quadraticAttenuation","onlyShadow","shadowCameraNear","shadowCameraFar","shadowCameraLeft","shadowCameraRight","shadowCameraTop","shadowCameraBottom","shadowCameraVisible","shadowBias","shadowDarkness","shadowMapWidth","shadowMapHeight","shadowCascade","shadowCascadeOffset","shadowCascadeCount","shadowCascadeBias","shadowCascadeWidth","shadowCascadeHeight","shadowCascadeNearZ","shadowCascadeFarZ","shadowCascadeArray","shadowMap","shadowMapSize","shadowCamera","shadowMatrix","skyColor","shadowCameraFov","Cache","file","get","clear","Loader","showStatus","statusDomElement","addStatusElement","imageLoader","ImageLoader","onLoadStart","onLoadProgress","onLoadComplete","crossOrigin","createElement","fontSize","textAlign","background","zIndex","innerHTML","updateProgress","progress","message","loaded","toFixed","extractUrlBase","url","parts","pop","initMaterials","texturePath","createMaterial","needsTangents","ShaderMaterial","nearest_pow2","LN2","create_texture","where","sourceFile","wrap","anisotropy","texture","fullPath","loader","Handlers","load","Texture","image","canvas","getContext","drawImage","wrapS","wrapT","wrapMap","rgb2hex","rgb","mtype","mpars","opacity","map","lightMap","normalMap","bumpMap","wireframe","shading","toLowerCase","blending","transparent","depthTest","depthWrite","flipSided","side","doubleSided","colorDiffuse","DbgColor","colorSpecular","specular","colorAmbient","ambient","colorEmissive","emissive","transparency","specularCoef","shininess","mapDiffuse","mapDiffuseRepeat","mapDiffuseOffset","mapDiffuseWrap","mapDiffuseAnisotropy","mapLight","mapLightRepeat","mapLightOffset","mapLightWrap","mapLightAnisotropy","mapBump","mapBumpRepeat","mapBumpOffset","mapBumpWrap","mapBumpAnisotropy","mapNormal","mapNormalRepeat","mapNormalOffset","mapNormalWrap","mapNormalAnisotropy","mapSpecular","mapSpecularRepeat","mapSpecularOffset","mapSpecularWrap","mapSpecularAnisotropy","mapAlpha","mapAlphaRepeat","mapAlphaOffset","mapAlphaWrap","mapAlphaAnisotropy","mapBumpScale","bumpScale","shader","ShaderLib","uniforms","UniformsUtils","mapNormalFactor","specularMap","fragmentShader","vertexShader","lights","fog","DbgName","handlers","regex","XHRLoader","manager","cache","DefaultLoadingManager","onLoad","onProgress","onError","cached","request","XMLHttpRequest","open","response","itemEnd","responseType","send","itemStart","setResponseType","setCrossOrigin","src","JSONLoader","withCredentials","loadAjaxJSON","callbackProgress","xhr","onreadystatechange","readyState","DONE","status","responseText","LOADING","getResponseHeader","HEADERS_RECEIVED","isBitSet","fi","zLength","colorIndex","normalIndex","uvIndex","isQuad","hasMaterial","faceA","faceB","uvLayer","nUvLayers","influencesPerVertex","bones","animation","animations","dstVertices","srcVertices","cl","dstColors","srcColors","LoadingManager","BufferGeometryLoader","typedArray","MaterialLoader","ObjectLoader","parseGeometries","parseMaterials","geometryLoader","bufferGeometryLoader","PlaneGeometry","widthSegments","heightSegments","BoxGeometry","depth","depthSegments","CircleGeometry","segments","CylinderGeometry","radiusTop","radiusBottom","radialSegments","openEnded","SphereGeometry","phiStart","phiLength","thetaStart","thetaLength","IcosahedronGeometry","detail","TorusGeometry","tube","tubularSegments","arc","TorusKnotGeometry","heightScale","Scene","Group","TextureLoader","CompressedTextureLoader","_parser","images","CompressedTexture","buffer","texDatas","mipmaps","mipmapCount","isCubemap","Material","MaterialIdCount","blendSrc","blendDst","blendEquation","polygonOffset","polygonOffsetFactor","polygonOffsetUnits","alphaTest","overdraw","setValues","values","newValue","currentValue","Number","MeshBasicMaterial","MeshLambertMaterial","MeshPhongMaterial","MeshNormalMaterial","MeshDepthMaterial","SpriteMaterial","LineBasicMaterial","linewidth","linecap","linejoin","LineDashedMaterial","dashSize","gapSize","alphaMap","envMap","combine","reflectivity","refractionRatio","wireframeLinewidth","wireframeLinecap","wireframeLinejoin","skinning","wrapAround","wrapRGB","metal","normalScale","MeshFaceMaterial","PointCloudMaterial","sizeAttenuation","ParticleBasicMaterial","ParticleSystemMaterial","defines","defaultAttributeValues","index0AttributeName","RawShaderMaterial","mapping","TextureIdCount","DEFAULT_IMAGE","DEFAULT_MAPPING","premultiplyAlpha","flipY","unpackAlignment","_needsUpdate","onUpdate","CubeTexture","DataTexture","VideoTexture","video","requestAnimationFrame","HAVE_ENOUGH_DATA","sortParticles","inverseMatrix","localThreshold","testPoint","rayPointDistance","intersectPoint","distanceToRay","oi","ol","pointCount","ParticleSystem","mode","LineStrip","LinePieces","precisionSq","nbVertices","interSegment","interRay","step","distSq","updateMorphTargets","morphTargetBase","morphTargetForcedOrder","morphTargetInfluences","morphTargetDictionary","ml","getMorphTargetIndexByName","intersectionPoint","isFaceMaterial","objectMaterials","morphInfluences","tl","influence","targets","Bone","belongsToSkin","skin","Skeleton","boneInverses","useVertexTexture","identityMatrix","boneTextureWidth","boneTextureHeight","boneMatrices","boneTexture","calculateInverses","bl","pose","bone","offsetMatrix","SkinnedMesh","bindMode","bindMatrix","bindMatrixInverse","gbone","pos","rotq","scl","normalizeSkinWeights","bind","skeleton","sw","MorphAnimMesh","duration","mirroredLoop","time","lastKeyframe","currentKeyframe","directionBackwards","setFrameRange","startKeyframe","endKeyframe","setDirectionForward","setDirectionBackward","parseAnimations","firstAnimation","morph","setAnimationLabel","playAnimation","fps","updateAnimation","frameTime","keyframe","mix","interpolateTargets","influences","addLevel","getObjectForDistance","matrixPosition","Particle","LensFlare","lensFlares","positionScreen","customUpdateCallback","updateLensFlares","flare","vecX","vecY","wantedRotation","overrideMaterial","autoUpdate","Fog","FogExp2","density","ShaderChunk","merged","uniforms_src","uniforms_dst","parameter_src","UniformsLib","common","bump","normalmap","particle","shadowmap","WebGLRenderer","createParticleBuffers","__webglVertexBuffer","_gl","createBuffer","__webglColorBuffer","_this","info","memory","createLineBuffers","__webglLineDistanceBuffer","createMeshBuffers","geometryGroup","__webglNormalBuffer","__webglTangentBuffer","__webglUVBuffer","__webglUV2Buffer","__webglSkinIndicesBuffer","__webglSkinWeightsBuffer","__webglFaceBuffer","__webglLineBuffer","numMorphTargets","__webglMorphTargetsBuffers","numMorphNormals","__webglMorphNormalsBuffers","initCustomAttributes","nvertices","__webglCustomAttributesList","__webglInitialized","createUniqueBuffers","belongsToAttribute","initParticleBuffers","__vertexArray","__colorArray","__sortArray","__webglParticleCount","initLineBuffers","__lineDistanceArray","__webglLineCount","initMeshBuffers","faces3","ntris","nlines","getBufferMaterial","__normalArray","__uvArray","__uv2Array","__tangentArray","__skinIndexArray","__skinWeightArray","UintArray","extensions","Uint32Array","__typeArray","__faceArray","__lineArray","__morphTargetsArrays","__morphNormalsArrays","__webglFaceCount","originalAttribute","property","__original","__inittedArrays","materialNeedsSmoothNormals","setParticleBuffers","hint","ca","cal","customAttribute","vertexArray","colorArray","sortArray","dirtyVertices","dirtyColors","customAttributes","_projScreenMatrixPS","_projScreenMatrix","_vector3","numericalSort","boundTo","bindBuffer","ARRAY_BUFFER","bufferData","setLineBuffers","dl","lineDistanceArray","dirtyLineDistances","setMeshBuffers","faceColor","uv2","n1","n3","sw1","sw2","sw3","si1","si2","si3","vn","uvi","uv2i","vk","vkl","vka","nka","chf","needsSmoothNormals","offset_uv","offset_uv2","offset_face","offset_normal","offset_tangent","offset_line","offset_color","offset_skin","offset_morphTarget","offset_custom","uvArray","uv2Array","normalArray","tangentArray","skinIndexArray","skinWeightArray","morphTargetsArrays","morphNormalsArrays","faceArray","lineArray","dirtyElements","dirtyUvs","dirtyNormals","dirtyTangents","dirtyMorphTargets","morphTargetsNeedUpdate","chunk_faces3","obj_faces","obj_uvs","obj_uvs2","obj_skinIndices","obj_skinWeights","ELEMENT_ARRAY_BUFFER","pp","setDirectBuffers","bufferType","STATIC_DRAW","setupVertexAttributes","program","startIndex","geometryAttributes","programAttributes","programAttributesKeys","programAttribute","geometryAttribute","enableAttribute","vertexAttribPointer","FLOAT","vertexAttrib2fv","vertexAttrib3fv","disableUnusedAttributes","initAttributes","_newAttributes","_enabledAttributes","enableVertexAttribArray","disableVertexAttribArray","setupMorphTargets","numSupportedMorphTargets","__webglMorphTargetInfluences","activeInfluenceIndices","numSupportedMorphNormals","influenceIndex","uniform1fv","painterSortStable","reversePainterSortStable","projectObject","initObject","sprites","webglObjects","_webglObjects","_frustum","updateObject","webglObject","unrollBufferMaterial","sortObjects","renderObjects","renderList","useBlending","setupMatrices","setBlending","setDepthTest","setDepthWrite","setPolygonOffset","setMaterialFaces","renderBufferDirect","renderBuffer","renderObjectsImmediate","materialType","renderImmediateObject","unrollImmediateBufferMaterial","globject","opaque","transparentObjects","opaqueObjects","__webglInit","_modelViewMatrix","_normalMatrix","onObjectRemoved","onGeometryDispose","initGeometryGroups","__webglActive","addBuffer","geometryGroupsList","geometryGroups","ImmediateRenderObject","immediateRenderCallback","addBufferImmediate","_webglObjectsImmediate","makeGroups","usesFaceMaterial","groupHash","group","maxVerticesInGroup","hash_map","groups","groupsList","counter","geometryGroupCounter","addBuffers","objlist","customAttributesDirty","areCustomAttributesDirty","DYNAMIC_DRAW","clearCustomAttributes","removeObject","removeInstances","o","initMaterial","onMaterialDispose","shaderID","__webglShader","maxLightCount","allocateLights","maxShadows","allocateShadows","maxBones","allocateBones","_precision","supportsVertexTextures","_supportsVertexTextures","useFog","fogExp","logarithmicDepthBuffer","_logarithmicDepthBuffer","_supportsBoneTextures","maxMorphTargets","maxMorphNormals","maxDirLights","directional","maxPointLights","maxSpotLights","spot","maxHemiLights","hemi","shadowMapEnabled","shadowMapType","shadowMapDebug","shadowMapCascade","code","pl","_programs","programInfo","usedTimes","WebGLProgram","programs","base","uniformsList","setProgram","_usedTextureUnits","deallocateMaterial","refreshProgram","refreshMaterial","refreshLights","p_uniforms","m_uniforms","_currentProgram","useProgram","_currentMaterialId","_currentCamera","uniformMatrix4fv","uniform1f","logDepthBufFC","cameraPosition","uniform3f","viewMatrix","textureUnit","getTextureUnit","uniform1i","setTexture","boneGlobalMatrices","refreshUniformsFog","_lightsNeedUpdate","setupLights","refreshUniformsLights","_lights","markUniformsLightsNeedsUpdate","refreshUniformsCommon","refreshUniformsLine","refreshUniformsDash","refreshUniformsParticle","refreshUniformsPhong","refreshUniformsLambert","mNear","mFar","_shadowPass","refreshUniformsShadow","loadUniformsGeneric","loadUniformsMatrices","modelMatrix","gammaInput","diffuse","uvScaleMap","offsetRepeat","flipEnvMap","useRefract","totalSize","psColor","_canvas","fogColor","fogNear","fogFar","fogDensity","ambientLightColor","directionalLightColor","directionalLightDirection","pointLightColor","pointLightPosition","pointLightDistance","distances","spotLightColor","spotLightPosition","spotLightDistance","spotLightDirection","directions","spotLightAngleCos","anglesCos","spotLightExponent","exponents","hemisphereLightSkyColor","skyColors","hemisphereLightGroundColor","groundColors","hemisphereLightDirection","boolean","modelViewMatrix","uniformMatrix3fv","_maxTextures","uniform","uniform2f","uniform4f","uniform1iv","uniform3iv","uniform2fv","uniform3fv","uniform4fv","_array","setCubeTexture","setCubeTextureDynamic","setColorGamma","intensitySq","setColorLinear","ll","zlights","dirColors","dirPositions","pointColors","pointPositions","pointDistances","spotColors","spotPositions","spotDistances","spotDirections","spotAnglesCos","spotExponents","hemiSkyColors","hemiGroundColors","hemiPositions","dirLength","pointLength","spotLength","hemiLength","dirCount","spotCount","hemiCount","dirOffset","pointOffset","spotOffset","hemiOffset","_direction","setLineWidth","_oldLineWidth","lineWidth","polygonoffset","factor","units","_oldPolygonOffset","enable","POLYGON_OFFSET_FILL","disable","_oldPolygonOffsetFactor","_oldPolygonOffsetUnits","setTextureParameters","textureType","isImagePowerOfTwo","extension","texParameteri","TEXTURE_WRAP_S","paramThreeToGL","TEXTURE_WRAP_T","TEXTURE_MAG_FILTER","TEXTURE_MIN_FILTER","CLAMP_TO_EDGE","filterFallback","__oldAnisotropy","texParameterf","TEXTURE_MAX_ANISOTROPY_EXT","getMaxAnisotropy","clampToMaxSize","maxSize","__webglTextureCube","onTextureDispose","createTexture","textures","activeTexture","TEXTURE0","bindTexture","TEXTURE_CUBE_MAP","pixelStorei","UNPACK_FLIP_Y_WEBGL","isCompressed","isDataTexture","cubeImage","autoScaleCubemaps","_maxCubemapSize","glFormat","glType","mipmap","getCompressedTextureFormats","compressedTexImage2D","TEXTURE_CUBE_MAP_POSITIVE_X","texImage2D","generateMipmap","__webglTexture","setupFrameBuffer","framebuffer","textureTarget","bindFramebuffer","FRAMEBUFFER","framebufferTexture2D","COLOR_ATTACHMENT0","setupRenderBuffer","renderbuffer","bindRenderbuffer","RENDERBUFFER","depthBuffer","stencilBuffer","renderbufferStorage","DEPTH_COMPONENT16","framebufferRenderbuffer","DEPTH_ATTACHMENT","DEPTH_STENCIL","DEPTH_STENCIL_ATTACHMENT","RGBA4","updateRenderTargetMipmap","TEXTURE_2D","NEAREST","LINEAR","REPEAT","MIRRORED_REPEAT","NEAREST_MIPMAP_NEAREST","NEAREST_MIPMAP_LINEAR","LINEAR_MIPMAP_NEAREST","LINEAR_MIPMAP_LINEAR","UNSIGNED_BYTE","UNSIGNED_SHORT_4_4_4_4","UNSIGNED_SHORT_5_5_5_1","UNSIGNED_SHORT_5_6_5","BYTE","SHORT","UNSIGNED_SHORT","INT","UNSIGNED_INT","ALPHA","RGB","RGBA","LUMINANCE","LUMINANCE_ALPHA","FUNC_ADD","FUNC_SUBTRACT","FUNC_REVERSE_SUBTRACT","ZERO","ONE","SRC_COLOR","ONE_MINUS_SRC_COLOR","SRC_ALPHA","ONE_MINUS_SRC_ALPHA","DST_ALPHA","ONE_MINUS_DST_ALPHA","DST_COLOR","ONE_MINUS_DST_COLOR","SRC_ALPHA_SATURATE","COMPRESSED_RGB_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT3_EXT","COMPRESSED_RGBA_S3TC_DXT5_EXT","COMPRESSED_RGB_PVRTC_4BPPV1_IMG","COMPRESSED_RGB_PVRTC_2BPPV1_IMG","COMPRESSED_RGBA_PVRTC_4BPPV1_IMG","COMPRESSED_RGBA_PVRTC_2BPPV1_IMG","MIN_EXT","MAX_EXT","nVertexUniforms","MAX_VERTEX_UNIFORM_VECTORS","nVertexMatrices","dirLights","pointLights","spotLights","hemiLights","_context","_alpha","_depth","_stencil","stencil","_antialias","antialias","_premultipliedAlpha","premultipliedAlpha","_preserveDrawingBuffer","preserveDrawingBuffer","_clearColor","_clearAlpha","domElement","devicePixelRatio","autoClear","autoClearColor","autoClearDepth","autoClearStencil","gammaOutput","shadowMapCullFace","calls","_currentFramebuffer","_currentGeometryGroupHash","_oldDoubleSided","_oldFlipSided","_oldBlending","_oldBlendEquation","_oldBlendSrc","_oldBlendDst","_oldDepthTest","_oldDepthWrite","_viewportX","_viewportY","_viewportWidth","_viewportHeight","_currentWidth","_currentHeight","Uint8Array","getShaderPrecisionFormat","WebGLExtensions","clearColor","clearDepth","clearStencil","DEPTH_TEST","depthFunc","LEQUAL","frontFace","CCW","cullFace","BACK","CULL_FACE","BLEND","blendFunc","viewport","MAX_TEXTURE_IMAGE_UNITS","_maxVertexTextures","MAX_VERTEX_TEXTURE_IMAGE_UNITS","_maxTextureSize","MAX_TEXTURE_SIZE","MAX_CUBE_MAP_TEXTURE_SIZE","_vertexShaderPrecisionHighpFloat","VERTEX_SHADER","HIGH_FLOAT","_vertexShaderPrecisionMediumpFloat","MEDIUM_FLOAT","_fragmentShaderPrecisionHighpFloat","LOW_FLOAT","FRAGMENT_SHADER","_fragmentShaderPrecisionMediumpFloat","formats","COMPRESSED_TEXTURE_FORMATS","highpAvailable","mediumpAvailable","shadowMapPlugin","ShadowMapPlugin","spritePlugin","SpritePlugin","lensFlarePlugin","LensFlarePlugin","supportsFloatTextures","supportsStandardDerivatives","supportsCompressedTextureS3TC","supportsCompressedTexturePVRTC","supportsBlendMinMax","MAX_TEXTURE_MAX_ANISOTROPY_EXT","getPrecision","setSize","updateStyle","setViewport","setScissor","scissor","enableScissorTest","SCISSOR_TEST","setClearColor","setClearColorHex","getClearColor","getClearAlpha","bits","COLOR_BUFFER_BIT","DEPTH_BUFFER_BIT","STENCIL_BUFFER_BIT","clearTarget","setRenderTarget","resetGLState","deallocateGeometry","deallocateTexture","onRenderTargetDispose","deallocateRenderTarget","deleteBuffers","buffers","deleteBuffer","deleteTexture","deleteFramebuffer","__webglFramebuffer","deleteRenderbuffer","__webglRenderbuffer","deleteProgram","newPrograms","renderBufferImmediate","hasPositions","hasNormals","hasUvs","__webglUvBuffer","hasColors","positionArray","nx","ny","nz","nax","nbx","ncx","nay","nby","ncy","naz","nbz","ncz","drawArrays","TRIANGLES","updateBuffers","wireframeBit","geometryHash","LINES","drawElements","POINTS","LINE_STRIP","geometryGroupHash","skinIndex","skinWeight","lineDistance","forceClear","setFaceCulling","frontFaceDirection","CW","FRONT","FRONT_AND_BACK","depthMask","blendEquationSeparate","blendFuncSeparate","uploadTexture","UNPACK_PREMULTIPLY_ALPHA_WEBGL","UNPACK_ALIGNMENT","isCube","isTargetPowerOfTwo","createFramebuffer","createRenderbuffer","shareDepthFrom","vx","vy","addPrePlugin","addPostPlugin","updateShadowMap","WebGLRenderTarget","gl","getExtension","programIdCount","generateDefines","chunk","cacheUniformLocations","identifiers","getUniformLocation","cacheAttributeLocations","getAttribLocation","shadowMapTypeDefine","prefix_vertex","prefix_fragment","customDefines","createProgram","glVertexShader","WebGLShader","glFragmentShader","attachShader","bindAttribLocation","linkProgram","getProgramParameter","LINK_STATUS","VALIDATE_STATUS","getError","getProgramInfoLog","deleteShader","addLineNumbers","string","lines","createShader","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","getShaderInfoLog","flares","prefix","vertexBuffer","elementBuffer","hasVertexTexture","tempTexture","occlusionTexture","init","renderType","occlusionMap","screenPosition","viewportWidth","viewportHeight","tempPosition","invAspect","halfViewportWidth","halfViewportHeight","screenPositionPixels","TEXTURE1","copyTexImage2D","sprite","_renderer","_renderList","createVirtualLight","cascade","virtualLight","isVirtual","pointsWorld","pointsFrustum","nearZ","farZ","updateVirtualLight","updateShadowCamera","_min","_max","getObjectMaterial","_depthMaterial","_depthMaterialMorph","_depthMaterialSkin","_depthMaterialMorphSkin","_matrixPosition","depthShader","depthUniforms","originalCamera","gyro","Gyroscope","shadowFilter","pars","cameraHelper","CameraHelper","objectMaterial","useMorphing","useSkinning","customDepthMaterial","clearAlpha","uvOffset","uvScale","fogType","fillStyle","fillRect","oldFogType","sceneFogType","GeometryUtils","geometry1","geometry2","ImageUtils","loadTexture","loadTextureCube","loadCompressedTexture","loadCompressedTextureCube","getNormalMap","subtract","getImageData","imageData","createImageData","ly","uy","lx","ux","num_points","putImageData","generateDataTexture","SceneUtils","createMultiMaterialObject","detach","attach","FontUtils","divisions","getFace","loadFace","family","familyName","ThreeFont","cssFontWeight","cssFontStyle","drawText","resolution","String","fontPaths","Path","ret","extractGlyphPoints","paths","outline","cpx","cpy","cpx0","cpy0","cpx1","cpy1","cpx2","cpy2","laste","pts","glyph","glyphs","_cachedOutline","moveTo","lineTo","quadraticCurveTo","Shape","Utils","bezierCurveTo","b3","ha","generateShapes","curveSegments","font","shapes","toShapes","namespace","process","contour","verts","vertIndices","nv","snip","px","py","aX","aY","bX","bY","cX","cY","apx","apy","bpx","bpy","cCROSSap","bCROSScp","aCROSSbp","Triangulate","_typeface_js","typeface_js","Audio","source","createBufferSource","gain","createGain","connect","destination","panner","createPanner","decodeAudioData","setLoop","loop","setRefDistance","refDistance","setRolloffFactor","rolloffFactor","AudioListener","AudioContext","webkitAudioContext","orientation","velocity","positionPrev","setOrientation","setVelocity","Curve","getPointAt","getUtoTmapping","getPoints","getSpacedPoints","lengths","getLengths","__arcLengthDivisions","cacheArcLengths","current","last","sum","updateArcLengths","targetArcLength","arcLengths","comparison","lengthBefore","lengthAfter","segmentLength","segmentFraction","getTangent","pt1","getTangentAt","tangentQuadraticBezier","tangentCubicBezier","tangentSpline","create","getPointFunc","CurvePath","curves","bends","autoClose","curve","checkConnection","closePath","startPoint","endPoint","LineCurve","curveLengths","getCurveLengths","lens","cacheLengths","sums","maxX","maxY","maxZ","minX","minY","minZ","NEGATIVE_INFINITY","POSITIVE_INFINITY","createPointsGeometry","createGeometry","createSpacedPointsGeometry","addWrapPath","bendpath","getTransformedPoints","oldPts","getWrapPoints","getTransformedSpacedPoints","oldX","oldY","xNorm","bounds","pathPt","translationObject","quaternionObject","scaleObject","translationWorld","quaternionWorld","scaleWorld","fromPoints","PathActions","MOVE_TO","LINE_TO","QUADRATIC_CURVE_TO","BEZIER_CURVE_TO","CSPLINE_THRU","ARC","ELLIPSE","vectors","vlen","args","action","lastargs","x0","y0","aCPx","aCPy","QuadraticBezierCurve","aCP1x","aCP1y","aCP2x","aCP2y","CubicBezierCurve","splineThru","npts","SplineCurve","aRadius","aStartAngle","aEndAngle","aClockwise","absarc","absellipse","ellipse","xRadius","yRadius","EllipseCurve","lastPoint","closedPath","useSpacedPoints","spts","concat","spline","deltaAngle","tdivisions","isCCW","noHoles","toShapesNoHoles","inSubpaths","tmpPath","tmpShape","subPaths","inActions","lastPath","solid","holesFirst","isClockWise","tmpPoints","betterShapeHoles","newShapes","newShapeHoles","mainIdx","ambigious","toChange","sIdx","sLen","sho","hIdx","ho","hole_unassigned","s2Idx","inPt","inPolygon","polyLen","inside","edgeLowPt","edgeHighPt","edgeDx","edgeDy","perpEdge","froms","tos","hole","tmpHoles","holes","extrude","ExtrudeGeometry","makeGeometry","ShapeGeometry","getPointsHoles","holesPts","getSpacedPointsHoles","extractAllPoints","shape","extractPoints","extractAllSpacedPoints","triangulateShape","point_in_segment_2D_colin","inSegPt1","inSegPt2","inOtherPt","intersect_segments_2D","inSeg1Pt1","inSeg1Pt2","inSeg2Pt1","inSeg2Pt2","inExcludeAdjacentSegs","seg1dx","seg1dy","seg2dx","seg2dy","seg1seg2dx","seg1seg2dy","limit","perpSeg1","perpSeg2","factorSeg1","seg1Pt","seg2Pt","seg1min","seg1max","seg1minVal","seg1maxVal","seg2min","seg2max","seg2minVal","seg2maxVal","isPointInsideAngle","inVertex","inLegFromPt","inLegToPt","legFromPtX","legFromPtY","legToPtX","legToPtY","otherPtX","otherPtY","from2toAngle","from2otherAngle","other2toAngle","allPointsMap","allpoints","hl","shapeWithoutHoles","holeIndex","shapeIndex","shapePt","holePt","holeIdx","cutKey","tmpShape1","tmpShape2","tmpHole1","tmpHole2","indepHoles","failedCuts","minShapeIndex","h2","inShapeIdx","inHoleIdx","lastShapeIdx","prevShapeIdx","nextShapeIdx","insideAngle","lastHoleIdx","prevHoleIdx","nextHoleIdx","inShapePt","inHolePt","nextIdx","intersection","ihIdx","chkHole","triangles","b2p0","b2p1","b2p2","b3p0","b3p1","b3p2","b3p3","point0","point1","point2","point3","ArcCurve","LineCurve3","QuadraticBezierCurve3","CubicBezierCurve3","SplineCurve3","ClosedSplineCurve3","AnimationHandler","CATMULLROM","CATMULLROM_FORWARD","initialized","hierarchy","keys","rot","quat","usedMorphTargets","morphTargetName","morphTargetsInfluences","root","parseRecurseHierarchy","play","deltaTimeMS","resetBlendWeights","Animation","currentTime","timeScale","isPlaying","interpolationType","keyTypes","reset","animationCache","positionWeight","quaternionWeight","scaleWeight","prevKey","nextKey","originalMatrix","getNextKeyWith","newVector","newQuat","interpolateCatmullRom","prevXYZ","nextXYZ","proportionalWeight","getPrevKeyWith","currentPoint","forwardPoint","KeyFrameAnimation","isPaused","sids","sid","next","endTime","original","hasTarget","MorphAnimation","mesh","frames","pause","lastFrame","currentFrame","interpolation","frame","buildPlane","udir","vdir","gridX","gridY","width_half","height_half","gridX1","gridY1","segment_width","segment_height","uvd","depth_half","centerUV","segment","CubeGeometry","heightHalf","verticesRow","uvsRow","tanTheta","v4","n4","uv1","uv3","uv4","addShapeList","addShape","scalePt2","pt","vec","getBevelVec","inPrev","inNext","v_trans_x","v_trans_y","shrink_by","v_prev_x","v_prev_y","v_next_x","v_next_y","v_prev_lensq","colinear0","v_prev_len","v_next_len","ptPrevShift_x","ptPrevShift_y","ptNextShift_x","ptNextShift_y","sf","v_trans_lensq","direction_eq","sidewalls","layeroffset","steps","bevelSegments","slen1","slen2","f4","f3","shapesOffset","uvgen","generateTopUV","wallContour","stepIndex","stepsLength","contourIndex1","contourIndex2","extrudeMaterial","generateSideWallUV","extrudePts","splineTube","binormal","position2","amount","bevelThickness","bevelSize","bevelEnabled","extrudePath","extrudeByPath","UVGenerator","WorldUVGenerator","TubeGeometry","FrenetFrames","ahole","shapePoints","reverse","bs","vert","flen","contourMovements","oneHoleMovements","holesMovements","verticesMovements","binormals","layer","indexA","indexB","indexC","indexD","LatheGeometry","inversePointLength","inverseSegments","phi","np","u0","u1","PlaneBufferGeometry","offset2","RingGeometry","innerRadius","outerRadius","thetaSegments","phiSegments","radiusStep","thetaSegment","TextGeometry","textShapes","getPos","in_q","in_p","cu","su","quOverP","cs","tz","grid","tang","bitan","ip","jp","closed","numpoints","pos2","smallest","mat","MAX_VALUE","PolyhedronGeometry","prepare","that","azimuth","inclination","make","centroid","azi","correctUV","cols","aj","bj","rows","DodecahedronGeometry","OctahedronGeometry","TetrahedronGeometry","ParametricGeometry","func","slices","stacks","sliceCount","AxisHelper","ArrowHelper","lineGeometry","coneGeometry","dir","headLength","headWidth","cone","setDirection","setColor","BoxHelper","BoundingBoxHelper","addLine","addPoint","pointMap","setPoint","DirectionalLightHelper","lightPlane","targetLine","EdgesHelper","edge","sortFunction","numEdges","vert1","vert2","face1","face2","FaceNormalsHelper","objectVertices","objectFaces","objectWorldMatrix","GridHelper","setColors","colorCenterLine","colorGrid","HemisphereLightHelper","sphereSize","arrowLength","domeSize","lightSphere","PointLightHelper","SkeletonHelper","getBoneList","boneList","matrixWorldInv","boneMatrix","SpotLightHelper","vector2","coneLength","coneWidth","VertexNormalsHelper","worldMatrix","vertexId","VertexTangentsHelper","WireframeHelper","edges","numTris","renderCallback","MorphBlendMesh","animationsMap","animationsList","numFrames","endFrame","createAnimation","setAnimationWeight","startFrame","active","autoCreateAnimations","frameRanges","setAnimationDirectionForward","setAnimationDirectionBackward","setAnimationFPS","setAnimationDuration","setAnimationTime","getAnimationTime","getAnimationDuration","stopAnimation","480","_babelPolyfill","_App2","_App","_elementUi2","_elementUi","_vueRouter2","_vueRouter","_store2","_store","_routes2","_routes","Mock","bootstrap","ElementUI","VueRouter","NProgress","configure","showSpinner","router","beforeEach","to","from","sessionStorage","removeItem","getItem","afterEach","transition","done","store","App","$mount","481","Plans","Maintains","Categories","Users","LoginUsers","_mockjs2","_mockjs","username","password","avatar","Random","guid","siteName","cname","integer","option","strMaintainId","createTime","updateTime","cStartTime","cEndTime","uStartTime","uEndTime","strPlanId","executeTime","datetime","isCycle","equipmentCategory","equipmentId","482","_axios2","_axios","_axiosMockAdapter2","_axiosMockAdapter","_Users","_Categories","_Maintains","_Plans","MockAdapter","axios","onGet","reply","onPost","config","reject","user","setTimeout","hasUser","some","filter","ids","includes","categories","category","page","maintain","ma","plan","cycleDay","executeHour","executeMinute","description","483","increment","commit","decrement","484","getCount","77","addPlan","editPlan","batchRemovePlan","removePlan","getPlanListPage","getPlanList","addMaintain","editMaintain","batchRemoveMaintain","removeMaintain","getMaintainListPage","getMaintainList","addCategory","editCategory","batchRemoveCategory","removeCategory","getCategoryListPage","getCategoryList","addUser","editUser","batchRemoveUser","removeUser","getUserListPage","getUserList","requestLogin","post","then","res"],"mappings":"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OAD5B,6DACA,mBAMQ,aAhCR,WAiCY,KAAZ,6DACY,KAAZ,oBACgB,OACI,KAApB,aAEgB,SACI,QAApB,OACoB,aACI,KAAxB,WAGgB,QACI,MAApB,kBAEgB,MACI,KAApB,KACoB,MAApB,KACoB,OAApB,KACoB,cAApB,GAEgB,OACI,KAApB,QACoB,aAApB,QAEgB,OACI,KAApB,WACoB,MAApB,qCAEgB,OACI,QACI,MAAxB,EACwB,SAAxB,UAGgB,SAEI,KAApB,QACoB,KAApB,MACoB,MAApB,0CAGoB,KAApB,QACoB,KAApB,MACoB,MAApB,4CAKQ,cAjFR,WAkFY,KAAZ,+DACY,KAAZ,qBACgB,OACI,KAApB,cAEgB,SACI,QAApB,QAEgB,QACI,MAApB,uBAEgB,MACI,KAApB,KACoB,MAApB,KACoB,OAApB,KACoB,cAApB,GAEgB,OACI,KAApB,WACoB,aAApB,EACoB,MAApB,qCAEgB,OACI,QACI,MAAxB,EACwB,SAAxB,QAGgB,OACI,KAApB,SAEgB,SAEI,KAApB,OACoB,KAApB,OACoB,MAApB,KACoB,MAApB,8BAGoB,KAApB,OACoB,KAApB,OACoB,MAApB,KACoB,MAApB,+BAGoB,KAApB,OACoB,KAApB,OACoB,MAApB,KACoB,MAApB,qCAKQ,aAvIR,WAwIY,KAAZ,6DACY,KAAZ,oBACgB,OACI,KAApB,YACoB,QAApB,OACoB,EAApB,UAEgB,SACI,QAApB,OACoB,UAApB,6BAEgB,QACI,OAApB,WACoB,KAApB,OACoB,MAApB,qCAEgB,OACI,QACI,UAAxB,kBACwB,WACI,WAA5B,SAC4B,SAA5B,MAegB,SAEI,KAApB,OACoB,KAApB,MACoB,OAApB,MACoB,QAApB,aACoB,OACpB,wBACA,wBACA,wBACA,wBACA,yBAEoB,WACI,UACI,WAA5B,GAC4B,cAA5B,EAC4B,YAA5B,4BAOQ,WApMR,WAqMY,KAAZ,kBACY,KAAZ,eACY,KAAZ,gBACY,KAAZ,iBAII,QAAJ,WACQ,GAAR,OACQ,GAAR,aACQ,OAAR,oBACY,EAAZ,qBACY,EAAZ,kBACY,EAAZ,mBACY,EAAZ,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","file":"static/js/app.5f386973cae10e35e08c.js","sourcesContent":["webpackJsonp([2],{\n\n/***/ 1016:\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ 1017:\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ 1018:\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ 1019:\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ 1020:\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ 1021:\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ 1022:\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ 1023:\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ 1024:\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ 1025:\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ 1026:\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ 1027:\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ 1028:\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ 1029:\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ 1030:\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ 1044:\n/***/ (function(module, exports, __webpack_require__) {\n\n\n/* styles */\n__webpack_require__(1016)\n\nvar Component = __webpack_require__(28)(\n /* script */\n __webpack_require__(464),\n /* template */\n __webpack_require__(1059),\n /* scopeId */\n \"data-v-0135f127\",\n /* cssModules */\n null\n)\n\nmodule.exports = Component.exports\n\n\n/***/ }),\n\n/***/ 1045:\n/***/ (function(module, exports, __webpack_require__) {\n\n\n/* styles */\n__webpack_require__(1022)\n\nvar Component = __webpack_require__(28)(\n /* script */\n __webpack_require__(465),\n /* template */\n __webpack_require__(1066),\n /* scopeId */\n \"data-v-31addc8e\",\n /* cssModules */\n null\n)\n\nmodule.exports = Component.exports\n\n\n/***/ }),\n\n/***/ 1046:\n/***/ (function(module, exports, __webpack_require__) {\n\n\n/* styles */\n__webpack_require__(1023)\n\nvar Component = __webpack_require__(28)(\n /* script */\n __webpack_require__(466),\n /* template */\n __webpack_require__(1067),\n /* scopeId */\n \"data-v-3d16a820\",\n /* cssModules */\n null\n)\n\nmodule.exports = Component.exports\n\n\n/***/ }),\n\n/***/ 1047:\n/***/ (function(module, exports, __webpack_require__) {\n\n\n/* styles */\n__webpack_require__(1030)\n\nvar Component = __webpack_require__(28)(\n /* script */\n __webpack_require__(467),\n /* template */\n __webpack_require__(1074),\n /* scopeId */\n \"data-v-fee14efe\",\n /* cssModules */\n null\n)\n\nmodule.exports = Component.exports\n\n\n/***/ }),\n\n/***/ 1048:\n/***/ (function(module, exports, __webpack_require__) {\n\n\n/* styles */\n__webpack_require__(1021)\n\nvar Component = __webpack_require__(28)(\n /* script */\n __webpack_require__(468),\n /* template */\n __webpack_require__(1065),\n /* scopeId */\n \"data-v-2daed92c\",\n /* cssModules */\n null\n)\n\nmodule.exports = Component.exports\n\n\n/***/ }),\n\n/***/ 1049:\n/***/ (function(module, exports, __webpack_require__) {\n\n\n/* styles */\n__webpack_require__(1025)\n\nvar Component = __webpack_require__(28)(\n /* script */\n null,\n /* template */\n __webpack_require__(1069),\n /* scopeId */\n \"data-v-552f9c87\",\n /* cssModules */\n null\n)\n\nmodule.exports = Component.exports\n\n\n/***/ }),\n\n/***/ 1050:\n/***/ (function(module, exports, __webpack_require__) {\n\n\n/* styles */\n__webpack_require__(1024)\n\nvar Component = __webpack_require__(28)(\n /* script */\n __webpack_require__(469),\n /* template */\n __webpack_require__(1068),\n /* scopeId */\n \"data-v-51a2c380\",\n /* cssModules */\n null\n)\n\nmodule.exports = Component.exports\n\n\n/***/ }),\n\n/***/ 1051:\n/***/ (function(module, exports, __webpack_require__) {\n\n\n/* styles */\n__webpack_require__(1020)\n\nvar Component = __webpack_require__(28)(\n /* script */\n __webpack_require__(470),\n /* template */\n __webpack_require__(1064),\n /* scopeId */\n \"data-v-2c8a1058\",\n /* cssModules */\n null\n)\n\nmodule.exports = Component.exports\n\n\n/***/ }),\n\n/***/ 1052:\n/***/ (function(module, exports, __webpack_require__) {\n\n\n/* styles */\n__webpack_require__(1026)\n\nvar Component = __webpack_require__(28)(\n /* script */\n __webpack_require__(471),\n /* template */\n __webpack_require__(1070),\n /* scopeId */\n \"data-v-612c0ec1\",\n /* cssModules */\n null\n)\n\nmodule.exports = Component.exports\n\n\n/***/ }),\n\n/***/ 1053:\n/***/ (function(module, exports, __webpack_require__) {\n\n\n/* styles */\n__webpack_require__(1027)\n\nvar Component = __webpack_require__(28)(\n /* script */\n __webpack_require__(472),\n /* template */\n __webpack_require__(1071),\n /* scopeId */\n \"data-v-73ce23cd\",\n /* cssModules */\n null\n)\n\nmodule.exports = Component.exports\n\n\n/***/ }),\n\n/***/ 1054:\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Component = __webpack_require__(28)(\n /* script */\n __webpack_require__(473),\n /* template */\n __webpack_require__(1061),\n /* scopeId */\n null,\n /* cssModules */\n null\n)\n\nmodule.exports = Component.exports\n\n\n/***/ }),\n\n/***/ 1055:\n/***/ (function(module, exports, __webpack_require__) {\n\n\n/* styles */\n__webpack_require__(1017)\n\nvar Component = __webpack_require__(28)(\n /* script */\n __webpack_require__(474),\n /* template */\n __webpack_require__(1060),\n /* scopeId */\n \"data-v-0258d1fc\",\n /* cssModules */\n null\n)\n\nmodule.exports = Component.exports\n\n\n/***/ }),\n\n/***/ 1056:\n/***/ (function(module, exports, __webpack_require__) {\n\n\n/* styles */\n__webpack_require__(1029)\n\nvar Component = __webpack_require__(28)(\n /* script */\n __webpack_require__(475),\n /* template */\n __webpack_require__(1073),\n /* scopeId */\n \"data-v-d8733d78\",\n /* cssModules */\n null\n)\n\nmodule.exports = Component.exports\n\n\n/***/ }),\n\n/***/ 1057:\n/***/ (function(module, exports, __webpack_require__) {\n\n\n/* styles */\n__webpack_require__(1019)\n\nvar Component = __webpack_require__(28)(\n /* script */\n __webpack_require__(476),\n /* template */\n __webpack_require__(1063),\n /* scopeId */\n \"data-v-28b92b86\",\n /* cssModules */\n null\n)\n\nmodule.exports = Component.exports\n\n\n/***/ }),\n\n/***/ 1058:\n/***/ (function(module, exports, __webpack_require__) {\n\n\n/* styles */\n__webpack_require__(1028)\n\nvar Component = __webpack_require__(28)(\n /* script */\n __webpack_require__(477),\n /* template */\n __webpack_require__(1072),\n /* scopeId */\n \"data-v-84a81470\",\n /* cssModules */\n null\n)\n\nmodule.exports = Component.exports\n\n\n/***/ }),\n\n/***/ 1059:\n/***/ (function(module, exports) {\n\nmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('svg', {\n staticClass: \"icon screenfull\",\n attrs: {\n \"xmlns\": \"http://www.w3.org/2000/svg\",\n \"xmlns:xlink\": \"http://www.w3.org/1999/xlink\",\n \"t\": \"1497503607356\",\n \"viewBox\": \"0 0 1024 1024\",\n \"version\": \"1.1\",\n \"p-id\": \"4109\",\n \"fill\": _vm.fill,\n \"width\": _vm.width,\n \"height\": _vm.height\n },\n on: {\n \"click\": _vm.click\n }\n }, [_c('path', {\n attrs: {\n \"d\": \"M604.157933 512l204.484208 204.484208 82.942037-82.942037c10.364045-10.952446 26.498514-13.83817 40.309054-8.067746 13.249769 5.742794 22.465664 18.99154 22.465664 33.977859l0 258.042008c0 20.168342-16.695241 36.863582-36.863582 36.863582L659.452283 954.357873c-14.986319 0-28.236088-9.215896-33.977859-23.025413-5.770424-13.249769-2.885723-29.384237 8.067746-39.748283l82.942037-82.942037L512 604.157933 307.515792 808.642141l82.942037 82.942037c10.952446 10.364045 13.83817 26.498514 8.067746 39.748283-5.742794 13.809517-18.99154 23.025413-33.977859 23.025413L106.504686 954.357873c-20.168342 0-36.863582-16.695241-36.863582-36.863582L69.641103 659.452283c0-14.986319 9.215896-28.236088 23.025413-33.977859 13.249769-5.770424 29.384237-2.8847 39.748283 8.067746l82.942037 82.942037 204.484208-204.484208L215.357859 307.515792l-82.942037 82.942037c-6.890944 6.918573-16.10684 10.952446-25.911136 10.952446-4.593622 0-9.804297-1.14815-13.83817-2.8847-13.809517-5.742794-23.025413-18.99154-23.025413-33.977859L69.641103 106.504686c0-20.168342 16.695241-36.863582 36.863582-36.863582L364.546693 69.641103c14.986319 0 28.236088 9.215896 33.977859 23.025413 5.770424 13.249769 2.8847 29.384237-8.067746 39.748283l-82.942037 82.942037 204.484208 204.484208L716.484208 215.357859l-82.942037-82.942037c-10.952446-10.364045-13.83817-26.498514-8.067746-39.748283 5.742794-13.809517 18.99154-23.025413 33.977859-23.025413l258.042008 0c20.168342 0 36.863582 16.695241 36.863582 36.863582l0 258.042008c0 14.986319-9.215896 28.236088-22.465664 33.977859-4.593622 1.736551-9.804297 2.8847-14.397918 2.8847-9.804297 0-19.020192-4.033873-25.911136-10.952446l-82.942037-82.942037L604.157933 512z\",\n \"p-id\": \"4110\"\n }\n })])\n},staticRenderFns: []}\n\n/***/ }),\n\n/***/ 1060:\n/***/ (function(module, exports) {\n\nmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('section', [_c('el-form', {\n ref: \"form\",\n staticStyle: {\n \"margin\": \"10px\"\n },\n attrs: {\n \"model\": _vm.form\n },\n on: {\n \"submit\": function($event) {\n $event.preventDefault();\n return _vm.onSubmit($event)\n }\n }\n }, [_c('el-form', {\n staticClass: \"demo-form-inline\",\n attrs: {\n \"inline\": true,\n \"model\": _vm.filters\n }\n }, [_c('el-row', [_c('el-col', {\n staticStyle: {\n \"margin-left\": \"12px\"\n },\n attrs: {\n \"xs\": 12,\n \"sm\": 12,\n \"md\": 12,\n \"lg\": 12\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"维护项\"\n }\n }, [_c('el-input', {\n staticStyle: {\n \"width\": \"160px\"\n },\n attrs: {\n \"placeholder\": \"维护项\"\n },\n model: {\n value: (_vm.filters.strTitle),\n callback: function($$v) {\n _vm.$set(_vm.filters, \"strTitle\", $$v)\n },\n expression: \"filters.strTitle\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"xs\": 10,\n \"sm\": 10,\n \"md\": 10,\n \"lg\": 10\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"维护内容\"\n }\n }, [_c('el-input', {\n staticStyle: {\n \"width\": \"180px\"\n },\n attrs: {\n \"placeholder\": \"维护内容\"\n },\n model: {\n value: (_vm.filters.strContent),\n callback: function($$v) {\n _vm.$set(_vm.filters, \"strContent\", $$v)\n },\n expression: \"filters.strContent\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"xs\": 24,\n \"sm\": 24,\n \"md\": 24,\n \"lg\": 12\n }\n }, [_c('el-form-item', {\n staticClass: \"postInfo-container-item\",\n attrs: {\n \"label-width\": \"80px\",\n \"label\": \"创建时间\"\n }\n }, [_c('el-date-picker', {\n attrs: {\n \"type\": \"datetimerange\",\n \"picker-options\": _vm.pickerOptions2,\n \"placeholder\": \"选择时间范围\",\n \"align\": \"right\"\n },\n model: {\n value: (_vm.filters.createTime),\n callback: function($$v) {\n _vm.$set(_vm.filters, \"createTime\", $$v)\n },\n expression: \"filters.createTime\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"xs\": 24,\n \"sm\": 24,\n \"md\": 24,\n \"lg\": 12\n }\n }, [_c('el-form-item', {\n staticClass: \"postInfo-container-item\",\n attrs: {\n \"label-width\": \"80px\",\n \"label\": \"更新时间\"\n }\n }, [_c('el-date-picker', {\n attrs: {\n \"type\": \"datetimerange\",\n \"picker-options\": _vm.pickerOptions2,\n \"placeholder\": \"选择时间范围\",\n \"align\": \"right\"\n },\n model: {\n value: (_vm.filters.updateTime),\n callback: function($$v) {\n _vm.$set(_vm.filters, \"updateTime\", $$v)\n },\n expression: \"filters.updateTime\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('el-col', {\n staticStyle: {\n \"margin-left\": \"12px\"\n },\n attrs: {\n \"xs\": 24,\n \"sm\": 24,\n \"md\": 24,\n \"lg\": 12\n }\n }, [_c('el-form-item', [_c('el-button', {\n attrs: {\n \"type\": \"primary\",\n \"icon\": \"search\"\n },\n on: {\n \"click\": _vm.getMaintains\n }\n }, [_vm._v(\"查询\")])], 1)], 1)], 1)], 1)], 1), _vm._v(\" \"), _c('div', {\n staticClass: \"panel\"\n }, [_c('div', {\n staticClass: \"panel-title\"\n }, [_c('span', {\n domProps: {\n \"textContent\": _vm._s(_vm.panelTitle)\n }\n }), _vm._v(\" \"), _c('div', {\n staticClass: \"fr\"\n }, [_c('el-button', {\n attrs: {\n \"size\": \"small\"\n },\n on: {\n \"click\": function($event) {\n $event.stopPropagation();\n return _vm.on_refresh($event)\n }\n }\n }, [_c('i', {\n staticClass: \"fa fa-refresh\"\n })]), _vm._v(\" \"), _c('el-button', {\n attrs: {\n \"type\": \"primary\",\n \"icon\": \"plus\",\n \"size\": \"small\"\n },\n on: {\n \"click\": _vm.handleAdd\n }\n }, [_vm._v(\"新增\")])], 1)]), _vm._v(\" \"), _c('div', {\n staticClass: \"panel-body\"\n }, [_c('el-table', {\n directives: [{\n name: \"loading\",\n rawName: \"v-loading\",\n value: (_vm.listLoading),\n expression: \"listLoading\"\n }],\n attrs: {\n \"data\": _vm.maintains,\n \"highlight-current-row\": \"\"\n },\n on: {\n \"selection-change\": _vm.selsChange\n }\n }, [_c('el-table-column', {\n attrs: {\n \"type\": \"selection\",\n \"width\": \"55\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"type\": \"index\",\n \"width\": \"60\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"label\": \"维护项名称\"\n },\n scopedSlots: _vm._u([{\n key: \"default\",\n fn: function(scope) {\n return [_c('span', {\n domProps: {\n \"innerHTML\": _vm._s(_vm.brightenKeyword(scope.row.strTitle, _vm.filters.strTitle))\n }\n })]\n }\n }])\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"label\": \"维护内容\"\n },\n scopedSlots: _vm._u([{\n key: \"default\",\n fn: function(scope) {\n return [_c('span', {\n domProps: {\n \"innerHTML\": _vm._s(_vm.brightenKeyword(scope.row.strContent, _vm.filters.strContent))\n }\n })]\n }\n }])\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"createTime\",\n \"label\": \"创建时间\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"updateTime\",\n \"label\": \"更新时间\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"label\": \"操作\",\n \"width\": \"150\"\n },\n scopedSlots: _vm._u([{\n key: \"default\",\n fn: function(scope) {\n return [_c('el-button', {\n attrs: {\n \"size\": \"small\"\n },\n on: {\n \"click\": function($event) {\n return _vm.handleEdit(scope.$index, scope.row)\n }\n }\n }, [_vm._v(\"编辑\")]), _vm._v(\" \"), _c('el-button', {\n attrs: {\n \"type\": \"danger\",\n \"size\": \"small\"\n },\n on: {\n \"click\": function($event) {\n return _vm.handleDel(scope.$index, scope.row)\n }\n }\n }, [_vm._v(\"删除\")])]\n }\n }])\n })], 1), _vm._v(\" \"), _c('el-col', {\n staticClass: \"toolbar\",\n attrs: {\n \"span\": 24\n }\n }, [_c('el-button', {\n staticClass: \"fl\",\n attrs: {\n \"type\": \"danger\",\n \"disabled\": this.sels.length === 0\n },\n on: {\n \"click\": _vm.batchRemove\n }\n }, [_vm._v(\"批量删除\")]), _vm._v(\" \"), _c('el-pagination', {\n staticClass: \"fr\",\n attrs: {\n \"current-page\": _vm.listQuery.curPage,\n \"page-sizes\": [10, 20, 30, 50],\n \"page-size\": _vm.listQuery.pageSize,\n \"layout\": \"total, sizes, prev, pager, next, jumper\",\n \"total\": _vm.total\n },\n on: {\n \"size-change\": _vm.handleSizeChange,\n \"current-change\": _vm.handleCurrentChange,\n \"update:currentPage\": function($event) {\n return _vm.$set(_vm.listQuery, \"curPage\", $event)\n },\n \"update:current-page\": function($event) {\n return _vm.$set(_vm.listQuery, \"curPage\", $event)\n }\n }\n })], 1)], 1)]), _vm._v(\" \"), _c('el-dialog', {\n attrs: {\n \"title\": \"编辑维护项\",\n \"visible\": _vm.editFormVisible,\n \"close-on-click-modal\": false\n },\n on: {\n \"update:visible\": function($event) {\n _vm.editFormVisible = $event\n }\n }\n }, [_c('el-form', {\n ref: \"editForm\",\n attrs: {\n \"model\": _vm.editForm,\n \"label-width\": \"80px\",\n \"rules\": _vm.editFormRules\n }\n }, [_c('el-form-item', {\n staticStyle: {\n \"width\": \"450px\"\n },\n attrs: {\n \"label\": \"名称\",\n \"prop\": \"strTitle\"\n }\n }, [_c('el-input', {\n attrs: {\n \"auto-complete\": \"off\",\n \"placeholder\": \"请输入名称\"\n },\n model: {\n value: (_vm.editForm.strTitle),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"strTitle\", $$v)\n },\n expression: \"editForm.strTitle\"\n }\n })], 1), _vm._v(\" \"), _c('el-form-item', {\n staticStyle: {\n \"width\": \"450px\"\n },\n attrs: {\n \"label\": \"维护内容\",\n \"prop\": \"strContent\"\n }\n }, [_c('el-input', {\n attrs: {\n \"type\": \"textarea\",\n \"rows\": 2,\n \"placeholder\": \"请输入内容\"\n },\n model: {\n value: (_vm.editForm.strContent),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"strContent\", $$v)\n },\n expression: \"editForm.strContent\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('div', {\n staticClass: \"dialog-footer\",\n attrs: {\n \"slot\": \"footer\"\n },\n slot: \"footer\"\n }, [_c('el-button', {\n nativeOn: {\n \"click\": function($event) {\n _vm.editFormVisible = false\n }\n }\n }, [_vm._v(\"取消\")]), _vm._v(\" \"), _c('el-button', {\n attrs: {\n \"type\": \"primary\",\n \"loading\": _vm.editLoading\n },\n nativeOn: {\n \"click\": function($event) {\n return _vm.editSubmit($event)\n }\n }\n }, [_vm._v(\"提交\")])], 1)], 1), _vm._v(\" \"), _c('el-dialog', {\n attrs: {\n \"title\": \"新增维护项\",\n \"visible\": _vm.addFormVisible,\n \"close-on-click-modal\": false,\n \"size\": \"small\"\n },\n on: {\n \"update:visible\": function($event) {\n _vm.addFormVisible = $event\n }\n }\n }, [_c('el-form', {\n ref: \"addForm\",\n attrs: {\n \"model\": _vm.addForm,\n \"label-width\": \"80px\",\n \"rules\": _vm.addFormRules\n }\n }, [_c('el-form-item', {\n staticStyle: {\n \"width\": \"450px\"\n },\n attrs: {\n \"label\": \"名称\",\n \"prop\": \"strTitle\"\n }\n }, [_c('el-input', {\n attrs: {\n \"auto-complete\": \"off\",\n \"placeholder\": \"请输入名称\"\n },\n model: {\n value: (_vm.addForm.strTitle),\n callback: function($$v) {\n _vm.$set(_vm.addForm, \"strTitle\", $$v)\n },\n expression: \"addForm.strTitle\"\n }\n })], 1), _vm._v(\" \"), _c('el-form-item', {\n staticStyle: {\n \"width\": \"450px\"\n },\n attrs: {\n \"label\": \"维护内容\",\n \"prop\": \"strContent\"\n }\n }, [_c('el-input', {\n attrs: {\n \"type\": \"textarea\",\n \"rows\": 2,\n \"placeholder\": \"请输入内容\"\n },\n model: {\n value: (_vm.addForm.strContent),\n callback: function($$v) {\n _vm.$set(_vm.addForm, \"strContent\", $$v)\n },\n expression: \"addForm.strContent\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('div', {\n staticClass: \"dialog-footer\",\n attrs: {\n \"slot\": \"footer\"\n },\n slot: \"footer\"\n }, [_c('el-button', {\n nativeOn: {\n \"click\": function($event) {\n _vm.addFormVisible = false\n }\n }\n }, [_vm._v(\"取消\")]), _vm._v(\" \"), _c('el-button', {\n attrs: {\n \"type\": \"primary\",\n \"loading\": _vm.addLoading\n },\n nativeOn: {\n \"click\": function($event) {\n return _vm.addSubmit($event)\n }\n }\n }, [_vm._v(\"提交\")])], 1)], 1)], 1)\n},staticRenderFns: []}\n\n/***/ }),\n\n/***/ 1061:\n/***/ (function(module, exports) {\n\nmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('div', {\n staticStyle: {\n \"margin\": \"10px\"\n }\n }, [_c('upload-excel-component', {\n attrs: {\n \"on-success\": _vm.handleSuccess,\n \"before-upload\": _vm.beforeUpload\n }\n }), _vm._v(\" \"), _c('div', {\n staticClass: \"panel\"\n }, [_c('div', {\n staticClass: \"panel-title\"\n }, [_c('span', {\n domProps: {\n \"textContent\": _vm._s(_vm.panelTitle)\n }\n })]), _vm._v(\" \"), _c('div', {\n staticClass: \"panel-body\"\n }, [_c('el-table', {\n staticStyle: {\n \"width\": \"100%\",\n \"margin-top\": \"20px\"\n },\n attrs: {\n \"data\": _vm.tableData,\n \"border\": \"\",\n \"highlight-current-row\": \"\"\n }\n }, _vm._l((_vm.tableHeader), function(item) {\n return _c('el-table-column', {\n key: item,\n attrs: {\n \"prop\": item,\n \"label\": item\n }\n })\n }), 1)], 1)])], 1)\n},staticRenderFns: []}\n\n/***/ }),\n\n/***/ 1062:\n/***/ (function(module, exports) {\n\nmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('div', {\n attrs: {\n \"id\": \"app\"\n }\n }, [_c('transition', {\n attrs: {\n \"name\": \"fade\",\n \"mode\": \"out-in\"\n }\n }, [_c('router-view')], 1), _vm._v(\" \"), _vm._m(0)], 1)\n},staticRenderFns: [function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('a', {\n attrs: {\n \"href\": \"https://github.com/artdong/vue-admin\"\n }\n }, [_c('img', {\n staticClass: \"fork-me-github\",\n attrs: {\n \"src\": \"https://camo.githubusercontent.com/652c5b9acfaddf3a9c326fa6bde407b87f7be0f4/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6f72616e67655f6666373630302e706e67\",\n \"alt\": \"Fork me on GitHub\",\n \"data-canonical-src\": \"https://s3.amazonaws.com/github/ribbons/forkme_right_orange_ff7600.png\"\n }\n })])\n}]}\n\n/***/ }),\n\n/***/ 1063:\n/***/ (function(module, exports) {\n\nmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('section', [_c('el-form', {\n ref: \"form\",\n staticStyle: {\n \"margin\": \"10px\"\n },\n attrs: {\n \"model\": _vm.form\n },\n on: {\n \"submit\": function($event) {\n $event.preventDefault();\n return _vm.onSubmit($event)\n }\n }\n }, [_c('el-form', {\n attrs: {\n \"model\": _vm.filters\n }\n }, [_c('el-row', [_c('el-col', {\n attrs: {\n \"span\": 8\n }\n }, [_c('el-form-item', {\n staticClass: \"postInfo-container-item\",\n attrs: {\n \"label-width\": \"80px\",\n \"label\": \"执行时间\"\n }\n }, [_c('el-date-picker', {\n attrs: {\n \"align\": \"right\",\n \"type\": \"date\",\n \"placeholder\": \"选择日期\",\n \"picker-options\": _vm.pickerOptions1\n },\n model: {\n value: (_vm.filters.executeTime),\n callback: function($$v) {\n _vm.$set(_vm.filters, \"executeTime\", $$v)\n },\n expression: \"filters.executeTime\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"span\": 7\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"天数\"\n }\n }, [_c('el-select', {\n attrs: {\n \"multiple\": \"\",\n \"placeholder\": \"请选择\"\n },\n model: {\n value: (_vm.filters.cycleDay),\n callback: function($$v) {\n _vm.$set(_vm.filters, \"cycleDay\", $$v)\n },\n expression: \"filters.cycleDay\"\n }\n }, _vm._l((_vm.cycleDays), function(item) {\n return _c('el-option', {\n key: item.value,\n attrs: {\n \"label\": item.label,\n \"value\": item.value\n }\n })\n }), 1)], 1)], 1), _vm._v(\" \"), _c('el-col', {\n staticStyle: {\n \"margin-left\": \"20px\"\n },\n attrs: {\n \"span\": 6\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"是否周期性:\"\n }\n }, [_c('el-radio-group', {\n model: {\n value: (_vm.filters.isCycle),\n callback: function($$v) {\n _vm.$set(_vm.filters, \"isCycle\", $$v)\n },\n expression: \"filters.isCycle\"\n }\n }, [_c('el-radio', {\n staticClass: \"radio\",\n attrs: {\n \"label\": 1\n }\n }, [_vm._v(\"是\")]), _vm._v(\" \"), _c('el-radio', {\n staticClass: \"radio\",\n attrs: {\n \"label\": 0\n }\n }, [_vm._v(\"否\")])], 1)], 1)], 1), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"span\": 2\n }\n }, [_c('el-form-item', {\n staticStyle: {\n \"margin-left\": \"10px\"\n }\n }, [_c('el-button', {\n attrs: {\n \"type\": \"primary\",\n \"icon\": \"search\"\n },\n on: {\n \"click\": _vm.getPlans\n }\n }, [_vm._v(\"查询\")])], 1)], 1)], 1)], 1)], 1), _vm._v(\" \"), _c('div', {\n staticClass: \"panel\"\n }, [_c('div', {\n staticClass: \"panel-title\"\n }, [_c('span', {\n domProps: {\n \"textContent\": _vm._s(_vm.panelTitle)\n }\n }), _vm._v(\" \"), _c('div', {\n staticClass: \"fr\"\n }, [_c('el-button', {\n attrs: {\n \"size\": \"small\"\n },\n on: {\n \"click\": function($event) {\n $event.stopPropagation();\n return _vm.on_refresh($event)\n }\n }\n }, [_c('i', {\n staticClass: \"fa fa-refresh\"\n })])], 1)]), _vm._v(\" \"), _c('div', {\n staticClass: \"panel-body\"\n }, [_c('el-table', {\n directives: [{\n name: \"loading\",\n rawName: \"v-loading\",\n value: (_vm.listLoading),\n expression: \"listLoading\"\n }],\n attrs: {\n \"data\": _vm.plans,\n \"highlight-current-row\": \"\"\n },\n on: {\n \"selection-change\": _vm.selsChange\n }\n }, [_c('el-table-column', {\n attrs: {\n \"type\": \"index\",\n \"width\": \"60\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"strTitle\",\n \"label\": \"维护项名称\",\n \"width\": \"120\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"description\",\n \"label\": \"描述\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"executeTime\",\n \"label\": \"执行时间\",\n \"width\": \"120\",\n \"sortable\": \"\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"isCycle\",\n \"label\": \"是否周期性\",\n \"width\": \"130\",\n \"formatter\": _vm.formatCycle\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"cStartTime\",\n \"label\": \"创建时间\",\n \"width\": \"120\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"uStartTime\",\n \"label\": \"更新时间\",\n \"width\": \"120\"\n }\n })], 1), _vm._v(\" \"), _c('el-col', {\n staticClass: \"toolbar\",\n attrs: {\n \"span\": 24\n }\n }, [_c('el-pagination', {\n staticClass: \"fr\",\n attrs: {\n \"current-page\": _vm.listQuery.curPage,\n \"page-sizes\": [10, 20, 30, 50],\n \"page-size\": _vm.listQuery.pageSize,\n \"layout\": \"total, sizes, prev, pager, next, jumper\",\n \"total\": _vm.total\n },\n on: {\n \"size-change\": _vm.handleSizeChange,\n \"current-change\": _vm.handleCurrentChange,\n \"update:currentPage\": function($event) {\n return _vm.$set(_vm.listQuery, \"curPage\", $event)\n },\n \"update:current-page\": function($event) {\n return _vm.$set(_vm.listQuery, \"curPage\", $event)\n }\n }\n })], 1)], 1)]), _vm._v(\" \"), _c('el-dialog', {\n attrs: {\n \"title\": \"编辑维护计划\",\n \"close-on-click-modal\": false\n },\n model: {\n value: (_vm.editFormVisible),\n callback: function($$v) {\n _vm.editFormVisible = $$v\n },\n expression: \"editFormVisible\"\n }\n }, [_c('el-form', {\n ref: \"editForm\",\n attrs: {\n \"model\": _vm.editForm,\n \"label-width\": \"80px\",\n \"rules\": _vm.editFormRules\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"名称\",\n \"prop\": \"strTitle\"\n }\n }, [_c('el-input', {\n attrs: {\n \"auto-complete\": \"off\"\n },\n model: {\n value: (_vm.editForm.strTitle),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"strTitle\", $$v)\n },\n expression: \"editForm.strTitle\"\n }\n })], 1), _vm._v(\" \"), _c('el-form-item', {\n attrs: {\n \"label\": \"维护内容\",\n \"prop\": \"strContent\"\n }\n }, [_c('el-input', {\n attrs: {\n \"auto-complete\": \"off\"\n },\n model: {\n value: (_vm.editForm.strContent),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"strContent\", $$v)\n },\n expression: \"editForm.strContent\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('div', {\n staticClass: \"dialog-footer\",\n attrs: {\n \"slot\": \"footer\"\n },\n slot: \"footer\"\n }, [_c('el-button', {\n nativeOn: {\n \"click\": function($event) {\n _vm.editFormVisible = false\n }\n }\n }, [_vm._v(\"取消\")]), _vm._v(\" \"), _c('el-button', {\n attrs: {\n \"type\": \"primary\",\n \"loading\": _vm.editLoading\n },\n nativeOn: {\n \"click\": function($event) {\n return _vm.editSubmit($event)\n }\n }\n }, [_vm._v(\"提交\")])], 1)], 1), _vm._v(\" \"), _c('el-dialog', {\n attrs: {\n \"title\": \"新增维护计划\",\n \"close-on-click-modal\": false\n },\n model: {\n value: (_vm.addFormVisible),\n callback: function($$v) {\n _vm.addFormVisible = $$v\n },\n expression: \"addFormVisible\"\n }\n }, [_c('el-form', {\n ref: \"addForm\",\n attrs: {\n \"model\": _vm.addForm,\n \"label-width\": \"80px\",\n \"rules\": _vm.addFormRules\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"名称\",\n \"prop\": \"strTitle\"\n }\n }, [_c('el-input', {\n attrs: {\n \"auto-complete\": \"off\"\n },\n model: {\n value: (_vm.addForm.strTitle),\n callback: function($$v) {\n _vm.$set(_vm.addForm, \"strTitle\", $$v)\n },\n expression: \"addForm.strTitle\"\n }\n })], 1), _vm._v(\" \"), _c('el-form-item', {\n attrs: {\n \"label\": \"维护内容\",\n \"prop\": \"strContent\"\n }\n }, [_c('el-input', {\n attrs: {\n \"auto-complete\": \"off\"\n },\n model: {\n value: (_vm.addForm.strContent),\n callback: function($$v) {\n _vm.$set(_vm.addForm, \"strContent\", $$v)\n },\n expression: \"addForm.strContent\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('div', {\n staticClass: \"dialog-footer\",\n attrs: {\n \"slot\": \"footer\"\n },\n slot: \"footer\"\n }, [_c('el-button', {\n nativeOn: {\n \"click\": function($event) {\n _vm.addFormVisible = false\n }\n }\n }, [_vm._v(\"取消\")]), _vm._v(\" \"), _c('el-button', {\n attrs: {\n \"type\": \"primary\",\n \"loading\": _vm.addLoading\n },\n nativeOn: {\n \"click\": function($event) {\n return _vm.addSubmit($event)\n }\n }\n }, [_vm._v(\"提交\")])], 1)], 1)], 1)\n},staticRenderFns: []}\n\n/***/ }),\n\n/***/ 1064:\n/***/ (function(module, exports) {\n\nmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('el-form', {\n ref: \"ruleForm2\",\n staticClass: \"demo-ruleForm login-container\",\n attrs: {\n \"model\": _vm.ruleForm2,\n \"rules\": _vm.rules2,\n \"label-position\": \"left\",\n \"label-width\": \"0px\"\n }\n }, [_c('h3', {\n staticClass: \"title\"\n }, [_vm._v(\"系统登录\")]), _vm._v(\" \"), _c('el-form-item', {\n attrs: {\n \"prop\": \"account\"\n }\n }, [_c('el-input', {\n attrs: {\n \"type\": \"text\",\n \"auto-complete\": \"off\",\n \"placeholder\": \"账号\"\n },\n model: {\n value: (_vm.ruleForm2.account),\n callback: function($$v) {\n _vm.$set(_vm.ruleForm2, \"account\", $$v)\n },\n expression: \"ruleForm2.account\"\n }\n })], 1), _vm._v(\" \"), _c('el-form-item', {\n attrs: {\n \"prop\": \"checkPass\"\n }\n }, [_c('el-input', {\n attrs: {\n \"type\": \"password\",\n \"auto-complete\": \"off\",\n \"placeholder\": \"密码\"\n },\n model: {\n value: (_vm.ruleForm2.checkPass),\n callback: function($$v) {\n _vm.$set(_vm.ruleForm2, \"checkPass\", $$v)\n },\n expression: \"ruleForm2.checkPass\"\n }\n })], 1), _vm._v(\" \"), _c('el-checkbox', {\n staticClass: \"remember\",\n attrs: {\n \"checked\": \"\"\n },\n model: {\n value: (_vm.checked),\n callback: function($$v) {\n _vm.checked = $$v\n },\n expression: \"checked\"\n }\n }, [_vm._v(\"记住密码\")]), _vm._v(\" \"), _c('el-form-item', {\n staticStyle: {\n \"width\": \"100%\"\n }\n }, [_c('el-button', {\n staticStyle: {\n \"width\": \"100%\"\n },\n attrs: {\n \"type\": \"primary\",\n \"loading\": _vm.logining\n },\n nativeOn: {\n \"click\": function($event) {\n $event.preventDefault();\n return _vm.handleSubmit2($event)\n }\n }\n }, [_vm._v(\"登录\")])], 1)], 1)\n},staticRenderFns: []}\n\n/***/ }),\n\n/***/ 1065:\n/***/ (function(module, exports) {\n\nmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _vm._m(0)\n},staticRenderFns: [function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('section', {\n staticClass: \"threejs-container\"\n }, [_c('div', {\n attrs: {\n \"id\": \"demo\"\n }\n })])\n}]}\n\n/***/ }),\n\n/***/ 1066:\n/***/ (function(module, exports) {\n\nmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('div', {\n staticStyle: {\n \"padding\": \"12px\"\n }\n }, [_c('tinymce-editor', {\n attrs: {\n \"api-key\": \"API_KEY\",\n \"init\": {\n plugins: 'wordcount'\n }\n }\n })], 1)\n},staticRenderFns: []}\n\n/***/ }),\n\n/***/ 1067:\n/***/ (function(module, exports) {\n\nmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('div', [_c('input', {\n ref: \"excel-upload-input\",\n attrs: {\n \"id\": \"excel-upload-input\",\n \"type\": \"file\",\n \"accept\": \".xlsx, .xls\"\n },\n on: {\n \"change\": _vm.handleClick\n }\n }), _vm._v(\" \"), _c('div', {\n attrs: {\n \"id\": \"drop\"\n },\n on: {\n \"drop\": _vm.handleDrop,\n \"dragover\": _vm.handleDragover,\n \"dragenter\": _vm.handleDragover\n }\n }, [_vm._v(\"\\n 拖拽文件到此处 或者\\n \"), _c('el-button', {\n staticStyle: {\n \"margin-left\": \"16px\"\n },\n attrs: {\n \"loading\": _vm.loading,\n \"size\": \"mini\",\n \"type\": \"primary\"\n },\n on: {\n \"click\": _vm.handleUpload\n }\n }, [_vm._v(\"浏览\")])], 1)])\n},staticRenderFns: []}\n\n/***/ }),\n\n/***/ 1068:\n/***/ (function(module, exports) {\n\nmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('el-row', {\n staticClass: \"container\"\n }, [_c('el-col', {\n staticClass: \"main\",\n attrs: {\n \"span\": 24\n }\n }, [_c('aside', {\n class: _vm.collapsed ? 'menu-collapsed' : 'menu-expanded'\n }, [(!_vm.collapsed) ? _c('el-menu', {\n staticClass: \"el-menu-vertical-demo\",\n attrs: {\n \"default-active\": _vm.$route.path,\n \"unique-opened\": \"\",\n \"router\": \"\"\n }\n }, [_vm._l((_vm.$router.options.routes), function(item, index) {\n return (!item.hidden) ? [(!item.leaf) ? _c('el-submenu', {\n attrs: {\n \"index\": index + ''\n }\n }, [_c('template', {\n slot: \"title\"\n }, [_c('i', {\n class: item.iconCls\n }), _vm._v(_vm._s(item.name))]), _vm._v(\" \"), _vm._l((item.children), function(child) {\n return (!child.hidden) ? _c('el-menu-item', {\n key: child.path,\n staticClass: \"menu-list\",\n attrs: {\n \"index\": child.path\n }\n }, [_vm._v(_vm._s(child.name))]) : _vm._e()\n })], 2) : _vm._e(), _vm._v(\" \"), (item.leaf && item.children.length > 0) ? _c('el-menu-item', {\n staticClass: \"menu-list\",\n attrs: {\n \"index\": item.children[0].path\n }\n }, [_c('i', {\n class: item.iconCls\n }), _vm._v(_vm._s(item.children[0].name))]) : _vm._e()] : _vm._e()\n })], 2) : _vm._e(), _vm._v(\" \"), (_vm.collapsed) ? _c('ul', {\n ref: \"menuCollapsed\",\n staticClass: \"el-menu el-menu-vertical-demo collapsed\"\n }, _vm._l((_vm.$router.options.routes), function(item, index) {\n return (!item.hidden) ? _c('li', {\n staticClass: \"el-submenu item\"\n }, [(!item.leaf) ? [_c('div', {\n staticClass: \"el-submenu__title\",\n staticStyle: {\n \"padding-left\": \"20px\"\n },\n on: {\n \"mouseover\": function($event) {\n return _vm.showMenu(index, true)\n },\n \"mouseout\": function($event) {\n return _vm.showMenu(index, false)\n }\n }\n }, [_c('i', {\n class: item.iconCls\n })]), _vm._v(\" \"), _c('ul', {\n staticClass: \"el-menu submenu\",\n class: 'submenu-hook-' + index,\n on: {\n \"mouseover\": function($event) {\n return _vm.showMenu(index, true)\n },\n \"mouseout\": function($event) {\n return _vm.showMenu(index, false)\n }\n }\n }, _vm._l((item.children), function(child) {\n return (!child.hidden) ? _c('li', {\n key: child.path,\n staticClass: \"el-menu-item\",\n class: _vm.$route.path == child.path ? 'is-active' : '',\n staticStyle: {\n \"padding-left\": \"40px\"\n },\n on: {\n \"click\": function($event) {\n return _vm.$router.push(child.path)\n }\n }\n }, [_vm._v(_vm._s(child.name))]) : _vm._e()\n }), 0)] : [_c('li', {\n staticClass: \"el-submenu\"\n }, [_c('div', {\n staticClass: \"el-submenu__title el-menu-item\",\n class: _vm.$route.path == item.children[0].path ? 'is-active' : '',\n staticStyle: {\n \"padding-left\": \"20px\",\n \"height\": \"56px\",\n \"line-height\": \"56px\",\n \"padding\": \"0 20px\"\n },\n on: {\n \"click\": function($event) {\n return _vm.$router.push(item.children[0].path)\n }\n }\n }, [_c('i', {\n class: item.iconCls\n })])])]], 2) : _vm._e()\n }), 0) : _vm._e()], 1), _vm._v(\" \"), _c('section', {\n staticClass: \"content-container\"\n }, [_c('el-col', {\n staticClass: \"header\",\n attrs: {\n \"span\": 24\n }\n }, [_c('el-col', {\n attrs: {\n \"xs\": 2,\n \"sm\": 2,\n \"md\": 2,\n \"lg\": 2\n }\n }, [_c('div', {\n staticClass: \"tools\",\n staticStyle: {\n \"margin-bottom\": \"64px\"\n },\n on: {\n \"click\": function($event) {\n $event.preventDefault();\n return _vm.collapse($event)\n }\n }\n }, [_c('i', {\n staticClass: \"fa fa-align-justify\",\n staticStyle: {\n \"vertical-align\": \"middle\",\n \"color\": \"#353f4f\"\n }\n })])]), _vm._v(\" \"), _c('el-col', {\n staticClass: \"breadcrumb-container\",\n attrs: {\n \"xs\": 16,\n \"sm\": 16,\n \"md\": 16,\n \"lg\": 16\n }\n }, [_c('strong', {\n staticClass: \"title\"\n }, [_vm._v(_vm._s(_vm.$route.name))])]), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"xs\": 2,\n \"sm\": 2,\n \"md\": 2,\n \"lg\": 2\n }\n }, [_c('i', {\n staticClass: \"fa fa-bell fa-lg\",\n staticStyle: {\n \"color\": \"#353f4f\"\n },\n on: {\n \"click\": function($event) {\n _vm.dialogVisible = true\n }\n }\n }), _vm._v(\" \"), _c('el-badge', {\n attrs: {\n \"value\": 12,\n \"max\": 10\n }\n })], 1), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"xs\": 1,\n \"sm\": 1,\n \"md\": 1,\n \"lg\": 1\n }\n }, [_c('screenfull', {\n staticClass: \"screenfull\"\n })], 1), _vm._v(\" \"), _c('el-col', {\n staticClass: \"userinfo\",\n attrs: {\n \"xs\": 3,\n \"sm\": 3,\n \"md\": 3,\n \"lg\": 3\n }\n }, [_c('el-dropdown', {\n attrs: {\n \"trigger\": \"hover\"\n }\n }, [_c('span', {\n staticClass: \"el-dropdown-link userinfo-inner\"\n }, [_c('img', {\n attrs: {\n \"src\": this.sysUserAvatar\n }\n }), _vm._v(\" \" + _vm._s(_vm.sysUserName))]), _vm._v(\" \"), _c('el-dropdown-menu', {\n attrs: {\n \"slot\": \"dropdown\"\n },\n slot: \"dropdown\"\n }, [_c('router-link', {\n staticClass: \"inlineBlock\",\n staticStyle: {\n \"text-decoration\": \"none\",\n \"color\": \"black\"\n },\n attrs: {\n \"to\": \"/\"\n }\n }, [_c('el-dropdown-item', [_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t首页\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\")])], 1), _vm._v(\" \"), _c('a', {\n staticStyle: {\n \"text-decoration\": \"none\",\n \"color\": \"black\"\n },\n attrs: {\n \"target\": \"_blank\",\n \"href\": \"https://github.com/artdong/vue-admin\"\n }\n }, [_c('el-dropdown-item', [_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t开源项目地址\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\")])], 1), _vm._v(\" \"), _c('el-dropdown-item', {\n attrs: {\n \"divided\": \"\"\n },\n nativeOn: {\n \"click\": function($event) {\n return _vm.logout($event)\n }\n }\n }, [_vm._v(\"退出登录\")])], 1)], 1)], 1)], 1), _vm._v(\" \"), _c('div', {\n staticClass: \"grid-content bg-purple-light\"\n }, [_c('el-col', {\n staticClass: \"content-wrapper\",\n attrs: {\n \"span\": 24\n }\n }, [_c('transition', {\n attrs: {\n \"name\": \"fade\",\n \"mode\": \"out-in\"\n }\n }, [_c('router-view')], 1)], 1)], 1), _vm._v(\" \"), _c('el-dialog', {\n attrs: {\n \"title\": \"我的任务\",\n \"visible\": _vm.dialogVisible,\n \"close-on-click-modal\": false\n },\n on: {\n \"update:visible\": function($event) {\n _vm.dialogVisible = $event\n }\n }\n }, [_c('el-table', {\n directives: [{\n name: \"loading\",\n rawName: \"v-loading\",\n value: (_vm.listLoading),\n expression: \"listLoading\"\n }],\n attrs: {\n \"data\": _vm.maintains,\n \"highlight-current-row\": \"\"\n },\n on: {\n \"selection-change\": _vm.selsChange\n }\n }, [_c('el-table-column', {\n attrs: {\n \"type\": \"selection\",\n \"width\": \"55\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"type\": \"index\",\n \"width\": \"60\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"strTitle\",\n \"label\": \"维护项\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"strContent\",\n \"label\": \"维护内容\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"label\": \"操作\",\n \"width\": \"160\"\n },\n scopedSlots: _vm._u([{\n key: \"default\",\n fn: function(scope) {\n return [_c('el-button', {\n attrs: {\n \"size\": \"small\"\n },\n on: {\n \"click\": function($event) {\n return _vm.handleConfirm(scope.$index, scope.row)\n }\n }\n }, [_vm._v(\"确认\")]), _vm._v(\" \"), _c('el-dropdown', {\n staticStyle: {\n \"margin-left\": \"5px\"\n }\n }, [_c('span', {\n staticClass: \"el-dropdown-link\"\n }, [_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t 延迟\"), _c('i', {\n staticClass: \"el-icon-caret-bottom el-icon--right\"\n })]), _vm._v(\" \"), _c('el-dropdown-menu', {\n attrs: {\n \"slot\": \"dropdown\"\n },\n slot: \"dropdown\"\n }, [_c('el-dropdown-item', [_vm._v(\"5分钟\")]), _vm._v(\" \"), _c('el-dropdown-item', [_vm._v(\"10分钟\")]), _vm._v(\" \"), _c('el-dropdown-item', [_vm._v(\"15分钟\")]), _vm._v(\" \"), _c('el-dropdown-item', [_vm._v(\"20分钟\")]), _vm._v(\" \"), _c('el-dropdown-item', {\n attrs: {\n \"divided\": \"\"\n }\n }, [_vm._v(\"30分钟\")])], 1)], 1)]\n }\n }])\n })], 1), _vm._v(\" \"), _c('el-col', {\n staticClass: \"toolbar\",\n attrs: {\n \"span\": 24\n }\n }, [_c('el-button', {\n staticClass: \"fl\",\n attrs: {\n \"type\": \"danger\",\n \"disabled\": this.sels.length === 0\n },\n on: {\n \"click\": _vm.batchRemove\n }\n }, [_vm._v(\"批量删除\")]), _vm._v(\" \"), _c('el-pagination', {\n staticClass: \"fr\",\n attrs: {\n \"current-page\": _vm.listQuery.curPage,\n \"page-sizes\": [10, 20, 30, 50],\n \"page-size\": _vm.listQuery.pageSize,\n \"layout\": \"total, sizes, prev, pager, next, jumper\",\n \"total\": _vm.total\n },\n on: {\n \"size-change\": _vm.handleSizeChange,\n \"current-change\": _vm.handleCurrentChange,\n \"update:currentPage\": function($event) {\n return _vm.$set(_vm.listQuery, \"curPage\", $event)\n },\n \"update:current-page\": function($event) {\n return _vm.$set(_vm.listQuery, \"curPage\", $event)\n }\n }\n })], 1)], 1)], 1)])], 1)\n},staticRenderFns: []}\n\n/***/ }),\n\n/***/ 1069:\n/***/ (function(module, exports) {\n\nmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('p', {\n staticClass: \"page-container\"\n }, [_vm._v(\"404 page not found\")])\n},staticRenderFns: []}\n\n/***/ }),\n\n/***/ 1070:\n/***/ (function(module, exports) {\n\nmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('section', {\n staticClass: \"chart-container\"\n }, [_c('el-row', [_c('el-col', {\n attrs: {\n \"span\": 12\n }\n }, [_c('div', {\n staticStyle: {\n \"width\": \"100%\",\n \"height\": \"400px\"\n },\n attrs: {\n \"id\": \"chartColumn\"\n }\n })]), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"span\": 12\n }\n }, [_c('div', {\n staticStyle: {\n \"width\": \"100%\",\n \"height\": \"400px\"\n },\n attrs: {\n \"id\": \"chartBar\"\n }\n })]), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"span\": 12\n }\n }, [_c('div', {\n staticStyle: {\n \"width\": \"100%\",\n \"height\": \"400px\"\n },\n attrs: {\n \"id\": \"chartLine\"\n }\n })]), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"span\": 12\n }\n }, [_c('div', {\n staticStyle: {\n \"width\": \"100%\",\n \"height\": \"400px\"\n },\n attrs: {\n \"id\": \"chartPie\"\n }\n })]), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"span\": 24\n }\n }, [_c('a', {\n staticStyle: {\n \"float\": \"right\"\n },\n attrs: {\n \"href\": \"http://echarts.baidu.com/examples.html\",\n \"target\": \"_blank\"\n }\n }, [_vm._v(\"more>>\")])])], 1)], 1)\n},staticRenderFns: []}\n\n/***/ }),\n\n/***/ 1071:\n/***/ (function(module, exports) {\n\nmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('section', [_c('el-form', {\n staticStyle: {\n \"margin\": \"10px\"\n }\n }, [_c('el-row', [_c('el-col', {\n staticStyle: {\n \"margin-left\": \"12px\"\n },\n attrs: {\n \"xs\": 6,\n \"sm\": 6,\n \"md\": 6,\n \"lg\": 6\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"文件名:\"\n }\n }, [_c('el-input', {\n staticStyle: {\n \"width\": \"160px\"\n },\n attrs: {\n \"placeholder\": \"请输入文件名(默认为excel-list)\",\n \"prefix-icon\": \"el-icon-document\"\n },\n model: {\n value: (_vm.filename),\n callback: function($$v) {\n _vm.filename = $$v\n },\n expression: \"filename\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('el-col', {\n staticStyle: {\n \"margin-left\": \"12px\"\n },\n attrs: {\n \"xs\": 6,\n \"sm\": 6,\n \"md\": 6,\n \"lg\": 6\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"单元格自动宽度:\"\n }\n }, [_c('el-radio-group', {\n model: {\n value: (_vm.autoWidth),\n callback: function($$v) {\n _vm.autoWidth = $$v\n },\n expression: \"autoWidth\"\n }\n }, [_c('el-radio', {\n attrs: {\n \"label\": 1,\n \"border\": \"\"\n }\n }, [_vm._v(\"是\")]), _vm._v(\" \"), _c('el-radio', {\n attrs: {\n \"label\": 0,\n \"border\": \"\"\n }\n }, [_vm._v(\"否\")])], 1)], 1)], 1), _vm._v(\" \"), _c('el-col', {\n staticStyle: {\n \"margin-left\": \"12px\"\n },\n attrs: {\n \"xs\": 6,\n \"sm\": 6,\n \"md\": 6,\n \"lg\": 6\n }\n }, [_c('el-form-item', {\n staticStyle: {\n \"margin-left\": \"10px\"\n }\n }, [_c('el-button', {\n attrs: {\n \"type\": \"primary\",\n \"loading\": _vm.downloadLoading,\n \"icon\": \"document\"\n },\n on: {\n \"click\": _vm.handleDownload\n }\n }, [_vm._v(\"\\n 导出Excel\\n \")])], 1)], 1)], 1)], 1), _vm._v(\" \"), (false) ? _c('el-form', {\n ref: \"form\",\n staticStyle: {\n \"margin\": \"10px\"\n },\n attrs: {\n \"model\": _vm.form\n },\n on: {\n \"submit\": function($event) {\n $event.preventDefault();\n return _vm.onSubmit($event)\n }\n }\n }, [_c('el-form', {\n staticClass: \"demo-form-inline\",\n attrs: {\n \"inline\": true,\n \"model\": _vm.filters\n }\n }, [_c('el-row', [_c('el-col', {\n staticStyle: {\n \"margin-left\": \"12px\"\n },\n attrs: {\n \"xs\": 12,\n \"sm\": 12,\n \"md\": 12,\n \"lg\": 12\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"维护项\"\n }\n }, [_c('el-input', {\n staticStyle: {\n \"width\": \"160px\"\n },\n attrs: {\n \"placeholder\": \"维护项\"\n },\n model: {\n value: (_vm.filters.strTitle),\n callback: function($$v) {\n _vm.$set(_vm.filters, \"strTitle\", $$v)\n },\n expression: \"filters.strTitle\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"xs\": 10,\n \"sm\": 10,\n \"md\": 10,\n \"lg\": 10\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"维护内容\"\n }\n }, [_c('el-input', {\n staticStyle: {\n \"width\": \"180px\"\n },\n attrs: {\n \"placeholder\": \"维护内容\"\n },\n model: {\n value: (_vm.filters.strContent),\n callback: function($$v) {\n _vm.$set(_vm.filters, \"strContent\", $$v)\n },\n expression: \"filters.strContent\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"xs\": 24,\n \"sm\": 24,\n \"md\": 24,\n \"lg\": 12\n }\n }, [_c('el-form-item', {\n staticClass: \"postInfo-container-item\",\n attrs: {\n \"label-width\": \"80px\",\n \"label\": \"创建时间\"\n }\n }, [_c('el-date-picker', {\n attrs: {\n \"type\": \"datetimerange\",\n \"picker-options\": _vm.pickerOptions2,\n \"placeholder\": \"选择时间范围\",\n \"align\": \"right\"\n },\n model: {\n value: (_vm.filters.createTime),\n callback: function($$v) {\n _vm.$set(_vm.filters, \"createTime\", $$v)\n },\n expression: \"filters.createTime\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"xs\": 24,\n \"sm\": 24,\n \"md\": 24,\n \"lg\": 12\n }\n }, [_c('el-form-item', {\n staticClass: \"postInfo-container-item\",\n attrs: {\n \"label-width\": \"80px\",\n \"label\": \"更新时间\"\n }\n }, [_c('el-date-picker', {\n attrs: {\n \"type\": \"datetimerange\",\n \"picker-options\": _vm.pickerOptions2,\n \"placeholder\": \"选择时间范围\",\n \"align\": \"right\"\n },\n model: {\n value: (_vm.filters.updateTime),\n callback: function($$v) {\n _vm.$set(_vm.filters, \"updateTime\", $$v)\n },\n expression: \"filters.updateTime\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('el-col', {\n staticStyle: {\n \"margin-left\": \"12px\"\n },\n attrs: {\n \"xs\": 24,\n \"sm\": 24,\n \"md\": 24,\n \"lg\": 12\n }\n }, [_c('el-form-item', [_c('el-button', {\n attrs: {\n \"type\": \"primary\",\n \"icon\": \"search\"\n },\n on: {\n \"click\": _vm.getMaintains\n }\n }, [_vm._v(\"查询\")])], 1)], 1)], 1)], 1)], 1) : _vm._e(), _vm._v(\" \"), _c('div', {\n staticClass: \"panel\"\n }, [_c('div', {\n staticClass: \"panel-title\"\n }, [_c('span', {\n domProps: {\n \"textContent\": _vm._s(_vm.panelTitle)\n }\n }), _vm._v(\" \"), _c('div', {\n staticClass: \"fr\"\n }, [_c('el-button', {\n attrs: {\n \"size\": \"small\"\n },\n on: {\n \"click\": function($event) {\n $event.stopPropagation();\n return _vm.on_refresh($event)\n }\n }\n }, [_c('i', {\n staticClass: \"fa fa-refresh\"\n })]), _vm._v(\" \"), _c('el-button', {\n attrs: {\n \"type\": \"primary\",\n \"icon\": \"plus\",\n \"size\": \"small\"\n },\n on: {\n \"click\": _vm.handleAdd\n }\n }, [_vm._v(\"新增\")])], 1)]), _vm._v(\" \"), _c('div', {\n staticClass: \"panel-body\"\n }, [_c('el-table', {\n directives: [{\n name: \"loading\",\n rawName: \"v-loading\",\n value: (_vm.listLoading),\n expression: \"listLoading\"\n }],\n attrs: {\n \"data\": _vm.maintains,\n \"highlight-current-row\": \"\"\n },\n on: {\n \"selection-change\": _vm.selsChange\n }\n }, [_c('el-table-column', {\n attrs: {\n \"type\": \"selection\",\n \"width\": \"55\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"type\": \"index\",\n \"width\": \"60\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"label\": \"维护项名称\"\n },\n scopedSlots: _vm._u([{\n key: \"default\",\n fn: function(scope) {\n return [_c('span', {\n domProps: {\n \"innerHTML\": _vm._s(_vm.brightenKeyword(scope.row.strTitle, _vm.filters.strTitle))\n }\n })]\n }\n }])\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"label\": \"维护内容\"\n },\n scopedSlots: _vm._u([{\n key: \"default\",\n fn: function(scope) {\n return [_c('span', {\n domProps: {\n \"innerHTML\": _vm._s(_vm.brightenKeyword(scope.row.strContent, _vm.filters.strContent))\n }\n })]\n }\n }])\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"createTime\",\n \"label\": \"创建时间\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"updateTime\",\n \"label\": \"更新时间\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"label\": \"操作\",\n \"width\": \"150\"\n },\n scopedSlots: _vm._u([{\n key: \"default\",\n fn: function(scope) {\n return [_c('el-button', {\n attrs: {\n \"size\": \"small\"\n },\n on: {\n \"click\": function($event) {\n return _vm.handleEdit(scope.$index, scope.row)\n }\n }\n }, [_vm._v(\"编辑\")]), _vm._v(\" \"), _c('el-button', {\n attrs: {\n \"type\": \"danger\",\n \"size\": \"small\"\n },\n on: {\n \"click\": function($event) {\n return _vm.handleDel(scope.$index, scope.row)\n }\n }\n }, [_vm._v(\"删除\\n \")])]\n }\n }])\n })], 1), _vm._v(\" \"), _c('el-col', {\n staticClass: \"toolbar\",\n attrs: {\n \"span\": 24\n }\n }, [_c('el-button', {\n staticClass: \"fl\",\n attrs: {\n \"type\": \"danger\",\n \"disabled\": this.sels.length === 0\n },\n on: {\n \"click\": _vm.batchRemove\n }\n }, [_vm._v(\"批量删除\\n \")]), _vm._v(\" \"), _c('el-pagination', {\n staticClass: \"fr\",\n attrs: {\n \"current-page\": _vm.listQuery.curPage,\n \"page-sizes\": [10, 20, 30, 50],\n \"page-size\": _vm.listQuery.pageSize,\n \"layout\": \"total, sizes, prev, pager, next, jumper\",\n \"total\": _vm.total\n },\n on: {\n \"size-change\": _vm.handleSizeChange,\n \"current-change\": _vm.handleCurrentChange,\n \"update:currentPage\": function($event) {\n return _vm.$set(_vm.listQuery, \"curPage\", $event)\n },\n \"update:current-page\": function($event) {\n return _vm.$set(_vm.listQuery, \"curPage\", $event)\n }\n }\n })], 1)], 1)]), _vm._v(\" \"), _c('el-dialog', {\n attrs: {\n \"title\": \"编辑维护项\",\n \"close-on-click-modal\": false\n },\n model: {\n value: (_vm.editFormVisible),\n callback: function($$v) {\n _vm.editFormVisible = $$v\n },\n expression: \"editFormVisible\"\n }\n }, [_c('el-form', {\n ref: \"editForm\",\n attrs: {\n \"model\": _vm.editForm,\n \"label-width\": \"80px\",\n \"rules\": _vm.editFormRules\n }\n }, [_c('el-form-item', {\n staticStyle: {\n \"width\": \"450px\"\n },\n attrs: {\n \"label\": \"名称\",\n \"prop\": \"strTitle\"\n }\n }, [_c('el-input', {\n attrs: {\n \"auto-complete\": \"off\"\n },\n model: {\n value: (_vm.editForm.strTitle),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"strTitle\", $$v)\n },\n expression: \"editForm.strTitle\"\n }\n })], 1), _vm._v(\" \"), _c('el-form-item', {\n staticStyle: {\n \"width\": \"450px\"\n },\n attrs: {\n \"label\": \"维护内容\",\n \"prop\": \"strContent\"\n }\n }, [_c('el-input', {\n attrs: {\n \"type\": \"textarea\",\n \"rows\": 2,\n \"placeholder\": \"请输入内容\"\n },\n model: {\n value: (_vm.editForm.strContent),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"strContent\", $$v)\n },\n expression: \"editForm.strContent\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('div', {\n staticClass: \"dialog-footer\",\n attrs: {\n \"slot\": \"footer\"\n },\n slot: \"footer\"\n }, [_c('el-button', {\n nativeOn: {\n \"click\": function($event) {\n _vm.editFormVisible = false\n }\n }\n }, [_vm._v(\"取消\")]), _vm._v(\" \"), _c('el-button', {\n attrs: {\n \"type\": \"primary\",\n \"loading\": _vm.editLoading\n },\n nativeOn: {\n \"click\": function($event) {\n return _vm.editSubmit($event)\n }\n }\n }, [_vm._v(\"提交\")])], 1)], 1), _vm._v(\" \"), _c('el-dialog', {\n attrs: {\n \"title\": \"新增维护项\",\n \"close-on-click-modal\": false,\n \"size\": \"small\"\n },\n model: {\n value: (_vm.addFormVisible),\n callback: function($$v) {\n _vm.addFormVisible = $$v\n },\n expression: \"addFormVisible\"\n }\n }, [_c('el-form', {\n ref: \"addForm\",\n attrs: {\n \"model\": _vm.addForm,\n \"label-width\": \"80px\",\n \"rules\": _vm.addFormRules\n }\n }, [_c('el-form-item', {\n staticStyle: {\n \"width\": \"450px\"\n },\n attrs: {\n \"label\": \"名称\",\n \"prop\": \"strTitle\"\n }\n }, [_c('el-input', {\n attrs: {\n \"auto-complete\": \"off\"\n },\n model: {\n value: (_vm.addForm.strTitle),\n callback: function($$v) {\n _vm.$set(_vm.addForm, \"strTitle\", $$v)\n },\n expression: \"addForm.strTitle\"\n }\n })], 1), _vm._v(\" \"), _c('el-form-item', {\n staticStyle: {\n \"width\": \"450px\"\n },\n attrs: {\n \"label\": \"维护内容\",\n \"prop\": \"strContent\"\n }\n }, [_c('el-input', {\n attrs: {\n \"type\": \"textarea\",\n \"rows\": 2,\n \"placeholder\": \"请输入内容\"\n },\n model: {\n value: (_vm.addForm.strContent),\n callback: function($$v) {\n _vm.$set(_vm.addForm, \"strContent\", $$v)\n },\n expression: \"addForm.strContent\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('div', {\n staticClass: \"dialog-footer\",\n attrs: {\n \"slot\": \"footer\"\n },\n slot: \"footer\"\n }, [_c('el-button', {\n nativeOn: {\n \"click\": function($event) {\n _vm.addFormVisible = false\n }\n }\n }, [_vm._v(\"取消\")]), _vm._v(\" \"), _c('el-button', {\n attrs: {\n \"type\": \"primary\",\n \"loading\": _vm.addLoading\n },\n nativeOn: {\n \"click\": function($event) {\n return _vm.addSubmit($event)\n }\n }\n }, [_vm._v(\"提交\")])], 1)], 1)], 1)\n},staticRenderFns: []}\n\n/***/ }),\n\n/***/ 1072:\n/***/ (function(module, exports) {\n\nmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('section', [_c('el-collapse', {\n model: {\n value: (_vm.activeNames),\n callback: function($$v) {\n _vm.activeNames = $$v\n },\n expression: \"activeNames\"\n }\n }, [_c('el-collapse-item', {\n attrs: {\n \"title\": \"查询条件\",\n \"name\": \"1\"\n }\n }, [_c('el-form', {\n ref: \"form\",\n staticStyle: {\n \"margin\": \"10px\",\n \"width\": \"60%\",\n \"min-width\": \"600px\"\n },\n attrs: {\n \"model\": _vm.form,\n \"label-width\": \"80px\"\n },\n on: {\n \"submit\": function($event) {\n $event.preventDefault();\n return _vm.onSubmit($event)\n }\n }\n }, [_c('el-row', [_c('el-col', {\n attrs: {\n \"span\": 12\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"设备编号\"\n }\n }, [_c('el-select', {\n attrs: {\n \"placeholder\": \"全部\"\n },\n model: {\n value: (_vm.form.deviceNo),\n callback: function($$v) {\n _vm.$set(_vm.form, \"deviceNo\", $$v)\n },\n expression: \"form.deviceNo\"\n }\n }, _vm._l((_vm.form.deviceNoItems), function(item) {\n return _c('el-option', {\n key: item,\n attrs: {\n \"value\": item.value\n }\n }, [_vm._v(_vm._s(item.text))])\n }), 1), _vm._v(\" \"), _c('p', [_vm._v(\"已选:\" + _vm._s(_vm.form.deviceNo))])], 1)], 1), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"span\": 12\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label-width\": \"80px\",\n \"label\": \"开始时间\"\n }\n }, [_c('el-date-picker', {\n attrs: {\n \"type\": \"datetime\",\n \"format\": \"yyyy-MM-dd HH:mm:ss\",\n \"placeholder\": \"选择日期时间\"\n },\n model: {\n value: (_vm.form.startTime),\n callback: function($$v) {\n _vm.$set(_vm.form, \"startTime\", $$v)\n },\n expression: \"form.startTime\"\n }\n })], 1)], 1)], 1), _vm._v(\" \"), _c('el-form-item', {\n attrs: {\n \"label\": \"重复设置\"\n }\n }, [_c('el-checkbox-group', {\n model: {\n value: (_vm.form.repeat),\n callback: function($$v) {\n _vm.$set(_vm.form, \"repeat\", $$v)\n },\n expression: \"form.repeat\"\n }\n }, [_c('el-checkbox', {\n attrs: {\n \"label\": \"一次\",\n \"name\": \"repeat\"\n }\n }), _vm._v(\" \"), _c('el-checkbox', {\n attrs: {\n \"label\": \"每天\",\n \"name\": \"repeat\"\n }\n }), _vm._v(\" \"), _c('el-checkbox', {\n attrs: {\n \"label\": \"每周\",\n \"name\": \"repeat\"\n }\n }), _vm._v(\" \"), _c('el-checkbox', {\n attrs: {\n \"label\": \"每季\",\n \"name\": \"repeat\"\n }\n }), _vm._v(\" \"), _c('el-checkbox', {\n attrs: {\n \"label\": \"每年\",\n \"name\": \"repeat\"\n }\n }), _vm._v(\" \"), _c('p', [_vm._v(\"已选:\" + _vm._s(_vm.form.repeat.join('|')))])], 1)], 1), _vm._v(\" \"), _c('el-row', [_c('el-col', {\n attrs: {\n \"span\": 12\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"类型选择\"\n }\n }, [_c('el-checkbox-group', {\n model: {\n value: (_vm.form.type),\n callback: function($$v) {\n _vm.$set(_vm.form, \"type\", $$v)\n },\n expression: \"form.type\"\n }\n }, [_c('el-checkbox', {\n attrs: {\n \"label\": \"充电\",\n \"name\": \"type\"\n }\n }), _vm._v(\" \"), _c('el-checkbox', {\n attrs: {\n \"label\": \"放电\",\n \"name\": \"type\"\n }\n }), _vm._v(\" \"), _c('el-checkbox', {\n attrs: {\n \"label\": \"内阻\",\n \"name\": \"type\"\n }\n })], 1), _vm._v(\" \"), _c('p', [_vm._v(\"已选:\" + _vm._s(_vm.form.type.join('|')))])], 1)], 1), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"span\": 12\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"启用状态\"\n }\n }, [_c('el-radio-group', {\n model: {\n value: (_vm.form.state),\n callback: function($$v) {\n _vm.$set(_vm.form, \"state\", $$v)\n },\n expression: \"form.state\"\n }\n }, [_c('el-radio', {\n staticClass: \"radio\",\n attrs: {\n \"label\": 1\n }\n }, [_vm._v(\"已启用\")]), _vm._v(\" \"), _c('el-radio', {\n staticClass: \"radio\",\n attrs: {\n \"label\": 0\n }\n }, [_vm._v(\"未启用\")])], 1)], 1)], 1)], 1), _vm._v(\" \"), _c('el-form', {\n attrs: {\n \"model\": _vm.filters\n }\n }, [_c('el-col', {\n attrs: {\n \"span\": 6\n }\n }, [_c('el-form-item', {\n staticStyle: {\n \"margin-left\": \"10px\"\n }\n }, [_c('el-input', {\n attrs: {\n \"placeholder\": \"设备名称\"\n },\n model: {\n value: (_vm.filters.siteName),\n callback: function($$v) {\n _vm.$set(_vm.filters, \"siteName\", $$v)\n },\n expression: \"filters.siteName\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"span\": 4\n }\n }, [_c('el-form-item', {\n staticStyle: {\n \"margin-left\": \"30px\"\n }\n }, [_c('el-button', {\n attrs: {\n \"type\": \"primary\"\n },\n on: {\n \"click\": _vm.getUsers\n }\n }, [_vm._v(\"查询\")])], 1)], 1)], 1)], 1)], 1)], 1), _vm._v(\" \"), _c('div', {\n staticClass: \"panel\"\n }, [_c('div', {\n staticClass: \"panel-title\"\n }, [_c('span', {\n domProps: {\n \"textContent\": _vm._s(_vm.panelTitle)\n }\n }), _vm._v(\" \"), _c('div', {\n staticClass: \"fr\"\n }, [_c('el-button', {\n attrs: {\n \"size\": \"small\"\n },\n on: {\n \"click\": function($event) {\n $event.stopPropagation();\n return _vm.on_refresh($event)\n }\n }\n }, [_c('i', {\n staticClass: \"fa fa-refresh\"\n })]), _vm._v(\" \"), _c('el-button', {\n attrs: {\n \"type\": \"primary\",\n \"icon\": \"plus\",\n \"size\": \"small\"\n },\n on: {\n \"click\": _vm.handleAdd\n }\n }, [_vm._v(\"新增\")])], 1)]), _vm._v(\" \"), _c('div', {\n staticClass: \"panel-body\"\n }, [_c('el-table', {\n directives: [{\n name: \"loading\",\n rawName: \"v-loading\",\n value: (_vm.listLoading),\n expression: \"listLoading\"\n }],\n staticStyle: {\n \"width\": \"100%\"\n },\n attrs: {\n \"data\": _vm.users,\n \"highlight-current-row\": \"\"\n },\n on: {\n \"selection-change\": _vm.selsChange\n }\n }, [_c('el-table-column', {\n attrs: {\n \"type\": \"selection\",\n \"width\": \"55\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"type\": \"index\",\n \"width\": \"60\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"siteName\",\n \"label\": \"站点名称\",\n \"width\": \"120\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"deviceNo\",\n \"label\": \"设备号\",\n \"width\": \"100\",\n \"sortable\": \"\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"startTime\",\n \"label\": \"开始时间\",\n \"width\": \"120\",\n \"sortable\": \"\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"repeat\",\n \"label\": \"重复设置\",\n \"min-width\": \"120\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"state\",\n \"label\": \"启用状态\",\n \"min-width\": \"120\",\n \"formatter\": _vm.formatState\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"type\",\n \"label\": \"类型\",\n \"min-width\": \"100\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"label\": \"操作\",\n \"width\": \"150\"\n },\n scopedSlots: _vm._u([{\n key: \"default\",\n fn: function(scope) {\n return [_c('el-button', {\n attrs: {\n \"size\": \"small\"\n },\n on: {\n \"click\": function($event) {\n return _vm.handleEdit(scope.$index, scope.row)\n }\n }\n }, [_vm._v(\"编辑\")]), _vm._v(\" \"), _c('el-button', {\n attrs: {\n \"type\": \"danger\",\n \"size\": \"small\"\n },\n on: {\n \"click\": function($event) {\n return _vm.handleDel(scope.$index, scope.row)\n }\n }\n }, [_vm._v(\"删除\")])]\n }\n }])\n })], 1), _vm._v(\" \"), _c('el-col', {\n staticClass: \"toolbar\",\n attrs: {\n \"span\": 24\n }\n }, [_c('el-button', {\n staticClass: \"fl\",\n attrs: {\n \"type\": \"danger\",\n \"disabled\": this.sels.length === 0\n },\n on: {\n \"click\": _vm.batchRemove\n }\n }, [_vm._v(\"批量删除\")]), _vm._v(\" \"), _c('el-pagination', {\n staticClass: \"fr\",\n attrs: {\n \"current-page\": _vm.listQuery.curPage,\n \"page-sizes\": [10, 20, 30, 50],\n \"page-size\": _vm.listQuery.pageSize,\n \"layout\": \"total, sizes, prev, pager, next, jumper\",\n \"total\": _vm.total\n },\n on: {\n \"size-change\": _vm.handleSizeChange,\n \"current-change\": _vm.handleCurrentChange,\n \"update:currentPage\": function($event) {\n return _vm.$set(_vm.listQuery, \"curPage\", $event)\n },\n \"update:current-page\": function($event) {\n return _vm.$set(_vm.listQuery, \"curPage\", $event)\n }\n }\n })], 1)], 1)]), _vm._v(\" \"), _c('el-dialog', {\n attrs: {\n \"title\": \"编辑\",\n \"close-on-click-modal\": false\n },\n model: {\n value: (_vm.editFormVisible),\n callback: function($$v) {\n _vm.editFormVisible = $$v\n },\n expression: \"editFormVisible\"\n }\n }, [_c('el-form', {\n ref: \"editForm\",\n attrs: {\n \"model\": _vm.editForm,\n \"label-width\": \"80px\",\n \"rules\": _vm.editFormRules\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"站点名称\",\n \"prop\": \"siteName\"\n }\n }, [_c('el-input', {\n attrs: {\n \"auto-complete\": \"off\"\n },\n model: {\n value: (_vm.editForm.siteName),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"siteName\", $$v)\n },\n expression: \"editForm.siteName\"\n }\n })], 1), _vm._v(\" \"), _c('el-form-item', {\n attrs: {\n \"label\": \"设备号\"\n }\n }, [_c('el-input-number', {\n attrs: {\n \"min\": 0,\n \"max\": 200\n },\n model: {\n value: (_vm.editForm.deviceNo),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"deviceNo\", $$v)\n },\n expression: \"editForm.deviceNo\"\n }\n })], 1), _vm._v(\" \"), _c('el-form-item', {\n attrs: {\n \"label\": \"开始时间\"\n }\n }, [_c('el-date-picker', {\n attrs: {\n \"type\": \"date\",\n \"placeholder\": \"选择日期\"\n },\n model: {\n value: (_vm.editForm.startTime),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"startTime\", $$v)\n },\n expression: \"editForm.startTime\"\n }\n })], 1), _vm._v(\" \"), _c('el-form-item', {\n attrs: {\n \"label\": \"重复设置\"\n }\n }, [_c('el-checkbox-group', {\n model: {\n value: (_vm.editForm.repeat),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"repeat\", $$v)\n },\n expression: \"editForm.repeat\"\n }\n }, [_c('el-checkbox', {\n attrs: {\n \"label\": \"一次\",\n \"name\": \"repeat\"\n }\n }), _vm._v(\" \"), _c('el-checkbox', {\n attrs: {\n \"label\": \"每天\",\n \"name\": \"repeat\"\n }\n }), _vm._v(\" \"), _c('el-checkbox', {\n attrs: {\n \"label\": \"每周\",\n \"name\": \"repeat\"\n }\n }), _vm._v(\" \"), _c('el-checkbox', {\n attrs: {\n \"label\": \"每季\",\n \"name\": \"repeat\"\n }\n }), _vm._v(\" \"), _c('el-checkbox', {\n attrs: {\n \"label\": \"每年\",\n \"name\": \"repeat\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('el-row', [_c('el-col', {\n attrs: {\n \"span\": 12\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"类型选择\"\n }\n }, [_c('el-checkbox-group', {\n model: {\n value: (_vm.editForm.type),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"type\", $$v)\n },\n expression: \"editForm.type\"\n }\n }, [_c('el-checkbox', {\n attrs: {\n \"label\": \"充电\",\n \"name\": \"type\"\n }\n }), _vm._v(\" \"), _c('el-checkbox', {\n attrs: {\n \"label\": \"放电\",\n \"name\": \"type\"\n }\n }), _vm._v(\" \"), _c('el-checkbox', {\n attrs: {\n \"label\": \"内阻\",\n \"name\": \"type\"\n }\n })], 1)], 1)], 1), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"span\": 12\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"启用状态\"\n }\n }, [_c('el-radio-group', {\n model: {\n value: (_vm.editForm.state),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"state\", $$v)\n },\n expression: \"editForm.state\"\n }\n }, [_c('el-radio', {\n staticClass: \"radio\",\n attrs: {\n \"label\": 1\n }\n }, [_vm._v(\"已启用\")]), _vm._v(\" \"), _c('el-radio', {\n staticClass: \"radio\",\n attrs: {\n \"label\": 0\n }\n }, [_vm._v(\"未启用\")])], 1)], 1)], 1)], 1)], 1), _vm._v(\" \"), _c('div', {\n staticClass: \"dialog-footer\",\n attrs: {\n \"slot\": \"footer\"\n },\n slot: \"footer\"\n }, [_c('el-button', {\n nativeOn: {\n \"click\": function($event) {\n _vm.editFormVisible = false\n }\n }\n }, [_vm._v(\"取消\")]), _vm._v(\" \"), _c('el-button', {\n attrs: {\n \"type\": \"primary\",\n \"loading\": _vm.editLoading\n },\n nativeOn: {\n \"click\": function($event) {\n return _vm.editSubmit($event)\n }\n }\n }, [_vm._v(\"提交\")])], 1)], 1), _vm._v(\" \"), _c('el-dialog', {\n attrs: {\n \"title\": \"新增\",\n \"close-on-click-modal\": false\n },\n model: {\n value: (_vm.addFormVisible),\n callback: function($$v) {\n _vm.addFormVisible = $$v\n },\n expression: \"addFormVisible\"\n }\n }, [_c('el-form', {\n ref: \"addForm\",\n attrs: {\n \"model\": _vm.addForm,\n \"label-width\": \"80px\",\n \"rules\": _vm.addFormRules\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"站点名称\",\n \"prop\": \"siteName\"\n }\n }, [_c('el-input', {\n attrs: {\n \"auto-complete\": \"off\"\n },\n model: {\n value: (_vm.addForm.siteName),\n callback: function($$v) {\n _vm.$set(_vm.addForm, \"siteName\", $$v)\n },\n expression: \"addForm.siteName\"\n }\n })], 1), _vm._v(\" \"), _c('el-form-item', {\n attrs: {\n \"label\": \"设备号\"\n }\n }, [_c('el-input-number', {\n attrs: {\n \"min\": 0,\n \"max\": 200\n },\n model: {\n value: (_vm.addForm.deviceNo),\n callback: function($$v) {\n _vm.$set(_vm.addForm, \"deviceNo\", $$v)\n },\n expression: \"addForm.deviceNo\"\n }\n })], 1), _vm._v(\" \"), _c('el-form-item', {\n attrs: {\n \"label\": \"开始时间\"\n }\n }, [_c('el-date-picker', {\n attrs: {\n \"type\": \"date\",\n \"placeholder\": \"选择日期\"\n },\n model: {\n value: (_vm.addForm.startTime),\n callback: function($$v) {\n _vm.$set(_vm.addForm, \"startTime\", $$v)\n },\n expression: \"addForm.startTime\"\n }\n })], 1), _vm._v(\" \"), _c('el-form-item', {\n attrs: {\n \"label\": \"重复设置\"\n }\n }, [_c('el-checkbox-group', {\n model: {\n value: (_vm.addForm.repeat),\n callback: function($$v) {\n _vm.$set(_vm.addForm, \"repeat\", $$v)\n },\n expression: \"addForm.repeat\"\n }\n }, [_c('el-checkbox', {\n attrs: {\n \"label\": \"一次\",\n \"name\": \"repeat\"\n }\n }), _vm._v(\" \"), _c('el-checkbox', {\n attrs: {\n \"label\": \"每天\",\n \"name\": \"repeat\"\n }\n }), _vm._v(\" \"), _c('el-checkbox', {\n attrs: {\n \"label\": \"每周\",\n \"name\": \"repeat\"\n }\n }), _vm._v(\" \"), _c('el-checkbox', {\n attrs: {\n \"label\": \"每季\",\n \"name\": \"repeat\"\n }\n }), _vm._v(\" \"), _c('el-checkbox', {\n attrs: {\n \"label\": \"每年\",\n \"name\": \"repeat\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('el-row', [_c('el-col', {\n attrs: {\n \"span\": 12\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"类型选择\"\n }\n }, [_c('el-checkbox-group', {\n model: {\n value: (_vm.addForm.type),\n callback: function($$v) {\n _vm.$set(_vm.addForm, \"type\", $$v)\n },\n expression: \"addForm.type\"\n }\n }, [_c('el-checkbox', {\n attrs: {\n \"label\": \"充电\",\n \"name\": \"type\"\n }\n }), _vm._v(\" \"), _c('el-checkbox', {\n attrs: {\n \"label\": \"放电\",\n \"name\": \"type\"\n }\n }), _vm._v(\" \"), _c('el-checkbox', {\n attrs: {\n \"label\": \"内阻\",\n \"name\": \"type\"\n }\n })], 1)], 1)], 1), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"span\": 12\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"启用状态\"\n }\n }, [_c('el-radio-group', {\n model: {\n value: (_vm.editForm.state),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"state\", $$v)\n },\n expression: \"editForm.state\"\n }\n }, [_c('el-radio', {\n staticClass: \"radio\",\n attrs: {\n \"label\": 1\n }\n }, [_vm._v(\"已启用\")]), _vm._v(\" \"), _c('el-radio', {\n staticClass: \"radio\",\n attrs: {\n \"label\": 0\n }\n }, [_vm._v(\"未启用\")])], 1)], 1)], 1)], 1)], 1), _vm._v(\" \"), _c('div', {\n staticClass: \"dialog-footer\",\n attrs: {\n \"slot\": \"footer\"\n },\n slot: \"footer\"\n }, [_c('el-button', {\n nativeOn: {\n \"click\": function($event) {\n _vm.addFormVisible = false\n }\n }\n }, [_vm._v(\"取消\")]), _vm._v(\" \"), _c('el-button', {\n attrs: {\n \"type\": \"primary\",\n \"loading\": _vm.addLoading\n },\n nativeOn: {\n \"click\": function($event) {\n return _vm.addSubmit($event)\n }\n }\n }, [_vm._v(\"提交\")])], 1)], 1)], 1)\n},staticRenderFns: []}\n\n/***/ }),\n\n/***/ 1073:\n/***/ (function(module, exports) {\n\nmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('section', [_c('el-collapse', {\n model: {\n value: (_vm.activeNames),\n callback: function($$v) {\n _vm.activeNames = $$v\n },\n expression: \"activeNames\"\n }\n }, [_c('el-collapse-item', {\n attrs: {\n \"title\": \"查询条件\",\n \"name\": \"1\"\n }\n }, [_c('el-form', {\n ref: \"form\",\n staticStyle: {\n \"margin\": \"10px\"\n },\n attrs: {\n \"model\": _vm.form\n },\n on: {\n \"submit\": function($event) {\n $event.preventDefault();\n return _vm.onSubmit($event)\n }\n }\n }, [_c('el-form', {\n attrs: {\n \"model\": _vm.filters\n }\n }, [_c('el-row', [_c('el-col', {\n staticStyle: {\n \"margin-left\": \"12px\"\n },\n attrs: {\n \"xs\": 12,\n \"sm\": 12,\n \"md\": 12,\n \"lg\": 5\n }\n }, [_c('el-form-item', [_c('el-input', {\n staticStyle: {\n \"width\": \"160px\"\n },\n attrs: {\n \"placeholder\": \"计划ID\"\n },\n model: {\n value: (_vm.filters.strPlanId),\n callback: function($$v) {\n _vm.$set(_vm.filters, \"strPlanId\", $$v)\n },\n expression: \"filters.strPlanId\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"xs\": 10,\n \"sm\": 10,\n \"md\": 10,\n \"lg\": 5\n }\n }, [_c('el-form-item', [_c('el-input', {\n staticStyle: {\n \"width\": \"160px\"\n },\n attrs: {\n \"placeholder\": \"设备类型ID\"\n },\n model: {\n value: (_vm.filters.strMaintainId),\n callback: function($$v) {\n _vm.$set(_vm.filters, \"strMaintainId\", $$v)\n },\n expression: \"filters.strMaintainId\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('el-col', {\n staticStyle: {\n \"margin-left\": \"12px\"\n },\n attrs: {\n \"xs\": 12,\n \"sm\": 12,\n \"md\": 12,\n \"lg\": 5\n }\n }, [_c('el-form-item', [_c('el-input', {\n staticStyle: {\n \"width\": \"160px\"\n },\n attrs: {\n \"placeholder\": \"设备ID\"\n },\n model: {\n value: (_vm.filters.equipmentCategory),\n callback: function($$v) {\n _vm.$set(_vm.filters, \"equipmentCategory\", $$v)\n },\n expression: \"filters.equipmentCategory\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"xs\": 10,\n \"sm\": 10,\n \"md\": 10,\n \"lg\": 5\n }\n }, [_c('el-form-item', [_c('el-input', {\n staticStyle: {\n \"width\": \"160px\"\n },\n attrs: {\n \"placeholder\": \"维护项ID\"\n },\n model: {\n value: (_vm.filters.equipmentId),\n callback: function($$v) {\n _vm.$set(_vm.filters, \"equipmentId\", $$v)\n },\n expression: \"filters.equipmentId\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"xs\": 12,\n \"sm\": 12,\n \"md\": 12,\n \"lg\": 14\n }\n }, [_c('el-form-item', {\n staticClass: \"postInfo-container-item\",\n attrs: {\n \"label-width\": \"80px\",\n \"label\": \"执行时间\"\n }\n }, [_c('el-date-picker', {\n attrs: {\n \"type\": \"datetimerange\",\n \"picker-options\": _vm.pickerOptions2,\n \"placeholder\": \"选择时间范围\",\n \"align\": \"right\"\n },\n model: {\n value: (_vm.filters.executeTime),\n callback: function($$v) {\n _vm.$set(_vm.filters, \"executeTime\", $$v)\n },\n expression: \"filters.executeTime\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('el-col', {\n staticStyle: {\n \"margin-left\": \"20px\"\n },\n attrs: {\n \"xs\": 10,\n \"sm\": 10,\n \"md\": 10,\n \"lg\": 6\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"是否周期性:\"\n }\n }, [_c('el-radio-group', {\n model: {\n value: (_vm.filters.isCycle),\n callback: function($$v) {\n _vm.$set(_vm.filters, \"isCycle\", $$v)\n },\n expression: \"filters.isCycle\"\n }\n }, [_c('el-radio', {\n staticClass: \"radio\",\n attrs: {\n \"label\": 1\n }\n }, [_vm._v(\"是\")]), _vm._v(\" \"), _c('el-radio', {\n staticClass: \"radio\",\n attrs: {\n \"label\": 0\n }\n }, [_vm._v(\"否\")])], 1)], 1)], 1), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"xs\": 12,\n \"sm\": 12,\n \"md\": 12,\n \"lg\": 12\n }\n }, [_c('el-form-item', {\n staticStyle: {\n \"margin-left\": \"10px\"\n }\n }, [_c('el-button', {\n attrs: {\n \"type\": \"primary\",\n \"icon\": \"search\"\n },\n on: {\n \"click\": _vm.getPlans\n }\n }, [_vm._v(\"查询\")])], 1)], 1)], 1)], 1)], 1)], 1)], 1), _vm._v(\" \"), _c('div', {\n staticClass: \"panel\"\n }, [_c('div', {\n staticClass: \"panel-title\"\n }, [_c('span', {\n domProps: {\n \"textContent\": _vm._s(_vm.panelTitle)\n }\n }), _vm._v(\" \"), _c('div', {\n staticClass: \"fr\"\n }, [_c('el-button', {\n attrs: {\n \"size\": \"small\"\n },\n on: {\n \"click\": function($event) {\n $event.stopPropagation();\n return _vm.on_refresh($event)\n }\n }\n }, [_c('i', {\n staticClass: \"fa fa-refresh\"\n })]), _vm._v(\" \"), _c('el-button', {\n attrs: {\n \"type\": \"primary\",\n \"icon\": \"plus\",\n \"size\": \"small\"\n },\n on: {\n \"click\": _vm.handleAdd\n }\n }, [_vm._v(\"新增\")])], 1)]), _vm._v(\" \"), _c('div', {\n staticClass: \"panel-body\"\n }, [_c('el-table', {\n directives: [{\n name: \"loading\",\n rawName: \"v-loading\",\n value: (_vm.listLoading),\n expression: \"listLoading\"\n }],\n attrs: {\n \"data\": _vm.plans,\n \"highlight-current-row\": \"\"\n },\n on: {\n \"selection-change\": _vm.selsChange\n }\n }, [_c('el-table-column', {\n attrs: {\n \"type\": \"selection\",\n \"width\": \"55\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"type\": \"index\",\n \"width\": \"60\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"strTitle\",\n \"label\": \"维护项名称\",\n \"width\": \"120\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"description\",\n \"label\": \"描述\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"executeTime\",\n \"label\": \"执行时间\",\n \"width\": \"120\",\n \"sortable\": \"\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"isCycle\",\n \"label\": \"是否周期性\",\n \"width\": \"120\",\n \"formatter\": _vm.formatCycle\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"cycleDay\",\n \"label\": \"剩余天数\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"label\": \"操作\",\n \"width\": \"150\"\n },\n scopedSlots: _vm._u([{\n key: \"default\",\n fn: function(scope) {\n return [_c('el-button', {\n attrs: {\n \"size\": \"small\"\n },\n on: {\n \"click\": function($event) {\n return _vm.handleEdit(scope.$index, scope.row)\n }\n }\n }, [_vm._v(\"编辑\")]), _vm._v(\" \"), _c('el-button', {\n attrs: {\n \"type\": \"danger\",\n \"size\": \"small\"\n },\n on: {\n \"click\": function($event) {\n return _vm.handleDel(scope.$index, scope.row)\n }\n }\n }, [_vm._v(\"删除\\n \")])]\n }\n }])\n })], 1), _vm._v(\" \"), _c('el-col', {\n staticClass: \"toolbar\",\n attrs: {\n \"span\": 24\n }\n }, [_c('el-button', {\n staticClass: \"fl\",\n attrs: {\n \"type\": \"danger\",\n \"disabled\": this.sels.length === 0\n },\n on: {\n \"click\": _vm.batchRemove\n }\n }, [_vm._v(\"批量删除\")]), _vm._v(\" \"), _c('el-pagination', {\n staticClass: \"fr\",\n attrs: {\n \"current-page\": _vm.listQuery.curPage,\n \"page-sizes\": [10, 20, 30, 50],\n \"page-size\": _vm.listQuery.pageSize,\n \"layout\": \"total, sizes, prev, pager, next, jumper\",\n \"total\": _vm.total\n },\n on: {\n \"size-change\": _vm.handleSizeChange,\n \"current-change\": _vm.handleCurrentChange,\n \"update:currentPage\": function($event) {\n return _vm.$set(_vm.listQuery, \"curPage\", $event)\n },\n \"update:current-page\": function($event) {\n return _vm.$set(_vm.listQuery, \"curPage\", $event)\n }\n }\n })], 1)], 1)]), _vm._v(\" \"), _c('el-dialog', {\n attrs: {\n \"title\": \"编辑维护计划\",\n \"visible\": _vm.editFormVisible,\n \"close-on-click-modal\": false\n },\n on: {\n \"update:visible\": function($event) {\n _vm.editFormVisible = $event\n }\n }\n }, [_c('el-form', {\n ref: \"editForm\",\n attrs: {\n \"model\": _vm.editForm,\n \"label-width\": \"80px\",\n \"rules\": _vm.editFormRules\n }\n }, [_c('el-form-item', {\n staticStyle: {\n \"width\": \"292px\"\n },\n attrs: {\n \"label\": \"计划ID\",\n \"prop\": \"strPlanId\"\n }\n }, [_c('el-input', {\n attrs: {\n \"auto-complete\": \"off\",\n \"disabled\": \"\"\n },\n model: {\n value: (_vm.editForm.strPlanId),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"strPlanId\", $$v)\n },\n expression: \"editForm.strPlanId\"\n }\n })], 1), _vm._v(\" \"), _c('el-form-item', {\n staticStyle: {\n \"width\": \"292px\"\n },\n attrs: {\n \"label\": \"维护项ID\",\n \"prop\": \"strMaintainId\"\n }\n }, [_c('el-input', {\n attrs: {\n \"auto-complete\": \"off\"\n },\n model: {\n value: (_vm.editForm.strMaintainId),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"strMaintainId\", $$v)\n },\n expression: \"editForm.strMaintainId\"\n }\n })], 1), _vm._v(\" \"), _c('el-form-item', {\n attrs: {\n \"label\": \"执行时间\",\n \"prop\": \"executeTime\"\n }\n }, [_c('el-date-picker', {\n attrs: {\n \"type\": \"datetime\",\n \"placeholder\": \"选择日期时间\",\n \"align\": \"right\",\n \"picker-options\": _vm.pickerOptions1\n },\n model: {\n value: (_vm.editForm.executeTime),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"executeTime\", $$v)\n },\n expression: \"editForm.executeTime\"\n }\n })], 1), _vm._v(\" \"), _c('el-form-item', {\n attrs: {\n \"label\": \"是否周期性\",\n \"prop\": \"isCycle\"\n }\n }, [_c('el-radio-group', {\n model: {\n value: (_vm.editForm.isCycle),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"isCycle\", $$v)\n },\n expression: \"editForm.isCycle\"\n }\n }, [_c('el-radio', {\n staticClass: \"radio\",\n attrs: {\n \"label\": 1\n }\n }, [_vm._v(\"是\")]), _vm._v(\" \"), _c('el-radio', {\n staticClass: \"radio\",\n attrs: {\n \"label\": 0\n }\n }, [_vm._v(\"否\")])], 1)], 1), _vm._v(\" \"), _c('el-form-item', {\n attrs: {\n \"label\": \"执行周期(天)\",\n \"prop\": \"cycleDay\"\n }\n }, [(_vm.editForm.isCycle) ? _c('el-input-number', {\n attrs: {\n \"min\": 1,\n \"max\": 30\n },\n on: {\n \"change\": _vm.handleChange\n },\n model: {\n value: (_vm.editForm.cycleDay),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"cycleDay\", $$v)\n },\n expression: \"editForm.cycleDay\"\n }\n }) : _vm._e()], 1), _vm._v(\" \"), _c('el-form-item', {\n staticStyle: {\n \"width\": \"450px\"\n },\n attrs: {\n \"label\": \"计划描述\",\n \"prop\": \"description\"\n }\n }, [_c('el-input', {\n attrs: {\n \"type\": \"textarea\",\n \"rows\": 2,\n \"placeholder\": \"请输入内容\"\n },\n model: {\n value: (_vm.editForm.description),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"description\", $$v)\n },\n expression: \"editForm.description\"\n }\n })], 1), _vm._v(\" \"), _c('el-form-item', {\n staticStyle: {\n \"width\": \"292px\"\n },\n attrs: {\n \"label\": \"设备类型ID\",\n \"prop\": \"equipmentCategory\"\n }\n }, [_c('el-input', {\n attrs: {\n \"auto-complete\": \"off\"\n },\n model: {\n value: (_vm.editForm.equipmentCategory),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"equipmentCategory\", $$v)\n },\n expression: \"editForm.equipmentCategory\"\n }\n })], 1), _vm._v(\" \"), _c('el-form-item', {\n staticStyle: {\n \"width\": \"292px\"\n },\n attrs: {\n \"label\": \"设备ID\",\n \"prop\": \"equipmentId\"\n }\n }, [_c('el-input', {\n attrs: {\n \"auto-complete\": \"off\"\n },\n model: {\n value: (_vm.editForm.equipmentId),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"equipmentId\", $$v)\n },\n expression: \"editForm.equipmentId\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('div', {\n staticClass: \"dialog-footer\",\n attrs: {\n \"slot\": \"footer\"\n },\n slot: \"footer\"\n }, [_c('el-button', {\n nativeOn: {\n \"click\": function($event) {\n _vm.editFormVisible = false\n }\n }\n }, [_vm._v(\"取消\")]), _vm._v(\" \"), _c('el-button', {\n attrs: {\n \"type\": \"primary\",\n \"loading\": _vm.editLoading\n },\n nativeOn: {\n \"click\": function($event) {\n return _vm.editSubmit($event)\n }\n }\n }, [_vm._v(\"提交\")])], 1)], 1), _vm._v(\" \"), _c('el-dialog', {\n attrs: {\n \"title\": \"新增维护计划\",\n \"visible\": _vm.addFormVisible,\n \"close-on-click-modal\": false\n },\n on: {\n \"update:visible\": function($event) {\n _vm.addFormVisible = $event\n }\n }\n }, [_c('el-form', {\n ref: \"addForm\",\n attrs: {\n \"model\": _vm.addForm,\n \"label-width\": \"100px\",\n \"rules\": _vm.addFormRules\n }\n }, [_c('el-row', [_c('el-col', {\n attrs: {\n \"xs\": 12,\n \"sm\": 12,\n \"md\": 12,\n \"lg\": 12\n }\n }, [_c('el-form-item', {\n staticStyle: {\n \"width\": \"292px\"\n },\n attrs: {\n \"label\": \"维护项ID\",\n \"prop\": \"strMaintainId\"\n }\n }, [_c('el-input', {\n attrs: {\n \"auto-complete\": \"off\"\n },\n model: {\n value: (_vm.addForm.strMaintainId),\n callback: function($$v) {\n _vm.$set(_vm.addForm, \"strMaintainId\", $$v)\n },\n expression: \"addForm.strMaintainId\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"xs\": 12,\n \"sm\": 12,\n \"md\": 12,\n \"lg\": 12\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"执行时间\",\n \"prop\": \"executeTime\"\n }\n }, [_c('el-date-picker', {\n attrs: {\n \"type\": \"datetime\",\n \"placeholder\": \"选择日期时间\",\n \"align\": \"right\",\n \"picker-options\": _vm.pickerOptions1\n },\n model: {\n value: (_vm.addForm.executeTime),\n callback: function($$v) {\n _vm.$set(_vm.addForm, \"executeTime\", $$v)\n },\n expression: \"addForm.executeTime\"\n }\n })], 1)], 1)], 1), _vm._v(\" \"), _c('el-row', [_c('el-col', {\n attrs: {\n \"xs\": 12,\n \"sm\": 12,\n \"md\": 12,\n \"lg\": 12\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"是否周期性\",\n \"prop\": \"isCycle\"\n }\n }, [_c('el-radio-group', {\n model: {\n value: (_vm.addForm.isCycle),\n callback: function($$v) {\n _vm.$set(_vm.addForm, \"isCycle\", $$v)\n },\n expression: \"addForm.isCycle\"\n }\n }, [_c('el-radio', {\n staticClass: \"radio\",\n attrs: {\n \"label\": 1\n }\n }, [_vm._v(\"是\")]), _vm._v(\" \"), _c('el-radio', {\n staticClass: \"radio\",\n attrs: {\n \"label\": 0\n }\n }, [_vm._v(\"否\")])], 1)], 1)], 1), _vm._v(\" \"), _c('el-col', {\n staticStyle: {\n \"margin-left\": \"12px\"\n },\n attrs: {\n \"xs\": 10,\n \"sm\": 10,\n \"md\": 10,\n \"lg\": 10\n }\n }, [(_vm.addForm.isCycle) ? _c('el-form-item', {\n attrs: {\n \"label\": \"执行周期(天)\",\n \"prop\": \"cycleDay\"\n }\n }, [_c('el-input-number', {\n attrs: {\n \"min\": 1,\n \"max\": 90\n },\n on: {\n \"change\": _vm.handleChange\n },\n model: {\n value: (_vm.addForm.cycleDay),\n callback: function($$v) {\n _vm.$set(_vm.addForm, \"cycleDay\", $$v)\n },\n expression: \"addForm.cycleDay\"\n }\n })], 1) : _vm._e()], 1)], 1), _vm._v(\" \"), _c('el-row', [_c('el-col', {\n attrs: {\n \"xs\": 24,\n \"sm\": 24,\n \"md\": 24,\n \"lg\": 24\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"提醒时间\"\n }\n }, _vm._l((_vm.customDayOptions), function(item) {\n return _c('el-tag', {\n key: item.value,\n staticStyle: {\n \"margin-left\": \"2px\"\n },\n attrs: {\n \"closable\": true,\n \"type\": \"primary\"\n },\n on: {\n \"close\": function($event) {\n return _vm.closeViewTabs(item, $event)\n }\n },\n model: {\n value: (_vm.addForm.remindDay),\n callback: function($$v) {\n _vm.$set(_vm.addForm, \"remindDay\", $$v)\n },\n expression: \"addForm.remindDay\"\n }\n }, [_vm._v(_vm._s(item.label) + \"\\n \")])\n }), 1)], 1)], 1), _vm._v(\" \"), _c('el-row', [_c('el-col', {\n staticStyle: {\n \"margin-left\": \"12px\"\n },\n attrs: {\n \"xs\": 10,\n \"sm\": 10,\n \"md\": 10,\n \"lg\": 10\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"自定义(天)\",\n \"prop\": \"customDay\"\n }\n }, [_c('el-input-number', {\n attrs: {\n \"min\": 1,\n \"max\": 365\n },\n on: {\n \"change\": _vm.handleCustomDayChange\n },\n model: {\n value: (_vm.addForm.customDay),\n callback: function($$v) {\n _vm.$set(_vm.addForm, \"customDay\", $$v)\n },\n expression: \"addForm.customDay\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"xs\": 10,\n \"sm\": 10,\n \"md\": 10,\n \"lg\": 10\n }\n }, [_c('el-form-item', [(!_vm.showAddCustomDayButton) ? _c('el-button', {\n attrs: {\n \"type\": \"primary\",\n \"disabled\": \"disabled\"\n }\n }, [_vm._v(\"添加\")]) : _vm._e(), _vm._v(\" \"), (_vm.showAddCustomDayButton) ? _c('el-button', {\n attrs: {\n \"type\": \"primary\"\n },\n on: {\n \"click\": _vm.onAddCustomDay\n }\n }, [_vm._v(\"添加\")]) : _vm._e()], 1)], 1)], 1), _vm._v(\" \"), _c('el-form-item', {\n staticStyle: {\n \"width\": \"450px\"\n },\n attrs: {\n \"label\": \"计划描述\",\n \"prop\": \"description\"\n }\n }, [_c('el-input', {\n attrs: {\n \"type\": \"textarea\",\n \"rows\": 2,\n \"placeholder\": \"请输入内容\"\n },\n model: {\n value: (_vm.addForm.description),\n callback: function($$v) {\n _vm.$set(_vm.addForm, \"description\", $$v)\n },\n expression: \"addForm.description\"\n }\n })], 1), _vm._v(\" \"), _c('el-form-item', {\n staticStyle: {\n \"width\": \"292px\"\n },\n attrs: {\n \"label\": \"设备类型ID\",\n \"prop\": \"equipmentCategory\"\n }\n }, [_c('el-input', {\n attrs: {\n \"auto-complete\": \"off\"\n },\n model: {\n value: (_vm.addForm.equipmentCategory),\n callback: function($$v) {\n _vm.$set(_vm.addForm, \"equipmentCategory\", $$v)\n },\n expression: \"addForm.equipmentCategory\"\n }\n })], 1), _vm._v(\" \"), _c('el-form-item', {\n staticStyle: {\n \"width\": \"292px\"\n },\n attrs: {\n \"label\": \"设备ID\",\n \"prop\": \"equipmentId\"\n }\n }, [_c('el-input', {\n attrs: {\n \"auto-complete\": \"off\"\n },\n model: {\n value: (_vm.addForm.equipmentId),\n callback: function($$v) {\n _vm.$set(_vm.addForm, \"equipmentId\", $$v)\n },\n expression: \"addForm.equipmentId\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('div', {\n staticClass: \"dialog-footer\",\n attrs: {\n \"slot\": \"footer\"\n },\n slot: \"footer\"\n }, [_c('el-button', {\n nativeOn: {\n \"click\": function($event) {\n _vm.addFormVisible = false\n }\n }\n }, [_vm._v(\"取消\")]), _vm._v(\" \"), _c('el-button', {\n attrs: {\n \"type\": \"primary\",\n \"loading\": _vm.addLoading\n },\n nativeOn: {\n \"click\": function($event) {\n return _vm.addSubmit($event)\n }\n }\n }, [_vm._v(\"提交\")])], 1)], 1)], 1)\n},staticRenderFns: []}\n\n/***/ }),\n\n/***/ 1074:\n/***/ (function(module, exports) {\n\nmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _vm._m(0)\n},staticRenderFns: [function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('section', {\n staticClass: \"babylonjs-container\"\n }, [_c('canvas', {\n attrs: {\n \"id\": \"renderCanvas\"\n }\n })])\n}]}\n\n/***/ }),\n\n/***/ 111:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar SIGN_REGEXP = /([yMdhsm])(\\1*)/g;\nvar DEFAULT_PATTERN = 'yyyy-MM-dd';\nfunction padding(s, len) {\n var len = len - (s + '').length;\n for (var i = 0; i < len; i++) {\n s = '0' + s;\n }\n return s;\n};\n\nexports.default = {\n getQueryStringByName: function getQueryStringByName(name) {\n var reg = new RegExp(\"(^|&)\" + name + \"=([^&]*)(&|$)\", \"i\");\n var r = window.location.search.substr(1).match(reg);\n var context = \"\";\n if (r != null) context = r[2];\n reg = null;\n r = null;\n return context == null || context == \"\" || context == \"undefined\" ? \"\" : context;\n },\n formatDate: {\n\n format: function format(date, pattern) {\n pattern = pattern || DEFAULT_PATTERN;\n return pattern.replace(SIGN_REGEXP, function ($0) {\n switch ($0.charAt(0)) {\n case 'y':\n return padding(date.getFullYear(), $0.length);\n case 'M':\n return padding(date.getMonth() + 1, $0.length);\n case 'd':\n return padding(date.getDate(), $0.length);\n case 'w':\n return date.getDay() + 1;\n case 'h':\n return padding(date.getHours(), $0.length);\n case 'm':\n return padding(date.getMinutes(), $0.length);\n case 's':\n return padding(date.getSeconds(), $0.length);\n }\n });\n },\n parse: function parse(dateString, pattern) {\n var matchs1 = pattern.match(SIGN_REGEXP);\n var matchs2 = dateString.match(/(\\d)+/g);\n if (matchs1.length == matchs2.length) {\n var _date = new Date(1970, 0, 1);\n for (var i = 0; i < matchs1.length; i++) {\n var _int = parseInt(matchs2[i]);\n var sign = matchs1[i];\n switch (sign.charAt(0)) {\n case 'y':\n _date.setFullYear(_int);break;\n case 'M':\n _date.setMonth(_int - 1);break;\n case 'd':\n _date.setDate(_int);break;\n case 'h':\n _date.setHours(_int);break;\n case 'm':\n _date.setMinutes(_int);break;\n case 's':\n _date.setSeconds(_int);break;\n }\n }\n return _date;\n }\n return null;\n }\n\n }\n\n};\n\n/***/ }),\n\n/***/ 1116:\n/***/ (function(module, exports) {\n\n/* (ignored) */\n\n/***/ }),\n\n/***/ 1117:\n/***/ (function(module, exports) {\n\n/* (ignored) */\n\n/***/ }),\n\n/***/ 398:\n/***/ (function(module, exports) {\n\n/* (ignored) */\n\n/***/ }),\n\n/***/ 399:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _mock = __webpack_require__(482);\n\nvar _mock2 = _interopRequireDefault(_mock);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _mock2.default;\n\n/***/ }),\n\n/***/ 400:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _Login = __webpack_require__(1051);\n\nvar _Login2 = _interopRequireDefault(_Login);\n\nvar _ = __webpack_require__(1049);\n\nvar _2 = _interopRequireDefault(_);\n\nvar _Home = __webpack_require__(1050);\n\nvar _Home2 = _interopRequireDefault(_Home);\n\nvar _Page = __webpack_require__(1055);\n\nvar _Page2 = _interopRequireDefault(_Page);\n\nvar _Page3 = __webpack_require__(1056);\n\nvar _Page4 = _interopRequireDefault(_Page3);\n\nvar _Page5 = __webpack_require__(1057);\n\nvar _Page6 = _interopRequireDefault(_Page5);\n\nvar _Page7 = __webpack_require__(1058);\n\nvar _Page8 = _interopRequireDefault(_Page7);\n\nvar _echarts = __webpack_require__(1052);\n\nvar _echarts2 = _interopRequireDefault(_echarts);\n\nvar _threejs = __webpack_require__(1048);\n\nvar _threejs2 = _interopRequireDefault(_threejs);\n\nvar _babylonjs = __webpack_require__(1047);\n\nvar _babylonjs2 = _interopRequireDefault(_babylonjs);\n\nvar _export = __webpack_require__(1053);\n\nvar _export2 = _interopRequireDefault(_export);\n\nvar _uploadExcel = __webpack_require__(1054);\n\nvar _uploadExcel2 = _interopRequireDefault(_uploadExcel);\n\nvar _index = __webpack_require__(1045);\n\nvar _index2 = _interopRequireDefault(_index);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar routes = [{\n path: '/',\n component: _Login2.default,\n name: '',\n hidden: true\n}, {\n path: '/login',\n component: _Login2.default,\n name: '',\n hidden: true\n}, {\n path: '/404',\n component: _2.default,\n name: '',\n hidden: true\n}, {\n path: '/',\n component: _Home2.default,\n name: '',\n iconCls: 'fa fa-cog',\n leaf: true,\n children: [{ path: '/page1', component: _Page2.default, name: '维护项' }]\n}, {\n path: '/',\n component: _Home2.default,\n name: '',\n iconCls: 'fa fa-calendar-check-o',\n leaf: true,\n children: [{ path: '/page2', component: _Page4.default, name: '维护计划' }]\n}, {\n path: '/',\n component: _Home2.default,\n name: '',\n iconCls: 'fa fa-search',\n leaf: true,\n children: [{\n path: '/page3',\n component: _Page6.default,\n name: '维护历史',\n meta: {\n title: \"维护历史\"\n }\n }]\n}, {\n path: '/',\n component: _Home2.default,\n name: 'seed',\n iconCls: 'fa fa-star',\n leaf: false,\n hidden: false,\n children: [{\n path: '/page4',\n component: _Page8.default,\n name: 'seed',\n meta: {\n title: \"列表\"\n }\n }]\n}, {\n path: '/',\n component: _Home2.default,\n name: '富文本编辑器',\n iconCls: 'fa fa-pencil-square-o',\n leaf: false,\n hidden: false,\n children: [{\n path: '/tinymce',\n component: _index2.default,\n name: 'tinymce'\n }]\n}, {\n path: '/',\n component: _Home2.default,\n name: 'excel',\n iconCls: 'fa fa-file-excel-o',\n leaf: false,\n hidden: false,\n children: [{\n path: '/exportExcel',\n component: _export2.default,\n name: 'exportExcel'\n }, {\n path: '/uploadExcel',\n component: _uploadExcel2.default,\n name: 'uploadExcel'\n }]\n}, {\n path: '/',\n component: _Home2.default,\n name: 'Charts',\n iconCls: 'fa fa-bar-chart',\n children: [{ path: '/echarts', component: _echarts2.default, name: 'echarts' }]\n}, {\n path: '/',\n component: _Home2.default,\n name: '3d',\n iconCls: 'fa fa-diamond',\n children: [{ path: '/threejs', component: _threejs2.default, name: 'threejs' }, { path: '/babylonjs', component: _babylonjs2.default, name: 'babylonjs' }]\n}, {\n path: '*',\n hidden: true,\n redirect: { path: '/404' }\n}];\n\nexports.default = routes;\n\n/***/ }),\n\n/***/ 401:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _vue = __webpack_require__(30);\n\nvar _vue2 = _interopRequireDefault(_vue);\n\nvar _vuex = __webpack_require__(252);\n\nvar _vuex2 = _interopRequireDefault(_vuex);\n\nvar _actions = __webpack_require__(483);\n\nvar actions = _interopRequireWildcard(_actions);\n\nvar _getters = __webpack_require__(484);\n\nvar getters = _interopRequireWildcard(_getters);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n_vue2.default.use(_vuex2.default);\n\nvar state = {\n count: 10\n};\n\nvar mutations = {\n INCREMENT: function INCREMENT(state) {\n state.count++;\n },\n DECREMENT: function DECREMENT(state) {\n state.count--;\n }\n};\n\nexports.default = new _vuex2.default.Store({\n actions: actions,\n getters: getters,\n state: state,\n mutations: mutations\n});\n\n/***/ }),\n\n/***/ 404:\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ 405:\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ 406:\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ 407:\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ 408:\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ 409:\n/***/ (function(module, exports, __webpack_require__) {\n\n\n/* styles */\n__webpack_require__(1018)\n\nvar Component = __webpack_require__(28)(\n /* script */\n __webpack_require__(463),\n /* template */\n __webpack_require__(1062),\n /* scopeId */\n null,\n /* cssModules */\n null\n)\n\nmodule.exports = Component.exports\n\n\n/***/ }),\n\n/***/ 463:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = {\n name: 'app',\n components: {},\n data: function data() {\n return {\n visible: true\n };\n },\n\n methods: {\n close: function close() {\n this.visible = false;\n }\n }\n};\n\n/***/ }),\n\n/***/ 464:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _screenfull = __webpack_require__(1040);\n\nvar _screenfull2 = _interopRequireDefault(_screenfull);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = {\n name: 'hamburger',\n props: {\n width: {\n type: Number,\n default: 22\n },\n height: {\n type: Number,\n default: 22\n },\n fill: {\n type: String,\n default: '#48576a'\n }\n },\n data: function data() {\n return {\n isFullscreen: false\n };\n },\n\n methods: {\n click: function click() {\n if (!_screenfull2.default.enabled) {\n this.$message({\n message: 'you browser can not work',\n type: 'warning'\n });\n return false;\n }\n _screenfull2.default.toggle();\n }\n }\n};\n\n/***/ }),\n\n/***/ 465:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _tinymceVue = __webpack_require__(420);\n\nvar _tinymceVue2 = _interopRequireDefault(_tinymceVue);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = {\n props: {},\n components: {\n 'tinymce-editor': _tinymceVue2.default },\n data: function data() {\n return {};\n },\n\n methods: {}\n};\n\n/***/ }),\n\n/***/ 466:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _promise = __webpack_require__(263);\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _xlsx = __webpack_require__(415);\n\nvar _xlsx2 = _interopRequireDefault(_xlsx);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = {\n props: {\n beforeUpload: Function,\n onSuccess: Function },\n data: function data() {\n return {\n loading: false,\n excelData: {\n header: null,\n results: null\n }\n };\n },\n\n methods: {\n generateDate: function generateDate(_ref) {\n var header = _ref.header,\n results = _ref.results;\n\n this.excelData.header = header;\n this.excelData.results = results;\n this.onSuccess && this.onSuccess(this.excelData);\n },\n handleDrop: function handleDrop(e) {\n e.stopPropagation();\n e.preventDefault();\n if (this.loading) return;\n var files = e.dataTransfer.files;\n if (files.length !== 1) {\n this.$message.error('Only support uploading one file!');\n return;\n }\n var rawFile = files[0];\n\n if (!this.isExcel(rawFile)) {\n this.$message.error('Only supports upload .xlsx, .xls, .csv suffix files');\n return false;\n }\n this.upload(rawFile);\n e.stopPropagation();\n e.preventDefault();\n },\n handleDragover: function handleDragover(e) {\n e.stopPropagation();\n e.preventDefault();\n e.dataTransfer.dropEffect = 'copy';\n },\n handleUpload: function handleUpload() {\n document.getElementById('excel-upload-input').click();\n },\n handleClick: function handleClick(e) {\n var files = e.target.files;\n var rawFile = files[0];\n if (!rawFile) return;\n this.upload(rawFile);\n },\n upload: function upload(rawFile) {\n this.$refs['excel-upload-input'].value = null;\n\n if (!this.beforeUpload) {\n this.readerData(rawFile);\n return;\n }\n var before = this.beforeUpload(rawFile);\n if (before) {\n this.readerData(rawFile);\n }\n },\n readerData: function readerData(rawFile) {\n var _this = this;\n\n this.loading = true;\n return new _promise2.default(function (resolve, reject) {\n var reader = new FileReader();\n reader.onload = function (e) {\n var data = e.target.result;\n var fixedData = _this.fixdata(data);\n var workbook = _xlsx2.default.read(btoa(fixedData), { type: 'base64' });\n var firstSheetName = workbook.SheetNames[0];\n var worksheet = workbook.Sheets[firstSheetName];\n var header = _this.get_header_row(worksheet);\n var results = _xlsx2.default.utils.sheet_to_json(worksheet);\n _this.generateDate({ header: header, results: results });\n _this.loading = false;\n resolve();\n };\n reader.readAsArrayBuffer(rawFile);\n });\n },\n fixdata: function fixdata(data) {\n var o = '';\n var l = 0;\n var w = 10240;\n for (; l < data.byteLength / w; ++l) {\n o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w, l * w + w)));\n }o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w)));\n return o;\n },\n get_header_row: function get_header_row(sheet) {\n var headers = [];\n var range = _xlsx2.default.utils.decode_range(sheet['!ref']);\n var C = void 0;\n var R = range.s.r;\n for (C = range.s.c; C <= range.e.c; ++C) {\n var cell = sheet[_xlsx2.default.utils.encode_cell({ c: C, r: R })];\n var hdr = 'UNKNOWN ' + C;\n if (cell && cell.t) hdr = _xlsx2.default.utils.format_cell(cell);\n headers.push(hdr);\n }\n return headers;\n },\n isExcel: function isExcel(file) {\n return (/\\.(xlsx|xls|csv)$/.test(file.name)\n );\n }\n }\n};\n\n/***/ }),\n\n/***/ 467:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _babylonjs = __webpack_require__(494);\n\nvar BABYLON = _interopRequireWildcard(_babylonjs);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nexports.default = {\n data: function data() {\n return {\n scene: '',\n engine: '',\n canvas: ''\n };\n },\n\n\n methods: {\n createScene: function createScene() {\n this.scene = new BABYLON.Scene(this.engine);\n\n var camera = new BABYLON.FreeCamera('camera1', new BABYLON.Vector3(0, 5, -10), this.scene);\n\n camera.setTarget(BABYLON.Vector3.Zero());\n\n camera.attachControl(this.canvas, false);\n\n var light = new BABYLON.HemisphericLight('light1', new BABYLON.Vector3(0, 1, 0), this.scene);\n\n var sphere = BABYLON.Mesh.CreateSphere('sphere1', 16, 2, this.scene);\n\n sphere.position.y = 1;\n\n var ground = BABYLON.Mesh.CreateGround('ground1', 6, 6, 2, this.scene);\n\n return this.scene;\n },\n init: function init() {\n var _this = this;\n\n _this.canvas = document.getElementById('renderCanvas');\n\n _this.engine = new BABYLON.Engine(this.canvas, true);\n\n _this.scene = this.createScene();\n\n _this.engine.runRenderLoop(function () {\n _this.scene.render();\n });\n\n window.addEventListener('resize', function () {\n _this.engine.resize();\n });\n }\n },\n\n mounted: function mounted() {\n this.init();\n },\n\n updated: function updated() {},\n\n beforeDestroy: function beforeDestroy() {},\n\n destroyed: function destroyed() {}\n};\n\n/***/ }),\n\n/***/ 468:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _three = __webpack_require__(479);\n\nvar _three2 = _interopRequireDefault(_three);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = {\n data: function data() {\n return {\n scene: '',\n camera: '',\n renderer: '',\n geometry: '',\n material: '',\n mesh: ''\n };\n },\n\n\n methods: {\n init: function init() {\n\n this.scene = new _three2.default.Scene();\n\n this.camera = new _three2.default.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 1, 10000);\n this.camera.position.z = 1000;\n\n this.geometry = new _three2.default.BoxGeometry(200, 200, 200);\n this.material = new _three2.default.MeshBasicMaterial({ color: 0xff0000, wireframe: true });\n\n this.mesh = new _three2.default.Mesh(this.geometry, this.material);\n this.scene.add(this.mesh);\n\n this.renderer = new _three2.default.WebGLRenderer();\n this.renderer.setSize(window.innerWidth, window.innerHeight);\n\n document.getElementById(\"demo\").appendChild(this.renderer.domElement);\n },\n animate: function animate() {\n\n requestAnimationFrame(this.animate);\n\n this.mesh.rotation.x += 0.01;\n this.mesh.rotation.y += 0.02;\n\n this.renderer.render(this.scene, this.camera);\n }\n },\n\n mounted: function mounted() {\n this.init();\n this.animate();\n },\n updated: function updated() {},\n beforeDestroy: function beforeDestroy() {},\n destroyed: function destroyed() {}\n};\n\n/***/ }),\n\n/***/ 469:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _defineProperty2 = __webpack_require__(493);\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\nvar _methods;\n\nvar _Screenfull = __webpack_require__(1044);\n\nvar _Screenfull2 = _interopRequireDefault(_Screenfull);\n\nvar _api = __webpack_require__(77);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = {\n components: {\n Screenfull: _Screenfull2.default\n },\n data: function data() {\n var _ref;\n\n return _ref = {\n sysName: 'CRIANE蓄电池远程监控系统',\n collapsed: false,\n sysUserName: '',\n sysUserAvatar: '',\n form: {\n name: '',\n region: '',\n date1: '',\n date2: '',\n delivery: false,\n type: [],\n resource: '',\n desc: ''\n },\n dialogVisible: false,\n maintains: [],\n total: 0,\n listLoading: false,\n sels: [] }, (0, _defineProperty3.default)(_ref, 'form', {\n strTitle: '',\n strContent: '',\n cStartTime: '',\n cEndTime: '',\n uStartTime: '',\n uEndTime: ''\n }), (0, _defineProperty3.default)(_ref, 'listQuery', {\n curPage: 1,\n limit: 20,\n pageSize: 10,\n importance: undefined,\n title: undefined,\n type: undefined,\n sort: '+id'\n }), _ref;\n },\n\n methods: (_methods = {\n onSubmit: function onSubmit() {\n console.log('submit!');\n },\n\n logout: function logout() {\n var _this = this;\n this.$confirm('确认退出吗?', '提示', {}).then(function () {\n sessionStorage.removeItem('user');\n _this.$router.push('/login');\n }).catch(function () {});\n },\n\n collapse: function collapse() {\n this.collapsed = !this.collapsed;\n },\n showMenu: function showMenu(i, status) {\n this.$refs.menuCollapsed.getElementsByClassName('submenu-hook-' + i)[0].style.display = status ? 'block' : 'none';\n },\n getMaintains: function getMaintains() {\n var _this2 = this;\n\n var para = {\n curPage: this.listQuery.curPage,\n pageSize: this.listQuery.pageSize,\n strOrder: 'asc'\n };\n this.listLoading = true;\n\n (0, _api.getMaintainListPage)(para).then(function (res) {\n _this2.total = res.data.total;\n _this2.maintains = res.data.maintains;\n _this2.listLoading = false;\n });\n },\n handleCurrentChange: function handleCurrentChange(val) {\n this.listQuery.curPage = val;\n this.getMaintains();\n },\n\n handleDel: function handleDel(index, row) {\n var _this3 = this;\n\n this.$confirm('确认删除该记录吗?', '提示', {\n type: 'warning'\n }).then(function () {\n _this3.listLoading = true;\n\n var para = { strMaintainId: row.strMaintainId };\n (0, _api.removeMaintain)(para).then(function (res) {\n _this3.listLoading = false;\n\n _this3.$message({\n message: '删除成功',\n type: 'success'\n });\n _this3.getMaintains();\n });\n }).catch(function () {});\n },\n\n handleDelay: function handleDelay(index, row) {},\n\n handleConfirm: function handleConfirm(index, row) {},\n selsChange: function selsChange(sels) {\n this.sels = sels;\n },\n handleSizeChange: function handleSizeChange(val) {\n this.listQuery.pageSize = val;\n this.getMaintains();\n }\n }, (0, _defineProperty3.default)(_methods, 'handleCurrentChange', function handleCurrentChange(val) {\n this.listQuery.curPage = val;\n this.getMaintains();\n }), (0, _defineProperty3.default)(_methods, 'batchRemove', function batchRemove() {\n var _this4 = this;\n\n var ids = this.sels.map(function (item) {\n return item.strMaintainId;\n }).toString();\n this.$confirm('确认删除选中记录吗?', '提示', {\n type: 'warning'\n }).then(function () {\n _this4.listLoading = true;\n\n var para = { ids: ids };\n (0, _api.batchRemoveMaintain)(para).then(function (res) {\n _this4.listLoading = false;\n\n _this4.$message({\n message: '删除成功',\n type: 'success'\n });\n _this4.getMaintains();\n });\n }).catch(function () {});\n }), _methods),\n mounted: function mounted() {\n var user = sessionStorage.getItem('user');\n if (user) {\n user = JSON.parse(user);\n this.sysUserName = user.name || '';\n this.sysUserAvatar = user.avatar || '';\n }\n var _this = this;\n\n _this.getMaintains();\n }\n};\n\n/***/ }),\n\n/***/ 470:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _stringify = __webpack_require__(177);\n\nvar _stringify2 = _interopRequireDefault(_stringify);\n\nvar _api = __webpack_require__(77);\n\nvar _nprogress = __webpack_require__(251);\n\nvar _nprogress2 = _interopRequireDefault(_nprogress);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = {\n data: function data() {\n return {\n logining: false,\n ruleForm2: {\n account: 'admin',\n checkPass: '123456'\n },\n rules2: {\n account: [{ required: true, message: '请输入账号', trigger: 'blur' }],\n checkPass: [{ required: true, message: '请输入密码', trigger: 'blur' }]\n },\n checked: true\n };\n },\n\n methods: {\n handleReset2: function handleReset2() {\n this.$refs.ruleForm2.resetFields();\n },\n handleSubmit2: function handleSubmit2(ev) {\n var _this2 = this;\n\n var _this = this;\n this.$refs.ruleForm2.validate(function (valid) {\n if (valid) {\n _this2.logining = true;\n _nprogress2.default.start();\n var loginParams = { username: _this2.ruleForm2.account, password: _this2.ruleForm2.checkPass };\n (0, _api.requestLogin)(loginParams).then(function (data) {\n _this2.logining = false;\n _nprogress2.default.done();\n var msg = data.msg,\n code = data.code,\n user = data.user;\n\n if (code !== 200) {\n _this2.$message({\n message: msg,\n type: 'error'\n });\n } else {\n sessionStorage.setItem('user', (0, _stringify2.default)(user));\n _this2.$router.push({ path: '/page1' });\n }\n });\n } else {\n console.log('error submit!!');\n return false;\n }\n });\n }\n }\n};\n\n/***/ }),\n\n/***/ 471:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _echarts = __webpack_require__(744);\n\nvar _echarts2 = _interopRequireDefault(_echarts);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = {\n data: function data() {\n return {\n chartColumn: null,\n chartBar: null,\n chartLine: null,\n chartPie: null\n };\n },\n\n\n methods: {\n drawColumnChart: function drawColumnChart() {\n this.chartColumn = _echarts2.default.init(document.getElementById('chartColumn'));\n this.chartColumn.setOption({\n title: { text: 'Column Chart' },\n tooltip: {},\n xAxis: {\n data: [\"衬衫\", \"羊毛衫\", \"雪纺衫\", \"裤子\", \"高跟鞋\", \"袜子\"]\n },\n yAxis: {},\n series: [{\n name: '销量',\n type: 'bar',\n data: [5, 20, 36, 10, 10, 20]\n }],\n label: {\n normal: {\n show: true,\n position: 'top'\n }\n },\n itemStyle: {\n normal: {\n color: function color(params) {\n var colorList = ['#4f81bd', '#c0504d', '#9bbb59', '#604a7b', '#948a54', '#e46c0b'];\n return colorList[params.dataIndex];\n }\n }\n }\n });\n },\n drawBarChart: function drawBarChart() {\n this.chartBar = _echarts2.default.init(document.getElementById('chartBar'));\n this.chartBar.setOption({\n title: {\n text: 'Bar Chart'\n },\n tooltip: {\n trigger: 'axis',\n axisPointer: {\n type: 'shadow'\n }\n },\n legend: {\n data: ['2011年', '2012年']\n },\n grid: {\n left: '3%',\n right: '4%',\n bottom: '3%',\n containLabel: true\n },\n xAxis: {\n type: 'value',\n boundaryGap: [0, 0.01]\n },\n yAxis: {\n type: 'category',\n data: ['巴西', '印尼', '美国', '印度', '中国', '世界人口(万)']\n },\n label: {\n normal: {\n show: true,\n position: 'right'\n }\n },\n series: [{\n name: '2011年',\n type: 'bar',\n data: [18203, 23489, 29034, 104970, 131744, 630230]\n }, {\n name: '2012年',\n type: 'bar',\n data: [19325, 23438, 31000, 121594, 134141, 681807]\n }]\n });\n },\n drawLineChart: function drawLineChart() {\n this.chartLine = _echarts2.default.init(document.getElementById('chartLine'));\n this.chartLine.setOption({\n title: {\n text: 'Line Chart'\n },\n tooltip: {\n trigger: 'axis'\n },\n legend: {\n data: ['邮件营销', '联盟广告', '搜索引擎']\n },\n grid: {\n left: '3%',\n right: '4%',\n bottom: '3%',\n containLabel: true\n },\n xAxis: {\n type: 'category',\n boundaryGap: false,\n data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日']\n },\n label: {\n normal: {\n show: true,\n position: 'top'\n }\n },\n yAxis: {\n type: 'value'\n },\n series: [{\n name: '邮件营销',\n type: 'line',\n stack: '总量',\n data: [120, 132, 101, 134, 90, 230, 210]\n }, {\n name: '联盟广告',\n type: 'line',\n stack: '总量',\n data: [220, 182, 191, 234, 290, 330, 310]\n }, {\n name: '搜索引擎',\n type: 'line',\n stack: '总量',\n data: [820, 932, 901, 934, 1290, 1330, 1320]\n }]\n });\n },\n drawPieChart: function drawPieChart() {\n this.chartPie = _echarts2.default.init(document.getElementById('chartPie'));\n this.chartPie.setOption({\n title: {\n text: 'Pie Chart',\n subtext: '纯属虚构',\n x: 'center'\n },\n tooltip: {\n trigger: 'item',\n formatter: \"{a}
{b} : {c} ({d}%)\"\n },\n legend: {\n orient: 'vertical',\n left: 'left',\n data: ['直接访问', '邮件营销', '联盟广告', '视频广告', '搜索引擎']\n },\n label: {\n normal: {\n formatter: '{b}:{c}: ({d}%)',\n textStyle: {\n fontWeight: 'normal',\n fontSize: 15\n }\n }\n },\n\n series: [{\n name: '访问来源',\n type: 'pie',\n radius: '55%',\n center: ['50%', '60%'],\n data: [{ value: 335, name: '直接访问' }, { value: 310, name: '邮件营销' }, { value: 234, name: '联盟广告' }, { value: 135, name: '视频广告' }, { value: 1548, name: '搜索引擎' }],\n itemStyle: {\n emphasis: {\n shadowBlur: 10,\n shadowOffsetX: 0,\n shadowColor: 'rgba(0, 0, 0, 0.5)'\n }\n }\n }]\n });\n },\n drawCharts: function drawCharts() {\n this.drawColumnChart();\n this.drawBarChart();\n this.drawLineChart();\n this.drawPieChart();\n }\n },\n\n mounted: function mounted() {\n var that = this;\n that.drawCharts();\n window.onresize = function () {\n that.chartColumn.resize();\n that.chartBar.resize();\n that.chartLine.resize();\n that.chartPie.resize();\n };\n },\n updated: function updated() {\n this.drawCharts();\n }\n};\n\n/***/ }),\n\n/***/ 472:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _assign = __webpack_require__(99);\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nvar _util = __webpack_require__(111);\n\nvar _util2 = _interopRequireDefault(_util);\n\nvar _api = __webpack_require__(77);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = {\n data: function data() {\n return {\n myBackToTopStyle: {\n right: '50px',\n bottom: '50px',\n width: '40px',\n height: '40px',\n 'border-radius': '4px',\n 'line-height': '45px',\n background: '#e7eaf1' },\n filters: {\n strTitle: '',\n strContent: '',\n createTime: '',\n updateTime: '',\n cStartTime: ''\n },\n filename: '',\n autoWidth: true,\n panelTitle: '维护项列表',\n pickerOptions1: {\n shortcuts: [{\n text: '今天',\n onClick: function onClick(picker) {\n picker.$emit('pick', new Date());\n }\n }, {\n text: '昨天',\n onClick: function onClick(picker) {\n var date = new Date();\n date.setTime(date.getTime() - 3600 * 1000 * 24);\n picker.$emit('pick', date);\n }\n }, {\n text: '一周前',\n onClick: function onClick(picker) {\n var date = new Date();\n date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);\n picker.$emit('pick', date);\n }\n }]\n },\n pickerOptions2: {\n shortcuts: [{\n text: '最近一周',\n onClick: function onClick(picker) {\n var end = new Date();\n var start = new Date();\n start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);\n picker.$emit('pick', [start, end]);\n }\n }, {\n text: '最近一个月',\n onClick: function onClick(picker) {\n var end = new Date();\n var start = new Date();\n start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);\n picker.$emit('pick', [start, end]);\n }\n }, {\n text: '最近三个月',\n onClick: function onClick(picker) {\n var end = new Date();\n var start = new Date();\n start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);\n picker.$emit('pick', [start, end]);\n }\n }]\n },\n maintains: [],\n total: 0,\n listLoading: false,\n downloadLoading: false,\n sels: [],\n\n form: {\n strTitle: '',\n strContent: '',\n cStartTime: '',\n cEndTime: '',\n uStartTime: '',\n uEndTime: ''\n },\n\n listQuery: {\n curPage: 1,\n limit: 20,\n pageSize: 10,\n importance: undefined,\n title: undefined,\n type: undefined,\n sort: '+id'\n },\n\n editFormVisible: false,\n editLoading: false,\n editFormRules: {\n strTitle: [{ required: true, message: '请输入维护项名称', trigger: 'blur' }],\n strContent: [{ required: true, message: '请输入维护内容', trigger: 'blur' }]\n },\n\n editForm: {\n strMaintainId: 0,\n strTitle: '',\n strContent: ''\n },\n\n addFormVisible: false,\n addLoading: false,\n addFormRules: {\n strTitle: [{ required: true, message: '请输入维护项名称', trigger: 'blur' }],\n strContent: [{ required: true, message: '请输入维护内容', trigger: 'blur' }]\n },\n\n addForm: {\n strTitle: '',\n strContent: ''\n }\n\n };\n },\n\n methods: {\n formatState: function formatState(row, column) {\n return row.state == 0 ? '未启用' : row.state == 1 ? '已启用' : '未知';\n },\n brightenKeyword: function brightenKeyword(val, keyword) {\n var Reg = new RegExp(keyword, 'i');\n if (val) {\n var res = val.replace(Reg, '' + keyword + '');\n return res;\n }\n },\n handleSizeChange: function handleSizeChange(val) {\n this.listQuery.pageSize = val;\n this.getMaintains();\n },\n handleCurrentChange: function handleCurrentChange(val) {\n this.listQuery.curPage = val;\n this.getMaintains();\n },\n on_refresh: function on_refresh() {\n this.getMaintains();\n },\n handleDownload: function handleDownload() {\n var _this = this;\n\n var list = '';\n if (this.sels.length) {\n list = this.sels;\n } else {\n list = this.maintains;\n }\n this.downloadLoading = true;\n __webpack_require__.e/* import() */(0).then(__webpack_require__.bind(null, 1118)).then(function (excel) {\n var tHeader = ['Id', 'Title', 'Content', 'Time'];\n var filterVal = ['strMaintainId', 'strTitle', 'strContent', 'createTime'];\n var data = _this.formatJson(filterVal, list);\n excel.export_json_to_excel({\n titleName: '维护项列表',\n header: tHeader,\n data: data,\n filename: _this.filename,\n autoWidth: _this.autoWidth\n });\n _this.downloadLoading = false;\n });\n },\n formatJson: function formatJson(filterVal, jsonData) {\n return jsonData.map(function (v) {\n return filterVal.map(function (j) {\n return v[j];\n });\n });\n },\n getMaintains: function getMaintains() {\n var _this2 = this;\n\n var para = {\n curPage: this.listQuery.curPage,\n pageSize: this.listQuery.pageSize,\n strOrder: 'asc',\n strTitle: this.filters.strTitle,\n strContent: this.filters.strContent\n };\n this.listLoading = true;\n\n (0, _api.getMaintainListPage)(para).then(function (res) {\n _this2.total = res.data.total;\n _this2.maintains = res.data.maintains;\n _this2.listLoading = false;\n });\n },\n\n handleDel: function handleDel(index, row) {\n var _this3 = this;\n\n this.$confirm('确认删除该记录吗?', '提示', {\n type: 'warning'\n }).then(function () {\n _this3.listLoading = true;\n\n var para = { strMaintainId: row.strMaintainId };\n (0, _api.removeMaintain)(para).then(function (res) {\n _this3.listLoading = false;\n\n _this3.$message({\n message: '删除成功',\n type: 'success'\n });\n _this3.getMaintains();\n });\n }).catch(function () {});\n },\n\n handleEdit: function handleEdit(index, row) {\n this.editFormVisible = true;\n this.editForm = (0, _assign2.default)({}, row);\n },\n\n handleAdd: function handleAdd() {\n this.addFormVisible = true;\n this.addForm = {\n strTitle: '',\n strContent: ''\n };\n },\n\n editSubmit: function editSubmit() {\n var _this4 = this;\n\n this.$refs.editForm.validate(function (valid) {\n if (valid) {\n _this4.$confirm('确认提交吗?', '提示', {}).then(function () {\n _this4.editLoading = true;\n\n var para = (0, _assign2.default)({}, _this4.editForm);\n (0, _api.editMaintain)(para).then(function (res) {\n _this4.editLoading = false;\n\n _this4.$message({\n message: '提交成功',\n type: 'success'\n });\n _this4.$refs['editForm'].resetFields();\n _this4.editFormVisible = false;\n _this4.getMaintains();\n });\n });\n }\n });\n },\n\n addSubmit: function addSubmit() {\n var _this5 = this;\n\n this.$refs.addForm.validate(function (valid) {\n if (valid) {\n _this5.$confirm('确认提交吗?', '提示', {}).then(function () {\n _this5.addLoading = true;\n\n var para = (0, _assign2.default)({}, _this5.addForm);\n (0, _api.addMaintain)(para).then(function (res) {\n _this5.addLoading = false;\n\n _this5.$message({\n message: '提交成功',\n type: 'success'\n });\n _this5.$refs['addForm'].resetFields();\n _this5.addFormVisible = false;\n _this5.getMaintains();\n });\n });\n }\n });\n },\n selsChange: function selsChange(sels) {\n this.sels = sels;\n },\n\n batchRemove: function batchRemove() {\n var _this6 = this;\n\n var ids = this.sels.map(function (item) {\n return item.strMaintainId;\n }).toString();\n this.$confirm('确认删除选中记录吗?', '提示', {\n type: 'warning'\n }).then(function () {\n _this6.listLoading = true;\n\n var para = { ids: ids };\n (0, _api.batchRemoveMaintain)(para).then(function (res) {\n _this6.listLoading = false;\n\n _this6.$message({\n message: '删除成功',\n type: 'success'\n });\n _this6.getMaintains();\n });\n }).catch(function () {});\n }\n },\n mounted: function mounted() {\n this.getMaintains();\n }\n};\n\n/***/ }),\n\n/***/ 473:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _index = __webpack_require__(1046);\n\nvar _index2 = _interopRequireDefault(_index);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = {\n name: 'UploadExcel',\n components: { UploadExcelComponent: _index2.default },\n data: function data() {\n return {\n panelTitle: '列表',\n tableData: [],\n tableHeader: []\n };\n },\n\n methods: {\n beforeUpload: function beforeUpload(file) {\n var isLt1M = file.size / 1024 / 1024 < 1;\n\n if (isLt1M) {\n return true;\n }\n\n this.$message({\n message: 'Please do not upload files larger than 1m in size.',\n type: 'warning'\n });\n return false;\n },\n handleSuccess: function handleSuccess(_ref) {\n var results = _ref.results,\n header = _ref.header;\n\n this.tableData = results;\n this.tableHeader = header;\n }\n }\n};\n\n/***/ }),\n\n/***/ 474:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _assign = __webpack_require__(99);\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nvar _util = __webpack_require__(111);\n\nvar _util2 = _interopRequireDefault(_util);\n\nvar _api = __webpack_require__(77);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = {\n data: function data() {\n return {\n myBackToTopStyle: {\n right: '50px',\n bottom: '50px',\n width: '40px',\n height: '40px',\n 'border-radius': '4px',\n 'line-height': '45px',\n background: '#e7eaf1' },\n filters: {\n strTitle: '',\n strContent: '',\n createTime: '',\n updateTime: '',\n cStartTime: ''\n },\n panelTitle: '维护项列表',\n pickerOptions1: {\n shortcuts: [{\n text: '今天',\n onClick: function onClick(picker) {\n picker.$emit('pick', new Date());\n }\n }, {\n text: '昨天',\n onClick: function onClick(picker) {\n var date = new Date();\n date.setTime(date.getTime() - 3600 * 1000 * 24);\n picker.$emit('pick', date);\n }\n }, {\n text: '一周前',\n onClick: function onClick(picker) {\n var date = new Date();\n date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);\n picker.$emit('pick', date);\n }\n }]\n },\n pickerOptions2: {\n shortcuts: [{\n text: '最近一周',\n onClick: function onClick(picker) {\n var end = new Date();\n var start = new Date();\n start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);\n picker.$emit('pick', [start, end]);\n }\n }, {\n text: '最近一个月',\n onClick: function onClick(picker) {\n var end = new Date();\n var start = new Date();\n start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);\n picker.$emit('pick', [start, end]);\n }\n }, {\n text: '最近三个月',\n onClick: function onClick(picker) {\n var end = new Date();\n var start = new Date();\n start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);\n picker.$emit('pick', [start, end]);\n }\n }]\n },\n maintains: [],\n total: 0,\n listLoading: false,\n sels: [],\n\n form: {\n strTitle: '',\n strContent: '',\n cStartTime: '',\n cEndTime: '',\n uStartTime: '',\n uEndTime: ''\n },\n\n listQuery: {\n curPage: 1,\n limit: 20,\n pageSize: 10,\n importance: undefined,\n title: undefined,\n type: undefined,\n sort: '+id'\n },\n\n editFormVisible: false,\n editLoading: false,\n editFormRules: {\n strTitle: [{ required: true, message: '请输入维护项名称', trigger: 'blur' }],\n strContent: [{ required: true, message: '请输入维护内容', trigger: 'blur' }]\n },\n\n editForm: {\n strMaintainId: 0,\n strTitle: '',\n strContent: ''\n },\n\n addFormVisible: false,\n addLoading: false,\n addFormRules: {\n strTitle: [{ required: true, message: '请输入维护项名称', trigger: 'blur' }],\n strContent: [{ required: true, message: '请输入维护内容', trigger: 'blur' }]\n },\n\n addForm: {\n strTitle: '',\n strContent: ''\n }\n\n };\n },\n\n methods: {\n formatState: function formatState(row, column) {\n return row.state == 0 ? '未启用' : row.state == 1 ? '已启用' : '未知';\n },\n brightenKeyword: function brightenKeyword(val, keyword) {\n var Reg = new RegExp(keyword, 'i');\n if (val) {\n var res = val.replace(Reg, '' + keyword + '');\n return res;\n }\n },\n handleSizeChange: function handleSizeChange(val) {\n this.listQuery.pageSize = val;\n this.getMaintains();\n },\n handleCurrentChange: function handleCurrentChange(val) {\n this.listQuery.curPage = val;\n this.getMaintains();\n },\n on_refresh: function on_refresh() {\n this.getMaintains();\n },\n getMaintains: function getMaintains() {\n var _this = this;\n\n var para = {\n curPage: this.listQuery.curPage,\n pageSize: this.listQuery.pageSize,\n strOrder: 'asc',\n strTitle: this.filters.strTitle,\n strContent: this.filters.strContent\n };\n this.listLoading = true;\n\n (0, _api.getMaintainListPage)(para).then(function (res) {\n _this.total = res.data.total;\n _this.maintains = res.data.maintains;\n _this.listLoading = false;\n });\n },\n\n handleDel: function handleDel(index, row) {\n var _this2 = this;\n\n this.$confirm('确认删除该记录吗?', '提示', {\n type: 'warning'\n }).then(function () {\n _this2.listLoading = true;\n\n var para = { strMaintainId: row.strMaintainId };\n (0, _api.removeMaintain)(para).then(function (res) {\n _this2.listLoading = false;\n\n _this2.$message({\n message: '删除成功',\n type: 'success'\n });\n _this2.getMaintains();\n });\n }).catch(function () {});\n },\n\n handleEdit: function handleEdit(index, row) {\n this.editFormVisible = true;\n this.editForm = (0, _assign2.default)({}, row);\n },\n\n handleAdd: function handleAdd() {\n this.addFormVisible = true;\n this.addForm = {\n strTitle: '',\n strContent: ''\n };\n },\n\n editSubmit: function editSubmit() {\n var _this3 = this;\n\n this.$refs.editForm.validate(function (valid) {\n if (valid) {\n _this3.$confirm('确认提交吗?', '提示', {}).then(function () {\n _this3.editLoading = true;\n\n var para = (0, _assign2.default)({}, _this3.editForm);\n (0, _api.editMaintain)(para).then(function (res) {\n _this3.editLoading = false;\n\n _this3.$message({\n message: '提交成功',\n type: 'success'\n });\n _this3.$refs['editForm'].resetFields();\n _this3.editFormVisible = false;\n _this3.getMaintains();\n });\n });\n }\n });\n },\n\n addSubmit: function addSubmit() {\n var _this4 = this;\n\n this.$refs.addForm.validate(function (valid) {\n if (valid) {\n _this4.$confirm('确认提交吗?', '提示', {}).then(function () {\n _this4.addLoading = true;\n\n var para = (0, _assign2.default)({}, _this4.addForm);\n (0, _api.addMaintain)(para).then(function (res) {\n _this4.addLoading = false;\n\n _this4.$message({\n message: '提交成功',\n type: 'success'\n });\n _this4.$refs['addForm'].resetFields();\n _this4.addFormVisible = false;\n _this4.getMaintains();\n });\n });\n }\n });\n },\n selsChange: function selsChange(sels) {\n this.sels = sels;\n },\n\n batchRemove: function batchRemove() {\n var _this5 = this;\n\n var ids = this.sels.map(function (item) {\n return item.strMaintainId;\n }).toString();\n this.$confirm('确认删除选中记录吗?', '提示', {\n type: 'warning'\n }).then(function () {\n _this5.listLoading = true;\n\n var para = { ids: ids };\n (0, _api.batchRemoveMaintain)(para).then(function (res) {\n _this5.listLoading = false;\n\n _this5.$message({\n message: '删除成功',\n type: 'success'\n });\n _this5.getMaintains();\n });\n }).catch(function () {});\n }\n },\n mounted: function mounted() {\n this.getMaintains();\n }\n};\n\n/***/ }),\n\n/***/ 475:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _assign = __webpack_require__(99);\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nvar _util = __webpack_require__(111);\n\nvar _util2 = _interopRequireDefault(_util);\n\nvar _api = __webpack_require__(77);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = {\n data: function data() {\n return {\n filters: {\n strPlanId: '',\n strMaintainId: '',\n equipmentCategory: '',\n equipmentId: '',\n executeTime: '',\n isCycle: 0,\n cycleDay: []\n },\n panelTitle: '维护计划列表',\n activeNames: ['1'],\n pickerOptions1: {\n shortcuts: [{\n text: '今天',\n onClick: function onClick(picker) {\n picker.$emit('pick', new Date());\n }\n }, {\n text: '明天',\n onClick: function onClick(picker) {\n var date = new Date();\n date.setTime(date.getTime() + 3600 * 1000 * 24);\n picker.$emit('pick', date);\n }\n }, {\n text: '一周后',\n onClick: function onClick(picker) {\n var date = new Date();\n date.setTime(date.getTime() + 3600 * 1000 * 24 * 7);\n picker.$emit('pick', date);\n }\n }]\n },\n pickerOptions2: {\n shortcuts: [{\n text: '最近一周',\n onClick: function onClick(picker) {\n var end = new Date();\n var start = new Date();\n start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);\n picker.$emit('pick', [start, end]);\n }\n }, {\n text: '最近一个月',\n onClick: function onClick(picker) {\n var end = new Date();\n var start = new Date();\n start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);\n picker.$emit('pick', [start, end]);\n }\n }, {\n text: '最近三个月',\n onClick: function onClick(picker) {\n var end = new Date();\n var start = new Date();\n start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);\n picker.$emit('pick', [start, end]);\n }\n }]\n },\n cycleDays: [{\n value: '1',\n label: '1天'\n }, {\n value: '2',\n label: '2天'\n }],\n customDayOptions: [{\n value: '1',\n label: '1天'\n }, {\n value: '2',\n label: '2天'\n }, {\n value: '3',\n label: '3天'\n }, {\n value: '4',\n label: '4天'\n }, {\n value: '5',\n label: '5天'\n }],\n currentValue: '',\n showAddCustomDayButton: false,\n plans: [],\n total: 0,\n listLoading: false,\n sels: [],\n\n form: {\n strPlanId: 0,\n strMaintainId: '',\n executeTime: '',\n isCycle: 0,\n cycleDay: '',\n description: '',\n equipmentCategory: '',\n equipmentId: ''\n },\n\n listQuery: {\n curPage: 1,\n limit: 20,\n pageSize: 10,\n importance: undefined,\n title: undefined,\n type: undefined,\n sort: '+id'\n },\n\n editFormVisible: false,\n editLoading: false,\n editFormRules: {\n strMaintainId: [{ required: true, message: '请输入维护项ID', trigger: 'blur' }],\n executeTime: [{ required: true, validator: this.checkExecuteTime, trigger: 'blur' }],\n equipmentCategory: [{ required: true, message: '请输入设备类型ID', trigger: 'blur' }],\n equipmentId: [{ required: true, message: '请输入设备ID', trigger: 'blur' }]\n },\n\n editForm: {\n strPlanId: 0,\n strMaintainId: '',\n executeTime: '',\n isCycle: '',\n cycleDay: '',\n description: '',\n equipmentCategory: '',\n equipmentId: ''\n },\n\n addFormVisible: false,\n addLoading: false,\n addFormRules: {\n strMaintainId: [{ required: true, message: '请输入维护项ID', trigger: 'blur' }],\n executeTime: [{ required: true, validator: this.checkExecuteTime, trigger: 'blur' }],\n equipmentCategory: [{ required: true, message: '请输入设备类型ID', trigger: 'blur' }],\n equipmentId: [{ required: true, message: '请输入设备ID', trigger: 'blur' }]\n },\n\n addForm: {\n strMaintainId: '',\n executeTime: '',\n isCycle: 0,\n cycleDay: '',\n remindDay: [1, 2, 3, 4, 5],\n customDay: '',\n description: '',\n equipmentCategory: '',\n equipmentId: ''\n }\n\n };\n },\n\n methods: {\n format: function (_format) {\n function format(_x, _x2) {\n return _format.apply(this, arguments);\n }\n\n format.toString = function () {\n return _format.toString();\n };\n\n return format;\n }(function (time, format) {\n var t = new Date(time);\n var tf = function tf(i) {\n return (i < 10 ? '0' : '') + i;\n };\n return format.replace(/yyyy|MM|dd|HH|mm|ss/g, function (a) {\n switch (a) {\n case 'yyyy':\n return tf(t.getFullYear());\n break;\n case 'MM':\n return tf(t.getMonth() + 1);\n break;\n case 'mm':\n return tf(t.getMinutes());\n break;\n case 'dd':\n return tf(t.getDate());\n break;\n case 'HH':\n return tf(t.getHours());\n break;\n case 'ss':\n return tf(t.getSeconds());\n break;\n }\n });\n }),\n checkExecuteTime: function checkExecuteTime(rule, value, callback) {\n if (!value) {\n return callback(new Error('执行时间不能为空'));\n }\n setTimeout(function () {\n var now = new Date();\n if (format(value, 'yyyy-MM-dd HH:mm:ss') < format(now, 'yyyy-MM-dd HH:mm:ss')) {\n callback(new Error('执行时间必须大于当前时间'));\n } else {\n callback();\n }\n }, 500);\n },\n\n formatCycle: function formatCycle(row, column) {\n return row.isCycle === 0 ? '否' : row.isCycle === 1 ? '是' : '未知';\n },\n handleChange: function handleChange(value) {\n console.log(value);\n },\n\n checkCustomDay: function checkCustomDay(value) {\n var index = this.customDayOptions.findIndex(function (x) {\n return x.value == value;\n });\n console.log('index: ' + index);\n console.log('value: ' + value);\n if (index != -1) {\n this.showAddCustomDayButton = false;\n } else {\n this.showAddCustomDayButton = true;\n }\n },\n handleCustomDayChange: function handleCustomDayChange(value) {\n this.checkCustomDay(value);\n },\n onAddCustomDay: function onAddCustomDay() {\n this.currentValue = this.addForm.customDay;\n this.customDayOptions.push({\n value: this.currentValue,\n label: this.currentValue + '天'\n });\n this.addForm.remindDay.push(this.currentValue);\n\n this.checkCustomDay(this.currentValue);\n },\n isActive: function isActive() {},\n closeViewTabs: function closeViewTabs(item, $event) {\n var index = this.customDayOptions.findIndex(function (x) {\n return x.value == item.value;\n });\n this.customDayOptions.splice(index, 1);\n\n this.currentValue = this.addForm.customDay;\n this.checkCustomDay(this.currentValue);\n $event.preventDefault();\n },\n handleSizeChange: function handleSizeChange(val) {\n this.listQuery.pageSize = val;\n this.getPlans();\n },\n handleCurrentChange: function handleCurrentChange(val) {\n this.listQuery.curPage = val;\n this.getPlans();\n },\n on_refresh: function on_refresh() {\n this.getPlans();\n },\n getPlans: function getPlans() {\n var _this = this;\n\n var para = {\n curPage: this.listQuery.curPage,\n pageSize: this.listQuery.pageSize,\n executeTime: this.filters.executeTime,\n isCycle: this.filters.isCycle\n };\n this.listLoading = true;\n\n (0, _api.getPlanListPage)(para).then(function (res) {\n _this.total = res.data.total;\n _this.plans = res.data.plans;\n _this.listLoading = false;\n });\n },\n\n handleDel: function handleDel(index, row) {\n var _this2 = this;\n\n this.$confirm('确认删除该记录吗?', '提示', {\n type: 'warning'\n }).then(function () {\n _this2.listLoading = true;\n\n var para = { strPlanId: row.strPlanId };\n (0, _api.removePlan)(para).then(function (res) {\n _this2.listLoading = false;\n\n _this2.$message({\n message: '删除成功',\n type: 'success'\n });\n _this2.getPlans();\n });\n }).catch(function () {});\n },\n\n handleEdit: function handleEdit(index, row) {\n this.editFormVisible = true;\n this.editForm = (0, _assign2.default)({}, row);\n },\n\n handleAdd: function handleAdd() {\n this.addFormVisible = true;\n this.addForm = {\n strMaintainId: '',\n executeTime: '',\n isCycle: 1,\n cycleDay: '',\n remindDay: [1, 2, 3, 4, 5],\n customDay: '',\n description: '',\n equipmentCategory: '',\n equipmentId: ''\n };\n },\n\n editSubmit: function editSubmit() {\n var _this3 = this;\n\n this.$refs.editForm.validate(function (valid) {\n if (valid) {\n _this3.$confirm('确认提交吗?', '提示', {}).then(function () {\n _this3.editLoading = true;\n\n var para = (0, _assign2.default)({}, _this3.editForm);\n (0, _api.editPlan)(para).then(function (res) {\n _this3.editLoading = false;\n\n _this3.$message({\n message: '提交成功',\n type: 'success'\n });\n _this3.$refs['editForm'].resetFields();\n _this3.editFormVisible = false;\n _this3.getPlans();\n });\n });\n }\n });\n },\n\n addSubmit: function addSubmit() {\n var _this4 = this;\n\n this.$refs.addForm.validate(function (valid) {\n if (valid) {\n _this4.$confirm('确认提交吗?', '提示', {}).then(function () {\n _this4.addLoading = true;\n\n var para = (0, _assign2.default)({}, _this4.addForm);\n (0, _api.addPlan)(para).then(function (res) {\n _this4.addLoading = false;\n\n _this4.$message({\n message: '提交成功',\n type: 'success'\n });\n _this4.$refs['addForm'].resetFields();\n _this4.addFormVisible = false;\n _this4.getPlans();\n });\n });\n }\n });\n },\n selsChange: function selsChange(sels) {\n this.sels = sels;\n },\n\n batchRemove: function batchRemove() {\n var _this5 = this;\n\n var ids = this.sels.map(function (item) {\n return item.strPlanId;\n }).toString();\n this.$confirm('确认删除选中记录吗?', '提示', {\n type: 'warning'\n }).then(function () {\n _this5.listLoading = true;\n\n var para = { ids: ids };\n (0, _api.batchRemovePlan)(para).then(function (res) {\n _this5.listLoading = false;\n\n _this5.$message({\n message: '删除成功',\n type: 'success'\n });\n _this5.getPlans();\n });\n }).catch(function () {});\n }\n },\n mounted: function mounted() {\n this.getPlans();\n }\n};\n\n/***/ }),\n\n/***/ 476:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _assign = __webpack_require__(99);\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nvar _util = __webpack_require__(111);\n\nvar _util2 = _interopRequireDefault(_util);\n\nvar _api = __webpack_require__(77);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = {\n data: function data() {\n return {\n filters: {\n executeTime: '',\n isCycle: 1,\n cycleDay: []\n },\n panelTitle: '维护计划列表',\n pickerOptions1: {\n shortcuts: [{\n text: '今天',\n onClick: function onClick(picker) {\n picker.$emit('pick', new Date());\n }\n }, {\n text: '昨天',\n onClick: function onClick(picker) {\n var date = new Date();\n date.setTime(date.getTime() - 3600 * 1000 * 24);\n picker.$emit('pick', date);\n }\n }, {\n text: '一周前',\n onClick: function onClick(picker) {\n var date = new Date();\n date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);\n picker.$emit('pick', date);\n }\n }]\n },\n cycleDays: [{\n value: '1',\n label: '1天'\n }, {\n value: '2',\n label: '2天'\n }],\n plans: [],\n total: 0,\n hello: true,\n page: 1,\n listLoading: false,\n sels: [],\n\n form: {\n strTitle: '',\n strContent: '',\n cStartTime: '',\n cEndTime: '',\n uStartTime: '',\n uEndTime: ''\n },\n\n listQuery: {\n curPage: 1,\n limit: 20,\n pageSize: 10,\n importance: undefined,\n title: undefined,\n type: undefined,\n sort: '+id'\n },\n\n editFormVisible: false,\n editLoading: false,\n editFormRules: {\n strTitle: [{ required: true, message: '请输入维护项名称', trigger: 'blur' }]\n },\n\n editForm: {\n strPlanId: 0,\n strTitle: '',\n strContent: ''\n },\n\n addFormVisible: false,\n addLoading: false,\n addFormRules: {\n strTitle: [{ required: true, message: '请输入维护项名称', trigger: 'blur' }]\n },\n\n addForm: {\n strTitle: '',\n strContent: ''\n }\n\n };\n },\n\n methods: {\n formatCycle: function formatCycle(row, column) {\n return row.isCycle == 0 ? '否' : row.isCycle == 1 ? '是' : '未知';\n },\n handleSizeChange: function handleSizeChange(val) {\n this.listQuery.pageSize = val;\n this.getPlans();\n },\n handleCurrentChange: function handleCurrentChange(val) {\n this.listQuery.curPage = val;\n this.getPlans();\n },\n on_refresh: function on_refresh() {\n this.getPlans();\n },\n getPlans: function getPlans() {\n var _this = this;\n\n var params = {\n curPage: this.listQuery.curPage,\n pageSize: this.listQuery.pageSize,\n executeTime: this.filters.executeTime,\n isCycle: this.filters.isCycle\n };\n this.listLoading = true;\n\n (0, _api.getPlanListPage)(params).then(function (res) {\n _this.total = res.data.total;\n _this.plans = res.data.plans;\n _this.listLoading = false;\n });\n },\n\n handleDel: function handleDel(index, row) {\n var _this2 = this;\n\n this.$confirm('确认删除该记录吗?', '提示', {\n type: 'warning'\n }).then(function () {\n _this2.listLoading = true;\n\n var para = { strPlanId: row.strPlanId };\n (0, _api.removePlan)(para).then(function (res) {\n _this2.listLoading = false;\n\n _this2.$message({\n message: '删除成功',\n type: 'success'\n });\n _this2.getPlans();\n });\n }).catch(function () {});\n },\n\n handleEdit: function handleEdit(index, row) {\n this.editFormVisible = true;\n this.editForm = (0, _assign2.default)({}, row);\n },\n\n handleAdd: function handleAdd() {\n this.addFormVisible = true;\n this.addForm = {\n strTitle: '',\n strContent: ''\n };\n },\n\n editSubmit: function editSubmit() {\n var _this3 = this;\n\n this.$refs.editForm.validate(function (valid) {\n if (valid) {\n _this3.$confirm('确认提交吗?', '提示', {}).then(function () {\n _this3.editLoading = true;\n\n var para = (0, _assign2.default)({}, _this3.editForm);\n (0, _api.editPlan)(para).then(function (res) {\n _this3.editLoading = false;\n\n _this3.$message({\n message: '提交成功',\n type: 'success'\n });\n _this3.$refs['editForm'].resetFields();\n _this3.editFormVisible = false;\n _this3.getPlans();\n });\n });\n }\n });\n },\n\n addSubmit: function addSubmit() {\n var _this4 = this;\n\n this.$refs.addForm.validate(function (valid) {\n if (valid) {\n _this4.$confirm('确认提交吗?', '提示', {}).then(function () {\n _this4.addLoading = true;\n\n var para = (0, _assign2.default)({}, _this4.addForm);\n (0, _api.addPlan)(para).then(function (res) {\n _this4.addLoading = false;\n\n _this4.$message({\n message: '提交成功',\n type: 'success'\n });\n _this4.$refs['addForm'].resetFields();\n _this4.addFormVisible = false;\n _this4.getPlans();\n });\n });\n }\n });\n },\n selsChange: function selsChange(sels) {\n this.sels = sels;\n },\n\n batchRemove: function batchRemove() {\n var _this5 = this;\n\n var ids = this.sels.map(function (item) {\n return item.strPlanId;\n }).toString();\n this.$confirm('确认删除选中记录吗?', '提示', {\n type: 'warning'\n }).then(function () {\n _this5.listLoading = true;\n\n var para = { ids: ids };\n (0, _api.batchRemovePlan)(para).then(function (res) {\n _this5.listLoading = false;\n\n _this5.$message({\n message: '删除成功',\n type: 'success'\n });\n _this5.getPlans();\n });\n }).catch(function () {});\n }\n },\n mounted: function mounted() {\n this.getPlans();\n }\n};\n\n/***/ }),\n\n/***/ 477:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _assign = __webpack_require__(99);\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nvar _util = __webpack_require__(111);\n\nvar _util2 = _interopRequireDefault(_util);\n\nvar _api = __webpack_require__(77);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = {\n data: function data() {\n return {\n filters: {\n siteName: ''\n },\n panelTitle: '数据列表',\n users: [],\n total: 0,\n hello: true,\n listLoading: false,\n activeNames: ['1'],\n sels: [],\n\n form: {\n siteName: '',\n deviceNo: '',\n deviceNoItems: [{ text: '全部', value: '全部' }, { text: '设备一', value: '设备一' }, { text: '设备二', value: '设备二' }],\n startTime: '',\n repeat: [],\n state: 0,\n type: ['放电', '充电'],\n desc: ''\n },\n\n listQuery: {\n curPage: 1,\n limit: 20,\n pageSize: 10,\n sort: '+id'\n },\n\n editFormVisible: false,\n editLoading: false,\n editFormRules: {\n name: [{ required: true, message: '请输入姓名', trigger: 'blur' }]\n },\n\n editForm: {\n id: 0,\n siteName: '',\n deviceNo: '',\n startTime: '',\n repeat: [],\n state: 0,\n type: []\n },\n\n addFormVisible: false,\n addLoading: false,\n addFormRules: {\n name: [{ required: true, message: '请输入姓名', trigger: 'blur' }]\n },\n\n addForm: {\n siteName: '',\n deviceNo: '',\n startTime: '',\n repeat: [],\n state: [],\n type: ['放电', '充电']\n }\n\n };\n },\n\n methods: {\n formatState: function formatState(row, column) {\n return row.state == 0 ? '未启用' : row.state == 1 ? '已启用' : '未知';\n },\n handleSizeChange: function handleSizeChange(val) {\n this.listQuery.pageSize = val;\n this.getUsers();\n },\n handleCurrentChange: function handleCurrentChange(val) {\n this.listQuery.curPage = val;\n this.getUsers();\n },\n on_refresh: function on_refresh() {\n this.getUsers();\n },\n getUsers: function getUsers() {\n var _this = this;\n\n var para = {\n curPage: this.listQuery.curPage,\n pageSize: this.listQuery.pageSize,\n siteName: this.filters.siteName\n };\n this.listLoading = true;\n\n (0, _api.getUserListPage)(para).then(function (res) {\n _this.total = res.data.total;\n _this.users = res.data.users;\n for (var i = 0; i < _this.users.length; i++) {\n if (_this.users[i].type.length > 1) {\n var arr = [];\n for (var j = 0; j < _this.users[i].type.length - 1; j++) {\n _this.users[i].type[j] = _this.users[i].type[j] + \"|\";\n arr.push(_this.users[i].type[j]);\n }\n arr.push(_this.users[i].type[_this.users[i].type.length - 1]);\n _this.users[i].type = arr;\n }\n }\n _this.listLoading = false;\n });\n },\n\n handleDel: function handleDel(index, row) {\n var _this2 = this;\n\n this.$confirm('确认删除该记录吗?', '提示', {\n type: 'warning'\n }).then(function () {\n _this2.listLoading = true;\n\n var para = { id: row.id };\n (0, _api.removeUser)(para).then(function (res) {\n _this2.listLoading = false;\n\n _this2.$message({\n message: '删除成功',\n type: 'success'\n });\n _this2.getUsers();\n });\n }).catch(function () {});\n },\n\n handleEdit: function handleEdit(index, row) {\n this.editFormVisible = true;\n this.editForm = (0, _assign2.default)({}, row);\n var strs = [];\n strs = this.editForm.type;\n this.editForm.type = [];\n for (var i = 0; i < strs.length; i++) {\n var str = strs[i];\n this.editForm.type.push(str.substring(0, 2));\n }\n },\n\n handleAdd: function handleAdd() {\n this.addFormVisible = true;\n this.addForm = {\n siteName: '',\n deviceNo: -1,\n startTime: '',\n repeat: [\"每天\"],\n state: [],\n type: [\"放电\", \"内阻\"]\n };\n },\n\n editSubmit: function editSubmit() {\n var _this3 = this;\n\n this.$refs.editForm.validate(function (valid) {\n if (valid) {\n _this3.$confirm('确认提交吗?', '提示', {}).then(function () {\n _this3.editLoading = true;\n\n var para = (0, _assign2.default)({}, _this3.editForm);\n para.startTime = !para.startTime || para.startTime == '' ? '' : _util2.default.formatDate.format(new Date(para.startTime), 'yyyy-MM-dd');\n (0, _api.editUser)(para).then(function (res) {\n _this3.editLoading = false;\n\n _this3.$message({\n message: '提交成功',\n type: 'success'\n });\n _this3.$refs['editForm'].resetFields();\n _this3.editFormVisible = false;\n _this3.getUsers();\n });\n });\n }\n });\n },\n\n addSubmit: function addSubmit() {\n var _this4 = this;\n\n this.$refs.addForm.validate(function (valid) {\n if (valid) {\n _this4.$confirm('确认提交吗?', '提示', {}).then(function () {\n _this4.addLoading = true;\n\n var para = (0, _assign2.default)({}, _this4.addForm);\n para.startTime = !para.startTime || para.startTime == '' ? '' : _util2.default.formatDate.format(new Date(para.startTime), 'yyyy-MM-dd');\n (0, _api.addUser)(para).then(function (res) {\n _this4.addLoading = false;\n\n _this4.$message({\n message: '提交成功',\n type: 'success'\n });\n _this4.$refs['addForm'].resetFields();\n _this4.addFormVisible = false;\n console.log(\"type \" + para.type);\n _this4.getUsers();\n });\n });\n }\n });\n },\n selsChange: function selsChange(sels) {\n this.sels = sels;\n },\n\n batchRemove: function batchRemove() {\n var _this5 = this;\n\n var ids = this.sels.map(function (item) {\n return item.id;\n }).toString();\n this.$confirm('确认删除选中记录吗?', '提示', {\n type: 'warning'\n }).then(function () {\n _this5.listLoading = true;\n\n var para = { ids: ids };\n (0, _api.batchRemoveUser)(para).then(function (res) {\n _this5.listLoading = false;\n\n _this5.$message({\n message: '删除成功',\n type: 'success'\n });\n _this5.getUsers();\n });\n }).catch(function () {});\n }\n },\n mounted: function mounted() {\n this.getUsers();\n }\n};\n\n/***/ }),\n\n/***/ 478:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\n\nvar base = '';\nvar login = exports.login = base + '/login';\n\nvar userList = exports.userList = base + '/user/list';\n\nvar userListpage = exports.userListpage = base + '/user/listpage';\n\nvar userRemove = exports.userRemove = base + '/user/remove';\n\nvar userBatchremove = exports.userBatchremove = base + '/user/batchremove';\n\nvar userEdit = exports.userEdit = base + '/user/edit';\n\nvar userAdd = exports.userAdd = base + '/user/add';\n\nvar categoryList = exports.categoryList = base + '/category/list';\n\nvar categoryListpage = exports.categoryListpage = base + '/category/listpage';\n\nvar categoryRemove = exports.categoryRemove = base + '/category/remove';\n\nvar categoryBatchremove = exports.categoryBatchremove = base + '/category/batchremove';\n\nvar categoryEdit = exports.categoryEdit = base + '/category/edit';\n\nvar categoryAdd = exports.categoryAdd = base + '/category/add';\n\nvar maintainList = exports.maintainList = base + '/maintain/list';\n\nvar maintainListpage = exports.maintainListpage = base + '/maintain/listpage';\nvar maintainRemove = exports.maintainRemove = base + '/maintain/remove';\n\nvar maintainBatchremove = exports.maintainBatchremove = base + '/maintain/batchremove';\n\nvar maintainEdit = exports.maintainEdit = base + '/maintain/edit';\n\nvar maintainAdd = exports.maintainAdd = base + '/maintain/add';\n\nvar planList = exports.planList = base + '/plan/list';\n\nvar planListpage = exports.planListpage = base + '/plan/listpage';\n\nvar planRemove = exports.planRemove = base + '/plan/remove';\n\nvar planBatchremove = exports.planBatchremove = base + '/plan/batchremove';\n\nvar planEdit = exports.planEdit = base + '/plan/edit';\n\nvar planAdd = exports.planAdd = base + '/plan/add';\n\n/***/ }),\n\n/***/ 479:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(module) {var _create=__webpack_require__(487);var _create2=_interopRequireDefault(_create);var _keys=__webpack_require__(490);var _keys2=_interopRequireDefault(_keys);var _stringify=__webpack_require__(177);var _stringify2=_interopRequireDefault(_stringify);var _defineProperties=__webpack_require__(488);var _defineProperties2=_interopRequireDefault(_defineProperties);var _sign=__webpack_require__(486);var _sign2=_interopRequireDefault(_sign);var _typeof2=__webpack_require__(112);var _typeof3=_interopRequireDefault(_typeof2);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}var THREE={REVISION:'69'};if(( false?'undefined':(0,_typeof3.default)(module))==='object'){module.exports=THREE;}if(_sign2.default===undefined){Math.sign=function(x){return x<0?-1:x>0?1:0;};}THREE.MOUSE={LEFT:0,MIDDLE:1,RIGHT:2};THREE.CullFaceNone=0;THREE.CullFaceBack=1;THREE.CullFaceFront=2;THREE.CullFaceFrontBack=3;THREE.FrontFaceDirectionCW=0;THREE.FrontFaceDirectionCCW=1;THREE.BasicShadowMap=0;THREE.PCFShadowMap=1;THREE.PCFSoftShadowMap=2;THREE.FrontSide=0;THREE.BackSide=1;THREE.DoubleSide=2;THREE.NoShading=0;THREE.FlatShading=1;THREE.SmoothShading=2;THREE.NoColors=0;THREE.FaceColors=1;THREE.VertexColors=2;THREE.NoBlending=0;THREE.NormalBlending=1;THREE.AdditiveBlending=2;THREE.SubtractiveBlending=3;THREE.MultiplyBlending=4;THREE.CustomBlending=5;THREE.AddEquation=100;THREE.SubtractEquation=101;THREE.ReverseSubtractEquation=102;THREE.MinEquation=103;THREE.MaxEquation=104;THREE.ZeroFactor=200;THREE.OneFactor=201;THREE.SrcColorFactor=202;THREE.OneMinusSrcColorFactor=203;THREE.SrcAlphaFactor=204;THREE.OneMinusSrcAlphaFactor=205;THREE.DstAlphaFactor=206;THREE.OneMinusDstAlphaFactor=207;THREE.DstColorFactor=208;THREE.OneMinusDstColorFactor=209;THREE.SrcAlphaSaturateFactor=210;THREE.MultiplyOperation=0;THREE.MixOperation=1;THREE.AddOperation=2;THREE.UVMapping=function(){};THREE.CubeReflectionMapping=function(){};THREE.CubeRefractionMapping=function(){};THREE.SphericalReflectionMapping=function(){};THREE.SphericalRefractionMapping=function(){};THREE.RepeatWrapping=1000;THREE.ClampToEdgeWrapping=1001;THREE.MirroredRepeatWrapping=1002;THREE.NearestFilter=1003;THREE.NearestMipMapNearestFilter=1004;THREE.NearestMipMapLinearFilter=1005;THREE.LinearFilter=1006;THREE.LinearMipMapNearestFilter=1007;THREE.LinearMipMapLinearFilter=1008;THREE.UnsignedByteType=1009;THREE.ByteType=1010;THREE.ShortType=1011;THREE.UnsignedShortType=1012;THREE.IntType=1013;THREE.UnsignedIntType=1014;THREE.FloatType=1015;THREE.UnsignedShort4444Type=1016;THREE.UnsignedShort5551Type=1017;THREE.UnsignedShort565Type=1018;THREE.AlphaFormat=1019;THREE.RGBFormat=1020;THREE.RGBAFormat=1021;THREE.LuminanceFormat=1022;THREE.LuminanceAlphaFormat=1023;THREE.RGB_S3TC_DXT1_Format=2001;THREE.RGBA_S3TC_DXT1_Format=2002;THREE.RGBA_S3TC_DXT3_Format=2003;THREE.RGBA_S3TC_DXT5_Format=2004;THREE.RGB_PVRTC_4BPPV1_Format=2100;THREE.RGB_PVRTC_2BPPV1_Format=2101;THREE.RGBA_PVRTC_4BPPV1_Format=2102;THREE.RGBA_PVRTC_2BPPV1_Format=2103;THREE.Color=function(color){if(arguments.length===3){return this.setRGB(arguments[0],arguments[1],arguments[2]);}return this.set(color);};THREE.Color.prototype={constructor:THREE.Color,r:1,g:1,b:1,set:function set(value){if(value instanceof THREE.Color){this.copy(value);}else if(typeof value==='number'){this.setHex(value);}else if(typeof value==='string'){this.setStyle(value);}return this;},setHex:function setHex(hex){hex=Math.floor(hex);this.r=(hex>>16&255)/255;this.g=(hex>>8&255)/255;this.b=(hex&255)/255;return this;},setRGB:function setRGB(r,g,b){this.r=r;this.g=g;this.b=b;return this;},setHSL:function setHSL(h,s,l){if(s===0){this.r=this.g=this.b=l;}else{var hue2rgb=function hue2rgb(p,q,t){if(t<0)t+=1;if(t>1)t-=1;if(t<1/6)return p+(q-p)*6*t;if(t<1/2)return q;if(t<2/3)return p+(q-p)*6*(2/3-t);return p;};var p=l<=0.5?l*(1+s):l+s-l*s;var q=2*l-p;this.r=hue2rgb(q,p,h+1/3);this.g=hue2rgb(q,p,h);this.b=hue2rgb(q,p,h-1/3);}return this;},setStyle:function setStyle(style){if(/^rgb\\((\\d+), ?(\\d+), ?(\\d+)\\)$/i.test(style)){var color=/^rgb\\((\\d+), ?(\\d+), ?(\\d+)\\)$/i.exec(style);this.r=Math.min(255,parseInt(color[1],10))/255;this.g=Math.min(255,parseInt(color[2],10))/255;this.b=Math.min(255,parseInt(color[3],10))/255;return this;}if(/^rgb\\((\\d+)\\%, ?(\\d+)\\%, ?(\\d+)\\%\\)$/i.test(style)){var color=/^rgb\\((\\d+)\\%, ?(\\d+)\\%, ?(\\d+)\\%\\)$/i.exec(style);this.r=Math.min(100,parseInt(color[1],10))/100;this.g=Math.min(100,parseInt(color[2],10))/100;this.b=Math.min(100,parseInt(color[3],10))/100;return this;}if(/^\\#([0-9a-f]{6})$/i.test(style)){var color=/^\\#([0-9a-f]{6})$/i.exec(style);this.setHex(parseInt(color[1],16));return this;}if(/^\\#([0-9a-f])([0-9a-f])([0-9a-f])$/i.test(style)){var color=/^\\#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(style);this.setHex(parseInt(color[1]+color[1]+color[2]+color[2]+color[3]+color[3],16));return this;}if(/^(\\w+)$/i.test(style)){this.setHex(THREE.ColorKeywords[style]);return this;}},copy:function copy(color){this.r=color.r;this.g=color.g;this.b=color.b;return this;},copyGammaToLinear:function copyGammaToLinear(color){this.r=color.r*color.r;this.g=color.g*color.g;this.b=color.b*color.b;return this;},copyLinearToGamma:function copyLinearToGamma(color){this.r=Math.sqrt(color.r);this.g=Math.sqrt(color.g);this.b=Math.sqrt(color.b);return this;},convertGammaToLinear:function convertGammaToLinear(){var r=this.r,g=this.g,b=this.b;this.r=r*r;this.g=g*g;this.b=b*b;return this;},convertLinearToGamma:function convertLinearToGamma(){this.r=Math.sqrt(this.r);this.g=Math.sqrt(this.g);this.b=Math.sqrt(this.b);return this;},getHex:function getHex(){return this.r*255<<16^this.g*255<<8^this.b*255<<0;},getHexString:function getHexString(){return('000000'+this.getHex().toString(16)).slice(-6);},getHSL:function getHSL(optionalTarget){var hsl=optionalTarget||{h:0,s:0,l:0};var r=this.r,g=this.g,b=this.b;var max=Math.max(r,g,b);var min=Math.min(r,g,b);var hue,saturation;var lightness=(min+max)/2.0;if(min===max){hue=0;saturation=0;}else{var delta=max-min;saturation=lightness<=0.5?delta/(max+min):delta/(2-max-min);switch(max){case r:hue=(g-b)/delta+(g0){s=0.5/Math.sqrt(trace+1.0);this._w=0.25/s;this._x=(m32-m23)*s;this._y=(m13-m31)*s;this._z=(m21-m12)*s;}else if(m11>m22&&m11>m33){s=2.0*Math.sqrt(1.0+m11-m22-m33);this._w=(m32-m23)/s;this._x=0.25*s;this._y=(m12+m21)/s;this._z=(m13+m31)/s;}else if(m22>m33){s=2.0*Math.sqrt(1.0+m22-m11-m33);this._w=(m13-m31)/s;this._x=(m12+m21)/s;this._y=0.25*s;this._z=(m23+m32)/s;}else{s=2.0*Math.sqrt(1.0+m33-m11-m22);this._w=(m21-m12)/s;this._x=(m13+m31)/s;this._y=(m23+m32)/s;this._z=0.25*s;}this.onChangeCallback();return this;},setFromUnitVectors:function(){var v1,r;var EPS=0.000001;return function(vFrom,vTo){if(v1===undefined)v1=new THREE.Vector3();r=vFrom.dot(vTo)+1;if(rMath.abs(vFrom.z)){v1.set(-vFrom.y,vFrom.x,0);}else{v1.set(0,-vFrom.z,vFrom.y);}}else{v1.crossVectors(vFrom,vTo);}this._x=v1.x;this._y=v1.y;this._z=v1.z;this._w=r;this.normalize();return this;};}(),inverse:function inverse(){this.conjugate().normalize();return this;},conjugate:function conjugate(){this._x*=-1;this._y*=-1;this._z*=-1;this.onChangeCallback();return this;},dot:function dot(v){return this._x*v._x+this._y*v._y+this._z*v._z+this._w*v._w;},lengthSq:function lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w;},length:function length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w);},normalize:function normalize(){var l=this.length();if(l===0){this._x=0;this._y=0;this._z=0;this._w=1;}else{l=1/l;this._x=this._x*l;this._y=this._y*l;this._z=this._z*l;this._w=this._w*l;}this.onChangeCallback();return this;},multiply:function multiply(q,p){if(p!==undefined){console.warn('THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.');return this.multiplyQuaternions(q,p);}return this.multiplyQuaternions(this,q);},multiplyQuaternions:function multiplyQuaternions(a,b){var qax=a._x,qay=a._y,qaz=a._z,qaw=a._w;var qbx=b._x,qby=b._y,qbz=b._z,qbw=b._w;this._x=qax*qbw+qaw*qbx+qay*qbz-qaz*qby;this._y=qay*qbw+qaw*qby+qaz*qbx-qax*qbz;this._z=qaz*qbw+qaw*qbz+qax*qby-qay*qbx;this._w=qaw*qbw-qax*qbx-qay*qby-qaz*qbz;this.onChangeCallback();return this;},multiplyVector3:function multiplyVector3(vector){console.warn('THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.');return vector.applyQuaternion(this);},slerp:function slerp(qb,t){if(t===0)return this;if(t===1)return this.copy(qb);var x=this._x,y=this._y,z=this._z,w=this._w;var cosHalfTheta=w*qb._w+x*qb._x+y*qb._y+z*qb._z;if(cosHalfTheta<0){this._w=-qb._w;this._x=-qb._x;this._y=-qb._y;this._z=-qb._z;cosHalfTheta=-cosHalfTheta;}else{this.copy(qb);}if(cosHalfTheta>=1.0){this._w=w;this._x=x;this._y=y;this._z=z;return this;}var halfTheta=Math.acos(cosHalfTheta);var sinHalfTheta=Math.sqrt(1.0-cosHalfTheta*cosHalfTheta);if(Math.abs(sinHalfTheta)<0.001){this._w=0.5*(w+this._w);this._x=0.5*(x+this._x);this._y=0.5*(y+this._y);this._z=0.5*(z+this._z);return this;}var ratioA=Math.sin((1-t)*halfTheta)/sinHalfTheta,ratioB=Math.sin(t*halfTheta)/sinHalfTheta;this._w=w*ratioA+this._w*ratioB;this._x=x*ratioA+this._x*ratioB;this._y=y*ratioA+this._y*ratioB;this._z=z*ratioA+this._z*ratioB;this.onChangeCallback();return this;},equals:function equals(quaternion){return quaternion._x===this._x&&quaternion._y===this._y&&quaternion._z===this._z&&quaternion._w===this._w;},fromArray:function fromArray(array,offset){if(offset===undefined)offset=0;this._x=array[offset];this._y=array[offset+1];this._z=array[offset+2];this._w=array[offset+3];this.onChangeCallback();return this;},toArray:function toArray(array,offset){if(array===undefined)array=[];if(offset===undefined)offset=0;array[offset]=this._x;array[offset+1]=this._y;array[offset+2]=this._z;array[offset+3]=this._w;return array;},onChange:function onChange(callback){this.onChangeCallback=callback;return this;},onChangeCallback:function onChangeCallback(){},clone:function clone(){return new THREE.Quaternion(this._x,this._y,this._z,this._w);}};THREE.Quaternion.slerp=function(qa,qb,qm,t){return qm.copy(qa).slerp(qb,t);};THREE.Vector2=function(x,y){this.x=x||0;this.y=y||0;};THREE.Vector2.prototype={constructor:THREE.Vector2,set:function set(x,y){this.x=x;this.y=y;return this;},setX:function setX(x){this.x=x;return this;},setY:function setY(y){this.y=y;return this;},setComponent:function setComponent(index,value){switch(index){case 0:this.x=value;break;case 1:this.y=value;break;default:throw new Error('index is out of range: '+index);}},getComponent:function getComponent(index){switch(index){case 0:return this.x;case 1:return this.y;default:throw new Error('index is out of range: '+index);}},copy:function copy(v){this.x=v.x;this.y=v.y;return this;},add:function add(v,w){if(w!==undefined){console.warn('THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.');return this.addVectors(v,w);}this.x+=v.x;this.y+=v.y;return this;},addVectors:function addVectors(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this;},addScalar:function addScalar(s){this.x+=s;this.y+=s;return this;},sub:function sub(v,w){if(w!==undefined){console.warn('THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.');return this.subVectors(v,w);}this.x-=v.x;this.y-=v.y;return this;},subVectors:function subVectors(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this;},multiply:function multiply(v){this.x*=v.x;this.y*=v.y;return this;},multiplyScalar:function multiplyScalar(s){this.x*=s;this.y*=s;return this;},divide:function divide(v){this.x/=v.x;this.y/=v.y;return this;},divideScalar:function divideScalar(scalar){if(scalar!==0){var invScalar=1/scalar;this.x*=invScalar;this.y*=invScalar;}else{this.x=0;this.y=0;}return this;},min:function min(v){if(this.x>v.x){this.x=v.x;}if(this.y>v.y){this.y=v.y;}return this;},max:function max(v){if(this.xmax.x){this.x=max.x;}if(this.ymax.y){this.y=max.y;}return this;},clampScalar:function(){var min,max;return function(minVal,maxVal){if(min===undefined){min=new THREE.Vector2();max=new THREE.Vector2();}min.set(minVal,minVal);max.set(maxVal,maxVal);return this.clamp(min,max);};}(),floor:function floor(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this;},ceil:function ceil(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this;},round:function round(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this;},roundToZero:function roundToZero(){this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x);this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y);return this;},negate:function negate(){this.x=-this.x;this.y=-this.y;return this;},dot:function dot(v){return this.x*v.x+this.y*v.y;},lengthSq:function lengthSq(){return this.x*this.x+this.y*this.y;},length:function length(){return Math.sqrt(this.x*this.x+this.y*this.y);},normalize:function normalize(){return this.divideScalar(this.length());},distanceTo:function distanceTo(v){return Math.sqrt(this.distanceToSquared(v));},distanceToSquared:function distanceToSquared(v){var dx=this.x-v.x,dy=this.y-v.y;return dx*dx+dy*dy;},setLength:function setLength(l){var oldLength=this.length();if(oldLength!==0&&l!==oldLength){this.multiplyScalar(l/oldLength);}return this;},lerp:function lerp(v,alpha){this.x+=(v.x-this.x)*alpha;this.y+=(v.y-this.y)*alpha;return this;},equals:function equals(v){return v.x===this.x&&v.y===this.y;},fromArray:function fromArray(array,offset){if(offset===undefined)offset=0;this.x=array[offset];this.y=array[offset+1];return this;},toArray:function toArray(array,offset){if(array===undefined)array=[];if(offset===undefined)offset=0;array[offset]=this.x;array[offset+1]=this.y;return array;},clone:function clone(){return new THREE.Vector2(this.x,this.y);}};THREE.Vector3=function(x,y,z){this.x=x||0;this.y=y||0;this.z=z||0;};THREE.Vector3.prototype={constructor:THREE.Vector3,set:function set(x,y,z){this.x=x;this.y=y;this.z=z;return this;},setX:function setX(x){this.x=x;return this;},setY:function setY(y){this.y=y;return this;},setZ:function setZ(z){this.z=z;return this;},setComponent:function setComponent(index,value){switch(index){case 0:this.x=value;break;case 1:this.y=value;break;case 2:this.z=value;break;default:throw new Error('index is out of range: '+index);}},getComponent:function getComponent(index){switch(index){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error('index is out of range: '+index);}},copy:function copy(v){this.x=v.x;this.y=v.y;this.z=v.z;return this;},add:function add(v,w){if(w!==undefined){console.warn('THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.');return this.addVectors(v,w);}this.x+=v.x;this.y+=v.y;this.z+=v.z;return this;},addScalar:function addScalar(s){this.x+=s;this.y+=s;this.z+=s;return this;},addVectors:function addVectors(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this;},sub:function sub(v,w){if(w!==undefined){console.warn('THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.');return this.subVectors(v,w);}this.x-=v.x;this.y-=v.y;this.z-=v.z;return this;},subVectors:function subVectors(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;return this;},multiply:function multiply(v,w){if(w!==undefined){console.warn('THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.');return this.multiplyVectors(v,w);}this.x*=v.x;this.y*=v.y;this.z*=v.z;return this;},multiplyScalar:function multiplyScalar(scalar){this.x*=scalar;this.y*=scalar;this.z*=scalar;return this;},multiplyVectors:function multiplyVectors(a,b){this.x=a.x*b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this;},applyEuler:function(){var quaternion;return function(euler){if(euler instanceof THREE.Euler===false){console.error('THREE.Vector3: .applyEuler() now expects a Euler rotation rather than a Vector3 and order.');}if(quaternion===undefined)quaternion=new THREE.Quaternion();this.applyQuaternion(quaternion.setFromEuler(euler));return this;};}(),applyAxisAngle:function(){var quaternion;return function(axis,angle){if(quaternion===undefined)quaternion=new THREE.Quaternion();this.applyQuaternion(quaternion.setFromAxisAngle(axis,angle));return this;};}(),applyMatrix3:function applyMatrix3(m){var x=this.x;var y=this.y;var z=this.z;var e=m.elements;this.x=e[0]*x+e[3]*y+e[6]*z;this.y=e[1]*x+e[4]*y+e[7]*z;this.z=e[2]*x+e[5]*y+e[8]*z;return this;},applyMatrix4:function applyMatrix4(m){var x=this.x,y=this.y,z=this.z;var e=m.elements;this.x=e[0]*x+e[4]*y+e[8]*z+e[12];this.y=e[1]*x+e[5]*y+e[9]*z+e[13];this.z=e[2]*x+e[6]*y+e[10]*z+e[14];return this;},applyProjection:function applyProjection(m){var x=this.x,y=this.y,z=this.z;var e=m.elements;var d=1/(e[3]*x+e[7]*y+e[11]*z+e[15]);this.x=(e[0]*x+e[4]*y+e[8]*z+e[12])*d;this.y=(e[1]*x+e[5]*y+e[9]*z+e[13])*d;this.z=(e[2]*x+e[6]*y+e[10]*z+e[14])*d;return this;},applyQuaternion:function applyQuaternion(q){var x=this.x;var y=this.y;var z=this.z;var qx=q.x;var qy=q.y;var qz=q.z;var qw=q.w;var ix=qw*x+qy*z-qz*y;var iy=qw*y+qz*x-qx*z;var iz=qw*z+qx*y-qy*x;var iw=-qx*x-qy*y-qz*z;this.x=ix*qw+iw*-qx+iy*-qz-iz*-qy;this.y=iy*qw+iw*-qy+iz*-qx-ix*-qz;this.z=iz*qw+iw*-qz+ix*-qy-iy*-qx;return this;},project:function(){var matrix;return function(camera){if(matrix===undefined)matrix=new THREE.Matrix4();matrix.multiplyMatrices(camera.projectionMatrix,matrix.getInverse(camera.matrixWorld));return this.applyProjection(matrix);};}(),unproject:function(){var matrix;return function(camera){if(matrix===undefined)matrix=new THREE.Matrix4();matrix.multiplyMatrices(camera.matrixWorld,matrix.getInverse(camera.projectionMatrix));return this.applyProjection(matrix);};}(),transformDirection:function transformDirection(m){var x=this.x,y=this.y,z=this.z;var e=m.elements;this.x=e[0]*x+e[4]*y+e[8]*z;this.y=e[1]*x+e[5]*y+e[9]*z;this.z=e[2]*x+e[6]*y+e[10]*z;this.normalize();return this;},divide:function divide(v){this.x/=v.x;this.y/=v.y;this.z/=v.z;return this;},divideScalar:function divideScalar(scalar){if(scalar!==0){var invScalar=1/scalar;this.x*=invScalar;this.y*=invScalar;this.z*=invScalar;}else{this.x=0;this.y=0;this.z=0;}return this;},min:function min(v){if(this.x>v.x){this.x=v.x;}if(this.y>v.y){this.y=v.y;}if(this.z>v.z){this.z=v.z;}return this;},max:function max(v){if(this.xmax.x){this.x=max.x;}if(this.ymax.y){this.y=max.y;}if(this.zmax.z){this.z=max.z;}return this;},clampScalar:function(){var min,max;return function(minVal,maxVal){if(min===undefined){min=new THREE.Vector3();max=new THREE.Vector3();}min.set(minVal,minVal,minVal);max.set(maxVal,maxVal,maxVal);return this.clamp(min,max);};}(),floor:function floor(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);return this;},ceil:function ceil(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);return this;},round:function round(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);return this;},roundToZero:function roundToZero(){this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x);this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y);this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z);return this;},negate:function negate(){this.x=-this.x;this.y=-this.y;this.z=-this.z;return this;},dot:function dot(v){return this.x*v.x+this.y*v.y+this.z*v.z;},lengthSq:function lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z;},length:function length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z);},lengthManhattan:function lengthManhattan(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z);},normalize:function normalize(){return this.divideScalar(this.length());},setLength:function setLength(l){var oldLength=this.length();if(oldLength!==0&&l!==oldLength){this.multiplyScalar(l/oldLength);}return this;},lerp:function lerp(v,alpha){this.x+=(v.x-this.x)*alpha;this.y+=(v.y-this.y)*alpha;this.z+=(v.z-this.z)*alpha;return this;},cross:function cross(v,w){if(w!==undefined){console.warn('THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.');return this.crossVectors(v,w);}var x=this.x,y=this.y,z=this.z;this.x=y*v.z-z*v.y;this.y=z*v.x-x*v.z;this.z=x*v.y-y*v.x;return this;},crossVectors:function crossVectors(a,b){var ax=a.x,ay=a.y,az=a.z;var bx=b.x,by=b.y,bz=b.z;this.x=ay*bz-az*by;this.y=az*bx-ax*bz;this.z=ax*by-ay*bx;return this;},projectOnVector:function(){var v1,dot;return function(vector){if(v1===undefined)v1=new THREE.Vector3();v1.copy(vector).normalize();dot=this.dot(v1);return this.copy(v1).multiplyScalar(dot);};}(),projectOnPlane:function(){var v1;return function(planeNormal){if(v1===undefined)v1=new THREE.Vector3();v1.copy(this).projectOnVector(planeNormal);return this.sub(v1);};}(),reflect:function(){var v1;return function(normal){if(v1===undefined)v1=new THREE.Vector3();return this.sub(v1.copy(normal).multiplyScalar(2*this.dot(normal)));};}(),angleTo:function angleTo(v){var theta=this.dot(v)/(this.length()*v.length());return Math.acos(THREE.Math.clamp(theta,-1,1));},distanceTo:function distanceTo(v){return Math.sqrt(this.distanceToSquared(v));},distanceToSquared:function distanceToSquared(v){var dx=this.x-v.x;var dy=this.y-v.y;var dz=this.z-v.z;return dx*dx+dy*dy+dz*dz;},setEulerFromRotationMatrix:function setEulerFromRotationMatrix(m,order){console.error('THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.');},setEulerFromQuaternion:function setEulerFromQuaternion(q,order){console.error('THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.');},getPositionFromMatrix:function getPositionFromMatrix(m){console.warn('THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().');return this.setFromMatrixPosition(m);},getScaleFromMatrix:function getScaleFromMatrix(m){console.warn('THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().');return this.setFromMatrixScale(m);},getColumnFromMatrix:function getColumnFromMatrix(index,matrix){console.warn('THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().');return this.setFromMatrixColumn(index,matrix);},setFromMatrixPosition:function setFromMatrixPosition(m){this.x=m.elements[12];this.y=m.elements[13];this.z=m.elements[14];return this;},setFromMatrixScale:function setFromMatrixScale(m){var sx=this.set(m.elements[0],m.elements[1],m.elements[2]).length();var sy=this.set(m.elements[4],m.elements[5],m.elements[6]).length();var sz=this.set(m.elements[8],m.elements[9],m.elements[10]).length();this.x=sx;this.y=sy;this.z=sz;return this;},setFromMatrixColumn:function setFromMatrixColumn(index,matrix){var offset=index*4;var me=matrix.elements;this.x=me[offset];this.y=me[offset+1];this.z=me[offset+2];return this;},equals:function equals(v){return v.x===this.x&&v.y===this.y&&v.z===this.z;},fromArray:function fromArray(array,offset){if(offset===undefined)offset=0;this.x=array[offset];this.y=array[offset+1];this.z=array[offset+2];return this;},toArray:function toArray(array,offset){if(array===undefined)array=[];if(offset===undefined)offset=0;array[offset]=this.x;array[offset+1]=this.y;array[offset+2]=this.z;return array;},clone:function clone(){return new THREE.Vector3(this.x,this.y,this.z);}};THREE.Vector4=function(x,y,z,w){this.x=x||0;this.y=y||0;this.z=z||0;this.w=w!==undefined?w:1;};THREE.Vector4.prototype={constructor:THREE.Vector4,set:function set(x,y,z,w){this.x=x;this.y=y;this.z=z;this.w=w;return this;},setX:function setX(x){this.x=x;return this;},setY:function setY(y){this.y=y;return this;},setZ:function setZ(z){this.z=z;return this;},setW:function setW(w){this.w=w;return this;},setComponent:function setComponent(index,value){switch(index){case 0:this.x=value;break;case 1:this.y=value;break;case 2:this.z=value;break;case 3:this.w=value;break;default:throw new Error('index is out of range: '+index);}},getComponent:function getComponent(index){switch(index){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error('index is out of range: '+index);}},copy:function copy(v){this.x=v.x;this.y=v.y;this.z=v.z;this.w=v.w!==undefined?v.w:1;return this;},add:function add(v,w){if(w!==undefined){console.warn('THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.');return this.addVectors(v,w);}this.x+=v.x;this.y+=v.y;this.z+=v.z;this.w+=v.w;return this;},addScalar:function addScalar(s){this.x+=s;this.y+=s;this.z+=s;this.w+=s;return this;},addVectors:function addVectors(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this;},sub:function sub(v,w){if(w!==undefined){console.warn('THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.');return this.subVectors(v,w);}this.x-=v.x;this.y-=v.y;this.z-=v.z;this.w-=v.w;return this;},subVectors:function subVectors(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;this.w=a.w-b.w;return this;},multiplyScalar:function multiplyScalar(scalar){this.x*=scalar;this.y*=scalar;this.z*=scalar;this.w*=scalar;return this;},applyMatrix4:function applyMatrix4(m){var x=this.x;var y=this.y;var z=this.z;var w=this.w;var e=m.elements;this.x=e[0]*x+e[4]*y+e[8]*z+e[12]*w;this.y=e[1]*x+e[5]*y+e[9]*z+e[13]*w;this.z=e[2]*x+e[6]*y+e[10]*z+e[14]*w;this.w=e[3]*x+e[7]*y+e[11]*z+e[15]*w;return this;},divideScalar:function divideScalar(scalar){if(scalar!==0){var invScalar=1/scalar;this.x*=invScalar;this.y*=invScalar;this.z*=invScalar;this.w*=invScalar;}else{this.x=0;this.y=0;this.z=0;this.w=1;}return this;},setAxisAngleFromQuaternion:function setAxisAngleFromQuaternion(q){this.w=2*Math.acos(q.w);var s=Math.sqrt(1-q.w*q.w);if(s<0.0001){this.x=1;this.y=0;this.z=0;}else{this.x=q.x/s;this.y=q.y/s;this.z=q.z/s;}return this;},setAxisAngleFromRotationMatrix:function setAxisAngleFromRotationMatrix(m){var angle,x,y,z,epsilon=0.01,epsilon2=0.1,te=m.elements,m11=te[0],m12=te[4],m13=te[8],m21=te[1],m22=te[5],m23=te[9],m31=te[2],m32=te[6],m33=te[10];if(Math.abs(m12-m21)yy&&xx>zz){if(xxzz){if(yyv.x){this.x=v.x;}if(this.y>v.y){this.y=v.y;}if(this.z>v.z){this.z=v.z;}if(this.w>v.w){this.w=v.w;}return this;},max:function max(v){if(this.xmax.x){this.x=max.x;}if(this.ymax.y){this.y=max.y;}if(this.zmax.z){this.z=max.z;}if(this.wmax.w){this.w=max.w;}return this;},clampScalar:function(){var min,max;return function(minVal,maxVal){if(min===undefined){min=new THREE.Vector4();max=new THREE.Vector4();}min.set(minVal,minVal,minVal,minVal);max.set(maxVal,maxVal,maxVal,maxVal);return this.clamp(min,max);};}(),floor:function floor(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);this.w=Math.floor(this.w);return this;},ceil:function ceil(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);this.w=Math.ceil(this.w);return this;},round:function round(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);this.w=Math.round(this.w);return this;},roundToZero:function roundToZero(){this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x);this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y);this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z);this.w=this.w<0?Math.ceil(this.w):Math.floor(this.w);return this;},negate:function negate(){this.x=-this.x;this.y=-this.y;this.z=-this.z;this.w=-this.w;return this;},dot:function dot(v){return this.x*v.x+this.y*v.y+this.z*v.z+this.w*v.w;},lengthSq:function lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w;},length:function length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);},lengthManhattan:function lengthManhattan(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w);},normalize:function normalize(){return this.divideScalar(this.length());},setLength:function setLength(l){var oldLength=this.length();if(oldLength!==0&&l!==oldLength){this.multiplyScalar(l/oldLength);}return this;},lerp:function lerp(v,alpha){this.x+=(v.x-this.x)*alpha;this.y+=(v.y-this.y)*alpha;this.z+=(v.z-this.z)*alpha;this.w+=(v.w-this.w)*alpha;return this;},equals:function equals(v){return v.x===this.x&&v.y===this.y&&v.z===this.z&&v.w===this.w;},fromArray:function fromArray(array,offset){if(offset===undefined)offset=0;this.x=array[offset];this.y=array[offset+1];this.z=array[offset+2];this.w=array[offset+3];return this;},toArray:function toArray(array,offset){if(array===undefined)array=[];if(offset===undefined)offset=0;array[offset]=this.x;array[offset+1]=this.y;array[offset+2]=this.z;array[offset+3]=this.w;return array;},clone:function clone(){return new THREE.Vector4(this.x,this.y,this.z,this.w);}};THREE.Euler=function(x,y,z,order){this._x=x||0;this._y=y||0;this._z=z||0;this._order=order||THREE.Euler.DefaultOrder;};THREE.Euler.RotationOrders=['XYZ','YZX','ZXY','XZY','YXZ','ZYX'];THREE.Euler.DefaultOrder='XYZ';THREE.Euler.prototype={constructor:THREE.Euler,_x:0,_y:0,_z:0,_order:THREE.Euler.DefaultOrder,get x(){return this._x;},set x(value){this._x=value;this.onChangeCallback();},get y(){return this._y;},set y(value){this._y=value;this.onChangeCallback();},get z(){return this._z;},set z(value){this._z=value;this.onChangeCallback();},get order(){return this._order;},set order(value){this._order=value;this.onChangeCallback();},set:function set(x,y,z,order){this._x=x;this._y=y;this._z=z;this._order=order||this._order;this.onChangeCallback();return this;},copy:function copy(euler){this._x=euler._x;this._y=euler._y;this._z=euler._z;this._order=euler._order;this.onChangeCallback();return this;},setFromRotationMatrix:function setFromRotationMatrix(m,order){var clamp=THREE.Math.clamp;var te=m.elements;var m11=te[0],m12=te[4],m13=te[8];var m21=te[1],m22=te[5],m23=te[9];var m31=te[2],m32=te[6],m33=te[10];order=order||this._order;if(order==='XYZ'){this._y=Math.asin(clamp(m13,-1,1));if(Math.abs(m13)<0.99999){this._x=Math.atan2(-m23,m33);this._z=Math.atan2(-m12,m11);}else{this._x=Math.atan2(m32,m22);this._z=0;}}else if(order==='YXZ'){this._x=Math.asin(-clamp(m23,-1,1));if(Math.abs(m23)<0.99999){this._y=Math.atan2(m13,m33);this._z=Math.atan2(m21,m22);}else{this._y=Math.atan2(-m31,m11);this._z=0;}}else if(order==='ZXY'){this._x=Math.asin(clamp(m32,-1,1));if(Math.abs(m32)<0.99999){this._y=Math.atan2(-m31,m33);this._z=Math.atan2(-m12,m22);}else{this._y=0;this._z=Math.atan2(m21,m11);}}else if(order==='ZYX'){this._y=Math.asin(-clamp(m31,-1,1));if(Math.abs(m31)<0.99999){this._x=Math.atan2(m32,m33);this._z=Math.atan2(m21,m11);}else{this._x=0;this._z=Math.atan2(-m12,m22);}}else if(order==='YZX'){this._z=Math.asin(clamp(m21,-1,1));if(Math.abs(m21)<0.99999){this._x=Math.atan2(-m23,m22);this._y=Math.atan2(-m31,m11);}else{this._x=0;this._y=Math.atan2(m13,m33);}}else if(order==='XZY'){this._z=Math.asin(-clamp(m12,-1,1));if(Math.abs(m12)<0.99999){this._x=Math.atan2(m32,m22);this._y=Math.atan2(m13,m11);}else{this._x=Math.atan2(-m23,m33);this._y=0;}}else{console.warn('THREE.Euler: .setFromRotationMatrix() given unsupported order: '+order);}this._order=order;this.onChangeCallback();return this;},setFromQuaternion:function setFromQuaternion(q,order,update){var clamp=THREE.Math.clamp;var sqx=q.x*q.x;var sqy=q.y*q.y;var sqz=q.z*q.z;var sqw=q.w*q.w;order=order||this._order;if(order==='XYZ'){this._x=Math.atan2(2*(q.x*q.w-q.y*q.z),sqw-sqx-sqy+sqz);this._y=Math.asin(clamp(2*(q.x*q.z+q.y*q.w),-1,1));this._z=Math.atan2(2*(q.z*q.w-q.x*q.y),sqw+sqx-sqy-sqz);}else if(order==='YXZ'){this._x=Math.asin(clamp(2*(q.x*q.w-q.y*q.z),-1,1));this._y=Math.atan2(2*(q.x*q.z+q.y*q.w),sqw-sqx-sqy+sqz);this._z=Math.atan2(2*(q.x*q.y+q.z*q.w),sqw-sqx+sqy-sqz);}else if(order==='ZXY'){this._x=Math.asin(clamp(2*(q.x*q.w+q.y*q.z),-1,1));this._y=Math.atan2(2*(q.y*q.w-q.z*q.x),sqw-sqx-sqy+sqz);this._z=Math.atan2(2*(q.z*q.w-q.x*q.y),sqw-sqx+sqy-sqz);}else if(order==='ZYX'){this._x=Math.atan2(2*(q.x*q.w+q.z*q.y),sqw-sqx-sqy+sqz);this._y=Math.asin(clamp(2*(q.y*q.w-q.x*q.z),-1,1));this._z=Math.atan2(2*(q.x*q.y+q.z*q.w),sqw+sqx-sqy-sqz);}else if(order==='YZX'){this._x=Math.atan2(2*(q.x*q.w-q.z*q.y),sqw-sqx+sqy-sqz);this._y=Math.atan2(2*(q.y*q.w-q.x*q.z),sqw+sqx-sqy-sqz);this._z=Math.asin(clamp(2*(q.x*q.y+q.z*q.w),-1,1));}else if(order==='XZY'){this._x=Math.atan2(2*(q.x*q.w+q.y*q.z),sqw-sqx+sqy-sqz);this._y=Math.atan2(2*(q.x*q.z+q.y*q.w),sqw+sqx-sqy-sqz);this._z=Math.asin(clamp(2*(q.z*q.w-q.x*q.y),-1,1));}else{console.warn('THREE.Euler: .setFromQuaternion() given unsupported order: '+order);}this._order=order;if(update!==false)this.onChangeCallback();return this;},reorder:function(){var q=new THREE.Quaternion();return function(newOrder){q.setFromEuler(this);this.setFromQuaternion(q,newOrder);};}(),equals:function equals(euler){return euler._x===this._x&&euler._y===this._y&&euler._z===this._z&&euler._order===this._order;},fromArray:function fromArray(array){this._x=array[0];this._y=array[1];this._z=array[2];if(array[3]!==undefined)this._order=array[3];this.onChangeCallback();return this;},toArray:function toArray(){return[this._x,this._y,this._z,this._order];},onChange:function onChange(callback){this.onChangeCallback=callback;return this;},onChangeCallback:function onChangeCallback(){},clone:function clone(){return new THREE.Euler(this._x,this._y,this._z,this._order);}};THREE.Line3=function(start,end){this.start=start!==undefined?start:new THREE.Vector3();this.end=end!==undefined?end:new THREE.Vector3();};THREE.Line3.prototype={constructor:THREE.Line3,set:function set(start,end){this.start.copy(start);this.end.copy(end);return this;},copy:function copy(line){this.start.copy(line.start);this.end.copy(line.end);return this;},center:function center(optionalTarget){var result=optionalTarget||new THREE.Vector3();return result.addVectors(this.start,this.end).multiplyScalar(0.5);},delta:function delta(optionalTarget){var result=optionalTarget||new THREE.Vector3();return result.subVectors(this.end,this.start);},distanceSq:function distanceSq(){return this.start.distanceToSquared(this.end);},distance:function distance(){return this.start.distanceTo(this.end);},at:function at(t,optionalTarget){var result=optionalTarget||new THREE.Vector3();return this.delta(result).multiplyScalar(t).add(this.start);},closestPointToPointParameter:function(){var startP=new THREE.Vector3();var startEnd=new THREE.Vector3();return function(point,clampToLine){startP.subVectors(point,this.start);startEnd.subVectors(this.end,this.start);var startEnd2=startEnd.dot(startEnd);var startEnd_startP=startEnd.dot(startP);var t=startEnd_startP/startEnd2;if(clampToLine){t=THREE.Math.clamp(t,0,1);}return t;};}(),closestPointToPoint:function closestPointToPoint(point,clampToLine,optionalTarget){var t=this.closestPointToPointParameter(point,clampToLine);var result=optionalTarget||new THREE.Vector3();return this.delta(result).multiplyScalar(t).add(this.start);},applyMatrix4:function applyMatrix4(matrix){this.start.applyMatrix4(matrix);this.end.applyMatrix4(matrix);return this;},equals:function equals(line){return line.start.equals(this.start)&&line.end.equals(this.end);},clone:function clone(){return new THREE.Line3().copy(this);}};THREE.Box2=function(min,max){this.min=min!==undefined?min:new THREE.Vector2(Infinity,Infinity);this.max=max!==undefined?max:new THREE.Vector2(-Infinity,-Infinity);};THREE.Box2.prototype={constructor:THREE.Box2,set:function set(min,max){this.min.copy(min);this.max.copy(max);return this;},setFromPoints:function setFromPoints(points){this.makeEmpty();for(var i=0,il=points.length;ithis.max.x||point.ythis.max.y){return false;}return true;},containsBox:function containsBox(box){if(this.min.x<=box.min.x&&box.max.x<=this.max.x&&this.min.y<=box.min.y&&box.max.y<=this.max.y){return true;}return false;},getParameter:function getParameter(point,optionalTarget){var result=optionalTarget||new THREE.Vector2();return result.set((point.x-this.min.x)/(this.max.x-this.min.x),(point.y-this.min.y)/(this.max.y-this.min.y));},isIntersectionBox:function isIntersectionBox(box){if(box.max.xthis.max.x||box.max.ythis.max.y){return false;}return true;},clampPoint:function clampPoint(point,optionalTarget){var result=optionalTarget||new THREE.Vector2();return result.copy(point).clamp(this.min,this.max);},distanceToPoint:function(){var v1=new THREE.Vector2();return function(point){var clampedPoint=v1.copy(point).clamp(this.min,this.max);return clampedPoint.sub(point).length();};}(),intersect:function intersect(box){this.min.max(box.min);this.max.min(box.max);return this;},union:function union(box){this.min.min(box.min);this.max.max(box.max);return this;},translate:function translate(offset){this.min.add(offset);this.max.add(offset);return this;},equals:function equals(box){return box.min.equals(this.min)&&box.max.equals(this.max);},clone:function clone(){return new THREE.Box2().copy(this);}};THREE.Box3=function(min,max){this.min=min!==undefined?min:new THREE.Vector3(Infinity,Infinity,Infinity);this.max=max!==undefined?max:new THREE.Vector3(-Infinity,-Infinity,-Infinity);};THREE.Box3.prototype={constructor:THREE.Box3,set:function set(min,max){this.min.copy(min);this.max.copy(max);return this;},setFromPoints:function setFromPoints(points){this.makeEmpty();for(var i=0,il=points.length;ithis.max.x||point.ythis.max.y||point.zthis.max.z){return false;}return true;},containsBox:function containsBox(box){if(this.min.x<=box.min.x&&box.max.x<=this.max.x&&this.min.y<=box.min.y&&box.max.y<=this.max.y&&this.min.z<=box.min.z&&box.max.z<=this.max.z){return true;}return false;},getParameter:function getParameter(point,optionalTarget){var result=optionalTarget||new THREE.Vector3();return result.set((point.x-this.min.x)/(this.max.x-this.min.x),(point.y-this.min.y)/(this.max.y-this.min.y),(point.z-this.min.z)/(this.max.z-this.min.z));},isIntersectionBox:function isIntersectionBox(box){if(box.max.xthis.max.x||box.max.ythis.max.y||box.max.zthis.max.z){return false;}return true;},clampPoint:function clampPoint(point,optionalTarget){var result=optionalTarget||new THREE.Vector3();return result.copy(point).clamp(this.min,this.max);},distanceToPoint:function(){var v1=new THREE.Vector3();return function(point){var clampedPoint=v1.copy(point).clamp(this.min,this.max);return clampedPoint.sub(point).length();};}(),getBoundingSphere:function(){var v1=new THREE.Vector3();return function(optionalTarget){var result=optionalTarget||new THREE.Sphere();result.center=this.center();result.radius=this.size(v1).length()*0.5;return result;};}(),intersect:function intersect(box){this.min.max(box.min);this.max.min(box.max);return this;},union:function union(box){this.min.min(box.min);this.max.max(box.max);return this;},applyMatrix4:function(){var points=[new THREE.Vector3(),new THREE.Vector3(),new THREE.Vector3(),new THREE.Vector3(),new THREE.Vector3(),new THREE.Vector3(),new THREE.Vector3(),new THREE.Vector3()];return function(matrix){points[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(matrix);points[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(matrix);points[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(matrix);points[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(matrix);points[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(matrix);points[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(matrix);points[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(matrix);points[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(matrix);this.makeEmpty();this.setFromPoints(points);return this;};}(),translate:function translate(offset){this.min.add(offset);this.max.add(offset);return this;},equals:function equals(box){return box.min.equals(this.min)&&box.max.equals(this.max);},clone:function clone(){return new THREE.Box3().copy(this);}};THREE.Matrix3=function(){this.elements=new Float32Array([1,0,0,0,1,0,0,0,1]);if(arguments.length>0){console.error('THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.');}};THREE.Matrix3.prototype={constructor:THREE.Matrix3,set:function set(n11,n12,n13,n21,n22,n23,n31,n32,n33){var te=this.elements;te[0]=n11;te[3]=n12;te[6]=n13;te[1]=n21;te[4]=n22;te[7]=n23;te[2]=n31;te[5]=n32;te[8]=n33;return this;},identity:function identity(){this.set(1,0,0,0,1,0,0,0,1);return this;},copy:function copy(m){var me=m.elements;this.set(me[0],me[3],me[6],me[1],me[4],me[7],me[2],me[5],me[8]);return this;},multiplyVector3:function multiplyVector3(vector){console.warn('THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.');return vector.applyMatrix3(this);},multiplyVector3Array:function multiplyVector3Array(a){console.warn('THREE.Matrix3: .multiplyVector3Array() has been renamed. Use matrix.applyToVector3Array( array ) instead.');return this.applyToVector3Array(a);},applyToVector3Array:function(){var v1=new THREE.Vector3();return function(array,offset,length){if(offset===undefined)offset=0;if(length===undefined)length=array.length;for(var i=0,j=offset,il;i0){console.error('THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.');}};THREE.Matrix4.prototype={constructor:THREE.Matrix4,set:function set(n11,n12,n13,n14,n21,n22,n23,n24,n31,n32,n33,n34,n41,n42,n43,n44){var te=this.elements;te[0]=n11;te[4]=n12;te[8]=n13;te[12]=n14;te[1]=n21;te[5]=n22;te[9]=n23;te[13]=n24;te[2]=n31;te[6]=n32;te[10]=n33;te[14]=n34;te[3]=n41;te[7]=n42;te[11]=n43;te[15]=n44;return this;},identity:function identity(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this;},copy:function copy(m){this.elements.set(m.elements);return this;},extractPosition:function extractPosition(m){console.warn('THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().');return this.copyPosition(m);},copyPosition:function copyPosition(m){var te=this.elements;var me=m.elements;te[12]=me[12];te[13]=me[13];te[14]=me[14];return this;},extractRotation:function(){var v1=new THREE.Vector3();return function(m){var te=this.elements;var me=m.elements;var scaleX=1/v1.set(me[0],me[1],me[2]).length();var scaleY=1/v1.set(me[4],me[5],me[6]).length();var scaleZ=1/v1.set(me[8],me[9],me[10]).length();te[0]=me[0]*scaleX;te[1]=me[1]*scaleX;te[2]=me[2]*scaleX;te[4]=me[4]*scaleY;te[5]=me[5]*scaleY;te[6]=me[6]*scaleY;te[8]=me[8]*scaleZ;te[9]=me[9]*scaleZ;te[10]=me[10]*scaleZ;return this;};}(),makeRotationFromEuler:function makeRotationFromEuler(euler){if(euler instanceof THREE.Euler===false){console.error('THREE.Matrix: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.');}var te=this.elements;var x=euler.x,y=euler.y,z=euler.z;var a=Math.cos(x),b=Math.sin(x);var c=Math.cos(y),d=Math.sin(y);var e=Math.cos(z),f=Math.sin(z);if(euler.order==='XYZ'){var ae=a*e,af=a*f,be=b*e,bf=b*f;te[0]=c*e;te[4]=-c*f;te[8]=d;te[1]=af+be*d;te[5]=ae-bf*d;te[9]=-b*c;te[2]=bf-ae*d;te[6]=be+af*d;te[10]=a*c;}else if(euler.order==='YXZ'){var ce=c*e,cf=c*f,de=d*e,df=d*f;te[0]=ce+df*b;te[4]=de*b-cf;te[8]=a*d;te[1]=a*f;te[5]=a*e;te[9]=-b;te[2]=cf*b-de;te[6]=df+ce*b;te[10]=a*c;}else if(euler.order==='ZXY'){var ce=c*e,cf=c*f,de=d*e,df=d*f;te[0]=ce-df*b;te[4]=-a*f;te[8]=de+cf*b;te[1]=cf+de*b;te[5]=a*e;te[9]=df-ce*b;te[2]=-a*d;te[6]=b;te[10]=a*c;}else if(euler.order==='ZYX'){var ae=a*e,af=a*f,be=b*e,bf=b*f;te[0]=c*e;te[4]=be*d-af;te[8]=ae*d+bf;te[1]=c*f;te[5]=bf*d+ae;te[9]=af*d-be;te[2]=-d;te[6]=b*c;te[10]=a*c;}else if(euler.order==='YZX'){var ac=a*c,ad=a*d,bc=b*c,bd=b*d;te[0]=c*e;te[4]=bd-ac*f;te[8]=bc*f+ad;te[1]=f;te[5]=a*e;te[9]=-b*e;te[2]=-d*e;te[6]=ad*f+bc;te[10]=ac-bd*f;}else if(euler.order==='XZY'){var ac=a*c,ad=a*d,bc=b*c,bd=b*d;te[0]=c*e;te[4]=-f;te[8]=d*e;te[1]=ac*f+bd;te[5]=a*e;te[9]=ad*f-bc;te[2]=bc*f-ad;te[6]=b*e;te[10]=bd*f+ac;}te[3]=0;te[7]=0;te[11]=0;te[12]=0;te[13]=0;te[14]=0;te[15]=1;return this;},setRotationFromQuaternion:function setRotationFromQuaternion(q){console.warn('THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().');return this.makeRotationFromQuaternion(q);},makeRotationFromQuaternion:function makeRotationFromQuaternion(q){var te=this.elements;var x=q.x,y=q.y,z=q.z,w=q.w;var x2=x+x,y2=y+y,z2=z+z;var xx=x*x2,xy=x*y2,xz=x*z2;var yy=y*y2,yz=y*z2,zz=z*z2;var wx=w*x2,wy=w*y2,wz=w*z2;te[0]=1-(yy+zz);te[4]=xy-wz;te[8]=xz+wy;te[1]=xy+wz;te[5]=1-(xx+zz);te[9]=yz-wx;te[2]=xz-wy;te[6]=yz+wx;te[10]=1-(xx+yy);te[3]=0;te[7]=0;te[11]=0;te[12]=0;te[13]=0;te[14]=0;te[15]=1;return this;},lookAt:function(){var x=new THREE.Vector3();var y=new THREE.Vector3();var z=new THREE.Vector3();return function(eye,target,up){var te=this.elements;z.subVectors(eye,target).normalize();if(z.length()===0){z.z=1;}x.crossVectors(up,z).normalize();if(x.length()===0){z.x+=0.0001;x.crossVectors(up,z).normalize();}y.crossVectors(z,x);te[0]=x.x;te[4]=y.x;te[8]=z.x;te[1]=x.y;te[5]=y.y;te[9]=z.y;te[2]=x.z;te[6]=y.z;te[10]=z.z;return this;};}(),multiply:function multiply(m,n){if(n!==undefined){console.warn('THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.');return this.multiplyMatrices(m,n);}return this.multiplyMatrices(this,m);},multiplyMatrices:function multiplyMatrices(a,b){var ae=a.elements;var be=b.elements;var te=this.elements;var a11=ae[0],a12=ae[4],a13=ae[8],a14=ae[12];var a21=ae[1],a22=ae[5],a23=ae[9],a24=ae[13];var a31=ae[2],a32=ae[6],a33=ae[10],a34=ae[14];var a41=ae[3],a42=ae[7],a43=ae[11],a44=ae[15];var b11=be[0],b12=be[4],b13=be[8],b14=be[12];var b21=be[1],b22=be[5],b23=be[9],b24=be[13];var b31=be[2],b32=be[6],b33=be[10],b34=be[14];var b41=be[3],b42=be[7],b43=be[11],b44=be[15];te[0]=a11*b11+a12*b21+a13*b31+a14*b41;te[4]=a11*b12+a12*b22+a13*b32+a14*b42;te[8]=a11*b13+a12*b23+a13*b33+a14*b43;te[12]=a11*b14+a12*b24+a13*b34+a14*b44;te[1]=a21*b11+a22*b21+a23*b31+a24*b41;te[5]=a21*b12+a22*b22+a23*b32+a24*b42;te[9]=a21*b13+a22*b23+a23*b33+a24*b43;te[13]=a21*b14+a22*b24+a23*b34+a24*b44;te[2]=a31*b11+a32*b21+a33*b31+a34*b41;te[6]=a31*b12+a32*b22+a33*b32+a34*b42;te[10]=a31*b13+a32*b23+a33*b33+a34*b43;te[14]=a31*b14+a32*b24+a33*b34+a34*b44;te[3]=a41*b11+a42*b21+a43*b31+a44*b41;te[7]=a41*b12+a42*b22+a43*b32+a44*b42;te[11]=a41*b13+a42*b23+a43*b33+a44*b43;te[15]=a41*b14+a42*b24+a43*b34+a44*b44;return this;},multiplyToArray:function multiplyToArray(a,b,r){var te=this.elements;this.multiplyMatrices(a,b);r[0]=te[0];r[1]=te[1];r[2]=te[2];r[3]=te[3];r[4]=te[4];r[5]=te[5];r[6]=te[6];r[7]=te[7];r[8]=te[8];r[9]=te[9];r[10]=te[10];r[11]=te[11];r[12]=te[12];r[13]=te[13];r[14]=te[14];r[15]=te[15];return this;},multiplyScalar:function multiplyScalar(s){var te=this.elements;te[0]*=s;te[4]*=s;te[8]*=s;te[12]*=s;te[1]*=s;te[5]*=s;te[9]*=s;te[13]*=s;te[2]*=s;te[6]*=s;te[10]*=s;te[14]*=s;te[3]*=s;te[7]*=s;te[11]*=s;te[15]*=s;return this;},multiplyVector3:function multiplyVector3(vector){console.warn('THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) or vector.applyProjection( matrix ) instead.');return vector.applyProjection(this);},multiplyVector4:function multiplyVector4(vector){console.warn('THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.');return vector.applyMatrix4(this);},multiplyVector3Array:function multiplyVector3Array(a){console.warn('THREE.Matrix4: .multiplyVector3Array() has been renamed. Use matrix.applyToVector3Array( array ) instead.');return this.applyToVector3Array(a);},applyToVector3Array:function(){var v1=new THREE.Vector3();return function(array,offset,length){if(offset===undefined)offset=0;if(length===undefined)length=array.length;for(var i=0,j=offset,il;i=0){s0=a01*b1-b0;s1=a01*b0-b1;extDet=segExtent*det;if(s0>=0){if(s1>=-extDet){if(s1<=extDet){var invDet=1/det;s0*=invDet;s1*=invDet;sqrDist=s0*(s0+a01*s1+2*b0)+s1*(a01*s0+s1+2*b1)+c;}else{s1=segExtent;s0=Math.max(0,-(a01*s1+b0));sqrDist=-s0*s0+s1*(s1+2*b1)+c;}}else{s1=-segExtent;s0=Math.max(0,-(a01*s1+b0));sqrDist=-s0*s0+s1*(s1+2*b1)+c;}}else{if(s1<=-extDet){s0=Math.max(0,-(-a01*segExtent+b0));s1=s0>0?-segExtent:Math.min(Math.max(-segExtent,-b1),segExtent);sqrDist=-s0*s0+s1*(s1+2*b1)+c;}else if(s1<=extDet){s0=0;s1=Math.min(Math.max(-segExtent,-b1),segExtent);sqrDist=s1*(s1+2*b1)+c;}else{s0=Math.max(0,-(a01*segExtent+b0));s1=s0>0?segExtent:Math.min(Math.max(-segExtent,-b1),segExtent);sqrDist=-s0*s0+s1*(s1+2*b1)+c;}}}else{s1=a01>0?-segExtent:segExtent;s0=Math.max(0,-(a01*s1+b0));sqrDist=-s0*s0+s1*(s1+2*b1)+c;}if(optionalPointOnRay){optionalPointOnRay.copy(this.direction.clone().multiplyScalar(s0).add(this.origin));}if(optionalPointOnSegment){optionalPointOnSegment.copy(segDir.clone().multiplyScalar(s1).add(segCenter));}return sqrDist;},isIntersectionSphere:function isIntersectionSphere(sphere){return this.distanceToPoint(sphere.center)<=sphere.radius;},intersectSphere:function(){var v1=new THREE.Vector3();return function(sphere,optionalTarget){v1.subVectors(sphere.center,this.origin);var tca=v1.dot(this.direction);var d2=v1.dot(v1)-tca*tca;var radius2=sphere.radius*sphere.radius;if(d2>radius2)return null;var thc=Math.sqrt(radius2-d2);var t0=tca-thc;var t1=tca+thc;if(t0<0&&t1<0)return null;if(t0<0)return this.at(t1,optionalTarget);return this.at(t0,optionalTarget);};}(),isIntersectionPlane:function isIntersectionPlane(plane){var distToPoint=plane.distanceToPoint(this.origin);if(distToPoint===0){return true;}var denominator=plane.normal.dot(this.direction);if(denominator*distToPoint<0){return true;}return false;},distanceToPlane:function distanceToPlane(plane){var denominator=plane.normal.dot(this.direction);if(denominator==0){if(plane.distanceToPoint(this.origin)==0){return 0;}return null;}var t=-(this.origin.dot(plane.normal)+plane.constant)/denominator;return t>=0?t:null;},intersectPlane:function intersectPlane(plane,optionalTarget){var t=this.distanceToPlane(plane);if(t===null){return null;}return this.at(t,optionalTarget);},isIntersectionBox:function(){var v=new THREE.Vector3();return function(box){return this.intersectBox(box,v)!==null;};}(),intersectBox:function intersectBox(box,optionalTarget){var tmin,tmax,tymin,tymax,tzmin,tzmax;var invdirx=1/this.direction.x,invdiry=1/this.direction.y,invdirz=1/this.direction.z;var origin=this.origin;if(invdirx>=0){tmin=(box.min.x-origin.x)*invdirx;tmax=(box.max.x-origin.x)*invdirx;}else{tmin=(box.max.x-origin.x)*invdirx;tmax=(box.min.x-origin.x)*invdirx;}if(invdiry>=0){tymin=(box.min.y-origin.y)*invdiry;tymax=(box.max.y-origin.y)*invdiry;}else{tymin=(box.max.y-origin.y)*invdiry;tymax=(box.min.y-origin.y)*invdiry;}if(tmin>tymax||tymin>tmax)return null;if(tymin>tmin||tmin!==tmin)tmin=tymin;if(tymax=0){tzmin=(box.min.z-origin.z)*invdirz;tzmax=(box.max.z-origin.z)*invdirz;}else{tzmin=(box.max.z-origin.z)*invdirz;tzmax=(box.min.z-origin.z)*invdirz;}if(tmin>tzmax||tzmin>tmax)return null;if(tzmin>tmin||tmin!==tmin)tmin=tzmin;if(tzmax=0?tmin:tmax,optionalTarget);},intersectTriangle:function(){var diff=new THREE.Vector3();var edge1=new THREE.Vector3();var edge2=new THREE.Vector3();var normal=new THREE.Vector3();return function(a,b,c,backfaceCulling,optionalTarget){edge1.subVectors(b,a);edge2.subVectors(c,a);normal.crossVectors(edge1,edge2);var DdN=this.direction.dot(normal);var sign;if(DdN>0){if(backfaceCulling)return null;sign=1;}else if(DdN<0){sign=-1;DdN=-DdN;}else{return null;}diff.subVectors(this.origin,a);var DdQxE2=sign*this.direction.dot(edge2.crossVectors(diff,edge2));if(DdQxE2<0){return null;}var DdE1xQ=sign*this.direction.dot(edge1.cross(diff));if(DdE1xQ<0){return null;}if(DdQxE2+DdE1xQ>DdN){return null;}var QdN=-sign*diff.dot(normal);if(QdN<0){return null;}return this.at(QdN/DdN,optionalTarget);};}(),applyMatrix4:function applyMatrix4(matrix4){this.direction.add(this.origin).applyMatrix4(matrix4);this.origin.applyMatrix4(matrix4);this.direction.sub(this.origin);this.direction.normalize();return this;},equals:function equals(ray){return ray.origin.equals(this.origin)&&ray.direction.equals(this.direction);},clone:function clone(){return new THREE.Ray().copy(this);}};THREE.Sphere=function(center,radius){this.center=center!==undefined?center:new THREE.Vector3();this.radius=radius!==undefined?radius:0;};THREE.Sphere.prototype={constructor:THREE.Sphere,set:function set(center,radius){this.center.copy(center);this.radius=radius;return this;},setFromPoints:function(){var box=new THREE.Box3();return function(points,optionalCenter){var center=this.center;if(optionalCenter!==undefined){center.copy(optionalCenter);}else{box.setFromPoints(points).center(center);}var maxRadiusSq=0;for(var i=0,il=points.length;ithis.radius*this.radius){result.sub(this.center).normalize();result.multiplyScalar(this.radius).add(this.center);}return result;},getBoundingBox:function getBoundingBox(optionalTarget){var box=optionalTarget||new THREE.Box3();box.set(this.center,this.center);box.expandByScalar(this.radius);return box;},applyMatrix4:function applyMatrix4(matrix){this.center.applyMatrix4(matrix);this.radius=this.radius*matrix.getMaxScaleOnAxis();return this;},translate:function translate(offset){this.center.add(offset);return this;},equals:function equals(sphere){return sphere.center.equals(this.center)&&sphere.radius===this.radius;},clone:function clone(){return new THREE.Sphere().copy(this);}};THREE.Frustum=function(p0,p1,p2,p3,p4,p5){this.planes=[p0!==undefined?p0:new THREE.Plane(),p1!==undefined?p1:new THREE.Plane(),p2!==undefined?p2:new THREE.Plane(),p3!==undefined?p3:new THREE.Plane(),p4!==undefined?p4:new THREE.Plane(),p5!==undefined?p5:new THREE.Plane()];};THREE.Frustum.prototype={constructor:THREE.Frustum,set:function set(p0,p1,p2,p3,p4,p5){var planes=this.planes;planes[0].copy(p0);planes[1].copy(p1);planes[2].copy(p2);planes[3].copy(p3);planes[4].copy(p4);planes[5].copy(p5);return this;},copy:function copy(frustum){var planes=this.planes;for(var i=0;i<6;i++){planes[i].copy(frustum.planes[i]);}return this;},setFromMatrix:function setFromMatrix(m){var planes=this.planes;var me=m.elements;var me0=me[0],me1=me[1],me2=me[2],me3=me[3];var me4=me[4],me5=me[5],me6=me[6],me7=me[7];var me8=me[8],me9=me[9],me10=me[10],me11=me[11];var me12=me[12],me13=me[13],me14=me[14],me15=me[15];planes[0].setComponents(me3-me0,me7-me4,me11-me8,me15-me12).normalize();planes[1].setComponents(me3+me0,me7+me4,me11+me8,me15+me12).normalize();planes[2].setComponents(me3+me1,me7+me5,me11+me9,me15+me13).normalize();planes[3].setComponents(me3-me1,me7-me5,me11-me9,me15-me13).normalize();planes[4].setComponents(me3-me2,me7-me6,me11-me10,me15-me14).normalize();planes[5].setComponents(me3+me2,me7+me6,me11+me10,me15+me14).normalize();return this;},intersectsObject:function(){var sphere=new THREE.Sphere();return function(object){var geometry=object.geometry;if(geometry.boundingSphere===null)geometry.computeBoundingSphere();sphere.copy(geometry.boundingSphere);sphere.applyMatrix4(object.matrixWorld);return this.intersectsSphere(sphere);};}(),intersectsSphere:function intersectsSphere(sphere){var planes=this.planes;var center=sphere.center;var negRadius=-sphere.radius;for(var i=0;i<6;i++){var distance=planes[i].distanceToPoint(center);if(distance0?box.min.x:box.max.x;p2.x=plane.normal.x>0?box.max.x:box.min.x;p1.y=plane.normal.y>0?box.min.y:box.max.y;p2.y=plane.normal.y>0?box.max.y:box.min.y;p1.z=plane.normal.z>0?box.min.z:box.max.z;p2.z=plane.normal.z>0?box.max.z:box.min.z;var d1=plane.distanceToPoint(p1);var d2=plane.distanceToPoint(p2);if(d1<0&&d2<0){return false;}}return true;};}(),containsPoint:function containsPoint(point){var planes=this.planes;for(var i=0;i<6;i++){if(planes[i].distanceToPoint(point)<0){return false;}}return true;},clone:function clone(){return new THREE.Frustum().copy(this);}};THREE.Plane=function(normal,constant){this.normal=normal!==undefined?normal:new THREE.Vector3(1,0,0);this.constant=constant!==undefined?constant:0;};THREE.Plane.prototype={constructor:THREE.Plane,set:function set(normal,constant){this.normal.copy(normal);this.constant=constant;return this;},setComponents:function setComponents(x,y,z,w){this.normal.set(x,y,z);this.constant=w;return this;},setFromNormalAndCoplanarPoint:function setFromNormalAndCoplanarPoint(normal,point){this.normal.copy(normal);this.constant=-point.dot(this.normal);return this;},setFromCoplanarPoints:function(){var v1=new THREE.Vector3();var v2=new THREE.Vector3();return function(a,b,c){var normal=v1.subVectors(c,b).cross(v2.subVectors(a,b)).normalize();this.setFromNormalAndCoplanarPoint(normal,a);return this;};}(),copy:function copy(plane){this.normal.copy(plane.normal);this.constant=plane.constant;return this;},normalize:function normalize(){var inverseNormalLength=1.0/this.normal.length();this.normal.multiplyScalar(inverseNormalLength);this.constant*=inverseNormalLength;return this;},negate:function negate(){this.constant*=-1;this.normal.negate();return this;},distanceToPoint:function distanceToPoint(point){return this.normal.dot(point)+this.constant;},distanceToSphere:function distanceToSphere(sphere){return this.distanceToPoint(sphere.center)-sphere.radius;},projectPoint:function projectPoint(point,optionalTarget){return this.orthoPoint(point,optionalTarget).sub(point).negate();},orthoPoint:function orthoPoint(point,optionalTarget){var perpendicularMagnitude=this.distanceToPoint(point);var result=optionalTarget||new THREE.Vector3();return result.copy(this.normal).multiplyScalar(perpendicularMagnitude);},isIntersectionLine:function isIntersectionLine(line){var startSign=this.distanceToPoint(line.start);var endSign=this.distanceToPoint(line.end);return startSign<0&&endSign>0||endSign<0&&startSign>0;},intersectLine:function(){var v1=new THREE.Vector3();return function(line,optionalTarget){var result=optionalTarget||new THREE.Vector3();var direction=line.delta(v1);var denominator=this.normal.dot(direction);if(denominator==0){if(this.distanceToPoint(line.start)==0){return result.copy(line.start);}return undefined;}var t=-(line.start.dot(this.normal)+this.constant)/denominator;if(t<0||t>1){return undefined;}return result.copy(direction).multiplyScalar(t).add(line.start);};}(),coplanarPoint:function coplanarPoint(optionalTarget){var result=optionalTarget||new THREE.Vector3();return result.copy(this.normal).multiplyScalar(-this.constant);},applyMatrix4:function(){var v1=new THREE.Vector3();var v2=new THREE.Vector3();var m1=new THREE.Matrix3();return function(matrix,optionalNormalMatrix){var normalMatrix=optionalNormalMatrix||m1.getNormalMatrix(matrix);var newNormal=v1.copy(this.normal).applyMatrix3(normalMatrix);var newCoplanarPoint=this.coplanarPoint(v2);newCoplanarPoint.applyMatrix4(matrix);this.setFromNormalAndCoplanarPoint(newNormal,newCoplanarPoint);return this;};}(),translate:function translate(offset){this.constant=this.constant-offset.dot(this.normal);return this;},equals:function equals(plane){return plane.normal.equals(this.normal)&&plane.constant==this.constant;},clone:function clone(){return new THREE.Plane().copy(this);}};THREE.Math={generateUUID:function(){var chars='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');var uuid=new Array(36);var rnd=0,r;return function(){for(var i=0;i<36;i++){if(i==8||i==13||i==18||i==23){uuid[i]='-';}else if(i==14){uuid[i]='4';}else{if(rnd<=0x02)rnd=0x2000000+Math.random()*0x1000000|0;r=rnd&0xf;rnd=rnd>>4;uuid[i]=chars[i==19?r&0x3|0x8:r];}}return uuid.join('');};}(),clamp:function clamp(x,a,b){return xb?b:x;},clampBottom:function clampBottom(x,a){return x=max)return 1;x=(x-min)/(max-min);return x*x*(3-2*x);},smootherstep:function smootherstep(x,min,max){if(x<=min)return 0;if(x>=max)return 1;x=(x-min)/(max-min);return x*x*x*(x*(x*6-15)+10);},random16:function random16(){return(65280*Math.random()+255*Math.random())/65535;},randInt:function randInt(low,high){return low+Math.floor(Math.random()*(high-low+1));},randFloat:function randFloat(low,high){return low+Math.random()*(high-low);},randFloatSpread:function randFloatSpread(range){return range*(0.5-Math.random());},degToRad:function(){var degreeToRadiansFactor=Math.PI/180;return function(degrees){return degrees*degreeToRadiansFactor;};}(),radToDeg:function(){var radianToDegreesFactor=180/Math.PI;return function(radians){return radians*radianToDegreesFactor;};}(),isPowerOfTwo:function isPowerOfTwo(value){return(value&value-1)===0&&value!==0;}};THREE.Spline=function(points){this.points=points;var c=[],v3={x:0,y:0,z:0},point,intPoint,weight,w2,w3,pa,pb,pc,pd;this.initFromArray=function(a){this.points=[];for(var i=0;ithis.points.length-2?this.points.length-1:intPoint+1;c[3]=intPoint>this.points.length-3?this.points.length-1:intPoint+2;pa=this.points[c[0]];pb=this.points[c[1]];pc=this.points[c[2]];pd=this.points[c[3]];w2=weight*weight;w3=weight*w2;v3.x=interpolate(pa.x,pb.x,pc.x,pd.x,weight,w2,w3);v3.y=interpolate(pa.y,pb.y,pc.y,pd.y,weight,w2,w3);v3.z=interpolate(pa.z,pb.z,pc.z,pd.z,weight,w2,w3);return v3;};this.getControlPointsArray=function(){var i,p,l=this.points.length,coords=[];for(i=0;i0){return result.multiplyScalar(1/Math.sqrt(resultLengthSq));}return result.set(0,0,0);};}();THREE.Triangle.barycoordFromPoint=function(){var v0=new THREE.Vector3();var v1=new THREE.Vector3();var v2=new THREE.Vector3();return function(point,a,b,c,optionalTarget){v0.subVectors(c,a);v1.subVectors(b,a);v2.subVectors(point,a);var dot00=v0.dot(v0);var dot01=v0.dot(v1);var dot02=v0.dot(v2);var dot11=v1.dot(v1);var dot12=v1.dot(v2);var denom=dot00*dot11-dot01*dot01;var result=optionalTarget||new THREE.Vector3();if(denom==0){return result.set(-2,-1,-1);}var invDenom=1/denom;var u=(dot11*dot02-dot01*dot12)*invDenom;var v=(dot00*dot12-dot01*dot02)*invDenom;return result.set(1-u-v,v,u);};}();THREE.Triangle.containsPoint=function(){var v1=new THREE.Vector3();return function(point,a,b,c){var result=THREE.Triangle.barycoordFromPoint(point,a,b,c,v1);return result.x>=0&&result.y>=0&&result.x+result.y<=1;};}();THREE.Triangle.prototype={constructor:THREE.Triangle,set:function set(a,b,c){this.a.copy(a);this.b.copy(b);this.c.copy(c);return this;},setFromPointsAndIndices:function setFromPointsAndIndices(points,i0,i1,i2){this.a.copy(points[i0]);this.b.copy(points[i1]);this.c.copy(points[i2]);return this;},copy:function copy(triangle){this.a.copy(triangle.a);this.b.copy(triangle.b);this.c.copy(triangle.c);return this;},area:function(){var v0=new THREE.Vector3();var v1=new THREE.Vector3();return function(){v0.subVectors(this.c,this.b);v1.subVectors(this.a,this.b);return v0.cross(v1).length()*0.5;};}(),midpoint:function midpoint(optionalTarget){var result=optionalTarget||new THREE.Vector3();return result.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3);},normal:function normal(optionalTarget){return THREE.Triangle.normal(this.a,this.b,this.c,optionalTarget);},plane:function plane(optionalTarget){var result=optionalTarget||new THREE.Plane();return result.setFromCoplanarPoints(this.a,this.b,this.c);},barycoordFromPoint:function barycoordFromPoint(point,optionalTarget){return THREE.Triangle.barycoordFromPoint(point,this.a,this.b,this.c,optionalTarget);},containsPoint:function containsPoint(point){return THREE.Triangle.containsPoint(point,this.a,this.b,this.c);},equals:function equals(triangle){return triangle.a.equals(this.a)&&triangle.b.equals(this.b)&&triangle.c.equals(this.c);},clone:function clone(){return new THREE.Triangle().copy(this);}};THREE.Clock=function(autoStart){this.autoStart=autoStart!==undefined?autoStart:true;this.startTime=0;this.oldTime=0;this.elapsedTime=0;this.running=false;};THREE.Clock.prototype={constructor:THREE.Clock,start:function start(){this.startTime=self.performance!==undefined&&self.performance.now!==undefined?self.performance.now():Date.now();this.oldTime=this.startTime;this.running=true;},stop:function stop(){this.getElapsedTime();this.running=false;},getElapsedTime:function getElapsedTime(){this.getDelta();return this.elapsedTime;},getDelta:function getDelta(){var diff=0;if(this.autoStart&&!this.running){this.start();}if(this.running){var newTime=self.performance!==undefined&&self.performance.now!==undefined?self.performance.now():Date.now();diff=0.001*(newTime-this.oldTime);this.oldTime=newTime;this.elapsedTime+=diff;}return diff;}};THREE.EventDispatcher=function(){};THREE.EventDispatcher.prototype={constructor:THREE.EventDispatcher,apply:function apply(object){object.addEventListener=THREE.EventDispatcher.prototype.addEventListener;object.hasEventListener=THREE.EventDispatcher.prototype.hasEventListener;object.removeEventListener=THREE.EventDispatcher.prototype.removeEventListener;object.dispatchEvent=THREE.EventDispatcher.prototype.dispatchEvent;},addEventListener:function addEventListener(type,listener){if(this._listeners===undefined)this._listeners={};var listeners=this._listeners;if(listeners[type]===undefined){listeners[type]=[];}if(listeners[type].indexOf(listener)===-1){listeners[type].push(listener);}},hasEventListener:function hasEventListener(type,listener){if(this._listeners===undefined)return false;var listeners=this._listeners;if(listeners[type]!==undefined&&listeners[type].indexOf(listener)!==-1){return true;}return false;},removeEventListener:function removeEventListener(type,listener){if(this._listeners===undefined)return;var listeners=this._listeners;var listenerArray=listeners[type];if(listenerArray!==undefined){var index=listenerArray.indexOf(listener);if(index!==-1){listenerArray.splice(index,1);}}},dispatchEvent:function dispatchEvent(event){if(this._listeners===undefined)return;var listeners=this._listeners;var listenerArray=listeners[event.type];if(listenerArray!==undefined){event.target=this;var array=[];var length=listenerArray.length;for(var i=0;i1){for(var i=0;i1){for(var i=0;i0){data.children=[];for(var i=0;i0;var hasFaceVertexNormals=faces[0].vertexNormals.length==3;var positions=new Float32Array(faces.length*3*3);this.addAttribute('position',new THREE.BufferAttribute(positions,3));var normals=new Float32Array(faces.length*3*3);this.addAttribute('normal',new THREE.BufferAttribute(normals,3));if(vertexColors!==THREE.NoColors){var colors=new Float32Array(faces.length*3*3);this.addAttribute('color',new THREE.BufferAttribute(colors,3));}if(hasFaceVertexUv===true){var uvs=new Float32Array(faces.length*3*2);this.addAttribute('uv',new THREE.BufferAttribute(uvs,2));}for(var i=0,i2=0,i3=0;i0?this.offsets:[{start:0,count:indices.length,index:0}];for(var j=0,jl=offsets.length;joffset.index+size){var new_offset={start:indexPtr,count:0,index:vertexPtr};offsets.push(new_offset);offset=new_offset;for(var v=0;v<6;v+=2){var new_vid=faceVertices[v+1];if(new_vid>-1&&new_vid0){output.data.offsets=JSON.parse((0,_stringify2.default)(offsets));}if(boundingSphere!==null){output.data.boundingSphere={center:boundingSphere.center.toArray(),radius:boundingSphere.radius};}return output;},clone:function clone(){var geometry=new THREE.BufferGeometry();for(var attr in this.attributes){var sourceAttr=this.attributes[attr];geometry.addAttribute(attr,sourceAttr.clone());}for(var i=0,il=this.offsets.length;i0){d+=vertices[i].distanceTo(vertices[i-1]);}this.lineDistances[i]=d;}},computeBoundingBox:function computeBoundingBox(){if(this.boundingBox===null){this.boundingBox=new THREE.Box3();}this.boundingBox.setFromPoints(this.vertices);},computeBoundingSphere:function computeBoundingSphere(){if(this.boundingSphere===null){this.boundingSphere=new THREE.Sphere();}this.boundingSphere.setFromPoints(this.vertices);},merge:function merge(geometry,matrix,materialIndexOffset){if(geometry instanceof THREE.Geometry===false){console.error('THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.',geometry);return;}var normalMatrix,vertexOffset=this.vertices.length,vertices1=this.vertices,vertices2=geometry.vertices,faces1=this.faces,faces2=geometry.faces,uvs1=this.faceVertexUvs[0],uvs2=geometry.faceVertexUvs[0];if(materialIndexOffset===undefined)materialIndexOffset=0;if(matrix!==undefined){normalMatrix=new THREE.Matrix3().getNormalMatrix(matrix);}for(var i=0,il=vertices2.length;i=0;i--){var idx=faceIndicesToRemove[i];this.faces.splice(idx,1);for(j=0,jl=this.faceVertexUvs.length;j0;var hasFaceVertexNormal=face.vertexNormals.length>0;var hasFaceColor=face.color.r!==1||face.color.g!==1||face.color.b!==1;var hasFaceVertexColor=face.vertexColors.length>0;var faceType=0;faceType=setBit(faceType,0,0);faceType=setBit(faceType,1,hasMaterial);faceType=setBit(faceType,2,hasFaceUv);faceType=setBit(faceType,3,hasFaceVertexUv);faceType=setBit(faceType,4,hasFaceNormal);faceType=setBit(faceType,5,hasFaceVertexNormal);faceType=setBit(faceType,6,hasFaceColor);faceType=setBit(faceType,7,hasFaceVertexColor);faces.push(faceType);faces.push(face.a,face.b,face.c);if(hasFaceVertexUv){var faceVertexUvs=this.faceVertexUvs[0][i];faces.push(getUvIndex(faceVertexUvs[0]),getUvIndex(faceVertexUvs[1]),getUvIndex(faceVertexUvs[2]));}if(hasFaceNormal){faces.push(getNormalIndex(face.normal));}if(hasFaceVertexNormal){var vertexNormals=face.vertexNormals;faces.push(getNormalIndex(vertexNormals[0]),getNormalIndex(vertexNormals[1]),getNormalIndex(vertexNormals[2]));}if(hasFaceColor){faces.push(getColorIndex(face.color));}if(hasFaceVertexColor){var vertexColors=face.vertexColors;faces.push(getColorIndex(vertexColors[0]),getColorIndex(vertexColors[1]),getColorIndex(vertexColors[2]));}}function setBit(value,position,enabled){return enabled?value|1<0)output.data.colors=colors;if(uvs.length>0)output.data.uvs=[uvs];output.data.faces=faces;return output;},clone:function clone(){var geometry=new THREE.Geometry();var vertices=this.vertices;for(var i=0,il=vertices.length;i1?json.skinWeights[i+1]:0;var z=influencesPerVertex>2?json.skinWeights[i+2]:0;var w=influencesPerVertex>3?json.skinWeights[i+3]:0;geometry.skinWeights.push(new THREE.Vector4(x,y,z,w));}}if(json.skinIndices){for(var i=0,l=json.skinIndices.length;i1?json.skinIndices[i+1]:0;var c=influencesPerVertex>2?json.skinIndices[i+2]:0;var d=influencesPerVertex>3?json.skinIndices[i+3]:0;geometry.skinIndices.push(new THREE.Vector4(a,b,c,d));}}geometry.bones=json.bones;if(geometry.bones&&geometry.bones.length>0&&(geometry.skinWeights.length!==geometry.skinIndices.length||geometry.skinIndices.length!==geometry.vertices.length)){console.warn('When skinning, number of vertices ('+geometry.vertices.length+'), skinIndices ('+geometry.skinIndices.length+'), and skinWeights ('+geometry.skinWeights.length+') should match.');}geometry.animation=json.animation;geometry.animations=json.animations;};function parseMorphing(scale){if(json.morphTargets!==undefined){var i,l,v,vl,dstVertices,srcVertices;for(i=0,l=json.morphTargets.length;iprecisionSq)continue;var distance=ray.origin.distanceTo(interRay);if(distanceraycaster.far)continue;intersects.push({distance:distance,point:interSegment.clone().applyMatrix4(this.matrixWorld),face:null,faceIndex:null,object:this});}}};}();THREE.Line.prototype.clone=function(object){if(object===undefined)object=new THREE.Line(this.geometry,this.material,this.mode);THREE.Object3D.prototype.clone.call(this,object);return object;};THREE.Mesh=function(geometry,material){THREE.Object3D.call(this);this.type='Mesh';this.geometry=geometry!==undefined?geometry:new THREE.Geometry();this.material=material!==undefined?material:new THREE.MeshBasicMaterial({color:Math.random()*0xffffff});this.updateMorphTargets();};THREE.Mesh.prototype=(0,_create2.default)(THREE.Object3D.prototype);THREE.Mesh.prototype.updateMorphTargets=function(){if(this.geometry.morphTargets!==undefined&&this.geometry.morphTargets.length>0){this.morphTargetBase=-1;this.morphTargetForcedOrder=[];this.morphTargetInfluences=[];this.morphTargetDictionary={};for(var m=0,ml=this.geometry.morphTargets.length;mraycaster.far)continue;intersects.push({distance:distance,point:intersectionPoint,face:new THREE.Face3(a,b,c,THREE.Triangle.normal(vA,vB,vC)),faceIndex:null,object:this});}}}else{var positions=attributes.position.array;for(var i=0,j=0,il=positions.length;iraycaster.far)continue;intersects.push({distance:distance,point:intersectionPoint,face:new THREE.Face3(a,b,c,THREE.Triangle.normal(vA,vB,vC)),faceIndex:null,object:this});}}}else if(geometry instanceof THREE.Geometry){var isFaceMaterial=this.material instanceof THREE.MeshFaceMaterial;var objectMaterials=isFaceMaterial===true?this.material.materials:null;var a,b,c,d;var precision=raycaster.precision;var vertices=geometry.vertices;for(var f=0,fl=geometry.faces.length;fraycaster.far)continue;intersects.push({distance:distance,point:intersectionPoint,face:face,faceIndex:f,object:this});}}};}();THREE.Mesh.prototype.clone=function(object,recursive){if(object===undefined)object=new THREE.Mesh(this.geometry,this.material);THREE.Object3D.prototype.clone.call(this,object,recursive);return object;};THREE.Bone=function(belongsToSkin){THREE.Object3D.call(this);this.skin=belongsToSkin;};THREE.Bone.prototype=(0,_create2.default)(THREE.Object3D.prototype);THREE.Skeleton=function(bones,boneInverses,useVertexTexture){this.useVertexTexture=useVertexTexture!==undefined?useVertexTexture:true;this.identityMatrix=new THREE.Matrix4();bones=bones||[];this.bones=bones.slice(0);if(this.useVertexTexture){var size;if(this.bones.length>256)size=64;else if(this.bones.length>64)size=32;else if(this.bones.length>16)size=16;else size=8;this.boneTextureWidth=size;this.boneTextureHeight=size;this.boneMatrices=new Float32Array(this.boneTextureWidth*this.boneTextureHeight*4);this.boneTexture=new THREE.DataTexture(this.boneMatrices,this.boneTextureWidth,this.boneTextureHeight,THREE.RGBAFormat,THREE.FloatType);this.boneTexture.minFilter=THREE.NearestFilter;this.boneTexture.magFilter=THREE.NearestFilter;this.boneTexture.generateMipmaps=false;this.boneTexture.flipY=false;}else{this.boneMatrices=new Float32Array(16*this.bones.length);}if(boneInverses===undefined){this.calculateInverses();}else{if(this.bones.length===boneInverses.length){this.boneInverses=boneInverses.slice(0);}else{console.warn('THREE.Skeleton bonInverses is the wrong length.');this.boneInverses=[];for(var b=0,bl=this.bones.length;b1){var label=parts[1];var num=parts[2];if(!animations[label])animations[label]={start:Infinity,end:-Infinity};var animation=animations[label];if(ianimation.end)animation.end=i;if(!firstAnimation)firstAnimation=label;}}geometry.firstAnimation=firstAnimation;};THREE.MorphAnimMesh.prototype.setAnimationLabel=function(label,start,end){if(!this.geometry.animations)this.geometry.animations={};this.geometry.animations[label]={start:start,end:end};};THREE.MorphAnimMesh.prototype.playAnimation=function(label,fps){var animation=this.geometry.animations[label];if(animation){this.setFrameRange(animation.start,animation.end);this.duration=1000*((animation.end-animation.start)/fps);this.time=0;}else{console.warn('animation['+label+'] undefined');}};THREE.MorphAnimMesh.prototype.updateAnimation=function(delta){var frameTime=this.duration/this.length;this.time+=this.direction*delta;if(this.mirroredLoop){if(this.time>this.duration||this.time<0){this.direction*=-1;if(this.time>this.duration){this.time=this.duration;this.directionBackwards=true;}if(this.time<0){this.time=0;this.directionBackwards=false;}}}else{this.time=this.time%this.duration;if(this.time<0)this.time+=this.duration;}var keyframe=this.startKeyframe+THREE.Math.clamp(Math.floor(this.time/frameTime),0,this.length-1);if(keyframe!==this.currentKeyframe){this.morphTargetInfluences[this.lastKeyframe]=0;this.morphTargetInfluences[this.currentKeyframe]=1;this.morphTargetInfluences[keyframe]=0;this.lastKeyframe=this.currentKeyframe;this.currentKeyframe=keyframe;}var mix=this.time%frameTime/frameTime;if(this.directionBackwards){mix=1-mix;}this.morphTargetInfluences[this.currentKeyframe]=mix;this.morphTargetInfluences[this.lastKeyframe]=1-mix;};THREE.MorphAnimMesh.prototype.interpolateTargets=function(a,b,t){var influences=this.morphTargetInfluences;for(var i=0,l=influences.length;i-1)influences[a]=1-t;if(b>-1)influences[b]=t;};THREE.MorphAnimMesh.prototype.clone=function(object){if(object===undefined)object=new THREE.MorphAnimMesh(this.geometry,this.material);object.duration=this.duration;object.mirroredLoop=this.mirroredLoop;object.time=this.time;object.lastKeyframe=this.lastKeyframe;object.currentKeyframe=this.currentKeyframe;object.direction=this.direction;object.directionBackwards=this.directionBackwards;THREE.Mesh.prototype.clone.call(this,object);return object;};THREE.LOD=function(){THREE.Object3D.call(this);this.objects=[];};THREE.LOD.prototype=(0,_create2.default)(THREE.Object3D.prototype);THREE.LOD.prototype.addLevel=function(object,distance){if(distance===undefined)distance=0;distance=Math.abs(distance);for(var l=0;l1){v1.setFromMatrixPosition(camera.matrixWorld);v2.setFromMatrixPosition(this.matrixWorld);var distance=v1.distanceTo(v2);this.objects[0].object.visible=true;for(var i=1,l=this.objects.length;i=this.objects[i].distance){this.objects[i-1].object.visible=false;this.objects[i].object.visible=true;}else{break;}}for(;ithis.scale.x){return;}intersects.push({distance:distance,point:this.position,face:null,object:this});};}();THREE.Sprite.prototype.clone=function(object){if(object===undefined)object=new THREE.Sprite(this.material);THREE.Object3D.prototype.clone.call(this,object);return object;};THREE.Particle=THREE.Sprite;THREE.LensFlare=function(texture,size,distance,blending,color){THREE.Object3D.call(this);this.lensFlares=[];this.positionScreen=new THREE.Vector3();this.customUpdateCallback=undefined;if(texture!==undefined){this.add(texture,size,distance,blending,color);}};THREE.LensFlare.prototype=(0,_create2.default)(THREE.Object3D.prototype);THREE.LensFlare.prototype.add=function(texture,size,distance,blending,color,opacity){if(size===undefined)size=-1;if(distance===undefined)distance=0;if(opacity===undefined)opacity=1;if(color===undefined)color=new THREE.Color(0xffffff);if(blending===undefined)blending=THREE.NormalBlending;distance=Math.min(distance,Math.max(0,distance));this.lensFlares.push({texture:texture,size:size,distance:distance,x:0,y:0,z:0,scale:1,rotation:1,opacity:opacity,color:color,blending:blending});};THREE.LensFlare.prototype.updateLensFlares=function(){var f,fl=this.lensFlares.length;var flare;var vecX=-this.positionScreen.x*2;var vecY=-this.positionScreen.y*2;for(f=0;f 0\\n\\nfor( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\\n\\n\tvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\\n\tvec3 dirVector = normalize( lDirection.xyz );\\n\\n\tfloat dotProduct = dot( transformedNormal, dirVector );\\n\tvec3 directionalLightWeighting = vec3( max( dotProduct, 0.0 ) );\\n\\n\t#ifdef DOUBLE_SIDED\\n\\n\t\tvec3 directionalLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\\n\\n\t\t#ifdef WRAP_AROUND\\n\\n\t\t\tvec3 directionalLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\\n\\n\t\t#endif\\n\\n\t#endif\\n\\n\t#ifdef WRAP_AROUND\\n\\n\t\tvec3 directionalLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\\n\t\tdirectionalLightWeighting = mix( directionalLightWeighting, directionalLightWeightingHalf, wrapRGB );\\n\\n\t\t#ifdef DOUBLE_SIDED\\n\\n\t\t\tdirectionalLightWeightingBack = mix( directionalLightWeightingBack, directionalLightWeightingHalfBack, wrapRGB );\\n\\n\t\t#endif\\n\\n\t#endif\\n\\n\tvLightFront += directionalLightColor[ i ] * directionalLightWeighting;\\n\\n\t#ifdef DOUBLE_SIDED\\n\\n\t\tvLightBack += directionalLightColor[ i ] * directionalLightWeightingBack;\\n\\n\t#endif\\n\\n}\\n\\n#endif\\n\\n#if MAX_POINT_LIGHTS > 0\\n\\n\tfor( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\\n\\n\t\tvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\\n\t\tvec3 lVector = lPosition.xyz - mvPosition.xyz;\\n\\n\t\tfloat lDistance = 1.0;\\n\t\tif ( pointLightDistance[ i ] > 0.0 )\\n\t\t\tlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\\n\\n\t\tlVector = normalize( lVector );\\n\t\tfloat dotProduct = dot( transformedNormal, lVector );\\n\\n\t\tvec3 pointLightWeighting = vec3( max( dotProduct, 0.0 ) );\\n\\n\t\t#ifdef DOUBLE_SIDED\\n\\n\t\t\tvec3 pointLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\\n\\n\t\t\t#ifdef WRAP_AROUND\\n\\n\t\t\t\tvec3 pointLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\\n\\n\t\t\t#endif\\n\\n\t\t#endif\\n\\n\t\t#ifdef WRAP_AROUND\\n\\n\t\t\tvec3 pointLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\\n\t\t\tpointLightWeighting = mix( pointLightWeighting, pointLightWeightingHalf, wrapRGB );\\n\\n\t\t\t#ifdef DOUBLE_SIDED\\n\\n\t\t\t\tpointLightWeightingBack = mix( pointLightWeightingBack, pointLightWeightingHalfBack, wrapRGB );\\n\\n\t\t\t#endif\\n\\n\t\t#endif\\n\\n\t\tvLightFront += pointLightColor[ i ] * pointLightWeighting * lDistance;\\n\\n\t\t#ifdef DOUBLE_SIDED\\n\\n\t\t\tvLightBack += pointLightColor[ i ] * pointLightWeightingBack * lDistance;\\n\\n\t\t#endif\\n\\n\t}\\n\\n#endif\\n\\n#if MAX_SPOT_LIGHTS > 0\\n\\n\tfor( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\\n\\n\t\tvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );\\n\t\tvec3 lVector = lPosition.xyz - mvPosition.xyz;\\n\\n\t\tfloat spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - worldPosition.xyz ) );\\n\\n\t\tif ( spotEffect > spotLightAngleCos[ i ] ) {\\n\\n\t\t\tspotEffect = max( pow( max( spotEffect, 0.0 ), spotLightExponent[ i ] ), 0.0 );\\n\\n\t\t\tfloat lDistance = 1.0;\\n\t\t\tif ( spotLightDistance[ i ] > 0.0 )\\n\t\t\t\tlDistance = 1.0 - min( ( length( lVector ) / spotLightDistance[ i ] ), 1.0 );\\n\\n\t\t\tlVector = normalize( lVector );\\n\\n\t\t\tfloat dotProduct = dot( transformedNormal, lVector );\\n\t\t\tvec3 spotLightWeighting = vec3( max( dotProduct, 0.0 ) );\\n\\n\t\t\t#ifdef DOUBLE_SIDED\\n\\n\t\t\t\tvec3 spotLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\\n\\n\t\t\t\t#ifdef WRAP_AROUND\\n\\n\t\t\t\t\tvec3 spotLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\\n\\n\t\t\t\t#endif\\n\\n\t\t\t#endif\\n\\n\t\t\t#ifdef WRAP_AROUND\\n\\n\t\t\t\tvec3 spotLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\\n\t\t\t\tspotLightWeighting = mix( spotLightWeighting, spotLightWeightingHalf, wrapRGB );\\n\\n\t\t\t\t#ifdef DOUBLE_SIDED\\n\\n\t\t\t\t\tspotLightWeightingBack = mix( spotLightWeightingBack, spotLightWeightingHalfBack, wrapRGB );\\n\\n\t\t\t\t#endif\\n\\n\t\t\t#endif\\n\\n\t\t\tvLightFront += spotLightColor[ i ] * spotLightWeighting * lDistance * spotEffect;\\n\\n\t\t\t#ifdef DOUBLE_SIDED\\n\\n\t\t\t\tvLightBack += spotLightColor[ i ] * spotLightWeightingBack * lDistance * spotEffect;\\n\\n\t\t\t#endif\\n\\n\t\t}\\n\\n\t}\\n\\n#endif\\n\\n#if MAX_HEMI_LIGHTS > 0\\n\\n\tfor( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {\\n\\n\t\tvec4 lDirection = viewMatrix * vec4( hemisphereLightDirection[ i ], 0.0 );\\n\t\tvec3 lVector = normalize( lDirection.xyz );\\n\\n\t\tfloat dotProduct = dot( transformedNormal, lVector );\\n\\n\t\tfloat hemiDiffuseWeight = 0.5 * dotProduct + 0.5;\\n\t\tfloat hemiDiffuseWeightBack = -0.5 * dotProduct + 0.5;\\n\\n\t\tvLightFront += mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );\\n\\n\t\t#ifdef DOUBLE_SIDED\\n\\n\t\t\tvLightBack += mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeightBack );\\n\\n\t\t#endif\\n\\n\t}\\n\\n#endif\\n\\nvLightFront = vLightFront * diffuse + ambient * ambientLightColor + emissive;\\n\\n#ifdef DOUBLE_SIDED\\n\\n\tvLightBack = vLightBack * diffuse + ambient * ambientLightColor + emissive;\\n\\n#endif\";THREE.ShaderChunk['map_particle_pars_fragment']=\"#ifdef USE_MAP\\n\\n\tuniform sampler2D map;\\n\\n#endif\";THREE.ShaderChunk['default_vertex']=\"vec4 mvPosition;\\n\\n#ifdef USE_SKINNING\\n\\n\tmvPosition = modelViewMatrix * skinned;\\n\\n#endif\\n\\n#if !defined( USE_SKINNING ) && defined( USE_MORPHTARGETS )\\n\\n\tmvPosition = modelViewMatrix * vec4( morphed, 1.0 );\\n\\n#endif\\n\\n#if !defined( USE_SKINNING ) && ! defined( USE_MORPHTARGETS )\\n\\n\tmvPosition = modelViewMatrix * vec4( position, 1.0 );\\n\\n#endif\\n\\ngl_Position = projectionMatrix * mvPosition;\";THREE.ShaderChunk['map_pars_fragment']=\"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP )\\n\\n\tvarying vec2 vUv;\\n\\n#endif\\n\\n#ifdef USE_MAP\\n\\n\tuniform sampler2D map;\\n\\n#endif\";THREE.ShaderChunk['skinnormal_vertex']=\"#ifdef USE_SKINNING\\n\\n\tmat4 skinMatrix = mat4( 0.0 );\\n\tskinMatrix += skinWeight.x * boneMatX;\\n\tskinMatrix += skinWeight.y * boneMatY;\\n\tskinMatrix += skinWeight.z * boneMatZ;\\n\tskinMatrix += skinWeight.w * boneMatW;\\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\\n\\n\t#ifdef USE_MORPHNORMALS\\n\\n\tvec4 skinnedNormal = skinMatrix * vec4( morphedNormal, 0.0 );\\n\\n\t#else\\n\\n\tvec4 skinnedNormal = skinMatrix * vec4( normal, 0.0 );\\n\\n\t#endif\\n\\n#endif\\n\";THREE.ShaderChunk['logdepthbuf_pars_vertex']=\"#ifdef USE_LOGDEPTHBUF\\n\\n\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\n\t\tvarying float vFragDepth;\\n\\n\t#endif\\n\\n\tuniform float logDepthBufFC;\\n\\n#endif\";THREE.ShaderChunk['lightmap_pars_vertex']=\"#ifdef USE_LIGHTMAP\\n\\n\tvarying vec2 vUv2;\\n\\n#endif\";THREE.ShaderChunk['lights_phong_fragment']=\"vec3 normal = normalize( vNormal );\\nvec3 viewPosition = normalize( vViewPosition );\\n\\n#ifdef DOUBLE_SIDED\\n\\n\tnormal = normal * ( -1.0 + 2.0 * float( gl_FrontFacing ) );\\n\\n#endif\\n\\n#ifdef USE_NORMALMAP\\n\\n\tnormal = perturbNormal2Arb( -vViewPosition, normal );\\n\\n#elif defined( USE_BUMPMAP )\\n\\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\\n\\n#endif\\n\\n#if MAX_POINT_LIGHTS > 0\\n\\n\tvec3 pointDiffuse = vec3( 0.0 );\\n\tvec3 pointSpecular = vec3( 0.0 );\\n\\n\tfor ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\\n\\n\t\tvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\\n\t\tvec3 lVector = lPosition.xyz + vViewPosition.xyz;\\n\\n\t\tfloat lDistance = 1.0;\\n\t\tif ( pointLightDistance[ i ] > 0.0 )\\n\t\t\tlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\\n\\n\t\tlVector = normalize( lVector );\\n\\n\t\t\t\t// diffuse\\n\\n\t\tfloat dotProduct = dot( normal, lVector );\\n\\n\t\t#ifdef WRAP_AROUND\\n\\n\t\t\tfloat pointDiffuseWeightFull = max( dotProduct, 0.0 );\\n\t\t\tfloat pointDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\\n\\n\t\t\tvec3 pointDiffuseWeight = mix( vec3( pointDiffuseWeightFull ), vec3( pointDiffuseWeightHalf ), wrapRGB );\\n\\n\t\t#else\\n\\n\t\t\tfloat pointDiffuseWeight = max( dotProduct, 0.0 );\\n\\n\t\t#endif\\n\\n\t\tpointDiffuse += diffuse * pointLightColor[ i ] * pointDiffuseWeight * lDistance;\\n\\n\t\t\t\t// specular\\n\\n\t\tvec3 pointHalfVector = normalize( lVector + viewPosition );\\n\t\tfloat pointDotNormalHalf = max( dot( normal, pointHalfVector ), 0.0 );\\n\t\tfloat pointSpecularWeight = specularStrength * max( pow( pointDotNormalHalf, shininess ), 0.0 );\\n\\n\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;\\n\\n\t\tvec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVector, pointHalfVector ), 0.0 ), 5.0 );\\n\t\tpointSpecular += schlick * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * lDistance * specularNormalization;\\n\\n\t}\\n\\n#endif\\n\\n#if MAX_SPOT_LIGHTS > 0\\n\\n\tvec3 spotDiffuse = vec3( 0.0 );\\n\tvec3 spotSpecular = vec3( 0.0 );\\n\\n\tfor ( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\\n\\n\t\tvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );\\n\t\tvec3 lVector = lPosition.xyz + vViewPosition.xyz;\\n\\n\t\tfloat lDistance = 1.0;\\n\t\tif ( spotLightDistance[ i ] > 0.0 )\\n\t\t\tlDistance = 1.0 - min( ( length( lVector ) / spotLightDistance[ i ] ), 1.0 );\\n\\n\t\tlVector = normalize( lVector );\\n\\n\t\tfloat spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - vWorldPosition ) );\\n\\n\t\tif ( spotEffect > spotLightAngleCos[ i ] ) {\\n\\n\t\t\tspotEffect = max( pow( max( spotEffect, 0.0 ), spotLightExponent[ i ] ), 0.0 );\\n\\n\t\t\t\t\t// diffuse\\n\\n\t\t\tfloat dotProduct = dot( normal, lVector );\\n\\n\t\t\t#ifdef WRAP_AROUND\\n\\n\t\t\t\tfloat spotDiffuseWeightFull = max( dotProduct, 0.0 );\\n\t\t\t\tfloat spotDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\\n\\n\t\t\t\tvec3 spotDiffuseWeight = mix( vec3( spotDiffuseWeightFull ), vec3( spotDiffuseWeightHalf ), wrapRGB );\\n\\n\t\t\t#else\\n\\n\t\t\t\tfloat spotDiffuseWeight = max( dotProduct, 0.0 );\\n\\n\t\t\t#endif\\n\\n\t\t\tspotDiffuse += diffuse * spotLightColor[ i ] * spotDiffuseWeight * lDistance * spotEffect;\\n\\n\t\t\t\t\t// specular\\n\\n\t\t\tvec3 spotHalfVector = normalize( lVector + viewPosition );\\n\t\t\tfloat spotDotNormalHalf = max( dot( normal, spotHalfVector ), 0.0 );\\n\t\t\tfloat spotSpecularWeight = specularStrength * max( pow( spotDotNormalHalf, shininess ), 0.0 );\\n\\n\t\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;\\n\\n\t\t\tvec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVector, spotHalfVector ), 0.0 ), 5.0 );\\n\t\t\tspotSpecular += schlick * spotLightColor[ i ] * spotSpecularWeight * spotDiffuseWeight * lDistance * specularNormalization * spotEffect;\\n\\n\t\t}\\n\\n\t}\\n\\n#endif\\n\\n#if MAX_DIR_LIGHTS > 0\\n\\n\tvec3 dirDiffuse = vec3( 0.0 );\\n\tvec3 dirSpecular = vec3( 0.0 );\\n\\n\tfor( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\\n\\n\t\tvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\\n\t\tvec3 dirVector = normalize( lDirection.xyz );\\n\\n\t\t\t\t// diffuse\\n\\n\t\tfloat dotProduct = dot( normal, dirVector );\\n\\n\t\t#ifdef WRAP_AROUND\\n\\n\t\t\tfloat dirDiffuseWeightFull = max( dotProduct, 0.0 );\\n\t\t\tfloat dirDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\\n\\n\t\t\tvec3 dirDiffuseWeight = mix( vec3( dirDiffuseWeightFull ), vec3( dirDiffuseWeightHalf ), wrapRGB );\\n\\n\t\t#else\\n\\n\t\t\tfloat dirDiffuseWeight = max( dotProduct, 0.0 );\\n\\n\t\t#endif\\n\\n\t\tdirDiffuse += diffuse * directionalLightColor[ i ] * dirDiffuseWeight;\\n\\n\t\t// specular\\n\\n\t\tvec3 dirHalfVector = normalize( dirVector + viewPosition );\\n\t\tfloat dirDotNormalHalf = max( dot( normal, dirHalfVector ), 0.0 );\\n\t\tfloat dirSpecularWeight = specularStrength * max( pow( dirDotNormalHalf, shininess ), 0.0 );\\n\\n\t\t/*\\n\t\t// fresnel term from skin shader\\n\t\tconst float F0 = 0.128;\\n\\n\t\tfloat base = 1.0 - dot( viewPosition, dirHalfVector );\\n\t\tfloat exponential = pow( base, 5.0 );\\n\\n\t\tfloat fresnel = exponential + F0 * ( 1.0 - exponential );\\n\t\t*/\\n\\n\t\t/*\\n\t\t// fresnel term from fresnel shader\\n\t\tconst float mFresnelBias = 0.08;\\n\t\tconst float mFresnelScale = 0.3;\\n\t\tconst float mFresnelPower = 5.0;\\n\\n\t\tfloat fresnel = mFresnelBias + mFresnelScale * pow( 1.0 + dot( normalize( -viewPosition ), normal ), mFresnelPower );\\n\t\t*/\\n\\n\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;\\n\\n\t\t// \t\tdirSpecular += specular * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight * specularNormalization * fresnel;\\n\\n\t\tvec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( dirVector, dirHalfVector ), 0.0 ), 5.0 );\\n\t\tdirSpecular += schlick * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight * specularNormalization;\\n\\n\\n\t}\\n\\n#endif\\n\\n#if MAX_HEMI_LIGHTS > 0\\n\\n\tvec3 hemiDiffuse = vec3( 0.0 );\\n\tvec3 hemiSpecular = vec3( 0.0 );\\n\\n\tfor( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {\\n\\n\t\tvec4 lDirection = viewMatrix * vec4( hemisphereLightDirection[ i ], 0.0 );\\n\t\tvec3 lVector = normalize( lDirection.xyz );\\n\\n\t\t// diffuse\\n\\n\t\tfloat dotProduct = dot( normal, lVector );\\n\t\tfloat hemiDiffuseWeight = 0.5 * dotProduct + 0.5;\\n\\n\t\tvec3 hemiColor = mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );\\n\\n\t\themiDiffuse += diffuse * hemiColor;\\n\\n\t\t// specular (sky light)\\n\\n\t\tvec3 hemiHalfVectorSky = normalize( lVector + viewPosition );\\n\t\tfloat hemiDotNormalHalfSky = 0.5 * dot( normal, hemiHalfVectorSky ) + 0.5;\\n\t\tfloat hemiSpecularWeightSky = specularStrength * max( pow( max( hemiDotNormalHalfSky, 0.0 ), shininess ), 0.0 );\\n\\n\t\t// specular (ground light)\\n\\n\t\tvec3 lVectorGround = -lVector;\\n\\n\t\tvec3 hemiHalfVectorGround = normalize( lVectorGround + viewPosition );\\n\t\tfloat hemiDotNormalHalfGround = 0.5 * dot( normal, hemiHalfVectorGround ) + 0.5;\\n\t\tfloat hemiSpecularWeightGround = specularStrength * max( pow( max( hemiDotNormalHalfGround, 0.0 ), shininess ), 0.0 );\\n\\n\t\tfloat dotProductGround = dot( normal, lVectorGround );\\n\\n\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;\\n\\n\t\tvec3 schlickSky = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVector, hemiHalfVectorSky ), 0.0 ), 5.0 );\\n\t\tvec3 schlickGround = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVectorGround, hemiHalfVectorGround ), 0.0 ), 5.0 );\\n\t\themiSpecular += hemiColor * specularNormalization * ( schlickSky * hemiSpecularWeightSky * max( dotProduct, 0.0 ) + schlickGround * hemiSpecularWeightGround * max( dotProductGround, 0.0 ) );\\n\\n\t}\\n\\n#endif\\n\\nvec3 totalDiffuse = vec3( 0.0 );\\nvec3 totalSpecular = vec3( 0.0 );\\n\\n#if MAX_DIR_LIGHTS > 0\\n\\n\ttotalDiffuse += dirDiffuse;\\n\ttotalSpecular += dirSpecular;\\n\\n#endif\\n\\n#if MAX_HEMI_LIGHTS > 0\\n\\n\ttotalDiffuse += hemiDiffuse;\\n\ttotalSpecular += hemiSpecular;\\n\\n#endif\\n\\n#if MAX_POINT_LIGHTS > 0\\n\\n\ttotalDiffuse += pointDiffuse;\\n\ttotalSpecular += pointSpecular;\\n\\n#endif\\n\\n#if MAX_SPOT_LIGHTS > 0\\n\\n\ttotalDiffuse += spotDiffuse;\\n\ttotalSpecular += spotSpecular;\\n\\n#endif\\n\\n#ifdef METAL\\n\\n\tgl_FragColor.xyz = gl_FragColor.xyz * ( emissive + totalDiffuse + ambientLightColor * ambient + totalSpecular );\\n\\n#else\\n\\n\tgl_FragColor.xyz = gl_FragColor.xyz * ( emissive + totalDiffuse + ambientLightColor * ambient ) + totalSpecular;\\n\\n#endif\";THREE.ShaderChunk['fog_pars_fragment']=\"#ifdef USE_FOG\\n\\n\tuniform vec3 fogColor;\\n\\n\t#ifdef FOG_EXP2\\n\\n\t\tuniform float fogDensity;\\n\\n\t#else\\n\\n\t\tuniform float fogNear;\\n\t\tuniform float fogFar;\\n\t#endif\\n\\n#endif\";THREE.ShaderChunk['morphnormal_vertex']=\"#ifdef USE_MORPHNORMALS\\n\\n\tvec3 morphedNormal = vec3( 0.0 );\\n\\n\tmorphedNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\\n\tmorphedNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\\n\tmorphedNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\\n\tmorphedNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\\n\\n\tmorphedNormal += normal;\\n\\n#endif\";THREE.ShaderChunk['envmap_pars_fragment']=\"#ifdef USE_ENVMAP\\n\\n\tuniform float reflectivity;\\n\tuniform samplerCube envMap;\\n\tuniform float flipEnvMap;\\n\tuniform int combine;\\n\\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\n\\n\t\tuniform bool useRefract;\\n\t\tuniform float refractionRatio;\\n\\n\t#else\\n\\n\t\tvarying vec3 vReflect;\\n\\n\t#endif\\n\\n#endif\";THREE.ShaderChunk['logdepthbuf_fragment']=\"#if defined(USE_LOGDEPTHBUF) && defined(USE_LOGDEPTHBUF_EXT)\\n\\n\tgl_FragDepthEXT = log2(vFragDepth) * logDepthBufFC * 0.5;\\n\\n#endif\";THREE.ShaderChunk['normalmap_pars_fragment']=\"#ifdef USE_NORMALMAP\\n\\n\tuniform sampler2D normalMap;\\n\tuniform vec2 normalScale;\\n\\n\t\t\t// Per-Pixel Tangent Space Normal Mapping\\n\t\t\t// http://hacksoflife.blogspot.ch/2009/11/per-pixel-tangent-space-normal-mapping.html\\n\\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\\n\\n\t\tvec3 q0 = dFdx( eye_pos.xyz );\\n\t\tvec3 q1 = dFdy( eye_pos.xyz );\\n\t\tvec2 st0 = dFdx( vUv.st );\\n\t\tvec2 st1 = dFdy( vUv.st );\\n\\n\t\tvec3 S = normalize( q0 * st1.t - q1 * st0.t );\\n\t\tvec3 T = normalize( -q0 * st1.s + q1 * st0.s );\\n\t\tvec3 N = normalize( surf_norm );\\n\\n\t\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\n\t\tmapN.xy = normalScale * mapN.xy;\\n\t\tmat3 tsn = mat3( S, T, N );\\n\t\treturn normalize( tsn * mapN );\\n\\n\t}\\n\\n#endif\\n\";THREE.ShaderChunk['lights_phong_pars_vertex']=\"#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP ) || defined( USE_ENVMAP )\\n\\n\tvarying vec3 vWorldPosition;\\n\\n#endif\\n\";THREE.ShaderChunk['lightmap_pars_fragment']=\"#ifdef USE_LIGHTMAP\\n\\n\tvarying vec2 vUv2;\\n\tuniform sampler2D lightMap;\\n\\n#endif\";THREE.ShaderChunk['shadowmap_vertex']=\"#ifdef USE_SHADOWMAP\\n\\n\tfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\\n\\n\t\tvShadowCoord[ i ] = shadowMatrix[ i ] * worldPosition;\\n\\n\t}\\n\\n#endif\";THREE.ShaderChunk['lights_phong_vertex']=\"#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP ) || defined( USE_ENVMAP )\\n\\n\tvWorldPosition = worldPosition.xyz;\\n\\n#endif\";THREE.ShaderChunk['map_fragment']=\"#ifdef USE_MAP\\n\\n\tvec4 texelColor = texture2D( map, vUv );\\n\\n\t#ifdef GAMMA_INPUT\\n\\n\t\ttexelColor.xyz *= texelColor.xyz;\\n\\n\t#endif\\n\\n\tgl_FragColor = gl_FragColor * texelColor;\\n\\n#endif\";THREE.ShaderChunk['lightmap_vertex']=\"#ifdef USE_LIGHTMAP\\n\\n\tvUv2 = uv2;\\n\\n#endif\";THREE.ShaderChunk['map_particle_fragment']=\"#ifdef USE_MAP\\n\\n\tgl_FragColor = gl_FragColor * texture2D( map, vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y ) );\\n\\n#endif\";THREE.ShaderChunk['color_pars_fragment']=\"#ifdef USE_COLOR\\n\\n\tvarying vec3 vColor;\\n\\n#endif\\n\";THREE.ShaderChunk['color_vertex']=\"#ifdef USE_COLOR\\n\\n\t#ifdef GAMMA_INPUT\\n\\n\t\tvColor = color * color;\\n\\n\t#else\\n\\n\t\tvColor = color;\\n\\n\t#endif\\n\\n#endif\";THREE.ShaderChunk['skinning_vertex']=\"#ifdef USE_SKINNING\\n\\n\t#ifdef USE_MORPHTARGETS\\n\\n\tvec4 skinVertex = bindMatrix * vec4( morphed, 1.0 );\\n\\n\t#else\\n\\n\tvec4 skinVertex = bindMatrix * vec4( position, 1.0 );\\n\\n\t#endif\\n\\n\tvec4 skinned = vec4( 0.0 );\\n\tskinned += boneMatX * skinVertex * skinWeight.x;\\n\tskinned += boneMatY * skinVertex * skinWeight.y;\\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\\n\tskinned += boneMatW * skinVertex * skinWeight.w;\\n\tskinned = bindMatrixInverse * skinned;\\n\\n#endif\\n\";THREE.ShaderChunk['envmap_pars_vertex']=\"#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP ) && ! defined( PHONG )\\n\\n\tvarying vec3 vReflect;\\n\\n\tuniform float refractionRatio;\\n\tuniform bool useRefract;\\n\\n#endif\\n\";THREE.ShaderChunk['linear_to_gamma_fragment']=\"#ifdef GAMMA_OUTPUT\\n\\n\tgl_FragColor.xyz = sqrt( gl_FragColor.xyz );\\n\\n#endif\";THREE.ShaderChunk['color_pars_vertex']=\"#ifdef USE_COLOR\\n\\n\tvarying vec3 vColor;\\n\\n#endif\";THREE.ShaderChunk['lights_lambert_pars_vertex']=\"uniform vec3 ambient;\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\n\\nuniform vec3 ambientLightColor;\\n\\n#if MAX_DIR_LIGHTS > 0\\n\\n\tuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\\n\tuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\\n\\n#endif\\n\\n#if MAX_HEMI_LIGHTS > 0\\n\\n\tuniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];\\n\tuniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];\\n\tuniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];\\n\\n#endif\\n\\n#if MAX_POINT_LIGHTS > 0\\n\\n\tuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\\n\tuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\\n\tuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\\n\\n#endif\\n\\n#if MAX_SPOT_LIGHTS > 0\\n\\n\tuniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];\\n\tuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];\\n\tuniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];\\n\tuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];\\n\tuniform float spotLightAngleCos[ MAX_SPOT_LIGHTS ];\\n\tuniform float spotLightExponent[ MAX_SPOT_LIGHTS ];\\n\\n#endif\\n\\n#ifdef WRAP_AROUND\\n\\n\tuniform vec3 wrapRGB;\\n\\n#endif\\n\";THREE.ShaderChunk['map_pars_vertex']=\"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP )\\n\\n\tvarying vec2 vUv;\\n\tuniform vec4 offsetRepeat;\\n\\n#endif\\n\";THREE.ShaderChunk['envmap_fragment']=\"#ifdef USE_ENVMAP\\n\\n\tvec3 reflectVec;\\n\\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\n\\n\t\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\\n\\n\t\t// http://en.wikibooks.org/wiki/GLSL_Programming/Applying_Matrix_Transformations\\n\t\t// Transforming Normal Vectors with the Inverse Transformation\\n\\n\t\tvec3 worldNormal = normalize( vec3( vec4( normal, 0.0 ) * viewMatrix ) );\\n\\n\t\tif ( useRefract ) {\\n\\n\t\t\treflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\\n\\n\t\t} else { \\n\\n\t\t\treflectVec = reflect( cameraToVertex, worldNormal );\\n\\n\t\t}\\n\\n\t#else\\n\\n\t\treflectVec = vReflect;\\n\\n\t#endif\\n\\n\t#ifdef DOUBLE_SIDED\\n\\n\t\tfloat flipNormal = ( -1.0 + 2.0 * float( gl_FrontFacing ) );\\n\t\tvec4 cubeColor = textureCube( envMap, flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\\n\\n\t#else\\n\\n\t\tvec4 cubeColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\\n\\n\t#endif\\n\\n\t#ifdef GAMMA_INPUT\\n\\n\t\tcubeColor.xyz *= cubeColor.xyz;\\n\\n\t#endif\\n\\n\tif ( combine == 1 ) {\\n\\n\t\tgl_FragColor.xyz = mix( gl_FragColor.xyz, cubeColor.xyz, specularStrength * reflectivity );\\n\\n\t} else if ( combine == 2 ) {\\n\\n\t\tgl_FragColor.xyz += cubeColor.xyz * specularStrength * reflectivity;\\n\\n\t} else {\\n\\n\t\tgl_FragColor.xyz = mix( gl_FragColor.xyz, gl_FragColor.xyz * cubeColor.xyz, specularStrength * reflectivity );\\n\\n\t}\\n\\n#endif\";THREE.ShaderChunk['specularmap_pars_fragment']=\"#ifdef USE_SPECULARMAP\\n\\n\tuniform sampler2D specularMap;\\n\\n#endif\";THREE.ShaderChunk['logdepthbuf_vertex']=\"#ifdef USE_LOGDEPTHBUF\\n\\n\tgl_Position.z = log2(max(1e-6, gl_Position.w + 1.0)) * logDepthBufFC;\\n\\n\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\n\t\tvFragDepth = 1.0 + gl_Position.w;\\n\\n#else\\n\\n\t\tgl_Position.z = (gl_Position.z - 1.0) * gl_Position.w;\\n\\n\t#endif\\n\\n#endif\";THREE.ShaderChunk['morphtarget_pars_vertex']=\"#ifdef USE_MORPHTARGETS\\n\\n\t#ifndef USE_MORPHNORMALS\\n\\n\tuniform float morphTargetInfluences[ 8 ];\\n\\n\t#else\\n\\n\tuniform float morphTargetInfluences[ 4 ];\\n\\n\t#endif\\n\\n#endif\";THREE.ShaderChunk['specularmap_fragment']=\"float specularStrength;\\n\\n#ifdef USE_SPECULARMAP\\n\\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\\n\tspecularStrength = texelSpecular.r;\\n\\n#else\\n\\n\tspecularStrength = 1.0;\\n\\n#endif\";THREE.ShaderChunk['fog_fragment']=\"#ifdef USE_FOG\\n\\n\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\n\t\tfloat depth = gl_FragDepthEXT / gl_FragCoord.w;\\n\\n\t#else\\n\\n\t\tfloat depth = gl_FragCoord.z / gl_FragCoord.w;\\n\\n\t#endif\\n\\n\t#ifdef FOG_EXP2\\n\\n\t\tconst float LOG2 = 1.442695;\\n\t\tfloat fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\\n\t\tfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\\n\\n\t#else\\n\\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, depth );\\n\\n\t#endif\\n\t\\n\tgl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\\n\\n#endif\";THREE.ShaderChunk['bumpmap_pars_fragment']=\"#ifdef USE_BUMPMAP\\n\\n\tuniform sampler2D bumpMap;\\n\tuniform float bumpScale;\\n\\n\t\t\t// Derivative maps - bump mapping unparametrized surfaces by Morten Mikkelsen\\n\t\t\t//\thttp://mmikkelsen3d.blogspot.sk/2011/07/derivative-maps.html\\n\\n\t\t\t// Evaluate the derivative of the height w.r.t. screen-space using forward differencing (listing 2)\\n\\n\tvec2 dHdxy_fwd() {\\n\\n\t\tvec2 dSTdx = dFdx( vUv );\\n\t\tvec2 dSTdy = dFdy( vUv );\\n\\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\\n\\n\t\treturn vec2( dBx, dBy );\\n\\n\t}\\n\\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\\n\\n\t\tvec3 vSigmaX = dFdx( surf_pos );\\n\t\tvec3 vSigmaY = dFdy( surf_pos );\\n\t\tvec3 vN = surf_norm;\t\t// normalized\\n\\n\t\tvec3 R1 = cross( vSigmaY, vN );\\n\t\tvec3 R2 = cross( vN, vSigmaX );\\n\\n\t\tfloat fDet = dot( vSigmaX, R1 );\\n\\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\\n\\n\t}\\n\\n#endif\";THREE.ShaderChunk['defaultnormal_vertex']=\"vec3 objectNormal;\\n\\n#ifdef USE_SKINNING\\n\\n\tobjectNormal = skinnedNormal.xyz;\\n\\n#endif\\n\\n#if !defined( USE_SKINNING ) && defined( USE_MORPHNORMALS )\\n\\n\tobjectNormal = morphedNormal;\\n\\n#endif\\n\\n#if !defined( USE_SKINNING ) && ! defined( USE_MORPHNORMALS )\\n\\n\tobjectNormal = normal;\\n\\n#endif\\n\\n#ifdef FLIP_SIDED\\n\\n\tobjectNormal = -objectNormal;\\n\\n#endif\\n\\nvec3 transformedNormal = normalMatrix * objectNormal;\";THREE.ShaderChunk['lights_phong_pars_fragment']=\"uniform vec3 ambientLightColor;\\n\\n#if MAX_DIR_LIGHTS > 0\\n\\n\tuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\\n\tuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\\n\\n#endif\\n\\n#if MAX_HEMI_LIGHTS > 0\\n\\n\tuniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];\\n\tuniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];\\n\tuniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];\\n\\n#endif\\n\\n#if MAX_POINT_LIGHTS > 0\\n\\n\tuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\\n\\n\tuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\\n\tuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\\n\\n#endif\\n\\n#if MAX_SPOT_LIGHTS > 0\\n\\n\tuniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];\\n\tuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];\\n\tuniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];\\n\tuniform float spotLightAngleCos[ MAX_SPOT_LIGHTS ];\\n\tuniform float spotLightExponent[ MAX_SPOT_LIGHTS ];\\n\\n\tuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];\\n\\n#endif\\n\\n#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP ) || defined( USE_ENVMAP )\\n\\n\tvarying vec3 vWorldPosition;\\n\\n#endif\\n\\n#ifdef WRAP_AROUND\\n\\n\tuniform vec3 wrapRGB;\\n\\n#endif\\n\\nvarying vec3 vViewPosition;\\nvarying vec3 vNormal;\";THREE.ShaderChunk['skinbase_vertex']=\"#ifdef USE_SKINNING\\n\\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\\n\\n#endif\";THREE.ShaderChunk['map_vertex']=\"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP )\\n\\n\tvUv = uv * offsetRepeat.zw + offsetRepeat.xy;\\n\\n#endif\";THREE.ShaderChunk['lightmap_fragment']=\"#ifdef USE_LIGHTMAP\\n\\n\tgl_FragColor = gl_FragColor * texture2D( lightMap, vUv2 );\\n\\n#endif\";THREE.ShaderChunk['shadowmap_pars_vertex']=\"#ifdef USE_SHADOWMAP\\n\\n\tvarying vec4 vShadowCoord[ MAX_SHADOWS ];\\n\tuniform mat4 shadowMatrix[ MAX_SHADOWS ];\\n\\n#endif\";THREE.ShaderChunk['color_fragment']=\"#ifdef USE_COLOR\\n\\n\tgl_FragColor = gl_FragColor * vec4( vColor, 1.0 );\\n\\n#endif\";THREE.ShaderChunk['morphtarget_vertex']=\"#ifdef USE_MORPHTARGETS\\n\\n\tvec3 morphed = vec3( 0.0 );\\n\tmorphed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\\n\tmorphed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\\n\tmorphed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\\n\tmorphed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\\n\\n\t#ifndef USE_MORPHNORMALS\\n\\n\tmorphed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\\n\tmorphed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\\n\tmorphed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\\n\tmorphed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\\n\\n\t#endif\\n\\n\tmorphed += position;\\n\\n#endif\";THREE.ShaderChunk['envmap_vertex']=\"#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP ) && ! defined( PHONG )\\n\\n\tvec3 worldNormal = mat3( modelMatrix[ 0 ].xyz, modelMatrix[ 1 ].xyz, modelMatrix[ 2 ].xyz ) * objectNormal;\\n\tworldNormal = normalize( worldNormal );\\n\\n\tvec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\\n\\n\tif ( useRefract ) {\\n\\n\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\\n\\n\t} else {\\n\\n\t\tvReflect = reflect( cameraToVertex, worldNormal );\\n\\n\t}\\n\\n#endif\";THREE.ShaderChunk['shadowmap_fragment']=\"#ifdef USE_SHADOWMAP\\n\\n\t#ifdef SHADOWMAP_DEBUG\\n\\n\t\tvec3 frustumColors[3];\\n\t\tfrustumColors[0] = vec3( 1.0, 0.5, 0.0 );\\n\t\tfrustumColors[1] = vec3( 0.0, 1.0, 0.8 );\\n\t\tfrustumColors[2] = vec3( 0.0, 0.5, 1.0 );\\n\\n\t#endif\\n\\n\t#ifdef SHADOWMAP_CASCADE\\n\\n\t\tint inFrustumCount = 0;\\n\\n\t#endif\\n\\n\tfloat fDepth;\\n\tvec3 shadowColor = vec3( 1.0 );\\n\\n\tfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\\n\\n\t\tvec3 shadowCoord = vShadowCoord[ i ].xyz / vShadowCoord[ i ].w;\\n\\n\t\t\t\t// if ( something && something ) breaks ATI OpenGL shader compiler\\n\t\t\t\t// if ( all( something, something ) ) using this instead\\n\\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\\n\t\tbool inFrustum = all( inFrustumVec );\\n\\n\t\t\t\t// don't shadow pixels outside of light frustum\\n\t\t\t\t// use just first frustum (for cascades)\\n\t\t\t\t// don't shadow pixels behind far plane of light frustum\\n\\n\t\t#ifdef SHADOWMAP_CASCADE\\n\\n\t\t\tinFrustumCount += int( inFrustum );\\n\t\t\tbvec3 frustumTestVec = bvec3( inFrustum, inFrustumCount == 1, shadowCoord.z <= 1.0 );\\n\\n\t\t#else\\n\\n\t\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\\n\\n\t\t#endif\\n\\n\t\tbool frustumTest = all( frustumTestVec );\\n\\n\t\tif ( frustumTest ) {\\n\\n\t\t\tshadowCoord.z += shadowBias[ i ];\\n\\n\t\t\t#if defined( SHADOWMAP_TYPE_PCF )\\n\\n\t\t\t\t\t\t// Percentage-close filtering\\n\t\t\t\t\t\t// (9 pixel kernel)\\n\t\t\t\t\t\t// http://fabiensanglard.net/shadowmappingPCF/\\n\\n\t\t\t\tfloat shadow = 0.0;\\n\\n\t\t/*\\n\t\t\t\t\t\t// nested loops breaks shader compiler / validator on some ATI cards when using OpenGL\\n\t\t\t\t\t\t// must enroll loop manually\\n\\n\t\t\t\tfor ( float y = -1.25; y <= 1.25; y += 1.25 )\\n\t\t\t\t\tfor ( float x = -1.25; x <= 1.25; x += 1.25 ) {\\n\\n\t\t\t\t\t\tvec4 rgbaDepth = texture2D( shadowMap[ i ], vec2( x * xPixelOffset, y * yPixelOffset ) + shadowCoord.xy );\\n\\n\t\t\t\t\t\t\t\t// doesn't seem to produce any noticeable visual difference compared to simple texture2D lookup\\n\t\t\t\t\t\t\t\t//vec4 rgbaDepth = texture2DProj( shadowMap[ i ], vec4( vShadowCoord[ i ].w * ( vec2( x * xPixelOffset, y * yPixelOffset ) + shadowCoord.xy ), 0.05, vShadowCoord[ i ].w ) );\\n\\n\t\t\t\t\t\tfloat fDepth = unpackDepth( rgbaDepth );\\n\\n\t\t\t\t\t\tif ( fDepth < shadowCoord.z )\\n\t\t\t\t\t\t\tshadow += 1.0;\\n\\n\t\t\t\t}\\n\\n\t\t\t\tshadow /= 9.0;\\n\\n\t\t*/\\n\\n\t\t\t\tconst float shadowDelta = 1.0 / 9.0;\\n\\n\t\t\t\tfloat xPixelOffset = 1.0 / shadowMapSize[ i ].x;\\n\t\t\t\tfloat yPixelOffset = 1.0 / shadowMapSize[ i ].y;\\n\\n\t\t\t\tfloat dx0 = -1.25 * xPixelOffset;\\n\t\t\t\tfloat dy0 = -1.25 * yPixelOffset;\\n\t\t\t\tfloat dx1 = 1.25 * xPixelOffset;\\n\t\t\t\tfloat dy1 = 1.25 * yPixelOffset;\\n\\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy0 ) ) );\\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\\n\\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy0 ) ) );\\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\\n\\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy0 ) ) );\\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\\n\\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, 0.0 ) ) );\\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\\n\\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy ) );\\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\\n\\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, 0.0 ) ) );\\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\\n\\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy1 ) ) );\\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\\n\\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy1 ) ) );\\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\\n\\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy1 ) ) );\\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\\n\\n\t\t\t\tshadowColor = shadowColor * vec3( ( 1.0 - shadowDarkness[ i ] * shadow ) );\\n\\n\t\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\\n\\n\t\t\t\t\t\t// Percentage-close filtering\\n\t\t\t\t\t\t// (9 pixel kernel)\\n\t\t\t\t\t\t// http://fabiensanglard.net/shadowmappingPCF/\\n\\n\t\t\t\tfloat shadow = 0.0;\\n\\n\t\t\t\tfloat xPixelOffset = 1.0 / shadowMapSize[ i ].x;\\n\t\t\t\tfloat yPixelOffset = 1.0 / shadowMapSize[ i ].y;\\n\\n\t\t\t\tfloat dx0 = -1.0 * xPixelOffset;\\n\t\t\t\tfloat dy0 = -1.0 * yPixelOffset;\\n\t\t\t\tfloat dx1 = 1.0 * xPixelOffset;\\n\t\t\t\tfloat dy1 = 1.0 * yPixelOffset;\\n\\n\t\t\t\tmat3 shadowKernel;\\n\t\t\t\tmat3 depthKernel;\\n\\n\t\t\t\tdepthKernel[0][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy0 ) ) );\\n\t\t\t\tdepthKernel[0][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, 0.0 ) ) );\\n\t\t\t\tdepthKernel[0][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy1 ) ) );\\n\t\t\t\tdepthKernel[1][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy0 ) ) );\\n\t\t\t\tdepthKernel[1][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy ) );\\n\t\t\t\tdepthKernel[1][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy1 ) ) );\\n\t\t\t\tdepthKernel[2][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy0 ) ) );\\n\t\t\t\tdepthKernel[2][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, 0.0 ) ) );\\n\t\t\t\tdepthKernel[2][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy1 ) ) );\\n\\n\t\t\t\tvec3 shadowZ = vec3( shadowCoord.z );\\n\t\t\t\tshadowKernel[0] = vec3(lessThan(depthKernel[0], shadowZ ));\\n\t\t\t\tshadowKernel[0] *= vec3(0.25);\\n\\n\t\t\t\tshadowKernel[1] = vec3(lessThan(depthKernel[1], shadowZ ));\\n\t\t\t\tshadowKernel[1] *= vec3(0.25);\\n\\n\t\t\t\tshadowKernel[2] = vec3(lessThan(depthKernel[2], shadowZ ));\\n\t\t\t\tshadowKernel[2] *= vec3(0.25);\\n\\n\t\t\t\tvec2 fractionalCoord = 1.0 - fract( shadowCoord.xy * shadowMapSize[i].xy );\\n\\n\t\t\t\tshadowKernel[0] = mix( shadowKernel[1], shadowKernel[0], fractionalCoord.x );\\n\t\t\t\tshadowKernel[1] = mix( shadowKernel[2], shadowKernel[1], fractionalCoord.x );\\n\\n\t\t\t\tvec4 shadowValues;\\n\t\t\t\tshadowValues.x = mix( shadowKernel[0][1], shadowKernel[0][0], fractionalCoord.y );\\n\t\t\t\tshadowValues.y = mix( shadowKernel[0][2], shadowKernel[0][1], fractionalCoord.y );\\n\t\t\t\tshadowValues.z = mix( shadowKernel[1][1], shadowKernel[1][0], fractionalCoord.y );\\n\t\t\t\tshadowValues.w = mix( shadowKernel[1][2], shadowKernel[1][1], fractionalCoord.y );\\n\\n\t\t\t\tshadow = dot( shadowValues, vec4( 1.0 ) );\\n\\n\t\t\t\tshadowColor = shadowColor * vec3( ( 1.0 - shadowDarkness[ i ] * shadow ) );\\n\\n\t\t\t#else\\n\\n\t\t\t\tvec4 rgbaDepth = texture2D( shadowMap[ i ], shadowCoord.xy );\\n\t\t\t\tfloat fDepth = unpackDepth( rgbaDepth );\\n\\n\t\t\t\tif ( fDepth < shadowCoord.z )\\n\\n\t\t// spot with multiple shadows is darker\\n\\n\t\t\t\t\tshadowColor = shadowColor * vec3( 1.0 - shadowDarkness[ i ] );\\n\\n\t\t// spot with multiple shadows has the same color as single shadow spot\\n\\n\t\t// \t\t\t\t\tshadowColor = min( shadowColor, vec3( shadowDarkness[ i ] ) );\\n\\n\t\t\t#endif\\n\\n\t\t}\\n\\n\\n\t\t#ifdef SHADOWMAP_DEBUG\\n\\n\t\t\t#ifdef SHADOWMAP_CASCADE\\n\\n\t\t\t\tif ( inFrustum && inFrustumCount == 1 ) gl_FragColor.xyz *= frustumColors[ i ];\\n\\n\t\t\t#else\\n\\n\t\t\t\tif ( inFrustum ) gl_FragColor.xyz *= frustumColors[ i ];\\n\\n\t\t\t#endif\\n\\n\t\t#endif\\n\\n\t}\\n\\n\t#ifdef GAMMA_OUTPUT\\n\\n\t\tshadowColor *= shadowColor;\\n\\n\t#endif\\n\\n\tgl_FragColor.xyz = gl_FragColor.xyz * shadowColor;\\n\\n#endif\\n\";THREE.ShaderChunk['worldpos_vertex']=\"#if defined( USE_ENVMAP ) || defined( PHONG ) || defined( LAMBERT ) || defined ( USE_SHADOWMAP )\\n\\n\t#ifdef USE_SKINNING\\n\\n\t\tvec4 worldPosition = modelMatrix * skinned;\\n\\n\t#endif\\n\\n\t#if defined( USE_MORPHTARGETS ) && ! defined( USE_SKINNING )\\n\\n\t\tvec4 worldPosition = modelMatrix * vec4( morphed, 1.0 );\\n\\n\t#endif\\n\\n\t#if ! defined( USE_MORPHTARGETS ) && ! defined( USE_SKINNING )\\n\\n\t\tvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\\n\\n\t#endif\\n\\n#endif\";THREE.ShaderChunk['shadowmap_pars_fragment']=\"#ifdef USE_SHADOWMAP\\n\\n\tuniform sampler2D shadowMap[ MAX_SHADOWS ];\\n\tuniform vec2 shadowMapSize[ MAX_SHADOWS ];\\n\\n\tuniform float shadowDarkness[ MAX_SHADOWS ];\\n\tuniform float shadowBias[ MAX_SHADOWS ];\\n\\n\tvarying vec4 vShadowCoord[ MAX_SHADOWS ];\\n\\n\tfloat unpackDepth( const in vec4 rgba_depth ) {\\n\\n\t\tconst vec4 bit_shift = vec4( 1.0 / ( 256.0 * 256.0 * 256.0 ), 1.0 / ( 256.0 * 256.0 ), 1.0 / 256.0, 1.0 );\\n\t\tfloat depth = dot( rgba_depth, bit_shift );\\n\t\treturn depth;\\n\\n\t}\\n\\n#endif\";THREE.ShaderChunk['skinning_pars_vertex']=\"#ifdef USE_SKINNING\\n\\n\tuniform mat4 bindMatrix;\\n\tuniform mat4 bindMatrixInverse;\\n\\n\t#ifdef BONE_TEXTURE\\n\\n\t\tuniform sampler2D boneTexture;\\n\t\tuniform int boneTextureWidth;\\n\t\tuniform int boneTextureHeight;\\n\\n\t\tmat4 getBoneMatrix( const in float i ) {\\n\\n\t\t\tfloat j = i * 4.0;\\n\t\t\tfloat x = mod( j, float( boneTextureWidth ) );\\n\t\t\tfloat y = floor( j / float( boneTextureWidth ) );\\n\\n\t\t\tfloat dx = 1.0 / float( boneTextureWidth );\\n\t\t\tfloat dy = 1.0 / float( boneTextureHeight );\\n\\n\t\t\ty = dy * ( y + 0.5 );\\n\\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\\n\\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\\n\\n\t\t\treturn bone;\\n\\n\t\t}\\n\\n\t#else\\n\\n\t\tuniform mat4 boneGlobalMatrices[ MAX_BONES ];\\n\\n\t\tmat4 getBoneMatrix( const in float i ) {\\n\\n\t\t\tmat4 bone = boneGlobalMatrices[ int(i) ];\\n\t\t\treturn bone;\\n\\n\t\t}\\n\\n\t#endif\\n\\n#endif\\n\";THREE.ShaderChunk['logdepthbuf_pars_fragment']=\"#ifdef USE_LOGDEPTHBUF\\n\\n\tuniform float logDepthBufFC;\\n\\n\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\n\t\t#extension GL_EXT_frag_depth : enable\\n\t\tvarying float vFragDepth;\\n\\n\t#endif\\n\\n#endif\";THREE.ShaderChunk['alphamap_fragment']=\"#ifdef USE_ALPHAMAP\\n\\n\tgl_FragColor.a *= texture2D( alphaMap, vUv ).g;\\n\\n#endif\\n\";THREE.ShaderChunk['alphamap_pars_fragment']=\"#ifdef USE_ALPHAMAP\\n\\n\tuniform sampler2D alphaMap;\\n\\n#endif\\n\";THREE.UniformsUtils={merge:function merge(uniforms){var merged={};for(var u=0;u dashSize ) {\",\"\t\tdiscard;\",\"\t}\",\"\tgl_FragColor = vec4( diffuse, opacity );\",THREE.ShaderChunk[\"logdepthbuf_fragment\"],THREE.ShaderChunk[\"color_fragment\"],THREE.ShaderChunk[\"fog_fragment\"],\"}\"].join(\"\\n\")},'depth':{uniforms:{\"mNear\":{type:\"f\",value:1.0},\"mFar\":{type:\"f\",value:2000.0},\"opacity\":{type:\"f\",value:1.0}},vertexShader:[THREE.ShaderChunk[\"morphtarget_pars_vertex\"],THREE.ShaderChunk[\"logdepthbuf_pars_vertex\"],\"void main() {\",THREE.ShaderChunk[\"morphtarget_vertex\"],THREE.ShaderChunk[\"default_vertex\"],THREE.ShaderChunk[\"logdepthbuf_vertex\"],\"}\"].join(\"\\n\"),fragmentShader:[\"uniform float mNear;\",\"uniform float mFar;\",\"uniform float opacity;\",THREE.ShaderChunk[\"logdepthbuf_pars_fragment\"],\"void main() {\",THREE.ShaderChunk[\"logdepthbuf_fragment\"],\"\t#ifdef USE_LOGDEPTHBUF_EXT\",\"\t\tfloat depth = gl_FragDepthEXT / gl_FragCoord.w;\",\"\t#else\",\"\t\tfloat depth = gl_FragCoord.z / gl_FragCoord.w;\",\"\t#endif\",\"\tfloat color = 1.0 - smoothstep( mNear, mFar, depth );\",\"\tgl_FragColor = vec4( vec3( color ), opacity );\",\"}\"].join(\"\\n\")},'normal':{uniforms:{\"opacity\":{type:\"f\",value:1.0}},vertexShader:[\"varying vec3 vNormal;\",THREE.ShaderChunk[\"morphtarget_pars_vertex\"],THREE.ShaderChunk[\"logdepthbuf_pars_vertex\"],\"void main() {\",\"\tvNormal = normalize( normalMatrix * normal );\",THREE.ShaderChunk[\"morphtarget_vertex\"],THREE.ShaderChunk[\"default_vertex\"],THREE.ShaderChunk[\"logdepthbuf_vertex\"],\"}\"].join(\"\\n\"),fragmentShader:[\"uniform float opacity;\",\"varying vec3 vNormal;\",THREE.ShaderChunk[\"logdepthbuf_pars_fragment\"],\"void main() {\",\"\tgl_FragColor = vec4( 0.5 * normalize( vNormal ) + 0.5, opacity );\",THREE.ShaderChunk[\"logdepthbuf_fragment\"],\"}\"].join(\"\\n\")},'normalmap':{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib[\"fog\"],THREE.UniformsLib[\"lights\"],THREE.UniformsLib[\"shadowmap\"],{\"enableAO\":{type:\"i\",value:0},\"enableDiffuse\":{type:\"i\",value:0},\"enableSpecular\":{type:\"i\",value:0},\"enableReflection\":{type:\"i\",value:0},\"enableDisplacement\":{type:\"i\",value:0},\"tDisplacement\":{type:\"t\",value:null},\"tDiffuse\":{type:\"t\",value:null},\"tCube\":{type:\"t\",value:null},\"tNormal\":{type:\"t\",value:null},\"tSpecular\":{type:\"t\",value:null},\"tAO\":{type:\"t\",value:null},\"uNormalScale\":{type:\"v2\",value:new THREE.Vector2(1,1)},\"uDisplacementBias\":{type:\"f\",value:0.0},\"uDisplacementScale\":{type:\"f\",value:1.0},\"diffuse\":{type:\"c\",value:new THREE.Color(0xffffff)},\"specular\":{type:\"c\",value:new THREE.Color(0x111111)},\"ambient\":{type:\"c\",value:new THREE.Color(0xffffff)},\"shininess\":{type:\"f\",value:30},\"opacity\":{type:\"f\",value:1},\"useRefract\":{type:\"i\",value:0},\"refractionRatio\":{type:\"f\",value:0.98},\"reflectivity\":{type:\"f\",value:0.5},\"uOffset\":{type:\"v2\",value:new THREE.Vector2(0,0)},\"uRepeat\":{type:\"v2\",value:new THREE.Vector2(1,1)},\"wrapRGB\":{type:\"v3\",value:new THREE.Vector3(1,1,1)}}]),fragmentShader:[\"uniform vec3 ambient;\",\"uniform vec3 diffuse;\",\"uniform vec3 specular;\",\"uniform float shininess;\",\"uniform float opacity;\",\"uniform bool enableDiffuse;\",\"uniform bool enableSpecular;\",\"uniform bool enableAO;\",\"uniform bool enableReflection;\",\"uniform sampler2D tDiffuse;\",\"uniform sampler2D tNormal;\",\"uniform sampler2D tSpecular;\",\"uniform sampler2D tAO;\",\"uniform samplerCube tCube;\",\"uniform vec2 uNormalScale;\",\"uniform bool useRefract;\",\"uniform float refractionRatio;\",\"uniform float reflectivity;\",\"varying vec3 vTangent;\",\"varying vec3 vBinormal;\",\"varying vec3 vNormal;\",\"varying vec2 vUv;\",\"uniform vec3 ambientLightColor;\",\"#if MAX_DIR_LIGHTS > 0\",\"\tuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\",\"\tuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\",\"#endif\",\"#if MAX_HEMI_LIGHTS > 0\",\"\tuniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];\",\"\tuniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];\",\"\tuniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];\",\"#endif\",\"#if MAX_POINT_LIGHTS > 0\",\"\tuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\",\"\tuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\",\"\tuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\",\"#endif\",\"#if MAX_SPOT_LIGHTS > 0\",\"\tuniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];\",\"\tuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];\",\"\tuniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];\",\"\tuniform float spotLightAngleCos[ MAX_SPOT_LIGHTS ];\",\"\tuniform float spotLightExponent[ MAX_SPOT_LIGHTS ];\",\"\tuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];\",\"#endif\",\"#ifdef WRAP_AROUND\",\"\tuniform vec3 wrapRGB;\",\"#endif\",\"varying vec3 vWorldPosition;\",\"varying vec3 vViewPosition;\",THREE.ShaderChunk[\"shadowmap_pars_fragment\"],THREE.ShaderChunk[\"fog_pars_fragment\"],THREE.ShaderChunk[\"logdepthbuf_pars_fragment\"],\"void main() {\",THREE.ShaderChunk[\"logdepthbuf_fragment\"],\"\tgl_FragColor = vec4( vec3( 1.0 ), opacity );\",\"\tvec3 specularTex = vec3( 1.0 );\",\"\tvec3 normalTex = texture2D( tNormal, vUv ).xyz * 2.0 - 1.0;\",\"\tnormalTex.xy *= uNormalScale;\",\"\tnormalTex = normalize( normalTex );\",\"\tif( enableDiffuse ) {\",\"\t\t#ifdef GAMMA_INPUT\",\"\t\t\tvec4 texelColor = texture2D( tDiffuse, vUv );\",\"\t\t\ttexelColor.xyz *= texelColor.xyz;\",\"\t\t\tgl_FragColor = gl_FragColor * texelColor;\",\"\t\t#else\",\"\t\t\tgl_FragColor = gl_FragColor * texture2D( tDiffuse, vUv );\",\"\t\t#endif\",\"\t}\",\"\tif( enableAO ) {\",\"\t\t#ifdef GAMMA_INPUT\",\"\t\t\tvec4 aoColor = texture2D( tAO, vUv );\",\"\t\t\taoColor.xyz *= aoColor.xyz;\",\"\t\t\tgl_FragColor.xyz = gl_FragColor.xyz * aoColor.xyz;\",\"\t\t#else\",\"\t\t\tgl_FragColor.xyz = gl_FragColor.xyz * texture2D( tAO, vUv ).xyz;\",\"\t\t#endif\",\"\t}\",THREE.ShaderChunk[\"alphatest_fragment\"],\"\tif( enableSpecular )\",\"\t\tspecularTex = texture2D( tSpecular, vUv ).xyz;\",\"\tmat3 tsb = mat3( normalize( vTangent ), normalize( vBinormal ), normalize( vNormal ) );\",\"\tvec3 finalNormal = tsb * normalTex;\",\"\t#ifdef FLIP_SIDED\",\"\t\tfinalNormal = -finalNormal;\",\"\t#endif\",\"\tvec3 normal = normalize( finalNormal );\",\"\tvec3 viewPosition = normalize( vViewPosition );\",\"\t#if MAX_POINT_LIGHTS > 0\",\"\t\tvec3 pointDiffuse = vec3( 0.0 );\",\"\t\tvec3 pointSpecular = vec3( 0.0 );\",\"\t\tfor ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\",\"\t\t\tvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\",\"\t\t\tvec3 pointVector = lPosition.xyz + vViewPosition.xyz;\",\"\t\t\tfloat pointDistance = 1.0;\",\"\t\t\tif ( pointLightDistance[ i ] > 0.0 )\",\"\t\t\t\tpointDistance = 1.0 - min( ( length( pointVector ) / pointLightDistance[ i ] ), 1.0 );\",\"\t\t\tpointVector = normalize( pointVector );\",\"\t\t\t#ifdef WRAP_AROUND\",\"\t\t\t\tfloat pointDiffuseWeightFull = max( dot( normal, pointVector ), 0.0 );\",\"\t\t\t\tfloat pointDiffuseWeightHalf = max( 0.5 * dot( normal, pointVector ) + 0.5, 0.0 );\",\"\t\t\t\tvec3 pointDiffuseWeight = mix( vec3( pointDiffuseWeightFull ), vec3( pointDiffuseWeightHalf ), wrapRGB );\",\"\t\t\t#else\",\"\t\t\t\tfloat pointDiffuseWeight = max( dot( normal, pointVector ), 0.0 );\",\"\t\t\t#endif\",\"\t\t\tpointDiffuse += pointDistance * pointLightColor[ i ] * diffuse * pointDiffuseWeight;\",\"\t\t\tvec3 pointHalfVector = normalize( pointVector + viewPosition );\",\"\t\t\tfloat pointDotNormalHalf = max( dot( normal, pointHalfVector ), 0.0 );\",\"\t\t\tfloat pointSpecularWeight = specularTex.r * max( pow( pointDotNormalHalf, shininess ), 0.0 );\",\"\t\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;\",\"\t\t\tvec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( pointVector, pointHalfVector ), 0.0 ), 5.0 );\",\"\t\t\tpointSpecular += schlick * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * pointDistance * specularNormalization;\",\"\t\t}\",\"\t#endif\",\"\t#if MAX_SPOT_LIGHTS > 0\",\"\t\tvec3 spotDiffuse = vec3( 0.0 );\",\"\t\tvec3 spotSpecular = vec3( 0.0 );\",\"\t\tfor ( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\",\"\t\t\tvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );\",\"\t\t\tvec3 spotVector = lPosition.xyz + vViewPosition.xyz;\",\"\t\t\tfloat spotDistance = 1.0;\",\"\t\t\tif ( spotLightDistance[ i ] > 0.0 )\",\"\t\t\t\tspotDistance = 1.0 - min( ( length( spotVector ) / spotLightDistance[ i ] ), 1.0 );\",\"\t\t\tspotVector = normalize( spotVector );\",\"\t\t\tfloat spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - vWorldPosition ) );\",\"\t\t\tif ( spotEffect > spotLightAngleCos[ i ] ) {\",\"\t\t\t\tspotEffect = max( pow( max( spotEffect, 0.0 ), spotLightExponent[ i ] ), 0.0 );\",\"\t\t\t\t#ifdef WRAP_AROUND\",\"\t\t\t\t\tfloat spotDiffuseWeightFull = max( dot( normal, spotVector ), 0.0 );\",\"\t\t\t\t\tfloat spotDiffuseWeightHalf = max( 0.5 * dot( normal, spotVector ) + 0.5, 0.0 );\",\"\t\t\t\t\tvec3 spotDiffuseWeight = mix( vec3( spotDiffuseWeightFull ), vec3( spotDiffuseWeightHalf ), wrapRGB );\",\"\t\t\t\t#else\",\"\t\t\t\t\tfloat spotDiffuseWeight = max( dot( normal, spotVector ), 0.0 );\",\"\t\t\t\t#endif\",\"\t\t\t\tspotDiffuse += spotDistance * spotLightColor[ i ] * diffuse * spotDiffuseWeight * spotEffect;\",\"\t\t\t\tvec3 spotHalfVector = normalize( spotVector + viewPosition );\",\"\t\t\t\tfloat spotDotNormalHalf = max( dot( normal, spotHalfVector ), 0.0 );\",\"\t\t\t\tfloat spotSpecularWeight = specularTex.r * max( pow( spotDotNormalHalf, shininess ), 0.0 );\",\"\t\t\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;\",\"\t\t\t\tvec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( spotVector, spotHalfVector ), 0.0 ), 5.0 );\",\"\t\t\t\tspotSpecular += schlick * spotLightColor[ i ] * spotSpecularWeight * spotDiffuseWeight * spotDistance * specularNormalization * spotEffect;\",\"\t\t\t}\",\"\t\t}\",\"\t#endif\",\"\t#if MAX_DIR_LIGHTS > 0\",\"\t\tvec3 dirDiffuse = vec3( 0.0 );\",\"\t\tvec3 dirSpecular = vec3( 0.0 );\",\"\t\tfor( int i = 0; i < MAX_DIR_LIGHTS; i++ ) {\",\"\t\t\tvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\",\"\t\t\tvec3 dirVector = normalize( lDirection.xyz );\",\"\t\t\t#ifdef WRAP_AROUND\",\"\t\t\t\tfloat directionalLightWeightingFull = max( dot( normal, dirVector ), 0.0 );\",\"\t\t\t\tfloat directionalLightWeightingHalf = max( 0.5 * dot( normal, dirVector ) + 0.5, 0.0 );\",\"\t\t\t\tvec3 dirDiffuseWeight = mix( vec3( directionalLightWeightingFull ), vec3( directionalLightWeightingHalf ), wrapRGB );\",\"\t\t\t#else\",\"\t\t\t\tfloat dirDiffuseWeight = max( dot( normal, dirVector ), 0.0 );\",\"\t\t\t#endif\",\"\t\t\tdirDiffuse += directionalLightColor[ i ] * diffuse * dirDiffuseWeight;\",\"\t\t\tvec3 dirHalfVector = normalize( dirVector + viewPosition );\",\"\t\t\tfloat dirDotNormalHalf = max( dot( normal, dirHalfVector ), 0.0 );\",\"\t\t\tfloat dirSpecularWeight = specularTex.r * max( pow( dirDotNormalHalf, shininess ), 0.0 );\",\"\t\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;\",\"\t\t\tvec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( dirVector, dirHalfVector ), 0.0 ), 5.0 );\",\"\t\t\tdirSpecular += schlick * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight * specularNormalization;\",\"\t\t}\",\"\t#endif\",\"\t#if MAX_HEMI_LIGHTS > 0\",\"\t\tvec3 hemiDiffuse = vec3( 0.0 );\",\"\t\tvec3 hemiSpecular = vec3( 0.0 );\",\"\t\tfor( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {\",\"\t\t\tvec4 lDirection = viewMatrix * vec4( hemisphereLightDirection[ i ], 0.0 );\",\"\t\t\tvec3 lVector = normalize( lDirection.xyz );\",\"\t\t\tfloat dotProduct = dot( normal, lVector );\",\"\t\t\tfloat hemiDiffuseWeight = 0.5 * dotProduct + 0.5;\",\"\t\t\tvec3 hemiColor = mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );\",\"\t\t\themiDiffuse += diffuse * hemiColor;\",\"\t\t\tvec3 hemiHalfVectorSky = normalize( lVector + viewPosition );\",\"\t\t\tfloat hemiDotNormalHalfSky = 0.5 * dot( normal, hemiHalfVectorSky ) + 0.5;\",\"\t\t\tfloat hemiSpecularWeightSky = specularTex.r * max( pow( max( hemiDotNormalHalfSky, 0.0 ), shininess ), 0.0 );\",\"\t\t\tvec3 lVectorGround = -lVector;\",\"\t\t\tvec3 hemiHalfVectorGround = normalize( lVectorGround + viewPosition );\",\"\t\t\tfloat hemiDotNormalHalfGround = 0.5 * dot( normal, hemiHalfVectorGround ) + 0.5;\",\"\t\t\tfloat hemiSpecularWeightGround = specularTex.r * max( pow( max( hemiDotNormalHalfGround, 0.0 ), shininess ), 0.0 );\",\"\t\t\tfloat dotProductGround = dot( normal, lVectorGround );\",\"\t\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;\",\"\t\t\tvec3 schlickSky = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVector, hemiHalfVectorSky ), 0.0 ), 5.0 );\",\"\t\t\tvec3 schlickGround = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVectorGround, hemiHalfVectorGround ), 0.0 ), 5.0 );\",\"\t\t\themiSpecular += hemiColor * specularNormalization * ( schlickSky * hemiSpecularWeightSky * max( dotProduct, 0.0 ) + schlickGround * hemiSpecularWeightGround * max( dotProductGround, 0.0 ) );\",\"\t\t}\",\"\t#endif\",\"\tvec3 totalDiffuse = vec3( 0.0 );\",\"\tvec3 totalSpecular = vec3( 0.0 );\",\"\t#if MAX_DIR_LIGHTS > 0\",\"\t\ttotalDiffuse += dirDiffuse;\",\"\t\ttotalSpecular += dirSpecular;\",\"\t#endif\",\"\t#if MAX_HEMI_LIGHTS > 0\",\"\t\ttotalDiffuse += hemiDiffuse;\",\"\t\ttotalSpecular += hemiSpecular;\",\"\t#endif\",\"\t#if MAX_POINT_LIGHTS > 0\",\"\t\ttotalDiffuse += pointDiffuse;\",\"\t\ttotalSpecular += pointSpecular;\",\"\t#endif\",\"\t#if MAX_SPOT_LIGHTS > 0\",\"\t\ttotalDiffuse += spotDiffuse;\",\"\t\ttotalSpecular += spotSpecular;\",\"\t#endif\",\"\t#ifdef METAL\",\"\t\tgl_FragColor.xyz = gl_FragColor.xyz * ( totalDiffuse + ambientLightColor * ambient + totalSpecular );\",\"\t#else\",\"\t\tgl_FragColor.xyz = gl_FragColor.xyz * ( totalDiffuse + ambientLightColor * ambient ) + totalSpecular;\",\"\t#endif\",\"\tif ( enableReflection ) {\",\"\t\tvec3 vReflect;\",\"\t\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\",\"\t\tif ( useRefract ) {\",\"\t\t\tvReflect = refract( cameraToVertex, normal, refractionRatio );\",\"\t\t} else {\",\"\t\t\tvReflect = reflect( cameraToVertex, normal );\",\"\t\t}\",\"\t\tvec4 cubeColor = textureCube( tCube, vec3( -vReflect.x, vReflect.yz ) );\",\"\t\t#ifdef GAMMA_INPUT\",\"\t\t\tcubeColor.xyz *= cubeColor.xyz;\",\"\t\t#endif\",\"\t\tgl_FragColor.xyz = mix( gl_FragColor.xyz, cubeColor.xyz, specularTex.r * reflectivity );\",\"\t}\",THREE.ShaderChunk[\"shadowmap_fragment\"],THREE.ShaderChunk[\"linear_to_gamma_fragment\"],THREE.ShaderChunk[\"fog_fragment\"],\"}\"].join(\"\\n\"),vertexShader:[\"attribute vec4 tangent;\",\"uniform vec2 uOffset;\",\"uniform vec2 uRepeat;\",\"uniform bool enableDisplacement;\",\"#ifdef VERTEX_TEXTURES\",\"\tuniform sampler2D tDisplacement;\",\"\tuniform float uDisplacementScale;\",\"\tuniform float uDisplacementBias;\",\"#endif\",\"varying vec3 vTangent;\",\"varying vec3 vBinormal;\",\"varying vec3 vNormal;\",\"varying vec2 vUv;\",\"varying vec3 vWorldPosition;\",\"varying vec3 vViewPosition;\",THREE.ShaderChunk[\"skinning_pars_vertex\"],THREE.ShaderChunk[\"shadowmap_pars_vertex\"],THREE.ShaderChunk[\"logdepthbuf_pars_vertex\"],\"void main() {\",THREE.ShaderChunk[\"skinbase_vertex\"],THREE.ShaderChunk[\"skinnormal_vertex\"],\"\t#ifdef USE_SKINNING\",\"\t\tvNormal = normalize( normalMatrix * skinnedNormal.xyz );\",\"\t\tvec4 skinnedTangent = skinMatrix * vec4( tangent.xyz, 0.0 );\",\"\t\tvTangent = normalize( normalMatrix * skinnedTangent.xyz );\",\"\t#else\",\"\t\tvNormal = normalize( normalMatrix * normal );\",\"\t\tvTangent = normalize( normalMatrix * tangent.xyz );\",\"\t#endif\",\"\tvBinormal = normalize( cross( vNormal, vTangent ) * tangent.w );\",\"\tvUv = uv * uRepeat + uOffset;\",\"\tvec3 displacedPosition;\",\"\t#ifdef VERTEX_TEXTURES\",\"\t\tif ( enableDisplacement ) {\",\"\t\t\tvec3 dv = texture2D( tDisplacement, uv ).xyz;\",\"\t\t\tfloat df = uDisplacementScale * dv.x + uDisplacementBias;\",\"\t\t\tdisplacedPosition = position + normalize( normal ) * df;\",\"\t\t} else {\",\"\t\t\t#ifdef USE_SKINNING\",\"\t\t\t\tvec4 skinVertex = bindMatrix * vec4( position, 1.0 );\",\"\t\t\t\tvec4 skinned = vec4( 0.0 );\",\"\t\t\t\tskinned += boneMatX * skinVertex * skinWeight.x;\",\"\t\t\t\tskinned += boneMatY * skinVertex * skinWeight.y;\",\"\t\t\t\tskinned += boneMatZ * skinVertex * skinWeight.z;\",\"\t\t\t\tskinned += boneMatW * skinVertex * skinWeight.w;\",\"\t\t\t\tskinned = bindMatrixInverse * skinned;\",\"\t\t\t\tdisplacedPosition = skinned.xyz;\",\"\t\t\t#else\",\"\t\t\t\tdisplacedPosition = position;\",\"\t\t\t#endif\",\"\t\t}\",\"\t#else\",\"\t\t#ifdef USE_SKINNING\",\"\t\t\tvec4 skinVertex = bindMatrix * vec4( position, 1.0 );\",\"\t\t\tvec4 skinned = vec4( 0.0 );\",\"\t\t\tskinned += boneMatX * skinVertex * skinWeight.x;\",\"\t\t\tskinned += boneMatY * skinVertex * skinWeight.y;\",\"\t\t\tskinned += boneMatZ * skinVertex * skinWeight.z;\",\"\t\t\tskinned += boneMatW * skinVertex * skinWeight.w;\",\"\t\t\tskinned = bindMatrixInverse * skinned;\",\"\t\t\tdisplacedPosition = skinned.xyz;\",\"\t\t#else\",\"\t\t\tdisplacedPosition = position;\",\"\t\t#endif\",\"\t#endif\",\"\tvec4 mvPosition = modelViewMatrix * vec4( displacedPosition, 1.0 );\",\"\tvec4 worldPosition = modelMatrix * vec4( displacedPosition, 1.0 );\",\"\tgl_Position = projectionMatrix * mvPosition;\",THREE.ShaderChunk[\"logdepthbuf_vertex\"],\"\tvWorldPosition = worldPosition.xyz;\",\"\tvViewPosition = -mvPosition.xyz;\",\"\t#ifdef USE_SHADOWMAP\",\"\t\tfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\",\"\t\t\tvShadowCoord[ i ] = shadowMatrix[ i ] * worldPosition;\",\"\t\t}\",\"\t#endif\",\"}\"].join(\"\\n\")},'cube':{uniforms:{\"tCube\":{type:\"t\",value:null},\"tFlip\":{type:\"f\",value:-1}},vertexShader:[\"varying vec3 vWorldPosition;\",THREE.ShaderChunk[\"logdepthbuf_pars_vertex\"],\"void main() {\",\"\tvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\",\"\tvWorldPosition = worldPosition.xyz;\",\"\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\",THREE.ShaderChunk[\"logdepthbuf_vertex\"],\"}\"].join(\"\\n\"),fragmentShader:[\"uniform samplerCube tCube;\",\"uniform float tFlip;\",\"varying vec3 vWorldPosition;\",THREE.ShaderChunk[\"logdepthbuf_pars_fragment\"],\"void main() {\",\"\tgl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );\",THREE.ShaderChunk[\"logdepthbuf_fragment\"],\"}\"].join(\"\\n\")},'depthRGBA':{uniforms:{},vertexShader:[THREE.ShaderChunk[\"morphtarget_pars_vertex\"],THREE.ShaderChunk[\"skinning_pars_vertex\"],THREE.ShaderChunk[\"logdepthbuf_pars_vertex\"],\"void main() {\",THREE.ShaderChunk[\"skinbase_vertex\"],THREE.ShaderChunk[\"morphtarget_vertex\"],THREE.ShaderChunk[\"skinning_vertex\"],THREE.ShaderChunk[\"default_vertex\"],THREE.ShaderChunk[\"logdepthbuf_vertex\"],\"}\"].join(\"\\n\"),fragmentShader:[THREE.ShaderChunk[\"logdepthbuf_pars_fragment\"],\"vec4 pack_depth( const in float depth ) {\",\"\tconst vec4 bit_shift = vec4( 256.0 * 256.0 * 256.0, 256.0 * 256.0, 256.0, 1.0 );\",\"\tconst vec4 bit_mask = vec4( 0.0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0 );\",\"\tvec4 res = mod( depth * bit_shift * vec4( 255 ), vec4( 256 ) ) / vec4( 255 );\",\"\tres -= res.xxyz * bit_mask;\",\"\treturn res;\",\"}\",\"void main() {\",THREE.ShaderChunk[\"logdepthbuf_fragment\"],\"\t#ifdef USE_LOGDEPTHBUF_EXT\",\"\t\tgl_FragData[ 0 ] = pack_depth( gl_FragDepthEXT );\",\"\t#else\",\"\t\tgl_FragData[ 0 ] = pack_depth( gl_FragCoord.z );\",\"\t#endif\",\"}\"].join(\"\\n\")}};THREE.WebGLRenderer=function(parameters){console.log('THREE.WebGLRenderer',THREE.REVISION);parameters=parameters||{};var _canvas=parameters.canvas!==undefined?parameters.canvas:document.createElement('canvas'),_context=parameters.context!==undefined?parameters.context:null,_precision=parameters.precision!==undefined?parameters.precision:'highp',_alpha=parameters.alpha!==undefined?parameters.alpha:false,_depth=parameters.depth!==undefined?parameters.depth:true,_stencil=parameters.stencil!==undefined?parameters.stencil:true,_antialias=parameters.antialias!==undefined?parameters.antialias:false,_premultipliedAlpha=parameters.premultipliedAlpha!==undefined?parameters.premultipliedAlpha:true,_preserveDrawingBuffer=parameters.preserveDrawingBuffer!==undefined?parameters.preserveDrawingBuffer:false,_logarithmicDepthBuffer=parameters.logarithmicDepthBuffer!==undefined?parameters.logarithmicDepthBuffer:false,_clearColor=new THREE.Color(0x000000),_clearAlpha=0;var lights=[];var _webglObjects={};var _webglObjectsImmediate=[];var opaqueObjects=[];var transparentObjects=[];var sprites=[];var lensFlares=[];this.domElement=_canvas;this.context=null;this.devicePixelRatio=parameters.devicePixelRatio!==undefined?parameters.devicePixelRatio:self.devicePixelRatio!==undefined?self.devicePixelRatio:1;this.autoClear=true;this.autoClearColor=true;this.autoClearDepth=true;this.autoClearStencil=true;this.sortObjects=true;this.gammaInput=false;this.gammaOutput=false;this.shadowMapEnabled=false;this.shadowMapType=THREE.PCFShadowMap;this.shadowMapCullFace=THREE.CullFaceFront;this.shadowMapDebug=false;this.shadowMapCascade=false;this.maxMorphTargets=8;this.maxMorphNormals=4;this.autoScaleCubemaps=true;this.info={memory:{programs:0,geometries:0,textures:0},render:{calls:0,vertices:0,faces:0,points:0}};var _this=this,_programs=[],_currentProgram=null,_currentFramebuffer=null,_currentMaterialId=-1,_currentGeometryGroupHash=-1,_currentCamera=null,_usedTextureUnits=0,_oldDoubleSided=-1,_oldFlipSided=-1,_oldBlending=-1,_oldBlendEquation=-1,_oldBlendSrc=-1,_oldBlendDst=-1,_oldDepthTest=-1,_oldDepthWrite=-1,_oldPolygonOffset=null,_oldPolygonOffsetFactor=null,_oldPolygonOffsetUnits=null,_oldLineWidth=null,_viewportX=0,_viewportY=0,_viewportWidth=_canvas.width,_viewportHeight=_canvas.height,_currentWidth=0,_currentHeight=0,_newAttributes=new Uint8Array(16),_enabledAttributes=new Uint8Array(16),_frustum=new THREE.Frustum(),_projScreenMatrix=new THREE.Matrix4(),_projScreenMatrixPS=new THREE.Matrix4(),_vector3=new THREE.Vector3(),_direction=new THREE.Vector3(),_lightsNeedUpdate=true,_lights={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]},spot:{length:0,colors:[],positions:[],distances:[],directions:[],anglesCos:[],exponents:[]},hemi:{length:0,skyColors:[],groundColors:[],positions:[]}};var _gl;try{var attributes={alpha:_alpha,depth:_depth,stencil:_stencil,antialias:_antialias,premultipliedAlpha:_premultipliedAlpha,preserveDrawingBuffer:_preserveDrawingBuffer};_gl=_context||_canvas.getContext('webgl',attributes)||_canvas.getContext('experimental-webgl',attributes);if(_gl===null){if(_canvas.getContext('webgl')!==null){throw'Error creating WebGL context with your selected attributes.';}else{throw'Error creating WebGL context.';}}}catch(error){console.error(error);}if(_gl.getShaderPrecisionFormat===undefined){_gl.getShaderPrecisionFormat=function(){return{'rangeMin':1,'rangeMax':1,'precision':1};};}var extensions=new THREE.WebGLExtensions(_gl);extensions.get('OES_texture_float');extensions.get('OES_texture_float_linear');extensions.get('OES_standard_derivatives');if(_logarithmicDepthBuffer){extensions.get('EXT_frag_depth');}function setDefaultGLState(){_gl.clearColor(0,0,0,1);_gl.clearDepth(1);_gl.clearStencil(0);_gl.enable(_gl.DEPTH_TEST);_gl.depthFunc(_gl.LEQUAL);_gl.frontFace(_gl.CCW);_gl.cullFace(_gl.BACK);_gl.enable(_gl.CULL_FACE);_gl.enable(_gl.BLEND);_gl.blendEquation(_gl.FUNC_ADD);_gl.blendFunc(_gl.SRC_ALPHA,_gl.ONE_MINUS_SRC_ALPHA);_gl.viewport(_viewportX,_viewportY,_viewportWidth,_viewportHeight);_gl.clearColor(_clearColor.r,_clearColor.g,_clearColor.b,_clearAlpha);}setDefaultGLState();this.context=_gl;var _maxTextures=_gl.getParameter(_gl.MAX_TEXTURE_IMAGE_UNITS);var _maxVertexTextures=_gl.getParameter(_gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS);var _maxTextureSize=_gl.getParameter(_gl.MAX_TEXTURE_SIZE);var _maxCubemapSize=_gl.getParameter(_gl.MAX_CUBE_MAP_TEXTURE_SIZE);var _supportsVertexTextures=_maxVertexTextures>0;var _supportsBoneTextures=_supportsVertexTextures&&extensions.get('OES_texture_float');var _vertexShaderPrecisionHighpFloat=_gl.getShaderPrecisionFormat(_gl.VERTEX_SHADER,_gl.HIGH_FLOAT);var _vertexShaderPrecisionMediumpFloat=_gl.getShaderPrecisionFormat(_gl.VERTEX_SHADER,_gl.MEDIUM_FLOAT);var _vertexShaderPrecisionLowpFloat=_gl.getShaderPrecisionFormat(_gl.VERTEX_SHADER,_gl.LOW_FLOAT);var _fragmentShaderPrecisionHighpFloat=_gl.getShaderPrecisionFormat(_gl.FRAGMENT_SHADER,_gl.HIGH_FLOAT);var _fragmentShaderPrecisionMediumpFloat=_gl.getShaderPrecisionFormat(_gl.FRAGMENT_SHADER,_gl.MEDIUM_FLOAT);var _fragmentShaderPrecisionLowpFloat=_gl.getShaderPrecisionFormat(_gl.FRAGMENT_SHADER,_gl.LOW_FLOAT);var getCompressedTextureFormats=function(){var array;return function(){if(array!==undefined){return array;}array=[];if(extensions.get('WEBGL_compressed_texture_pvrtc')||extensions.get('WEBGL_compressed_texture_s3tc')){var formats=_gl.getParameter(_gl.COMPRESSED_TEXTURE_FORMATS);for(var i=0;i0&&_fragmentShaderPrecisionHighpFloat.precision>0;var mediumpAvailable=_vertexShaderPrecisionMediumpFloat.precision>0&&_fragmentShaderPrecisionMediumpFloat.precision>0;if(_precision==='highp'&&!highpAvailable){if(mediumpAvailable){_precision='mediump';console.warn('THREE.WebGLRenderer: highp not supported, using mediump.');}else{_precision='lowp';console.warn('THREE.WebGLRenderer: highp and mediump not supported, using lowp.');}}if(_precision==='mediump'&&!mediumpAvailable){_precision='lowp';console.warn('THREE.WebGLRenderer: mediump not supported, using lowp.');}var shadowMapPlugin=new THREE.ShadowMapPlugin(this,lights,_webglObjects,_webglObjectsImmediate);var spritePlugin=new THREE.SpritePlugin(this,sprites);var lensFlarePlugin=new THREE.LensFlarePlugin(this,lensFlares);this.getContext=function(){return _gl;};this.supportsVertexTextures=function(){return _supportsVertexTextures;};this.supportsFloatTextures=function(){return extensions.get('OES_texture_float');};this.supportsStandardDerivatives=function(){return extensions.get('OES_standard_derivatives');};this.supportsCompressedTextureS3TC=function(){return extensions.get('WEBGL_compressed_texture_s3tc');};this.supportsCompressedTexturePVRTC=function(){return extensions.get('WEBGL_compressed_texture_pvrtc');};this.supportsBlendMinMax=function(){return extensions.get('EXT_blend_minmax');};this.getMaxAnisotropy=function(){var value;return function(){if(value!==undefined){return value;}var extension=extensions.get('EXT_texture_filter_anisotropic');value=extension!==null?_gl.getParameter(extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0;return value;};}();this.getPrecision=function(){return _precision;};this.setSize=function(width,height,updateStyle){_canvas.width=width*this.devicePixelRatio;_canvas.height=height*this.devicePixelRatio;if(updateStyle!==false){_canvas.style.width=width+'px';_canvas.style.height=height+'px';}this.setViewport(0,0,width,height);};this.setViewport=function(x,y,width,height){_viewportX=x*this.devicePixelRatio;_viewportY=y*this.devicePixelRatio;_viewportWidth=width*this.devicePixelRatio;_viewportHeight=height*this.devicePixelRatio;_gl.viewport(_viewportX,_viewportY,_viewportWidth,_viewportHeight);};this.setScissor=function(x,y,width,height){_gl.scissor(x*this.devicePixelRatio,y*this.devicePixelRatio,width*this.devicePixelRatio,height*this.devicePixelRatio);};this.enableScissorTest=function(enable){enable?_gl.enable(_gl.SCISSOR_TEST):_gl.disable(_gl.SCISSOR_TEST);};this.setClearColor=function(color,alpha){_clearColor.set(color);_clearAlpha=alpha!==undefined?alpha:1;_gl.clearColor(_clearColor.r,_clearColor.g,_clearColor.b,_clearAlpha);};this.setClearColorHex=function(hex,alpha){console.warn('THREE.WebGLRenderer: .setClearColorHex() is being removed. Use .setClearColor() instead.');this.setClearColor(hex,alpha);};this.getClearColor=function(){return _clearColor;};this.getClearAlpha=function(){return _clearAlpha;};this.clear=function(color,depth,stencil){var bits=0;if(color===undefined||color)bits|=_gl.COLOR_BUFFER_BIT;if(depth===undefined||depth)bits|=_gl.DEPTH_BUFFER_BIT;if(stencil===undefined||stencil)bits|=_gl.STENCIL_BUFFER_BIT;_gl.clear(bits);};this.clearColor=function(){_gl.clear(_gl.COLOR_BUFFER_BIT);};this.clearDepth=function(){_gl.clear(_gl.DEPTH_BUFFER_BIT);};this.clearStencil=function(){_gl.clear(_gl.STENCIL_BUFFER_BIT);};this.clearTarget=function(renderTarget,color,depth,stencil){this.setRenderTarget(renderTarget);this.clear(color,depth,stencil);};this.resetGLState=function(){_currentProgram=null;_currentCamera=null;_oldBlending=-1;_oldDepthTest=-1;_oldDepthWrite=-1;_oldDoubleSided=-1;_oldFlipSided=-1;_currentGeometryGroupHash=-1;_currentMaterialId=-1;_lightsNeedUpdate=true;};function createParticleBuffers(geometry){geometry.__webglVertexBuffer=_gl.createBuffer();geometry.__webglColorBuffer=_gl.createBuffer();_this.info.memory.geometries++;};function createLineBuffers(geometry){geometry.__webglVertexBuffer=_gl.createBuffer();geometry.__webglColorBuffer=_gl.createBuffer();geometry.__webglLineDistanceBuffer=_gl.createBuffer();_this.info.memory.geometries++;};function createMeshBuffers(geometryGroup){geometryGroup.__webglVertexBuffer=_gl.createBuffer();geometryGroup.__webglNormalBuffer=_gl.createBuffer();geometryGroup.__webglTangentBuffer=_gl.createBuffer();geometryGroup.__webglColorBuffer=_gl.createBuffer();geometryGroup.__webglUVBuffer=_gl.createBuffer();geometryGroup.__webglUV2Buffer=_gl.createBuffer();geometryGroup.__webglSkinIndicesBuffer=_gl.createBuffer();geometryGroup.__webglSkinWeightsBuffer=_gl.createBuffer();geometryGroup.__webglFaceBuffer=_gl.createBuffer();geometryGroup.__webglLineBuffer=_gl.createBuffer();var m,ml;if(geometryGroup.numMorphTargets){geometryGroup.__webglMorphTargetsBuffers=[];for(m=0,ml=geometryGroup.numMorphTargets;m1){geometryGroup.__uv2Array=new Float32Array(nvertices*2);}if(geometry.hasTangents){geometryGroup.__tangentArray=new Float32Array(nvertices*4);}if(object.geometry.skinWeights.length&&object.geometry.skinIndices.length){geometryGroup.__skinIndexArray=new Float32Array(nvertices*4);geometryGroup.__skinWeightArray=new Float32Array(nvertices*4);}var UintArray=extensions.get('OES_element_index_uint')!==null&&ntris>21845?Uint32Array:Uint16Array;geometryGroup.__typeArray=UintArray;geometryGroup.__faceArray=new UintArray(ntris*3);geometryGroup.__lineArray=new UintArray(nlines*2);var m,ml;if(geometryGroup.numMorphTargets){geometryGroup.__morphTargetsArrays=[];for(m=0,ml=geometryGroup.numMorphTargets;m0){_gl.bindBuffer(_gl.ARRAY_BUFFER,geometryGroup.__webglSkinIndicesBuffer);_gl.bufferData(_gl.ARRAY_BUFFER,skinIndexArray,hint);_gl.bindBuffer(_gl.ARRAY_BUFFER,geometryGroup.__webglSkinWeightsBuffer);_gl.bufferData(_gl.ARRAY_BUFFER,skinWeightArray,hint);}}if(dirtyColors){for(f=0,fl=chunk_faces3.length;f0){_gl.bindBuffer(_gl.ARRAY_BUFFER,geometryGroup.__webglColorBuffer);_gl.bufferData(_gl.ARRAY_BUFFER,colorArray,hint);}}if(dirtyTangents&&geometry.hasTangents){for(f=0,fl=chunk_faces3.length;f0){_gl.bindBuffer(_gl.ARRAY_BUFFER,geometryGroup.__webglUVBuffer);_gl.bufferData(_gl.ARRAY_BUFFER,uvArray,hint);}}if(dirtyUvs&&obj_uvs2){for(f=0,fl=chunk_faces3.length;f0){_gl.bindBuffer(_gl.ARRAY_BUFFER,geometryGroup.__webglUV2Buffer);_gl.bufferData(_gl.ARRAY_BUFFER,uv2Array,hint);}}if(dirtyElements){for(f=0,fl=chunk_faces3.length;f=0){var geometryAttribute=geometryAttributes[key];if(geometryAttribute!==undefined){var size=geometryAttribute.itemSize;_gl.bindBuffer(_gl.ARRAY_BUFFER,geometryAttribute.buffer);enableAttribute(programAttribute);_gl.vertexAttribPointer(programAttribute,size,_gl.FLOAT,false,0,startIndex*size*4);}else if(material.defaultAttributeValues!==undefined){if(material.defaultAttributeValues[key].length===2){_gl.vertexAttrib2fv(programAttribute,material.defaultAttributeValues[key]);}else if(material.defaultAttributeValues[key].length===3){_gl.vertexAttrib3fv(programAttribute,material.defaultAttributeValues[key]);}}}}disableUnusedAttributes();}this.renderBufferDirect=function(camera,lights,fog,material,geometry,object){if(material.visible===false)return;var program=setProgram(camera,lights,fog,material,object);var updateBuffers=false,wireframeBit=material.wireframe?1:0,geometryHash=geometry.id*0xffffff+program.id*2+wireframeBit;if(geometryHash!==_currentGeometryGroupHash){_currentGeometryGroupHash=geometryHash;updateBuffers=true;}if(updateBuffers){initAttributes();}if(object instanceof THREE.Mesh){var mode=material.wireframe===true?_gl.LINES:_gl.TRIANGLES;var index=geometry.attributes.index;if(index){var type,size;if(index.array instanceof Uint32Array&&extensions.get('OES_element_index_uint')){type=_gl.UNSIGNED_INT;size=4;}else{type=_gl.UNSIGNED_SHORT;size=2;}var offsets=geometry.offsets;if(offsets.length===0){if(updateBuffers){setupVertexAttributes(material,program,geometry,0);_gl.bindBuffer(_gl.ELEMENT_ARRAY_BUFFER,index.buffer);}_gl.drawElements(mode,index.array.length,type,0);_this.info.render.calls++;_this.info.render.vertices+=index.array.length;_this.info.render.faces+=index.array.length/3;}else{updateBuffers=true;for(var i=0,il=offsets.length;i1)updateBuffers=true;for(var i=0,il=offsets.length;i=0){if(updateBuffers){_gl.bindBuffer(_gl.ARRAY_BUFFER,geometryGroup.__webglVertexBuffer);enableAttribute(attributes.position);_gl.vertexAttribPointer(attributes.position,3,_gl.FLOAT,false,0,0);}}else{if(object.morphTargetBase){setupMorphTargets(material,geometryGroup,object);}}if(updateBuffers){if(geometryGroup.__webglCustomAttributesList){for(var i=0,il=geometryGroup.__webglCustomAttributesList.length;i=0){_gl.bindBuffer(_gl.ARRAY_BUFFER,attribute.buffer);enableAttribute(attributes[attribute.buffer.belongsToAttribute]);_gl.vertexAttribPointer(attributes[attribute.buffer.belongsToAttribute],attribute.size,_gl.FLOAT,false,0,0);}}}if(attributes.color>=0){if(object.geometry.colors.length>0||object.geometry.faces.length>0){_gl.bindBuffer(_gl.ARRAY_BUFFER,geometryGroup.__webglColorBuffer);enableAttribute(attributes.color);_gl.vertexAttribPointer(attributes.color,3,_gl.FLOAT,false,0,0);}else if(material.defaultAttributeValues!==undefined){_gl.vertexAttrib3fv(attributes.color,material.defaultAttributeValues.color);}}if(attributes.normal>=0){_gl.bindBuffer(_gl.ARRAY_BUFFER,geometryGroup.__webglNormalBuffer);enableAttribute(attributes.normal);_gl.vertexAttribPointer(attributes.normal,3,_gl.FLOAT,false,0,0);}if(attributes.tangent>=0){_gl.bindBuffer(_gl.ARRAY_BUFFER,geometryGroup.__webglTangentBuffer);enableAttribute(attributes.tangent);_gl.vertexAttribPointer(attributes.tangent,4,_gl.FLOAT,false,0,0);}if(attributes.uv>=0){if(object.geometry.faceVertexUvs[0]){_gl.bindBuffer(_gl.ARRAY_BUFFER,geometryGroup.__webglUVBuffer);enableAttribute(attributes.uv);_gl.vertexAttribPointer(attributes.uv,2,_gl.FLOAT,false,0,0);}else if(material.defaultAttributeValues!==undefined){_gl.vertexAttrib2fv(attributes.uv,material.defaultAttributeValues.uv);}}if(attributes.uv2>=0){if(object.geometry.faceVertexUvs[1]){_gl.bindBuffer(_gl.ARRAY_BUFFER,geometryGroup.__webglUV2Buffer);enableAttribute(attributes.uv2);_gl.vertexAttribPointer(attributes.uv2,2,_gl.FLOAT,false,0,0);}else if(material.defaultAttributeValues!==undefined){_gl.vertexAttrib2fv(attributes.uv2,material.defaultAttributeValues.uv2);}}if(material.skinning&&attributes.skinIndex>=0&&attributes.skinWeight>=0){_gl.bindBuffer(_gl.ARRAY_BUFFER,geometryGroup.__webglSkinIndicesBuffer);enableAttribute(attributes.skinIndex);_gl.vertexAttribPointer(attributes.skinIndex,4,_gl.FLOAT,false,0,0);_gl.bindBuffer(_gl.ARRAY_BUFFER,geometryGroup.__webglSkinWeightsBuffer);enableAttribute(attributes.skinWeight);_gl.vertexAttribPointer(attributes.skinWeight,4,_gl.FLOAT,false,0,0);}if(attributes.lineDistance>=0){_gl.bindBuffer(_gl.ARRAY_BUFFER,geometryGroup.__webglLineDistanceBuffer);enableAttribute(attributes.lineDistance);_gl.vertexAttribPointer(attributes.lineDistance,1,_gl.FLOAT,false,0,0);}}disableUnusedAttributes();if(object instanceof THREE.Mesh){var type=geometryGroup.__typeArray===Uint32Array?_gl.UNSIGNED_INT:_gl.UNSIGNED_SHORT;if(material.wireframe){setLineWidth(material.wireframeLinewidth);if(updateBuffers)_gl.bindBuffer(_gl.ELEMENT_ARRAY_BUFFER,geometryGroup.__webglLineBuffer);_gl.drawElements(_gl.LINES,geometryGroup.__webglLineCount,type,0);}else{if(updateBuffers)_gl.bindBuffer(_gl.ELEMENT_ARRAY_BUFFER,geometryGroup.__webglFaceBuffer);_gl.drawElements(_gl.TRIANGLES,geometryGroup.__webglFaceCount,type,0);}_this.info.render.calls++;_this.info.render.vertices+=geometryGroup.__webglFaceCount;_this.info.render.faces+=geometryGroup.__webglFaceCount/3;}else if(object instanceof THREE.Line){var mode=object.mode===THREE.LineStrip?_gl.LINE_STRIP:_gl.LINES;setLineWidth(material.linewidth);_gl.drawArrays(mode,0,geometryGroup.__webglLineCount);_this.info.render.calls++;}else if(object instanceof THREE.PointCloud){_gl.drawArrays(_gl.POINTS,0,geometryGroup.__webglParticleCount);_this.info.render.calls++;_this.info.render.points+=geometryGroup.__webglParticleCount;}};function initAttributes(){for(var i=0,l=_newAttributes.length;i=0){_gl.bindBuffer(_gl.ARRAY_BUFFER,geometryGroup.__webglMorphTargetsBuffers[object.morphTargetBase]);enableAttribute(attributes.position);_gl.vertexAttribPointer(attributes.position,3,_gl.FLOAT,false,0,0);}else if(attributes.position>=0){_gl.bindBuffer(_gl.ARRAY_BUFFER,geometryGroup.__webglVertexBuffer);enableAttribute(attributes.position);_gl.vertexAttribPointer(attributes.position,3,_gl.FLOAT,false,0,0);}if(object.morphTargetForcedOrder.length){var m=0;var order=object.morphTargetForcedOrder;var influences=object.morphTargetInfluences;while(m=0){_gl.bindBuffer(_gl.ARRAY_BUFFER,geometryGroup.__webglMorphTargetsBuffers[order[m]]);enableAttribute(attributes['morphTarget'+m]);_gl.vertexAttribPointer(attributes['morphTarget'+m],3,_gl.FLOAT,false,0,0);}if(attributes['morphNormal'+m]>=0&&material.morphNormals){_gl.bindBuffer(_gl.ARRAY_BUFFER,geometryGroup.__webglMorphNormalsBuffers[order[m]]);enableAttribute(attributes['morphNormal'+m]);_gl.vertexAttribPointer(attributes['morphNormal'+m],3,_gl.FLOAT,false,0,0);}object.__webglMorphTargetInfluences[m]=influences[order[m]];m++;}}else{var influence,activeInfluenceIndices=[];var influences=object.morphTargetInfluences;var i,il=influences.length;for(i=0;i0){activeInfluenceIndices.push([influence,i]);}}if(activeInfluenceIndices.length>material.numSupportedMorphTargets){activeInfluenceIndices.sort(numericalSort);activeInfluenceIndices.length=material.numSupportedMorphTargets;}else if(activeInfluenceIndices.length>material.numSupportedMorphNormals){activeInfluenceIndices.sort(numericalSort);}else if(activeInfluenceIndices.length===0){activeInfluenceIndices.push([0,0]);};var influenceIndex,m=0;while(m=0){_gl.bindBuffer(_gl.ARRAY_BUFFER,geometryGroup.__webglMorphTargetsBuffers[influenceIndex]);enableAttribute(attributes['morphTarget'+m]);_gl.vertexAttribPointer(attributes['morphTarget'+m],3,_gl.FLOAT,false,0,0);}if(attributes['morphNormal'+m]>=0&&material.morphNormals){_gl.bindBuffer(_gl.ARRAY_BUFFER,geometryGroup.__webglMorphNormalsBuffers[influenceIndex]);enableAttribute(attributes['morphNormal'+m]);_gl.vertexAttribPointer(attributes['morphNormal'+m],3,_gl.FLOAT,false,0,0);}object.__webglMorphTargetInfluences[m]=influences[influenceIndex];}else{object.__webglMorphTargetInfluences[m]=0;}m++;}}if(material.program.uniforms.morphTargetInfluences!==null){_gl.uniform1fv(material.program.uniforms.morphTargetInfluences,object.__webglMorphTargetInfluences);}}function painterSortStable(a,b){if(a.material.id!==b.material.id){return b.material.id-a.material.id;}else if(a.z!==b.z){return b.z-a.z;}else{return a.id-b.id;}}function reversePainterSortStable(a,b){if(a.z!==b.z){return a.z-b.z;}else{return a.id-b.id;}}function numericalSort(a,b){return b[0]-a[0];}this.render=function(scene,camera,renderTarget,forceClear){if(camera instanceof THREE.Camera===false){console.error('THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.');return;}var fog=scene.fog;_currentGeometryGroupHash=-1;_currentMaterialId=-1;_currentCamera=null;_lightsNeedUpdate=true;if(scene.autoUpdate===true)scene.updateMatrixWorld();if(camera.parent===undefined)camera.updateMatrixWorld();scene.traverse(function(object){if(object instanceof THREE.SkinnedMesh){object.skeleton.update();}});camera.matrixWorldInverse.getInverse(camera.matrixWorld);_projScreenMatrix.multiplyMatrices(camera.projectionMatrix,camera.matrixWorldInverse);_frustum.setFromMatrix(_projScreenMatrix);lights.length=0;opaqueObjects.length=0;transparentObjects.length=0;sprites.length=0;lensFlares.length=0;projectObject(scene,scene);if(_this.sortObjects===true){opaqueObjects.sort(painterSortStable);transparentObjects.sort(reversePainterSortStable);}shadowMapPlugin.render(scene,camera);_this.info.render.calls=0;_this.info.render.vertices=0;_this.info.render.faces=0;_this.info.render.points=0;this.setRenderTarget(renderTarget);if(this.autoClear||forceClear){this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil);}for(var i=0,il=_webglObjectsImmediate.length;imaxVerticesInGroup){hash_map[materialIndex].counter+=1;groupHash=hash_map[materialIndex].hash+'_'+hash_map[materialIndex].counter;if(!(groupHash in groups)){group={id:geometryGroupCounter++,faces3:[],materialIndex:materialIndex,vertices:0,numMorphTargets:numMorphTargets,numMorphNormals:numMorphNormals};groups[groupHash]=group;groupsList.push(group);}}groups[groupHash].faces3.push(f);groups[groupHash].vertices+=3;}return groupsList;}function initGeometryGroups(scene,object,geometry){var material=object.material,addBuffers=false;if(geometryGroups[geometry.id]===undefined||geometry.groupsNeedUpdate===true){delete _webglObjects[object.id];geometryGroups[geometry.id]=makeGroups(geometry,material instanceof THREE.MeshFaceMaterial);geometry.groupsNeedUpdate=false;}var geometryGroupsList=geometryGroups[geometry.id];for(var i=0,il=geometryGroupsList.length;i=0;o--){if(objlist[o].object===object){objlist.splice(o,1);}}}function initMaterial(material,lights,fog,object){material.addEventListener('dispose',onMaterialDispose);var shaderID;if(material instanceof THREE.MeshDepthMaterial){shaderID='depth';}else if(material instanceof THREE.MeshNormalMaterial){shaderID='normal';}else if(material instanceof THREE.MeshBasicMaterial){shaderID='basic';}else if(material instanceof THREE.MeshLambertMaterial){shaderID='lambert';}else if(material instanceof THREE.MeshPhongMaterial){shaderID='phong';}else if(material instanceof THREE.LineBasicMaterial){shaderID='basic';}else if(material instanceof THREE.LineDashedMaterial){shaderID='dashed';}else if(material instanceof THREE.PointCloudMaterial){shaderID='particle_basic';}if(shaderID){var shader=THREE.ShaderLib[shaderID];material.__webglShader={uniforms:THREE.UniformsUtils.clone(shader.uniforms),vertexShader:shader.vertexShader,fragmentShader:shader.fragmentShader};}else{material.__webglShader={uniforms:material.uniforms,vertexShader:material.vertexShader,fragmentShader:material.fragmentShader};}var maxLightCount=allocateLights(lights);var maxShadows=allocateShadows(lights);var maxBones=allocateBones(object);var parameters={precision:_precision,supportsVertexTextures:_supportsVertexTextures,map:!!material.map,envMap:!!material.envMap,lightMap:!!material.lightMap,bumpMap:!!material.bumpMap,normalMap:!!material.normalMap,specularMap:!!material.specularMap,alphaMap:!!material.alphaMap,vertexColors:material.vertexColors,fog:fog,useFog:material.fog,fogExp:fog instanceof THREE.FogExp2,sizeAttenuation:material.sizeAttenuation,logarithmicDepthBuffer:_logarithmicDepthBuffer,skinning:material.skinning,maxBones:maxBones,useVertexTexture:_supportsBoneTextures&&object&&object.skeleton&&object.skeleton.useVertexTexture,morphTargets:material.morphTargets,morphNormals:material.morphNormals,maxMorphTargets:_this.maxMorphTargets,maxMorphNormals:_this.maxMorphNormals,maxDirLights:maxLightCount.directional,maxPointLights:maxLightCount.point,maxSpotLights:maxLightCount.spot,maxHemiLights:maxLightCount.hemi,maxShadows:maxShadows,shadowMapEnabled:_this.shadowMapEnabled&&object.receiveShadow&&maxShadows>0,shadowMapType:_this.shadowMapType,shadowMapDebug:_this.shadowMapDebug,shadowMapCascade:_this.shadowMapCascade,alphaTest:material.alphaTest,metal:material.metal,wrapAround:material.wrapAround,doubleSided:material.side===THREE.DoubleSide,flipSided:material.side===THREE.BackSide};var chunks=[];if(shaderID){chunks.push(shaderID);}else{chunks.push(material.fragmentShader);chunks.push(material.vertexShader);}if(material.defines!==undefined){for(var name in material.defines){chunks.push(name);chunks.push(material.defines[name]);}}for(var name in parameters){chunks.push(name);chunks.push(parameters[name]);}var code=chunks.join();var program;for(var p=0,pl=_programs.length;p=0){material.numSupportedMorphTargets++;}}}if(material.morphNormals){material.numSupportedMorphNormals=0;var id,base='morphNormal';for(i=0;i<_this.maxMorphNormals;i++){id=base+i;if(attributes[id]>=0){material.numSupportedMorphNormals++;}}}material.uniformsList=[];for(var u in material.__webglShader.uniforms){var location=material.program.uniforms[u];if(location){material.uniformsList.push([material.__webglShader.uniforms[u],location]);}}}function setProgram(camera,lights,fog,material,object){_usedTextureUnits=0;if(material.needsUpdate){if(material.program)deallocateMaterial(material);initMaterial(material,lights,fog,object);material.needsUpdate=false;}if(material.morphTargets){if(!object.__webglMorphTargetInfluences){object.__webglMorphTargetInfluences=new Float32Array(_this.maxMorphTargets);}}var refreshProgram=false;var refreshMaterial=false;var refreshLights=false;var program=material.program,p_uniforms=program.uniforms,m_uniforms=material.__webglShader.uniforms;if(program.id!==_currentProgram){_gl.useProgram(program.program);_currentProgram=program.id;refreshProgram=true;refreshMaterial=true;refreshLights=true;}if(material.id!==_currentMaterialId){if(_currentMaterialId===-1)refreshLights=true;_currentMaterialId=material.id;refreshMaterial=true;}if(refreshProgram||camera!==_currentCamera){_gl.uniformMatrix4fv(p_uniforms.projectionMatrix,false,camera.projectionMatrix.elements);if(_logarithmicDepthBuffer){_gl.uniform1f(p_uniforms.logDepthBufFC,2.0/(Math.log(camera.far+1.0)/Math.LN2));}if(camera!==_currentCamera)_currentCamera=camera;if(material instanceof THREE.ShaderMaterial||material instanceof THREE.MeshPhongMaterial||material.envMap){if(p_uniforms.cameraPosition!==null){_vector3.setFromMatrixPosition(camera.matrixWorld);_gl.uniform3f(p_uniforms.cameraPosition,_vector3.x,_vector3.y,_vector3.z);}}if(material instanceof THREE.MeshPhongMaterial||material instanceof THREE.MeshLambertMaterial||material instanceof THREE.ShaderMaterial||material.skinning){if(p_uniforms.viewMatrix!==null){_gl.uniformMatrix4fv(p_uniforms.viewMatrix,false,camera.matrixWorldInverse.elements);}}}if(material.skinning){if(object.bindMatrix&&p_uniforms.bindMatrix!==null){_gl.uniformMatrix4fv(p_uniforms.bindMatrix,false,object.bindMatrix.elements);}if(object.bindMatrixInverse&&p_uniforms.bindMatrixInverse!==null){_gl.uniformMatrix4fv(p_uniforms.bindMatrixInverse,false,object.bindMatrixInverse.elements);}if(_supportsBoneTextures&&object.skeleton&&object.skeleton.useVertexTexture){if(p_uniforms.boneTexture!==null){var textureUnit=getTextureUnit();_gl.uniform1i(p_uniforms.boneTexture,textureUnit);_this.setTexture(object.skeleton.boneTexture,textureUnit);}if(p_uniforms.boneTextureWidth!==null){_gl.uniform1i(p_uniforms.boneTextureWidth,object.skeleton.boneTextureWidth);}if(p_uniforms.boneTextureHeight!==null){_gl.uniform1i(p_uniforms.boneTextureHeight,object.skeleton.boneTextureHeight);}}else if(object.skeleton&&object.skeleton.boneMatrices){if(p_uniforms.boneGlobalMatrices!==null){_gl.uniformMatrix4fv(p_uniforms.boneGlobalMatrices,false,object.skeleton.boneMatrices);}}}if(refreshMaterial){if(fog&&material.fog){refreshUniformsFog(m_uniforms,fog);}if(material instanceof THREE.MeshPhongMaterial||material instanceof THREE.MeshLambertMaterial||material.lights){if(_lightsNeedUpdate){refreshLights=true;setupLights(lights);_lightsNeedUpdate=false;}if(refreshLights){refreshUniformsLights(m_uniforms,_lights);markUniformsLightsNeedsUpdate(m_uniforms,true);}else{markUniformsLightsNeedsUpdate(m_uniforms,false);}}if(material instanceof THREE.MeshBasicMaterial||material instanceof THREE.MeshLambertMaterial||material instanceof THREE.MeshPhongMaterial){refreshUniformsCommon(m_uniforms,material);}if(material instanceof THREE.LineBasicMaterial){refreshUniformsLine(m_uniforms,material);}else if(material instanceof THREE.LineDashedMaterial){refreshUniformsLine(m_uniforms,material);refreshUniformsDash(m_uniforms,material);}else if(material instanceof THREE.PointCloudMaterial){refreshUniformsParticle(m_uniforms,material);}else if(material instanceof THREE.MeshPhongMaterial){refreshUniformsPhong(m_uniforms,material);}else if(material instanceof THREE.MeshLambertMaterial){refreshUniformsLambert(m_uniforms,material);}else if(material instanceof THREE.MeshDepthMaterial){m_uniforms.mNear.value=camera.near;m_uniforms.mFar.value=camera.far;m_uniforms.opacity.value=material.opacity;}else if(material instanceof THREE.MeshNormalMaterial){m_uniforms.opacity.value=material.opacity;}if(object.receiveShadow&&!material._shadowPass){refreshUniformsShadow(m_uniforms,lights);}loadUniformsGeneric(material.uniformsList);}loadUniformsMatrices(p_uniforms,object);if(p_uniforms.modelMatrix!==null){_gl.uniformMatrix4fv(p_uniforms.modelMatrix,false,object.matrixWorld.elements);}return program;}function refreshUniformsCommon(uniforms,material){uniforms.opacity.value=material.opacity;if(_this.gammaInput){uniforms.diffuse.value.copyGammaToLinear(material.color);}else{uniforms.diffuse.value=material.color;}uniforms.map.value=material.map;uniforms.lightMap.value=material.lightMap;uniforms.specularMap.value=material.specularMap;uniforms.alphaMap.value=material.alphaMap;if(material.bumpMap){uniforms.bumpMap.value=material.bumpMap;uniforms.bumpScale.value=material.bumpScale;}if(material.normalMap){uniforms.normalMap.value=material.normalMap;uniforms.normalScale.value.copy(material.normalScale);}var uvScaleMap;if(material.map){uvScaleMap=material.map;}else if(material.specularMap){uvScaleMap=material.specularMap;}else if(material.normalMap){uvScaleMap=material.normalMap;}else if(material.bumpMap){uvScaleMap=material.bumpMap;}else if(material.alphaMap){uvScaleMap=material.alphaMap;}if(uvScaleMap!==undefined){var offset=uvScaleMap.offset;var repeat=uvScaleMap.repeat;uniforms.offsetRepeat.value.set(offset.x,offset.y,repeat.x,repeat.y);}uniforms.envMap.value=material.envMap;uniforms.flipEnvMap.value=material.envMap instanceof THREE.WebGLRenderTargetCube?1:-1;if(_this.gammaInput){uniforms.reflectivity.value=material.reflectivity;}else{uniforms.reflectivity.value=material.reflectivity;}uniforms.refractionRatio.value=material.refractionRatio;uniforms.combine.value=material.combine;uniforms.useRefract.value=material.envMap&&material.envMap.mapping instanceof THREE.CubeRefractionMapping;}function refreshUniformsLine(uniforms,material){uniforms.diffuse.value=material.color;uniforms.opacity.value=material.opacity;}function refreshUniformsDash(uniforms,material){uniforms.dashSize.value=material.dashSize;uniforms.totalSize.value=material.dashSize+material.gapSize;uniforms.scale.value=material.scale;}function refreshUniformsParticle(uniforms,material){uniforms.psColor.value=material.color;uniforms.opacity.value=material.opacity;uniforms.size.value=material.size;uniforms.scale.value=_canvas.height/2.0;uniforms.map.value=material.map;}function refreshUniformsFog(uniforms,fog){uniforms.fogColor.value=fog.color;if(fog instanceof THREE.Fog){uniforms.fogNear.value=fog.near;uniforms.fogFar.value=fog.far;}else if(fog instanceof THREE.FogExp2){uniforms.fogDensity.value=fog.density;}}function refreshUniformsPhong(uniforms,material){uniforms.shininess.value=material.shininess;if(_this.gammaInput){uniforms.ambient.value.copyGammaToLinear(material.ambient);uniforms.emissive.value.copyGammaToLinear(material.emissive);uniforms.specular.value.copyGammaToLinear(material.specular);}else{uniforms.ambient.value=material.ambient;uniforms.emissive.value=material.emissive;uniforms.specular.value=material.specular;}if(material.wrapAround){uniforms.wrapRGB.value.copy(material.wrapRGB);}}function refreshUniformsLambert(uniforms,material){if(_this.gammaInput){uniforms.ambient.value.copyGammaToLinear(material.ambient);uniforms.emissive.value.copyGammaToLinear(material.emissive);}else{uniforms.ambient.value=material.ambient;uniforms.emissive.value=material.emissive;}if(material.wrapAround){uniforms.wrapRGB.value.copy(material.wrapRGB);}}function refreshUniformsLights(uniforms,lights){uniforms.ambientLightColor.value=lights.ambient;uniforms.directionalLightColor.value=lights.directional.colors;uniforms.directionalLightDirection.value=lights.directional.positions;uniforms.pointLightColor.value=lights.point.colors;uniforms.pointLightPosition.value=lights.point.positions;uniforms.pointLightDistance.value=lights.point.distances;uniforms.spotLightColor.value=lights.spot.colors;uniforms.spotLightPosition.value=lights.spot.positions;uniforms.spotLightDistance.value=lights.spot.distances;uniforms.spotLightDirection.value=lights.spot.directions;uniforms.spotLightAngleCos.value=lights.spot.anglesCos;uniforms.spotLightExponent.value=lights.spot.exponents;uniforms.hemisphereLightSkyColor.value=lights.hemi.skyColors;uniforms.hemisphereLightGroundColor.value=lights.hemi.groundColors;uniforms.hemisphereLightDirection.value=lights.hemi.positions;}function markUniformsLightsNeedsUpdate(uniforms,boolean){uniforms.ambientLightColor.needsUpdate=boolean;uniforms.directionalLightColor.needsUpdate=boolean;uniforms.directionalLightDirection.needsUpdate=boolean;uniforms.pointLightColor.needsUpdate=boolean;uniforms.pointLightPosition.needsUpdate=boolean;uniforms.pointLightDistance.needsUpdate=boolean;uniforms.spotLightColor.needsUpdate=boolean;uniforms.spotLightPosition.needsUpdate=boolean;uniforms.spotLightDistance.needsUpdate=boolean;uniforms.spotLightDirection.needsUpdate=boolean;uniforms.spotLightAngleCos.needsUpdate=boolean;uniforms.spotLightExponent.needsUpdate=boolean;uniforms.hemisphereLightSkyColor.needsUpdate=boolean;uniforms.hemisphereLightGroundColor.needsUpdate=boolean;uniforms.hemisphereLightDirection.needsUpdate=boolean;}function refreshUniformsShadow(uniforms,lights){if(uniforms.shadowMatrix){var j=0;for(var i=0,il=lights.length;i=_maxTextures){console.warn('WebGLRenderer: trying to use '+textureUnit+' texture units while this GPU supports only '+_maxTextures);}_usedTextureUnits+=1;return textureUnit;}function loadUniformsGeneric(uniforms){var texture,textureUnit,offset;for(var j=0,jl=uniforms.length;j1||texture.__oldAnisotropy){_gl.texParameterf(textureType,extension.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(texture.anisotropy,_this.getMaxAnisotropy()));texture.__oldAnisotropy=texture.anisotropy;}}}this.uploadTexture=function(texture){if(texture.__webglInit===undefined){texture.__webglInit=true;texture.addEventListener('dispose',onTextureDispose);texture.__webglTexture=_gl.createTexture();_this.info.memory.textures++;}_gl.bindTexture(_gl.TEXTURE_2D,texture.__webglTexture);_gl.pixelStorei(_gl.UNPACK_FLIP_Y_WEBGL,texture.flipY);_gl.pixelStorei(_gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,texture.premultiplyAlpha);_gl.pixelStorei(_gl.UNPACK_ALIGNMENT,texture.unpackAlignment);texture.image=clampToMaxSize(texture.image,_maxTextureSize);var image=texture.image,isImagePowerOfTwo=THREE.Math.isPowerOfTwo(image.width)&&THREE.Math.isPowerOfTwo(image.height),glFormat=paramThreeToGL(texture.format),glType=paramThreeToGL(texture.type);setTextureParameters(_gl.TEXTURE_2D,texture,isImagePowerOfTwo);var mipmap,mipmaps=texture.mipmaps;if(texture instanceof THREE.DataTexture){if(mipmaps.length>0&&isImagePowerOfTwo){for(var i=0,il=mipmaps.length;i-1){_gl.compressedTexImage2D(_gl.TEXTURE_2D,i,glFormat,mipmap.width,mipmap.height,0,mipmap.data);}else{console.warn(\"Attempt to load unsupported compressed texture format\");}}else{_gl.texImage2D(_gl.TEXTURE_2D,i,glFormat,mipmap.width,mipmap.height,0,glFormat,glType,mipmap.data);}}}else{if(mipmaps.length>0&&isImagePowerOfTwo){for(var i=0,il=mipmaps.length;imaxSize||image.height>maxSize){var scale=maxSize/Math.max(image.width,image.height);var canvas=document.createElement('canvas');canvas.width=Math.floor(image.width*scale);canvas.height=Math.floor(image.height*scale);var context=canvas.getContext('2d');context.drawImage(image,0,0,image.width,image.height,0,0,canvas.width,canvas.height);console.log('THREE.WebGLRenderer:',image,'is too big ('+image.width+'x'+image.height+'). Resized to '+canvas.width+'x'+canvas.height+'.');return canvas;}return image;}function setCubeTexture(texture,slot){if(texture.image.length===6){if(texture.needsUpdate){if(!texture.image.__webglTextureCube){texture.addEventListener('dispose',onTextureDispose);texture.image.__webglTextureCube=_gl.createTexture();_this.info.memory.textures++;}_gl.activeTexture(_gl.TEXTURE0+slot);_gl.bindTexture(_gl.TEXTURE_CUBE_MAP,texture.image.__webglTextureCube);_gl.pixelStorei(_gl.UNPACK_FLIP_Y_WEBGL,texture.flipY);var isCompressed=texture instanceof THREE.CompressedTexture;var isDataTexture=texture.image[0]instanceof THREE.DataTexture;var cubeImage=[];for(var i=0;i<6;i++){if(_this.autoScaleCubemaps&&!isCompressed&&!isDataTexture){cubeImage[i]=clampToMaxSize(texture.image[i],_maxCubemapSize);}else{cubeImage[i]=isDataTexture?texture.image[i].image:texture.image[i];}}var image=cubeImage[0],isImagePowerOfTwo=THREE.Math.isPowerOfTwo(image.width)&&THREE.Math.isPowerOfTwo(image.height),glFormat=paramThreeToGL(texture.format),glType=paramThreeToGL(texture.type);setTextureParameters(_gl.TEXTURE_CUBE_MAP,texture,isImagePowerOfTwo);for(var i=0;i<6;i++){if(!isCompressed){if(isDataTexture){_gl.texImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X+i,0,glFormat,cubeImage[i].width,cubeImage[i].height,0,glFormat,glType,cubeImage[i].data);}else{_gl.texImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X+i,0,glFormat,glFormat,glType,cubeImage[i]);}}else{var mipmap,mipmaps=cubeImage[i].mipmaps;for(var j=0,jl=mipmaps.length;j-1){_gl.compressedTexImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X+i,j,glFormat,mipmap.width,mipmap.height,0,mipmap.data);}else{console.warn(\"Attempt to load unsupported compressed texture format\");}}else{_gl.texImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X+i,j,glFormat,mipmap.width,mipmap.height,0,glFormat,glType,mipmap.data);}}}}if(texture.generateMipmaps&&isImagePowerOfTwo){_gl.generateMipmap(_gl.TEXTURE_CUBE_MAP);}texture.needsUpdate=false;if(texture.onUpdate)texture.onUpdate();}else{_gl.activeTexture(_gl.TEXTURE0+slot);_gl.bindTexture(_gl.TEXTURE_CUBE_MAP,texture.image.__webglTextureCube);}}}function setCubeTextureDynamic(texture,slot){_gl.activeTexture(_gl.TEXTURE0+slot);_gl.bindTexture(_gl.TEXTURE_CUBE_MAP,texture.__webglTexture);}function setupFrameBuffer(framebuffer,renderTarget,textureTarget){_gl.bindFramebuffer(_gl.FRAMEBUFFER,framebuffer);_gl.framebufferTexture2D(_gl.FRAMEBUFFER,_gl.COLOR_ATTACHMENT0,textureTarget,renderTarget.__webglTexture,0);}function setupRenderBuffer(renderbuffer,renderTarget){_gl.bindRenderbuffer(_gl.RENDERBUFFER,renderbuffer);if(renderTarget.depthBuffer&&!renderTarget.stencilBuffer){_gl.renderbufferStorage(_gl.RENDERBUFFER,_gl.DEPTH_COMPONENT16,renderTarget.width,renderTarget.height);_gl.framebufferRenderbuffer(_gl.FRAMEBUFFER,_gl.DEPTH_ATTACHMENT,_gl.RENDERBUFFER,renderbuffer);}else if(renderTarget.depthBuffer&&renderTarget.stencilBuffer){_gl.renderbufferStorage(_gl.RENDERBUFFER,_gl.DEPTH_STENCIL,renderTarget.width,renderTarget.height);_gl.framebufferRenderbuffer(_gl.FRAMEBUFFER,_gl.DEPTH_STENCIL_ATTACHMENT,_gl.RENDERBUFFER,renderbuffer);}else{_gl.renderbufferStorage(_gl.RENDERBUFFER,_gl.RGBA4,renderTarget.width,renderTarget.height);}}this.setRenderTarget=function(renderTarget){var isCube=renderTarget instanceof THREE.WebGLRenderTargetCube;if(renderTarget&&renderTarget.__webglFramebuffer===undefined){if(renderTarget.depthBuffer===undefined)renderTarget.depthBuffer=true;if(renderTarget.stencilBuffer===undefined)renderTarget.stencilBuffer=true;renderTarget.addEventListener('dispose',onRenderTargetDispose);renderTarget.__webglTexture=_gl.createTexture();_this.info.memory.textures++;var isTargetPowerOfTwo=THREE.Math.isPowerOfTwo(renderTarget.width)&&THREE.Math.isPowerOfTwo(renderTarget.height),glFormat=paramThreeToGL(renderTarget.format),glType=paramThreeToGL(renderTarget.type);if(isCube){renderTarget.__webglFramebuffer=[];renderTarget.__webglRenderbuffer=[];_gl.bindTexture(_gl.TEXTURE_CUBE_MAP,renderTarget.__webglTexture);setTextureParameters(_gl.TEXTURE_CUBE_MAP,renderTarget,isTargetPowerOfTwo);for(var i=0;i<6;i++){renderTarget.__webglFramebuffer[i]=_gl.createFramebuffer();renderTarget.__webglRenderbuffer[i]=_gl.createRenderbuffer();_gl.texImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X+i,0,glFormat,renderTarget.width,renderTarget.height,0,glFormat,glType,null);setupFrameBuffer(renderTarget.__webglFramebuffer[i],renderTarget,_gl.TEXTURE_CUBE_MAP_POSITIVE_X+i);setupRenderBuffer(renderTarget.__webglRenderbuffer[i],renderTarget);}if(isTargetPowerOfTwo)_gl.generateMipmap(_gl.TEXTURE_CUBE_MAP);}else{renderTarget.__webglFramebuffer=_gl.createFramebuffer();if(renderTarget.shareDepthFrom){renderTarget.__webglRenderbuffer=renderTarget.shareDepthFrom.__webglRenderbuffer;}else{renderTarget.__webglRenderbuffer=_gl.createRenderbuffer();}_gl.bindTexture(_gl.TEXTURE_2D,renderTarget.__webglTexture);setTextureParameters(_gl.TEXTURE_2D,renderTarget,isTargetPowerOfTwo);_gl.texImage2D(_gl.TEXTURE_2D,0,glFormat,renderTarget.width,renderTarget.height,0,glFormat,glType,null);setupFrameBuffer(renderTarget.__webglFramebuffer,renderTarget,_gl.TEXTURE_2D);if(renderTarget.shareDepthFrom){if(renderTarget.depthBuffer&&!renderTarget.stencilBuffer){_gl.framebufferRenderbuffer(_gl.FRAMEBUFFER,_gl.DEPTH_ATTACHMENT,_gl.RENDERBUFFER,renderTarget.__webglRenderbuffer);}else if(renderTarget.depthBuffer&&renderTarget.stencilBuffer){_gl.framebufferRenderbuffer(_gl.FRAMEBUFFER,_gl.DEPTH_STENCIL_ATTACHMENT,_gl.RENDERBUFFER,renderTarget.__webglRenderbuffer);}}else{setupRenderBuffer(renderTarget.__webglRenderbuffer,renderTarget);}if(isTargetPowerOfTwo)_gl.generateMipmap(_gl.TEXTURE_2D);}if(isCube){_gl.bindTexture(_gl.TEXTURE_CUBE_MAP,null);}else{_gl.bindTexture(_gl.TEXTURE_2D,null);}_gl.bindRenderbuffer(_gl.RENDERBUFFER,null);_gl.bindFramebuffer(_gl.FRAMEBUFFER,null);}var framebuffer,width,height,vx,vy;if(renderTarget){if(isCube){framebuffer=renderTarget.__webglFramebuffer[renderTarget.activeCubeFace];}else{framebuffer=renderTarget.__webglFramebuffer;}width=renderTarget.width;height=renderTarget.height;vx=0;vy=0;}else{framebuffer=null;width=_viewportWidth;height=_viewportHeight;vx=_viewportX;vy=_viewportY;}if(framebuffer!==_currentFramebuffer){_gl.bindFramebuffer(_gl.FRAMEBUFFER,framebuffer);_gl.viewport(vx,vy,width,height);_currentFramebuffer=framebuffer;}_currentWidth=width;_currentHeight=height;};function updateRenderTargetMipmap(renderTarget){if(renderTarget instanceof THREE.WebGLRenderTargetCube){_gl.bindTexture(_gl.TEXTURE_CUBE_MAP,renderTarget.__webglTexture);_gl.generateMipmap(_gl.TEXTURE_CUBE_MAP);_gl.bindTexture(_gl.TEXTURE_CUBE_MAP,null);}else{_gl.bindTexture(_gl.TEXTURE_2D,renderTarget.__webglTexture);_gl.generateMipmap(_gl.TEXTURE_2D);_gl.bindTexture(_gl.TEXTURE_2D,null);}}function filterFallback(f){if(f===THREE.NearestFilter||f===THREE.NearestMipMapNearestFilter||f===THREE.NearestMipMapLinearFilter){return _gl.NEAREST;}return _gl.LINEAR;}function paramThreeToGL(p){var extension;if(p===THREE.RepeatWrapping)return _gl.REPEAT;if(p===THREE.ClampToEdgeWrapping)return _gl.CLAMP_TO_EDGE;if(p===THREE.MirroredRepeatWrapping)return _gl.MIRRORED_REPEAT;if(p===THREE.NearestFilter)return _gl.NEAREST;if(p===THREE.NearestMipMapNearestFilter)return _gl.NEAREST_MIPMAP_NEAREST;if(p===THREE.NearestMipMapLinearFilter)return _gl.NEAREST_MIPMAP_LINEAR;if(p===THREE.LinearFilter)return _gl.LINEAR;if(p===THREE.LinearMipMapNearestFilter)return _gl.LINEAR_MIPMAP_NEAREST;if(p===THREE.LinearMipMapLinearFilter)return _gl.LINEAR_MIPMAP_LINEAR;if(p===THREE.UnsignedByteType)return _gl.UNSIGNED_BYTE;if(p===THREE.UnsignedShort4444Type)return _gl.UNSIGNED_SHORT_4_4_4_4;if(p===THREE.UnsignedShort5551Type)return _gl.UNSIGNED_SHORT_5_5_5_1;if(p===THREE.UnsignedShort565Type)return _gl.UNSIGNED_SHORT_5_6_5;if(p===THREE.ByteType)return _gl.BYTE;if(p===THREE.ShortType)return _gl.SHORT;if(p===THREE.UnsignedShortType)return _gl.UNSIGNED_SHORT;if(p===THREE.IntType)return _gl.INT;if(p===THREE.UnsignedIntType)return _gl.UNSIGNED_INT;if(p===THREE.FloatType)return _gl.FLOAT;if(p===THREE.AlphaFormat)return _gl.ALPHA;if(p===THREE.RGBFormat)return _gl.RGB;if(p===THREE.RGBAFormat)return _gl.RGBA;if(p===THREE.LuminanceFormat)return _gl.LUMINANCE;if(p===THREE.LuminanceAlphaFormat)return _gl.LUMINANCE_ALPHA;if(p===THREE.AddEquation)return _gl.FUNC_ADD;if(p===THREE.SubtractEquation)return _gl.FUNC_SUBTRACT;if(p===THREE.ReverseSubtractEquation)return _gl.FUNC_REVERSE_SUBTRACT;if(p===THREE.ZeroFactor)return _gl.ZERO;if(p===THREE.OneFactor)return _gl.ONE;if(p===THREE.SrcColorFactor)return _gl.SRC_COLOR;if(p===THREE.OneMinusSrcColorFactor)return _gl.ONE_MINUS_SRC_COLOR;if(p===THREE.SrcAlphaFactor)return _gl.SRC_ALPHA;if(p===THREE.OneMinusSrcAlphaFactor)return _gl.ONE_MINUS_SRC_ALPHA;if(p===THREE.DstAlphaFactor)return _gl.DST_ALPHA;if(p===THREE.OneMinusDstAlphaFactor)return _gl.ONE_MINUS_DST_ALPHA;if(p===THREE.DstColorFactor)return _gl.DST_COLOR;if(p===THREE.OneMinusDstColorFactor)return _gl.ONE_MINUS_DST_COLOR;if(p===THREE.SrcAlphaSaturateFactor)return _gl.SRC_ALPHA_SATURATE;extension=extensions.get('WEBGL_compressed_texture_s3tc');if(extension!==null){if(p===THREE.RGB_S3TC_DXT1_Format)return extension.COMPRESSED_RGB_S3TC_DXT1_EXT;if(p===THREE.RGBA_S3TC_DXT1_Format)return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(p===THREE.RGBA_S3TC_DXT3_Format)return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(p===THREE.RGBA_S3TC_DXT5_Format)return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT;}extension=extensions.get('WEBGL_compressed_texture_pvrtc');if(extension!==null){if(p===THREE.RGB_PVRTC_4BPPV1_Format)return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(p===THREE.RGB_PVRTC_2BPPV1_Format)return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(p===THREE.RGBA_PVRTC_4BPPV1_Format)return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(p===THREE.RGBA_PVRTC_2BPPV1_Format)return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;}extension=extensions.get('EXT_blend_minmax');if(extension!==null){if(p===THREE.MinEquation)return extension.MIN_EXT;if(p===THREE.MaxEquation)return extension.MAX_EXT;}return 0;}function allocateBones(object){if(_supportsBoneTextures&&object&&object.skeleton&&object.skeleton.useVertexTexture){return 1024;}else{var nVertexUniforms=_gl.getParameter(_gl.MAX_VERTEX_UNIFORM_VECTORS);var nVertexMatrices=Math.floor((nVertexUniforms-20)/4);var maxBones=nVertexMatrices;if(object!==undefined&&object instanceof THREE.SkinnedMesh){maxBones=Math.min(object.skeleton.bones.length,maxBones);if(maxBones0;var shader;if(hasVertexTexture){shader={vertexShader:[\"uniform lowp int renderType;\",\"uniform vec3 screenPosition;\",\"uniform vec2 scale;\",\"uniform float rotation;\",\"uniform sampler2D occlusionMap;\",\"attribute vec2 position;\",\"attribute vec2 uv;\",\"varying vec2 vUV;\",\"varying float vVisibility;\",\"void main() {\",\"vUV = uv;\",\"vec2 pos = position;\",\"if( renderType == 2 ) {\",\"vec4 visibility = texture2D( occlusionMap, vec2( 0.1, 0.1 ) );\",\"visibility += texture2D( occlusionMap, vec2( 0.5, 0.1 ) );\",\"visibility += texture2D( occlusionMap, vec2( 0.9, 0.1 ) );\",\"visibility += texture2D( occlusionMap, vec2( 0.9, 0.5 ) );\",\"visibility += texture2D( occlusionMap, vec2( 0.9, 0.9 ) );\",\"visibility += texture2D( occlusionMap, vec2( 0.5, 0.9 ) );\",\"visibility += texture2D( occlusionMap, vec2( 0.1, 0.9 ) );\",\"visibility += texture2D( occlusionMap, vec2( 0.1, 0.5 ) );\",\"visibility += texture2D( occlusionMap, vec2( 0.5, 0.5 ) );\",\"vVisibility = visibility.r / 9.0;\",\"vVisibility *= 1.0 - visibility.g / 9.0;\",\"vVisibility *= visibility.b / 9.0;\",\"vVisibility *= 1.0 - visibility.a / 9.0;\",\"pos.x = cos( rotation ) * position.x - sin( rotation ) * position.y;\",\"pos.y = sin( rotation ) * position.x + cos( rotation ) * position.y;\",\"}\",\"gl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );\",\"}\"].join(\"\\n\"),fragmentShader:[\"uniform lowp int renderType;\",\"uniform sampler2D map;\",\"uniform float opacity;\",\"uniform vec3 color;\",\"varying vec2 vUV;\",\"varying float vVisibility;\",\"void main() {\",\"if( renderType == 0 ) {\",\"gl_FragColor = vec4( 1.0, 0.0, 1.0, 0.0 );\",\"} else if( renderType == 1 ) {\",\"gl_FragColor = texture2D( map, vUV );\",\"} else {\",\"vec4 texture = texture2D( map, vUV );\",\"texture.a *= opacity * vVisibility;\",\"gl_FragColor = texture;\",\"gl_FragColor.rgb *= color;\",\"}\",\"}\"].join(\"\\n\")};}else{shader={vertexShader:[\"uniform lowp int renderType;\",\"uniform vec3 screenPosition;\",\"uniform vec2 scale;\",\"uniform float rotation;\",\"attribute vec2 position;\",\"attribute vec2 uv;\",\"varying vec2 vUV;\",\"void main() {\",\"vUV = uv;\",\"vec2 pos = position;\",\"if( renderType == 2 ) {\",\"pos.x = cos( rotation ) * position.x - sin( rotation ) * position.y;\",\"pos.y = sin( rotation ) * position.x + cos( rotation ) * position.y;\",\"}\",\"gl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );\",\"}\"].join(\"\\n\"),fragmentShader:[\"precision mediump float;\",\"uniform lowp int renderType;\",\"uniform sampler2D map;\",\"uniform sampler2D occlusionMap;\",\"uniform float opacity;\",\"uniform vec3 color;\",\"varying vec2 vUV;\",\"void main() {\",\"if( renderType == 0 ) {\",\"gl_FragColor = vec4( texture2D( map, vUV ).rgb, 0.0 );\",\"} else if( renderType == 1 ) {\",\"gl_FragColor = texture2D( map, vUV );\",\"} else {\",\"float visibility = texture2D( occlusionMap, vec2( 0.5, 0.1 ) ).a;\",\"visibility += texture2D( occlusionMap, vec2( 0.9, 0.5 ) ).a;\",\"visibility += texture2D( occlusionMap, vec2( 0.5, 0.9 ) ).a;\",\"visibility += texture2D( occlusionMap, vec2( 0.1, 0.5 ) ).a;\",\"visibility = ( 1.0 - visibility / 4.0 );\",\"vec4 texture = texture2D( map, vUV );\",\"texture.a *= opacity * visibility;\",\"gl_FragColor = texture;\",\"gl_FragColor.rgb *= color;\",\"}\",\"}\"].join(\"\\n\")};}program=createProgram(shader);attributes={vertex:gl.getAttribLocation(program,\"position\"),uv:gl.getAttribLocation(program,\"uv\")};uniforms={renderType:gl.getUniformLocation(program,\"renderType\"),map:gl.getUniformLocation(program,\"map\"),occlusionMap:gl.getUniformLocation(program,\"occlusionMap\"),opacity:gl.getUniformLocation(program,\"opacity\"),color:gl.getUniformLocation(program,\"color\"),scale:gl.getUniformLocation(program,\"scale\"),rotation:gl.getUniformLocation(program,\"rotation\"),screenPosition:gl.getUniformLocation(program,\"screenPosition\")};};this.render=function(scene,camera,viewportWidth,viewportHeight){if(flares.length===0)return;var tempPosition=new THREE.Vector3();var invAspect=viewportHeight/viewportWidth,halfViewportWidth=viewportWidth*0.5,halfViewportHeight=viewportHeight*0.5;var size=16/viewportHeight,scale=new THREE.Vector2(size*invAspect,size);var screenPosition=new THREE.Vector3(1,1,0),screenPositionPixels=new THREE.Vector2(1,1);if(program===undefined){init();}gl.useProgram(program);gl.enableVertexAttribArray(attributes.vertex);gl.enableVertexAttribArray(attributes.uv);gl.uniform1i(uniforms.occlusionMap,0);gl.uniform1i(uniforms.map,1);gl.bindBuffer(gl.ARRAY_BUFFER,vertexBuffer);gl.vertexAttribPointer(attributes.vertex,2,gl.FLOAT,false,2*8,0);gl.vertexAttribPointer(attributes.uv,2,gl.FLOAT,false,2*8,8);gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,elementBuffer);gl.disable(gl.CULL_FACE);gl.depthMask(false);for(var i=0,l=flares.length;i0&&screenPositionPixels.x0&&screenPositionPixels.y0.001&&sprite.scale>0.001){screenPosition.x=sprite.x;screenPosition.y=sprite.y;screenPosition.z=sprite.z;size=sprite.size*sprite.scale/viewportHeight;scale.x=size*invAspect;scale.y=size;gl.uniform3f(uniforms.screenPosition,screenPosition.x,screenPosition.y,screenPosition.z);gl.uniform2f(uniforms.scale,scale.x,scale.y);gl.uniform1f(uniforms.rotation,sprite.rotation);gl.uniform1f(uniforms.opacity,sprite.opacity);gl.uniform3f(uniforms.color,sprite.color.r,sprite.color.g,sprite.color.b);renderer.setBlending(sprite.blending,sprite.blendEquation,sprite.blendSrc,sprite.blendDst);renderer.setTexture(sprite.texture,1);gl.drawElements(gl.TRIANGLES,6,gl.UNSIGNED_SHORT,0);}}}}gl.enable(gl.CULL_FACE);gl.enable(gl.DEPTH_TEST);gl.depthMask(true);renderer.resetGLState();};function createProgram(shader){var program=gl.createProgram();var fragmentShader=gl.createShader(gl.FRAGMENT_SHADER);var vertexShader=gl.createShader(gl.VERTEX_SHADER);var prefix=\"precision \"+renderer.getPrecision()+\" float;\\n\";gl.shaderSource(fragmentShader,prefix+shader.fragmentShader);gl.shaderSource(vertexShader,prefix+shader.vertexShader);gl.compileShader(fragmentShader);gl.compileShader(vertexShader);gl.attachShader(program,fragmentShader);gl.attachShader(program,vertexShader);gl.linkProgram(program);return program;}};THREE.ShadowMapPlugin=function(_renderer,_lights,_webglObjects,_webglObjectsImmediate){var _gl=_renderer.context;var _depthMaterial,_depthMaterialMorph,_depthMaterialSkin,_depthMaterialMorphSkin,_frustum=new THREE.Frustum(),_projScreenMatrix=new THREE.Matrix4(),_min=new THREE.Vector3(),_max=new THREE.Vector3(),_matrixPosition=new THREE.Vector3(),_renderList=[];var depthShader=THREE.ShaderLib[\"depthRGBA\"];var depthUniforms=THREE.UniformsUtils.clone(depthShader.uniforms);_depthMaterial=new THREE.ShaderMaterial({uniforms:depthUniforms,vertexShader:depthShader.vertexShader,fragmentShader:depthShader.fragmentShader});_depthMaterialMorph=new THREE.ShaderMaterial({uniforms:depthUniforms,vertexShader:depthShader.vertexShader,fragmentShader:depthShader.fragmentShader,morphTargets:true});_depthMaterialSkin=new THREE.ShaderMaterial({uniforms:depthUniforms,vertexShader:depthShader.vertexShader,fragmentShader:depthShader.fragmentShader,skinning:true});_depthMaterialMorphSkin=new THREE.ShaderMaterial({uniforms:depthUniforms,vertexShader:depthShader.vertexShader,fragmentShader:depthShader.fragmentShader,morphTargets:true,skinning:true});_depthMaterial._shadowPass=true;_depthMaterialMorph._shadowPass=true;_depthMaterialSkin._shadowPass=true;_depthMaterialMorphSkin._shadowPass=true;this.render=function(scene,camera){if(_renderer.shadowMapEnabled===false)return;var i,il,j,jl,n,shadowMap,shadowMatrix,shadowCamera,program,buffer,material,webglObject,object,light,lights=[],k=0,fog=null;_gl.clearColor(1,1,1,1);_gl.disable(_gl.BLEND);_gl.enable(_gl.CULL_FACE);_gl.frontFace(_gl.CCW);if(_renderer.shadowMapCullFace===THREE.CullFaceFront){_gl.cullFace(_gl.FRONT);}else{_gl.cullFace(_gl.BACK);}_renderer.setDepthTest(true);for(i=0,il=_lights.length;i0&&objectMaterial.morphTargets;useSkinning=object instanceof THREE.SkinnedMesh&&objectMaterial.skinning;if(object.customDepthMaterial){material=object.customDepthMaterial;}else if(useSkinning){material=useMorphing?_depthMaterialMorphSkin:_depthMaterialSkin;}else if(useMorphing){material=_depthMaterialMorph;}else{material=_depthMaterial;}_renderer.setMaterialFaces(objectMaterial);if(buffer instanceof THREE.BufferGeometry){_renderer.renderBufferDirect(shadowCamera,_lights,fog,material,buffer,object);}else{_renderer.renderBuffer(shadowCamera,_lights,fog,material,buffer,object);}}for(j=0,jl=_webglObjectsImmediate.length;j_max.x)_max.x=p.x;if(p.y<_min.y)_min.y=p.y;if(p.y>_max.y)_max.y=p.y;if(p.z<_min.z)_min.z=p.z;if(p.z>_max.z)_max.z=p.z;}shadowCamera.left=_min.x;shadowCamera.right=_max.x;shadowCamera.top=_max.y;shadowCamera.bottom=_min.y;shadowCamera.updateProjectionMatrix();}function getObjectMaterial(object){return object.material instanceof THREE.MeshFaceMaterial?object.material.materials[0]:object.material;};};THREE.SpritePlugin=function(renderer,sprites){var gl=renderer.context;var vertexBuffer,elementBuffer;var program,attributes,uniforms;var texture;var init=function init(){var vertices=new Float32Array([-0.5,-0.5,0,0,0.5,-0.5,1,0,0.5,0.5,1,1,-0.5,0.5,0,1]);var faces=new Uint16Array([0,1,2,0,2,3]);vertexBuffer=gl.createBuffer();elementBuffer=gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER,vertexBuffer);gl.bufferData(gl.ARRAY_BUFFER,vertices,gl.STATIC_DRAW);gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,elementBuffer);gl.bufferData(gl.ELEMENT_ARRAY_BUFFER,faces,gl.STATIC_DRAW);program=createProgram();attributes={position:gl.getAttribLocation(program,'position'),uv:gl.getAttribLocation(program,'uv')};uniforms={uvOffset:gl.getUniformLocation(program,'uvOffset'),uvScale:gl.getUniformLocation(program,'uvScale'),rotation:gl.getUniformLocation(program,'rotation'),scale:gl.getUniformLocation(program,'scale'),color:gl.getUniformLocation(program,'color'),map:gl.getUniformLocation(program,'map'),opacity:gl.getUniformLocation(program,'opacity'),modelViewMatrix:gl.getUniformLocation(program,'modelViewMatrix'),projectionMatrix:gl.getUniformLocation(program,'projectionMatrix'),fogType:gl.getUniformLocation(program,'fogType'),fogDensity:gl.getUniformLocation(program,'fogDensity'),fogNear:gl.getUniformLocation(program,'fogNear'),fogFar:gl.getUniformLocation(program,'fogFar'),fogColor:gl.getUniformLocation(program,'fogColor'),alphaTest:gl.getUniformLocation(program,'alphaTest')};var canvas=document.createElement('canvas');canvas.width=8;canvas.height=8;var context=canvas.getContext('2d');context.fillStyle='white';context.fillRect(0,0,8,8);texture=new THREE.Texture(canvas);texture.needsUpdate=true;};this.render=function(scene,camera){if(sprites.length===0)return;if(program===undefined){init();}gl.useProgram(program);gl.enableVertexAttribArray(attributes.position);gl.enableVertexAttribArray(attributes.uv);gl.disable(gl.CULL_FACE);gl.enable(gl.BLEND);gl.bindBuffer(gl.ARRAY_BUFFER,vertexBuffer);gl.vertexAttribPointer(attributes.position,2,gl.FLOAT,false,2*8,0);gl.vertexAttribPointer(attributes.uv,2,gl.FLOAT,false,2*8,8);gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,elementBuffer);gl.uniformMatrix4fv(uniforms.projectionMatrix,false,camera.projectionMatrix.elements);gl.activeTexture(gl.TEXTURE0);gl.uniform1i(uniforms.map,0);var oldFogType=0;var sceneFogType=0;var fog=scene.fog;if(fog){gl.uniform3f(uniforms.fogColor,fog.color.r,fog.color.g,fog.color.b);if(fog instanceof THREE.Fog){gl.uniform1f(uniforms.fogNear,fog.near);gl.uniform1f(uniforms.fogFar,fog.far);gl.uniform1i(uniforms.fogType,1);oldFogType=1;sceneFogType=1;}else if(fog instanceof THREE.FogExp2){gl.uniform1f(uniforms.fogDensity,fog.density);gl.uniform1i(uniforms.fogType,2);oldFogType=2;sceneFogType=2;}}else{gl.uniform1i(uniforms.fogType,0);oldFogType=0;sceneFogType=0;}for(var i=0,l=sprites.length;i 0 ) {','float depth = gl_FragCoord.z / gl_FragCoord.w;','float fogFactor = 0.0;','if ( fogType == 1 ) {','fogFactor = smoothstep( fogNear, fogFar, depth );','} else {','const float LOG2 = 1.442695;','float fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );','fogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );','}','gl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );','}','}'].join('\\n'));gl.compileShader(vertexShader);gl.compileShader(fragmentShader);gl.attachShader(program,vertexShader);gl.attachShader(program,fragmentShader);gl.linkProgram(program);return program;};function painterSortStable(a,b){if(a.z!==b.z){return b.z-a.z;}else{return b.id-a.id;}};};THREE.GeometryUtils={merge:function merge(geometry1,geometry2,materialIndexOffset){console.warn('THREE.GeometryUtils: .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead.');var matrix;if(geometry2 instanceof THREE.Mesh){geometry2.matrixAutoUpdate&&geometry2.updateMatrix();matrix=geometry2.matrix;geometry2=geometry2.geometry;}geometry1.merge(geometry2,matrix,materialIndexOffset);},center:function center(geometry){console.warn('THREE.GeometryUtils: .center() has been moved to Geometry. Use geometry.center() instead.');return geometry.center();}};THREE.ImageUtils={crossOrigin:undefined,loadTexture:function loadTexture(url,mapping,onLoad,onError){var loader=new THREE.ImageLoader();loader.crossOrigin=this.crossOrigin;var texture=new THREE.Texture(undefined,mapping);loader.load(url,function(image){texture.image=image;texture.needsUpdate=true;if(onLoad)onLoad(texture);},undefined,function(event){if(onError)onError(event);});texture.sourceFile=url;return texture;},loadTextureCube:function loadTextureCube(array,mapping,onLoad,onError){var images=[];var loader=new THREE.ImageLoader();loader.crossOrigin=this.crossOrigin;var texture=new THREE.CubeTexture(images,mapping);texture.flipY=false;var loaded=0;var loadTexture=function loadTexture(i){loader.load(array[i],function(image){texture.images[i]=image;loaded+=1;if(loaded===6){texture.needsUpdate=true;if(onLoad)onLoad(texture);}});};for(var i=0,il=array.length;iheight-1?height-1:y+1;var lx=x-1<0?0:x-1;var ux=x+1>width-1?width-1:x+1;var points=[];var origin=[0,0,data[(y*width+x)*4]/255*depth];points.push([-1,0,data[(y*width+lx)*4]/255*depth]);points.push([-1,-1,data[(ly*width+lx)*4]/255*depth]);points.push([0,-1,data[(ly*width+x)*4]/255*depth]);points.push([1,-1,data[(ly*width+ux)*4]/255*depth]);points.push([1,0,data[(y*width+ux)*4]/255*depth]);points.push([1,1,data[(uy*width+ux)*4]/255*depth]);points.push([0,1,data[(uy*width+x)*4]/255*depth]);points.push([-1,1,data[(uy*width+lx)*4]/255*depth]);var normals=[];var num_points=points.length;for(var i=0;i0.0){for(v=0;v2;){if(count--<=0){console.log('Warning, unable to triangulate polygon!');if(indices)return vertIndices;return result;}u=v;if(nv<=u)u=0;v=u+1;if(nv<=v)v=0;w=v+1;if(nv<=w)w=0;if(snip(contour,u,v,w,nv,verts)){var a,b,c,s,t;a=verts[u];b=verts[v];c=verts[w];result.push([contour[a],contour[b],contour[c]]);vertIndices.push([verts[u],verts[v],verts[w]]);for(s=v,t=v+1;t(bx-ax)*(cy-ay)-(by-ay)*(cx-ax))return false;var aX,aY,bX,bY,cX,cY;var apx,apy,bpx,bpy,cpx,cpy;var cCROSSap,bCROSScp,aCROSSbp;aX=cx-bx;aY=cy-by;bX=ax-cx;bY=ay-cy;cX=bx-ax;cY=by-ay;for(p=0;p=-EPSILON&&bCROSScp>=-EPSILON&&cCROSSap>=-EPSILON)return false;}return true;};namespace.Triangulate=process;namespace.Triangulate.area=area;return namespace;})(THREE.FontUtils);self._typeface_js={faces:THREE.FontUtils.faces,loadFace:THREE.FontUtils.loadFace};THREE.typeface_js=self._typeface_js;THREE.Audio=function(listener){THREE.Object3D.call(this);this.type='Audio';this.context=listener.context;this.source=this.context.createBufferSource();this.gain=this.context.createGain();this.gain.connect(this.context.destination);this.panner=this.context.createPanner();this.panner.connect(this.gain);};THREE.Audio.prototype=(0,_create2.default)(THREE.Object3D.prototype);THREE.Audio.prototype.load=function(file){var scope=this;var request=new XMLHttpRequest();request.open('GET',file,true);request.responseType='arraybuffer';request.onload=function(e){scope.context.decodeAudioData(this.response,function(buffer){scope.source.buffer=buffer;scope.source.connect(scope.panner);scope.source.start(0);});};request.send();return this;};THREE.Audio.prototype.setLoop=function(value){this.source.loop=value;};THREE.Audio.prototype.setRefDistance=function(value){this.panner.refDistance=value;};THREE.Audio.prototype.setRolloffFactor=function(value){this.panner.rolloffFactor=value;};THREE.Audio.prototype.updateMatrixWorld=function(){var position=new THREE.Vector3();return function(force){THREE.Object3D.prototype.updateMatrixWorld.call(this,force);position.setFromMatrixPosition(this.matrixWorld);this.panner.setPosition(position.x,position.y,position.z);};}();THREE.AudioListener=function(){THREE.Object3D.call(this);this.type='AudioListener';this.context=new(window.AudioContext||window.webkitAudioContext)();};THREE.AudioListener.prototype=(0,_create2.default)(THREE.Object3D.prototype);THREE.AudioListener.prototype.updateMatrixWorld=function(){var position=new THREE.Vector3();var quaternion=new THREE.Quaternion();var scale=new THREE.Vector3();var orientation=new THREE.Vector3();var velocity=new THREE.Vector3();var positionPrev=new THREE.Vector3();return function(force){THREE.Object3D.prototype.updateMatrixWorld.call(this,force);var listener=this.context.listener;this.matrixWorld.decompose(position,quaternion,scale);orientation.set(0,0,-1).applyQuaternion(quaternion);velocity.subVectors(position,positionPrev);listener.setPosition(position.x,position.y,position.z);listener.setOrientation(orientation.x,orientation.y,orientation.z,this.up.x,this.up.y,this.up.z);listener.setVelocity(velocity.x,velocity.y,velocity.z);positionPrev.copy(position);};}();THREE.Curve=function(){};THREE.Curve.prototype.getPoint=function(t){console.log(\"Warning, getPoint() not implemented!\");return null;};THREE.Curve.prototype.getPointAt=function(u){var t=this.getUtoTmapping(u);return this.getPoint(t);};THREE.Curve.prototype.getPoints=function(divisions){if(!divisions)divisions=5;var d,pts=[];for(d=0;d<=divisions;d++){pts.push(this.getPoint(d/divisions));}return pts;};THREE.Curve.prototype.getSpacedPoints=function(divisions){if(!divisions)divisions=5;var d,pts=[];for(d=0;d<=divisions;d++){pts.push(this.getPointAt(d/divisions));}return pts;};THREE.Curve.prototype.getLength=function(){var lengths=this.getLengths();return lengths[lengths.length-1];};THREE.Curve.prototype.getLengths=function(divisions){if(!divisions)divisions=this.__arcLengthDivisions?this.__arcLengthDivisions:200;if(this.cacheArcLengths&&this.cacheArcLengths.length==divisions+1&&!this.needsUpdate){return this.cacheArcLengths;}this.needsUpdate=false;var cache=[];var current,last=this.getPoint(0);var p,sum=0;cache.push(0);for(p=1;p<=divisions;p++){current=this.getPoint(p/divisions);sum+=current.distanceTo(last);cache.push(sum);last=current;}this.cacheArcLengths=cache;return cache;};THREE.Curve.prototype.updateArcLengths=function(){this.needsUpdate=true;this.getLengths();};THREE.Curve.prototype.getUtoTmapping=function(u,distance){var arcLengths=this.getLengths();var i=0,il=arcLengths.length;var targetArcLength;if(distance){targetArcLength=distance;}else{targetArcLength=u*arcLengths[il-1];}var low=0,high=il-1,comparison;while(low<=high){i=Math.floor(low+(high-low)/2);comparison=arcLengths[i]-targetArcLength;if(comparison<0){low=i+1;continue;}else if(comparison>0){high=i-1;continue;}else{high=i;break;}}i=high;if(arcLengths[i]==targetArcLength){var t=i/(il-1);return t;}var lengthBefore=arcLengths[i];var lengthAfter=arcLengths[i+1];var segmentLength=lengthAfter-lengthBefore;var segmentFraction=(targetArcLength-lengthBefore)/segmentLength;var t=(i+segmentFraction)/(il-1);return t;};THREE.Curve.prototype.getTangent=function(t){var delta=0.0001;var t1=t-delta;var t2=t+delta;if(t1<0)t1=0;if(t2>1)t2=1;var pt1=this.getPoint(t1);var pt2=this.getPoint(t2);var vec=pt2.clone().sub(pt1);return vec.normalize();};THREE.Curve.prototype.getTangentAt=function(u){var t=this.getUtoTmapping(u);return this.getTangent(t);};THREE.Curve.Utils={tangentQuadraticBezier:function tangentQuadraticBezier(t,p0,p1,p2){return 2*(1-t)*(p1-p0)+2*t*(p2-p1);},tangentCubicBezier:function tangentCubicBezier(t,p0,p1,p2,p3){return-3*p0*(1-t)*(1-t)+3*p1*(1-t)*(1-t)-6*t*p1*(1-t)+6*t*p2*(1-t)-3*t*t*p2+3*t*t*p3;},tangentSpline:function tangentSpline(t,p0,p1,p2,p3){var h00=6*t*t-6*t;var h10=3*t*t-4*t+1;var h01=-6*t*t+6*t;var h11=3*t*t-2*t;return h00+h10+h01+h11;},interpolate:function interpolate(p0,p1,p2,p3,t){var v0=(p2-p0)*0.5;var v1=(p3-p1)*0.5;var t2=t*t;var t3=t*t2;return(2*p1-2*p2+v0+v1)*t3+(-3*p1+3*p2-2*v0-v1)*t2+v0*t+p1;}};THREE.Curve.create=function(constructor,getPointFunc){constructor.prototype=(0,_create2.default)(THREE.Curve.prototype);constructor.prototype.getPoint=getPointFunc;return constructor;};THREE.CurvePath=function(){this.curves=[];this.bends=[];this.autoClose=false;};THREE.CurvePath.prototype=(0,_create2.default)(THREE.Curve.prototype);THREE.CurvePath.prototype.add=function(curve){this.curves.push(curve);};THREE.CurvePath.prototype.checkConnection=function(){};THREE.CurvePath.prototype.closePath=function(){var startPoint=this.curves[0].getPoint(0);var endPoint=this.curves[this.curves.length-1].getPoint(1);if(!startPoint.equals(endPoint)){this.curves.push(new THREE.LineCurve(endPoint,startPoint));}};THREE.CurvePath.prototype.getPoint=function(t){var d=t*this.getLength();var curveLengths=this.getCurveLengths();var i=0,diff,curve;while(i=d){diff=curveLengths[i]-d;curve=this.curves[i];var u=1-diff/curve.getLength();return curve.getPointAt(u);break;}i++;}return null;};THREE.CurvePath.prototype.getLength=function(){var lens=this.getCurveLengths();return lens[lens.length-1];};THREE.CurvePath.prototype.getCurveLengths=function(){if(this.cacheLengths&&this.cacheLengths.length==this.curves.length){return this.cacheLengths;};var lengths=[],sums=0;var i,il=this.curves.length;for(i=0;imaxX)maxX=p.x;else if(p.xmaxY)maxY=p.y;else if(p.ymaxZ)maxZ=p.z;else if(p.z0){laste=points[points.length-1];cpx0=laste.x;cpy0=laste.y;}else{laste=this.actions[i-1].args;cpx0=laste[laste.length-2];cpy0=laste[laste.length-1];}for(j=1;j<=divisions;j++){t=j/divisions;tx=THREE.Shape.Utils.b2(t,cpx0,cpx1,cpx);ty=THREE.Shape.Utils.b2(t,cpy0,cpy1,cpy);points.push(new THREE.Vector2(tx,ty));}break;case THREE.PathActions.BEZIER_CURVE_TO:cpx=args[4];cpy=args[5];cpx1=args[0];cpy1=args[1];cpx2=args[2];cpy2=args[3];if(points.length>0){laste=points[points.length-1];cpx0=laste.x;cpy0=laste.y;}else{laste=this.actions[i-1].args;cpx0=laste[laste.length-2];cpy0=laste[laste.length-1];}for(j=1;j<=divisions;j++){t=j/divisions;tx=THREE.Shape.Utils.b3(t,cpx0,cpx1,cpx2,cpx);ty=THREE.Shape.Utils.b3(t,cpy0,cpy1,cpy2,cpy);points.push(new THREE.Vector2(tx,ty));}break;case THREE.PathActions.CSPLINE_THRU:laste=this.actions[i-1].args;var last=new THREE.Vector2(laste[laste.length-2],laste[laste.length-1]);var spts=[last];var n=divisions*args[0].length;spts=spts.concat(args[0]);var spline=new THREE.SplineCurve(spts);for(j=1;j<=n;j++){points.push(spline.getPointAt(j/n));}break;case THREE.PathActions.ARC:var aX=args[0],aY=args[1],aRadius=args[2],aStartAngle=args[3],aEndAngle=args[4],aClockwise=!!args[5];var deltaAngle=aEndAngle-aStartAngle;var angle;var tdivisions=divisions*2;for(j=1;j<=tdivisions;j++){t=j/tdivisions;if(!aClockwise){t=1-t;}angle=aStartAngle+t*deltaAngle;tx=aX+aRadius*Math.cos(angle);ty=aY+aRadius*Math.sin(angle);points.push(new THREE.Vector2(tx,ty));}break;case THREE.PathActions.ELLIPSE:var aX=args[0],aY=args[1],xRadius=args[2],yRadius=args[3],aStartAngle=args[4],aEndAngle=args[5],aClockwise=!!args[6];var deltaAngle=aEndAngle-aStartAngle;var angle;var tdivisions=divisions*2;for(j=1;j<=tdivisions;j++){t=j/tdivisions;if(!aClockwise){t=1-t;}angle=aStartAngle+t*deltaAngle;tx=aX+xRadius*Math.cos(angle);ty=aY+yRadius*Math.sin(angle);points.push(new THREE.Vector2(tx,ty));}break;}}var lastPoint=points[points.length-1];var EPSILON=0.0000000001;if(Math.abs(lastPoint.x-points[0].x)EPSILON){if(edgeDy<0){edgeLowPt=inPolygon[q];edgeDx=-edgeDx;edgeHighPt=inPolygon[p];edgeDy=-edgeDy;}if(inPt.yedgeHighPt.y)continue;if(inPt.y==edgeLowPt.y){if(inPt.x==edgeLowPt.x)return true;}else{var perpEdge=edgeDy*(inPt.x-edgeLowPt.x)-edgeDx*(inPt.y-edgeLowPt.y);if(perpEdge==0)return true;if(perpEdge<0)continue;inside=!inside;}}else{if(inPt.y!=edgeLowPt.y)continue;if(edgeHighPt.x<=inPt.x&&inPt.x<=edgeLowPt.x||edgeLowPt.x<=inPt.x&&inPt.x<=edgeHighPt.x)return true;}}return inside;}var subPaths=extractSubpaths(this.actions);if(subPaths.length==0)return[];if(noHoles===true)return toShapesNoHoles(subPaths);var solid,tmpPath,tmpShape,shapes=[];if(subPaths.length==1){tmpPath=subPaths[0];tmpShape=new THREE.Shape();tmpShape.actions=tmpPath.actions;tmpShape.curves=tmpPath.curves;shapes.push(tmpShape);return shapes;}var holesFirst=!THREE.Shape.Utils.isClockWise(subPaths[0].getPoints());holesFirst=isCCW?!holesFirst:holesFirst;var betterShapeHoles=[];var newShapes=[];var newShapeHoles=[];var mainIdx=0;var tmpPoints;newShapes[mainIdx]=undefined;newShapeHoles[mainIdx]=[];var i,il;for(i=0,il=subPaths.length;i1){var ambigious=false;var toChange=[];for(var sIdx=0,sLen=newShapes.length;sIdx0){if(!ambigious)newShapeHoles=betterShapeHoles;}}var tmpHoles,j,jl;for(i=0,il=newShapes.length;iEPSILON){var perpSeg2;if(limit>0){if(perpSeg1<0||perpSeg1>limit)return[];perpSeg2=seg2dy*seg1seg2dx-seg2dx*seg1seg2dy;if(perpSeg2<0||perpSeg2>limit)return[];}else{if(perpSeg1>0||perpSeg10||perpSeg2seg2maxVal)return[];if(seg1minVal==seg2maxVal){if(inExcludeAdjacentSegs)return[];return[seg1min];}if(seg1maxVal<=seg2maxVal)return[seg1min,seg1max];return[seg1min,seg2max];}}}function isPointInsideAngle(inVertex,inLegFromPt,inLegToPt,inOtherPt){var EPSILON=0.0000000001;var legFromPtX=inLegFromPt.x-inVertex.x,legFromPtY=inLegFromPt.y-inVertex.y;var legToPtX=inLegToPt.x-inVertex.x,legToPtY=inLegToPt.y-inVertex.y;var otherPtX=inOtherPt.x-inVertex.x,otherPtY=inOtherPt.y-inVertex.y;var from2toAngle=legFromPtX*legToPtY-legFromPtY*legToPtX;var from2otherAngle=legFromPtX*otherPtY-legFromPtY*otherPtX;if(Math.abs(from2toAngle)>EPSILON){var other2toAngle=otherPtX*legToPtY-otherPtY*legToPtX;if(from2toAngle>0){return from2otherAngle>=0&&other2toAngle>=0;}else{return from2otherAngle>=0||other2toAngle>=0;}}else{return from2otherAngle>0;}}function removeHoles(contour,holes){var shape=contour.concat();var hole;function isCutLineInsideAngles(inShapeIdx,inHoleIdx){var lastShapeIdx=shape.length-1;var prevShapeIdx=inShapeIdx-1;if(prevShapeIdx<0)prevShapeIdx=lastShapeIdx;var nextShapeIdx=inShapeIdx+1;if(nextShapeIdx>lastShapeIdx)nextShapeIdx=0;var insideAngle=isPointInsideAngle(shape[inShapeIdx],shape[prevShapeIdx],shape[nextShapeIdx],hole[inHoleIdx]);if(!insideAngle){return false;}var lastHoleIdx=hole.length-1;var prevHoleIdx=inHoleIdx-1;if(prevHoleIdx<0)prevHoleIdx=lastHoleIdx;var nextHoleIdx=inHoleIdx+1;if(nextHoleIdx>lastHoleIdx)nextHoleIdx=0;insideAngle=isPointInsideAngle(hole[inHoleIdx],hole[prevHoleIdx],hole[nextHoleIdx],shape[inShapeIdx]);if(!insideAngle){return false;}return true;}function intersectsShapeEdge(inShapePt,inHolePt){var sIdx,nextIdx,intersection;for(sIdx=0;sIdx0)return true;}return false;}var indepHoles=[];function intersectsHoleEdge(inShapePt,inHolePt){var ihIdx,chkHole,hIdx,nextIdx,intersection;for(ihIdx=0;ihIdx0)return true;}}return false;}var holeIndex,shapeIndex,shapePt,holePt,holeIdx,cutKey,failedCuts=[],tmpShape1,tmpShape2,tmpHole1,tmpHole2;for(var h=0,hl=holes.length;h0){counter--;if(counter<0){console.log(\"Infinite Loop! Holes left:\"+indepHoles.length+\", Probably Hole outside Shape!\");break;}for(shapeIndex=minShapeIndex;shapeIndex=0)break;failedCuts[cutKey]=true;}if(holeIndex>=0)break;}}return shape;}var i,il,f,face,key,index,allPointsMap={};var allpoints=contour.concat();for(var h=0,hl=holes.length;hpoints.length-2?points.length-1:intPoint+1];var point3=points[intPoint>points.length-3?points.length-1:intPoint+2];var vector=new THREE.Vector2();vector.x=THREE.Curve.Utils.interpolate(point0.x,point1.x,point2.x,point3.x,weight);vector.y=THREE.Curve.Utils.interpolate(point0.y,point1.y,point2.y,point3.y,weight);return vector;};THREE.EllipseCurve=function(aX,aY,xRadius,yRadius,aStartAngle,aEndAngle,aClockwise){this.aX=aX;this.aY=aY;this.xRadius=xRadius;this.yRadius=yRadius;this.aStartAngle=aStartAngle;this.aEndAngle=aEndAngle;this.aClockwise=aClockwise;};THREE.EllipseCurve.prototype=(0,_create2.default)(THREE.Curve.prototype);THREE.EllipseCurve.prototype.getPoint=function(t){var deltaAngle=this.aEndAngle-this.aStartAngle;if(deltaAngle<0)deltaAngle+=Math.PI*2;if(deltaAngle>Math.PI*2)deltaAngle-=Math.PI*2;var angle;if(this.aClockwise===true){angle=this.aEndAngle+(1-t)*(Math.PI*2-deltaAngle);}else{angle=this.aStartAngle+t*deltaAngle;}var vector=new THREE.Vector2();vector.x=this.aX+this.xRadius*Math.cos(angle);vector.y=this.aY+this.yRadius*Math.sin(angle);return vector;};THREE.ArcCurve=function(aX,aY,aRadius,aStartAngle,aEndAngle,aClockwise){THREE.EllipseCurve.call(this,aX,aY,aRadius,aRadius,aStartAngle,aEndAngle,aClockwise);};THREE.ArcCurve.prototype=(0,_create2.default)(THREE.EllipseCurve.prototype);THREE.LineCurve3=THREE.Curve.create(function(v1,v2){this.v1=v1;this.v2=v2;},function(t){var vector=new THREE.Vector3();vector.subVectors(this.v2,this.v1);vector.multiplyScalar(t);vector.add(this.v1);return vector;});THREE.QuadraticBezierCurve3=THREE.Curve.create(function(v0,v1,v2){this.v0=v0;this.v1=v1;this.v2=v2;},function(t){var vector=new THREE.Vector3();vector.x=THREE.Shape.Utils.b2(t,this.v0.x,this.v1.x,this.v2.x);vector.y=THREE.Shape.Utils.b2(t,this.v0.y,this.v1.y,this.v2.y);vector.z=THREE.Shape.Utils.b2(t,this.v0.z,this.v1.z,this.v2.z);return vector;});THREE.CubicBezierCurve3=THREE.Curve.create(function(v0,v1,v2,v3){this.v0=v0;this.v1=v1;this.v2=v2;this.v3=v3;},function(t){var vector=new THREE.Vector3();vector.x=THREE.Shape.Utils.b3(t,this.v0.x,this.v1.x,this.v2.x,this.v3.x);vector.y=THREE.Shape.Utils.b3(t,this.v0.y,this.v1.y,this.v2.y,this.v3.y);vector.z=THREE.Shape.Utils.b3(t,this.v0.z,this.v1.z,this.v2.z,this.v3.z);return vector;});THREE.SplineCurve3=THREE.Curve.create(function(points){this.points=points==undefined?[]:points;},function(t){var points=this.points;var point=(points.length-1)*t;var intPoint=Math.floor(point);var weight=point-intPoint;var point0=points[intPoint==0?intPoint:intPoint-1];var point1=points[intPoint];var point2=points[intPoint>points.length-2?points.length-1:intPoint+1];var point3=points[intPoint>points.length-3?points.length-1:intPoint+2];var vector=new THREE.Vector3();vector.x=THREE.Curve.Utils.interpolate(point0.x,point1.x,point2.x,point3.x,weight);vector.y=THREE.Curve.Utils.interpolate(point0.y,point1.y,point2.y,point3.y,weight);vector.z=THREE.Curve.Utils.interpolate(point0.z,point1.z,point2.z,point3.z,weight);return vector;});THREE.ClosedSplineCurve3=THREE.Curve.create(function(points){this.points=points==undefined?[]:points;},function(t){var points=this.points;var point=(points.length-0)*t;var intPoint=Math.floor(point);var weight=point-intPoint;intPoint+=intPoint>0?0:(Math.floor(Math.abs(intPoint)/points.length)+1)*points.length;var point0=points[(intPoint-1)%points.length];var point1=points[intPoint%points.length];var point2=points[(intPoint+1)%points.length];var point3=points[(intPoint+2)%points.length];var vector=new THREE.Vector3();vector.x=THREE.Curve.Utils.interpolate(point0.x,point1.x,point2.x,point3.x,weight);vector.y=THREE.Curve.Utils.interpolate(point0.y,point1.y,point2.y,point3.y,weight);vector.z=THREE.Curve.Utils.interpolate(point0.z,point1.z,point2.z,point3.z,weight);return vector;});THREE.AnimationHandler={LINEAR:0,CATMULLROM:1,CATMULLROM_FORWARD:2,add:function add(){console.warn('THREE.AnimationHandler.add() has been deprecated.');},get:function get(){console.warn('THREE.AnimationHandler.get() has been deprecated.');},remove:function remove(){console.warn('THREE.AnimationHandler.remove() has been deprecated.');},animations:[],init:function init(data){if(data.initialized===true)return;for(var h=0;hprevKey.index){prevKey=nextKey;nextKey=this.getNextKeyWith(type,h,nextKey.index+1);}animationCache.prevKey[type]=prevKey;animationCache.nextKey[type]=nextKey;}}};THREE.Animation.prototype.resetBlendWeights=function(){for(var h=0,hl=this.hierarchy.length;hpoints.length-2?intPoint:intPoint+1;c[3]=intPoint>points.length-3?intPoint:intPoint+2;pa=points[c[0]];pb=points[c[1]];pc=points[c[2]];pd=points[c[3]];w2=weight*weight;w3=weight*w2;v3[0]=interpolate(pa[0],pb[0],pc[0],pd[0],weight,w2,w3);v3[1]=interpolate(pa[1],pb[1],pc[1],pd[1],weight,w2,w3);v3[2]=interpolate(pa[2],pb[2],pc[2],pd[2],weight,w2,w3);return v3;};var interpolate=function interpolate(p0,p1,p2,p3,t,t2,t3){var v0=(p2-p0)*0.5,v1=(p3-p1)*0.5;return(2*(p1-p2)+v0+v1)*t3+(-3*(p1-p2)-2*v0-v1)*t2+v0*t+p1;};return function(delta){if(this.isPlaying===false)return;this.currentTime+=delta*this.timeScale;if(this.weight===0)return;var duration=this.data.length;if(this.currentTime>duration||this.currentTime<0){if(this.loop){this.currentTime%=duration;if(this.currentTime<0)this.currentTime+=duration;this.reset();}else{this.stop();return;}}for(var h=0,hl=this.hierarchy.length;h0&&nextKey.time<=this.currentTime||this.timeScale<0&&prevKey.time>=this.currentTime){prevKey=this.data.hierarchy[h].keys[0];nextKey=this.getNextKeyWith(type,h,1);while(nextKey.timeprevKey.index){prevKey=nextKey;nextKey=this.getNextKeyWith(type,h,nextKey.index+1);}animationCache.prevKey[type]=prevKey;animationCache.nextKey[type]=nextKey;}object.matrixAutoUpdate=true;object.matrixWorldNeedsUpdate=true;var scale=(this.currentTime-prevKey.time)/(nextKey.time-prevKey.time);var prevXYZ=prevKey[type];var nextXYZ=nextKey[type];if(scale<0)scale=0;if(scale>1)scale=1;if(type===\"pos\"){if(this.interpolationType===THREE.AnimationHandler.LINEAR){newVector.x=prevXYZ[0]+(nextXYZ[0]-prevXYZ[0])*scale;newVector.y=prevXYZ[1]+(nextXYZ[1]-prevXYZ[1])*scale;newVector.z=prevXYZ[2]+(nextXYZ[2]-prevXYZ[2])*scale;var proportionalWeight=this.weight/(this.weight+blending.positionWeight);object.position.lerp(newVector,proportionalWeight);blending.positionWeight+=this.weight;}else if(this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD){points[0]=this.getPrevKeyWith(\"pos\",h,prevKey.index-1)[\"pos\"];points[1]=prevXYZ;points[2]=nextXYZ;points[3]=this.getNextKeyWith(\"pos\",h,nextKey.index+1)[\"pos\"];scale=scale*0.33+0.33;var currentPoint=interpolateCatmullRom(points,scale);var proportionalWeight=this.weight/(this.weight+blending.positionWeight);blending.positionWeight+=this.weight;var vector=object.position;vector.x=vector.x+(currentPoint[0]-vector.x)*proportionalWeight;vector.y=vector.y+(currentPoint[1]-vector.y)*proportionalWeight;vector.z=vector.z+(currentPoint[2]-vector.z)*proportionalWeight;if(this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD){var forwardPoint=interpolateCatmullRom(points,scale*1.01);target.set(forwardPoint[0],forwardPoint[1],forwardPoint[2]);target.sub(vector);target.y=0;target.normalize();var angle=Math.atan2(target.x,target.z);object.rotation.set(0,angle,0);}}}else if(type===\"rot\"){THREE.Quaternion.slerp(prevXYZ,nextXYZ,newQuat,scale);if(blending.quaternionWeight===0){object.quaternion.copy(newQuat);blending.quaternionWeight=this.weight;}else{var proportionalWeight=this.weight/(this.weight+blending.quaternionWeight);THREE.Quaternion.slerp(object.quaternion,newQuat,object.quaternion,proportionalWeight);blending.quaternionWeight+=this.weight;}}else if(type===\"scl\"){newVector.x=prevXYZ[0]+(nextXYZ[0]-prevXYZ[0])*scale;newVector.y=prevXYZ[1]+(nextXYZ[1]-prevXYZ[1])*scale;newVector.z=prevXYZ[2]+(nextXYZ[2]-prevXYZ[2])*scale;var proportionalWeight=this.weight/(this.weight+blending.scaleWeight);object.scale.lerp(newVector,proportionalWeight);blending.scaleWeight+=this.weight;}}}return true;};}();THREE.Animation.prototype.getNextKeyWith=function(type,h,key){var keys=this.data.hierarchy[h].keys;if(this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD){key=key0?key:0;}else{key=key>=0?key:key+keys.length;}for(;key>=0;key--){if(keys[key][type]!==undefined){return keys[key];}}return this.data.hierarchy[h].keys[keys.length-1];};THREE.KeyFrameAnimation=function(data){this.root=data.node;this.data=THREE.AnimationHandler.init(data);this.hierarchy=THREE.AnimationHandler.parse(this.root);this.currentTime=0;this.timeScale=0.001;this.isPlaying=false;this.isPaused=true;this.loop=true;for(var h=0,hl=this.hierarchy.length;hduration){this.currentTime%=duration;}this.currentTime=Math.min(this.currentTime,duration);for(var h=0,hl=this.hierarchy.length;hprevKey.index){prevKey=nextKey;nextKey=keys[prevKey.index+1];}animationCache.prevKey=prevKey;animationCache.nextKey=nextKey;}if(nextKey.time>=this.currentTime){prevKey.interpolate(nextKey,this.currentTime);}else{prevKey.interpolate(nextKey,nextKey.time);}this.data.hierarchy[h].node.updateMatrix();object.matrixWorldNeedsUpdate=true;}}};THREE.KeyFrameAnimation.prototype.getNextKeyWith=function(sid,h,key){var keys=this.data.hierarchy[h].keys;key=key%keys.length;for(;key=0?key:key+keys.length;for(;key>=0;key--){if(keys[key].hasTarget(sid)){return keys[key];}}return keys[keys.length-1];};THREE.MorphAnimation=function(mesh){this.mesh=mesh;this.frames=mesh.morphTargetInfluences.length;this.currentTime=0;this.duration=1000;this.loop=true;this.isPlaying=false;};THREE.MorphAnimation.prototype={play:function play(){this.isPlaying=true;},pause:function pause(){this.isPlaying=false;},update:function(){var lastFrame=0;var currentFrame=0;return function(delta){if(this.isPlaying===false)return;this.currentTime+=delta;if(this.loop===true&&this.currentTime>this.duration){this.currentTime%=this.duration;}this.currentTime=Math.min(this.currentTime,this.duration);var interpolation=this.duration/this.frames;var frame=Math.floor(this.currentTime/interpolation);if(frame!=currentFrame){this.mesh.morphTargetInfluences[lastFrame]=0;this.mesh.morphTargetInfluences[currentFrame]=1;this.mesh.morphTargetInfluences[frame]=0;lastFrame=currentFrame;currentFrame=frame;}this.mesh.morphTargetInfluences[frame]=this.currentTime%interpolation/interpolation;this.mesh.morphTargetInfluences[lastFrame]=1-this.mesh.morphTargetInfluences[frame];};}()};THREE.BoxGeometry=function(width,height,depth,widthSegments,heightSegments,depthSegments){THREE.Geometry.call(this);this.type='BoxGeometry';this.parameters={width:width,height:height,depth:depth,widthSegments:widthSegments,heightSegments:heightSegments,depthSegments:depthSegments};this.widthSegments=widthSegments||1;this.heightSegments=heightSegments||1;this.depthSegments=depthSegments||1;var scope=this;var width_half=width/2;var height_half=height/2;var depth_half=depth/2;buildPlane('z','y',-1,-1,depth,height,width_half,0);buildPlane('z','y',1,-1,depth,height,-width_half,1);buildPlane('x','z',1,1,width,depth,height_half,2);buildPlane('x','z',1,-1,width,depth,-height_half,3);buildPlane('x','y',1,-1,width,height,depth_half,4);buildPlane('x','y',-1,-1,width,height,-depth_half,5);function buildPlane(u,v,udir,vdir,width,height,depth,materialIndex){var w,ix,iy,gridX=scope.widthSegments,gridY=scope.heightSegments,width_half=width/2,height_half=height/2,offset=scope.vertices.length;if(u==='x'&&v==='y'||u==='y'&&v==='x'){w='z';}else if(u==='x'&&v==='z'||u==='z'&&v==='x'){w='y';gridY=scope.depthSegments;}else if(u==='z'&&v==='y'||u==='y'&&v==='z'){w='x';gridX=scope.depthSegments;}var gridX1=gridX+1,gridY1=gridY+1,segment_width=width/gridX,segment_height=height/gridY,normal=new THREE.Vector3();normal[w]=depth>0?1:-1;for(iy=0;iy0){this.vertices.push(new THREE.Vector3(0,heightHalf,0));for(x=0;x0){this.vertices.push(new THREE.Vector3(0,-heightHalf,0));for(x=0;xEPSILON){var v_prev_len=Math.sqrt(v_prev_lensq);var v_next_len=Math.sqrt(v_next_x*v_next_x+v_next_y*v_next_y);var ptPrevShift_x=inPrev.x-v_prev_y/v_prev_len;var ptPrevShift_y=inPrev.y+v_prev_x/v_prev_len;var ptNextShift_x=inNext.x-v_next_y/v_next_len;var ptNextShift_y=inNext.y+v_next_x/v_next_len;var sf=((ptNextShift_x-ptPrevShift_x)*v_next_y-(ptNextShift_y-ptPrevShift_y)*v_next_x)/(v_prev_x*v_next_y-v_prev_y*v_next_x);v_trans_x=ptPrevShift_x+v_prev_x*sf-inPt.x;v_trans_y=ptPrevShift_y+v_prev_y*sf-inPt.y;var v_trans_lensq=v_trans_x*v_trans_x+v_trans_y*v_trans_y;if(v_trans_lensq<=2){return new THREE.Vector2(v_trans_x,v_trans_y);}else{shrink_by=Math.sqrt(v_trans_lensq/2);}}else{var direction_eq=false;if(v_prev_x>EPSILON){if(v_next_x>EPSILON){direction_eq=true;}}else{if(v_prev_x<-EPSILON){if(v_next_x<-EPSILON){direction_eq=true;}}else{if((0,_sign2.default)(v_prev_y)==(0,_sign2.default)(v_next_y)){direction_eq=true;}}}if(direction_eq){v_trans_x=-v_prev_y;v_trans_y=v_prev_x;shrink_by=Math.sqrt(v_prev_lensq);}else{v_trans_x=v_prev_x;v_trans_y=v_prev_y;shrink_by=Math.sqrt(v_prev_lensq/2);}}return new THREE.Vector2(v_trans_x/shrink_by,v_trans_y/shrink_by);}var contourMovements=[];for(var i=0,il=contour.length,j=il-1,k=i+1;i=0;b--){t=b/bevelSegments;z=bevelThickness*(1-t);bs=bevelSize*Math.sin(t*Math.PI/2);for(i=0,il=contour.length;i=0){j=i;k=i-1;if(k<0)k=contour.length-1;var s=0,sl=steps+bevelSegments*2;for(s=0;s65535?Uint32Array:Uint16Array)(gridX*gridY*6);for(var iy=0;iyepsilon){vec.normalize();theta=Math.acos(THREE.Math.clamp(tangents[i-1].dot(tangents[i]),-1,1));normals[i].applyMatrix4(mat.makeRotationAxis(vec,theta));}binormals[i].crossVectors(tangents[i],normals[i]);}if(closed){theta=Math.acos(THREE.Math.clamp(normals[0].dot(normals[numpoints-1]),-1,1));theta/=numpoints-1;if(tangents[0].dot(vec.crossVectors(normals[0],normals[numpoints-1]))>0){theta=-theta;}for(i=1;i0.9&&min<0.1){if(x0<0.2)uvs[0].x+=1;if(x1<0.2)uvs[1].x+=1;if(x2<0.2)uvs[2].x+=1;}}for(var i=0,l=this.vertices.length;i0.99999){this.quaternion.set(0,0,0,1);}else if(dir.y<-0.99999){this.quaternion.set(1,0,0,0);}else{axis.set(dir.z,0,-dir.x).normalize();radians=Math.acos(dir.y);this.quaternion.setFromAxisAngle(axis,radians);}};}();THREE.ArrowHelper.prototype.setLength=function(length,headLength,headWidth){if(headLength===undefined)headLength=0.2*length;if(headWidth===undefined)headWidth=0.2*headLength;this.line.scale.set(1,length,1);this.line.updateMatrix();this.cone.scale.set(headWidth,headLength,headWidth);this.cone.position.y=length;this.cone.updateMatrix();};THREE.ArrowHelper.prototype.setColor=function(color){this.line.material.color.set(color);this.cone.material.color.set(color);};THREE.BoxHelper=function(object){var geometry=new THREE.BufferGeometry();geometry.addAttribute('position',new THREE.BufferAttribute(new Float32Array(72),3));THREE.Line.call(this,geometry,new THREE.LineBasicMaterial({color:0xffff00}),THREE.LinePieces);if(object!==undefined){this.update(object);}};THREE.BoxHelper.prototype=(0,_create2.default)(THREE.Line.prototype);THREE.BoxHelper.prototype.update=function(object){var geometry=object.geometry;if(geometry.boundingBox===null){geometry.computeBoundingBox();}var min=geometry.boundingBox.min;var max=geometry.boundingBox.max;var vertices=this.geometry.attributes.position.array;vertices[0]=max.x;vertices[1]=max.y;vertices[2]=max.z;vertices[3]=min.x;vertices[4]=max.y;vertices[5]=max.z;vertices[6]=min.x;vertices[7]=max.y;vertices[8]=max.z;vertices[9]=min.x;vertices[10]=min.y;vertices[11]=max.z;vertices[12]=min.x;vertices[13]=min.y;vertices[14]=max.z;vertices[15]=max.x;vertices[16]=min.y;vertices[17]=max.z;vertices[18]=max.x;vertices[19]=min.y;vertices[20]=max.z;vertices[21]=max.x;vertices[22]=max.y;vertices[23]=max.z;vertices[24]=max.x;vertices[25]=max.y;vertices[26]=min.z;vertices[27]=min.x;vertices[28]=max.y;vertices[29]=min.z;vertices[30]=min.x;vertices[31]=max.y;vertices[32]=min.z;vertices[33]=min.x;vertices[34]=min.y;vertices[35]=min.z;vertices[36]=min.x;vertices[37]=min.y;vertices[38]=min.z;vertices[39]=max.x;vertices[40]=min.y;vertices[41]=min.z;vertices[42]=max.x;vertices[43]=min.y;vertices[44]=min.z;vertices[45]=max.x;vertices[46]=max.y;vertices[47]=min.z;vertices[48]=max.x;vertices[49]=max.y;vertices[50]=max.z;vertices[51]=max.x;vertices[52]=max.y;vertices[53]=min.z;vertices[54]=min.x;vertices[55]=max.y;vertices[56]=max.z;vertices[57]=min.x;vertices[58]=max.y;vertices[59]=min.z;vertices[60]=min.x;vertices[61]=min.y;vertices[62]=max.z;vertices[63]=min.x;vertices[64]=min.y;vertices[65]=min.z;vertices[66]=max.x;vertices[67]=min.y;vertices[68]=max.z;vertices[69]=max.x;vertices[70]=min.y;vertices[71]=min.z;this.geometry.attributes.position.needsUpdate=true;this.geometry.computeBoundingSphere();this.matrix=object.matrixWorld;this.matrixAutoUpdate=false;};THREE.BoundingBoxHelper=function(object,hex){var color=hex!==undefined?hex:0x888888;this.object=object;this.box=new THREE.Box3();THREE.Mesh.call(this,new THREE.BoxGeometry(1,1,1),new THREE.MeshBasicMaterial({color:color,wireframe:true}));};THREE.BoundingBoxHelper.prototype=(0,_create2.default)(THREE.Mesh.prototype);THREE.BoundingBoxHelper.prototype.update=function(){this.box.setFromObject(this.object);this.box.size(this.scale);this.box.center(this.position);};THREE.CameraHelper=function(camera){var geometry=new THREE.Geometry();var material=new THREE.LineBasicMaterial({color:0xffffff,vertexColors:THREE.FaceColors});var pointMap={};var hexFrustum=0xffaa00;var hexCone=0xff0000;var hexUp=0x00aaff;var hexTarget=0xffffff;var hexCross=0x333333;addLine(\"n1\",\"n2\",hexFrustum);addLine(\"n2\",\"n4\",hexFrustum);addLine(\"n4\",\"n3\",hexFrustum);addLine(\"n3\",\"n1\",hexFrustum);addLine(\"f1\",\"f2\",hexFrustum);addLine(\"f2\",\"f4\",hexFrustum);addLine(\"f4\",\"f3\",hexFrustum);addLine(\"f3\",\"f1\",hexFrustum);addLine(\"n1\",\"f1\",hexFrustum);addLine(\"n2\",\"f2\",hexFrustum);addLine(\"n3\",\"f3\",hexFrustum);addLine(\"n4\",\"f4\",hexFrustum);addLine(\"p\",\"n1\",hexCone);addLine(\"p\",\"n2\",hexCone);addLine(\"p\",\"n3\",hexCone);addLine(\"p\",\"n4\",hexCone);addLine(\"u1\",\"u2\",hexUp);addLine(\"u2\",\"u3\",hexUp);addLine(\"u3\",\"u1\",hexUp);addLine(\"c\",\"t\",hexTarget);addLine(\"p\",\"c\",hexCross);addLine(\"cn1\",\"cn2\",hexCross);addLine(\"cn3\",\"cn4\",hexCross);addLine(\"cf1\",\"cf2\",hexCross);addLine(\"cf3\",\"cf4\",hexCross);function addLine(a,b,hex){addPoint(a,hex);addPoint(b,hex);}function addPoint(id,hex){geometry.vertices.push(new THREE.Vector3());geometry.colors.push(new THREE.Color(hex));if(pointMap[id]===undefined){pointMap[id]=[];}pointMap[id].push(geometry.vertices.length-1);}THREE.Line.call(this,geometry,material,THREE.LinePieces);this.camera=camera;this.matrix=camera.matrixWorld;this.matrixAutoUpdate=false;this.pointMap=pointMap;this.update();};THREE.CameraHelper.prototype=(0,_create2.default)(THREE.Line.prototype);THREE.CameraHelper.prototype.update=function(){var geometry,pointMap;var vector=new THREE.Vector3();var camera=new THREE.Camera();var setPoint=function setPoint(point,x,y,z){vector.set(x,y,z).unproject(camera);var points=pointMap[point];if(points!==undefined){for(var i=0,il=points.length;i1){var name=chunks[1];var num=chunks[2];if(!frameRanges[name])frameRanges[name]={start:Infinity,end:-Infinity};var range=frameRanges[name];if(irange.end)range.end=i;if(!firstAnimation)firstAnimation=name;}}for(var name in frameRanges){var range=frameRanges[name];this.createAnimation(name,range.start,range.end,fps);}this.firstAnimation=firstAnimation;};THREE.MorphBlendMesh.prototype.setAnimationDirectionForward=function(name){var animation=this.animationsMap[name];if(animation){animation.direction=1;animation.directionBackwards=false;}};THREE.MorphBlendMesh.prototype.setAnimationDirectionBackward=function(name){var animation=this.animationsMap[name];if(animation){animation.direction=-1;animation.directionBackwards=true;}};THREE.MorphBlendMesh.prototype.setAnimationFPS=function(name,fps){var animation=this.animationsMap[name];if(animation){animation.fps=fps;animation.duration=(animation.end-animation.start)/animation.fps;}};THREE.MorphBlendMesh.prototype.setAnimationDuration=function(name,duration){var animation=this.animationsMap[name];if(animation){animation.duration=duration;animation.fps=(animation.end-animation.start)/animation.duration;}};THREE.MorphBlendMesh.prototype.setAnimationWeight=function(name,weight){var animation=this.animationsMap[name];if(animation){animation.weight=weight;}};THREE.MorphBlendMesh.prototype.setAnimationTime=function(name,time){var animation=this.animationsMap[name];if(animation){animation.time=time;}};THREE.MorphBlendMesh.prototype.getAnimationTime=function(name){var time=0;var animation=this.animationsMap[name];if(animation){time=animation.time;}return time;};THREE.MorphBlendMesh.prototype.getAnimationDuration=function(name){var duration=-1;var animation=this.animationsMap[name];if(animation){duration=animation.duration;}return duration;};THREE.MorphBlendMesh.prototype.playAnimation=function(name){var animation=this.animationsMap[name];if(animation){animation.time=0;animation.active=true;}else{console.warn(\"animation[\"+name+\"] undefined\");}};THREE.MorphBlendMesh.prototype.stopAnimation=function(name){var animation=this.animationsMap[name];if(animation){animation.active=false;}};THREE.MorphBlendMesh.prototype.update=function(delta){for(var i=0,il=this.animationsList.length;ianimation.duration||animation.time<0){animation.direction*=-1;if(animation.time>animation.duration){animation.time=animation.duration;animation.directionBackwards=true;}if(animation.time<0){animation.time=0;animation.directionBackwards=false;}}}else{animation.time=animation.time%animation.duration;if(animation.time<0)animation.time+=animation.duration;}var keyframe=animation.startFrame+THREE.Math.clamp(Math.floor(animation.time/frameTime),0,animation.length-1);var weight=animation.weight;if(keyframe!==animation.currentFrame){this.morphTargetInfluences[animation.lastFrame]=0;this.morphTargetInfluences[animation.currentFrame]=1*weight;this.morphTargetInfluences[keyframe]=0;animation.lastFrame=animation.currentFrame;animation.currentFrame=keyframe;}var mix=animation.time%frameTime/frameTime;if(animation.directionBackwards)mix=1-mix;this.morphTargetInfluences[animation.currentFrame]=mix*weight;this.morphTargetInfluences[animation.lastFrame]=(1-mix)*weight;}};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1077)(module)))\n\n/***/ }),\n\n/***/ 480:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _babelPolyfill = __webpack_require__(402);\n\nvar _babelPolyfill2 = _interopRequireDefault(_babelPolyfill);\n\nvar _vue = __webpack_require__(30);\n\nvar _vue2 = _interopRequireDefault(_vue);\n\nvar _App = __webpack_require__(409);\n\nvar _App2 = _interopRequireDefault(_App);\n\n__webpack_require__(406);\n\nvar _elementUi = __webpack_require__(403);\n\nvar _elementUi2 = _interopRequireDefault(_elementUi);\n\n__webpack_require__(404);\n\nvar _vueRouter = __webpack_require__(410);\n\nvar _vueRouter2 = _interopRequireDefault(_vueRouter);\n\nvar _store = __webpack_require__(401);\n\nvar _store2 = _interopRequireDefault(_store);\n\nvar _vuex = __webpack_require__(252);\n\nvar _vuex2 = _interopRequireDefault(_vuex);\n\nvar _nprogress = __webpack_require__(251);\n\nvar _nprogress2 = _interopRequireDefault(_nprogress);\n\n__webpack_require__(407);\n\nvar _routes = __webpack_require__(400);\n\nvar _routes2 = _interopRequireDefault(_routes);\n\nvar _mock = __webpack_require__(399);\n\nvar _mock2 = _interopRequireDefault(_mock);\n\n__webpack_require__(405);\n\n__webpack_require__(408);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n_mock2.default.bootstrap();\n\n\n_vue2.default.use(_elementUi2.default);\n_vue2.default.use(_vueRouter2.default);\n_vue2.default.use(_vuex2.default);\n\n_nprogress2.default.configure({ showSpinner: false });\n\nvar router = new _vueRouter2.default({\n routes: _routes2.default\n});\n\nrouter.beforeEach(function (to, from, next) {\n _nprogress2.default.start();\n if (to.path == '/login') {\n sessionStorage.removeItem('user');\n }\n var user = JSON.parse(sessionStorage.getItem('user'));\n if (!user && to.path != '/login') {\n next({ path: '/login' });\n } else {\n next();\n }\n});\n\nrouter.afterEach(function (transition) {\n _nprogress2.default.done();\n});\n\nnew _vue2.default({\n router: router,\n store: _store2.default,\n\n render: function render(h) {\n return h(_App2.default);\n }\n}).$mount('#app');\n\n/***/ }),\n\n/***/ 481:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Plans = exports.Maintains = exports.Categories = exports.Users = exports.LoginUsers = undefined;\n\nvar _mockjs = __webpack_require__(1033);\n\nvar _mockjs2 = _interopRequireDefault(_mockjs);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar LoginUsers = [{\n id: 1,\n username: 'admin',\n password: '123456',\n avatar: 'https://avatars1.githubusercontent.com/u/16631463?v=4&s=460',\n name: 'Admin'\n}];\n\nvar Users = [];\nvar Categories = [];\nvar Maintains = [];\nvar Plans = [];\n\nfor (var i = 0; i < 86; i++) {\n Users.push(_mockjs2.default.mock({\n id: _mockjs2.default.Random.guid(),\n siteName: _mockjs2.default.Random.cname(),\n deviceNo: _mockjs2.default.Random.integer(0, 50),\n startTime: _mockjs2.default.Random.date(),\n repeat: ['一次', '每天', '每周', '每季', '每年'],\n type: ['充电', '放电', '内阻'],\n state: _mockjs2.default.Random.integer(0, 1)\n }));\n}\n\nfor (var _i = 0; _i < 5; _i++) {\n Categories.push(_mockjs2.default.mock({\n id: _mockjs2.default.Random.guid(),\n name: _mockjs2.default.Random.cname(),\n option: []\n }));\n}\n\nfor (var _i2 = 0; _i2 < 20; _i2++) {\n Maintains.push(_mockjs2.default.mock({\n strMaintainId: _mockjs2.default.Random.id(),\n 'strTitle|1': ['空调新风设备维护', 'ups设备维护', '油机维护', '配电设备维护', '机架设备维护', '消防设备维护'],\n 'strContent|1': ['定期对设备进行维护', '定期对设备进行维护', '定期对设备进行维护', '定期对设备进行维护', '定期对设备进行维护', '定期对设备进行维护'],\n createTime: _mockjs2.default.Random.date(),\n updateTime: _mockjs2.default.Random.date(),\n cStartTime: _mockjs2.default.Random.date(),\n cEndTime: _mockjs2.default.Random.date(),\n uStartTime: _mockjs2.default.Random.date(),\n uEndTime: _mockjs2.default.Random.date()\n }));\n}\n\nfor (var _i3 = 0; _i3 < 21; _i3++) {\n Plans.push(_mockjs2.default.mock({\n strPlanId: _mockjs2.default.Random.guid(),\n strMaintainId: _mockjs2.default.Random.guid(),\n executeTime: _mockjs2.default.Random.datetime(),\n isCycle: _mockjs2.default.Random.integer(0, 1),\n 'cycleDay|1': ['1', '2', '3', '4', '5'],\n 'executeHour|1': ['2', '4', '6', '8', '10'],\n 'executeMinute|1': ['5', '10', '15', '20', '30'],\n 'description|1': ['定期对设备进行维护,1个月一次', '定期对设备进行维护,1周一次', '定期对设备进行维护,1天一次', '定期对设备进行维护,两周一次', '定期对设备进行维护,12小时一次', '定期对设备进行维护,1季度一次'],\n equipmentCategory: _mockjs2.default.Random.guid(),\n equipmentId: _mockjs2.default.Random.guid(),\n 'strTitle|1': ['空调新风设备维护', 'ups设备维护', '油机维护', '配电设备维护', '机架设备维护', '消防设备维护'],\n 'strContent|1': ['定期对设备进行维护', '定期对设备进行维护', '定期对设备进行维护', '定期对设备进行维护', '定期对设备进行维护', '定期对设备进行维护'],\n cStartTime: _mockjs2.default.Random.date(),\n cEndTime: _mockjs2.default.Random.date(),\n uStartTime: _mockjs2.default.Random.date(),\n uEndTime: _mockjs2.default.Random.date()\n }));\n}\n\nexports.LoginUsers = LoginUsers;\nexports.Users = Users;\nexports.Categories = Categories;\nexports.Maintains = Maintains;\nexports.Plans = Plans;\n\n/***/ }),\n\n/***/ 482:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _stringify = __webpack_require__(177);\n\nvar _stringify2 = _interopRequireDefault(_stringify);\n\nvar _promise = __webpack_require__(263);\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _axios = __webpack_require__(175);\n\nvar _axios2 = _interopRequireDefault(_axios);\n\nvar _axiosMockAdapter = __webpack_require__(444);\n\nvar _axiosMockAdapter2 = _interopRequireDefault(_axiosMockAdapter);\n\nvar _db = __webpack_require__(481);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar _Users = _db.Users;\nvar _Categories = _db.Categories;\nvar _Maintains = _db.Maintains;\nvar _Plans = _db.Plans;\n\nexports.default = {\n bootstrap: function bootstrap() {\n var mock = new _axiosMockAdapter2.default(_axios2.default);\n\n mock.onGet('/success').reply(200, {\n msg: 'success'\n });\n\n mock.onGet('/error').reply(500, {\n msg: 'failure'\n });\n\n mock.onPost('/login').reply(function (config) {\n var _JSON$parse = JSON.parse(config.data),\n username = _JSON$parse.username,\n password = _JSON$parse.password;\n\n return new _promise2.default(function (resolve, reject) {\n var user = null;\n setTimeout(function () {\n var hasUser = _db.LoginUsers.some(function (u) {\n if (u.username === username && u.password === password) {\n user = JSON.parse((0, _stringify2.default)(u));\n user.password = undefined;\n return true;\n }\n });\n\n if (hasUser) {\n resolve([200, { code: 200, msg: '请求成功', user: user }]);\n } else {\n resolve([200, { code: 500, msg: '账号或密码错误' }]);\n }\n }, 1000);\n });\n });\n\n mock.onGet('/user/list').reply(function (config) {\n var _config$params = config.params,\n curPage = _config$params.curPage,\n pageSize = _config$params.pageSize,\n siteName = _config$params.siteName;\n\n var users = _Users.filter(function (user) {\n if (siteName && user.siteName.indexOf(siteName) == -1) return false;\n return true;\n });\n return new _promise2.default(function (resolve, reject) {\n setTimeout(function () {\n resolve([200, {\n users: users\n }]);\n }, 1000);\n });\n });\n\n mock.onGet('/user/listpage').reply(function (config) {\n var _config$params2 = config.params,\n curPage = _config$params2.curPage,\n pageSize = _config$params2.pageSize,\n siteName = _config$params2.siteName;\n\n var users = _Users.filter(function (user) {\n if (siteName && user.siteName.indexOf(siteName) == -1) return false;\n return true;\n });\n var total = users.length;\n users = users.filter(function (u, index) {\n return index < pageSize * curPage && index >= pageSize * (curPage - 1);\n });\n return new _promise2.default(function (resolve, reject) {\n setTimeout(function () {\n resolve([200, {\n total: total,\n users: users\n }]);\n }, 1000);\n });\n });\n\n mock.onGet('/user/remove').reply(function (config) {\n var id = config.params.id;\n\n _Users = _Users.filter(function (u) {\n return u.id !== id;\n });\n return new _promise2.default(function (resolve, reject) {\n setTimeout(function () {\n resolve([200, {\n code: 200,\n msg: '删除成功'\n }]);\n }, 500);\n });\n });\n\n mock.onGet('/user/batchremove').reply(function (config) {\n var ids = config.params.ids;\n\n ids = ids.split(',');\n _Users = _Users.filter(function (u) {\n return !ids.includes(u.id);\n });\n return new _promise2.default(function (resolve, reject) {\n setTimeout(function () {\n resolve([200, {\n code: 200,\n msg: '删除成功'\n }]);\n }, 500);\n });\n });\n\n mock.onGet('/user/edit').reply(function (config) {\n var _config$params3 = config.params,\n id = _config$params3.id,\n siteName = _config$params3.siteName,\n deviceNo = _config$params3.deviceNo,\n startTime = _config$params3.startTime,\n repeat = _config$params3.repeat,\n state = _config$params3.state,\n type = _config$params3.type;\n\n _Users.some(function (u) {\n if (u.id === id) {\n u.siteName = siteName;\n u.deviceNo = deviceNo;\n u.startTime = startTime;\n u.repeat = repeat;\n u.state = state;\n u.type = type;\n return true;\n }\n });\n return new _promise2.default(function (resolve, reject) {\n setTimeout(function () {\n resolve([200, {\n code: 200,\n msg: '编辑成功'\n }]);\n }, 500);\n });\n });\n\n mock.onGet('/user/add').reply(function (config) {\n var _config$params4 = config.params,\n siteName = _config$params4.siteName,\n deviceNo = _config$params4.deviceNo,\n startTime = _config$params4.startTime,\n repeat = _config$params4.repeat,\n state = _config$params4.state,\n type = _config$params4.type;\n\n _Users.push({\n siteName: siteName,\n deviceNo: deviceNo,\n startTime: startTime,\n repeat: repeat,\n state: state,\n type: type\n });\n return new _promise2.default(function (resolve, reject) {\n setTimeout(function () {\n resolve([200, {\n code: 200,\n msg: '新增成功'\n }]);\n }, 500);\n });\n });\n\n mock.onGet('/category/list').reply(function (config) {\n var name = config.params.name;\n\n var categories = _Categories.filter(function (category) {\n if (name && category.name.indexOf(name) == -1) return false;\n return true;\n });\n return new _promise2.default(function (resolve, reject) {\n setTimeout(function () {\n resolve([200, {\n categories: categories\n }]);\n }, 1000);\n });\n });\n\n mock.onGet('/category/listpage').reply(function (config) {\n var _config$params5 = config.params,\n page = _config$params5.page,\n name = _config$params5.name;\n\n var categories = _Categories.filter(function (category) {\n if (name && category.name.indexOf(name) == -1) return false;\n return true;\n });\n var total = categories.length;\n categories = categories.filter(function (u, index) {\n return index < 20 * page && index >= 20 * (page - 1);\n });\n return new _promise2.default(function (resolve, reject) {\n setTimeout(function () {\n resolve([200, {\n total: total,\n categories: categories\n }]);\n }, 1000);\n });\n });\n\n mock.onGet('/category/remove').reply(function (config) {\n var id = config.params.id;\n\n _Categories = _Categories.filter(function (ca) {\n return ca.id !== id;\n });\n return new _promise2.default(function (resolve, reject) {\n setTimeout(function () {\n resolve([200, {\n code: 200,\n msg: '删除成功'\n }]);\n }, 500);\n });\n });\n\n mock.onGet('/category/batchremove').reply(function (config) {\n var ids = config.params.ids;\n\n ids = ids.split(',');\n _Categories = _Categories.filter(function (ca) {\n return !ids.includes(ca.id);\n });\n return new _promise2.default(function (resolve, reject) {\n setTimeout(function () {\n resolve([200, {\n code: 200,\n msg: '删除成功'\n }]);\n }, 500);\n });\n });\n\n mock.onGet('/category/edit').reply(function (config) {\n var _config$params6 = config.params,\n id = _config$params6.id,\n name = _config$params6.name,\n option = _config$params6.option;\n\n _Categories.some(function (ca) {\n if (ca.id === id) {\n ca.name = name;\n ca.option = option;\n return true;\n }\n });\n return new _promise2.default(function (resolve, reject) {\n setTimeout(function () {\n resolve([200, {\n code: 200,\n msg: '编辑成功'\n }]);\n }, 500);\n });\n });\n\n mock.onGet('/category/add').reply(function (config) {\n var _config$params7 = config.params,\n name = _config$params7.name,\n option = _config$params7.option;\n\n _Categories.push({\n name: name,\n option: option\n });\n return new _promise2.default(function (resolve, reject) {\n setTimeout(function () {\n resolve([200, {\n code: 200,\n msg: '新增成功'\n }]);\n }, 500);\n });\n });\n\n mock.onGet('/maintain/list').reply(function (config) {\n var _config$params8 = config.params,\n strTitle = _config$params8.strTitle,\n strContent = _config$params8.strContent;\n\n var maintains = _Maintains.filter(function (maintain) {\n if (strTitle && maintain.strTitle.indexOf(strTitle) == -1 && strContent && maintain.strContent.indexOf(strContent) == -1) return false;\n return true;\n });\n return new _promise2.default(function (resolve, reject) {\n setTimeout(function () {\n resolve([200, {\n maintains: maintains\n }]);\n }, 1000);\n });\n });\n\n mock.onGet('/maintain/listpage').reply(function (config) {\n var _config$params9 = config.params,\n curPage = _config$params9.curPage,\n pageSize = _config$params9.pageSize,\n strTitle = _config$params9.strTitle,\n strContent = _config$params9.strContent;\n\n var maintains = _Maintains.filter(function (maintain) {\n if (strTitle && maintain.strTitle.indexOf(strTitle) == -1 || strContent && maintain.strContent.indexOf(strContent) == -1) return false;\n return true;\n });\n var total = maintains.length;\n maintains = maintains.filter(function (ma, index) {\n return index < pageSize * curPage && index >= pageSize * (curPage - 1);\n });\n return new _promise2.default(function (resolve, reject) {\n setTimeout(function () {\n resolve([200, {\n total: total,\n maintains: maintains\n }]);\n }, 1000);\n });\n });\n\n mock.onGet('/maintain/remove').reply(function (config) {\n var strMaintainId = config.params.strMaintainId;\n\n _Maintains = _Maintains.filter(function (maintain) {\n return maintain.strMaintainId !== strMaintainId;\n });\n return new _promise2.default(function (resolve, reject) {\n setTimeout(function () {\n resolve([200, {\n code: 200,\n msg: '删除成功'\n }]);\n }, 500);\n });\n });\n\n mock.onGet('/maintain/batchremove').reply(function (config) {\n var ids = config.params.ids;\n\n ids = ids.split(',');\n _Maintains = _Maintains.filter(function (maintain) {\n return !ids.includes(maintain.strMaintainId);\n });\n return new _promise2.default(function (resolve, reject) {\n setTimeout(function () {\n resolve([200, {\n code: 200,\n msg: '删除成功'\n }]);\n }, 500);\n });\n });\n\n mock.onGet('/maintain/edit').reply(function (config) {\n var _config$params10 = config.params,\n strMaintainId = _config$params10.strMaintainId,\n strTitle = _config$params10.strTitle,\n strContent = _config$params10.strContent,\n cStartTime = _config$params10.cStartTime,\n cEndTime = _config$params10.cEndTime,\n uStartTime = _config$params10.uStartTime,\n uEndTime = _config$params10.uEndTime;\n\n _Maintains.some(function (maintain) {\n if (maintain.strMaintainId === strMaintainId) {\n maintain.strTitle = strTitle;\n maintain.strContent = strContent;\n maintain.cStartTime = cStartTime;\n maintain.cEndTime = cEndTime;\n maintain.uStartTime = uStartTime;\n maintain.uEndTime = uEndTime;\n return true;\n }\n });\n return new _promise2.default(function (resolve, reject) {\n setTimeout(function () {\n resolve([200, {\n code: 200,\n msg: '编辑成功'\n }]);\n }, 500);\n });\n });\n\n mock.onGet('/maintain/add').reply(function (config) {\n var _config$params11 = config.params,\n strTitle = _config$params11.strTitle,\n strContent = _config$params11.strContent,\n cStartTime = _config$params11.cStartTime,\n cEndTime = _config$params11.cEndTime,\n uStartTime = _config$params11.uStartTime,\n uEndTime = _config$params11.uEndTime;\n\n _Maintains.push({\n strTitle: strTitle,\n strContent: strContent,\n cStartTime: cStartTime,\n cEndTime: cEndTime,\n uStartTime: uStartTime,\n uEndTime: uEndTime\n });\n return new _promise2.default(function (resolve, reject) {\n setTimeout(function () {\n resolve([200, {\n code: 200,\n msg: '新增成功'\n }]);\n }, 500);\n });\n });\n\n mock.onGet('/plan/list').reply(function (config) {\n var _config$params12 = config.params,\n curPage = _config$params12.curPage,\n pageSize = _config$params12.pageSize,\n executeTime = _config$params12.executeTime,\n isCycle = _config$params12.isCycle;\n\n var plans = _Plans.filter(function (plan) {\n return true;\n });\n return new _promise2.default(function (resolve, reject) {\n setTimeout(function () {\n resolve([200, {\n plans: plans\n }]);\n }, 1000);\n });\n });\n\n mock.onGet('/plan/listpage').reply(function (config) {\n var _config$params13 = config.params,\n curPage = _config$params13.curPage,\n pageSize = _config$params13.pageSize;\n\n var plans = _Plans.filter(function (plan) {\n return true;\n });\n var total = plans.length;\n plans = plans.filter(function (ma, index) {\n return index < pageSize * curPage && index >= pageSize * (curPage - 1);\n });\n return new _promise2.default(function (resolve, reject) {\n setTimeout(function () {\n resolve([200, {\n total: total,\n plans: plans\n }]);\n }, 1000);\n });\n });\n\n mock.onGet('/plan/remove').reply(function (config) {\n var strPlanId = config.params.strPlanId;\n\n _Plans = _Plans.filter(function (plan) {\n return plan.strPlanId !== strPlanId;\n });\n return new _promise2.default(function (resolve, reject) {\n setTimeout(function () {\n resolve([200, {\n code: 200,\n msg: '删除成功'\n }]);\n }, 500);\n });\n });\n\n mock.onGet('/plan/batchremove').reply(function (config) {\n var ids = config.params.ids;\n\n ids = ids.split(',');\n _Plans = _Plans.filter(function (plan) {\n return !ids.includes(plan.strPlanId);\n });\n return new _promise2.default(function (resolve, reject) {\n setTimeout(function () {\n resolve([200, {\n code: 200,\n msg: '删除成功'\n }]);\n }, 500);\n });\n });\n\n mock.onGet('/plan/edit').reply(function (config) {\n var _config$params14 = config.params,\n strPlanId = _config$params14.strPlanId,\n strMaintainId = _config$params14.strMaintainId,\n executeTime = _config$params14.executeTime,\n isCycle = _config$params14.isCycle,\n cycleDay = _config$params14.cycleDay,\n executeHour = _config$params14.executeHour,\n executeMinute = _config$params14.executeMinute,\n description = _config$params14.description,\n equipmentCategory = _config$params14.equipmentCategory,\n equipmentId = _config$params14.equipmentId;\n\n _Plans.some(function (plan) {\n if (plan.strPlanId === strPlanId) {\n plan.strMaintainId = strMaintainId;\n plan.executeTime = executeTime;\n plan.isCycle = isCycle;\n plan.cycleDay = cycleDay;\n plan.executeHour = executeHour;\n plan.executeMinute = executeMinute;\n plan.description = description;\n plan.equipmentCategory = equipmentCategory;\n plan.equipmentId = equipmentId;\n\n return true;\n }\n });\n return new _promise2.default(function (resolve, reject) {\n setTimeout(function () {\n resolve([200, {\n code: 200,\n msg: '编辑成功'\n }]);\n }, 500);\n });\n });\n\n mock.onGet('/plan/add').reply(function (config) {\n var _config$params15 = config.params,\n strPlanId = _config$params15.strPlanId,\n strMaintainId = _config$params15.strMaintainId,\n executeTime = _config$params15.executeTime,\n isCycle = _config$params15.isCycle,\n cycleDay = _config$params15.cycleDay,\n executeHour = _config$params15.executeHour,\n executeMinute = _config$params15.executeMinute,\n description = _config$params15.description,\n equipmentCategory = _config$params15.equipmentCategory,\n equipmentId = _config$params15.equipmentId;\n\n _Plans.push({\n strMaintainId: strMaintainId,\n executeTime: executeTime,\n isCycle: isCycle,\n cycleDay: cycleDay,\n executeHour: executeHour,\n executeMinute: executeMinute,\n description: description,\n equipmentCategory: equipmentCategory,\n equipmentId: equipmentId\n });\n return new _promise2.default(function (resolve, reject) {\n setTimeout(function () {\n resolve([200, {\n code: 200,\n msg: '新增成功'\n }]);\n }, 500);\n });\n });\n }\n};\n\n/***/ }),\n\n/***/ 483:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar increment = exports.increment = function increment(_ref) {\n var commit = _ref.commit;\n\n commit('INCREMENT');\n};\nvar decrement = exports.decrement = function decrement(_ref2) {\n var commit = _ref2.commit;\n\n commit('DECREMENT');\n};\n\n/***/ }),\n\n/***/ 484:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar getCount = exports.getCount = function getCount(state) {\n return state.count;\n};\n\n/***/ }),\n\n/***/ 77:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.addPlan = exports.editPlan = exports.batchRemovePlan = exports.removePlan = exports.getPlanListPage = exports.getPlanList = exports.addMaintain = exports.editMaintain = exports.batchRemoveMaintain = exports.removeMaintain = exports.getMaintainListPage = exports.getMaintainList = exports.addCategory = exports.editCategory = exports.batchRemoveCategory = exports.removeCategory = exports.getCategoryListPage = exports.getCategoryList = exports.addUser = exports.editUser = exports.batchRemoveUser = exports.removeUser = exports.getUserListPage = exports.getUserList = exports.requestLogin = undefined;\n\nvar _axios = __webpack_require__(175);\n\nvar _axios2 = _interopRequireDefault(_axios);\n\nvar _urlConfig = __webpack_require__(478);\n\nvar url = _interopRequireWildcard(_urlConfig);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar requestLogin = exports.requestLogin = function requestLogin(params) {\n return _axios2.default.post(url.login, params).then(function (res) {\n return res.data;\n });\n};\n\nvar getUserList = exports.getUserList = function getUserList(params) {\n return _axios2.default.get(url.userList, { params: params });\n};\n\nvar getUserListPage = exports.getUserListPage = function getUserListPage(params) {\n return _axios2.default.get(url.userListpage, { params: params });\n};\n\nvar removeUser = exports.removeUser = function removeUser(params) {\n return _axios2.default.get(url.userRemove, { params: params });\n};\n\nvar batchRemoveUser = exports.batchRemoveUser = function batchRemoveUser(params) {\n return _axios2.default.get(url.userBatchremove, { params: params });\n};\n\nvar editUser = exports.editUser = function editUser(params) {\n return _axios2.default.get(url.userEdit, { params: params });\n};\n\nvar addUser = exports.addUser = function addUser(params) {\n return _axios2.default.get(url.userAdd, { params: params });\n};\n\nvar getCategoryList = exports.getCategoryList = function getCategoryList(params) {\n return _axios2.default.get(url.categoryList, { params: params });\n};\n\nvar getCategoryListPage = exports.getCategoryListPage = function getCategoryListPage(params) {\n return _axios2.default.get(url.categoryListpage, { params: params });\n};\n\nvar removeCategory = exports.removeCategory = function removeCategory(params) {\n return _axios2.default.get(url.categoryRemove, { params: params });\n};\n\nvar batchRemoveCategory = exports.batchRemoveCategory = function batchRemoveCategory(params) {\n return _axios2.default.get(url.categoryBatchremove, { params: params });\n};\n\nvar editCategory = exports.editCategory = function editCategory(params) {\n return _axios2.default.get(url.categoryEdit, { params: params });\n};\n\nvar addCategory = exports.addCategory = function addCategory(params) {\n return _axios2.default.get(url.categoryAdd, { params: params });\n};\n\nvar getMaintainList = exports.getMaintainList = function getMaintainList(params) {\n return _axios2.default.get(url.maintainList, { params: params });\n};\n\nvar getMaintainListPage = exports.getMaintainListPage = function getMaintainListPage(params) {\n return _axios2.default.get(url.maintainListpage, { params: params });\n};\n\nvar removeMaintain = exports.removeMaintain = function removeMaintain(params) {\n return _axios2.default.get(url.maintainRemove, { params: params });\n};\n\nvar batchRemoveMaintain = exports.batchRemoveMaintain = function batchRemoveMaintain(params) {\n return _axios2.default.get(url.maintainBatchremove, { params: params });\n};\n\nvar editMaintain = exports.editMaintain = function editMaintain(params) {\n return _axios2.default.get(url.maintainEdit, { params: params });\n};\n\nvar addMaintain = exports.addMaintain = function addMaintain(params) {\n return _axios2.default.get(url.maintainAdd, { params: params });\n};\n\nvar getPlanList = exports.getPlanList = function getPlanList(params) {\n return _axios2.default.get(url.planList, { params: params });\n};\n\nvar getPlanListPage = exports.getPlanListPage = function getPlanListPage(params) {\n return _axios2.default.get(url.planListpage, { params: params });\n};\n\nvar removePlan = exports.removePlan = function removePlan(params) {\n return _axios2.default.get(url.planRemove, { params: params });\n};\n\nvar batchRemovePlan = exports.batchRemovePlan = function batchRemovePlan(params) {\n return _axios2.default.get(url.planBatchremove, { params: params });\n};\n\nvar editPlan = exports.editPlan = function editPlan(params) {\n return _axios2.default.get(url.planEdit, { params: params });\n};\n\nvar addPlan = exports.addPlan = function addPlan(params) {\n return _axios2.default.get(url.planAdd, { params: params });\n};\n\n/***/ })\n\n},[480]);\n\n\n// WEBPACK FOOTER //\n// static/js/app.5f386973cae10e35e08c.js","\n/* styles */\nrequire(\"!!../../../node_modules/extract-text-webpack-plugin/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"minimize\\\":true,\\\"sourceMap\\\":true}!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"id\\\":\\\"data-v-0135f127\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./index.vue\")\n\nvar Component = require(\"!../../../node_modules/vue-loader/lib/component-normalizer\")(\n /* script */\n require(\"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./index.vue\"),\n /* template */\n require(\"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-0135f127\\\"}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./index.vue\"),\n /* scopeId */\n \"data-v-0135f127\",\n /* cssModules */\n null\n)\n\nmodule.exports = Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/Screenfull/index.vue\n// module id = 1044\n// module chunks = 2","\n/* styles */\nrequire(\"!!../../../node_modules/extract-text-webpack-plugin/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"minimize\\\":true,\\\"sourceMap\\\":true}!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"id\\\":\\\"data-v-31addc8e\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./index.vue\")\n\nvar Component = require(\"!../../../node_modules/vue-loader/lib/component-normalizer\")(\n /* script */\n require(\"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./index.vue\"),\n /* template */\n require(\"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-31addc8e\\\"}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./index.vue\"),\n /* scopeId */\n \"data-v-31addc8e\",\n /* cssModules */\n null\n)\n\nmodule.exports = Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/Tinymce/index.vue\n// module id = 1045\n// module chunks = 2","\n/* styles */\nrequire(\"!!../../../node_modules/extract-text-webpack-plugin/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"minimize\\\":true,\\\"sourceMap\\\":true}!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"id\\\":\\\"data-v-3d16a820\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./index.vue\")\n\nvar Component = require(\"!../../../node_modules/vue-loader/lib/component-normalizer\")(\n /* script */\n require(\"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./index.vue\"),\n /* template */\n require(\"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-3d16a820\\\"}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./index.vue\"),\n /* scopeId */\n \"data-v-3d16a820\",\n /* cssModules */\n null\n)\n\nmodule.exports = Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/UploadExcel/index.vue\n// module id = 1046\n// module chunks = 2","\n/* styles */\nrequire(\"!!../../../node_modules/extract-text-webpack-plugin/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"minimize\\\":true,\\\"sourceMap\\\":true}!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"id\\\":\\\"data-v-fee14efe\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./babylonjs.vue\")\n\nvar Component = require(\"!../../../node_modules/vue-loader/lib/component-normalizer\")(\n /* script */\n require(\"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./babylonjs.vue\"),\n /* template */\n require(\"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-fee14efe\\\"}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./babylonjs.vue\"),\n /* scopeId */\n \"data-v-fee14efe\",\n /* cssModules */\n null\n)\n\nmodule.exports = Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/views/3d/babylonjs.vue\n// module id = 1047\n// module chunks = 2","\n/* styles */\nrequire(\"!!../../../node_modules/extract-text-webpack-plugin/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"minimize\\\":true,\\\"sourceMap\\\":true}!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"id\\\":\\\"data-v-2daed92c\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./threejs.vue\")\n\nvar Component = require(\"!../../../node_modules/vue-loader/lib/component-normalizer\")(\n /* script */\n require(\"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./threejs.vue\"),\n /* template */\n require(\"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-2daed92c\\\"}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./threejs.vue\"),\n /* scopeId */\n \"data-v-2daed92c\",\n /* cssModules */\n null\n)\n\nmodule.exports = Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/views/3d/threejs.vue\n// module id = 1048\n// module chunks = 2","\n/* styles */\nrequire(\"!!../../node_modules/extract-text-webpack-plugin/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"minimize\\\":true,\\\"sourceMap\\\":true}!../../node_modules/vue-loader/lib/style-compiler/index?{\\\"id\\\":\\\"data-v-552f9c87\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!sass-loader?{\\\"sourceMap\\\":true}!../../node_modules/vue-loader/lib/selector?type=styles&index=0!./404.vue\")\n\nvar Component = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")(\n /* script */\n null,\n /* template */\n require(\"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-552f9c87\\\"}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./404.vue\"),\n /* scopeId */\n \"data-v-552f9c87\",\n /* cssModules */\n null\n)\n\nmodule.exports = Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/views/404.vue\n// module id = 1049\n// module chunks = 2","\n/* styles */\nrequire(\"!!../../node_modules/extract-text-webpack-plugin/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"minimize\\\":true,\\\"sourceMap\\\":true}!../../node_modules/vue-loader/lib/style-compiler/index?{\\\"id\\\":\\\"data-v-51a2c380\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!sass-loader?{\\\"sourceMap\\\":true}!../../node_modules/vue-loader/lib/selector?type=styles&index=0!./Home.vue\")\n\nvar Component = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")(\n /* script */\n require(\"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./Home.vue\"),\n /* template */\n require(\"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-51a2c380\\\"}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./Home.vue\"),\n /* scopeId */\n \"data-v-51a2c380\",\n /* cssModules */\n null\n)\n\nmodule.exports = Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/views/Home.vue\n// module id = 1050\n// module chunks = 2","\n/* styles */\nrequire(\"!!../../node_modules/extract-text-webpack-plugin/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"minimize\\\":true,\\\"sourceMap\\\":true}!../../node_modules/vue-loader/lib/style-compiler/index?{\\\"id\\\":\\\"data-v-2c8a1058\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!sass-loader?{\\\"sourceMap\\\":true}!../../node_modules/vue-loader/lib/selector?type=styles&index=0!./Login.vue\")\n\nvar Component = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")(\n /* script */\n require(\"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./Login.vue\"),\n /* template */\n require(\"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-2c8a1058\\\"}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./Login.vue\"),\n /* scopeId */\n \"data-v-2c8a1058\",\n /* cssModules */\n null\n)\n\nmodule.exports = Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/views/Login.vue\n// module id = 1051\n// module chunks = 2","\n/* styles */\nrequire(\"!!../../../node_modules/extract-text-webpack-plugin/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"minimize\\\":true,\\\"sourceMap\\\":true}!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"id\\\":\\\"data-v-612c0ec1\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./echarts.vue\")\n\nvar Component = require(\"!../../../node_modules/vue-loader/lib/component-normalizer\")(\n /* script */\n require(\"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./echarts.vue\"),\n /* template */\n require(\"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-612c0ec1\\\"}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./echarts.vue\"),\n /* scopeId */\n \"data-v-612c0ec1\",\n /* cssModules */\n null\n)\n\nmodule.exports = Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/views/charts/echarts.vue\n// module id = 1052\n// module chunks = 2","\n/* styles */\nrequire(\"!!../../../node_modules/extract-text-webpack-plugin/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"minimize\\\":true,\\\"sourceMap\\\":true}!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"id\\\":\\\"data-v-73ce23cd\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./export.vue\")\n\nvar Component = require(\"!../../../node_modules/vue-loader/lib/component-normalizer\")(\n /* script */\n require(\"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./export.vue\"),\n /* template */\n require(\"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-73ce23cd\\\"}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./export.vue\"),\n /* scopeId */\n \"data-v-73ce23cd\",\n /* cssModules */\n null\n)\n\nmodule.exports = Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/views/excel/export.vue\n// module id = 1053\n// module chunks = 2","var Component = require(\"!../../../node_modules/vue-loader/lib/component-normalizer\")(\n /* script */\n require(\"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./uploadExcel.vue\"),\n /* template */\n require(\"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-1dd17426\\\"}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./uploadExcel.vue\"),\n /* scopeId */\n null,\n /* cssModules */\n null\n)\n\nmodule.exports = Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/views/excel/uploadExcel.vue\n// module id = 1054\n// module chunks = 2","\n/* styles */\nrequire(\"!!../../../node_modules/extract-text-webpack-plugin/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"minimize\\\":true,\\\"sourceMap\\\":true}!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"id\\\":\\\"data-v-0258d1fc\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./Page1.vue\")\n\nvar Component = require(\"!../../../node_modules/vue-loader/lib/component-normalizer\")(\n /* script */\n require(\"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./Page1.vue\"),\n /* template */\n require(\"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-0258d1fc\\\"}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./Page1.vue\"),\n /* scopeId */\n \"data-v-0258d1fc\",\n /* cssModules */\n null\n)\n\nmodule.exports = Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/views/nav1/Page1.vue\n// module id = 1055\n// module chunks = 2","\n/* styles */\nrequire(\"!!../../../node_modules/extract-text-webpack-plugin/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"minimize\\\":true,\\\"sourceMap\\\":true}!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"id\\\":\\\"data-v-d8733d78\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./Page2.vue\")\n\nvar Component = require(\"!../../../node_modules/vue-loader/lib/component-normalizer\")(\n /* script */\n require(\"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./Page2.vue\"),\n /* template */\n require(\"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-d8733d78\\\"}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./Page2.vue\"),\n /* scopeId */\n \"data-v-d8733d78\",\n /* cssModules */\n null\n)\n\nmodule.exports = Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/views/nav2/Page2.vue\n// module id = 1056\n// module chunks = 2","\n/* styles */\nrequire(\"!!../../../node_modules/extract-text-webpack-plugin/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"minimize\\\":true,\\\"sourceMap\\\":true}!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"id\\\":\\\"data-v-28b92b86\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./Page3.vue\")\n\nvar Component = require(\"!../../../node_modules/vue-loader/lib/component-normalizer\")(\n /* script */\n require(\"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./Page3.vue\"),\n /* template */\n require(\"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-28b92b86\\\"}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./Page3.vue\"),\n /* scopeId */\n \"data-v-28b92b86\",\n /* cssModules */\n null\n)\n\nmodule.exports = Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/views/nav3/Page3.vue\n// module id = 1057\n// module chunks = 2","\n/* styles */\nrequire(\"!!../../../node_modules/extract-text-webpack-plugin/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"minimize\\\":true,\\\"sourceMap\\\":true}!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"id\\\":\\\"data-v-84a81470\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./Page4.vue\")\n\nvar Component = require(\"!../../../node_modules/vue-loader/lib/component-normalizer\")(\n /* script */\n require(\"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./Page4.vue\"),\n /* template */\n require(\"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-84a81470\\\"}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./Page4.vue\"),\n /* scopeId */\n \"data-v-84a81470\",\n /* cssModules */\n null\n)\n\nmodule.exports = Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/views/nav4/Page4.vue\n// module id = 1058\n// module chunks = 2","module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('svg', {\n staticClass: \"icon screenfull\",\n attrs: {\n \"xmlns\": \"http://www.w3.org/2000/svg\",\n \"xmlns:xlink\": \"http://www.w3.org/1999/xlink\",\n \"t\": \"1497503607356\",\n \"viewBox\": \"0 0 1024 1024\",\n \"version\": \"1.1\",\n \"p-id\": \"4109\",\n \"fill\": _vm.fill,\n \"width\": _vm.width,\n \"height\": _vm.height\n },\n on: {\n \"click\": _vm.click\n }\n }, [_c('path', {\n attrs: {\n \"d\": \"M604.157933 512l204.484208 204.484208 82.942037-82.942037c10.364045-10.952446 26.498514-13.83817 40.309054-8.067746 13.249769 5.742794 22.465664 18.99154 22.465664 33.977859l0 258.042008c0 20.168342-16.695241 36.863582-36.863582 36.863582L659.452283 954.357873c-14.986319 0-28.236088-9.215896-33.977859-23.025413-5.770424-13.249769-2.885723-29.384237 8.067746-39.748283l82.942037-82.942037L512 604.157933 307.515792 808.642141l82.942037 82.942037c10.952446 10.364045 13.83817 26.498514 8.067746 39.748283-5.742794 13.809517-18.99154 23.025413-33.977859 23.025413L106.504686 954.357873c-20.168342 0-36.863582-16.695241-36.863582-36.863582L69.641103 659.452283c0-14.986319 9.215896-28.236088 23.025413-33.977859 13.249769-5.770424 29.384237-2.8847 39.748283 8.067746l82.942037 82.942037 204.484208-204.484208L215.357859 307.515792l-82.942037 82.942037c-6.890944 6.918573-16.10684 10.952446-25.911136 10.952446-4.593622 0-9.804297-1.14815-13.83817-2.8847-13.809517-5.742794-23.025413-18.99154-23.025413-33.977859L69.641103 106.504686c0-20.168342 16.695241-36.863582 36.863582-36.863582L364.546693 69.641103c14.986319 0 28.236088 9.215896 33.977859 23.025413 5.770424 13.249769 2.8847 29.384237-8.067746 39.748283l-82.942037 82.942037 204.484208 204.484208L716.484208 215.357859l-82.942037-82.942037c-10.952446-10.364045-13.83817-26.498514-8.067746-39.748283 5.742794-13.809517 18.99154-23.025413 33.977859-23.025413l258.042008 0c20.168342 0 36.863582 16.695241 36.863582 36.863582l0 258.042008c0 14.986319-9.215896 28.236088-22.465664 33.977859-4.593622 1.736551-9.804297 2.8847-14.397918 2.8847-9.804297 0-19.020192-4.033873-25.911136-10.952446l-82.942037-82.942037L604.157933 512z\",\n \"p-id\": \"4110\"\n }\n })])\n},staticRenderFns: []}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-loader/lib/template-compiler?{\"id\":\"data-v-0135f127\"}!./~/vue-loader/lib/selector.js?type=template&index=0!./src/components/Screenfull/index.vue\n// module id = 1059\n// module chunks = 2","module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('section', [_c('el-form', {\n ref: \"form\",\n staticStyle: {\n \"margin\": \"10px\"\n },\n attrs: {\n \"model\": _vm.form\n },\n on: {\n \"submit\": function($event) {\n $event.preventDefault();\n return _vm.onSubmit($event)\n }\n }\n }, [_c('el-form', {\n staticClass: \"demo-form-inline\",\n attrs: {\n \"inline\": true,\n \"model\": _vm.filters\n }\n }, [_c('el-row', [_c('el-col', {\n staticStyle: {\n \"margin-left\": \"12px\"\n },\n attrs: {\n \"xs\": 12,\n \"sm\": 12,\n \"md\": 12,\n \"lg\": 12\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"维护项\"\n }\n }, [_c('el-input', {\n staticStyle: {\n \"width\": \"160px\"\n },\n attrs: {\n \"placeholder\": \"维护项\"\n },\n model: {\n value: (_vm.filters.strTitle),\n callback: function($$v) {\n _vm.$set(_vm.filters, \"strTitle\", $$v)\n },\n expression: \"filters.strTitle\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"xs\": 10,\n \"sm\": 10,\n \"md\": 10,\n \"lg\": 10\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"维护内容\"\n }\n }, [_c('el-input', {\n staticStyle: {\n \"width\": \"180px\"\n },\n attrs: {\n \"placeholder\": \"维护内容\"\n },\n model: {\n value: (_vm.filters.strContent),\n callback: function($$v) {\n _vm.$set(_vm.filters, \"strContent\", $$v)\n },\n expression: \"filters.strContent\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"xs\": 24,\n \"sm\": 24,\n \"md\": 24,\n \"lg\": 12\n }\n }, [_c('el-form-item', {\n staticClass: \"postInfo-container-item\",\n attrs: {\n \"label-width\": \"80px\",\n \"label\": \"创建时间\"\n }\n }, [_c('el-date-picker', {\n attrs: {\n \"type\": \"datetimerange\",\n \"picker-options\": _vm.pickerOptions2,\n \"placeholder\": \"选择时间范围\",\n \"align\": \"right\"\n },\n model: {\n value: (_vm.filters.createTime),\n callback: function($$v) {\n _vm.$set(_vm.filters, \"createTime\", $$v)\n },\n expression: \"filters.createTime\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"xs\": 24,\n \"sm\": 24,\n \"md\": 24,\n \"lg\": 12\n }\n }, [_c('el-form-item', {\n staticClass: \"postInfo-container-item\",\n attrs: {\n \"label-width\": \"80px\",\n \"label\": \"更新时间\"\n }\n }, [_c('el-date-picker', {\n attrs: {\n \"type\": \"datetimerange\",\n \"picker-options\": _vm.pickerOptions2,\n \"placeholder\": \"选择时间范围\",\n \"align\": \"right\"\n },\n model: {\n value: (_vm.filters.updateTime),\n callback: function($$v) {\n _vm.$set(_vm.filters, \"updateTime\", $$v)\n },\n expression: \"filters.updateTime\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('el-col', {\n staticStyle: {\n \"margin-left\": \"12px\"\n },\n attrs: {\n \"xs\": 24,\n \"sm\": 24,\n \"md\": 24,\n \"lg\": 12\n }\n }, [_c('el-form-item', [_c('el-button', {\n attrs: {\n \"type\": \"primary\",\n \"icon\": \"search\"\n },\n on: {\n \"click\": _vm.getMaintains\n }\n }, [_vm._v(\"查询\")])], 1)], 1)], 1)], 1)], 1), _vm._v(\" \"), _c('div', {\n staticClass: \"panel\"\n }, [_c('div', {\n staticClass: \"panel-title\"\n }, [_c('span', {\n domProps: {\n \"textContent\": _vm._s(_vm.panelTitle)\n }\n }), _vm._v(\" \"), _c('div', {\n staticClass: \"fr\"\n }, [_c('el-button', {\n attrs: {\n \"size\": \"small\"\n },\n on: {\n \"click\": function($event) {\n $event.stopPropagation();\n return _vm.on_refresh($event)\n }\n }\n }, [_c('i', {\n staticClass: \"fa fa-refresh\"\n })]), _vm._v(\" \"), _c('el-button', {\n attrs: {\n \"type\": \"primary\",\n \"icon\": \"plus\",\n \"size\": \"small\"\n },\n on: {\n \"click\": _vm.handleAdd\n }\n }, [_vm._v(\"新增\")])], 1)]), _vm._v(\" \"), _c('div', {\n staticClass: \"panel-body\"\n }, [_c('el-table', {\n directives: [{\n name: \"loading\",\n rawName: \"v-loading\",\n value: (_vm.listLoading),\n expression: \"listLoading\"\n }],\n attrs: {\n \"data\": _vm.maintains,\n \"highlight-current-row\": \"\"\n },\n on: {\n \"selection-change\": _vm.selsChange\n }\n }, [_c('el-table-column', {\n attrs: {\n \"type\": \"selection\",\n \"width\": \"55\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"type\": \"index\",\n \"width\": \"60\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"label\": \"维护项名称\"\n },\n scopedSlots: _vm._u([{\n key: \"default\",\n fn: function(scope) {\n return [_c('span', {\n domProps: {\n \"innerHTML\": _vm._s(_vm.brightenKeyword(scope.row.strTitle, _vm.filters.strTitle))\n }\n })]\n }\n }])\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"label\": \"维护内容\"\n },\n scopedSlots: _vm._u([{\n key: \"default\",\n fn: function(scope) {\n return [_c('span', {\n domProps: {\n \"innerHTML\": _vm._s(_vm.brightenKeyword(scope.row.strContent, _vm.filters.strContent))\n }\n })]\n }\n }])\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"createTime\",\n \"label\": \"创建时间\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"updateTime\",\n \"label\": \"更新时间\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"label\": \"操作\",\n \"width\": \"150\"\n },\n scopedSlots: _vm._u([{\n key: \"default\",\n fn: function(scope) {\n return [_c('el-button', {\n attrs: {\n \"size\": \"small\"\n },\n on: {\n \"click\": function($event) {\n return _vm.handleEdit(scope.$index, scope.row)\n }\n }\n }, [_vm._v(\"编辑\")]), _vm._v(\" \"), _c('el-button', {\n attrs: {\n \"type\": \"danger\",\n \"size\": \"small\"\n },\n on: {\n \"click\": function($event) {\n return _vm.handleDel(scope.$index, scope.row)\n }\n }\n }, [_vm._v(\"删除\")])]\n }\n }])\n })], 1), _vm._v(\" \"), _c('el-col', {\n staticClass: \"toolbar\",\n attrs: {\n \"span\": 24\n }\n }, [_c('el-button', {\n staticClass: \"fl\",\n attrs: {\n \"type\": \"danger\",\n \"disabled\": this.sels.length === 0\n },\n on: {\n \"click\": _vm.batchRemove\n }\n }, [_vm._v(\"批量删除\")]), _vm._v(\" \"), _c('el-pagination', {\n staticClass: \"fr\",\n attrs: {\n \"current-page\": _vm.listQuery.curPage,\n \"page-sizes\": [10, 20, 30, 50],\n \"page-size\": _vm.listQuery.pageSize,\n \"layout\": \"total, sizes, prev, pager, next, jumper\",\n \"total\": _vm.total\n },\n on: {\n \"size-change\": _vm.handleSizeChange,\n \"current-change\": _vm.handleCurrentChange,\n \"update:currentPage\": function($event) {\n return _vm.$set(_vm.listQuery, \"curPage\", $event)\n },\n \"update:current-page\": function($event) {\n return _vm.$set(_vm.listQuery, \"curPage\", $event)\n }\n }\n })], 1)], 1)]), _vm._v(\" \"), _c('el-dialog', {\n attrs: {\n \"title\": \"编辑维护项\",\n \"visible\": _vm.editFormVisible,\n \"close-on-click-modal\": false\n },\n on: {\n \"update:visible\": function($event) {\n _vm.editFormVisible = $event\n }\n }\n }, [_c('el-form', {\n ref: \"editForm\",\n attrs: {\n \"model\": _vm.editForm,\n \"label-width\": \"80px\",\n \"rules\": _vm.editFormRules\n }\n }, [_c('el-form-item', {\n staticStyle: {\n \"width\": \"450px\"\n },\n attrs: {\n \"label\": \"名称\",\n \"prop\": \"strTitle\"\n }\n }, [_c('el-input', {\n attrs: {\n \"auto-complete\": \"off\",\n \"placeholder\": \"请输入名称\"\n },\n model: {\n value: (_vm.editForm.strTitle),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"strTitle\", $$v)\n },\n expression: \"editForm.strTitle\"\n }\n })], 1), _vm._v(\" \"), _c('el-form-item', {\n staticStyle: {\n \"width\": \"450px\"\n },\n attrs: {\n \"label\": \"维护内容\",\n \"prop\": \"strContent\"\n }\n }, [_c('el-input', {\n attrs: {\n \"type\": \"textarea\",\n \"rows\": 2,\n \"placeholder\": \"请输入内容\"\n },\n model: {\n value: (_vm.editForm.strContent),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"strContent\", $$v)\n },\n expression: \"editForm.strContent\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('div', {\n staticClass: \"dialog-footer\",\n attrs: {\n \"slot\": \"footer\"\n },\n slot: \"footer\"\n }, [_c('el-button', {\n nativeOn: {\n \"click\": function($event) {\n _vm.editFormVisible = false\n }\n }\n }, [_vm._v(\"取消\")]), _vm._v(\" \"), _c('el-button', {\n attrs: {\n \"type\": \"primary\",\n \"loading\": _vm.editLoading\n },\n nativeOn: {\n \"click\": function($event) {\n return _vm.editSubmit($event)\n }\n }\n }, [_vm._v(\"提交\")])], 1)], 1), _vm._v(\" \"), _c('el-dialog', {\n attrs: {\n \"title\": \"新增维护项\",\n \"visible\": _vm.addFormVisible,\n \"close-on-click-modal\": false,\n \"size\": \"small\"\n },\n on: {\n \"update:visible\": function($event) {\n _vm.addFormVisible = $event\n }\n }\n }, [_c('el-form', {\n ref: \"addForm\",\n attrs: {\n \"model\": _vm.addForm,\n \"label-width\": \"80px\",\n \"rules\": _vm.addFormRules\n }\n }, [_c('el-form-item', {\n staticStyle: {\n \"width\": \"450px\"\n },\n attrs: {\n \"label\": \"名称\",\n \"prop\": \"strTitle\"\n }\n }, [_c('el-input', {\n attrs: {\n \"auto-complete\": \"off\",\n \"placeholder\": \"请输入名称\"\n },\n model: {\n value: (_vm.addForm.strTitle),\n callback: function($$v) {\n _vm.$set(_vm.addForm, \"strTitle\", $$v)\n },\n expression: \"addForm.strTitle\"\n }\n })], 1), _vm._v(\" \"), _c('el-form-item', {\n staticStyle: {\n \"width\": \"450px\"\n },\n attrs: {\n \"label\": \"维护内容\",\n \"prop\": \"strContent\"\n }\n }, [_c('el-input', {\n attrs: {\n \"type\": \"textarea\",\n \"rows\": 2,\n \"placeholder\": \"请输入内容\"\n },\n model: {\n value: (_vm.addForm.strContent),\n callback: function($$v) {\n _vm.$set(_vm.addForm, \"strContent\", $$v)\n },\n expression: \"addForm.strContent\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('div', {\n staticClass: \"dialog-footer\",\n attrs: {\n \"slot\": \"footer\"\n },\n slot: \"footer\"\n }, [_c('el-button', {\n nativeOn: {\n \"click\": function($event) {\n _vm.addFormVisible = false\n }\n }\n }, [_vm._v(\"取消\")]), _vm._v(\" \"), _c('el-button', {\n attrs: {\n \"type\": \"primary\",\n \"loading\": _vm.addLoading\n },\n nativeOn: {\n \"click\": function($event) {\n return _vm.addSubmit($event)\n }\n }\n }, [_vm._v(\"提交\")])], 1)], 1)], 1)\n},staticRenderFns: []}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-loader/lib/template-compiler?{\"id\":\"data-v-0258d1fc\"}!./~/vue-loader/lib/selector.js?type=template&index=0!./src/views/nav1/Page1.vue\n// module id = 1060\n// module chunks = 2","module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('div', {\n staticStyle: {\n \"margin\": \"10px\"\n }\n }, [_c('upload-excel-component', {\n attrs: {\n \"on-success\": _vm.handleSuccess,\n \"before-upload\": _vm.beforeUpload\n }\n }), _vm._v(\" \"), _c('div', {\n staticClass: \"panel\"\n }, [_c('div', {\n staticClass: \"panel-title\"\n }, [_c('span', {\n domProps: {\n \"textContent\": _vm._s(_vm.panelTitle)\n }\n })]), _vm._v(\" \"), _c('div', {\n staticClass: \"panel-body\"\n }, [_c('el-table', {\n staticStyle: {\n \"width\": \"100%\",\n \"margin-top\": \"20px\"\n },\n attrs: {\n \"data\": _vm.tableData,\n \"border\": \"\",\n \"highlight-current-row\": \"\"\n }\n }, _vm._l((_vm.tableHeader), function(item) {\n return _c('el-table-column', {\n key: item,\n attrs: {\n \"prop\": item,\n \"label\": item\n }\n })\n }), 1)], 1)])], 1)\n},staticRenderFns: []}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-loader/lib/template-compiler?{\"id\":\"data-v-1dd17426\"}!./~/vue-loader/lib/selector.js?type=template&index=0!./src/views/excel/uploadExcel.vue\n// module id = 1061\n// module chunks = 2","module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('div', {\n attrs: {\n \"id\": \"app\"\n }\n }, [_c('transition', {\n attrs: {\n \"name\": \"fade\",\n \"mode\": \"out-in\"\n }\n }, [_c('router-view')], 1), _vm._v(\" \"), _vm._m(0)], 1)\n},staticRenderFns: [function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('a', {\n attrs: {\n \"href\": \"https://github.com/artdong/vue-admin\"\n }\n }, [_c('img', {\n staticClass: \"fork-me-github\",\n attrs: {\n \"src\": \"https://camo.githubusercontent.com/652c5b9acfaddf3a9c326fa6bde407b87f7be0f4/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6f72616e67655f6666373630302e706e67\",\n \"alt\": \"Fork me on GitHub\",\n \"data-canonical-src\": \"https://s3.amazonaws.com/github/ribbons/forkme_right_orange_ff7600.png\"\n }\n })])\n}]}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-loader/lib/template-compiler?{\"id\":\"data-v-27fea171\"}!./~/vue-loader/lib/selector.js?type=template&index=0!./src/App.vue\n// module id = 1062\n// module chunks = 2","module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('section', [_c('el-form', {\n ref: \"form\",\n staticStyle: {\n \"margin\": \"10px\"\n },\n attrs: {\n \"model\": _vm.form\n },\n on: {\n \"submit\": function($event) {\n $event.preventDefault();\n return _vm.onSubmit($event)\n }\n }\n }, [_c('el-form', {\n attrs: {\n \"model\": _vm.filters\n }\n }, [_c('el-row', [_c('el-col', {\n attrs: {\n \"span\": 8\n }\n }, [_c('el-form-item', {\n staticClass: \"postInfo-container-item\",\n attrs: {\n \"label-width\": \"80px\",\n \"label\": \"执行时间\"\n }\n }, [_c('el-date-picker', {\n attrs: {\n \"align\": \"right\",\n \"type\": \"date\",\n \"placeholder\": \"选择日期\",\n \"picker-options\": _vm.pickerOptions1\n },\n model: {\n value: (_vm.filters.executeTime),\n callback: function($$v) {\n _vm.$set(_vm.filters, \"executeTime\", $$v)\n },\n expression: \"filters.executeTime\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"span\": 7\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"天数\"\n }\n }, [_c('el-select', {\n attrs: {\n \"multiple\": \"\",\n \"placeholder\": \"请选择\"\n },\n model: {\n value: (_vm.filters.cycleDay),\n callback: function($$v) {\n _vm.$set(_vm.filters, \"cycleDay\", $$v)\n },\n expression: \"filters.cycleDay\"\n }\n }, _vm._l((_vm.cycleDays), function(item) {\n return _c('el-option', {\n key: item.value,\n attrs: {\n \"label\": item.label,\n \"value\": item.value\n }\n })\n }), 1)], 1)], 1), _vm._v(\" \"), _c('el-col', {\n staticStyle: {\n \"margin-left\": \"20px\"\n },\n attrs: {\n \"span\": 6\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"是否周期性:\"\n }\n }, [_c('el-radio-group', {\n model: {\n value: (_vm.filters.isCycle),\n callback: function($$v) {\n _vm.$set(_vm.filters, \"isCycle\", $$v)\n },\n expression: \"filters.isCycle\"\n }\n }, [_c('el-radio', {\n staticClass: \"radio\",\n attrs: {\n \"label\": 1\n }\n }, [_vm._v(\"是\")]), _vm._v(\" \"), _c('el-radio', {\n staticClass: \"radio\",\n attrs: {\n \"label\": 0\n }\n }, [_vm._v(\"否\")])], 1)], 1)], 1), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"span\": 2\n }\n }, [_c('el-form-item', {\n staticStyle: {\n \"margin-left\": \"10px\"\n }\n }, [_c('el-button', {\n attrs: {\n \"type\": \"primary\",\n \"icon\": \"search\"\n },\n on: {\n \"click\": _vm.getPlans\n }\n }, [_vm._v(\"查询\")])], 1)], 1)], 1)], 1)], 1), _vm._v(\" \"), _c('div', {\n staticClass: \"panel\"\n }, [_c('div', {\n staticClass: \"panel-title\"\n }, [_c('span', {\n domProps: {\n \"textContent\": _vm._s(_vm.panelTitle)\n }\n }), _vm._v(\" \"), _c('div', {\n staticClass: \"fr\"\n }, [_c('el-button', {\n attrs: {\n \"size\": \"small\"\n },\n on: {\n \"click\": function($event) {\n $event.stopPropagation();\n return _vm.on_refresh($event)\n }\n }\n }, [_c('i', {\n staticClass: \"fa fa-refresh\"\n })])], 1)]), _vm._v(\" \"), _c('div', {\n staticClass: \"panel-body\"\n }, [_c('el-table', {\n directives: [{\n name: \"loading\",\n rawName: \"v-loading\",\n value: (_vm.listLoading),\n expression: \"listLoading\"\n }],\n attrs: {\n \"data\": _vm.plans,\n \"highlight-current-row\": \"\"\n },\n on: {\n \"selection-change\": _vm.selsChange\n }\n }, [_c('el-table-column', {\n attrs: {\n \"type\": \"index\",\n \"width\": \"60\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"strTitle\",\n \"label\": \"维护项名称\",\n \"width\": \"120\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"description\",\n \"label\": \"描述\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"executeTime\",\n \"label\": \"执行时间\",\n \"width\": \"120\",\n \"sortable\": \"\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"isCycle\",\n \"label\": \"是否周期性\",\n \"width\": \"130\",\n \"formatter\": _vm.formatCycle\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"cStartTime\",\n \"label\": \"创建时间\",\n \"width\": \"120\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"uStartTime\",\n \"label\": \"更新时间\",\n \"width\": \"120\"\n }\n })], 1), _vm._v(\" \"), _c('el-col', {\n staticClass: \"toolbar\",\n attrs: {\n \"span\": 24\n }\n }, [_c('el-pagination', {\n staticClass: \"fr\",\n attrs: {\n \"current-page\": _vm.listQuery.curPage,\n \"page-sizes\": [10, 20, 30, 50],\n \"page-size\": _vm.listQuery.pageSize,\n \"layout\": \"total, sizes, prev, pager, next, jumper\",\n \"total\": _vm.total\n },\n on: {\n \"size-change\": _vm.handleSizeChange,\n \"current-change\": _vm.handleCurrentChange,\n \"update:currentPage\": function($event) {\n return _vm.$set(_vm.listQuery, \"curPage\", $event)\n },\n \"update:current-page\": function($event) {\n return _vm.$set(_vm.listQuery, \"curPage\", $event)\n }\n }\n })], 1)], 1)]), _vm._v(\" \"), _c('el-dialog', {\n attrs: {\n \"title\": \"编辑维护计划\",\n \"close-on-click-modal\": false\n },\n model: {\n value: (_vm.editFormVisible),\n callback: function($$v) {\n _vm.editFormVisible = $$v\n },\n expression: \"editFormVisible\"\n }\n }, [_c('el-form', {\n ref: \"editForm\",\n attrs: {\n \"model\": _vm.editForm,\n \"label-width\": \"80px\",\n \"rules\": _vm.editFormRules\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"名称\",\n \"prop\": \"strTitle\"\n }\n }, [_c('el-input', {\n attrs: {\n \"auto-complete\": \"off\"\n },\n model: {\n value: (_vm.editForm.strTitle),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"strTitle\", $$v)\n },\n expression: \"editForm.strTitle\"\n }\n })], 1), _vm._v(\" \"), _c('el-form-item', {\n attrs: {\n \"label\": \"维护内容\",\n \"prop\": \"strContent\"\n }\n }, [_c('el-input', {\n attrs: {\n \"auto-complete\": \"off\"\n },\n model: {\n value: (_vm.editForm.strContent),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"strContent\", $$v)\n },\n expression: \"editForm.strContent\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('div', {\n staticClass: \"dialog-footer\",\n attrs: {\n \"slot\": \"footer\"\n },\n slot: \"footer\"\n }, [_c('el-button', {\n nativeOn: {\n \"click\": function($event) {\n _vm.editFormVisible = false\n }\n }\n }, [_vm._v(\"取消\")]), _vm._v(\" \"), _c('el-button', {\n attrs: {\n \"type\": \"primary\",\n \"loading\": _vm.editLoading\n },\n nativeOn: {\n \"click\": function($event) {\n return _vm.editSubmit($event)\n }\n }\n }, [_vm._v(\"提交\")])], 1)], 1), _vm._v(\" \"), _c('el-dialog', {\n attrs: {\n \"title\": \"新增维护计划\",\n \"close-on-click-modal\": false\n },\n model: {\n value: (_vm.addFormVisible),\n callback: function($$v) {\n _vm.addFormVisible = $$v\n },\n expression: \"addFormVisible\"\n }\n }, [_c('el-form', {\n ref: \"addForm\",\n attrs: {\n \"model\": _vm.addForm,\n \"label-width\": \"80px\",\n \"rules\": _vm.addFormRules\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"名称\",\n \"prop\": \"strTitle\"\n }\n }, [_c('el-input', {\n attrs: {\n \"auto-complete\": \"off\"\n },\n model: {\n value: (_vm.addForm.strTitle),\n callback: function($$v) {\n _vm.$set(_vm.addForm, \"strTitle\", $$v)\n },\n expression: \"addForm.strTitle\"\n }\n })], 1), _vm._v(\" \"), _c('el-form-item', {\n attrs: {\n \"label\": \"维护内容\",\n \"prop\": \"strContent\"\n }\n }, [_c('el-input', {\n attrs: {\n \"auto-complete\": \"off\"\n },\n model: {\n value: (_vm.addForm.strContent),\n callback: function($$v) {\n _vm.$set(_vm.addForm, \"strContent\", $$v)\n },\n expression: \"addForm.strContent\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('div', {\n staticClass: \"dialog-footer\",\n attrs: {\n \"slot\": \"footer\"\n },\n slot: \"footer\"\n }, [_c('el-button', {\n nativeOn: {\n \"click\": function($event) {\n _vm.addFormVisible = false\n }\n }\n }, [_vm._v(\"取消\")]), _vm._v(\" \"), _c('el-button', {\n attrs: {\n \"type\": \"primary\",\n \"loading\": _vm.addLoading\n },\n nativeOn: {\n \"click\": function($event) {\n return _vm.addSubmit($event)\n }\n }\n }, [_vm._v(\"提交\")])], 1)], 1)], 1)\n},staticRenderFns: []}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-loader/lib/template-compiler?{\"id\":\"data-v-28b92b86\"}!./~/vue-loader/lib/selector.js?type=template&index=0!./src/views/nav3/Page3.vue\n// module id = 1063\n// module chunks = 2","module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('el-form', {\n ref: \"ruleForm2\",\n staticClass: \"demo-ruleForm login-container\",\n attrs: {\n \"model\": _vm.ruleForm2,\n \"rules\": _vm.rules2,\n \"label-position\": \"left\",\n \"label-width\": \"0px\"\n }\n }, [_c('h3', {\n staticClass: \"title\"\n }, [_vm._v(\"系统登录\")]), _vm._v(\" \"), _c('el-form-item', {\n attrs: {\n \"prop\": \"account\"\n }\n }, [_c('el-input', {\n attrs: {\n \"type\": \"text\",\n \"auto-complete\": \"off\",\n \"placeholder\": \"账号\"\n },\n model: {\n value: (_vm.ruleForm2.account),\n callback: function($$v) {\n _vm.$set(_vm.ruleForm2, \"account\", $$v)\n },\n expression: \"ruleForm2.account\"\n }\n })], 1), _vm._v(\" \"), _c('el-form-item', {\n attrs: {\n \"prop\": \"checkPass\"\n }\n }, [_c('el-input', {\n attrs: {\n \"type\": \"password\",\n \"auto-complete\": \"off\",\n \"placeholder\": \"密码\"\n },\n model: {\n value: (_vm.ruleForm2.checkPass),\n callback: function($$v) {\n _vm.$set(_vm.ruleForm2, \"checkPass\", $$v)\n },\n expression: \"ruleForm2.checkPass\"\n }\n })], 1), _vm._v(\" \"), _c('el-checkbox', {\n staticClass: \"remember\",\n attrs: {\n \"checked\": \"\"\n },\n model: {\n value: (_vm.checked),\n callback: function($$v) {\n _vm.checked = $$v\n },\n expression: \"checked\"\n }\n }, [_vm._v(\"记住密码\")]), _vm._v(\" \"), _c('el-form-item', {\n staticStyle: {\n \"width\": \"100%\"\n }\n }, [_c('el-button', {\n staticStyle: {\n \"width\": \"100%\"\n },\n attrs: {\n \"type\": \"primary\",\n \"loading\": _vm.logining\n },\n nativeOn: {\n \"click\": function($event) {\n $event.preventDefault();\n return _vm.handleSubmit2($event)\n }\n }\n }, [_vm._v(\"登录\")])], 1)], 1)\n},staticRenderFns: []}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-loader/lib/template-compiler?{\"id\":\"data-v-2c8a1058\"}!./~/vue-loader/lib/selector.js?type=template&index=0!./src/views/Login.vue\n// module id = 1064\n// module chunks = 2","module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _vm._m(0)\n},staticRenderFns: [function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('section', {\n staticClass: \"threejs-container\"\n }, [_c('div', {\n attrs: {\n \"id\": \"demo\"\n }\n })])\n}]}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-loader/lib/template-compiler?{\"id\":\"data-v-2daed92c\"}!./~/vue-loader/lib/selector.js?type=template&index=0!./src/views/3d/threejs.vue\n// module id = 1065\n// module chunks = 2","module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('div', {\n staticStyle: {\n \"padding\": \"12px\"\n }\n }, [_c('tinymce-editor', {\n attrs: {\n \"api-key\": \"API_KEY\",\n \"init\": {\n plugins: 'wordcount'\n }\n }\n })], 1)\n},staticRenderFns: []}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-loader/lib/template-compiler?{\"id\":\"data-v-31addc8e\"}!./~/vue-loader/lib/selector.js?type=template&index=0!./src/components/Tinymce/index.vue\n// module id = 1066\n// module chunks = 2","module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('div', [_c('input', {\n ref: \"excel-upload-input\",\n attrs: {\n \"id\": \"excel-upload-input\",\n \"type\": \"file\",\n \"accept\": \".xlsx, .xls\"\n },\n on: {\n \"change\": _vm.handleClick\n }\n }), _vm._v(\" \"), _c('div', {\n attrs: {\n \"id\": \"drop\"\n },\n on: {\n \"drop\": _vm.handleDrop,\n \"dragover\": _vm.handleDragover,\n \"dragenter\": _vm.handleDragover\n }\n }, [_vm._v(\"\\n 拖拽文件到此处 或者\\n \"), _c('el-button', {\n staticStyle: {\n \"margin-left\": \"16px\"\n },\n attrs: {\n \"loading\": _vm.loading,\n \"size\": \"mini\",\n \"type\": \"primary\"\n },\n on: {\n \"click\": _vm.handleUpload\n }\n }, [_vm._v(\"浏览\")])], 1)])\n},staticRenderFns: []}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-loader/lib/template-compiler?{\"id\":\"data-v-3d16a820\"}!./~/vue-loader/lib/selector.js?type=template&index=0!./src/components/UploadExcel/index.vue\n// module id = 1067\n// module chunks = 2","module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('el-row', {\n staticClass: \"container\"\n }, [_c('el-col', {\n staticClass: \"main\",\n attrs: {\n \"span\": 24\n }\n }, [_c('aside', {\n class: _vm.collapsed ? 'menu-collapsed' : 'menu-expanded'\n }, [(!_vm.collapsed) ? _c('el-menu', {\n staticClass: \"el-menu-vertical-demo\",\n attrs: {\n \"default-active\": _vm.$route.path,\n \"unique-opened\": \"\",\n \"router\": \"\"\n }\n }, [_vm._l((_vm.$router.options.routes), function(item, index) {\n return (!item.hidden) ? [(!item.leaf) ? _c('el-submenu', {\n attrs: {\n \"index\": index + ''\n }\n }, [_c('template', {\n slot: \"title\"\n }, [_c('i', {\n class: item.iconCls\n }), _vm._v(_vm._s(item.name))]), _vm._v(\" \"), _vm._l((item.children), function(child) {\n return (!child.hidden) ? _c('el-menu-item', {\n key: child.path,\n staticClass: \"menu-list\",\n attrs: {\n \"index\": child.path\n }\n }, [_vm._v(_vm._s(child.name))]) : _vm._e()\n })], 2) : _vm._e(), _vm._v(\" \"), (item.leaf && item.children.length > 0) ? _c('el-menu-item', {\n staticClass: \"menu-list\",\n attrs: {\n \"index\": item.children[0].path\n }\n }, [_c('i', {\n class: item.iconCls\n }), _vm._v(_vm._s(item.children[0].name))]) : _vm._e()] : _vm._e()\n })], 2) : _vm._e(), _vm._v(\" \"), (_vm.collapsed) ? _c('ul', {\n ref: \"menuCollapsed\",\n staticClass: \"el-menu el-menu-vertical-demo collapsed\"\n }, _vm._l((_vm.$router.options.routes), function(item, index) {\n return (!item.hidden) ? _c('li', {\n staticClass: \"el-submenu item\"\n }, [(!item.leaf) ? [_c('div', {\n staticClass: \"el-submenu__title\",\n staticStyle: {\n \"padding-left\": \"20px\"\n },\n on: {\n \"mouseover\": function($event) {\n return _vm.showMenu(index, true)\n },\n \"mouseout\": function($event) {\n return _vm.showMenu(index, false)\n }\n }\n }, [_c('i', {\n class: item.iconCls\n })]), _vm._v(\" \"), _c('ul', {\n staticClass: \"el-menu submenu\",\n class: 'submenu-hook-' + index,\n on: {\n \"mouseover\": function($event) {\n return _vm.showMenu(index, true)\n },\n \"mouseout\": function($event) {\n return _vm.showMenu(index, false)\n }\n }\n }, _vm._l((item.children), function(child) {\n return (!child.hidden) ? _c('li', {\n key: child.path,\n staticClass: \"el-menu-item\",\n class: _vm.$route.path == child.path ? 'is-active' : '',\n staticStyle: {\n \"padding-left\": \"40px\"\n },\n on: {\n \"click\": function($event) {\n return _vm.$router.push(child.path)\n }\n }\n }, [_vm._v(_vm._s(child.name))]) : _vm._e()\n }), 0)] : [_c('li', {\n staticClass: \"el-submenu\"\n }, [_c('div', {\n staticClass: \"el-submenu__title el-menu-item\",\n class: _vm.$route.path == item.children[0].path ? 'is-active' : '',\n staticStyle: {\n \"padding-left\": \"20px\",\n \"height\": \"56px\",\n \"line-height\": \"56px\",\n \"padding\": \"0 20px\"\n },\n on: {\n \"click\": function($event) {\n return _vm.$router.push(item.children[0].path)\n }\n }\n }, [_c('i', {\n class: item.iconCls\n })])])]], 2) : _vm._e()\n }), 0) : _vm._e()], 1), _vm._v(\" \"), _c('section', {\n staticClass: \"content-container\"\n }, [_c('el-col', {\n staticClass: \"header\",\n attrs: {\n \"span\": 24\n }\n }, [_c('el-col', {\n attrs: {\n \"xs\": 2,\n \"sm\": 2,\n \"md\": 2,\n \"lg\": 2\n }\n }, [_c('div', {\n staticClass: \"tools\",\n staticStyle: {\n \"margin-bottom\": \"64px\"\n },\n on: {\n \"click\": function($event) {\n $event.preventDefault();\n return _vm.collapse($event)\n }\n }\n }, [_c('i', {\n staticClass: \"fa fa-align-justify\",\n staticStyle: {\n \"vertical-align\": \"middle\",\n \"color\": \"#353f4f\"\n }\n })])]), _vm._v(\" \"), _c('el-col', {\n staticClass: \"breadcrumb-container\",\n attrs: {\n \"xs\": 16,\n \"sm\": 16,\n \"md\": 16,\n \"lg\": 16\n }\n }, [_c('strong', {\n staticClass: \"title\"\n }, [_vm._v(_vm._s(_vm.$route.name))])]), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"xs\": 2,\n \"sm\": 2,\n \"md\": 2,\n \"lg\": 2\n }\n }, [_c('i', {\n staticClass: \"fa fa-bell fa-lg\",\n staticStyle: {\n \"color\": \"#353f4f\"\n },\n on: {\n \"click\": function($event) {\n _vm.dialogVisible = true\n }\n }\n }), _vm._v(\" \"), _c('el-badge', {\n attrs: {\n \"value\": 12,\n \"max\": 10\n }\n })], 1), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"xs\": 1,\n \"sm\": 1,\n \"md\": 1,\n \"lg\": 1\n }\n }, [_c('screenfull', {\n staticClass: \"screenfull\"\n })], 1), _vm._v(\" \"), _c('el-col', {\n staticClass: \"userinfo\",\n attrs: {\n \"xs\": 3,\n \"sm\": 3,\n \"md\": 3,\n \"lg\": 3\n }\n }, [_c('el-dropdown', {\n attrs: {\n \"trigger\": \"hover\"\n }\n }, [_c('span', {\n staticClass: \"el-dropdown-link userinfo-inner\"\n }, [_c('img', {\n attrs: {\n \"src\": this.sysUserAvatar\n }\n }), _vm._v(\" \" + _vm._s(_vm.sysUserName))]), _vm._v(\" \"), _c('el-dropdown-menu', {\n attrs: {\n \"slot\": \"dropdown\"\n },\n slot: \"dropdown\"\n }, [_c('router-link', {\n staticClass: \"inlineBlock\",\n staticStyle: {\n \"text-decoration\": \"none\",\n \"color\": \"black\"\n },\n attrs: {\n \"to\": \"/\"\n }\n }, [_c('el-dropdown-item', [_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t首页\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\")])], 1), _vm._v(\" \"), _c('a', {\n staticStyle: {\n \"text-decoration\": \"none\",\n \"color\": \"black\"\n },\n attrs: {\n \"target\": \"_blank\",\n \"href\": \"https://github.com/artdong/vue-admin\"\n }\n }, [_c('el-dropdown-item', [_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t开源项目地址\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\")])], 1), _vm._v(\" \"), _c('el-dropdown-item', {\n attrs: {\n \"divided\": \"\"\n },\n nativeOn: {\n \"click\": function($event) {\n return _vm.logout($event)\n }\n }\n }, [_vm._v(\"退出登录\")])], 1)], 1)], 1)], 1), _vm._v(\" \"), _c('div', {\n staticClass: \"grid-content bg-purple-light\"\n }, [_c('el-col', {\n staticClass: \"content-wrapper\",\n attrs: {\n \"span\": 24\n }\n }, [_c('transition', {\n attrs: {\n \"name\": \"fade\",\n \"mode\": \"out-in\"\n }\n }, [_c('router-view')], 1)], 1)], 1), _vm._v(\" \"), _c('el-dialog', {\n attrs: {\n \"title\": \"我的任务\",\n \"visible\": _vm.dialogVisible,\n \"close-on-click-modal\": false\n },\n on: {\n \"update:visible\": function($event) {\n _vm.dialogVisible = $event\n }\n }\n }, [_c('el-table', {\n directives: [{\n name: \"loading\",\n rawName: \"v-loading\",\n value: (_vm.listLoading),\n expression: \"listLoading\"\n }],\n attrs: {\n \"data\": _vm.maintains,\n \"highlight-current-row\": \"\"\n },\n on: {\n \"selection-change\": _vm.selsChange\n }\n }, [_c('el-table-column', {\n attrs: {\n \"type\": \"selection\",\n \"width\": \"55\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"type\": \"index\",\n \"width\": \"60\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"strTitle\",\n \"label\": \"维护项\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"strContent\",\n \"label\": \"维护内容\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"label\": \"操作\",\n \"width\": \"160\"\n },\n scopedSlots: _vm._u([{\n key: \"default\",\n fn: function(scope) {\n return [_c('el-button', {\n attrs: {\n \"size\": \"small\"\n },\n on: {\n \"click\": function($event) {\n return _vm.handleConfirm(scope.$index, scope.row)\n }\n }\n }, [_vm._v(\"确认\")]), _vm._v(\" \"), _c('el-dropdown', {\n staticStyle: {\n \"margin-left\": \"5px\"\n }\n }, [_c('span', {\n staticClass: \"el-dropdown-link\"\n }, [_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t 延迟\"), _c('i', {\n staticClass: \"el-icon-caret-bottom el-icon--right\"\n })]), _vm._v(\" \"), _c('el-dropdown-menu', {\n attrs: {\n \"slot\": \"dropdown\"\n },\n slot: \"dropdown\"\n }, [_c('el-dropdown-item', [_vm._v(\"5分钟\")]), _vm._v(\" \"), _c('el-dropdown-item', [_vm._v(\"10分钟\")]), _vm._v(\" \"), _c('el-dropdown-item', [_vm._v(\"15分钟\")]), _vm._v(\" \"), _c('el-dropdown-item', [_vm._v(\"20分钟\")]), _vm._v(\" \"), _c('el-dropdown-item', {\n attrs: {\n \"divided\": \"\"\n }\n }, [_vm._v(\"30分钟\")])], 1)], 1)]\n }\n }])\n })], 1), _vm._v(\" \"), _c('el-col', {\n staticClass: \"toolbar\",\n attrs: {\n \"span\": 24\n }\n }, [_c('el-button', {\n staticClass: \"fl\",\n attrs: {\n \"type\": \"danger\",\n \"disabled\": this.sels.length === 0\n },\n on: {\n \"click\": _vm.batchRemove\n }\n }, [_vm._v(\"批量删除\")]), _vm._v(\" \"), _c('el-pagination', {\n staticClass: \"fr\",\n attrs: {\n \"current-page\": _vm.listQuery.curPage,\n \"page-sizes\": [10, 20, 30, 50],\n \"page-size\": _vm.listQuery.pageSize,\n \"layout\": \"total, sizes, prev, pager, next, jumper\",\n \"total\": _vm.total\n },\n on: {\n \"size-change\": _vm.handleSizeChange,\n \"current-change\": _vm.handleCurrentChange,\n \"update:currentPage\": function($event) {\n return _vm.$set(_vm.listQuery, \"curPage\", $event)\n },\n \"update:current-page\": function($event) {\n return _vm.$set(_vm.listQuery, \"curPage\", $event)\n }\n }\n })], 1)], 1)], 1)])], 1)\n},staticRenderFns: []}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-loader/lib/template-compiler?{\"id\":\"data-v-51a2c380\"}!./~/vue-loader/lib/selector.js?type=template&index=0!./src/views/Home.vue\n// module id = 1068\n// module chunks = 2","module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('p', {\n staticClass: \"page-container\"\n }, [_vm._v(\"404 page not found\")])\n},staticRenderFns: []}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-loader/lib/template-compiler?{\"id\":\"data-v-552f9c87\"}!./~/vue-loader/lib/selector.js?type=template&index=0!./src/views/404.vue\n// module id = 1069\n// module chunks = 2","module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('section', {\n staticClass: \"chart-container\"\n }, [_c('el-row', [_c('el-col', {\n attrs: {\n \"span\": 12\n }\n }, [_c('div', {\n staticStyle: {\n \"width\": \"100%\",\n \"height\": \"400px\"\n },\n attrs: {\n \"id\": \"chartColumn\"\n }\n })]), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"span\": 12\n }\n }, [_c('div', {\n staticStyle: {\n \"width\": \"100%\",\n \"height\": \"400px\"\n },\n attrs: {\n \"id\": \"chartBar\"\n }\n })]), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"span\": 12\n }\n }, [_c('div', {\n staticStyle: {\n \"width\": \"100%\",\n \"height\": \"400px\"\n },\n attrs: {\n \"id\": \"chartLine\"\n }\n })]), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"span\": 12\n }\n }, [_c('div', {\n staticStyle: {\n \"width\": \"100%\",\n \"height\": \"400px\"\n },\n attrs: {\n \"id\": \"chartPie\"\n }\n })]), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"span\": 24\n }\n }, [_c('a', {\n staticStyle: {\n \"float\": \"right\"\n },\n attrs: {\n \"href\": \"http://echarts.baidu.com/examples.html\",\n \"target\": \"_blank\"\n }\n }, [_vm._v(\"more>>\")])])], 1)], 1)\n},staticRenderFns: []}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-loader/lib/template-compiler?{\"id\":\"data-v-612c0ec1\"}!./~/vue-loader/lib/selector.js?type=template&index=0!./src/views/charts/echarts.vue\n// module id = 1070\n// module chunks = 2","module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('section', [_c('el-form', {\n staticStyle: {\n \"margin\": \"10px\"\n }\n }, [_c('el-row', [_c('el-col', {\n staticStyle: {\n \"margin-left\": \"12px\"\n },\n attrs: {\n \"xs\": 6,\n \"sm\": 6,\n \"md\": 6,\n \"lg\": 6\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"文件名:\"\n }\n }, [_c('el-input', {\n staticStyle: {\n \"width\": \"160px\"\n },\n attrs: {\n \"placeholder\": \"请输入文件名(默认为excel-list)\",\n \"prefix-icon\": \"el-icon-document\"\n },\n model: {\n value: (_vm.filename),\n callback: function($$v) {\n _vm.filename = $$v\n },\n expression: \"filename\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('el-col', {\n staticStyle: {\n \"margin-left\": \"12px\"\n },\n attrs: {\n \"xs\": 6,\n \"sm\": 6,\n \"md\": 6,\n \"lg\": 6\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"单元格自动宽度:\"\n }\n }, [_c('el-radio-group', {\n model: {\n value: (_vm.autoWidth),\n callback: function($$v) {\n _vm.autoWidth = $$v\n },\n expression: \"autoWidth\"\n }\n }, [_c('el-radio', {\n attrs: {\n \"label\": 1,\n \"border\": \"\"\n }\n }, [_vm._v(\"是\")]), _vm._v(\" \"), _c('el-radio', {\n attrs: {\n \"label\": 0,\n \"border\": \"\"\n }\n }, [_vm._v(\"否\")])], 1)], 1)], 1), _vm._v(\" \"), _c('el-col', {\n staticStyle: {\n \"margin-left\": \"12px\"\n },\n attrs: {\n \"xs\": 6,\n \"sm\": 6,\n \"md\": 6,\n \"lg\": 6\n }\n }, [_c('el-form-item', {\n staticStyle: {\n \"margin-left\": \"10px\"\n }\n }, [_c('el-button', {\n attrs: {\n \"type\": \"primary\",\n \"loading\": _vm.downloadLoading,\n \"icon\": \"document\"\n },\n on: {\n \"click\": _vm.handleDownload\n }\n }, [_vm._v(\"\\n 导出Excel\\n \")])], 1)], 1)], 1)], 1), _vm._v(\" \"), (false) ? _c('el-form', {\n ref: \"form\",\n staticStyle: {\n \"margin\": \"10px\"\n },\n attrs: {\n \"model\": _vm.form\n },\n on: {\n \"submit\": function($event) {\n $event.preventDefault();\n return _vm.onSubmit($event)\n }\n }\n }, [_c('el-form', {\n staticClass: \"demo-form-inline\",\n attrs: {\n \"inline\": true,\n \"model\": _vm.filters\n }\n }, [_c('el-row', [_c('el-col', {\n staticStyle: {\n \"margin-left\": \"12px\"\n },\n attrs: {\n \"xs\": 12,\n \"sm\": 12,\n \"md\": 12,\n \"lg\": 12\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"维护项\"\n }\n }, [_c('el-input', {\n staticStyle: {\n \"width\": \"160px\"\n },\n attrs: {\n \"placeholder\": \"维护项\"\n },\n model: {\n value: (_vm.filters.strTitle),\n callback: function($$v) {\n _vm.$set(_vm.filters, \"strTitle\", $$v)\n },\n expression: \"filters.strTitle\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"xs\": 10,\n \"sm\": 10,\n \"md\": 10,\n \"lg\": 10\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"维护内容\"\n }\n }, [_c('el-input', {\n staticStyle: {\n \"width\": \"180px\"\n },\n attrs: {\n \"placeholder\": \"维护内容\"\n },\n model: {\n value: (_vm.filters.strContent),\n callback: function($$v) {\n _vm.$set(_vm.filters, \"strContent\", $$v)\n },\n expression: \"filters.strContent\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"xs\": 24,\n \"sm\": 24,\n \"md\": 24,\n \"lg\": 12\n }\n }, [_c('el-form-item', {\n staticClass: \"postInfo-container-item\",\n attrs: {\n \"label-width\": \"80px\",\n \"label\": \"创建时间\"\n }\n }, [_c('el-date-picker', {\n attrs: {\n \"type\": \"datetimerange\",\n \"picker-options\": _vm.pickerOptions2,\n \"placeholder\": \"选择时间范围\",\n \"align\": \"right\"\n },\n model: {\n value: (_vm.filters.createTime),\n callback: function($$v) {\n _vm.$set(_vm.filters, \"createTime\", $$v)\n },\n expression: \"filters.createTime\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"xs\": 24,\n \"sm\": 24,\n \"md\": 24,\n \"lg\": 12\n }\n }, [_c('el-form-item', {\n staticClass: \"postInfo-container-item\",\n attrs: {\n \"label-width\": \"80px\",\n \"label\": \"更新时间\"\n }\n }, [_c('el-date-picker', {\n attrs: {\n \"type\": \"datetimerange\",\n \"picker-options\": _vm.pickerOptions2,\n \"placeholder\": \"选择时间范围\",\n \"align\": \"right\"\n },\n model: {\n value: (_vm.filters.updateTime),\n callback: function($$v) {\n _vm.$set(_vm.filters, \"updateTime\", $$v)\n },\n expression: \"filters.updateTime\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('el-col', {\n staticStyle: {\n \"margin-left\": \"12px\"\n },\n attrs: {\n \"xs\": 24,\n \"sm\": 24,\n \"md\": 24,\n \"lg\": 12\n }\n }, [_c('el-form-item', [_c('el-button', {\n attrs: {\n \"type\": \"primary\",\n \"icon\": \"search\"\n },\n on: {\n \"click\": _vm.getMaintains\n }\n }, [_vm._v(\"查询\")])], 1)], 1)], 1)], 1)], 1) : _vm._e(), _vm._v(\" \"), _c('div', {\n staticClass: \"panel\"\n }, [_c('div', {\n staticClass: \"panel-title\"\n }, [_c('span', {\n domProps: {\n \"textContent\": _vm._s(_vm.panelTitle)\n }\n }), _vm._v(\" \"), _c('div', {\n staticClass: \"fr\"\n }, [_c('el-button', {\n attrs: {\n \"size\": \"small\"\n },\n on: {\n \"click\": function($event) {\n $event.stopPropagation();\n return _vm.on_refresh($event)\n }\n }\n }, [_c('i', {\n staticClass: \"fa fa-refresh\"\n })]), _vm._v(\" \"), _c('el-button', {\n attrs: {\n \"type\": \"primary\",\n \"icon\": \"plus\",\n \"size\": \"small\"\n },\n on: {\n \"click\": _vm.handleAdd\n }\n }, [_vm._v(\"新增\")])], 1)]), _vm._v(\" \"), _c('div', {\n staticClass: \"panel-body\"\n }, [_c('el-table', {\n directives: [{\n name: \"loading\",\n rawName: \"v-loading\",\n value: (_vm.listLoading),\n expression: \"listLoading\"\n }],\n attrs: {\n \"data\": _vm.maintains,\n \"highlight-current-row\": \"\"\n },\n on: {\n \"selection-change\": _vm.selsChange\n }\n }, [_c('el-table-column', {\n attrs: {\n \"type\": \"selection\",\n \"width\": \"55\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"type\": \"index\",\n \"width\": \"60\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"label\": \"维护项名称\"\n },\n scopedSlots: _vm._u([{\n key: \"default\",\n fn: function(scope) {\n return [_c('span', {\n domProps: {\n \"innerHTML\": _vm._s(_vm.brightenKeyword(scope.row.strTitle, _vm.filters.strTitle))\n }\n })]\n }\n }])\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"label\": \"维护内容\"\n },\n scopedSlots: _vm._u([{\n key: \"default\",\n fn: function(scope) {\n return [_c('span', {\n domProps: {\n \"innerHTML\": _vm._s(_vm.brightenKeyword(scope.row.strContent, _vm.filters.strContent))\n }\n })]\n }\n }])\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"createTime\",\n \"label\": \"创建时间\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"updateTime\",\n \"label\": \"更新时间\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"label\": \"操作\",\n \"width\": \"150\"\n },\n scopedSlots: _vm._u([{\n key: \"default\",\n fn: function(scope) {\n return [_c('el-button', {\n attrs: {\n \"size\": \"small\"\n },\n on: {\n \"click\": function($event) {\n return _vm.handleEdit(scope.$index, scope.row)\n }\n }\n }, [_vm._v(\"编辑\")]), _vm._v(\" \"), _c('el-button', {\n attrs: {\n \"type\": \"danger\",\n \"size\": \"small\"\n },\n on: {\n \"click\": function($event) {\n return _vm.handleDel(scope.$index, scope.row)\n }\n }\n }, [_vm._v(\"删除\\n \")])]\n }\n }])\n })], 1), _vm._v(\" \"), _c('el-col', {\n staticClass: \"toolbar\",\n attrs: {\n \"span\": 24\n }\n }, [_c('el-button', {\n staticClass: \"fl\",\n attrs: {\n \"type\": \"danger\",\n \"disabled\": this.sels.length === 0\n },\n on: {\n \"click\": _vm.batchRemove\n }\n }, [_vm._v(\"批量删除\\n \")]), _vm._v(\" \"), _c('el-pagination', {\n staticClass: \"fr\",\n attrs: {\n \"current-page\": _vm.listQuery.curPage,\n \"page-sizes\": [10, 20, 30, 50],\n \"page-size\": _vm.listQuery.pageSize,\n \"layout\": \"total, sizes, prev, pager, next, jumper\",\n \"total\": _vm.total\n },\n on: {\n \"size-change\": _vm.handleSizeChange,\n \"current-change\": _vm.handleCurrentChange,\n \"update:currentPage\": function($event) {\n return _vm.$set(_vm.listQuery, \"curPage\", $event)\n },\n \"update:current-page\": function($event) {\n return _vm.$set(_vm.listQuery, \"curPage\", $event)\n }\n }\n })], 1)], 1)]), _vm._v(\" \"), _c('el-dialog', {\n attrs: {\n \"title\": \"编辑维护项\",\n \"close-on-click-modal\": false\n },\n model: {\n value: (_vm.editFormVisible),\n callback: function($$v) {\n _vm.editFormVisible = $$v\n },\n expression: \"editFormVisible\"\n }\n }, [_c('el-form', {\n ref: \"editForm\",\n attrs: {\n \"model\": _vm.editForm,\n \"label-width\": \"80px\",\n \"rules\": _vm.editFormRules\n }\n }, [_c('el-form-item', {\n staticStyle: {\n \"width\": \"450px\"\n },\n attrs: {\n \"label\": \"名称\",\n \"prop\": \"strTitle\"\n }\n }, [_c('el-input', {\n attrs: {\n \"auto-complete\": \"off\"\n },\n model: {\n value: (_vm.editForm.strTitle),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"strTitle\", $$v)\n },\n expression: \"editForm.strTitle\"\n }\n })], 1), _vm._v(\" \"), _c('el-form-item', {\n staticStyle: {\n \"width\": \"450px\"\n },\n attrs: {\n \"label\": \"维护内容\",\n \"prop\": \"strContent\"\n }\n }, [_c('el-input', {\n attrs: {\n \"type\": \"textarea\",\n \"rows\": 2,\n \"placeholder\": \"请输入内容\"\n },\n model: {\n value: (_vm.editForm.strContent),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"strContent\", $$v)\n },\n expression: \"editForm.strContent\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('div', {\n staticClass: \"dialog-footer\",\n attrs: {\n \"slot\": \"footer\"\n },\n slot: \"footer\"\n }, [_c('el-button', {\n nativeOn: {\n \"click\": function($event) {\n _vm.editFormVisible = false\n }\n }\n }, [_vm._v(\"取消\")]), _vm._v(\" \"), _c('el-button', {\n attrs: {\n \"type\": \"primary\",\n \"loading\": _vm.editLoading\n },\n nativeOn: {\n \"click\": function($event) {\n return _vm.editSubmit($event)\n }\n }\n }, [_vm._v(\"提交\")])], 1)], 1), _vm._v(\" \"), _c('el-dialog', {\n attrs: {\n \"title\": \"新增维护项\",\n \"close-on-click-modal\": false,\n \"size\": \"small\"\n },\n model: {\n value: (_vm.addFormVisible),\n callback: function($$v) {\n _vm.addFormVisible = $$v\n },\n expression: \"addFormVisible\"\n }\n }, [_c('el-form', {\n ref: \"addForm\",\n attrs: {\n \"model\": _vm.addForm,\n \"label-width\": \"80px\",\n \"rules\": _vm.addFormRules\n }\n }, [_c('el-form-item', {\n staticStyle: {\n \"width\": \"450px\"\n },\n attrs: {\n \"label\": \"名称\",\n \"prop\": \"strTitle\"\n }\n }, [_c('el-input', {\n attrs: {\n \"auto-complete\": \"off\"\n },\n model: {\n value: (_vm.addForm.strTitle),\n callback: function($$v) {\n _vm.$set(_vm.addForm, \"strTitle\", $$v)\n },\n expression: \"addForm.strTitle\"\n }\n })], 1), _vm._v(\" \"), _c('el-form-item', {\n staticStyle: {\n \"width\": \"450px\"\n },\n attrs: {\n \"label\": \"维护内容\",\n \"prop\": \"strContent\"\n }\n }, [_c('el-input', {\n attrs: {\n \"type\": \"textarea\",\n \"rows\": 2,\n \"placeholder\": \"请输入内容\"\n },\n model: {\n value: (_vm.addForm.strContent),\n callback: function($$v) {\n _vm.$set(_vm.addForm, \"strContent\", $$v)\n },\n expression: \"addForm.strContent\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('div', {\n staticClass: \"dialog-footer\",\n attrs: {\n \"slot\": \"footer\"\n },\n slot: \"footer\"\n }, [_c('el-button', {\n nativeOn: {\n \"click\": function($event) {\n _vm.addFormVisible = false\n }\n }\n }, [_vm._v(\"取消\")]), _vm._v(\" \"), _c('el-button', {\n attrs: {\n \"type\": \"primary\",\n \"loading\": _vm.addLoading\n },\n nativeOn: {\n \"click\": function($event) {\n return _vm.addSubmit($event)\n }\n }\n }, [_vm._v(\"提交\")])], 1)], 1)], 1)\n},staticRenderFns: []}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-loader/lib/template-compiler?{\"id\":\"data-v-73ce23cd\"}!./~/vue-loader/lib/selector.js?type=template&index=0!./src/views/excel/export.vue\n// module id = 1071\n// module chunks = 2","module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('section', [_c('el-collapse', {\n model: {\n value: (_vm.activeNames),\n callback: function($$v) {\n _vm.activeNames = $$v\n },\n expression: \"activeNames\"\n }\n }, [_c('el-collapse-item', {\n attrs: {\n \"title\": \"查询条件\",\n \"name\": \"1\"\n }\n }, [_c('el-form', {\n ref: \"form\",\n staticStyle: {\n \"margin\": \"10px\",\n \"width\": \"60%\",\n \"min-width\": \"600px\"\n },\n attrs: {\n \"model\": _vm.form,\n \"label-width\": \"80px\"\n },\n on: {\n \"submit\": function($event) {\n $event.preventDefault();\n return _vm.onSubmit($event)\n }\n }\n }, [_c('el-row', [_c('el-col', {\n attrs: {\n \"span\": 12\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"设备编号\"\n }\n }, [_c('el-select', {\n attrs: {\n \"placeholder\": \"全部\"\n },\n model: {\n value: (_vm.form.deviceNo),\n callback: function($$v) {\n _vm.$set(_vm.form, \"deviceNo\", $$v)\n },\n expression: \"form.deviceNo\"\n }\n }, _vm._l((_vm.form.deviceNoItems), function(item) {\n return _c('el-option', {\n key: item,\n attrs: {\n \"value\": item.value\n }\n }, [_vm._v(_vm._s(item.text))])\n }), 1), _vm._v(\" \"), _c('p', [_vm._v(\"已选:\" + _vm._s(_vm.form.deviceNo))])], 1)], 1), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"span\": 12\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label-width\": \"80px\",\n \"label\": \"开始时间\"\n }\n }, [_c('el-date-picker', {\n attrs: {\n \"type\": \"datetime\",\n \"format\": \"yyyy-MM-dd HH:mm:ss\",\n \"placeholder\": \"选择日期时间\"\n },\n model: {\n value: (_vm.form.startTime),\n callback: function($$v) {\n _vm.$set(_vm.form, \"startTime\", $$v)\n },\n expression: \"form.startTime\"\n }\n })], 1)], 1)], 1), _vm._v(\" \"), _c('el-form-item', {\n attrs: {\n \"label\": \"重复设置\"\n }\n }, [_c('el-checkbox-group', {\n model: {\n value: (_vm.form.repeat),\n callback: function($$v) {\n _vm.$set(_vm.form, \"repeat\", $$v)\n },\n expression: \"form.repeat\"\n }\n }, [_c('el-checkbox', {\n attrs: {\n \"label\": \"一次\",\n \"name\": \"repeat\"\n }\n }), _vm._v(\" \"), _c('el-checkbox', {\n attrs: {\n \"label\": \"每天\",\n \"name\": \"repeat\"\n }\n }), _vm._v(\" \"), _c('el-checkbox', {\n attrs: {\n \"label\": \"每周\",\n \"name\": \"repeat\"\n }\n }), _vm._v(\" \"), _c('el-checkbox', {\n attrs: {\n \"label\": \"每季\",\n \"name\": \"repeat\"\n }\n }), _vm._v(\" \"), _c('el-checkbox', {\n attrs: {\n \"label\": \"每年\",\n \"name\": \"repeat\"\n }\n }), _vm._v(\" \"), _c('p', [_vm._v(\"已选:\" + _vm._s(_vm.form.repeat.join('|')))])], 1)], 1), _vm._v(\" \"), _c('el-row', [_c('el-col', {\n attrs: {\n \"span\": 12\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"类型选择\"\n }\n }, [_c('el-checkbox-group', {\n model: {\n value: (_vm.form.type),\n callback: function($$v) {\n _vm.$set(_vm.form, \"type\", $$v)\n },\n expression: \"form.type\"\n }\n }, [_c('el-checkbox', {\n attrs: {\n \"label\": \"充电\",\n \"name\": \"type\"\n }\n }), _vm._v(\" \"), _c('el-checkbox', {\n attrs: {\n \"label\": \"放电\",\n \"name\": \"type\"\n }\n }), _vm._v(\" \"), _c('el-checkbox', {\n attrs: {\n \"label\": \"内阻\",\n \"name\": \"type\"\n }\n })], 1), _vm._v(\" \"), _c('p', [_vm._v(\"已选:\" + _vm._s(_vm.form.type.join('|')))])], 1)], 1), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"span\": 12\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"启用状态\"\n }\n }, [_c('el-radio-group', {\n model: {\n value: (_vm.form.state),\n callback: function($$v) {\n _vm.$set(_vm.form, \"state\", $$v)\n },\n expression: \"form.state\"\n }\n }, [_c('el-radio', {\n staticClass: \"radio\",\n attrs: {\n \"label\": 1\n }\n }, [_vm._v(\"已启用\")]), _vm._v(\" \"), _c('el-radio', {\n staticClass: \"radio\",\n attrs: {\n \"label\": 0\n }\n }, [_vm._v(\"未启用\")])], 1)], 1)], 1)], 1), _vm._v(\" \"), _c('el-form', {\n attrs: {\n \"model\": _vm.filters\n }\n }, [_c('el-col', {\n attrs: {\n \"span\": 6\n }\n }, [_c('el-form-item', {\n staticStyle: {\n \"margin-left\": \"10px\"\n }\n }, [_c('el-input', {\n attrs: {\n \"placeholder\": \"设备名称\"\n },\n model: {\n value: (_vm.filters.siteName),\n callback: function($$v) {\n _vm.$set(_vm.filters, \"siteName\", $$v)\n },\n expression: \"filters.siteName\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"span\": 4\n }\n }, [_c('el-form-item', {\n staticStyle: {\n \"margin-left\": \"30px\"\n }\n }, [_c('el-button', {\n attrs: {\n \"type\": \"primary\"\n },\n on: {\n \"click\": _vm.getUsers\n }\n }, [_vm._v(\"查询\")])], 1)], 1)], 1)], 1)], 1)], 1), _vm._v(\" \"), _c('div', {\n staticClass: \"panel\"\n }, [_c('div', {\n staticClass: \"panel-title\"\n }, [_c('span', {\n domProps: {\n \"textContent\": _vm._s(_vm.panelTitle)\n }\n }), _vm._v(\" \"), _c('div', {\n staticClass: \"fr\"\n }, [_c('el-button', {\n attrs: {\n \"size\": \"small\"\n },\n on: {\n \"click\": function($event) {\n $event.stopPropagation();\n return _vm.on_refresh($event)\n }\n }\n }, [_c('i', {\n staticClass: \"fa fa-refresh\"\n })]), _vm._v(\" \"), _c('el-button', {\n attrs: {\n \"type\": \"primary\",\n \"icon\": \"plus\",\n \"size\": \"small\"\n },\n on: {\n \"click\": _vm.handleAdd\n }\n }, [_vm._v(\"新增\")])], 1)]), _vm._v(\" \"), _c('div', {\n staticClass: \"panel-body\"\n }, [_c('el-table', {\n directives: [{\n name: \"loading\",\n rawName: \"v-loading\",\n value: (_vm.listLoading),\n expression: \"listLoading\"\n }],\n staticStyle: {\n \"width\": \"100%\"\n },\n attrs: {\n \"data\": _vm.users,\n \"highlight-current-row\": \"\"\n },\n on: {\n \"selection-change\": _vm.selsChange\n }\n }, [_c('el-table-column', {\n attrs: {\n \"type\": \"selection\",\n \"width\": \"55\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"type\": \"index\",\n \"width\": \"60\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"siteName\",\n \"label\": \"站点名称\",\n \"width\": \"120\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"deviceNo\",\n \"label\": \"设备号\",\n \"width\": \"100\",\n \"sortable\": \"\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"startTime\",\n \"label\": \"开始时间\",\n \"width\": \"120\",\n \"sortable\": \"\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"repeat\",\n \"label\": \"重复设置\",\n \"min-width\": \"120\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"state\",\n \"label\": \"启用状态\",\n \"min-width\": \"120\",\n \"formatter\": _vm.formatState\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"type\",\n \"label\": \"类型\",\n \"min-width\": \"100\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"label\": \"操作\",\n \"width\": \"150\"\n },\n scopedSlots: _vm._u([{\n key: \"default\",\n fn: function(scope) {\n return [_c('el-button', {\n attrs: {\n \"size\": \"small\"\n },\n on: {\n \"click\": function($event) {\n return _vm.handleEdit(scope.$index, scope.row)\n }\n }\n }, [_vm._v(\"编辑\")]), _vm._v(\" \"), _c('el-button', {\n attrs: {\n \"type\": \"danger\",\n \"size\": \"small\"\n },\n on: {\n \"click\": function($event) {\n return _vm.handleDel(scope.$index, scope.row)\n }\n }\n }, [_vm._v(\"删除\")])]\n }\n }])\n })], 1), _vm._v(\" \"), _c('el-col', {\n staticClass: \"toolbar\",\n attrs: {\n \"span\": 24\n }\n }, [_c('el-button', {\n staticClass: \"fl\",\n attrs: {\n \"type\": \"danger\",\n \"disabled\": this.sels.length === 0\n },\n on: {\n \"click\": _vm.batchRemove\n }\n }, [_vm._v(\"批量删除\")]), _vm._v(\" \"), _c('el-pagination', {\n staticClass: \"fr\",\n attrs: {\n \"current-page\": _vm.listQuery.curPage,\n \"page-sizes\": [10, 20, 30, 50],\n \"page-size\": _vm.listQuery.pageSize,\n \"layout\": \"total, sizes, prev, pager, next, jumper\",\n \"total\": _vm.total\n },\n on: {\n \"size-change\": _vm.handleSizeChange,\n \"current-change\": _vm.handleCurrentChange,\n \"update:currentPage\": function($event) {\n return _vm.$set(_vm.listQuery, \"curPage\", $event)\n },\n \"update:current-page\": function($event) {\n return _vm.$set(_vm.listQuery, \"curPage\", $event)\n }\n }\n })], 1)], 1)]), _vm._v(\" \"), _c('el-dialog', {\n attrs: {\n \"title\": \"编辑\",\n \"close-on-click-modal\": false\n },\n model: {\n value: (_vm.editFormVisible),\n callback: function($$v) {\n _vm.editFormVisible = $$v\n },\n expression: \"editFormVisible\"\n }\n }, [_c('el-form', {\n ref: \"editForm\",\n attrs: {\n \"model\": _vm.editForm,\n \"label-width\": \"80px\",\n \"rules\": _vm.editFormRules\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"站点名称\",\n \"prop\": \"siteName\"\n }\n }, [_c('el-input', {\n attrs: {\n \"auto-complete\": \"off\"\n },\n model: {\n value: (_vm.editForm.siteName),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"siteName\", $$v)\n },\n expression: \"editForm.siteName\"\n }\n })], 1), _vm._v(\" \"), _c('el-form-item', {\n attrs: {\n \"label\": \"设备号\"\n }\n }, [_c('el-input-number', {\n attrs: {\n \"min\": 0,\n \"max\": 200\n },\n model: {\n value: (_vm.editForm.deviceNo),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"deviceNo\", $$v)\n },\n expression: \"editForm.deviceNo\"\n }\n })], 1), _vm._v(\" \"), _c('el-form-item', {\n attrs: {\n \"label\": \"开始时间\"\n }\n }, [_c('el-date-picker', {\n attrs: {\n \"type\": \"date\",\n \"placeholder\": \"选择日期\"\n },\n model: {\n value: (_vm.editForm.startTime),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"startTime\", $$v)\n },\n expression: \"editForm.startTime\"\n }\n })], 1), _vm._v(\" \"), _c('el-form-item', {\n attrs: {\n \"label\": \"重复设置\"\n }\n }, [_c('el-checkbox-group', {\n model: {\n value: (_vm.editForm.repeat),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"repeat\", $$v)\n },\n expression: \"editForm.repeat\"\n }\n }, [_c('el-checkbox', {\n attrs: {\n \"label\": \"一次\",\n \"name\": \"repeat\"\n }\n }), _vm._v(\" \"), _c('el-checkbox', {\n attrs: {\n \"label\": \"每天\",\n \"name\": \"repeat\"\n }\n }), _vm._v(\" \"), _c('el-checkbox', {\n attrs: {\n \"label\": \"每周\",\n \"name\": \"repeat\"\n }\n }), _vm._v(\" \"), _c('el-checkbox', {\n attrs: {\n \"label\": \"每季\",\n \"name\": \"repeat\"\n }\n }), _vm._v(\" \"), _c('el-checkbox', {\n attrs: {\n \"label\": \"每年\",\n \"name\": \"repeat\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('el-row', [_c('el-col', {\n attrs: {\n \"span\": 12\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"类型选择\"\n }\n }, [_c('el-checkbox-group', {\n model: {\n value: (_vm.editForm.type),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"type\", $$v)\n },\n expression: \"editForm.type\"\n }\n }, [_c('el-checkbox', {\n attrs: {\n \"label\": \"充电\",\n \"name\": \"type\"\n }\n }), _vm._v(\" \"), _c('el-checkbox', {\n attrs: {\n \"label\": \"放电\",\n \"name\": \"type\"\n }\n }), _vm._v(\" \"), _c('el-checkbox', {\n attrs: {\n \"label\": \"内阻\",\n \"name\": \"type\"\n }\n })], 1)], 1)], 1), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"span\": 12\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"启用状态\"\n }\n }, [_c('el-radio-group', {\n model: {\n value: (_vm.editForm.state),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"state\", $$v)\n },\n expression: \"editForm.state\"\n }\n }, [_c('el-radio', {\n staticClass: \"radio\",\n attrs: {\n \"label\": 1\n }\n }, [_vm._v(\"已启用\")]), _vm._v(\" \"), _c('el-radio', {\n staticClass: \"radio\",\n attrs: {\n \"label\": 0\n }\n }, [_vm._v(\"未启用\")])], 1)], 1)], 1)], 1)], 1), _vm._v(\" \"), _c('div', {\n staticClass: \"dialog-footer\",\n attrs: {\n \"slot\": \"footer\"\n },\n slot: \"footer\"\n }, [_c('el-button', {\n nativeOn: {\n \"click\": function($event) {\n _vm.editFormVisible = false\n }\n }\n }, [_vm._v(\"取消\")]), _vm._v(\" \"), _c('el-button', {\n attrs: {\n \"type\": \"primary\",\n \"loading\": _vm.editLoading\n },\n nativeOn: {\n \"click\": function($event) {\n return _vm.editSubmit($event)\n }\n }\n }, [_vm._v(\"提交\")])], 1)], 1), _vm._v(\" \"), _c('el-dialog', {\n attrs: {\n \"title\": \"新增\",\n \"close-on-click-modal\": false\n },\n model: {\n value: (_vm.addFormVisible),\n callback: function($$v) {\n _vm.addFormVisible = $$v\n },\n expression: \"addFormVisible\"\n }\n }, [_c('el-form', {\n ref: \"addForm\",\n attrs: {\n \"model\": _vm.addForm,\n \"label-width\": \"80px\",\n \"rules\": _vm.addFormRules\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"站点名称\",\n \"prop\": \"siteName\"\n }\n }, [_c('el-input', {\n attrs: {\n \"auto-complete\": \"off\"\n },\n model: {\n value: (_vm.addForm.siteName),\n callback: function($$v) {\n _vm.$set(_vm.addForm, \"siteName\", $$v)\n },\n expression: \"addForm.siteName\"\n }\n })], 1), _vm._v(\" \"), _c('el-form-item', {\n attrs: {\n \"label\": \"设备号\"\n }\n }, [_c('el-input-number', {\n attrs: {\n \"min\": 0,\n \"max\": 200\n },\n model: {\n value: (_vm.addForm.deviceNo),\n callback: function($$v) {\n _vm.$set(_vm.addForm, \"deviceNo\", $$v)\n },\n expression: \"addForm.deviceNo\"\n }\n })], 1), _vm._v(\" \"), _c('el-form-item', {\n attrs: {\n \"label\": \"开始时间\"\n }\n }, [_c('el-date-picker', {\n attrs: {\n \"type\": \"date\",\n \"placeholder\": \"选择日期\"\n },\n model: {\n value: (_vm.addForm.startTime),\n callback: function($$v) {\n _vm.$set(_vm.addForm, \"startTime\", $$v)\n },\n expression: \"addForm.startTime\"\n }\n })], 1), _vm._v(\" \"), _c('el-form-item', {\n attrs: {\n \"label\": \"重复设置\"\n }\n }, [_c('el-checkbox-group', {\n model: {\n value: (_vm.addForm.repeat),\n callback: function($$v) {\n _vm.$set(_vm.addForm, \"repeat\", $$v)\n },\n expression: \"addForm.repeat\"\n }\n }, [_c('el-checkbox', {\n attrs: {\n \"label\": \"一次\",\n \"name\": \"repeat\"\n }\n }), _vm._v(\" \"), _c('el-checkbox', {\n attrs: {\n \"label\": \"每天\",\n \"name\": \"repeat\"\n }\n }), _vm._v(\" \"), _c('el-checkbox', {\n attrs: {\n \"label\": \"每周\",\n \"name\": \"repeat\"\n }\n }), _vm._v(\" \"), _c('el-checkbox', {\n attrs: {\n \"label\": \"每季\",\n \"name\": \"repeat\"\n }\n }), _vm._v(\" \"), _c('el-checkbox', {\n attrs: {\n \"label\": \"每年\",\n \"name\": \"repeat\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('el-row', [_c('el-col', {\n attrs: {\n \"span\": 12\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"类型选择\"\n }\n }, [_c('el-checkbox-group', {\n model: {\n value: (_vm.addForm.type),\n callback: function($$v) {\n _vm.$set(_vm.addForm, \"type\", $$v)\n },\n expression: \"addForm.type\"\n }\n }, [_c('el-checkbox', {\n attrs: {\n \"label\": \"充电\",\n \"name\": \"type\"\n }\n }), _vm._v(\" \"), _c('el-checkbox', {\n attrs: {\n \"label\": \"放电\",\n \"name\": \"type\"\n }\n }), _vm._v(\" \"), _c('el-checkbox', {\n attrs: {\n \"label\": \"内阻\",\n \"name\": \"type\"\n }\n })], 1)], 1)], 1), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"span\": 12\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"启用状态\"\n }\n }, [_c('el-radio-group', {\n model: {\n value: (_vm.editForm.state),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"state\", $$v)\n },\n expression: \"editForm.state\"\n }\n }, [_c('el-radio', {\n staticClass: \"radio\",\n attrs: {\n \"label\": 1\n }\n }, [_vm._v(\"已启用\")]), _vm._v(\" \"), _c('el-radio', {\n staticClass: \"radio\",\n attrs: {\n \"label\": 0\n }\n }, [_vm._v(\"未启用\")])], 1)], 1)], 1)], 1)], 1), _vm._v(\" \"), _c('div', {\n staticClass: \"dialog-footer\",\n attrs: {\n \"slot\": \"footer\"\n },\n slot: \"footer\"\n }, [_c('el-button', {\n nativeOn: {\n \"click\": function($event) {\n _vm.addFormVisible = false\n }\n }\n }, [_vm._v(\"取消\")]), _vm._v(\" \"), _c('el-button', {\n attrs: {\n \"type\": \"primary\",\n \"loading\": _vm.addLoading\n },\n nativeOn: {\n \"click\": function($event) {\n return _vm.addSubmit($event)\n }\n }\n }, [_vm._v(\"提交\")])], 1)], 1)], 1)\n},staticRenderFns: []}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-loader/lib/template-compiler?{\"id\":\"data-v-84a81470\"}!./~/vue-loader/lib/selector.js?type=template&index=0!./src/views/nav4/Page4.vue\n// module id = 1072\n// module chunks = 2","module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('section', [_c('el-collapse', {\n model: {\n value: (_vm.activeNames),\n callback: function($$v) {\n _vm.activeNames = $$v\n },\n expression: \"activeNames\"\n }\n }, [_c('el-collapse-item', {\n attrs: {\n \"title\": \"查询条件\",\n \"name\": \"1\"\n }\n }, [_c('el-form', {\n ref: \"form\",\n staticStyle: {\n \"margin\": \"10px\"\n },\n attrs: {\n \"model\": _vm.form\n },\n on: {\n \"submit\": function($event) {\n $event.preventDefault();\n return _vm.onSubmit($event)\n }\n }\n }, [_c('el-form', {\n attrs: {\n \"model\": _vm.filters\n }\n }, [_c('el-row', [_c('el-col', {\n staticStyle: {\n \"margin-left\": \"12px\"\n },\n attrs: {\n \"xs\": 12,\n \"sm\": 12,\n \"md\": 12,\n \"lg\": 5\n }\n }, [_c('el-form-item', [_c('el-input', {\n staticStyle: {\n \"width\": \"160px\"\n },\n attrs: {\n \"placeholder\": \"计划ID\"\n },\n model: {\n value: (_vm.filters.strPlanId),\n callback: function($$v) {\n _vm.$set(_vm.filters, \"strPlanId\", $$v)\n },\n expression: \"filters.strPlanId\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"xs\": 10,\n \"sm\": 10,\n \"md\": 10,\n \"lg\": 5\n }\n }, [_c('el-form-item', [_c('el-input', {\n staticStyle: {\n \"width\": \"160px\"\n },\n attrs: {\n \"placeholder\": \"设备类型ID\"\n },\n model: {\n value: (_vm.filters.strMaintainId),\n callback: function($$v) {\n _vm.$set(_vm.filters, \"strMaintainId\", $$v)\n },\n expression: \"filters.strMaintainId\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('el-col', {\n staticStyle: {\n \"margin-left\": \"12px\"\n },\n attrs: {\n \"xs\": 12,\n \"sm\": 12,\n \"md\": 12,\n \"lg\": 5\n }\n }, [_c('el-form-item', [_c('el-input', {\n staticStyle: {\n \"width\": \"160px\"\n },\n attrs: {\n \"placeholder\": \"设备ID\"\n },\n model: {\n value: (_vm.filters.equipmentCategory),\n callback: function($$v) {\n _vm.$set(_vm.filters, \"equipmentCategory\", $$v)\n },\n expression: \"filters.equipmentCategory\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"xs\": 10,\n \"sm\": 10,\n \"md\": 10,\n \"lg\": 5\n }\n }, [_c('el-form-item', [_c('el-input', {\n staticStyle: {\n \"width\": \"160px\"\n },\n attrs: {\n \"placeholder\": \"维护项ID\"\n },\n model: {\n value: (_vm.filters.equipmentId),\n callback: function($$v) {\n _vm.$set(_vm.filters, \"equipmentId\", $$v)\n },\n expression: \"filters.equipmentId\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"xs\": 12,\n \"sm\": 12,\n \"md\": 12,\n \"lg\": 14\n }\n }, [_c('el-form-item', {\n staticClass: \"postInfo-container-item\",\n attrs: {\n \"label-width\": \"80px\",\n \"label\": \"执行时间\"\n }\n }, [_c('el-date-picker', {\n attrs: {\n \"type\": \"datetimerange\",\n \"picker-options\": _vm.pickerOptions2,\n \"placeholder\": \"选择时间范围\",\n \"align\": \"right\"\n },\n model: {\n value: (_vm.filters.executeTime),\n callback: function($$v) {\n _vm.$set(_vm.filters, \"executeTime\", $$v)\n },\n expression: \"filters.executeTime\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('el-col', {\n staticStyle: {\n \"margin-left\": \"20px\"\n },\n attrs: {\n \"xs\": 10,\n \"sm\": 10,\n \"md\": 10,\n \"lg\": 6\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"是否周期性:\"\n }\n }, [_c('el-radio-group', {\n model: {\n value: (_vm.filters.isCycle),\n callback: function($$v) {\n _vm.$set(_vm.filters, \"isCycle\", $$v)\n },\n expression: \"filters.isCycle\"\n }\n }, [_c('el-radio', {\n staticClass: \"radio\",\n attrs: {\n \"label\": 1\n }\n }, [_vm._v(\"是\")]), _vm._v(\" \"), _c('el-radio', {\n staticClass: \"radio\",\n attrs: {\n \"label\": 0\n }\n }, [_vm._v(\"否\")])], 1)], 1)], 1), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"xs\": 12,\n \"sm\": 12,\n \"md\": 12,\n \"lg\": 12\n }\n }, [_c('el-form-item', {\n staticStyle: {\n \"margin-left\": \"10px\"\n }\n }, [_c('el-button', {\n attrs: {\n \"type\": \"primary\",\n \"icon\": \"search\"\n },\n on: {\n \"click\": _vm.getPlans\n }\n }, [_vm._v(\"查询\")])], 1)], 1)], 1)], 1)], 1)], 1)], 1), _vm._v(\" \"), _c('div', {\n staticClass: \"panel\"\n }, [_c('div', {\n staticClass: \"panel-title\"\n }, [_c('span', {\n domProps: {\n \"textContent\": _vm._s(_vm.panelTitle)\n }\n }), _vm._v(\" \"), _c('div', {\n staticClass: \"fr\"\n }, [_c('el-button', {\n attrs: {\n \"size\": \"small\"\n },\n on: {\n \"click\": function($event) {\n $event.stopPropagation();\n return _vm.on_refresh($event)\n }\n }\n }, [_c('i', {\n staticClass: \"fa fa-refresh\"\n })]), _vm._v(\" \"), _c('el-button', {\n attrs: {\n \"type\": \"primary\",\n \"icon\": \"plus\",\n \"size\": \"small\"\n },\n on: {\n \"click\": _vm.handleAdd\n }\n }, [_vm._v(\"新增\")])], 1)]), _vm._v(\" \"), _c('div', {\n staticClass: \"panel-body\"\n }, [_c('el-table', {\n directives: [{\n name: \"loading\",\n rawName: \"v-loading\",\n value: (_vm.listLoading),\n expression: \"listLoading\"\n }],\n attrs: {\n \"data\": _vm.plans,\n \"highlight-current-row\": \"\"\n },\n on: {\n \"selection-change\": _vm.selsChange\n }\n }, [_c('el-table-column', {\n attrs: {\n \"type\": \"selection\",\n \"width\": \"55\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"type\": \"index\",\n \"width\": \"60\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"strTitle\",\n \"label\": \"维护项名称\",\n \"width\": \"120\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"description\",\n \"label\": \"描述\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"executeTime\",\n \"label\": \"执行时间\",\n \"width\": \"120\",\n \"sortable\": \"\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"isCycle\",\n \"label\": \"是否周期性\",\n \"width\": \"120\",\n \"formatter\": _vm.formatCycle\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"prop\": \"cycleDay\",\n \"label\": \"剩余天数\"\n }\n }), _vm._v(\" \"), _c('el-table-column', {\n attrs: {\n \"label\": \"操作\",\n \"width\": \"150\"\n },\n scopedSlots: _vm._u([{\n key: \"default\",\n fn: function(scope) {\n return [_c('el-button', {\n attrs: {\n \"size\": \"small\"\n },\n on: {\n \"click\": function($event) {\n return _vm.handleEdit(scope.$index, scope.row)\n }\n }\n }, [_vm._v(\"编辑\")]), _vm._v(\" \"), _c('el-button', {\n attrs: {\n \"type\": \"danger\",\n \"size\": \"small\"\n },\n on: {\n \"click\": function($event) {\n return _vm.handleDel(scope.$index, scope.row)\n }\n }\n }, [_vm._v(\"删除\\n \")])]\n }\n }])\n })], 1), _vm._v(\" \"), _c('el-col', {\n staticClass: \"toolbar\",\n attrs: {\n \"span\": 24\n }\n }, [_c('el-button', {\n staticClass: \"fl\",\n attrs: {\n \"type\": \"danger\",\n \"disabled\": this.sels.length === 0\n },\n on: {\n \"click\": _vm.batchRemove\n }\n }, [_vm._v(\"批量删除\")]), _vm._v(\" \"), _c('el-pagination', {\n staticClass: \"fr\",\n attrs: {\n \"current-page\": _vm.listQuery.curPage,\n \"page-sizes\": [10, 20, 30, 50],\n \"page-size\": _vm.listQuery.pageSize,\n \"layout\": \"total, sizes, prev, pager, next, jumper\",\n \"total\": _vm.total\n },\n on: {\n \"size-change\": _vm.handleSizeChange,\n \"current-change\": _vm.handleCurrentChange,\n \"update:currentPage\": function($event) {\n return _vm.$set(_vm.listQuery, \"curPage\", $event)\n },\n \"update:current-page\": function($event) {\n return _vm.$set(_vm.listQuery, \"curPage\", $event)\n }\n }\n })], 1)], 1)]), _vm._v(\" \"), _c('el-dialog', {\n attrs: {\n \"title\": \"编辑维护计划\",\n \"visible\": _vm.editFormVisible,\n \"close-on-click-modal\": false\n },\n on: {\n \"update:visible\": function($event) {\n _vm.editFormVisible = $event\n }\n }\n }, [_c('el-form', {\n ref: \"editForm\",\n attrs: {\n \"model\": _vm.editForm,\n \"label-width\": \"80px\",\n \"rules\": _vm.editFormRules\n }\n }, [_c('el-form-item', {\n staticStyle: {\n \"width\": \"292px\"\n },\n attrs: {\n \"label\": \"计划ID\",\n \"prop\": \"strPlanId\"\n }\n }, [_c('el-input', {\n attrs: {\n \"auto-complete\": \"off\",\n \"disabled\": \"\"\n },\n model: {\n value: (_vm.editForm.strPlanId),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"strPlanId\", $$v)\n },\n expression: \"editForm.strPlanId\"\n }\n })], 1), _vm._v(\" \"), _c('el-form-item', {\n staticStyle: {\n \"width\": \"292px\"\n },\n attrs: {\n \"label\": \"维护项ID\",\n \"prop\": \"strMaintainId\"\n }\n }, [_c('el-input', {\n attrs: {\n \"auto-complete\": \"off\"\n },\n model: {\n value: (_vm.editForm.strMaintainId),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"strMaintainId\", $$v)\n },\n expression: \"editForm.strMaintainId\"\n }\n })], 1), _vm._v(\" \"), _c('el-form-item', {\n attrs: {\n \"label\": \"执行时间\",\n \"prop\": \"executeTime\"\n }\n }, [_c('el-date-picker', {\n attrs: {\n \"type\": \"datetime\",\n \"placeholder\": \"选择日期时间\",\n \"align\": \"right\",\n \"picker-options\": _vm.pickerOptions1\n },\n model: {\n value: (_vm.editForm.executeTime),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"executeTime\", $$v)\n },\n expression: \"editForm.executeTime\"\n }\n })], 1), _vm._v(\" \"), _c('el-form-item', {\n attrs: {\n \"label\": \"是否周期性\",\n \"prop\": \"isCycle\"\n }\n }, [_c('el-radio-group', {\n model: {\n value: (_vm.editForm.isCycle),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"isCycle\", $$v)\n },\n expression: \"editForm.isCycle\"\n }\n }, [_c('el-radio', {\n staticClass: \"radio\",\n attrs: {\n \"label\": 1\n }\n }, [_vm._v(\"是\")]), _vm._v(\" \"), _c('el-radio', {\n staticClass: \"radio\",\n attrs: {\n \"label\": 0\n }\n }, [_vm._v(\"否\")])], 1)], 1), _vm._v(\" \"), _c('el-form-item', {\n attrs: {\n \"label\": \"执行周期(天)\",\n \"prop\": \"cycleDay\"\n }\n }, [(_vm.editForm.isCycle) ? _c('el-input-number', {\n attrs: {\n \"min\": 1,\n \"max\": 30\n },\n on: {\n \"change\": _vm.handleChange\n },\n model: {\n value: (_vm.editForm.cycleDay),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"cycleDay\", $$v)\n },\n expression: \"editForm.cycleDay\"\n }\n }) : _vm._e()], 1), _vm._v(\" \"), _c('el-form-item', {\n staticStyle: {\n \"width\": \"450px\"\n },\n attrs: {\n \"label\": \"计划描述\",\n \"prop\": \"description\"\n }\n }, [_c('el-input', {\n attrs: {\n \"type\": \"textarea\",\n \"rows\": 2,\n \"placeholder\": \"请输入内容\"\n },\n model: {\n value: (_vm.editForm.description),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"description\", $$v)\n },\n expression: \"editForm.description\"\n }\n })], 1), _vm._v(\" \"), _c('el-form-item', {\n staticStyle: {\n \"width\": \"292px\"\n },\n attrs: {\n \"label\": \"设备类型ID\",\n \"prop\": \"equipmentCategory\"\n }\n }, [_c('el-input', {\n attrs: {\n \"auto-complete\": \"off\"\n },\n model: {\n value: (_vm.editForm.equipmentCategory),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"equipmentCategory\", $$v)\n },\n expression: \"editForm.equipmentCategory\"\n }\n })], 1), _vm._v(\" \"), _c('el-form-item', {\n staticStyle: {\n \"width\": \"292px\"\n },\n attrs: {\n \"label\": \"设备ID\",\n \"prop\": \"equipmentId\"\n }\n }, [_c('el-input', {\n attrs: {\n \"auto-complete\": \"off\"\n },\n model: {\n value: (_vm.editForm.equipmentId),\n callback: function($$v) {\n _vm.$set(_vm.editForm, \"equipmentId\", $$v)\n },\n expression: \"editForm.equipmentId\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('div', {\n staticClass: \"dialog-footer\",\n attrs: {\n \"slot\": \"footer\"\n },\n slot: \"footer\"\n }, [_c('el-button', {\n nativeOn: {\n \"click\": function($event) {\n _vm.editFormVisible = false\n }\n }\n }, [_vm._v(\"取消\")]), _vm._v(\" \"), _c('el-button', {\n attrs: {\n \"type\": \"primary\",\n \"loading\": _vm.editLoading\n },\n nativeOn: {\n \"click\": function($event) {\n return _vm.editSubmit($event)\n }\n }\n }, [_vm._v(\"提交\")])], 1)], 1), _vm._v(\" \"), _c('el-dialog', {\n attrs: {\n \"title\": \"新增维护计划\",\n \"visible\": _vm.addFormVisible,\n \"close-on-click-modal\": false\n },\n on: {\n \"update:visible\": function($event) {\n _vm.addFormVisible = $event\n }\n }\n }, [_c('el-form', {\n ref: \"addForm\",\n attrs: {\n \"model\": _vm.addForm,\n \"label-width\": \"100px\",\n \"rules\": _vm.addFormRules\n }\n }, [_c('el-row', [_c('el-col', {\n attrs: {\n \"xs\": 12,\n \"sm\": 12,\n \"md\": 12,\n \"lg\": 12\n }\n }, [_c('el-form-item', {\n staticStyle: {\n \"width\": \"292px\"\n },\n attrs: {\n \"label\": \"维护项ID\",\n \"prop\": \"strMaintainId\"\n }\n }, [_c('el-input', {\n attrs: {\n \"auto-complete\": \"off\"\n },\n model: {\n value: (_vm.addForm.strMaintainId),\n callback: function($$v) {\n _vm.$set(_vm.addForm, \"strMaintainId\", $$v)\n },\n expression: \"addForm.strMaintainId\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"xs\": 12,\n \"sm\": 12,\n \"md\": 12,\n \"lg\": 12\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"执行时间\",\n \"prop\": \"executeTime\"\n }\n }, [_c('el-date-picker', {\n attrs: {\n \"type\": \"datetime\",\n \"placeholder\": \"选择日期时间\",\n \"align\": \"right\",\n \"picker-options\": _vm.pickerOptions1\n },\n model: {\n value: (_vm.addForm.executeTime),\n callback: function($$v) {\n _vm.$set(_vm.addForm, \"executeTime\", $$v)\n },\n expression: \"addForm.executeTime\"\n }\n })], 1)], 1)], 1), _vm._v(\" \"), _c('el-row', [_c('el-col', {\n attrs: {\n \"xs\": 12,\n \"sm\": 12,\n \"md\": 12,\n \"lg\": 12\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"是否周期性\",\n \"prop\": \"isCycle\"\n }\n }, [_c('el-radio-group', {\n model: {\n value: (_vm.addForm.isCycle),\n callback: function($$v) {\n _vm.$set(_vm.addForm, \"isCycle\", $$v)\n },\n expression: \"addForm.isCycle\"\n }\n }, [_c('el-radio', {\n staticClass: \"radio\",\n attrs: {\n \"label\": 1\n }\n }, [_vm._v(\"是\")]), _vm._v(\" \"), _c('el-radio', {\n staticClass: \"radio\",\n attrs: {\n \"label\": 0\n }\n }, [_vm._v(\"否\")])], 1)], 1)], 1), _vm._v(\" \"), _c('el-col', {\n staticStyle: {\n \"margin-left\": \"12px\"\n },\n attrs: {\n \"xs\": 10,\n \"sm\": 10,\n \"md\": 10,\n \"lg\": 10\n }\n }, [(_vm.addForm.isCycle) ? _c('el-form-item', {\n attrs: {\n \"label\": \"执行周期(天)\",\n \"prop\": \"cycleDay\"\n }\n }, [_c('el-input-number', {\n attrs: {\n \"min\": 1,\n \"max\": 90\n },\n on: {\n \"change\": _vm.handleChange\n },\n model: {\n value: (_vm.addForm.cycleDay),\n callback: function($$v) {\n _vm.$set(_vm.addForm, \"cycleDay\", $$v)\n },\n expression: \"addForm.cycleDay\"\n }\n })], 1) : _vm._e()], 1)], 1), _vm._v(\" \"), _c('el-row', [_c('el-col', {\n attrs: {\n \"xs\": 24,\n \"sm\": 24,\n \"md\": 24,\n \"lg\": 24\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"提醒时间\"\n }\n }, _vm._l((_vm.customDayOptions), function(item) {\n return _c('el-tag', {\n key: item.value,\n staticStyle: {\n \"margin-left\": \"2px\"\n },\n attrs: {\n \"closable\": true,\n \"type\": \"primary\"\n },\n on: {\n \"close\": function($event) {\n return _vm.closeViewTabs(item, $event)\n }\n },\n model: {\n value: (_vm.addForm.remindDay),\n callback: function($$v) {\n _vm.$set(_vm.addForm, \"remindDay\", $$v)\n },\n expression: \"addForm.remindDay\"\n }\n }, [_vm._v(_vm._s(item.label) + \"\\n \")])\n }), 1)], 1)], 1), _vm._v(\" \"), _c('el-row', [_c('el-col', {\n staticStyle: {\n \"margin-left\": \"12px\"\n },\n attrs: {\n \"xs\": 10,\n \"sm\": 10,\n \"md\": 10,\n \"lg\": 10\n }\n }, [_c('el-form-item', {\n attrs: {\n \"label\": \"自定义(天)\",\n \"prop\": \"customDay\"\n }\n }, [_c('el-input-number', {\n attrs: {\n \"min\": 1,\n \"max\": 365\n },\n on: {\n \"change\": _vm.handleCustomDayChange\n },\n model: {\n value: (_vm.addForm.customDay),\n callback: function($$v) {\n _vm.$set(_vm.addForm, \"customDay\", $$v)\n },\n expression: \"addForm.customDay\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('el-col', {\n attrs: {\n \"xs\": 10,\n \"sm\": 10,\n \"md\": 10,\n \"lg\": 10\n }\n }, [_c('el-form-item', [(!_vm.showAddCustomDayButton) ? _c('el-button', {\n attrs: {\n \"type\": \"primary\",\n \"disabled\": \"disabled\"\n }\n }, [_vm._v(\"添加\")]) : _vm._e(), _vm._v(\" \"), (_vm.showAddCustomDayButton) ? _c('el-button', {\n attrs: {\n \"type\": \"primary\"\n },\n on: {\n \"click\": _vm.onAddCustomDay\n }\n }, [_vm._v(\"添加\")]) : _vm._e()], 1)], 1)], 1), _vm._v(\" \"), _c('el-form-item', {\n staticStyle: {\n \"width\": \"450px\"\n },\n attrs: {\n \"label\": \"计划描述\",\n \"prop\": \"description\"\n }\n }, [_c('el-input', {\n attrs: {\n \"type\": \"textarea\",\n \"rows\": 2,\n \"placeholder\": \"请输入内容\"\n },\n model: {\n value: (_vm.addForm.description),\n callback: function($$v) {\n _vm.$set(_vm.addForm, \"description\", $$v)\n },\n expression: \"addForm.description\"\n }\n })], 1), _vm._v(\" \"), _c('el-form-item', {\n staticStyle: {\n \"width\": \"292px\"\n },\n attrs: {\n \"label\": \"设备类型ID\",\n \"prop\": \"equipmentCategory\"\n }\n }, [_c('el-input', {\n attrs: {\n \"auto-complete\": \"off\"\n },\n model: {\n value: (_vm.addForm.equipmentCategory),\n callback: function($$v) {\n _vm.$set(_vm.addForm, \"equipmentCategory\", $$v)\n },\n expression: \"addForm.equipmentCategory\"\n }\n })], 1), _vm._v(\" \"), _c('el-form-item', {\n staticStyle: {\n \"width\": \"292px\"\n },\n attrs: {\n \"label\": \"设备ID\",\n \"prop\": \"equipmentId\"\n }\n }, [_c('el-input', {\n attrs: {\n \"auto-complete\": \"off\"\n },\n model: {\n value: (_vm.addForm.equipmentId),\n callback: function($$v) {\n _vm.$set(_vm.addForm, \"equipmentId\", $$v)\n },\n expression: \"addForm.equipmentId\"\n }\n })], 1)], 1), _vm._v(\" \"), _c('div', {\n staticClass: \"dialog-footer\",\n attrs: {\n \"slot\": \"footer\"\n },\n slot: \"footer\"\n }, [_c('el-button', {\n nativeOn: {\n \"click\": function($event) {\n _vm.addFormVisible = false\n }\n }\n }, [_vm._v(\"取消\")]), _vm._v(\" \"), _c('el-button', {\n attrs: {\n \"type\": \"primary\",\n \"loading\": _vm.addLoading\n },\n nativeOn: {\n \"click\": function($event) {\n return _vm.addSubmit($event)\n }\n }\n }, [_vm._v(\"提交\")])], 1)], 1)], 1)\n},staticRenderFns: []}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-loader/lib/template-compiler?{\"id\":\"data-v-d8733d78\"}!./~/vue-loader/lib/selector.js?type=template&index=0!./src/views/nav2/Page2.vue\n// module id = 1073\n// module chunks = 2","module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _vm._m(0)\n},staticRenderFns: [function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('section', {\n staticClass: \"babylonjs-container\"\n }, [_c('canvas', {\n attrs: {\n \"id\": \"renderCanvas\"\n }\n })])\n}]}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-loader/lib/template-compiler?{\"id\":\"data-v-fee14efe\"}!./~/vue-loader/lib/selector.js?type=template&index=0!./src/views/3d/babylonjs.vue\n// module id = 1074\n// module chunks = 2","var SIGN_REGEXP = /([yMdhsm])(\\1*)/g;\r\nvar DEFAULT_PATTERN = 'yyyy-MM-dd';\r\nfunction padding(s, len) {\r\n var len = len - (s + '').length;\r\n for (var i = 0; i < len; i++) { s = '0' + s; }\r\n return s;\r\n};\r\n\r\nexport default {\r\n getQueryStringByName: function (name) {\r\n var reg = new RegExp(\"(^|&)\" + name + \"=([^&]*)(&|$)\", \"i\");\r\n var r = window.location.search.substr(1).match(reg);\r\n var context = \"\";\r\n if (r != null)\r\n context = r[2];\r\n reg = null;\r\n r = null;\r\n return context == null || context == \"\" || context == \"undefined\" ? \"\" : context;\r\n },\r\n formatDate: {\r\n\r\n\r\n format: function (date, pattern) {\r\n pattern = pattern || DEFAULT_PATTERN;\r\n return pattern.replace(SIGN_REGEXP, function ($0) {\r\n switch ($0.charAt(0)) {\r\n case 'y': return padding(date.getFullYear(), $0.length);\r\n case 'M': return padding(date.getMonth() + 1, $0.length);\r\n case 'd': return padding(date.getDate(), $0.length);\r\n case 'w': return date.getDay() + 1;\r\n case 'h': return padding(date.getHours(), $0.length);\r\n case 'm': return padding(date.getMinutes(), $0.length);\r\n case 's': return padding(date.getSeconds(), $0.length);\r\n }\r\n });\r\n },\r\n parse: function (dateString, pattern) {\r\n var matchs1 = pattern.match(SIGN_REGEXP);\r\n var matchs2 = dateString.match(/(\\d)+/g);\r\n if (matchs1.length == matchs2.length) {\r\n var _date = new Date(1970, 0, 1);\r\n for (var i = 0; i < matchs1.length; i++) {\r\n var _int = parseInt(matchs2[i]);\r\n var sign = matchs1[i];\r\n switch (sign.charAt(0)) {\r\n case 'y': _date.setFullYear(_int); break;\r\n case 'M': _date.setMonth(_int - 1); break;\r\n case 'd': _date.setDate(_int); break;\r\n case 'h': _date.setHours(_int); break;\r\n case 'm': _date.setMinutes(_int); break;\r\n case 's': _date.setSeconds(_int); break;\r\n }\r\n }\r\n return _date;\r\n }\r\n return null;\r\n }\r\n\r\n }\r\n\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/common/js/util.js","import mock from './mock';\r\n\r\nexport default mock;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/mock/index.js","import Login from './views/Login.vue'\r\nimport NotFound from './views/404.vue'\r\nimport Home from './views/Home.vue'\r\n// import Main from './views/Main.vue'\r\nimport Page1 from './views/nav1/Page1.vue'\r\nimport Page2 from './views/nav2/Page2.vue'\r\nimport Page3 from './views/nav3/Page3.vue'\r\nimport Page4 from './views/nav4/Page4.vue'\r\nimport echarts from './views/charts/echarts.vue'\r\nimport threejs from './views/3d/threejs.vue'\r\n// import vedio from './views/3d/vedio.vue'\r\nimport babylonjs from './views/3d/babylonjs.vue'\r\nimport exportExcel from './views/excel/export.vue'\r\nimport uploadExcel from './views/excel/uploadExcel.vue'\r\nimport tinymceEditor from './components/Tinymce/index.vue'\r\n\r\nlet routes = [\r\n {\r\n path: '/',\r\n component: Login,\r\n name: '',\r\n hidden: true\r\n },\r\n {\r\n path: '/login',\r\n component: Login,\r\n name: '',\r\n hidden: true\r\n },\r\n {\r\n path: '/404',\r\n component: NotFound,\r\n name: '',\r\n hidden: true\r\n },\r\n //{ path: '/main', component: Main },\r\n {\r\n path: '/',\r\n component: Home,\r\n name: '',\r\n iconCls: 'fa fa-cog',//图标样式class\r\n leaf: true,//只有一个节点\r\n children: [\r\n // { path: '/main', component: Main, name: '主页', hidden: true },\r\n { path: '/page1', component: Page1, name: '维护项' },\r\n ]\r\n },\r\n {\r\n path: '/',\r\n component: Home,\r\n name: '',\r\n iconCls: 'fa fa-calendar-check-o',\r\n leaf: true,//只有一个节点\r\n children: [\r\n { path: '/page2', component: Page2, name: '维护计划' },\r\n ]\r\n },\r\n {\r\n path: '/',\r\n component: Home,\r\n name: '',\r\n iconCls: 'fa fa-search',\r\n leaf: true,//只有一个节点\r\n children: [\r\n {\r\n path: '/page3',\r\n component: Page3,\r\n name: '维护历史',\r\n meta: {\r\n title: \"维护历史\"\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n path: '/',\r\n component: Home,\r\n name: 'seed',\r\n iconCls: 'fa fa-star',\r\n leaf: false,//不只一个节点\r\n hidden: false,\r\n children: [\r\n {\r\n path: '/page4',\r\n component: Page4,\r\n name: 'seed',\r\n meta: {\r\n title: \"列表\"\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n path: '/',\r\n component: Home,\r\n name: '富文本编辑器',\r\n iconCls: 'fa fa-pencil-square-o',\r\n leaf: false,//不只一个节点\r\n hidden: false,\r\n children: [\r\n {\r\n path: '/tinymce',\r\n component: tinymceEditor,\r\n name: 'tinymce'\r\n }\r\n ]\r\n },\r\n {\r\n path: '/',\r\n component: Home,\r\n name: 'excel',\r\n iconCls: 'fa fa-file-excel-o',\r\n leaf: false,//不只一个节点\r\n hidden: false,\r\n children: [\r\n {\r\n path: '/exportExcel',\r\n component: exportExcel,\r\n name: 'exportExcel'\r\n },\r\n {\r\n path: '/uploadExcel',\r\n component: uploadExcel,\r\n name: 'uploadExcel'\r\n }\r\n ]\r\n },\r\n {\r\n path: '/',\r\n component: Home,\r\n name: 'Charts',\r\n iconCls: 'fa fa-bar-chart',\r\n children: [\r\n { path: '/echarts', component: echarts, name: 'echarts' }\r\n ]\r\n },\r\n {\r\n path: '/',\r\n component: Home,\r\n name: '3d',\r\n iconCls: 'fa fa-diamond',\r\n children: [\r\n { path: '/threejs', component: threejs, name: 'threejs' },\r\n { path: '/babylonjs', component: babylonjs, name: 'babylonjs' }\r\n // { path: '/vedio', component: vedio, name: 'vedio' }\r\n ]\r\n },\r\n {\r\n path: '*',\r\n hidden: true,\r\n redirect: { path: '/404' }\r\n }\r\n];\r\n\r\nexport default routes;\n\n\n// WEBPACK FOOTER //\n// ./src/routes.js","import Vue from 'vue'\r\nimport Vuex from 'vuex'\r\nimport * as actions from './actions'\r\nimport * as getters from './getters'\r\n\r\nVue.use(Vuex)\r\n\r\n// 应用初始状态\r\nconst state = {\r\n count: 10\r\n}\r\n\r\n// 定义所需的 mutations\r\nconst mutations = {\r\n INCREMENT(state) {\r\n state.count++\r\n },\r\n DECREMENT(state) {\r\n state.count--\r\n }\r\n}\r\n\r\n// 创建 store 实例\r\nexport default new Vuex.Store({\r\n actions,\r\n getters,\r\n state,\r\n mutations\r\n})\n\n\n// WEBPACK FOOTER //\n// ./src/vuex/store.js","\n/* styles */\nrequire(\"!!../node_modules/extract-text-webpack-plugin/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"minimize\\\":true,\\\"sourceMap\\\":true}!../node_modules/vue-loader/lib/style-compiler/index?{\\\"id\\\":\\\"data-v-27fea171\\\",\\\"scoped\\\":false,\\\"hasInlineConfig\\\":false}!sass-loader?{\\\"sourceMap\\\":true}!../node_modules/vue-loader/lib/selector?type=styles&index=0!./App.vue\")\n\nvar Component = require(\"!../node_modules/vue-loader/lib/component-normalizer\")(\n /* script */\n require(\"!!babel-loader!../node_modules/vue-loader/lib/selector?type=script&index=0!./App.vue\"),\n /* template */\n require(\"!!../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-27fea171\\\"}!../node_modules/vue-loader/lib/selector?type=template&index=0!./App.vue\"),\n /* scopeId */\n null,\n /* cssModules */\n null\n)\n\nmodule.exports = Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/App.vue\n// module id = 409\n// module chunks = 2","\r\n\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// App.vue?1976b0ee","\r\n\r\n\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// index.vue?f3cec464","\r\n\r\n\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// index.vue?02748edc","\r\n\r\n\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// index.vue?7fb51b3c","\r\n\r\n\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// babylonjs.vue?cb3f5b1c","\r\n\r\n\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// threejs.vue?2b8fcf57","\r\n\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// Home.vue?241c18da","\r\n\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// Login.vue?f4b7d190","\r\n\r\n\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// echarts.vue?1a59a56f","\r\n\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// export.vue?4433fb5b","\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// uploadExcel.vue?01c83326","\r\n\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// Page1.vue?4e47b2df","\r\n\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// Page2.vue?382e7b64","\r\n\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// Page3.vue?bdfffdaa","\r\n\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// Page4.vue?323047bf","/**\r\n * Created by dongxingbin on 17/7/28.\r\n */\r\n\r\nconst base = ''\r\n// const base = '/api'\r\n\r\nexport const login = base + '/login';\r\n\r\nexport const userList = base + '/user/list';\r\n\r\nexport const userListpage = base + '/user/listpage';\r\n\r\nexport const userRemove = base + '/user/remove';\r\n\r\nexport const userBatchremove = base + '/user/batchremove';\r\n\r\nexport const userEdit = base + '/user/edit';\r\n\r\nexport const userAdd = base + '/user/add';\r\n\r\n//category\r\nexport const categoryList = base + '/category/list';\r\n\r\nexport const categoryListpage = base + '/category/listpage';\r\n\r\nexport const categoryRemove = base + '/category/remove';\r\n\r\nexport const categoryBatchremove = base + '/category/batchremove';\r\n\r\nexport const categoryEdit = base + '/category/edit';\r\n\r\nexport const categoryAdd = base + '/category/add';\r\n\r\n//maintain\r\nexport const maintainList = base + '/maintain/list';\r\n\r\nexport const maintainListpage = base + '/maintain/listpage';\r\n// export const maintainListpage = base + '/MaintainService.svc/GetMaintainItems';\r\n\r\nexport const maintainRemove = base + '/maintain/remove';\r\n\r\nexport const maintainBatchremove = base + '/maintain/batchremove';\r\n\r\nexport const maintainEdit = base + '/maintain/edit';\r\n\r\nexport const maintainAdd = base + '/maintain/add';\r\n\r\n//plan\r\nexport const planList = base + '/plan/list';\r\n\r\nexport const planListpage = base + '/plan/listpage';\r\n\r\nexport const planRemove = base + '/plan/remove';\r\n\r\nexport const planBatchremove = base + '/plan/batchremove';\r\n\r\nexport const planEdit = base + '/plan/edit';\r\n\r\nexport const planAdd = base + '/plan/add';\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/api/urlConfig.js","// File:src/Three.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nvar THREE = { REVISION: '69' };\r\n\r\n// browserify support\r\n\r\nif ( typeof module === 'object' ) {\r\n\r\n\tmodule.exports = THREE;\r\n\r\n}\r\n\r\n// polyfills\r\n\r\nif ( Math.sign === undefined ) {\r\n\r\n\tMath.sign = function ( x ) {\r\n\r\n\t\treturn ( x < 0 ) ? - 1 : ( x > 0 ) ? 1 : 0;\r\n\r\n\t};\r\n\r\n}\r\n\r\n// https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent.button\r\n\r\nTHREE.MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2 };\r\n\r\n// GL STATE CONSTANTS\r\n\r\nTHREE.CullFaceNone = 0;\r\nTHREE.CullFaceBack = 1;\r\nTHREE.CullFaceFront = 2;\r\nTHREE.CullFaceFrontBack = 3;\r\n\r\nTHREE.FrontFaceDirectionCW = 0;\r\nTHREE.FrontFaceDirectionCCW = 1;\r\n\r\n// SHADOWING TYPES\r\n\r\nTHREE.BasicShadowMap = 0;\r\nTHREE.PCFShadowMap = 1;\r\nTHREE.PCFSoftShadowMap = 2;\r\n\r\n// MATERIAL CONSTANTS\r\n\r\n// side\r\n\r\nTHREE.FrontSide = 0;\r\nTHREE.BackSide = 1;\r\nTHREE.DoubleSide = 2;\r\n\r\n// shading\r\n\r\nTHREE.NoShading = 0;\r\nTHREE.FlatShading = 1;\r\nTHREE.SmoothShading = 2;\r\n\r\n// colors\r\n\r\nTHREE.NoColors = 0;\r\nTHREE.FaceColors = 1;\r\nTHREE.VertexColors = 2;\r\n\r\n// blending modes\r\n\r\nTHREE.NoBlending = 0;\r\nTHREE.NormalBlending = 1;\r\nTHREE.AdditiveBlending = 2;\r\nTHREE.SubtractiveBlending = 3;\r\nTHREE.MultiplyBlending = 4;\r\nTHREE.CustomBlending = 5;\r\n\r\n// custom blending equations\r\n// (numbers start from 100 not to clash with other\r\n// mappings to OpenGL constants defined in Texture.js)\r\n\r\nTHREE.AddEquation = 100;\r\nTHREE.SubtractEquation = 101;\r\nTHREE.ReverseSubtractEquation = 102;\r\nTHREE.MinEquation = 103;\r\nTHREE.MaxEquation = 104;\r\n\r\n// custom blending destination factors\r\n\r\nTHREE.ZeroFactor = 200;\r\nTHREE.OneFactor = 201;\r\nTHREE.SrcColorFactor = 202;\r\nTHREE.OneMinusSrcColorFactor = 203;\r\nTHREE.SrcAlphaFactor = 204;\r\nTHREE.OneMinusSrcAlphaFactor = 205;\r\nTHREE.DstAlphaFactor = 206;\r\nTHREE.OneMinusDstAlphaFactor = 207;\r\n\r\n// custom blending source factors\r\n\r\n//THREE.ZeroFactor = 200;\r\n//THREE.OneFactor = 201;\r\n//THREE.SrcAlphaFactor = 204;\r\n//THREE.OneMinusSrcAlphaFactor = 205;\r\n//THREE.DstAlphaFactor = 206;\r\n//THREE.OneMinusDstAlphaFactor = 207;\r\nTHREE.DstColorFactor = 208;\r\nTHREE.OneMinusDstColorFactor = 209;\r\nTHREE.SrcAlphaSaturateFactor = 210;\r\n\r\n\r\n// TEXTURE CONSTANTS\r\n\r\nTHREE.MultiplyOperation = 0;\r\nTHREE.MixOperation = 1;\r\nTHREE.AddOperation = 2;\r\n\r\n// Mapping modes\r\n\r\nTHREE.UVMapping = function () {};\r\n\r\nTHREE.CubeReflectionMapping = function () {};\r\nTHREE.CubeRefractionMapping = function () {};\r\n\r\nTHREE.SphericalReflectionMapping = function () {};\r\nTHREE.SphericalRefractionMapping = function () {};\r\n\r\n// Wrapping modes\r\n\r\nTHREE.RepeatWrapping = 1000;\r\nTHREE.ClampToEdgeWrapping = 1001;\r\nTHREE.MirroredRepeatWrapping = 1002;\r\n\r\n// Filters\r\n\r\nTHREE.NearestFilter = 1003;\r\nTHREE.NearestMipMapNearestFilter = 1004;\r\nTHREE.NearestMipMapLinearFilter = 1005;\r\nTHREE.LinearFilter = 1006;\r\nTHREE.LinearMipMapNearestFilter = 1007;\r\nTHREE.LinearMipMapLinearFilter = 1008;\r\n\r\n// Data types\r\n\r\nTHREE.UnsignedByteType = 1009;\r\nTHREE.ByteType = 1010;\r\nTHREE.ShortType = 1011;\r\nTHREE.UnsignedShortType = 1012;\r\nTHREE.IntType = 1013;\r\nTHREE.UnsignedIntType = 1014;\r\nTHREE.FloatType = 1015;\r\n\r\n// Pixel types\r\n\r\n//THREE.UnsignedByteType = 1009;\r\nTHREE.UnsignedShort4444Type = 1016;\r\nTHREE.UnsignedShort5551Type = 1017;\r\nTHREE.UnsignedShort565Type = 1018;\r\n\r\n// Pixel formats\r\n\r\nTHREE.AlphaFormat = 1019;\r\nTHREE.RGBFormat = 1020;\r\nTHREE.RGBAFormat = 1021;\r\nTHREE.LuminanceFormat = 1022;\r\nTHREE.LuminanceAlphaFormat = 1023;\r\n\r\n// DDS / ST3C Compressed texture formats\r\n\r\nTHREE.RGB_S3TC_DXT1_Format = 2001;\r\nTHREE.RGBA_S3TC_DXT1_Format = 2002;\r\nTHREE.RGBA_S3TC_DXT3_Format = 2003;\r\nTHREE.RGBA_S3TC_DXT5_Format = 2004;\r\n\r\n\r\n// PVRTC compressed texture formats\r\n\r\nTHREE.RGB_PVRTC_4BPPV1_Format = 2100;\r\nTHREE.RGB_PVRTC_2BPPV1_Format = 2101;\r\nTHREE.RGBA_PVRTC_4BPPV1_Format = 2102;\r\nTHREE.RGBA_PVRTC_2BPPV1_Format = 2103;\r\n\r\n\r\n// File:src/math/Color.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.Color = function ( color ) {\r\n\r\n\tif ( arguments.length === 3 ) {\r\n\r\n\t\treturn this.setRGB( arguments[ 0 ], arguments[ 1 ], arguments[ 2 ] );\r\n\r\n\t}\r\n\r\n\treturn this.set( color )\r\n\r\n};\r\n\r\nTHREE.Color.prototype = {\r\n\r\n\tconstructor: THREE.Color,\r\n\r\n\tr: 1, g: 1, b: 1,\r\n\r\n\tset: function ( value ) {\r\n\r\n\t\tif ( value instanceof THREE.Color ) {\r\n\r\n\t\t\tthis.copy( value );\r\n\r\n\t\t} else if ( typeof value === 'number' ) {\r\n\r\n\t\t\tthis.setHex( value );\r\n\r\n\t\t} else if ( typeof value === 'string' ) {\r\n\r\n\t\t\tthis.setStyle( value );\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetHex: function ( hex ) {\r\n\r\n\t\thex = Math.floor( hex );\r\n\r\n\t\tthis.r = ( hex >> 16 & 255 ) / 255;\r\n\t\tthis.g = ( hex >> 8 & 255 ) / 255;\r\n\t\tthis.b = ( hex & 255 ) / 255;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetRGB: function ( r, g, b ) {\r\n\r\n\t\tthis.r = r;\r\n\t\tthis.g = g;\r\n\t\tthis.b = b;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetHSL: function ( h, s, l ) {\r\n\r\n\t\t// h,s,l ranges are in 0.0 - 1.0\r\n\r\n\t\tif ( s === 0 ) {\r\n\r\n\t\t\tthis.r = this.g = this.b = l;\r\n\r\n\t\t} else {\r\n\r\n\t\t\tvar hue2rgb = function ( p, q, t ) {\r\n\r\n\t\t\t\tif ( t < 0 ) t += 1;\r\n\t\t\t\tif ( t > 1 ) t -= 1;\r\n\t\t\t\tif ( t < 1 / 6 ) return p + ( q - p ) * 6 * t;\r\n\t\t\t\tif ( t < 1 / 2 ) return q;\r\n\t\t\t\tif ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t );\r\n\t\t\t\treturn p;\r\n\r\n\t\t\t};\r\n\r\n\t\t\tvar p = l <= 0.5 ? l * ( 1 + s ) : l + s - ( l * s );\r\n\t\t\tvar q = ( 2 * l ) - p;\r\n\r\n\t\t\tthis.r = hue2rgb( q, p, h + 1 / 3 );\r\n\t\t\tthis.g = hue2rgb( q, p, h );\r\n\t\t\tthis.b = hue2rgb( q, p, h - 1 / 3 );\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetStyle: function ( style ) {\r\n\r\n\t\t// rgb(255,0,0)\r\n\r\n\t\tif ( /^rgb\\((\\d+), ?(\\d+), ?(\\d+)\\)$/i.test( style ) ) {\r\n\r\n\t\t\tvar color = /^rgb\\((\\d+), ?(\\d+), ?(\\d+)\\)$/i.exec( style );\r\n\r\n\t\t\tthis.r = Math.min( 255, parseInt( color[ 1 ], 10 ) ) / 255;\r\n\t\t\tthis.g = Math.min( 255, parseInt( color[ 2 ], 10 ) ) / 255;\r\n\t\t\tthis.b = Math.min( 255, parseInt( color[ 3 ], 10 ) ) / 255;\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t}\r\n\r\n\t\t// rgb(100%,0%,0%)\r\n\r\n\t\tif ( /^rgb\\((\\d+)\\%, ?(\\d+)\\%, ?(\\d+)\\%\\)$/i.test( style ) ) {\r\n\r\n\t\t\tvar color = /^rgb\\((\\d+)\\%, ?(\\d+)\\%, ?(\\d+)\\%\\)$/i.exec( style );\r\n\r\n\t\t\tthis.r = Math.min( 100, parseInt( color[ 1 ], 10 ) ) / 100;\r\n\t\t\tthis.g = Math.min( 100, parseInt( color[ 2 ], 10 ) ) / 100;\r\n\t\t\tthis.b = Math.min( 100, parseInt( color[ 3 ], 10 ) ) / 100;\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t}\r\n\r\n\t\t// #ff0000\r\n\r\n\t\tif ( /^\\#([0-9a-f]{6})$/i.test( style ) ) {\r\n\r\n\t\t\tvar color = /^\\#([0-9a-f]{6})$/i.exec( style );\r\n\r\n\t\t\tthis.setHex( parseInt( color[ 1 ], 16 ) );\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t}\r\n\r\n\t\t// #f00\r\n\r\n\t\tif ( /^\\#([0-9a-f])([0-9a-f])([0-9a-f])$/i.test( style ) ) {\r\n\r\n\t\t\tvar color = /^\\#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec( style );\r\n\r\n\t\t\tthis.setHex( parseInt( color[ 1 ] + color[ 1 ] + color[ 2 ] + color[ 2 ] + color[ 3 ] + color[ 3 ], 16 ) );\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t}\r\n\r\n\t\t// red\r\n\r\n\t\tif ( /^(\\w+)$/i.test( style ) ) {\r\n\r\n\t\t\tthis.setHex( THREE.ColorKeywords[ style ] );\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t}\r\n\r\n\r\n\t},\r\n\r\n\tcopy: function ( color ) {\r\n\r\n\t\tthis.r = color.r;\r\n\t\tthis.g = color.g;\r\n\t\tthis.b = color.b;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tcopyGammaToLinear: function ( color ) {\r\n\r\n\t\tthis.r = color.r * color.r;\r\n\t\tthis.g = color.g * color.g;\r\n\t\tthis.b = color.b * color.b;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tcopyLinearToGamma: function ( color ) {\r\n\r\n\t\tthis.r = Math.sqrt( color.r );\r\n\t\tthis.g = Math.sqrt( color.g );\r\n\t\tthis.b = Math.sqrt( color.b );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tconvertGammaToLinear: function () {\r\n\r\n\t\tvar r = this.r, g = this.g, b = this.b;\r\n\r\n\t\tthis.r = r * r;\r\n\t\tthis.g = g * g;\r\n\t\tthis.b = b * b;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tconvertLinearToGamma: function () {\r\n\r\n\t\tthis.r = Math.sqrt( this.r );\r\n\t\tthis.g = Math.sqrt( this.g );\r\n\t\tthis.b = Math.sqrt( this.b );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tgetHex: function () {\r\n\r\n\t\treturn ( this.r * 255 ) << 16 ^ ( this.g * 255 ) << 8 ^ ( this.b * 255 ) << 0;\r\n\r\n\t},\r\n\r\n\tgetHexString: function () {\r\n\r\n\t\treturn ( '000000' + this.getHex().toString( 16 ) ).slice( - 6 );\r\n\r\n\t},\r\n\r\n\tgetHSL: function ( optionalTarget ) {\r\n\r\n\t\t// h,s,l ranges are in 0.0 - 1.0\r\n\r\n\t\tvar hsl = optionalTarget || { h: 0, s: 0, l: 0 };\r\n\r\n\t\tvar r = this.r, g = this.g, b = this.b;\r\n\r\n\t\tvar max = Math.max( r, g, b );\r\n\t\tvar min = Math.min( r, g, b );\r\n\r\n\t\tvar hue, saturation;\r\n\t\tvar lightness = ( min + max ) / 2.0;\r\n\r\n\t\tif ( min === max ) {\r\n\r\n\t\t\thue = 0;\r\n\t\t\tsaturation = 0;\r\n\r\n\t\t} else {\r\n\r\n\t\t\tvar delta = max - min;\r\n\r\n\t\t\tsaturation = lightness <= 0.5 ? delta / ( max + min ) : delta / ( 2 - max - min );\r\n\r\n\t\t\tswitch ( max ) {\r\n\r\n\t\t\t\tcase r: hue = ( g - b ) / delta + ( g < b ? 6 : 0 ); break;\r\n\t\t\t\tcase g: hue = ( b - r ) / delta + 2; break;\r\n\t\t\t\tcase b: hue = ( r - g ) / delta + 4; break;\r\n\r\n\t\t\t}\r\n\r\n\t\t\thue /= 6;\r\n\r\n\t\t}\r\n\r\n\t\thsl.h = hue;\r\n\t\thsl.s = saturation;\r\n\t\thsl.l = lightness;\r\n\r\n\t\treturn hsl;\r\n\r\n\t},\r\n\r\n\tgetStyle: function () {\r\n\r\n\t\treturn 'rgb(' + ( ( this.r * 255 ) | 0 ) + ',' + ( ( this.g * 255 ) | 0 ) + ',' + ( ( this.b * 255 ) | 0 ) + ')';\r\n\r\n\t},\r\n\r\n\toffsetHSL: function ( h, s, l ) {\r\n\r\n\t\tvar hsl = this.getHSL();\r\n\r\n\t\thsl.h += h; hsl.s += s; hsl.l += l;\r\n\r\n\t\tthis.setHSL( hsl.h, hsl.s, hsl.l );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tadd: function ( color ) {\r\n\r\n\t\tthis.r += color.r;\r\n\t\tthis.g += color.g;\r\n\t\tthis.b += color.b;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\taddColors: function ( color1, color2 ) {\r\n\r\n\t\tthis.r = color1.r + color2.r;\r\n\t\tthis.g = color1.g + color2.g;\r\n\t\tthis.b = color1.b + color2.b;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\taddScalar: function ( s ) {\r\n\r\n\t\tthis.r += s;\r\n\t\tthis.g += s;\r\n\t\tthis.b += s;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmultiply: function ( color ) {\r\n\r\n\t\tthis.r *= color.r;\r\n\t\tthis.g *= color.g;\r\n\t\tthis.b *= color.b;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmultiplyScalar: function ( s ) {\r\n\r\n\t\tthis.r *= s;\r\n\t\tthis.g *= s;\r\n\t\tthis.b *= s;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tlerp: function ( color, alpha ) {\r\n\r\n\t\tthis.r += ( color.r - this.r ) * alpha;\r\n\t\tthis.g += ( color.g - this.g ) * alpha;\r\n\t\tthis.b += ( color.b - this.b ) * alpha;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tequals: function ( c ) {\r\n\r\n\t\treturn ( c.r === this.r ) && ( c.g === this.g ) && ( c.b === this.b );\r\n\r\n\t},\r\n\r\n\tfromArray: function ( array ) {\r\n\r\n\t\tthis.r = array[ 0 ];\r\n\t\tthis.g = array[ 1 ];\r\n\t\tthis.b = array[ 2 ];\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\ttoArray: function () {\r\n\r\n\t\treturn [ this.r, this.g, this.b ];\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new THREE.Color().setRGB( this.r, this.g, this.b );\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.ColorKeywords = { 'aliceblue': 0xF0F8FF, 'antiquewhite': 0xFAEBD7, 'aqua': 0x00FFFF, 'aquamarine': 0x7FFFD4, 'azure': 0xF0FFFF,\r\n'beige': 0xF5F5DC, 'bisque': 0xFFE4C4, 'black': 0x000000, 'blanchedalmond': 0xFFEBCD, 'blue': 0x0000FF, 'blueviolet': 0x8A2BE2,\r\n'brown': 0xA52A2A, 'burlywood': 0xDEB887, 'cadetblue': 0x5F9EA0, 'chartreuse': 0x7FFF00, 'chocolate': 0xD2691E, 'coral': 0xFF7F50,\r\n'cornflowerblue': 0x6495ED, 'cornsilk': 0xFFF8DC, 'crimson': 0xDC143C, 'cyan': 0x00FFFF, 'darkblue': 0x00008B, 'darkcyan': 0x008B8B,\r\n'darkgoldenrod': 0xB8860B, 'darkgray': 0xA9A9A9, 'darkgreen': 0x006400, 'darkgrey': 0xA9A9A9, 'darkkhaki': 0xBDB76B, 'darkmagenta': 0x8B008B,\r\n'darkolivegreen': 0x556B2F, 'darkorange': 0xFF8C00, 'darkorchid': 0x9932CC, 'darkred': 0x8B0000, 'darksalmon': 0xE9967A, 'darkseagreen': 0x8FBC8F,\r\n'darkslateblue': 0x483D8B, 'darkslategray': 0x2F4F4F, 'darkslategrey': 0x2F4F4F, 'darkturquoise': 0x00CED1, 'darkviolet': 0x9400D3,\r\n'deeppink': 0xFF1493, 'deepskyblue': 0x00BFFF, 'dimgray': 0x696969, 'dimgrey': 0x696969, 'dodgerblue': 0x1E90FF, 'firebrick': 0xB22222,\r\n'floralwhite': 0xFFFAF0, 'forestgreen': 0x228B22, 'fuchsia': 0xFF00FF, 'gainsboro': 0xDCDCDC, 'ghostwhite': 0xF8F8FF, 'gold': 0xFFD700,\r\n'goldenrod': 0xDAA520, 'gray': 0x808080, 'green': 0x008000, 'greenyellow': 0xADFF2F, 'grey': 0x808080, 'honeydew': 0xF0FFF0, 'hotpink': 0xFF69B4,\r\n'indianred': 0xCD5C5C, 'indigo': 0x4B0082, 'ivory': 0xFFFFF0, 'khaki': 0xF0E68C, 'lavender': 0xE6E6FA, 'lavenderblush': 0xFFF0F5, 'lawngreen': 0x7CFC00,\r\n'lemonchiffon': 0xFFFACD, 'lightblue': 0xADD8E6, 'lightcoral': 0xF08080, 'lightcyan': 0xE0FFFF, 'lightgoldenrodyellow': 0xFAFAD2, 'lightgray': 0xD3D3D3,\r\n'lightgreen': 0x90EE90, 'lightgrey': 0xD3D3D3, 'lightpink': 0xFFB6C1, 'lightsalmon': 0xFFA07A, 'lightseagreen': 0x20B2AA, 'lightskyblue': 0x87CEFA,\r\n'lightslategray': 0x778899, 'lightslategrey': 0x778899, 'lightsteelblue': 0xB0C4DE, 'lightyellow': 0xFFFFE0, 'lime': 0x00FF00, 'limegreen': 0x32CD32,\r\n'linen': 0xFAF0E6, 'magenta': 0xFF00FF, 'maroon': 0x800000, 'mediumaquamarine': 0x66CDAA, 'mediumblue': 0x0000CD, 'mediumorchid': 0xBA55D3,\r\n'mediumpurple': 0x9370DB, 'mediumseagreen': 0x3CB371, 'mediumslateblue': 0x7B68EE, 'mediumspringgreen': 0x00FA9A, 'mediumturquoise': 0x48D1CC,\r\n'mediumvioletred': 0xC71585, 'midnightblue': 0x191970, 'mintcream': 0xF5FFFA, 'mistyrose': 0xFFE4E1, 'moccasin': 0xFFE4B5, 'navajowhite': 0xFFDEAD,\r\n'navy': 0x000080, 'oldlace': 0xFDF5E6, 'olive': 0x808000, 'olivedrab': 0x6B8E23, 'orange': 0xFFA500, 'orangered': 0xFF4500, 'orchid': 0xDA70D6,\r\n'palegoldenrod': 0xEEE8AA, 'palegreen': 0x98FB98, 'paleturquoise': 0xAFEEEE, 'palevioletred': 0xDB7093, 'papayawhip': 0xFFEFD5, 'peachpuff': 0xFFDAB9,\r\n'peru': 0xCD853F, 'pink': 0xFFC0CB, 'plum': 0xDDA0DD, 'powderblue': 0xB0E0E6, 'purple': 0x800080, 'red': 0xFF0000, 'rosybrown': 0xBC8F8F,\r\n'royalblue': 0x4169E1, 'saddlebrown': 0x8B4513, 'salmon': 0xFA8072, 'sandybrown': 0xF4A460, 'seagreen': 0x2E8B57, 'seashell': 0xFFF5EE,\r\n'sienna': 0xA0522D, 'silver': 0xC0C0C0, 'skyblue': 0x87CEEB, 'slateblue': 0x6A5ACD, 'slategray': 0x708090, 'slategrey': 0x708090, 'snow': 0xFFFAFA,\r\n'springgreen': 0x00FF7F, 'steelblue': 0x4682B4, 'tan': 0xD2B48C, 'teal': 0x008080, 'thistle': 0xD8BFD8, 'tomato': 0xFF6347, 'turquoise': 0x40E0D0,\r\n'violet': 0xEE82EE, 'wheat': 0xF5DEB3, 'white': 0xFFFFFF, 'whitesmoke': 0xF5F5F5, 'yellow': 0xFFFF00, 'yellowgreen': 0x9ACD32 };\r\n\r\n// File:src/math/Quaternion.js\r\n\r\n/**\r\n * @author mikael emtinger / http://gomo.se/\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author WestLangley / http://github.com/WestLangley\r\n * @author bhouston / http://exocortex.com\r\n */\r\n\r\nTHREE.Quaternion = function ( x, y, z, w ) {\r\n\r\n\tthis._x = x || 0;\r\n\tthis._y = y || 0;\r\n\tthis._z = z || 0;\r\n\tthis._w = ( w !== undefined ) ? w : 1;\r\n\r\n};\r\n\r\nTHREE.Quaternion.prototype = {\r\n\r\n\tconstructor: THREE.Quaternion,\r\n\r\n\t_x: 0,_y: 0, _z: 0, _w: 0,\r\n\r\n\tget x () {\r\n\r\n\t\treturn this._x;\r\n\r\n\t},\r\n\r\n\tset x ( value ) {\r\n\r\n\t\tthis._x = value;\r\n\t\tthis.onChangeCallback();\r\n\r\n\t},\r\n\r\n\tget y () {\r\n\r\n\t\treturn this._y;\r\n\r\n\t},\r\n\r\n\tset y ( value ) {\r\n\r\n\t\tthis._y = value;\r\n\t\tthis.onChangeCallback();\r\n\r\n\t},\r\n\r\n\tget z () {\r\n\r\n\t\treturn this._z;\r\n\r\n\t},\r\n\r\n\tset z ( value ) {\r\n\r\n\t\tthis._z = value;\r\n\t\tthis.onChangeCallback();\r\n\r\n\t},\r\n\r\n\tget w () {\r\n\r\n\t\treturn this._w;\r\n\r\n\t},\r\n\r\n\tset w ( value ) {\r\n\r\n\t\tthis._w = value;\r\n\t\tthis.onChangeCallback();\r\n\r\n\t},\r\n\r\n\tset: function ( x, y, z, w ) {\r\n\r\n\t\tthis._x = x;\r\n\t\tthis._y = y;\r\n\t\tthis._z = z;\r\n\t\tthis._w = w;\r\n\r\n\t\tthis.onChangeCallback();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tcopy: function ( quaternion ) {\r\n\r\n\t\tthis._x = quaternion.x;\r\n\t\tthis._y = quaternion.y;\r\n\t\tthis._z = quaternion.z;\r\n\t\tthis._w = quaternion.w;\r\n\r\n\t\tthis.onChangeCallback();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetFromEuler: function ( euler, update ) {\r\n\r\n\t\tif ( euler instanceof THREE.Euler === false ) {\r\n\r\n\t\t\tthrow new Error( 'THREE.Quaternion: .setFromEuler() now expects a Euler rotation rather than a Vector3 and order.' );\r\n\t\t}\r\n\r\n\t\t// http://www.mathworks.com/matlabcentral/fileexchange/\r\n\t\t// \t20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/\r\n\t\t//\tcontent/SpinCalc.m\r\n\r\n\t\tvar c1 = Math.cos( euler._x / 2 );\r\n\t\tvar c2 = Math.cos( euler._y / 2 );\r\n\t\tvar c3 = Math.cos( euler._z / 2 );\r\n\t\tvar s1 = Math.sin( euler._x / 2 );\r\n\t\tvar s2 = Math.sin( euler._y / 2 );\r\n\t\tvar s3 = Math.sin( euler._z / 2 );\r\n\r\n\t\tif ( euler.order === 'XYZ' ) {\r\n\r\n\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\r\n\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\r\n\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\r\n\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\r\n\r\n\t\t} else if ( euler.order === 'YXZ' ) {\r\n\r\n\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\r\n\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\r\n\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\r\n\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\r\n\r\n\t\t} else if ( euler.order === 'ZXY' ) {\r\n\r\n\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\r\n\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\r\n\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\r\n\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\r\n\r\n\t\t} else if ( euler.order === 'ZYX' ) {\r\n\r\n\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\r\n\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\r\n\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\r\n\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\r\n\r\n\t\t} else if ( euler.order === 'YZX' ) {\r\n\r\n\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\r\n\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\r\n\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\r\n\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\r\n\r\n\t\t} else if ( euler.order === 'XZY' ) {\r\n\r\n\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\r\n\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\r\n\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\r\n\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\r\n\r\n\t\t}\r\n\r\n\t\tif ( update !== false ) this.onChangeCallback();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetFromAxisAngle: function ( axis, angle ) {\r\n\r\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm\r\n\r\n\t\t// assumes axis is normalized\r\n\r\n\t\tvar halfAngle = angle / 2, s = Math.sin( halfAngle );\r\n\r\n\t\tthis._x = axis.x * s;\r\n\t\tthis._y = axis.y * s;\r\n\t\tthis._z = axis.z * s;\r\n\t\tthis._w = Math.cos( halfAngle );\r\n\r\n\t\tthis.onChangeCallback();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetFromRotationMatrix: function ( m ) {\r\n\r\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\r\n\r\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\r\n\r\n\t\tvar te = m.elements,\r\n\r\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\r\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\r\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ],\r\n\r\n\t\t\ttrace = m11 + m22 + m33,\r\n\t\t\ts;\r\n\r\n\t\tif ( trace > 0 ) {\r\n\r\n\t\t\ts = 0.5 / Math.sqrt( trace + 1.0 );\r\n\r\n\t\t\tthis._w = 0.25 / s;\r\n\t\t\tthis._x = ( m32 - m23 ) * s;\r\n\t\t\tthis._y = ( m13 - m31 ) * s;\r\n\t\t\tthis._z = ( m21 - m12 ) * s;\r\n\r\n\t\t} else if ( m11 > m22 && m11 > m33 ) {\r\n\r\n\t\t\ts = 2.0 * Math.sqrt( 1.0 + m11 - m22 - m33 );\r\n\r\n\t\t\tthis._w = ( m32 - m23 ) / s;\r\n\t\t\tthis._x = 0.25 * s;\r\n\t\t\tthis._y = ( m12 + m21 ) / s;\r\n\t\t\tthis._z = ( m13 + m31 ) / s;\r\n\r\n\t\t} else if ( m22 > m33 ) {\r\n\r\n\t\t\ts = 2.0 * Math.sqrt( 1.0 + m22 - m11 - m33 );\r\n\r\n\t\t\tthis._w = ( m13 - m31 ) / s;\r\n\t\t\tthis._x = ( m12 + m21 ) / s;\r\n\t\t\tthis._y = 0.25 * s;\r\n\t\t\tthis._z = ( m23 + m32 ) / s;\r\n\r\n\t\t} else {\r\n\r\n\t\t\ts = 2.0 * Math.sqrt( 1.0 + m33 - m11 - m22 );\r\n\r\n\t\t\tthis._w = ( m21 - m12 ) / s;\r\n\t\t\tthis._x = ( m13 + m31 ) / s;\r\n\t\t\tthis._y = ( m23 + m32 ) / s;\r\n\t\t\tthis._z = 0.25 * s;\r\n\r\n\t\t}\r\n\r\n\t\tthis.onChangeCallback();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetFromUnitVectors: function () {\r\n\r\n\t\t// http://lolengine.net/blog/2014/02/24/quaternion-from-two-vectors-final\r\n\r\n\t\t// assumes direction vectors vFrom and vTo are normalized\r\n\r\n\t\tvar v1, r;\r\n\r\n\t\tvar EPS = 0.000001;\r\n\r\n\t\treturn function ( vFrom, vTo ) {\r\n\r\n\t\t\tif ( v1 === undefined ) v1 = new THREE.Vector3();\r\n\r\n\t\t\tr = vFrom.dot( vTo ) + 1;\r\n\r\n\t\t\tif ( r < EPS ) {\r\n\r\n\t\t\t\tr = 0;\r\n\r\n\t\t\t\tif ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) {\r\n\r\n\t\t\t\t\tv1.set( - vFrom.y, vFrom.x, 0 );\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tv1.set( 0, - vFrom.z, vFrom.y );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tv1.crossVectors( vFrom, vTo );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tthis._x = v1.x;\r\n\t\t\tthis._y = v1.y;\r\n\t\t\tthis._z = v1.z;\r\n\t\t\tthis._w = r;\r\n\r\n\t\t\tthis.normalize();\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t}\r\n\r\n\t}(),\r\n\r\n\tinverse: function () {\r\n\r\n\t\tthis.conjugate().normalize();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tconjugate: function () {\r\n\r\n\t\tthis._x *= - 1;\r\n\t\tthis._y *= - 1;\r\n\t\tthis._z *= - 1;\r\n\r\n\t\tthis.onChangeCallback();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tdot: function ( v ) {\r\n\r\n\t\treturn this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;\r\n\r\n\t},\r\n\r\n\tlengthSq: function () {\r\n\r\n\t\treturn this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w;\r\n\r\n\t},\r\n\r\n\tlength: function () {\r\n\r\n\t\treturn Math.sqrt( this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w );\r\n\r\n\t},\r\n\r\n\tnormalize: function () {\r\n\r\n\t\tvar l = this.length();\r\n\r\n\t\tif ( l === 0 ) {\r\n\r\n\t\t\tthis._x = 0;\r\n\t\t\tthis._y = 0;\r\n\t\t\tthis._z = 0;\r\n\t\t\tthis._w = 1;\r\n\r\n\t\t} else {\r\n\r\n\t\t\tl = 1 / l;\r\n\r\n\t\t\tthis._x = this._x * l;\r\n\t\t\tthis._y = this._y * l;\r\n\t\t\tthis._z = this._z * l;\r\n\t\t\tthis._w = this._w * l;\r\n\r\n\t\t}\r\n\r\n\t\tthis.onChangeCallback();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmultiply: function ( q, p ) {\r\n\r\n\t\tif ( p !== undefined ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.' );\r\n\t\t\treturn this.multiplyQuaternions( q, p );\r\n\r\n\t\t}\r\n\r\n\t\treturn this.multiplyQuaternions( this, q );\r\n\r\n\t},\r\n\r\n\tmultiplyQuaternions: function ( a, b ) {\r\n\r\n\t\t// from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm\r\n\r\n\t\tvar qax = a._x, qay = a._y, qaz = a._z, qaw = a._w;\r\n\t\tvar qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w;\r\n\r\n\t\tthis._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\r\n\t\tthis._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\r\n\t\tthis._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\r\n\t\tthis._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\r\n\r\n\t\tthis.onChangeCallback();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmultiplyVector3: function ( vector ) {\r\n\r\n\t\tconsole.warn( 'THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.' );\r\n\t\treturn vector.applyQuaternion( this );\r\n\r\n\t},\r\n\r\n\tslerp: function ( qb, t ) {\r\n\r\n\t\tif ( t === 0 ) return this;\r\n\t\tif ( t === 1 ) return this.copy( qb );\r\n\r\n\t\tvar x = this._x, y = this._y, z = this._z, w = this._w;\r\n\r\n\t\t// http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/\r\n\r\n\t\tvar cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z;\r\n\r\n\t\tif ( cosHalfTheta < 0 ) {\r\n\r\n\t\t\tthis._w = - qb._w;\r\n\t\t\tthis._x = - qb._x;\r\n\t\t\tthis._y = - qb._y;\r\n\t\t\tthis._z = - qb._z;\r\n\r\n\t\t\tcosHalfTheta = - cosHalfTheta;\r\n\r\n\t\t} else {\r\n\r\n\t\t\tthis.copy( qb );\r\n\r\n\t\t}\r\n\r\n\t\tif ( cosHalfTheta >= 1.0 ) {\r\n\r\n\t\t\tthis._w = w;\r\n\t\t\tthis._x = x;\r\n\t\t\tthis._y = y;\r\n\t\t\tthis._z = z;\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t}\r\n\r\n\t\tvar halfTheta = Math.acos( cosHalfTheta );\r\n\t\tvar sinHalfTheta = Math.sqrt( 1.0 - cosHalfTheta * cosHalfTheta );\r\n\r\n\t\tif ( Math.abs( sinHalfTheta ) < 0.001 ) {\r\n\r\n\t\t\tthis._w = 0.5 * ( w + this._w );\r\n\t\t\tthis._x = 0.5 * ( x + this._x );\r\n\t\t\tthis._y = 0.5 * ( y + this._y );\r\n\t\t\tthis._z = 0.5 * ( z + this._z );\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t}\r\n\r\n\t\tvar ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta,\r\n\t\tratioB = Math.sin( t * halfTheta ) / sinHalfTheta;\r\n\r\n\t\tthis._w = ( w * ratioA + this._w * ratioB );\r\n\t\tthis._x = ( x * ratioA + this._x * ratioB );\r\n\t\tthis._y = ( y * ratioA + this._y * ratioB );\r\n\t\tthis._z = ( z * ratioA + this._z * ratioB );\r\n\r\n\t\tthis.onChangeCallback();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tequals: function ( quaternion ) {\r\n\r\n\t\treturn ( quaternion._x === this._x ) && ( quaternion._y === this._y ) && ( quaternion._z === this._z ) && ( quaternion._w === this._w );\r\n\r\n\t},\r\n\r\n\tfromArray: function ( array, offset ) {\r\n\r\n\t\tif ( offset === undefined ) offset = 0;\r\n\r\n\t\tthis._x = array[ offset ];\r\n\t\tthis._y = array[ offset + 1 ];\r\n\t\tthis._z = array[ offset + 2 ];\r\n\t\tthis._w = array[ offset + 3 ];\r\n\r\n\t\tthis.onChangeCallback();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\ttoArray: function ( array, offset ) {\r\n\r\n\t\tif ( array === undefined ) array = [];\r\n\t\tif ( offset === undefined ) offset = 0;\r\n\r\n\t\tarray[ offset ] = this._x;\r\n\t\tarray[ offset + 1 ] = this._y;\r\n\t\tarray[ offset + 2 ] = this._z;\r\n\t\tarray[ offset + 3 ] = this._w;\r\n\r\n\t\treturn array;\r\n\r\n\t},\r\n\r\n\tonChange: function ( callback ) {\r\n\r\n\t\tthis.onChangeCallback = callback;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tonChangeCallback: function () {},\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new THREE.Quaternion( this._x, this._y, this._z, this._w );\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.Quaternion.slerp = function ( qa, qb, qm, t ) {\r\n\r\n\treturn qm.copy( qa ).slerp( qb, t );\r\n\r\n}\r\n\r\n// File:src/math/Vector2.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author philogb / http://blog.thejit.org/\r\n * @author egraether / http://egraether.com/\r\n * @author zz85 / http://www.lab4games.net/zz85/blog\r\n */\r\n\r\nTHREE.Vector2 = function ( x, y ) {\r\n\r\n\tthis.x = x || 0;\r\n\tthis.y = y || 0;\r\n\r\n};\r\n\r\nTHREE.Vector2.prototype = {\r\n\r\n\tconstructor: THREE.Vector2,\r\n\r\n\tset: function ( x, y ) {\r\n\r\n\t\tthis.x = x;\r\n\t\tthis.y = y;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetX: function ( x ) {\r\n\r\n\t\tthis.x = x;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetY: function ( y ) {\r\n\r\n\t\tthis.y = y;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetComponent: function ( index, value ) {\r\n\r\n\t\tswitch ( index ) {\r\n\r\n\t\t\tcase 0: this.x = value; break;\r\n\t\t\tcase 1: this.y = value; break;\r\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tgetComponent: function ( index ) {\r\n\r\n\t\tswitch ( index ) {\r\n\r\n\t\t\tcase 0: return this.x;\r\n\t\t\tcase 1: return this.y;\r\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tcopy: function ( v ) {\r\n\r\n\t\tthis.x = v.x;\r\n\t\tthis.y = v.y;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tadd: function ( v, w ) {\r\n\r\n\t\tif ( w !== undefined ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\r\n\t\t\treturn this.addVectors( v, w );\r\n\r\n\t\t}\r\n\r\n\t\tthis.x += v.x;\r\n\t\tthis.y += v.y;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\taddVectors: function ( a, b ) {\r\n\r\n\t\tthis.x = a.x + b.x;\r\n\t\tthis.y = a.y + b.y;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\taddScalar: function ( s ) {\r\n\r\n\t\tthis.x += s;\r\n\t\tthis.y += s;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsub: function ( v, w ) {\r\n\r\n\t\tif ( w !== undefined ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\r\n\t\t\treturn this.subVectors( v, w );\r\n\r\n\t\t}\r\n\r\n\t\tthis.x -= v.x;\r\n\t\tthis.y -= v.y;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsubVectors: function ( a, b ) {\r\n\r\n\t\tthis.x = a.x - b.x;\r\n\t\tthis.y = a.y - b.y;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmultiply: function ( v ) {\r\n\r\n\t\tthis.x *= v.x;\r\n\t\tthis.y *= v.y;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmultiplyScalar: function ( s ) {\r\n\r\n\t\tthis.x *= s;\r\n\t\tthis.y *= s;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tdivide: function ( v ) {\r\n\r\n\t\tthis.x /= v.x;\r\n\t\tthis.y /= v.y;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tdivideScalar: function ( scalar ) {\r\n\r\n\t\tif ( scalar !== 0 ) {\r\n\r\n\t\t\tvar invScalar = 1 / scalar;\r\n\r\n\t\t\tthis.x *= invScalar;\r\n\t\t\tthis.y *= invScalar;\r\n\r\n\t\t} else {\r\n\r\n\t\t\tthis.x = 0;\r\n\t\t\tthis.y = 0;\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmin: function ( v ) {\r\n\r\n\t\tif ( this.x > v.x ) {\r\n\r\n\t\t\tthis.x = v.x;\r\n\r\n\t\t}\r\n\r\n\t\tif ( this.y > v.y ) {\r\n\r\n\t\t\tthis.y = v.y;\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmax: function ( v ) {\r\n\r\n\t\tif ( this.x < v.x ) {\r\n\r\n\t\t\tthis.x = v.x;\r\n\r\n\t\t}\r\n\r\n\t\tif ( this.y < v.y ) {\r\n\r\n\t\t\tthis.y = v.y;\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tclamp: function ( min, max ) {\r\n\r\n\t\t// This function assumes min < max, if this assumption isn't true it will not operate correctly\r\n\r\n\t\tif ( this.x < min.x ) {\r\n\r\n\t\t\tthis.x = min.x;\r\n\r\n\t\t} else if ( this.x > max.x ) {\r\n\r\n\t\t\tthis.x = max.x;\r\n\r\n\t\t}\r\n\r\n\t\tif ( this.y < min.y ) {\r\n\r\n\t\t\tthis.y = min.y;\r\n\r\n\t\t} else if ( this.y > max.y ) {\r\n\r\n\t\t\tthis.y = max.y;\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\tclampScalar: ( function () {\r\n\r\n\t\tvar min, max;\r\n\r\n\t\treturn function ( minVal, maxVal ) {\r\n\r\n\t\t\tif ( min === undefined ) {\r\n\r\n\t\t\t\tmin = new THREE.Vector2();\r\n\t\t\t\tmax = new THREE.Vector2();\r\n\r\n\t\t\t}\r\n\r\n\t\t\tmin.set( minVal, minVal );\r\n\t\t\tmax.set( maxVal, maxVal );\r\n\r\n\t\t\treturn this.clamp( min, max );\r\n\r\n\t\t};\r\n\r\n\t} )(),\r\n\r\n\tfloor: function () {\r\n\r\n\t\tthis.x = Math.floor( this.x );\r\n\t\tthis.y = Math.floor( this.y );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tceil: function () {\r\n\r\n\t\tthis.x = Math.ceil( this.x );\r\n\t\tthis.y = Math.ceil( this.y );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tround: function () {\r\n\r\n\t\tthis.x = Math.round( this.x );\r\n\t\tthis.y = Math.round( this.y );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\troundToZero: function () {\r\n\r\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\r\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tnegate: function () {\r\n\r\n\t\tthis.x = - this.x;\r\n\t\tthis.y = - this.y;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tdot: function ( v ) {\r\n\r\n\t\treturn this.x * v.x + this.y * v.y;\r\n\r\n\t},\r\n\r\n\tlengthSq: function () {\r\n\r\n\t\treturn this.x * this.x + this.y * this.y;\r\n\r\n\t},\r\n\r\n\tlength: function () {\r\n\r\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y );\r\n\r\n\t},\r\n\r\n\tnormalize: function () {\r\n\r\n\t\treturn this.divideScalar( this.length() );\r\n\r\n\t},\r\n\r\n\tdistanceTo: function ( v ) {\r\n\r\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\r\n\r\n\t},\r\n\r\n\tdistanceToSquared: function ( v ) {\r\n\r\n\t\tvar dx = this.x - v.x, dy = this.y - v.y;\r\n\t\treturn dx * dx + dy * dy;\r\n\r\n\t},\r\n\r\n\tsetLength: function ( l ) {\r\n\r\n\t\tvar oldLength = this.length();\r\n\r\n\t\tif ( oldLength !== 0 && l !== oldLength ) {\r\n\r\n\t\t\tthis.multiplyScalar( l / oldLength );\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tlerp: function ( v, alpha ) {\r\n\r\n\t\tthis.x += ( v.x - this.x ) * alpha;\r\n\t\tthis.y += ( v.y - this.y ) * alpha;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tequals: function ( v ) {\r\n\r\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) );\r\n\r\n\t},\r\n\r\n\tfromArray: function ( array, offset ) {\r\n\r\n\t\tif ( offset === undefined ) offset = 0;\r\n\r\n\t\tthis.x = array[ offset ];\r\n\t\tthis.y = array[ offset + 1 ];\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\ttoArray: function ( array, offset ) {\r\n\r\n\t\tif ( array === undefined ) array = [];\r\n\t\tif ( offset === undefined ) offset = 0;\r\n\r\n\t\tarray[ offset ] = this.x;\r\n\t\tarray[ offset + 1 ] = this.y;\r\n\r\n\t\treturn array;\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new THREE.Vector2( this.x, this.y );\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/math/Vector3.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author *kile / http://kile.stravaganza.org/\r\n * @author philogb / http://blog.thejit.org/\r\n * @author mikael emtinger / http://gomo.se/\r\n * @author egraether / http://egraether.com/\r\n * @author WestLangley / http://github.com/WestLangley\r\n */\r\n\r\nTHREE.Vector3 = function ( x, y, z ) {\r\n\r\n\tthis.x = x || 0;\r\n\tthis.y = y || 0;\r\n\tthis.z = z || 0;\r\n\r\n};\r\n\r\nTHREE.Vector3.prototype = {\r\n\r\n\tconstructor: THREE.Vector3,\r\n\r\n\tset: function ( x, y, z ) {\r\n\r\n\t\tthis.x = x;\r\n\t\tthis.y = y;\r\n\t\tthis.z = z;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetX: function ( x ) {\r\n\r\n\t\tthis.x = x;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetY: function ( y ) {\r\n\r\n\t\tthis.y = y;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetZ: function ( z ) {\r\n\r\n\t\tthis.z = z;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetComponent: function ( index, value ) {\r\n\r\n\t\tswitch ( index ) {\r\n\r\n\t\t\tcase 0: this.x = value; break;\r\n\t\t\tcase 1: this.y = value; break;\r\n\t\t\tcase 2: this.z = value; break;\r\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tgetComponent: function ( index ) {\r\n\r\n\t\tswitch ( index ) {\r\n\r\n\t\t\tcase 0: return this.x;\r\n\t\t\tcase 1: return this.y;\r\n\t\t\tcase 2: return this.z;\r\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tcopy: function ( v ) {\r\n\r\n\t\tthis.x = v.x;\r\n\t\tthis.y = v.y;\r\n\t\tthis.z = v.z;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tadd: function ( v, w ) {\r\n\r\n\t\tif ( w !== undefined ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\r\n\t\t\treturn this.addVectors( v, w );\r\n\r\n\t\t}\r\n\r\n\t\tthis.x += v.x;\r\n\t\tthis.y += v.y;\r\n\t\tthis.z += v.z;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\taddScalar: function ( s ) {\r\n\r\n\t\tthis.x += s;\r\n\t\tthis.y += s;\r\n\t\tthis.z += s;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\taddVectors: function ( a, b ) {\r\n\r\n\t\tthis.x = a.x + b.x;\r\n\t\tthis.y = a.y + b.y;\r\n\t\tthis.z = a.z + b.z;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsub: function ( v, w ) {\r\n\r\n\t\tif ( w !== undefined ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\r\n\t\t\treturn this.subVectors( v, w );\r\n\r\n\t\t}\r\n\r\n\t\tthis.x -= v.x;\r\n\t\tthis.y -= v.y;\r\n\t\tthis.z -= v.z;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsubVectors: function ( a, b ) {\r\n\r\n\t\tthis.x = a.x - b.x;\r\n\t\tthis.y = a.y - b.y;\r\n\t\tthis.z = a.z - b.z;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmultiply: function ( v, w ) {\r\n\r\n\t\tif ( w !== undefined ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.' );\r\n\t\t\treturn this.multiplyVectors( v, w );\r\n\r\n\t\t}\r\n\r\n\t\tthis.x *= v.x;\r\n\t\tthis.y *= v.y;\r\n\t\tthis.z *= v.z;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmultiplyScalar: function ( scalar ) {\r\n\r\n\t\tthis.x *= scalar;\r\n\t\tthis.y *= scalar;\r\n\t\tthis.z *= scalar;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmultiplyVectors: function ( a, b ) {\r\n\r\n\t\tthis.x = a.x * b.x;\r\n\t\tthis.y = a.y * b.y;\r\n\t\tthis.z = a.z * b.z;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tapplyEuler: function () {\r\n\r\n\t\tvar quaternion;\r\n\r\n\t\treturn function ( euler ) {\r\n\r\n\t\t\tif ( euler instanceof THREE.Euler === false ) {\r\n\r\n\t\t\t\tconsole.error( 'THREE.Vector3: .applyEuler() now expects a Euler rotation rather than a Vector3 and order.' );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( quaternion === undefined ) quaternion = new THREE.Quaternion();\r\n\r\n\t\t\tthis.applyQuaternion( quaternion.setFromEuler( euler ) );\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tapplyAxisAngle: function () {\r\n\r\n\t\tvar quaternion;\r\n\r\n\t\treturn function ( axis, angle ) {\r\n\r\n\t\t\tif ( quaternion === undefined ) quaternion = new THREE.Quaternion();\r\n\r\n\t\t\tthis.applyQuaternion( quaternion.setFromAxisAngle( axis, angle ) );\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tapplyMatrix3: function ( m ) {\r\n\r\n\t\tvar x = this.x;\r\n\t\tvar y = this.y;\r\n\t\tvar z = this.z;\r\n\r\n\t\tvar e = m.elements;\r\n\r\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z;\r\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z;\r\n\t\tthis.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tapplyMatrix4: function ( m ) {\r\n\r\n\t\t// input: THREE.Matrix4 affine matrix\r\n\r\n\t\tvar x = this.x, y = this.y, z = this.z;\r\n\r\n\t\tvar e = m.elements;\r\n\r\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ];\r\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ];\r\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ];\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tapplyProjection: function ( m ) {\r\n\r\n\t\t// input: THREE.Matrix4 projection matrix\r\n\r\n\t\tvar x = this.x, y = this.y, z = this.z;\r\n\r\n\t\tvar e = m.elements;\r\n\t\tvar d = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] ); // perspective divide\r\n\r\n\t\tthis.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * d;\r\n\t\tthis.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * d;\r\n\t\tthis.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * d;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tapplyQuaternion: function ( q ) {\r\n\r\n\t\tvar x = this.x;\r\n\t\tvar y = this.y;\r\n\t\tvar z = this.z;\r\n\r\n\t\tvar qx = q.x;\r\n\t\tvar qy = q.y;\r\n\t\tvar qz = q.z;\r\n\t\tvar qw = q.w;\r\n\r\n\t\t// calculate quat * vector\r\n\r\n\t\tvar ix = qw * x + qy * z - qz * y;\r\n\t\tvar iy = qw * y + qz * x - qx * z;\r\n\t\tvar iz = qw * z + qx * y - qy * x;\r\n\t\tvar iw = - qx * x - qy * y - qz * z;\r\n\r\n\t\t// calculate result * inverse quat\r\n\r\n\t\tthis.x = ix * qw + iw * - qx + iy * - qz - iz * - qy;\r\n\t\tthis.y = iy * qw + iw * - qy + iz * - qx - ix * - qz;\r\n\t\tthis.z = iz * qw + iw * - qz + ix * - qy - iy * - qx;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tproject: function () {\r\n\r\n\t\tvar matrix;\r\n\r\n\t\treturn function ( camera ) {\r\n\r\n\t\t\tif ( matrix === undefined ) matrix = new THREE.Matrix4();\r\n\r\n\t\t\tmatrix.multiplyMatrices( camera.projectionMatrix, matrix.getInverse( camera.matrixWorld ) );\r\n\t\t\treturn this.applyProjection( matrix );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tunproject: function () {\r\n\r\n\t\tvar matrix;\r\n\r\n\t\treturn function ( camera ) {\r\n\r\n\t\t\tif ( matrix === undefined ) matrix = new THREE.Matrix4();\r\n\r\n\t\t\tmatrix.multiplyMatrices( camera.matrixWorld, matrix.getInverse( camera.projectionMatrix ) );\r\n\t\t\treturn this.applyProjection( matrix );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\ttransformDirection: function ( m ) {\r\n\r\n\t\t// input: THREE.Matrix4 affine matrix\r\n\t\t// vector interpreted as a direction\r\n\r\n\t\tvar x = this.x, y = this.y, z = this.z;\r\n\r\n\t\tvar e = m.elements;\r\n\r\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z;\r\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z;\r\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z;\r\n\r\n\t\tthis.normalize();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tdivide: function ( v ) {\r\n\r\n\t\tthis.x /= v.x;\r\n\t\tthis.y /= v.y;\r\n\t\tthis.z /= v.z;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tdivideScalar: function ( scalar ) {\r\n\r\n\t\tif ( scalar !== 0 ) {\r\n\r\n\t\t\tvar invScalar = 1 / scalar;\r\n\r\n\t\t\tthis.x *= invScalar;\r\n\t\t\tthis.y *= invScalar;\r\n\t\t\tthis.z *= invScalar;\r\n\r\n\t\t} else {\r\n\r\n\t\t\tthis.x = 0;\r\n\t\t\tthis.y = 0;\r\n\t\t\tthis.z = 0;\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmin: function ( v ) {\r\n\r\n\t\tif ( this.x > v.x ) {\r\n\r\n\t\t\tthis.x = v.x;\r\n\r\n\t\t}\r\n\r\n\t\tif ( this.y > v.y ) {\r\n\r\n\t\t\tthis.y = v.y;\r\n\r\n\t\t}\r\n\r\n\t\tif ( this.z > v.z ) {\r\n\r\n\t\t\tthis.z = v.z;\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmax: function ( v ) {\r\n\r\n\t\tif ( this.x < v.x ) {\r\n\r\n\t\t\tthis.x = v.x;\r\n\r\n\t\t}\r\n\r\n\t\tif ( this.y < v.y ) {\r\n\r\n\t\t\tthis.y = v.y;\r\n\r\n\t\t}\r\n\r\n\t\tif ( this.z < v.z ) {\r\n\r\n\t\t\tthis.z = v.z;\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tclamp: function ( min, max ) {\r\n\r\n\t\t// This function assumes min < max, if this assumption isn't true it will not operate correctly\r\n\r\n\t\tif ( this.x < min.x ) {\r\n\r\n\t\t\tthis.x = min.x;\r\n\r\n\t\t} else if ( this.x > max.x ) {\r\n\r\n\t\t\tthis.x = max.x;\r\n\r\n\t\t}\r\n\r\n\t\tif ( this.y < min.y ) {\r\n\r\n\t\t\tthis.y = min.y;\r\n\r\n\t\t} else if ( this.y > max.y ) {\r\n\r\n\t\t\tthis.y = max.y;\r\n\r\n\t\t}\r\n\r\n\t\tif ( this.z < min.z ) {\r\n\r\n\t\t\tthis.z = min.z;\r\n\r\n\t\t} else if ( this.z > max.z ) {\r\n\r\n\t\t\tthis.z = max.z;\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tclampScalar: ( function () {\r\n\r\n\t\tvar min, max;\r\n\r\n\t\treturn function ( minVal, maxVal ) {\r\n\r\n\t\t\tif ( min === undefined ) {\r\n\r\n\t\t\t\tmin = new THREE.Vector3();\r\n\t\t\t\tmax = new THREE.Vector3();\r\n\r\n\t\t\t}\r\n\r\n\t\t\tmin.set( minVal, minVal, minVal );\r\n\t\t\tmax.set( maxVal, maxVal, maxVal );\r\n\r\n\t\t\treturn this.clamp( min, max );\r\n\r\n\t\t};\r\n\r\n\t} )(),\r\n\r\n\tfloor: function () {\r\n\r\n\t\tthis.x = Math.floor( this.x );\r\n\t\tthis.y = Math.floor( this.y );\r\n\t\tthis.z = Math.floor( this.z );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tceil: function () {\r\n\r\n\t\tthis.x = Math.ceil( this.x );\r\n\t\tthis.y = Math.ceil( this.y );\r\n\t\tthis.z = Math.ceil( this.z );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tround: function () {\r\n\r\n\t\tthis.x = Math.round( this.x );\r\n\t\tthis.y = Math.round( this.y );\r\n\t\tthis.z = Math.round( this.z );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\troundToZero: function () {\r\n\r\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\r\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\r\n\t\tthis.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tnegate: function () {\r\n\r\n\t\tthis.x = - this.x;\r\n\t\tthis.y = - this.y;\r\n\t\tthis.z = - this.z;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tdot: function ( v ) {\r\n\r\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z;\r\n\r\n\t},\r\n\r\n\tlengthSq: function () {\r\n\r\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z;\r\n\r\n\t},\r\n\r\n\tlength: function () {\r\n\r\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );\r\n\r\n\t},\r\n\r\n\tlengthManhattan: function () {\r\n\r\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z );\r\n\r\n\t},\r\n\r\n\tnormalize: function () {\r\n\r\n\t\treturn this.divideScalar( this.length() );\r\n\r\n\t},\r\n\r\n\tsetLength: function ( l ) {\r\n\r\n\t\tvar oldLength = this.length();\r\n\r\n\t\tif ( oldLength !== 0 && l !== oldLength ) {\r\n\r\n\t\t\tthis.multiplyScalar( l / oldLength );\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tlerp: function ( v, alpha ) {\r\n\r\n\t\tthis.x += ( v.x - this.x ) * alpha;\r\n\t\tthis.y += ( v.y - this.y ) * alpha;\r\n\t\tthis.z += ( v.z - this.z ) * alpha;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tcross: function ( v, w ) {\r\n\r\n\t\tif ( w !== undefined ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.' );\r\n\t\t\treturn this.crossVectors( v, w );\r\n\r\n\t\t}\r\n\r\n\t\tvar x = this.x, y = this.y, z = this.z;\r\n\r\n\t\tthis.x = y * v.z - z * v.y;\r\n\t\tthis.y = z * v.x - x * v.z;\r\n\t\tthis.z = x * v.y - y * v.x;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tcrossVectors: function ( a, b ) {\r\n\r\n\t\tvar ax = a.x, ay = a.y, az = a.z;\r\n\t\tvar bx = b.x, by = b.y, bz = b.z;\r\n\r\n\t\tthis.x = ay * bz - az * by;\r\n\t\tthis.y = az * bx - ax * bz;\r\n\t\tthis.z = ax * by - ay * bx;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tprojectOnVector: function () {\r\n\r\n\t\tvar v1, dot;\r\n\r\n\t\treturn function ( vector ) {\r\n\r\n\t\t\tif ( v1 === undefined ) v1 = new THREE.Vector3();\r\n\r\n\t\t\tv1.copy( vector ).normalize();\r\n\r\n\t\t\tdot = this.dot( v1 );\r\n\r\n\t\t\treturn this.copy( v1 ).multiplyScalar( dot );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tprojectOnPlane: function () {\r\n\r\n\t\tvar v1;\r\n\r\n\t\treturn function ( planeNormal ) {\r\n\r\n\t\t\tif ( v1 === undefined ) v1 = new THREE.Vector3();\r\n\r\n\t\t\tv1.copy( this ).projectOnVector( planeNormal );\r\n\r\n\t\t\treturn this.sub( v1 );\r\n\r\n\t\t}\r\n\r\n\t}(),\r\n\r\n\treflect: function () {\r\n\r\n\t\t// reflect incident vector off plane orthogonal to normal\r\n\t\t// normal is assumed to have unit length\r\n\r\n\t\tvar v1;\r\n\r\n\t\treturn function ( normal ) {\r\n\r\n\t\t\tif ( v1 === undefined ) v1 = new THREE.Vector3();\r\n\r\n\t\t\treturn this.sub( v1.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) );\r\n\r\n\t\t}\r\n\r\n\t}(),\r\n\r\n\tangleTo: function ( v ) {\r\n\r\n\t\tvar theta = this.dot( v ) / ( this.length() * v.length() );\r\n\r\n\t\t// clamp, to handle numerical problems\r\n\r\n\t\treturn Math.acos( THREE.Math.clamp( theta, - 1, 1 ) );\r\n\r\n\t},\r\n\r\n\tdistanceTo: function ( v ) {\r\n\r\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\r\n\r\n\t},\r\n\r\n\tdistanceToSquared: function ( v ) {\r\n\r\n\t\tvar dx = this.x - v.x;\r\n\t\tvar dy = this.y - v.y;\r\n\t\tvar dz = this.z - v.z;\r\n\r\n\t\treturn dx * dx + dy * dy + dz * dz;\r\n\r\n\t},\r\n\r\n\tsetEulerFromRotationMatrix: function ( m, order ) {\r\n\r\n\t\tconsole.error( 'THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.' );\r\n\r\n\t},\r\n\r\n\tsetEulerFromQuaternion: function ( q, order ) {\r\n\r\n\t\tconsole.error( 'THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.' );\r\n\r\n\t},\r\n\r\n\tgetPositionFromMatrix: function ( m ) {\r\n\r\n\t\tconsole.warn( 'THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().' );\r\n\r\n\t\treturn this.setFromMatrixPosition( m );\r\n\r\n\t},\r\n\r\n\tgetScaleFromMatrix: function ( m ) {\r\n\r\n\t\tconsole.warn( 'THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().' );\r\n\r\n\t\treturn this.setFromMatrixScale( m );\r\n\t},\r\n\r\n\tgetColumnFromMatrix: function ( index, matrix ) {\r\n\r\n\t\tconsole.warn( 'THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().' );\r\n\r\n\t\treturn this.setFromMatrixColumn( index, matrix );\r\n\r\n\t},\r\n\r\n\tsetFromMatrixPosition: function ( m ) {\r\n\r\n\t\tthis.x = m.elements[ 12 ];\r\n\t\tthis.y = m.elements[ 13 ];\r\n\t\tthis.z = m.elements[ 14 ];\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetFromMatrixScale: function ( m ) {\r\n\r\n\t\tvar sx = this.set( m.elements[ 0 ], m.elements[ 1 ], m.elements[ 2 ] ).length();\r\n\t\tvar sy = this.set( m.elements[ 4 ], m.elements[ 5 ], m.elements[ 6 ] ).length();\r\n\t\tvar sz = this.set( m.elements[ 8 ], m.elements[ 9 ], m.elements[ 10 ] ).length();\r\n\r\n\t\tthis.x = sx;\r\n\t\tthis.y = sy;\r\n\t\tthis.z = sz;\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\tsetFromMatrixColumn: function ( index, matrix ) {\r\n\r\n\t\tvar offset = index * 4;\r\n\r\n\t\tvar me = matrix.elements;\r\n\r\n\t\tthis.x = me[ offset ];\r\n\t\tthis.y = me[ offset + 1 ];\r\n\t\tthis.z = me[ offset + 2 ];\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tequals: function ( v ) {\r\n\r\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) );\r\n\r\n\t},\r\n\r\n\tfromArray: function ( array, offset ) {\r\n\r\n\t\tif ( offset === undefined ) offset = 0;\r\n\r\n\t\tthis.x = array[ offset ];\r\n\t\tthis.y = array[ offset + 1 ];\r\n\t\tthis.z = array[ offset + 2 ];\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\ttoArray: function ( array, offset ) {\r\n\r\n\t\tif ( array === undefined ) array = [];\r\n\t\tif ( offset === undefined ) offset = 0;\r\n\r\n\t\tarray[ offset ] = this.x;\r\n\t\tarray[ offset + 1 ] = this.y;\r\n\t\tarray[ offset + 2 ] = this.z;\r\n\r\n\t\treturn array;\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new THREE.Vector3( this.x, this.y, this.z );\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/math/Vector4.js\r\n\r\n/**\r\n * @author supereggbert / http://www.paulbrunt.co.uk/\r\n * @author philogb / http://blog.thejit.org/\r\n * @author mikael emtinger / http://gomo.se/\r\n * @author egraether / http://egraether.com/\r\n * @author WestLangley / http://github.com/WestLangley\r\n */\r\n\r\nTHREE.Vector4 = function ( x, y, z, w ) {\r\n\r\n\tthis.x = x || 0;\r\n\tthis.y = y || 0;\r\n\tthis.z = z || 0;\r\n\tthis.w = ( w !== undefined ) ? w : 1;\r\n\r\n};\r\n\r\nTHREE.Vector4.prototype = {\r\n\r\n\tconstructor: THREE.Vector4,\r\n\r\n\tset: function ( x, y, z, w ) {\r\n\r\n\t\tthis.x = x;\r\n\t\tthis.y = y;\r\n\t\tthis.z = z;\r\n\t\tthis.w = w;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetX: function ( x ) {\r\n\r\n\t\tthis.x = x;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetY: function ( y ) {\r\n\r\n\t\tthis.y = y;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetZ: function ( z ) {\r\n\r\n\t\tthis.z = z;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetW: function ( w ) {\r\n\r\n\t\tthis.w = w;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetComponent: function ( index, value ) {\r\n\r\n\t\tswitch ( index ) {\r\n\r\n\t\t\tcase 0: this.x = value; break;\r\n\t\t\tcase 1: this.y = value; break;\r\n\t\t\tcase 2: this.z = value; break;\r\n\t\t\tcase 3: this.w = value; break;\r\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tgetComponent: function ( index ) {\r\n\r\n\t\tswitch ( index ) {\r\n\r\n\t\t\tcase 0: return this.x;\r\n\t\t\tcase 1: return this.y;\r\n\t\t\tcase 2: return this.z;\r\n\t\t\tcase 3: return this.w;\r\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tcopy: function ( v ) {\r\n\r\n\t\tthis.x = v.x;\r\n\t\tthis.y = v.y;\r\n\t\tthis.z = v.z;\r\n\t\tthis.w = ( v.w !== undefined ) ? v.w : 1;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tadd: function ( v, w ) {\r\n\r\n\t\tif ( w !== undefined ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\r\n\t\t\treturn this.addVectors( v, w );\r\n\r\n\t\t}\r\n\r\n\t\tthis.x += v.x;\r\n\t\tthis.y += v.y;\r\n\t\tthis.z += v.z;\r\n\t\tthis.w += v.w;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\taddScalar: function ( s ) {\r\n\r\n\t\tthis.x += s;\r\n\t\tthis.y += s;\r\n\t\tthis.z += s;\r\n\t\tthis.w += s;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\taddVectors: function ( a, b ) {\r\n\r\n\t\tthis.x = a.x + b.x;\r\n\t\tthis.y = a.y + b.y;\r\n\t\tthis.z = a.z + b.z;\r\n\t\tthis.w = a.w + b.w;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsub: function ( v, w ) {\r\n\r\n\t\tif ( w !== undefined ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\r\n\t\t\treturn this.subVectors( v, w );\r\n\r\n\t\t}\r\n\r\n\t\tthis.x -= v.x;\r\n\t\tthis.y -= v.y;\r\n\t\tthis.z -= v.z;\r\n\t\tthis.w -= v.w;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsubVectors: function ( a, b ) {\r\n\r\n\t\tthis.x = a.x - b.x;\r\n\t\tthis.y = a.y - b.y;\r\n\t\tthis.z = a.z - b.z;\r\n\t\tthis.w = a.w - b.w;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmultiplyScalar: function ( scalar ) {\r\n\r\n\t\tthis.x *= scalar;\r\n\t\tthis.y *= scalar;\r\n\t\tthis.z *= scalar;\r\n\t\tthis.w *= scalar;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tapplyMatrix4: function ( m ) {\r\n\r\n\t\tvar x = this.x;\r\n\t\tvar y = this.y;\r\n\t\tvar z = this.z;\r\n\t\tvar w = this.w;\r\n\r\n\t\tvar e = m.elements;\r\n\r\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] * w;\r\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] * w;\r\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] * w;\r\n\t\tthis.w = e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] * w;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tdivideScalar: function ( scalar ) {\r\n\r\n\t\tif ( scalar !== 0 ) {\r\n\r\n\t\t\tvar invScalar = 1 / scalar;\r\n\r\n\t\t\tthis.x *= invScalar;\r\n\t\t\tthis.y *= invScalar;\r\n\t\t\tthis.z *= invScalar;\r\n\t\t\tthis.w *= invScalar;\r\n\r\n\t\t} else {\r\n\r\n\t\t\tthis.x = 0;\r\n\t\t\tthis.y = 0;\r\n\t\t\tthis.z = 0;\r\n\t\t\tthis.w = 1;\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetAxisAngleFromQuaternion: function ( q ) {\r\n\r\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm\r\n\r\n\t\t// q is assumed to be normalized\r\n\r\n\t\tthis.w = 2 * Math.acos( q.w );\r\n\r\n\t\tvar s = Math.sqrt( 1 - q.w * q.w );\r\n\r\n\t\tif ( s < 0.0001 ) {\r\n\r\n\t\t\t this.x = 1;\r\n\t\t\t this.y = 0;\r\n\t\t\t this.z = 0;\r\n\r\n\t\t} else {\r\n\r\n\t\t\t this.x = q.x / s;\r\n\t\t\t this.y = q.y / s;\r\n\t\t\t this.z = q.z / s;\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetAxisAngleFromRotationMatrix: function ( m ) {\r\n\r\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm\r\n\r\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\r\n\r\n\t\tvar angle, x, y, z,\t\t// variables for result\r\n\t\t\tepsilon = 0.01,\t\t// margin to allow for rounding errors\r\n\t\t\tepsilon2 = 0.1,\t\t// margin to distinguish between 0 and 180 degrees\r\n\r\n\t\t\tte = m.elements,\r\n\r\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\r\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\r\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\r\n\r\n\t\tif ( ( Math.abs( m12 - m21 ) < epsilon )\r\n\t\t && ( Math.abs( m13 - m31 ) < epsilon )\r\n\t\t && ( Math.abs( m23 - m32 ) < epsilon ) ) {\r\n\r\n\t\t\t// singularity found\r\n\t\t\t// first check for identity matrix which must have +1 for all terms\r\n\t\t\t// in leading diagonal and zero in other terms\r\n\r\n\t\t\tif ( ( Math.abs( m12 + m21 ) < epsilon2 )\r\n\t\t\t && ( Math.abs( m13 + m31 ) < epsilon2 )\r\n\t\t\t && ( Math.abs( m23 + m32 ) < epsilon2 )\r\n\t\t\t && ( Math.abs( m11 + m22 + m33 - 3 ) < epsilon2 ) ) {\r\n\r\n\t\t\t\t// this singularity is identity matrix so angle = 0\r\n\r\n\t\t\t\tthis.set( 1, 0, 0, 0 );\r\n\r\n\t\t\t\treturn this; // zero angle, arbitrary axis\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// otherwise this singularity is angle = 180\r\n\r\n\t\t\tangle = Math.PI;\r\n\r\n\t\t\tvar xx = ( m11 + 1 ) / 2;\r\n\t\t\tvar yy = ( m22 + 1 ) / 2;\r\n\t\t\tvar zz = ( m33 + 1 ) / 2;\r\n\t\t\tvar xy = ( m12 + m21 ) / 4;\r\n\t\t\tvar xz = ( m13 + m31 ) / 4;\r\n\t\t\tvar yz = ( m23 + m32 ) / 4;\r\n\r\n\t\t\tif ( ( xx > yy ) && ( xx > zz ) ) { // m11 is the largest diagonal term\r\n\r\n\t\t\t\tif ( xx < epsilon ) {\r\n\r\n\t\t\t\t\tx = 0;\r\n\t\t\t\t\ty = 0.707106781;\r\n\t\t\t\t\tz = 0.707106781;\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tx = Math.sqrt( xx );\r\n\t\t\t\t\ty = xy / x;\r\n\t\t\t\t\tz = xz / x;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else if ( yy > zz ) { // m22 is the largest diagonal term\r\n\r\n\t\t\t\tif ( yy < epsilon ) {\r\n\r\n\t\t\t\t\tx = 0.707106781;\r\n\t\t\t\t\ty = 0;\r\n\t\t\t\t\tz = 0.707106781;\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\ty = Math.sqrt( yy );\r\n\t\t\t\t\tx = xy / y;\r\n\t\t\t\t\tz = yz / y;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else { // m33 is the largest diagonal term so base result on this\r\n\r\n\t\t\t\tif ( zz < epsilon ) {\r\n\r\n\t\t\t\t\tx = 0.707106781;\r\n\t\t\t\t\ty = 0.707106781;\r\n\t\t\t\t\tz = 0;\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tz = Math.sqrt( zz );\r\n\t\t\t\t\tx = xz / z;\r\n\t\t\t\t\ty = yz / z;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tthis.set( x, y, z, angle );\r\n\r\n\t\t\treturn this; // return 180 deg rotation\r\n\r\n\t\t}\r\n\r\n\t\t// as we have reached here there are no singularities so we can handle normally\r\n\r\n\t\tvar s = Math.sqrt( ( m32 - m23 ) * ( m32 - m23 )\r\n\t\t\t\t\t\t + ( m13 - m31 ) * ( m13 - m31 )\r\n\t\t\t\t\t\t + ( m21 - m12 ) * ( m21 - m12 ) ); // used to normalize\r\n\r\n\t\tif ( Math.abs( s ) < 0.001 ) s = 1;\r\n\r\n\t\t// prevent divide by zero, should not happen if matrix is orthogonal and should be\r\n\t\t// caught by singularity test above, but I've left it in just in case\r\n\r\n\t\tthis.x = ( m32 - m23 ) / s;\r\n\t\tthis.y = ( m13 - m31 ) / s;\r\n\t\tthis.z = ( m21 - m12 ) / s;\r\n\t\tthis.w = Math.acos( ( m11 + m22 + m33 - 1 ) / 2 );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmin: function ( v ) {\r\n\r\n\t\tif ( this.x > v.x ) {\r\n\r\n\t\t\tthis.x = v.x;\r\n\r\n\t\t}\r\n\r\n\t\tif ( this.y > v.y ) {\r\n\r\n\t\t\tthis.y = v.y;\r\n\r\n\t\t}\r\n\r\n\t\tif ( this.z > v.z ) {\r\n\r\n\t\t\tthis.z = v.z;\r\n\r\n\t\t}\r\n\r\n\t\tif ( this.w > v.w ) {\r\n\r\n\t\t\tthis.w = v.w;\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmax: function ( v ) {\r\n\r\n\t\tif ( this.x < v.x ) {\r\n\r\n\t\t\tthis.x = v.x;\r\n\r\n\t\t}\r\n\r\n\t\tif ( this.y < v.y ) {\r\n\r\n\t\t\tthis.y = v.y;\r\n\r\n\t\t}\r\n\r\n\t\tif ( this.z < v.z ) {\r\n\r\n\t\t\tthis.z = v.z;\r\n\r\n\t\t}\r\n\r\n\t\tif ( this.w < v.w ) {\r\n\r\n\t\t\tthis.w = v.w;\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tclamp: function ( min, max ) {\r\n\r\n\t\t// This function assumes min < max, if this assumption isn't true it will not operate correctly\r\n\r\n\t\tif ( this.x < min.x ) {\r\n\r\n\t\t\tthis.x = min.x;\r\n\r\n\t\t} else if ( this.x > max.x ) {\r\n\r\n\t\t\tthis.x = max.x;\r\n\r\n\t\t}\r\n\r\n\t\tif ( this.y < min.y ) {\r\n\r\n\t\t\tthis.y = min.y;\r\n\r\n\t\t} else if ( this.y > max.y ) {\r\n\r\n\t\t\tthis.y = max.y;\r\n\r\n\t\t}\r\n\r\n\t\tif ( this.z < min.z ) {\r\n\r\n\t\t\tthis.z = min.z;\r\n\r\n\t\t} else if ( this.z > max.z ) {\r\n\r\n\t\t\tthis.z = max.z;\r\n\r\n\t\t}\r\n\r\n\t\tif ( this.w < min.w ) {\r\n\r\n\t\t\tthis.w = min.w;\r\n\r\n\t\t} else if ( this.w > max.w ) {\r\n\r\n\t\t\tthis.w = max.w;\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tclampScalar: ( function () {\r\n\r\n\t\tvar min, max;\r\n\r\n\t\treturn function ( minVal, maxVal ) {\r\n\r\n\t\t\tif ( min === undefined ) {\r\n\r\n\t\t\t\tmin = new THREE.Vector4();\r\n\t\t\t\tmax = new THREE.Vector4();\r\n\r\n\t\t\t}\r\n\r\n\t\t\tmin.set( minVal, minVal, minVal, minVal );\r\n\t\t\tmax.set( maxVal, maxVal, maxVal, maxVal );\r\n\r\n\t\t\treturn this.clamp( min, max );\r\n\r\n\t\t};\r\n\r\n\t} )(),\r\n\r\n floor: function () {\r\n\r\n this.x = Math.floor( this.x );\r\n this.y = Math.floor( this.y );\r\n this.z = Math.floor( this.z );\r\n this.w = Math.floor( this.w );\r\n\r\n return this;\r\n\r\n },\r\n\r\n ceil: function () {\r\n\r\n this.x = Math.ceil( this.x );\r\n this.y = Math.ceil( this.y );\r\n this.z = Math.ceil( this.z );\r\n this.w = Math.ceil( this.w );\r\n\r\n return this;\r\n\r\n },\r\n\r\n round: function () {\r\n\r\n this.x = Math.round( this.x );\r\n this.y = Math.round( this.y );\r\n this.z = Math.round( this.z );\r\n this.w = Math.round( this.w );\r\n\r\n return this;\r\n\r\n },\r\n\r\n roundToZero: function () {\r\n\r\n this.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\r\n this.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\r\n this.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\r\n this.w = ( this.w < 0 ) ? Math.ceil( this.w ) : Math.floor( this.w );\r\n\r\n return this;\r\n\r\n },\r\n\r\n\tnegate: function () {\r\n\r\n\t\tthis.x = - this.x;\r\n\t\tthis.y = - this.y;\r\n\t\tthis.z = - this.z;\r\n\t\tthis.w = - this.w;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tdot: function ( v ) {\r\n\r\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w;\r\n\r\n\t},\r\n\r\n\tlengthSq: function () {\r\n\r\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w;\r\n\r\n\t},\r\n\r\n\tlength: function () {\r\n\r\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w );\r\n\r\n\t},\r\n\r\n\tlengthManhattan: function () {\r\n\r\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ) + Math.abs( this.w );\r\n\r\n\t},\r\n\r\n\tnormalize: function () {\r\n\r\n\t\treturn this.divideScalar( this.length() );\r\n\r\n\t},\r\n\r\n\tsetLength: function ( l ) {\r\n\r\n\t\tvar oldLength = this.length();\r\n\r\n\t\tif ( oldLength !== 0 && l !== oldLength ) {\r\n\r\n\t\t\tthis.multiplyScalar( l / oldLength );\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tlerp: function ( v, alpha ) {\r\n\r\n\t\tthis.x += ( v.x - this.x ) * alpha;\r\n\t\tthis.y += ( v.y - this.y ) * alpha;\r\n\t\tthis.z += ( v.z - this.z ) * alpha;\r\n\t\tthis.w += ( v.w - this.w ) * alpha;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tequals: function ( v ) {\r\n\r\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) && ( v.w === this.w ) );\r\n\r\n\t},\r\n\r\n\tfromArray: function ( array, offset ) {\r\n\r\n\t\tif ( offset === undefined ) offset = 0;\r\n\r\n\t\tthis.x = array[ offset ];\r\n\t\tthis.y = array[ offset + 1 ];\r\n\t\tthis.z = array[ offset + 2 ];\r\n\t\tthis.w = array[ offset + 3 ];\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\ttoArray: function ( array, offset ) {\r\n\r\n\t\tif ( array === undefined ) array = [];\r\n\t\tif ( offset === undefined ) offset = 0;\r\n\r\n\t\tarray[ offset ] = this.x;\r\n\t\tarray[ offset + 1 ] = this.y;\r\n\t\tarray[ offset + 2 ] = this.z;\r\n\t\tarray[ offset + 3 ] = this.w;\r\n\r\n\t\treturn array;\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new THREE.Vector4( this.x, this.y, this.z, this.w );\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/math/Euler.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author WestLangley / http://github.com/WestLangley\r\n * @author bhouston / http://exocortex.com\r\n */\r\n\r\nTHREE.Euler = function ( x, y, z, order ) {\r\n\r\n\tthis._x = x || 0;\r\n\tthis._y = y || 0;\r\n\tthis._z = z || 0;\r\n\tthis._order = order || THREE.Euler.DefaultOrder;\r\n\r\n};\r\n\r\nTHREE.Euler.RotationOrders = [ 'XYZ', 'YZX', 'ZXY', 'XZY', 'YXZ', 'ZYX' ];\r\n\r\nTHREE.Euler.DefaultOrder = 'XYZ';\r\n\r\nTHREE.Euler.prototype = {\r\n\r\n\tconstructor: THREE.Euler,\r\n\r\n\t_x: 0, _y: 0, _z: 0, _order: THREE.Euler.DefaultOrder,\r\n\r\n\tget x () {\r\n\r\n\t\treturn this._x;\r\n\r\n\t},\r\n\r\n\tset x ( value ) {\r\n\r\n\t\tthis._x = value;\r\n\t\tthis.onChangeCallback();\r\n\r\n\t},\r\n\r\n\tget y () {\r\n\r\n\t\treturn this._y;\r\n\r\n\t},\r\n\r\n\tset y ( value ) {\r\n\r\n\t\tthis._y = value;\r\n\t\tthis.onChangeCallback();\r\n\r\n\t},\r\n\r\n\tget z () {\r\n\r\n\t\treturn this._z;\r\n\r\n\t},\r\n\r\n\tset z ( value ) {\r\n\r\n\t\tthis._z = value;\r\n\t\tthis.onChangeCallback();\r\n\r\n\t},\r\n\r\n\tget order () {\r\n\r\n\t\treturn this._order;\r\n\r\n\t},\r\n\r\n\tset order ( value ) {\r\n\r\n\t\tthis._order = value;\r\n\t\tthis.onChangeCallback();\r\n\r\n\t},\r\n\r\n\tset: function ( x, y, z, order ) {\r\n\r\n\t\tthis._x = x;\r\n\t\tthis._y = y;\r\n\t\tthis._z = z;\r\n\t\tthis._order = order || this._order;\r\n\r\n\t\tthis.onChangeCallback();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tcopy: function ( euler ) {\r\n\r\n\t\tthis._x = euler._x;\r\n\t\tthis._y = euler._y;\r\n\t\tthis._z = euler._z;\r\n\t\tthis._order = euler._order;\r\n\r\n\t\tthis.onChangeCallback();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetFromRotationMatrix: function ( m, order ) {\r\n\r\n\t\tvar clamp = THREE.Math.clamp;\r\n\r\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\r\n\r\n\t\tvar te = m.elements;\r\n\t\tvar m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ];\r\n\t\tvar m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ];\r\n\t\tvar m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\r\n\r\n\t\torder = order || this._order;\r\n\r\n\t\tif ( order === 'XYZ' ) {\r\n\r\n\t\t\tthis._y = Math.asin( clamp( m13, - 1, 1 ) );\r\n\r\n\t\t\tif ( Math.abs( m13 ) < 0.99999 ) {\r\n\r\n\t\t\t\tthis._x = Math.atan2( - m23, m33 );\r\n\t\t\t\tthis._z = Math.atan2( - m12, m11 );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tthis._x = Math.atan2( m32, m22 );\r\n\t\t\t\tthis._z = 0;\r\n\r\n\t\t\t}\r\n\r\n\t\t} else if ( order === 'YXZ' ) {\r\n\r\n\t\t\tthis._x = Math.asin( - clamp( m23, - 1, 1 ) );\r\n\r\n\t\t\tif ( Math.abs( m23 ) < 0.99999 ) {\r\n\r\n\t\t\t\tthis._y = Math.atan2( m13, m33 );\r\n\t\t\t\tthis._z = Math.atan2( m21, m22 );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tthis._y = Math.atan2( - m31, m11 );\r\n\t\t\t\tthis._z = 0;\r\n\r\n\t\t\t}\r\n\r\n\t\t} else if ( order === 'ZXY' ) {\r\n\r\n\t\t\tthis._x = Math.asin( clamp( m32, - 1, 1 ) );\r\n\r\n\t\t\tif ( Math.abs( m32 ) < 0.99999 ) {\r\n\r\n\t\t\t\tthis._y = Math.atan2( - m31, m33 );\r\n\t\t\t\tthis._z = Math.atan2( - m12, m22 );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tthis._y = 0;\r\n\t\t\t\tthis._z = Math.atan2( m21, m11 );\r\n\r\n\t\t\t}\r\n\r\n\t\t} else if ( order === 'ZYX' ) {\r\n\r\n\t\t\tthis._y = Math.asin( - clamp( m31, - 1, 1 ) );\r\n\r\n\t\t\tif ( Math.abs( m31 ) < 0.99999 ) {\r\n\r\n\t\t\t\tthis._x = Math.atan2( m32, m33 );\r\n\t\t\t\tthis._z = Math.atan2( m21, m11 );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tthis._x = 0;\r\n\t\t\t\tthis._z = Math.atan2( - m12, m22 );\r\n\r\n\t\t\t}\r\n\r\n\t\t} else if ( order === 'YZX' ) {\r\n\r\n\t\t\tthis._z = Math.asin( clamp( m21, - 1, 1 ) );\r\n\r\n\t\t\tif ( Math.abs( m21 ) < 0.99999 ) {\r\n\r\n\t\t\t\tthis._x = Math.atan2( - m23, m22 );\r\n\t\t\t\tthis._y = Math.atan2( - m31, m11 );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tthis._x = 0;\r\n\t\t\t\tthis._y = Math.atan2( m13, m33 );\r\n\r\n\t\t\t}\r\n\r\n\t\t} else if ( order === 'XZY' ) {\r\n\r\n\t\t\tthis._z = Math.asin( - clamp( m12, - 1, 1 ) );\r\n\r\n\t\t\tif ( Math.abs( m12 ) < 0.99999 ) {\r\n\r\n\t\t\t\tthis._x = Math.atan2( m32, m22 );\r\n\t\t\t\tthis._y = Math.atan2( m13, m11 );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tthis._x = Math.atan2( - m23, m33 );\r\n\t\t\t\tthis._y = 0;\r\n\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\r\n\t\t\tconsole.warn( 'THREE.Euler: .setFromRotationMatrix() given unsupported order: ' + order )\r\n\r\n\t\t}\r\n\r\n\t\tthis._order = order;\r\n\r\n\t\tthis.onChangeCallback();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetFromQuaternion: function ( q, order, update ) {\r\n\r\n\t\tvar clamp = THREE.Math.clamp;\r\n\r\n\t\t// q is assumed to be normalized\r\n\r\n\t\t// http://www.mathworks.com/matlabcentral/fileexchange/20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/content/SpinCalc.m\r\n\r\n\t\tvar sqx = q.x * q.x;\r\n\t\tvar sqy = q.y * q.y;\r\n\t\tvar sqz = q.z * q.z;\r\n\t\tvar sqw = q.w * q.w;\r\n\r\n\t\torder = order || this._order;\r\n\r\n\t\tif ( order === 'XYZ' ) {\r\n\r\n\t\t\tthis._x = Math.atan2( 2 * ( q.x * q.w - q.y * q.z ), ( sqw - sqx - sqy + sqz ) );\r\n\t\t\tthis._y = Math.asin( clamp( 2 * ( q.x * q.z + q.y * q.w ), - 1, 1 ) );\r\n\t\t\tthis._z = Math.atan2( 2 * ( q.z * q.w - q.x * q.y ), ( sqw + sqx - sqy - sqz ) );\r\n\r\n\t\t} else if ( order === 'YXZ' ) {\r\n\r\n\t\t\tthis._x = Math.asin( clamp( 2 * ( q.x * q.w - q.y * q.z ), - 1, 1 ) );\r\n\t\t\tthis._y = Math.atan2( 2 * ( q.x * q.z + q.y * q.w ), ( sqw - sqx - sqy + sqz ) );\r\n\t\t\tthis._z = Math.atan2( 2 * ( q.x * q.y + q.z * q.w ), ( sqw - sqx + sqy - sqz ) );\r\n\r\n\t\t} else if ( order === 'ZXY' ) {\r\n\r\n\t\t\tthis._x = Math.asin( clamp( 2 * ( q.x * q.w + q.y * q.z ), - 1, 1 ) );\r\n\t\t\tthis._y = Math.atan2( 2 * ( q.y * q.w - q.z * q.x ), ( sqw - sqx - sqy + sqz ) );\r\n\t\t\tthis._z = Math.atan2( 2 * ( q.z * q.w - q.x * q.y ), ( sqw - sqx + sqy - sqz ) );\r\n\r\n\t\t} else if ( order === 'ZYX' ) {\r\n\r\n\t\t\tthis._x = Math.atan2( 2 * ( q.x * q.w + q.z * q.y ), ( sqw - sqx - sqy + sqz ) );\r\n\t\t\tthis._y = Math.asin( clamp( 2 * ( q.y * q.w - q.x * q.z ), - 1, 1 ) );\r\n\t\t\tthis._z = Math.atan2( 2 * ( q.x * q.y + q.z * q.w ), ( sqw + sqx - sqy - sqz ) );\r\n\r\n\t\t} else if ( order === 'YZX' ) {\r\n\r\n\t\t\tthis._x = Math.atan2( 2 * ( q.x * q.w - q.z * q.y ), ( sqw - sqx + sqy - sqz ) );\r\n\t\t\tthis._y = Math.atan2( 2 * ( q.y * q.w - q.x * q.z ), ( sqw + sqx - sqy - sqz ) );\r\n\t\t\tthis._z = Math.asin( clamp( 2 * ( q.x * q.y + q.z * q.w ), - 1, 1 ) );\r\n\r\n\t\t} else if ( order === 'XZY' ) {\r\n\r\n\t\t\tthis._x = Math.atan2( 2 * ( q.x * q.w + q.y * q.z ), ( sqw - sqx + sqy - sqz ) );\r\n\t\t\tthis._y = Math.atan2( 2 * ( q.x * q.z + q.y * q.w ), ( sqw + sqx - sqy - sqz ) );\r\n\t\t\tthis._z = Math.asin( clamp( 2 * ( q.z * q.w - q.x * q.y ), - 1, 1 ) );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tconsole.warn( 'THREE.Euler: .setFromQuaternion() given unsupported order: ' + order )\r\n\r\n\t\t}\r\n\r\n\t\tthis._order = order;\r\n\r\n\t\tif ( update !== false ) this.onChangeCallback();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\treorder: function () {\r\n\r\n\t\t// WARNING: this discards revolution information -bhouston\r\n\r\n\t\tvar q = new THREE.Quaternion();\r\n\r\n\t\treturn function ( newOrder ) {\r\n\r\n\t\t\tq.setFromEuler( this );\r\n\t\t\tthis.setFromQuaternion( q, newOrder );\r\n\r\n\t\t};\r\n\r\n\r\n\t}(),\r\n\r\n\tequals: function ( euler ) {\r\n\r\n\t\treturn ( euler._x === this._x ) && ( euler._y === this._y ) && ( euler._z === this._z ) && ( euler._order === this._order );\r\n\r\n\t},\r\n\r\n\tfromArray: function ( array ) {\r\n\r\n\t\tthis._x = array[ 0 ];\r\n\t\tthis._y = array[ 1 ];\r\n\t\tthis._z = array[ 2 ];\r\n\t\tif ( array[ 3 ] !== undefined ) this._order = array[ 3 ];\r\n\r\n\t\tthis.onChangeCallback();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\ttoArray: function () {\r\n\r\n\t\treturn [ this._x, this._y, this._z, this._order ];\r\n\r\n\t},\r\n\r\n\tonChange: function ( callback ) {\r\n\r\n\t\tthis.onChangeCallback = callback;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tonChangeCallback: function () {},\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new THREE.Euler( this._x, this._y, this._z, this._order );\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/math/Line3.js\r\n\r\n/**\r\n * @author bhouston / http://exocortex.com\r\n */\r\n\r\nTHREE.Line3 = function ( start, end ) {\r\n\r\n\tthis.start = ( start !== undefined ) ? start : new THREE.Vector3();\r\n\tthis.end = ( end !== undefined ) ? end : new THREE.Vector3();\r\n\r\n};\r\n\r\nTHREE.Line3.prototype = {\r\n\r\n\tconstructor: THREE.Line3,\r\n\r\n\tset: function ( start, end ) {\r\n\r\n\t\tthis.start.copy( start );\r\n\t\tthis.end.copy( end );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tcopy: function ( line ) {\r\n\r\n\t\tthis.start.copy( line.start );\r\n\t\tthis.end.copy( line.end );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tcenter: function ( optionalTarget ) {\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\t\treturn result.addVectors( this.start, this.end ).multiplyScalar( 0.5 );\r\n\r\n\t},\r\n\r\n\tdelta: function ( optionalTarget ) {\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\t\treturn result.subVectors( this.end, this.start );\r\n\r\n\t},\r\n\r\n\tdistanceSq: function () {\r\n\r\n\t\treturn this.start.distanceToSquared( this.end );\r\n\r\n\t},\r\n\r\n\tdistance: function () {\r\n\r\n\t\treturn this.start.distanceTo( this.end );\r\n\r\n\t},\r\n\r\n\tat: function ( t, optionalTarget ) {\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\r\n\t\treturn this.delta( result ).multiplyScalar( t ).add( this.start );\r\n\r\n\t},\r\n\r\n\tclosestPointToPointParameter: function () {\r\n\r\n\t\tvar startP = new THREE.Vector3();\r\n\t\tvar startEnd = new THREE.Vector3();\r\n\r\n\t\treturn function ( point, clampToLine ) {\r\n\r\n\t\t\tstartP.subVectors( point, this.start );\r\n\t\t\tstartEnd.subVectors( this.end, this.start );\r\n\r\n\t\t\tvar startEnd2 = startEnd.dot( startEnd );\r\n\t\t\tvar startEnd_startP = startEnd.dot( startP );\r\n\r\n\t\t\tvar t = startEnd_startP / startEnd2;\r\n\r\n\t\t\tif ( clampToLine ) {\r\n\r\n\t\t\t\tt = THREE.Math.clamp( t, 0, 1 );\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn t;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tclosestPointToPoint: function ( point, clampToLine, optionalTarget ) {\r\n\r\n\t\tvar t = this.closestPointToPointParameter( point, clampToLine );\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\r\n\t\treturn this.delta( result ).multiplyScalar( t ).add( this.start );\r\n\r\n\t},\r\n\r\n\tapplyMatrix4: function ( matrix ) {\r\n\r\n\t\tthis.start.applyMatrix4( matrix );\r\n\t\tthis.end.applyMatrix4( matrix );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tequals: function ( line ) {\r\n\r\n\t\treturn line.start.equals( this.start ) && line.end.equals( this.end );\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new THREE.Line3().copy( this );\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/math/Box2.js\r\n\r\n/**\r\n * @author bhouston / http://exocortex.com\r\n */\r\n\r\nTHREE.Box2 = function ( min, max ) {\r\n\r\n\tthis.min = ( min !== undefined ) ? min : new THREE.Vector2( Infinity, Infinity );\r\n\tthis.max = ( max !== undefined ) ? max : new THREE.Vector2( - Infinity, - Infinity );\r\n\r\n};\r\n\r\nTHREE.Box2.prototype = {\r\n\r\n\tconstructor: THREE.Box2,\r\n\r\n\tset: function ( min, max ) {\r\n\r\n\t\tthis.min.copy( min );\r\n\t\tthis.max.copy( max );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetFromPoints: function ( points ) {\r\n\r\n\t\tthis.makeEmpty();\r\n\r\n\t\tfor ( var i = 0, il = points.length; i < il; i ++ ) {\r\n\r\n\t\t\tthis.expandByPoint( points[ i ] )\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetFromCenterAndSize: function () {\r\n\r\n\t\tvar v1 = new THREE.Vector2();\r\n\r\n\t\treturn function ( center, size ) {\r\n\r\n\t\t\tvar halfSize = v1.copy( size ).multiplyScalar( 0.5 );\r\n\t\t\tthis.min.copy( center ).sub( halfSize );\r\n\t\t\tthis.max.copy( center ).add( halfSize );\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tcopy: function ( box ) {\r\n\r\n\t\tthis.min.copy( box.min );\r\n\t\tthis.max.copy( box.max );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmakeEmpty: function () {\r\n\r\n\t\tthis.min.x = this.min.y = Infinity;\r\n\t\tthis.max.x = this.max.y = - Infinity;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tempty: function () {\r\n\r\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\r\n\r\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y );\r\n\r\n\t},\r\n\r\n\tcenter: function ( optionalTarget ) {\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector2();\r\n\t\treturn result.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\r\n\r\n\t},\r\n\r\n\tsize: function ( optionalTarget ) {\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector2();\r\n\t\treturn result.subVectors( this.max, this.min );\r\n\r\n\t},\r\n\r\n\texpandByPoint: function ( point ) {\r\n\r\n\t\tthis.min.min( point );\r\n\t\tthis.max.max( point );\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\texpandByVector: function ( vector ) {\r\n\r\n\t\tthis.min.sub( vector );\r\n\t\tthis.max.add( vector );\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\texpandByScalar: function ( scalar ) {\r\n\r\n\t\tthis.min.addScalar( - scalar );\r\n\t\tthis.max.addScalar( scalar );\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\tcontainsPoint: function ( point ) {\r\n\r\n\t\tif ( point.x < this.min.x || point.x > this.max.x ||\r\n\t\t point.y < this.min.y || point.y > this.max.y ) {\r\n\r\n\t\t\treturn false;\r\n\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\r\n\t},\r\n\r\n\tcontainsBox: function ( box ) {\r\n\r\n\t\tif ( ( this.min.x <= box.min.x ) && ( box.max.x <= this.max.x ) &&\r\n\t\t ( this.min.y <= box.min.y ) && ( box.max.y <= this.max.y ) ) {\r\n\r\n\t\t\treturn true;\r\n\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\r\n\t},\r\n\r\n\tgetParameter: function ( point, optionalTarget ) {\r\n\r\n\t\t// This can potentially have a divide by zero if the box\r\n\t\t// has a size dimension of 0.\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector2();\r\n\r\n\t\treturn result.set(\r\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\r\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y )\r\n\t\t);\r\n\r\n\t},\r\n\r\n\tisIntersectionBox: function ( box ) {\r\n\r\n\t\t// using 6 splitting planes to rule out intersections.\r\n\r\n\t\tif ( box.max.x < this.min.x || box.min.x > this.max.x ||\r\n\t\t box.max.y < this.min.y || box.min.y > this.max.y ) {\r\n\r\n\t\t\treturn false;\r\n\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\r\n\t},\r\n\r\n\tclampPoint: function ( point, optionalTarget ) {\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector2();\r\n\t\treturn result.copy( point ).clamp( this.min, this.max );\r\n\r\n\t},\r\n\r\n\tdistanceToPoint: function () {\r\n\r\n\t\tvar v1 = new THREE.Vector2();\r\n\r\n\t\treturn function ( point ) {\r\n\r\n\t\t\tvar clampedPoint = v1.copy( point ).clamp( this.min, this.max );\r\n\t\t\treturn clampedPoint.sub( point ).length();\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tintersect: function ( box ) {\r\n\r\n\t\tthis.min.max( box.min );\r\n\t\tthis.max.min( box.max );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tunion: function ( box ) {\r\n\r\n\t\tthis.min.min( box.min );\r\n\t\tthis.max.max( box.max );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\ttranslate: function ( offset ) {\r\n\r\n\t\tthis.min.add( offset );\r\n\t\tthis.max.add( offset );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tequals: function ( box ) {\r\n\r\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new THREE.Box2().copy( this );\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/math/Box3.js\r\n\r\n/**\r\n * @author bhouston / http://exocortex.com\r\n * @author WestLangley / http://github.com/WestLangley\r\n */\r\n\r\nTHREE.Box3 = function ( min, max ) {\r\n\r\n\tthis.min = ( min !== undefined ) ? min : new THREE.Vector3( Infinity, Infinity, Infinity );\r\n\tthis.max = ( max !== undefined ) ? max : new THREE.Vector3( - Infinity, - Infinity, - Infinity );\r\n\r\n};\r\n\r\nTHREE.Box3.prototype = {\r\n\r\n\tconstructor: THREE.Box3,\r\n\r\n\tset: function ( min, max ) {\r\n\r\n\t\tthis.min.copy( min );\r\n\t\tthis.max.copy( max );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetFromPoints: function ( points ) {\r\n\r\n\t\tthis.makeEmpty();\r\n\r\n\t\tfor ( var i = 0, il = points.length; i < il; i ++ ) {\r\n\r\n\t\t\tthis.expandByPoint( points[ i ] )\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetFromCenterAndSize: function () {\r\n\r\n\t\tvar v1 = new THREE.Vector3();\r\n\r\n\t\treturn function ( center, size ) {\r\n\r\n\t\t\tvar halfSize = v1.copy( size ).multiplyScalar( 0.5 );\r\n\r\n\t\t\tthis.min.copy( center ).sub( halfSize );\r\n\t\t\tthis.max.copy( center ).add( halfSize );\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tsetFromObject: function () {\r\n\r\n\t\t// Computes the world-axis-aligned bounding box of an object (including its children),\r\n\t\t// accounting for both the object's, and childrens', world transforms\r\n\r\n\t\tvar v1 = new THREE.Vector3();\r\n\r\n\t\treturn function ( object ) {\r\n\r\n\t\t\tvar scope = this;\r\n\r\n\t\t\tobject.updateMatrixWorld( true );\r\n\r\n\t\t\tthis.makeEmpty();\r\n\r\n\t\t\tobject.traverse( function ( node ) {\r\n\r\n\t\t\t\tvar geometry = node.geometry;\r\n\r\n\t\t\t\tif ( geometry !== undefined ) {\r\n\r\n\t\t\t\t\tif ( geometry instanceof THREE.Geometry ) {\r\n\r\n\t\t\t\t\t\tvar vertices = geometry.vertices;\r\n\r\n\t\t\t\t\t\tfor ( var i = 0, il = vertices.length; i < il; i ++ ) {\r\n\r\n\t\t\t\t\t\t\tv1.copy( vertices[ i ] );\r\n\r\n\t\t\t\t\t\t\tv1.applyMatrix4( node.matrixWorld );\r\n\r\n\t\t\t\t\t\t\tscope.expandByPoint( v1 );\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t} else if ( geometry instanceof THREE.BufferGeometry && geometry.attributes[ 'position' ] !== undefined ) {\r\n\r\n\t\t\t\t\t\tvar positions = geometry.attributes[ 'position' ].array;\r\n\r\n\t\t\t\t\t\tfor ( var i = 0, il = positions.length; i < il; i += 3 ) {\r\n\r\n\t\t\t\t\t\t\tv1.set( positions[ i ], positions[ i + 1 ], positions[ i + 2 ] );\r\n\r\n\t\t\t\t\t\t\tv1.applyMatrix4( node.matrixWorld );\r\n\r\n\t\t\t\t\t\t\tscope.expandByPoint( v1 );\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} );\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tcopy: function ( box ) {\r\n\r\n\t\tthis.min.copy( box.min );\r\n\t\tthis.max.copy( box.max );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmakeEmpty: function () {\r\n\r\n\t\tthis.min.x = this.min.y = this.min.z = Infinity;\r\n\t\tthis.max.x = this.max.y = this.max.z = - Infinity;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tempty: function () {\r\n\r\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\r\n\r\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ) || ( this.max.z < this.min.z );\r\n\r\n\t},\r\n\r\n\tcenter: function ( optionalTarget ) {\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\t\treturn result.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\r\n\r\n\t},\r\n\r\n\tsize: function ( optionalTarget ) {\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\t\treturn result.subVectors( this.max, this.min );\r\n\r\n\t},\r\n\r\n\texpandByPoint: function ( point ) {\r\n\r\n\t\tthis.min.min( point );\r\n\t\tthis.max.max( point );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\texpandByVector: function ( vector ) {\r\n\r\n\t\tthis.min.sub( vector );\r\n\t\tthis.max.add( vector );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\texpandByScalar: function ( scalar ) {\r\n\r\n\t\tthis.min.addScalar( - scalar );\r\n\t\tthis.max.addScalar( scalar );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tcontainsPoint: function ( point ) {\r\n\r\n\t\tif ( point.x < this.min.x || point.x > this.max.x ||\r\n\t\t point.y < this.min.y || point.y > this.max.y ||\r\n\t\t point.z < this.min.z || point.z > this.max.z ) {\r\n\r\n\t\t\treturn false;\r\n\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\r\n\t},\r\n\r\n\tcontainsBox: function ( box ) {\r\n\r\n\t\tif ( ( this.min.x <= box.min.x ) && ( box.max.x <= this.max.x ) &&\r\n\t\t\t ( this.min.y <= box.min.y ) && ( box.max.y <= this.max.y ) &&\r\n\t\t\t ( this.min.z <= box.min.z ) && ( box.max.z <= this.max.z ) ) {\r\n\r\n\t\t\treturn true;\r\n\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\r\n\t},\r\n\r\n\tgetParameter: function ( point, optionalTarget ) {\r\n\r\n\t\t// This can potentially have a divide by zero if the box\r\n\t\t// has a size dimension of 0.\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\r\n\t\treturn result.set(\r\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\r\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y ),\r\n\t\t\t( point.z - this.min.z ) / ( this.max.z - this.min.z )\r\n\t\t);\r\n\r\n\t},\r\n\r\n\tisIntersectionBox: function ( box ) {\r\n\r\n\t\t// using 6 splitting planes to rule out intersections.\r\n\r\n\t\tif ( box.max.x < this.min.x || box.min.x > this.max.x ||\r\n\t\t box.max.y < this.min.y || box.min.y > this.max.y ||\r\n\t\t box.max.z < this.min.z || box.min.z > this.max.z ) {\r\n\r\n\t\t\treturn false;\r\n\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\r\n\t},\r\n\r\n\tclampPoint: function ( point, optionalTarget ) {\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\t\treturn result.copy( point ).clamp( this.min, this.max );\r\n\r\n\t},\r\n\r\n\tdistanceToPoint: function () {\r\n\r\n\t\tvar v1 = new THREE.Vector3();\r\n\r\n\t\treturn function ( point ) {\r\n\r\n\t\t\tvar clampedPoint = v1.copy( point ).clamp( this.min, this.max );\r\n\t\t\treturn clampedPoint.sub( point ).length();\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tgetBoundingSphere: function () {\r\n\r\n\t\tvar v1 = new THREE.Vector3();\r\n\r\n\t\treturn function ( optionalTarget ) {\r\n\r\n\t\t\tvar result = optionalTarget || new THREE.Sphere();\r\n\r\n\t\t\tresult.center = this.center();\r\n\t\t\tresult.radius = this.size( v1 ).length() * 0.5;\r\n\r\n\t\t\treturn result;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tintersect: function ( box ) {\r\n\r\n\t\tthis.min.max( box.min );\r\n\t\tthis.max.min( box.max );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tunion: function ( box ) {\r\n\r\n\t\tthis.min.min( box.min );\r\n\t\tthis.max.max( box.max );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tapplyMatrix4: function () {\r\n\r\n\t\tvar points = [\r\n\t\t\tnew THREE.Vector3(),\r\n\t\t\tnew THREE.Vector3(),\r\n\t\t\tnew THREE.Vector3(),\r\n\t\t\tnew THREE.Vector3(),\r\n\t\t\tnew THREE.Vector3(),\r\n\t\t\tnew THREE.Vector3(),\r\n\t\t\tnew THREE.Vector3(),\r\n\t\t\tnew THREE.Vector3()\r\n\t\t];\r\n\r\n\t\treturn function ( matrix ) {\r\n\r\n\t\t\t// NOTE: I am using a binary pattern to specify all 2^3 combinations below\r\n\t\t\tpoints[ 0 ].set( this.min.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 000\r\n\t\t\tpoints[ 1 ].set( this.min.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 001\r\n\t\t\tpoints[ 2 ].set( this.min.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 010\r\n\t\t\tpoints[ 3 ].set( this.min.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 011\r\n\t\t\tpoints[ 4 ].set( this.max.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 100\r\n\t\t\tpoints[ 5 ].set( this.max.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 101\r\n\t\t\tpoints[ 6 ].set( this.max.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 110\r\n\t\t\tpoints[ 7 ].set( this.max.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 111\r\n\r\n\t\t\tthis.makeEmpty();\r\n\t\t\tthis.setFromPoints( points );\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\ttranslate: function ( offset ) {\r\n\r\n\t\tthis.min.add( offset );\r\n\t\tthis.max.add( offset );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tequals: function ( box ) {\r\n\r\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new THREE.Box3().copy( this );\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/math/Matrix3.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author WestLangley / http://github.com/WestLangley\r\n * @author bhouston / http://exocortex.com\r\n */\r\n\r\nTHREE.Matrix3 = function () {\r\n\r\n\tthis.elements = new Float32Array( [\r\n\r\n\t\t1, 0, 0,\r\n\t\t0, 1, 0,\r\n\t\t0, 0, 1\r\n\r\n\t] );\r\n\r\n\tif ( arguments.length > 0 ) {\r\n\r\n\t\tconsole.error( 'THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.' );\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.Matrix3.prototype = {\r\n\r\n\tconstructor: THREE.Matrix3,\r\n\r\n\tset: function ( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {\r\n\r\n\t\tvar te = this.elements;\r\n\r\n\t\tte[ 0 ] = n11; te[ 3 ] = n12; te[ 6 ] = n13;\r\n\t\tte[ 1 ] = n21; te[ 4 ] = n22; te[ 7 ] = n23;\r\n\t\tte[ 2 ] = n31; te[ 5 ] = n32; te[ 8 ] = n33;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tidentity: function () {\r\n\r\n\t\tthis.set(\r\n\r\n\t\t\t1, 0, 0,\r\n\t\t\t0, 1, 0,\r\n\t\t\t0, 0, 1\r\n\r\n\t\t);\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tcopy: function ( m ) {\r\n\r\n\t\tvar me = m.elements;\r\n\r\n\t\tthis.set(\r\n\r\n\t\t\tme[ 0 ], me[ 3 ], me[ 6 ],\r\n\t\t\tme[ 1 ], me[ 4 ], me[ 7 ],\r\n\t\t\tme[ 2 ], me[ 5 ], me[ 8 ]\r\n\r\n\t\t);\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmultiplyVector3: function ( vector ) {\r\n\r\n\t\tconsole.warn( 'THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.' );\r\n\t\treturn vector.applyMatrix3( this );\r\n\r\n\t},\r\n\r\n\tmultiplyVector3Array: function ( a ) {\r\n\r\n\t\tconsole.warn( 'THREE.Matrix3: .multiplyVector3Array() has been renamed. Use matrix.applyToVector3Array( array ) instead.' );\r\n\t\treturn this.applyToVector3Array( a );\r\n\r\n\t},\r\n\r\n\tapplyToVector3Array: function () {\r\n\r\n\t\tvar v1 = new THREE.Vector3();\r\n\r\n\t\treturn function ( array, offset, length ) {\r\n\r\n\t\t\tif ( offset === undefined ) offset = 0;\r\n\t\t\tif ( length === undefined ) length = array.length;\r\n\r\n\t\t\tfor ( var i = 0, j = offset, il; i < length; i += 3, j += 3 ) {\r\n\r\n\t\t\t\tv1.x = array[ j ];\r\n\t\t\t\tv1.y = array[ j + 1 ];\r\n\t\t\t\tv1.z = array[ j + 2 ];\r\n\r\n\t\t\t\tv1.applyMatrix3( this );\r\n\r\n\t\t\t\tarray[ j ] = v1.x;\r\n\t\t\t\tarray[ j + 1 ] = v1.y;\r\n\t\t\t\tarray[ j + 2 ] = v1.z;\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn array;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tmultiplyScalar: function ( s ) {\r\n\r\n\t\tvar te = this.elements;\r\n\r\n\t\tte[ 0 ] *= s; te[ 3 ] *= s; te[ 6 ] *= s;\r\n\t\tte[ 1 ] *= s; te[ 4 ] *= s; te[ 7 ] *= s;\r\n\t\tte[ 2 ] *= s; te[ 5 ] *= s; te[ 8 ] *= s;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tdeterminant: function () {\r\n\r\n\t\tvar te = this.elements;\r\n\r\n\t\tvar a = te[ 0 ], b = te[ 1 ], c = te[ 2 ],\r\n\t\t\td = te[ 3 ], e = te[ 4 ], f = te[ 5 ],\r\n\t\t\tg = te[ 6 ], h = te[ 7 ], i = te[ 8 ];\r\n\r\n\t\treturn a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g;\r\n\r\n\t},\r\n\r\n\tgetInverse: function ( matrix, throwOnInvertible ) {\r\n\r\n\t\t// input: THREE.Matrix4\r\n\t\t// ( based on http://code.google.com/p/webgl-mjs/ )\r\n\r\n\t\tvar me = matrix.elements;\r\n\t\tvar te = this.elements;\r\n\r\n\t\tte[ 0 ] = me[ 10 ] * me[ 5 ] - me[ 6 ] * me[ 9 ];\r\n\t\tte[ 1 ] = - me[ 10 ] * me[ 1 ] + me[ 2 ] * me[ 9 ];\r\n\t\tte[ 2 ] = me[ 6 ] * me[ 1 ] - me[ 2 ] * me[ 5 ];\r\n\t\tte[ 3 ] = - me[ 10 ] * me[ 4 ] + me[ 6 ] * me[ 8 ];\r\n\t\tte[ 4 ] = me[ 10 ] * me[ 0 ] - me[ 2 ] * me[ 8 ];\r\n\t\tte[ 5 ] = - me[ 6 ] * me[ 0 ] + me[ 2 ] * me[ 4 ];\r\n\t\tte[ 6 ] = me[ 9 ] * me[ 4 ] - me[ 5 ] * me[ 8 ];\r\n\t\tte[ 7 ] = - me[ 9 ] * me[ 0 ] + me[ 1 ] * me[ 8 ];\r\n\t\tte[ 8 ] = me[ 5 ] * me[ 0 ] - me[ 1 ] * me[ 4 ];\r\n\r\n\t\tvar det = me[ 0 ] * te[ 0 ] + me[ 1 ] * te[ 3 ] + me[ 2 ] * te[ 6 ];\r\n\r\n\t\t// no inverse\r\n\r\n\t\tif ( det === 0 ) {\r\n\r\n\t\t\tvar msg = \"Matrix3.getInverse(): can't invert matrix, determinant is 0\";\r\n\r\n\t\t\tif ( throwOnInvertible || false ) {\r\n\r\n\t\t\t\tthrow new Error( msg );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tconsole.warn( msg );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tthis.identity();\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t}\r\n\r\n\t\tthis.multiplyScalar( 1.0 / det );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\ttranspose: function () {\r\n\r\n\t\tvar tmp, m = this.elements;\r\n\r\n\t\ttmp = m[ 1 ]; m[ 1 ] = m[ 3 ]; m[ 3 ] = tmp;\r\n\t\ttmp = m[ 2 ]; m[ 2 ] = m[ 6 ]; m[ 6 ] = tmp;\r\n\t\ttmp = m[ 5 ]; m[ 5 ] = m[ 7 ]; m[ 7 ] = tmp;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tflattenToArrayOffset: function ( array, offset ) {\r\n\r\n\t\tvar te = this.elements;\r\n\r\n\t\tarray[ offset ] = te[ 0 ];\r\n\t\tarray[ offset + 1 ] = te[ 1 ];\r\n\t\tarray[ offset + 2 ] = te[ 2 ];\r\n\r\n\t\tarray[ offset + 3 ] = te[ 3 ];\r\n\t\tarray[ offset + 4 ] = te[ 4 ];\r\n\t\tarray[ offset + 5 ] = te[ 5 ];\r\n\r\n\t\tarray[ offset + 6 ] = te[ 6 ];\r\n\t\tarray[ offset + 7 ] = te[ 7 ];\r\n\t\tarray[ offset + 8 ] = te[ 8 ];\r\n\r\n\t\treturn array;\r\n\r\n\t},\r\n\r\n\tgetNormalMatrix: function ( m ) {\r\n\r\n\t\t// input: THREE.Matrix4\r\n\r\n\t\tthis.getInverse( m ).transpose();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\ttransposeIntoArray: function ( r ) {\r\n\r\n\t\tvar m = this.elements;\r\n\r\n\t\tr[ 0 ] = m[ 0 ];\r\n\t\tr[ 1 ] = m[ 3 ];\r\n\t\tr[ 2 ] = m[ 6 ];\r\n\t\tr[ 3 ] = m[ 1 ];\r\n\t\tr[ 4 ] = m[ 4 ];\r\n\t\tr[ 5 ] = m[ 7 ];\r\n\t\tr[ 6 ] = m[ 2 ];\r\n\t\tr[ 7 ] = m[ 5 ];\r\n\t\tr[ 8 ] = m[ 8 ];\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tfromArray: function ( array ) {\r\n\r\n\t\tthis.elements.set( array );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\ttoArray: function () {\r\n\r\n\t\tvar te = this.elements;\r\n\r\n\t\treturn [\r\n\t\t\tte[ 0 ], te[ 1 ], te[ 2 ],\r\n\t\t\tte[ 3 ], te[ 4 ], te[ 5 ],\r\n\t\t\tte[ 6 ], te[ 7 ], te[ 8 ]\r\n\t\t];\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new THREE.Matrix3().fromArray( this.elements );\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/math/Matrix4.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author supereggbert / http://www.paulbrunt.co.uk/\r\n * @author philogb / http://blog.thejit.org/\r\n * @author jordi_ros / http://plattsoft.com\r\n * @author D1plo1d / http://github.com/D1plo1d\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author mikael emtinger / http://gomo.se/\r\n * @author timknip / http://www.floorplanner.com/\r\n * @author bhouston / http://exocortex.com\r\n * @author WestLangley / http://github.com/WestLangley\r\n */\r\n\r\nTHREE.Matrix4 = function () {\r\n\r\n\tthis.elements = new Float32Array( [\r\n\r\n\t\t1, 0, 0, 0,\r\n\t\t0, 1, 0, 0,\r\n\t\t0, 0, 1, 0,\r\n\t\t0, 0, 0, 1\r\n\r\n\t] );\r\n\r\n\tif ( arguments.length > 0 ) {\r\n\r\n\t\tconsole.error( 'THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.' );\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.Matrix4.prototype = {\r\n\r\n\tconstructor: THREE.Matrix4,\r\n\r\n\tset: function ( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {\r\n\r\n\t\tvar te = this.elements;\r\n\r\n\t\tte[ 0 ] = n11; te[ 4 ] = n12; te[ 8 ] = n13; te[ 12 ] = n14;\r\n\t\tte[ 1 ] = n21; te[ 5 ] = n22; te[ 9 ] = n23; te[ 13 ] = n24;\r\n\t\tte[ 2 ] = n31; te[ 6 ] = n32; te[ 10 ] = n33; te[ 14 ] = n34;\r\n\t\tte[ 3 ] = n41; te[ 7 ] = n42; te[ 11 ] = n43; te[ 15 ] = n44;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tidentity: function () {\r\n\r\n\t\tthis.set(\r\n\r\n\t\t\t1, 0, 0, 0,\r\n\t\t\t0, 1, 0, 0,\r\n\t\t\t0, 0, 1, 0,\r\n\t\t\t0, 0, 0, 1\r\n\r\n\t\t);\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tcopy: function ( m ) {\r\n\r\n\t\tthis.elements.set( m.elements );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\textractPosition: function ( m ) {\r\n\r\n\t\tconsole.warn( 'THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().' );\r\n\t\treturn this.copyPosition( m );\r\n\r\n\t},\r\n\r\n\tcopyPosition: function ( m ) {\r\n\r\n\t\tvar te = this.elements;\r\n\t\tvar me = m.elements;\r\n\r\n\t\tte[ 12 ] = me[ 12 ];\r\n\t\tte[ 13 ] = me[ 13 ];\r\n\t\tte[ 14 ] = me[ 14 ];\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\textractRotation: function () {\r\n\r\n\t\tvar v1 = new THREE.Vector3();\r\n\r\n\t\treturn function ( m ) {\r\n\r\n\t\t\tvar te = this.elements;\r\n\t\t\tvar me = m.elements;\r\n\r\n\t\t\tvar scaleX = 1 / v1.set( me[ 0 ], me[ 1 ], me[ 2 ] ).length();\r\n\t\t\tvar scaleY = 1 / v1.set( me[ 4 ], me[ 5 ], me[ 6 ] ).length();\r\n\t\t\tvar scaleZ = 1 / v1.set( me[ 8 ], me[ 9 ], me[ 10 ] ).length();\r\n\r\n\t\t\tte[ 0 ] = me[ 0 ] * scaleX;\r\n\t\t\tte[ 1 ] = me[ 1 ] * scaleX;\r\n\t\t\tte[ 2 ] = me[ 2 ] * scaleX;\r\n\r\n\t\t\tte[ 4 ] = me[ 4 ] * scaleY;\r\n\t\t\tte[ 5 ] = me[ 5 ] * scaleY;\r\n\t\t\tte[ 6 ] = me[ 6 ] * scaleY;\r\n\r\n\t\t\tte[ 8 ] = me[ 8 ] * scaleZ;\r\n\t\t\tte[ 9 ] = me[ 9 ] * scaleZ;\r\n\t\t\tte[ 10 ] = me[ 10 ] * scaleZ;\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tmakeRotationFromEuler: function ( euler ) {\r\n\r\n\t\tif ( euler instanceof THREE.Euler === false ) {\r\n\r\n\t\t\tconsole.error( 'THREE.Matrix: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.' );\r\n\r\n\t\t}\r\n\r\n\t\tvar te = this.elements;\r\n\r\n\t\tvar x = euler.x, y = euler.y, z = euler.z;\r\n\t\tvar a = Math.cos( x ), b = Math.sin( x );\r\n\t\tvar c = Math.cos( y ), d = Math.sin( y );\r\n\t\tvar e = Math.cos( z ), f = Math.sin( z );\r\n\r\n\t\tif ( euler.order === 'XYZ' ) {\r\n\r\n\t\t\tvar ae = a * e, af = a * f, be = b * e, bf = b * f;\r\n\r\n\t\t\tte[ 0 ] = c * e;\r\n\t\t\tte[ 4 ] = - c * f;\r\n\t\t\tte[ 8 ] = d;\r\n\r\n\t\t\tte[ 1 ] = af + be * d;\r\n\t\t\tte[ 5 ] = ae - bf * d;\r\n\t\t\tte[ 9 ] = - b * c;\r\n\r\n\t\t\tte[ 2 ] = bf - ae * d;\r\n\t\t\tte[ 6 ] = be + af * d;\r\n\t\t\tte[ 10 ] = a * c;\r\n\r\n\t\t} else if ( euler.order === 'YXZ' ) {\r\n\r\n\t\t\tvar ce = c * e, cf = c * f, de = d * e, df = d * f;\r\n\r\n\t\t\tte[ 0 ] = ce + df * b;\r\n\t\t\tte[ 4 ] = de * b - cf;\r\n\t\t\tte[ 8 ] = a * d;\r\n\r\n\t\t\tte[ 1 ] = a * f;\r\n\t\t\tte[ 5 ] = a * e;\r\n\t\t\tte[ 9 ] = - b;\r\n\r\n\t\t\tte[ 2 ] = cf * b - de;\r\n\t\t\tte[ 6 ] = df + ce * b;\r\n\t\t\tte[ 10 ] = a * c;\r\n\r\n\t\t} else if ( euler.order === 'ZXY' ) {\r\n\r\n\t\t\tvar ce = c * e, cf = c * f, de = d * e, df = d * f;\r\n\r\n\t\t\tte[ 0 ] = ce - df * b;\r\n\t\t\tte[ 4 ] = - a * f;\r\n\t\t\tte[ 8 ] = de + cf * b;\r\n\r\n\t\t\tte[ 1 ] = cf + de * b;\r\n\t\t\tte[ 5 ] = a * e;\r\n\t\t\tte[ 9 ] = df - ce * b;\r\n\r\n\t\t\tte[ 2 ] = - a * d;\r\n\t\t\tte[ 6 ] = b;\r\n\t\t\tte[ 10 ] = a * c;\r\n\r\n\t\t} else if ( euler.order === 'ZYX' ) {\r\n\r\n\t\t\tvar ae = a * e, af = a * f, be = b * e, bf = b * f;\r\n\r\n\t\t\tte[ 0 ] = c * e;\r\n\t\t\tte[ 4 ] = be * d - af;\r\n\t\t\tte[ 8 ] = ae * d + bf;\r\n\r\n\t\t\tte[ 1 ] = c * f;\r\n\t\t\tte[ 5 ] = bf * d + ae;\r\n\t\t\tte[ 9 ] = af * d - be;\r\n\r\n\t\t\tte[ 2 ] = - d;\r\n\t\t\tte[ 6 ] = b * c;\r\n\t\t\tte[ 10 ] = a * c;\r\n\r\n\t\t} else if ( euler.order === 'YZX' ) {\r\n\r\n\t\t\tvar ac = a * c, ad = a * d, bc = b * c, bd = b * d;\r\n\r\n\t\t\tte[ 0 ] = c * e;\r\n\t\t\tte[ 4 ] = bd - ac * f;\r\n\t\t\tte[ 8 ] = bc * f + ad;\r\n\r\n\t\t\tte[ 1 ] = f;\r\n\t\t\tte[ 5 ] = a * e;\r\n\t\t\tte[ 9 ] = - b * e;\r\n\r\n\t\t\tte[ 2 ] = - d * e;\r\n\t\t\tte[ 6 ] = ad * f + bc;\r\n\t\t\tte[ 10 ] = ac - bd * f;\r\n\r\n\t\t} else if ( euler.order === 'XZY' ) {\r\n\r\n\t\t\tvar ac = a * c, ad = a * d, bc = b * c, bd = b * d;\r\n\r\n\t\t\tte[ 0 ] = c * e;\r\n\t\t\tte[ 4 ] = - f;\r\n\t\t\tte[ 8 ] = d * e;\r\n\r\n\t\t\tte[ 1 ] = ac * f + bd;\r\n\t\t\tte[ 5 ] = a * e;\r\n\t\t\tte[ 9 ] = ad * f - bc;\r\n\r\n\t\t\tte[ 2 ] = bc * f - ad;\r\n\t\t\tte[ 6 ] = b * e;\r\n\t\t\tte[ 10 ] = bd * f + ac;\r\n\r\n\t\t}\r\n\r\n\t\t// last column\r\n\t\tte[ 3 ] = 0;\r\n\t\tte[ 7 ] = 0;\r\n\t\tte[ 11 ] = 0;\r\n\r\n\t\t// bottom row\r\n\t\tte[ 12 ] = 0;\r\n\t\tte[ 13 ] = 0;\r\n\t\tte[ 14 ] = 0;\r\n\t\tte[ 15 ] = 1;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetRotationFromQuaternion: function ( q ) {\r\n\r\n\t\tconsole.warn( 'THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().' );\r\n\r\n\t\treturn this.makeRotationFromQuaternion( q );\r\n\r\n\t},\r\n\r\n\tmakeRotationFromQuaternion: function ( q ) {\r\n\r\n\t\tvar te = this.elements;\r\n\r\n\t\tvar x = q.x, y = q.y, z = q.z, w = q.w;\r\n\t\tvar x2 = x + x, y2 = y + y, z2 = z + z;\r\n\t\tvar xx = x * x2, xy = x * y2, xz = x * z2;\r\n\t\tvar yy = y * y2, yz = y * z2, zz = z * z2;\r\n\t\tvar wx = w * x2, wy = w * y2, wz = w * z2;\r\n\r\n\t\tte[ 0 ] = 1 - ( yy + zz );\r\n\t\tte[ 4 ] = xy - wz;\r\n\t\tte[ 8 ] = xz + wy;\r\n\r\n\t\tte[ 1 ] = xy + wz;\r\n\t\tte[ 5 ] = 1 - ( xx + zz );\r\n\t\tte[ 9 ] = yz - wx;\r\n\r\n\t\tte[ 2 ] = xz - wy;\r\n\t\tte[ 6 ] = yz + wx;\r\n\t\tte[ 10 ] = 1 - ( xx + yy );\r\n\r\n\t\t// last column\r\n\t\tte[ 3 ] = 0;\r\n\t\tte[ 7 ] = 0;\r\n\t\tte[ 11 ] = 0;\r\n\r\n\t\t// bottom row\r\n\t\tte[ 12 ] = 0;\r\n\t\tte[ 13 ] = 0;\r\n\t\tte[ 14 ] = 0;\r\n\t\tte[ 15 ] = 1;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tlookAt: function () {\r\n\r\n\t\tvar x = new THREE.Vector3();\r\n\t\tvar y = new THREE.Vector3();\r\n\t\tvar z = new THREE.Vector3();\r\n\r\n\t\treturn function ( eye, target, up ) {\r\n\r\n\t\t\tvar te = this.elements;\r\n\r\n\t\t\tz.subVectors( eye, target ).normalize();\r\n\r\n\t\t\tif ( z.length() === 0 ) {\r\n\r\n\t\t\t\tz.z = 1;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tx.crossVectors( up, z ).normalize();\r\n\r\n\t\t\tif ( x.length() === 0 ) {\r\n\r\n\t\t\t\tz.x += 0.0001;\r\n\t\t\t\tx.crossVectors( up, z ).normalize();\r\n\r\n\t\t\t}\r\n\r\n\t\t\ty.crossVectors( z, x );\r\n\r\n\r\n\t\t\tte[ 0 ] = x.x; te[ 4 ] = y.x; te[ 8 ] = z.x;\r\n\t\t\tte[ 1 ] = x.y; te[ 5 ] = y.y; te[ 9 ] = z.y;\r\n\t\t\tte[ 2 ] = x.z; te[ 6 ] = y.z; te[ 10 ] = z.z;\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tmultiply: function ( m, n ) {\r\n\r\n\t\tif ( n !== undefined ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.' );\r\n\t\t\treturn this.multiplyMatrices( m, n );\r\n\r\n\t\t}\r\n\r\n\t\treturn this.multiplyMatrices( this, m );\r\n\r\n\t},\r\n\r\n\tmultiplyMatrices: function ( a, b ) {\r\n\r\n\t\tvar ae = a.elements;\r\n\t\tvar be = b.elements;\r\n\t\tvar te = this.elements;\r\n\r\n\t\tvar a11 = ae[ 0 ], a12 = ae[ 4 ], a13 = ae[ 8 ], a14 = ae[ 12 ];\r\n\t\tvar a21 = ae[ 1 ], a22 = ae[ 5 ], a23 = ae[ 9 ], a24 = ae[ 13 ];\r\n\t\tvar a31 = ae[ 2 ], a32 = ae[ 6 ], a33 = ae[ 10 ], a34 = ae[ 14 ];\r\n\t\tvar a41 = ae[ 3 ], a42 = ae[ 7 ], a43 = ae[ 11 ], a44 = ae[ 15 ];\r\n\r\n\t\tvar b11 = be[ 0 ], b12 = be[ 4 ], b13 = be[ 8 ], b14 = be[ 12 ];\r\n\t\tvar b21 = be[ 1 ], b22 = be[ 5 ], b23 = be[ 9 ], b24 = be[ 13 ];\r\n\t\tvar b31 = be[ 2 ], b32 = be[ 6 ], b33 = be[ 10 ], b34 = be[ 14 ];\r\n\t\tvar b41 = be[ 3 ], b42 = be[ 7 ], b43 = be[ 11 ], b44 = be[ 15 ];\r\n\r\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\r\n\t\tte[ 4 ] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\r\n\t\tte[ 8 ] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\r\n\t\tte[ 12 ] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\r\n\r\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\r\n\t\tte[ 5 ] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\r\n\t\tte[ 9 ] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\r\n\t\tte[ 13 ] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\r\n\r\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\r\n\t\tte[ 6 ] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\r\n\t\tte[ 10 ] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\r\n\t\tte[ 14 ] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\r\n\r\n\t\tte[ 3 ] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\r\n\t\tte[ 7 ] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\r\n\t\tte[ 11 ] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\r\n\t\tte[ 15 ] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmultiplyToArray: function ( a, b, r ) {\r\n\r\n\t\tvar te = this.elements;\r\n\r\n\t\tthis.multiplyMatrices( a, b );\r\n\r\n\t\tr[ 0 ] = te[ 0 ]; r[ 1 ] = te[ 1 ]; r[ 2 ] = te[ 2 ]; r[ 3 ] = te[ 3 ];\r\n\t\tr[ 4 ] = te[ 4 ]; r[ 5 ] = te[ 5 ]; r[ 6 ] = te[ 6 ]; r[ 7 ] = te[ 7 ];\r\n\t\tr[ 8 ] = te[ 8 ]; r[ 9 ] = te[ 9 ]; r[ 10 ] = te[ 10 ]; r[ 11 ] = te[ 11 ];\r\n\t\tr[ 12 ] = te[ 12 ]; r[ 13 ] = te[ 13 ]; r[ 14 ] = te[ 14 ]; r[ 15 ] = te[ 15 ];\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmultiplyScalar: function ( s ) {\r\n\r\n\t\tvar te = this.elements;\r\n\r\n\t\tte[ 0 ] *= s; te[ 4 ] *= s; te[ 8 ] *= s; te[ 12 ] *= s;\r\n\t\tte[ 1 ] *= s; te[ 5 ] *= s; te[ 9 ] *= s; te[ 13 ] *= s;\r\n\t\tte[ 2 ] *= s; te[ 6 ] *= s; te[ 10 ] *= s; te[ 14 ] *= s;\r\n\t\tte[ 3 ] *= s; te[ 7 ] *= s; te[ 11 ] *= s; te[ 15 ] *= s;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmultiplyVector3: function ( vector ) {\r\n\r\n\t\tconsole.warn( 'THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) or vector.applyProjection( matrix ) instead.' );\r\n\t\treturn vector.applyProjection( this );\r\n\r\n\t},\r\n\r\n\tmultiplyVector4: function ( vector ) {\r\n\r\n\t\tconsole.warn( 'THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\r\n\t\treturn vector.applyMatrix4( this );\r\n\r\n\t},\r\n\r\n\tmultiplyVector3Array: function ( a ) {\r\n\r\n\t\tconsole.warn( 'THREE.Matrix4: .multiplyVector3Array() has been renamed. Use matrix.applyToVector3Array( array ) instead.' );\r\n\t\treturn this.applyToVector3Array( a );\r\n\r\n\t},\r\n\r\n\tapplyToVector3Array: function () {\r\n\r\n\t\tvar v1 = new THREE.Vector3();\r\n\r\n\t\treturn function ( array, offset, length ) {\r\n\r\n\t\t\tif ( offset === undefined ) offset = 0;\r\n\t\t\tif ( length === undefined ) length = array.length;\r\n\r\n\t\t\tfor ( var i = 0, j = offset, il; i < length; i += 3, j += 3 ) {\r\n\r\n\t\t\t\tv1.x = array[ j ];\r\n\t\t\t\tv1.y = array[ j + 1 ];\r\n\t\t\t\tv1.z = array[ j + 2 ];\r\n\r\n\t\t\t\tv1.applyMatrix4( this );\r\n\r\n\t\t\t\tarray[ j ] = v1.x;\r\n\t\t\t\tarray[ j + 1 ] = v1.y;\r\n\t\t\t\tarray[ j + 2 ] = v1.z;\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn array;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\trotateAxis: function ( v ) {\r\n\r\n\t\tconsole.warn( 'THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.' );\r\n\r\n\t\tv.transformDirection( this );\r\n\r\n\t},\r\n\r\n\tcrossVector: function ( vector ) {\r\n\r\n\t\tconsole.warn( 'THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\r\n\t\treturn vector.applyMatrix4( this );\r\n\r\n\t},\r\n\r\n\tdeterminant: function () {\r\n\r\n\t\tvar te = this.elements;\r\n\r\n\t\tvar n11 = te[ 0 ], n12 = te[ 4 ], n13 = te[ 8 ], n14 = te[ 12 ];\r\n\t\tvar n21 = te[ 1 ], n22 = te[ 5 ], n23 = te[ 9 ], n24 = te[ 13 ];\r\n\t\tvar n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ];\r\n\t\tvar n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ];\r\n\r\n\t\t//TODO: make this more efficient\r\n\t\t//( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )\r\n\r\n\t\treturn (\r\n\t\t\tn41 * (\r\n\t\t\t\t+ n14 * n23 * n32\r\n\t\t\t\t - n13 * n24 * n32\r\n\t\t\t\t - n14 * n22 * n33\r\n\t\t\t\t + n12 * n24 * n33\r\n\t\t\t\t + n13 * n22 * n34\r\n\t\t\t\t - n12 * n23 * n34\r\n\t\t\t) +\r\n\t\t\tn42 * (\r\n\t\t\t\t+ n11 * n23 * n34\r\n\t\t\t\t - n11 * n24 * n33\r\n\t\t\t\t + n14 * n21 * n33\r\n\t\t\t\t - n13 * n21 * n34\r\n\t\t\t\t + n13 * n24 * n31\r\n\t\t\t\t - n14 * n23 * n31\r\n\t\t\t) +\r\n\t\t\tn43 * (\r\n\t\t\t\t+ n11 * n24 * n32\r\n\t\t\t\t - n11 * n22 * n34\r\n\t\t\t\t - n14 * n21 * n32\r\n\t\t\t\t + n12 * n21 * n34\r\n\t\t\t\t + n14 * n22 * n31\r\n\t\t\t\t - n12 * n24 * n31\r\n\t\t\t) +\r\n\t\t\tn44 * (\r\n\t\t\t\t- n13 * n22 * n31\r\n\t\t\t\t - n11 * n23 * n32\r\n\t\t\t\t + n11 * n22 * n33\r\n\t\t\t\t + n13 * n21 * n32\r\n\t\t\t\t - n12 * n21 * n33\r\n\t\t\t\t + n12 * n23 * n31\r\n\t\t\t)\r\n\r\n\t\t);\r\n\r\n\t},\r\n\r\n\ttranspose: function () {\r\n\r\n\t\tvar te = this.elements;\r\n\t\tvar tmp;\r\n\r\n\t\ttmp = te[ 1 ]; te[ 1 ] = te[ 4 ]; te[ 4 ] = tmp;\r\n\t\ttmp = te[ 2 ]; te[ 2 ] = te[ 8 ]; te[ 8 ] = tmp;\r\n\t\ttmp = te[ 6 ]; te[ 6 ] = te[ 9 ]; te[ 9 ] = tmp;\r\n\r\n\t\ttmp = te[ 3 ]; te[ 3 ] = te[ 12 ]; te[ 12 ] = tmp;\r\n\t\ttmp = te[ 7 ]; te[ 7 ] = te[ 13 ]; te[ 13 ] = tmp;\r\n\t\ttmp = te[ 11 ]; te[ 11 ] = te[ 14 ]; te[ 14 ] = tmp;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tflattenToArrayOffset: function ( array, offset ) {\r\n\r\n\t\tvar te = this.elements;\r\n\r\n\t\tarray[ offset ] = te[ 0 ];\r\n\t\tarray[ offset + 1 ] = te[ 1 ];\r\n\t\tarray[ offset + 2 ] = te[ 2 ];\r\n\t\tarray[ offset + 3 ] = te[ 3 ];\r\n\r\n\t\tarray[ offset + 4 ] = te[ 4 ];\r\n\t\tarray[ offset + 5 ] = te[ 5 ];\r\n\t\tarray[ offset + 6 ] = te[ 6 ];\r\n\t\tarray[ offset + 7 ] = te[ 7 ];\r\n\r\n\t\tarray[ offset + 8 ] = te[ 8 ];\r\n\t\tarray[ offset + 9 ] = te[ 9 ];\r\n\t\tarray[ offset + 10 ] = te[ 10 ];\r\n\t\tarray[ offset + 11 ] = te[ 11 ];\r\n\r\n\t\tarray[ offset + 12 ] = te[ 12 ];\r\n\t\tarray[ offset + 13 ] = te[ 13 ];\r\n\t\tarray[ offset + 14 ] = te[ 14 ];\r\n\t\tarray[ offset + 15 ] = te[ 15 ];\r\n\r\n\t\treturn array;\r\n\r\n\t},\r\n\r\n\tgetPosition: function () {\r\n\r\n\t\tvar v1 = new THREE.Vector3();\r\n\r\n\t\treturn function () {\r\n\r\n\t\t\tconsole.warn( 'THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.' );\r\n\r\n\t\t\tvar te = this.elements;\r\n\t\t\treturn v1.set( te[ 12 ], te[ 13 ], te[ 14 ] );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tsetPosition: function ( v ) {\r\n\r\n\t\tvar te = this.elements;\r\n\r\n\t\tte[ 12 ] = v.x;\r\n\t\tte[ 13 ] = v.y;\r\n\t\tte[ 14 ] = v.z;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tgetInverse: function ( m, throwOnInvertible ) {\r\n\r\n\t\t// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\r\n\t\tvar te = this.elements;\r\n\t\tvar me = m.elements;\r\n\r\n\t\tvar n11 = me[ 0 ], n12 = me[ 4 ], n13 = me[ 8 ], n14 = me[ 12 ];\r\n\t\tvar n21 = me[ 1 ], n22 = me[ 5 ], n23 = me[ 9 ], n24 = me[ 13 ];\r\n\t\tvar n31 = me[ 2 ], n32 = me[ 6 ], n33 = me[ 10 ], n34 = me[ 14 ];\r\n\t\tvar n41 = me[ 3 ], n42 = me[ 7 ], n43 = me[ 11 ], n44 = me[ 15 ];\r\n\r\n\t\tte[ 0 ] = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44;\r\n\t\tte[ 4 ] = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44;\r\n\t\tte[ 8 ] = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44;\r\n\t\tte[ 12 ] = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;\r\n\t\tte[ 1 ] = n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44;\r\n\t\tte[ 5 ] = n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44;\r\n\t\tte[ 9 ] = n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44;\r\n\t\tte[ 13 ] = n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34;\r\n\t\tte[ 2 ] = n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44;\r\n\t\tte[ 6 ] = n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44;\r\n\t\tte[ 10 ] = n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44;\r\n\t\tte[ 14 ] = n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34;\r\n\t\tte[ 3 ] = n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43;\r\n\t\tte[ 7 ] = n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43;\r\n\t\tte[ 11 ] = n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43;\r\n\t\tte[ 15 ] = n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33;\r\n\r\n\t\tvar det = n11 * te[ 0 ] + n21 * te[ 4 ] + n31 * te[ 8 ] + n41 * te[ 12 ];\r\n\r\n\t\tif ( det == 0 ) {\r\n\r\n\t\t\tvar msg = \"Matrix4.getInverse(): can't invert matrix, determinant is 0\";\r\n\r\n\t\t\tif ( throwOnInvertible || false ) {\r\n\r\n\t\t\t\tthrow new Error( msg );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tconsole.warn( msg );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tthis.identity();\r\n\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tthis.multiplyScalar( 1 / det );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\ttranslate: function ( v ) {\r\n\r\n\t\tconsole.warn( 'THREE.Matrix4: .translate() has been removed.' );\r\n\r\n\t},\r\n\r\n\trotateX: function ( angle ) {\r\n\r\n\t\tconsole.warn( 'THREE.Matrix4: .rotateX() has been removed.' );\r\n\r\n\t},\r\n\r\n\trotateY: function ( angle ) {\r\n\r\n\t\tconsole.warn( 'THREE.Matrix4: .rotateY() has been removed.' );\r\n\r\n\t},\r\n\r\n\trotateZ: function ( angle ) {\r\n\r\n\t\tconsole.warn( 'THREE.Matrix4: .rotateZ() has been removed.' );\r\n\r\n\t},\r\n\r\n\trotateByAxis: function ( axis, angle ) {\r\n\r\n\t\tconsole.warn( 'THREE.Matrix4: .rotateByAxis() has been removed.' );\r\n\r\n\t},\r\n\r\n\tscale: function ( v ) {\r\n\r\n\t\tvar te = this.elements;\r\n\t\tvar x = v.x, y = v.y, z = v.z;\r\n\r\n\t\tte[ 0 ] *= x; te[ 4 ] *= y; te[ 8 ] *= z;\r\n\t\tte[ 1 ] *= x; te[ 5 ] *= y; te[ 9 ] *= z;\r\n\t\tte[ 2 ] *= x; te[ 6 ] *= y; te[ 10 ] *= z;\r\n\t\tte[ 3 ] *= x; te[ 7 ] *= y; te[ 11 ] *= z;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tgetMaxScaleOnAxis: function () {\r\n\r\n\t\tvar te = this.elements;\r\n\r\n\t\tvar scaleXSq = te[ 0 ] * te[ 0 ] + te[ 1 ] * te[ 1 ] + te[ 2 ] * te[ 2 ];\r\n\t\tvar scaleYSq = te[ 4 ] * te[ 4 ] + te[ 5 ] * te[ 5 ] + te[ 6 ] * te[ 6 ];\r\n\t\tvar scaleZSq = te[ 8 ] * te[ 8 ] + te[ 9 ] * te[ 9 ] + te[ 10 ] * te[ 10 ];\r\n\r\n\t\treturn Math.sqrt( Math.max( scaleXSq, Math.max( scaleYSq, scaleZSq ) ) );\r\n\r\n\t},\r\n\r\n\tmakeTranslation: function ( x, y, z ) {\r\n\r\n\t\tthis.set(\r\n\r\n\t\t\t1, 0, 0, x,\r\n\t\t\t0, 1, 0, y,\r\n\t\t\t0, 0, 1, z,\r\n\t\t\t0, 0, 0, 1\r\n\r\n\t\t);\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmakeRotationX: function ( theta ) {\r\n\r\n\t\tvar c = Math.cos( theta ), s = Math.sin( theta );\r\n\r\n\t\tthis.set(\r\n\r\n\t\t\t1, 0, 0, 0,\r\n\t\t\t0, c, - s, 0,\r\n\t\t\t0, s, c, 0,\r\n\t\t\t0, 0, 0, 1\r\n\r\n\t\t);\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmakeRotationY: function ( theta ) {\r\n\r\n\t\tvar c = Math.cos( theta ), s = Math.sin( theta );\r\n\r\n\t\tthis.set(\r\n\r\n\t\t\t c, 0, s, 0,\r\n\t\t\t 0, 1, 0, 0,\r\n\t\t\t- s, 0, c, 0,\r\n\t\t\t 0, 0, 0, 1\r\n\r\n\t\t);\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmakeRotationZ: function ( theta ) {\r\n\r\n\t\tvar c = Math.cos( theta ), s = Math.sin( theta );\r\n\r\n\t\tthis.set(\r\n\r\n\t\t\tc, - s, 0, 0,\r\n\t\t\ts, c, 0, 0,\r\n\t\t\t0, 0, 1, 0,\r\n\t\t\t0, 0, 0, 1\r\n\r\n\t\t);\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmakeRotationAxis: function ( axis, angle ) {\r\n\r\n\t\t// Based on http://www.gamedev.net/reference/articles/article1199.asp\r\n\r\n\t\tvar c = Math.cos( angle );\r\n\t\tvar s = Math.sin( angle );\r\n\t\tvar t = 1 - c;\r\n\t\tvar x = axis.x, y = axis.y, z = axis.z;\r\n\t\tvar tx = t * x, ty = t * y;\r\n\r\n\t\tthis.set(\r\n\r\n\t\t\ttx * x + c, tx * y - s * z, tx * z + s * y, 0,\r\n\t\t\ttx * y + s * z, ty * y + c, ty * z - s * x, 0,\r\n\t\t\ttx * z - s * y, ty * z + s * x, t * z * z + c, 0,\r\n\t\t\t0, 0, 0, 1\r\n\r\n\t\t);\r\n\r\n\t\t return this;\r\n\r\n\t},\r\n\r\n\tmakeScale: function ( x, y, z ) {\r\n\r\n\t\tthis.set(\r\n\r\n\t\t\tx, 0, 0, 0,\r\n\t\t\t0, y, 0, 0,\r\n\t\t\t0, 0, z, 0,\r\n\t\t\t0, 0, 0, 1\r\n\r\n\t\t);\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tcompose: function ( position, quaternion, scale ) {\r\n\r\n\t\tthis.makeRotationFromQuaternion( quaternion );\r\n\t\tthis.scale( scale );\r\n\t\tthis.setPosition( position );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tdecompose: function () {\r\n\r\n\t\tvar vector = new THREE.Vector3();\r\n\t\tvar matrix = new THREE.Matrix4();\r\n\r\n\t\treturn function ( position, quaternion, scale ) {\r\n\r\n\t\t\tvar te = this.elements;\r\n\r\n\t\t\tvar sx = vector.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length();\r\n\t\t\tvar sy = vector.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length();\r\n\t\t\tvar sz = vector.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length();\r\n\r\n\t\t\t// if determine is negative, we need to invert one scale\r\n\t\t\tvar det = this.determinant();\r\n\t\t\tif ( det < 0 ) {\r\n\t\t\t\tsx = - sx;\r\n\t\t\t}\r\n\r\n\t\t\tposition.x = te[ 12 ];\r\n\t\t\tposition.y = te[ 13 ];\r\n\t\t\tposition.z = te[ 14 ];\r\n\r\n\t\t\t// scale the rotation part\r\n\r\n\t\t\tmatrix.elements.set( this.elements ); // at this point matrix is incomplete so we can't use .copy()\r\n\r\n\t\t\tvar invSX = 1 / sx;\r\n\t\t\tvar invSY = 1 / sy;\r\n\t\t\tvar invSZ = 1 / sz;\r\n\r\n\t\t\tmatrix.elements[ 0 ] *= invSX;\r\n\t\t\tmatrix.elements[ 1 ] *= invSX;\r\n\t\t\tmatrix.elements[ 2 ] *= invSX;\r\n\r\n\t\t\tmatrix.elements[ 4 ] *= invSY;\r\n\t\t\tmatrix.elements[ 5 ] *= invSY;\r\n\t\t\tmatrix.elements[ 6 ] *= invSY;\r\n\r\n\t\t\tmatrix.elements[ 8 ] *= invSZ;\r\n\t\t\tmatrix.elements[ 9 ] *= invSZ;\r\n\t\t\tmatrix.elements[ 10 ] *= invSZ;\r\n\r\n\t\t\tquaternion.setFromRotationMatrix( matrix );\r\n\r\n\t\t\tscale.x = sx;\r\n\t\t\tscale.y = sy;\r\n\t\t\tscale.z = sz;\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tmakeFrustum: function ( left, right, bottom, top, near, far ) {\r\n\r\n\t\tvar te = this.elements;\r\n\t\tvar x = 2 * near / ( right - left );\r\n\t\tvar y = 2 * near / ( top - bottom );\r\n\r\n\t\tvar a = ( right + left ) / ( right - left );\r\n\t\tvar b = ( top + bottom ) / ( top - bottom );\r\n\t\tvar c = - ( far + near ) / ( far - near );\r\n\t\tvar d = - 2 * far * near / ( far - near );\r\n\r\n\t\tte[ 0 ] = x;\tte[ 4 ] = 0;\tte[ 8 ] = a;\tte[ 12 ] = 0;\r\n\t\tte[ 1 ] = 0;\tte[ 5 ] = y;\tte[ 9 ] = b;\tte[ 13 ] = 0;\r\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = c;\tte[ 14 ] = d;\r\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = - 1;\tte[ 15 ] = 0;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmakePerspective: function ( fov, aspect, near, far ) {\r\n\r\n\t\tvar ymax = near * Math.tan( THREE.Math.degToRad( fov * 0.5 ) );\r\n\t\tvar ymin = - ymax;\r\n\t\tvar xmin = ymin * aspect;\r\n\t\tvar xmax = ymax * aspect;\r\n\r\n\t\treturn this.makeFrustum( xmin, xmax, ymin, ymax, near, far );\r\n\r\n\t},\r\n\r\n\tmakeOrthographic: function ( left, right, top, bottom, near, far ) {\r\n\r\n\t\tvar te = this.elements;\r\n\t\tvar w = right - left;\r\n\t\tvar h = top - bottom;\r\n\t\tvar p = far - near;\r\n\r\n\t\tvar x = ( right + left ) / w;\r\n\t\tvar y = ( top + bottom ) / h;\r\n\t\tvar z = ( far + near ) / p;\r\n\r\n\t\tte[ 0 ] = 2 / w;\tte[ 4 ] = 0;\tte[ 8 ] = 0;\tte[ 12 ] = - x;\r\n\t\tte[ 1 ] = 0;\tte[ 5 ] = 2 / h;\tte[ 9 ] = 0;\tte[ 13 ] = - y;\r\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = - 2 / p;\tte[ 14 ] = - z;\r\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = 0;\tte[ 15 ] = 1;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tfromArray: function ( array ) {\r\n\r\n\t\tthis.elements.set( array );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\ttoArray: function () {\r\n\r\n\t\tvar te = this.elements;\r\n\r\n\t\treturn [\r\n\t\t\tte[ 0 ], te[ 1 ], te[ 2 ], te[ 3 ],\r\n\t\t\tte[ 4 ], te[ 5 ], te[ 6 ], te[ 7 ],\r\n\t\t\tte[ 8 ], te[ 9 ], te[ 10 ], te[ 11 ],\r\n\t\t\tte[ 12 ], te[ 13 ], te[ 14 ], te[ 15 ]\r\n\t\t];\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new THREE.Matrix4().fromArray( this.elements );\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/math/Ray.js\r\n\r\n/**\r\n * @author bhouston / http://exocortex.com\r\n */\r\n\r\nTHREE.Ray = function ( origin, direction ) {\r\n\r\n\tthis.origin = ( origin !== undefined ) ? origin : new THREE.Vector3();\r\n\tthis.direction = ( direction !== undefined ) ? direction : new THREE.Vector3();\r\n\r\n};\r\n\r\nTHREE.Ray.prototype = {\r\n\r\n\tconstructor: THREE.Ray,\r\n\r\n\tset: function ( origin, direction ) {\r\n\r\n\t\tthis.origin.copy( origin );\r\n\t\tthis.direction.copy( direction );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tcopy: function ( ray ) {\r\n\r\n\t\tthis.origin.copy( ray.origin );\r\n\t\tthis.direction.copy( ray.direction );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tat: function ( t, optionalTarget ) {\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\r\n\t\treturn result.copy( this.direction ).multiplyScalar( t ).add( this.origin );\r\n\r\n\t},\r\n\r\n\trecast: function () {\r\n\r\n\t\tvar v1 = new THREE.Vector3();\r\n\r\n\t\treturn function ( t ) {\r\n\r\n\t\t\tthis.origin.copy( this.at( t, v1 ) );\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tclosestPointToPoint: function ( point, optionalTarget ) {\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\t\tresult.subVectors( point, this.origin );\r\n\t\tvar directionDistance = result.dot( this.direction );\r\n\r\n\t\tif ( directionDistance < 0 ) {\r\n\r\n\t\t\treturn result.copy( this.origin );\r\n\r\n\t\t}\r\n\r\n\t\treturn result.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\r\n\r\n\t},\r\n\r\n\tdistanceToPoint: function () {\r\n\r\n\t\tvar v1 = new THREE.Vector3();\r\n\r\n\t\treturn function ( point ) {\r\n\r\n\t\t\tvar directionDistance = v1.subVectors( point, this.origin ).dot( this.direction );\r\n\r\n\t\t\t// point behind the ray\r\n\r\n\t\t\tif ( directionDistance < 0 ) {\r\n\r\n\t\t\t\treturn this.origin.distanceTo( point );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tv1.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\r\n\r\n\t\t\treturn v1.distanceTo( point );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tdistanceSqToSegment: function ( v0, v1, optionalPointOnRay, optionalPointOnSegment ) {\r\n\r\n\t\t// from http://www.geometrictools.com/LibMathematics/Distance/Wm5DistRay3Segment3.cpp\r\n\t\t// It returns the min distance between the ray and the segment\r\n\t\t// defined by v0 and v1\r\n\t\t// It can also set two optional targets :\r\n\t\t// - The closest point on the ray\r\n\t\t// - The closest point on the segment\r\n\r\n\t\tvar segCenter = v0.clone().add( v1 ).multiplyScalar( 0.5 );\r\n\t\tvar segDir = v1.clone().sub( v0 ).normalize();\r\n\t\tvar segExtent = v0.distanceTo( v1 ) * 0.5;\r\n\t\tvar diff = this.origin.clone().sub( segCenter );\r\n\t\tvar a01 = - this.direction.dot( segDir );\r\n\t\tvar b0 = diff.dot( this.direction );\r\n\t\tvar b1 = - diff.dot( segDir );\r\n\t\tvar c = diff.lengthSq();\r\n\t\tvar det = Math.abs( 1 - a01 * a01 );\r\n\t\tvar s0, s1, sqrDist, extDet;\r\n\r\n\t\tif ( det >= 0 ) {\r\n\r\n\t\t\t// The ray and segment are not parallel.\r\n\r\n\t\t\ts0 = a01 * b1 - b0;\r\n\t\t\ts1 = a01 * b0 - b1;\r\n\t\t\textDet = segExtent * det;\r\n\r\n\t\t\tif ( s0 >= 0 ) {\r\n\r\n\t\t\t\tif ( s1 >= - extDet ) {\r\n\r\n\t\t\t\t\tif ( s1 <= extDet ) {\r\n\r\n\t\t\t\t\t\t// region 0\r\n\t\t\t\t\t\t// Minimum at interior points of ray and segment.\r\n\r\n\t\t\t\t\t\tvar invDet = 1 / det;\r\n\t\t\t\t\t\ts0 *= invDet;\r\n\t\t\t\t\t\ts1 *= invDet;\r\n\t\t\t\t\t\tsqrDist = s0 * ( s0 + a01 * s1 + 2 * b0 ) + s1 * ( a01 * s0 + s1 + 2 * b1 ) + c;\r\n\r\n\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\t// region 1\r\n\r\n\t\t\t\t\t\ts1 = segExtent;\r\n\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\r\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\t// region 5\r\n\r\n\t\t\t\t\ts1 = - segExtent;\r\n\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\r\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tif ( s1 <= - extDet ) {\r\n\r\n\t\t\t\t\t// region 4\r\n\r\n\t\t\t\t\ts0 = Math.max( 0, - ( - a01 * segExtent + b0 ) );\r\n\t\t\t\t\ts1 = ( s0 > 0 ) ? - segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\r\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\r\n\r\n\t\t\t\t} else if ( s1 <= extDet ) {\r\n\r\n\t\t\t\t\t// region 3\r\n\r\n\t\t\t\t\ts0 = 0;\r\n\t\t\t\t\ts1 = Math.min( Math.max( - segExtent, - b1 ), segExtent );\r\n\t\t\t\t\tsqrDist = s1 * ( s1 + 2 * b1 ) + c;\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\t// region 2\r\n\r\n\t\t\t\t\ts0 = Math.max( 0, - ( a01 * segExtent + b0 ) );\r\n\t\t\t\t\ts1 = ( s0 > 0 ) ? segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\r\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// Ray and segment are parallel.\r\n\r\n\t\t\ts1 = ( a01 > 0 ) ? - segExtent : segExtent;\r\n\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\r\n\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\r\n\r\n\t\t}\r\n\r\n\t\tif ( optionalPointOnRay ) {\r\n\r\n\t\t\toptionalPointOnRay.copy( this.direction.clone().multiplyScalar( s0 ).add( this.origin ) );\r\n\r\n\t\t}\r\n\r\n\t\tif ( optionalPointOnSegment ) {\r\n\r\n\t\t\toptionalPointOnSegment.copy( segDir.clone().multiplyScalar( s1 ).add( segCenter ) );\r\n\r\n\t\t}\r\n\r\n\t\treturn sqrDist;\r\n\r\n\t},\r\n\r\n\tisIntersectionSphere: function ( sphere ) {\r\n\r\n\t\treturn this.distanceToPoint( sphere.center ) <= sphere.radius;\r\n\r\n\t},\r\n\r\n\tintersectSphere: function () {\r\n\r\n\t\t// from http://www.scratchapixel.com/lessons/3d-basic-lessons/lesson-7-intersecting-simple-shapes/ray-sphere-intersection/\r\n\r\n\t\tvar v1 = new THREE.Vector3();\r\n\r\n\t\treturn function ( sphere, optionalTarget ) {\r\n\r\n\t\t\tv1.subVectors( sphere.center, this.origin );\r\n\r\n\t\t\tvar tca = v1.dot( this.direction );\r\n\r\n\t\t\tvar d2 = v1.dot( v1 ) - tca * tca;\r\n\r\n\t\t\tvar radius2 = sphere.radius * sphere.radius;\r\n\r\n\t\t\tif ( d2 > radius2 ) return null;\r\n\r\n\t\t\tvar thc = Math.sqrt( radius2 - d2 );\r\n\r\n\t\t\t// t0 = first intersect point - entrance on front of sphere\r\n\t\t\tvar t0 = tca - thc;\r\n\r\n\t\t\t// t1 = second intersect point - exit point on back of sphere\r\n\t\t\tvar t1 = tca + thc;\r\n\r\n\t\t\t// test to see if both t0 and t1 are behind the ray - if so, return null\r\n\t\t\tif ( t0 < 0 && t1 < 0 ) return null;\r\n\r\n\t\t\t// test to see if t0 is behind the ray:\r\n\t\t\t// if it is, the ray is inside the sphere, so return the second exit point scaled by t1,\r\n\t\t\t// in order to always return an intersect point that is in front of the ray.\r\n\t\t\tif ( t0 < 0 ) return this.at( t1, optionalTarget );\r\n\r\n\t\t\t// else t0 is in front of the ray, so return the first collision point scaled by t0 \r\n\t\t\treturn this.at( t0, optionalTarget );\r\n\r\n\t\t}\r\n\r\n\t}(),\r\n\r\n\tisIntersectionPlane: function ( plane ) {\r\n\r\n\t\t// check if the ray lies on the plane first\r\n\r\n\t\tvar distToPoint = plane.distanceToPoint( this.origin );\r\n\r\n\t\tif ( distToPoint === 0 ) {\r\n\r\n\t\t\treturn true;\r\n\r\n\t\t}\r\n\r\n\t\tvar denominator = plane.normal.dot( this.direction );\r\n\r\n\t\tif ( denominator * distToPoint < 0 ) {\r\n\r\n\t\t\treturn true;\r\n\r\n\t\t}\r\n\r\n\t\t// ray origin is behind the plane (and is pointing behind it)\r\n\r\n\t\treturn false;\r\n\r\n\t},\r\n\r\n\tdistanceToPlane: function ( plane ) {\r\n\r\n\t\tvar denominator = plane.normal.dot( this.direction );\r\n\t\tif ( denominator == 0 ) {\r\n\r\n\t\t\t// line is coplanar, return origin\r\n\t\t\tif ( plane.distanceToPoint( this.origin ) == 0 ) {\r\n\r\n\t\t\t\treturn 0;\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// Null is preferable to undefined since undefined means.... it is undefined\r\n\r\n\t\t\treturn null;\r\n\r\n\t\t}\r\n\r\n\t\tvar t = - ( this.origin.dot( plane.normal ) + plane.constant ) / denominator;\r\n\r\n\t\t// Return if the ray never intersects the plane\r\n\r\n\t\treturn t >= 0 ? t : null;\r\n\r\n\t},\r\n\r\n\tintersectPlane: function ( plane, optionalTarget ) {\r\n\r\n\t\tvar t = this.distanceToPlane( plane );\r\n\r\n\t\tif ( t === null ) {\r\n\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\treturn this.at( t, optionalTarget );\r\n\r\n\t},\r\n\r\n\tisIntersectionBox: function () {\r\n\r\n\t\tvar v = new THREE.Vector3();\r\n\r\n\t\treturn function ( box ) {\r\n\r\n\t\t\treturn this.intersectBox( box, v ) !== null;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tintersectBox: function ( box , optionalTarget ) {\r\n\r\n\t\t// http://www.scratchapixel.com/lessons/3d-basic-lessons/lesson-7-intersecting-simple-shapes/ray-box-intersection/\r\n\r\n\t\tvar tmin,tmax,tymin,tymax,tzmin,tzmax;\r\n\r\n\t\tvar invdirx = 1 / this.direction.x,\r\n\t\t\tinvdiry = 1 / this.direction.y,\r\n\t\t\tinvdirz = 1 / this.direction.z;\r\n\r\n\t\tvar origin = this.origin;\r\n\r\n\t\tif ( invdirx >= 0 ) {\r\n\r\n\t\t\ttmin = ( box.min.x - origin.x ) * invdirx;\r\n\t\t\ttmax = ( box.max.x - origin.x ) * invdirx;\r\n\r\n\t\t} else {\r\n\r\n\t\t\ttmin = ( box.max.x - origin.x ) * invdirx;\r\n\t\t\ttmax = ( box.min.x - origin.x ) * invdirx;\r\n\t\t}\r\n\r\n\t\tif ( invdiry >= 0 ) {\r\n\r\n\t\t\ttymin = ( box.min.y - origin.y ) * invdiry;\r\n\t\t\ttymax = ( box.max.y - origin.y ) * invdiry;\r\n\r\n\t\t} else {\r\n\r\n\t\t\ttymin = ( box.max.y - origin.y ) * invdiry;\r\n\t\t\ttymax = ( box.min.y - origin.y ) * invdiry;\r\n\t\t}\r\n\r\n\t\tif ( ( tmin > tymax ) || ( tymin > tmax ) ) return null;\r\n\r\n\t\t// These lines also handle the case where tmin or tmax is NaN\r\n\t\t// (result of 0 * Infinity). x !== x returns true if x is NaN\r\n\r\n\t\tif ( tymin > tmin || tmin !== tmin ) tmin = tymin;\r\n\r\n\t\tif ( tymax < tmax || tmax !== tmax ) tmax = tymax;\r\n\r\n\t\tif ( invdirz >= 0 ) {\r\n\r\n\t\t\ttzmin = ( box.min.z - origin.z ) * invdirz;\r\n\t\t\ttzmax = ( box.max.z - origin.z ) * invdirz;\r\n\r\n\t\t} else {\r\n\r\n\t\t\ttzmin = ( box.max.z - origin.z ) * invdirz;\r\n\t\t\ttzmax = ( box.min.z - origin.z ) * invdirz;\r\n\t\t}\r\n\r\n\t\tif ( ( tmin > tzmax ) || ( tzmin > tmax ) ) return null;\r\n\r\n\t\tif ( tzmin > tmin || tmin !== tmin ) tmin = tzmin;\r\n\r\n\t\tif ( tzmax < tmax || tmax !== tmax ) tmax = tzmax;\r\n\r\n\t\t//return point closest to the ray (positive side)\r\n\r\n\t\tif ( tmax < 0 ) return null;\r\n\r\n\t\treturn this.at( tmin >= 0 ? tmin : tmax, optionalTarget );\r\n\r\n\t},\r\n\r\n\tintersectTriangle: function () {\r\n\r\n\t\t// Compute the offset origin, edges, and normal.\r\n\t\tvar diff = new THREE.Vector3();\r\n\t\tvar edge1 = new THREE.Vector3();\r\n\t\tvar edge2 = new THREE.Vector3();\r\n\t\tvar normal = new THREE.Vector3();\r\n\r\n\t\treturn function ( a, b, c, backfaceCulling, optionalTarget ) {\r\n\r\n\t\t\t// from http://www.geometrictools.com/LibMathematics/Intersection/Wm5IntrRay3Triangle3.cpp\r\n\r\n\t\t\tedge1.subVectors( b, a );\r\n\t\t\tedge2.subVectors( c, a );\r\n\t\t\tnormal.crossVectors( edge1, edge2 );\r\n\r\n\t\t\t// Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction,\r\n\t\t\t// E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by\r\n\t\t\t// |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))\r\n\t\t\t// |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))\r\n\t\t\t// |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)\r\n\t\t\tvar DdN = this.direction.dot( normal );\r\n\t\t\tvar sign;\r\n\r\n\t\t\tif ( DdN > 0 ) {\r\n\r\n\t\t\t\tif ( backfaceCulling ) return null;\r\n\t\t\t\tsign = 1;\r\n\r\n\t\t\t} else if ( DdN < 0 ) {\r\n\r\n\t\t\t\tsign = - 1;\r\n\t\t\t\tDdN = - DdN;\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\treturn null;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tdiff.subVectors( this.origin, a );\r\n\t\t\tvar DdQxE2 = sign * this.direction.dot( edge2.crossVectors( diff, edge2 ) );\r\n\r\n\t\t\t// b1 < 0, no intersection\r\n\t\t\tif ( DdQxE2 < 0 ) {\r\n\r\n\t\t\t\treturn null;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar DdE1xQ = sign * this.direction.dot( edge1.cross( diff ) );\r\n\r\n\t\t\t// b2 < 0, no intersection\r\n\t\t\tif ( DdE1xQ < 0 ) {\r\n\r\n\t\t\t\treturn null;\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// b1+b2 > 1, no intersection\r\n\t\t\tif ( DdQxE2 + DdE1xQ > DdN ) {\r\n\r\n\t\t\t\treturn null;\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// Line intersects triangle, check if ray does.\r\n\t\t\tvar QdN = - sign * diff.dot( normal );\r\n\r\n\t\t\t// t < 0, no intersection\r\n\t\t\tif ( QdN < 0 ) {\r\n\r\n\t\t\t\treturn null;\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// Ray intersects triangle.\r\n\t\t\treturn this.at( QdN / DdN, optionalTarget );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tapplyMatrix4: function ( matrix4 ) {\r\n\r\n\t\tthis.direction.add( this.origin ).applyMatrix4( matrix4 );\r\n\t\tthis.origin.applyMatrix4( matrix4 );\r\n\t\tthis.direction.sub( this.origin );\r\n\t\tthis.direction.normalize();\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\tequals: function ( ray ) {\r\n\r\n\t\treturn ray.origin.equals( this.origin ) && ray.direction.equals( this.direction );\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new THREE.Ray().copy( this );\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/math/Sphere.js\r\n\r\n/**\r\n * @author bhouston / http://exocortex.com\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.Sphere = function ( center, radius ) {\r\n\r\n\tthis.center = ( center !== undefined ) ? center : new THREE.Vector3();\r\n\tthis.radius = ( radius !== undefined ) ? radius : 0;\r\n\r\n};\r\n\r\nTHREE.Sphere.prototype = {\r\n\r\n\tconstructor: THREE.Sphere,\r\n\r\n\tset: function ( center, radius ) {\r\n\r\n\t\tthis.center.copy( center );\r\n\t\tthis.radius = radius;\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\tsetFromPoints: function () {\r\n\r\n\t\tvar box = new THREE.Box3();\r\n\r\n\t\treturn function ( points, optionalCenter ) {\r\n\r\n\t\t\tvar center = this.center;\r\n\r\n\t\t\tif ( optionalCenter !== undefined ) {\r\n\r\n\t\t\t\tcenter.copy( optionalCenter );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tbox.setFromPoints( points ).center( center );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar maxRadiusSq = 0;\r\n\r\n\t\t\tfor ( var i = 0, il = points.length; i < il; i ++ ) {\r\n\r\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( points[ i ] ) );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tthis.radius = Math.sqrt( maxRadiusSq );\r\n\r\n\t\t\treturn this;\r\n\r\n \t\t};\r\n\r\n\t}(),\r\n\r\n\tcopy: function ( sphere ) {\r\n\r\n\t\tthis.center.copy( sphere.center );\r\n\t\tthis.radius = sphere.radius;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tempty: function () {\r\n\r\n\t\treturn ( this.radius <= 0 );\r\n\r\n\t},\r\n\r\n\tcontainsPoint: function ( point ) {\r\n\r\n\t\treturn ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) );\r\n\r\n\t},\r\n\r\n\tdistanceToPoint: function ( point ) {\r\n\r\n\t\treturn ( point.distanceTo( this.center ) - this.radius );\r\n\r\n\t},\r\n\r\n\tintersectsSphere: function ( sphere ) {\r\n\r\n\t\tvar radiusSum = this.radius + sphere.radius;\r\n\r\n\t\treturn sphere.center.distanceToSquared( this.center ) <= ( radiusSum * radiusSum );\r\n\r\n\t},\r\n\r\n\tclampPoint: function ( point, optionalTarget ) {\r\n\r\n\t\tvar deltaLengthSq = this.center.distanceToSquared( point );\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\t\tresult.copy( point );\r\n\r\n\t\tif ( deltaLengthSq > ( this.radius * this.radius ) ) {\r\n\r\n\t\t\tresult.sub( this.center ).normalize();\r\n\t\t\tresult.multiplyScalar( this.radius ).add( this.center );\r\n\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\r\n\t},\r\n\r\n\tgetBoundingBox: function ( optionalTarget ) {\r\n\r\n\t\tvar box = optionalTarget || new THREE.Box3();\r\n\r\n\t\tbox.set( this.center, this.center );\r\n\t\tbox.expandByScalar( this.radius );\r\n\r\n\t\treturn box;\r\n\r\n\t},\r\n\r\n\tapplyMatrix4: function ( matrix ) {\r\n\r\n\t\tthis.center.applyMatrix4( matrix );\r\n\t\tthis.radius = this.radius * matrix.getMaxScaleOnAxis();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\ttranslate: function ( offset ) {\r\n\r\n\t\tthis.center.add( offset );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tequals: function ( sphere ) {\r\n\r\n\t\treturn sphere.center.equals( this.center ) && ( sphere.radius === this.radius );\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new THREE.Sphere().copy( this );\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/math/Frustum.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author bhouston / http://exocortex.com\r\n */\r\n\r\nTHREE.Frustum = function ( p0, p1, p2, p3, p4, p5 ) {\r\n\r\n\tthis.planes = [\r\n\r\n\t\t( p0 !== undefined ) ? p0 : new THREE.Plane(),\r\n\t\t( p1 !== undefined ) ? p1 : new THREE.Plane(),\r\n\t\t( p2 !== undefined ) ? p2 : new THREE.Plane(),\r\n\t\t( p3 !== undefined ) ? p3 : new THREE.Plane(),\r\n\t\t( p4 !== undefined ) ? p4 : new THREE.Plane(),\r\n\t\t( p5 !== undefined ) ? p5 : new THREE.Plane()\r\n\r\n\t];\r\n\r\n};\r\n\r\nTHREE.Frustum.prototype = {\r\n\r\n\tconstructor: THREE.Frustum,\r\n\r\n\tset: function ( p0, p1, p2, p3, p4, p5 ) {\r\n\r\n\t\tvar planes = this.planes;\r\n\r\n\t\tplanes[ 0 ].copy( p0 );\r\n\t\tplanes[ 1 ].copy( p1 );\r\n\t\tplanes[ 2 ].copy( p2 );\r\n\t\tplanes[ 3 ].copy( p3 );\r\n\t\tplanes[ 4 ].copy( p4 );\r\n\t\tplanes[ 5 ].copy( p5 );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tcopy: function ( frustum ) {\r\n\r\n\t\tvar planes = this.planes;\r\n\r\n\t\tfor ( var i = 0; i < 6; i ++ ) {\r\n\r\n\t\t\tplanes[ i ].copy( frustum.planes[ i ] );\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetFromMatrix: function ( m ) {\r\n\r\n\t\tvar planes = this.planes;\r\n\t\tvar me = m.elements;\r\n\t\tvar me0 = me[ 0 ], me1 = me[ 1 ], me2 = me[ 2 ], me3 = me[ 3 ];\r\n\t\tvar me4 = me[ 4 ], me5 = me[ 5 ], me6 = me[ 6 ], me7 = me[ 7 ];\r\n\t\tvar me8 = me[ 8 ], me9 = me[ 9 ], me10 = me[ 10 ], me11 = me[ 11 ];\r\n\t\tvar me12 = me[ 12 ], me13 = me[ 13 ], me14 = me[ 14 ], me15 = me[ 15 ];\r\n\r\n\t\tplanes[ 0 ].setComponents( me3 - me0, me7 - me4, me11 - me8, me15 - me12 ).normalize();\r\n\t\tplanes[ 1 ].setComponents( me3 + me0, me7 + me4, me11 + me8, me15 + me12 ).normalize();\r\n\t\tplanes[ 2 ].setComponents( me3 + me1, me7 + me5, me11 + me9, me15 + me13 ).normalize();\r\n\t\tplanes[ 3 ].setComponents( me3 - me1, me7 - me5, me11 - me9, me15 - me13 ).normalize();\r\n\t\tplanes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize();\r\n\t\tplanes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tintersectsObject: function () {\r\n\r\n\t\tvar sphere = new THREE.Sphere();\r\n\r\n\t\treturn function ( object ) {\r\n\r\n\t\t\tvar geometry = object.geometry;\r\n\r\n\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\r\n\r\n\t\t\tsphere.copy( geometry.boundingSphere );\r\n\t\t\tsphere.applyMatrix4( object.matrixWorld );\r\n\r\n\t\t\treturn this.intersectsSphere( sphere );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tintersectsSphere: function ( sphere ) {\r\n\r\n\t\tvar planes = this.planes;\r\n\t\tvar center = sphere.center;\r\n\t\tvar negRadius = - sphere.radius;\r\n\r\n\t\tfor ( var i = 0; i < 6; i ++ ) {\r\n\r\n\t\t\tvar distance = planes[ i ].distanceToPoint( center );\r\n\r\n\t\t\tif ( distance < negRadius ) {\r\n\r\n\t\t\t\treturn false;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\r\n\t},\r\n\r\n\tintersectsBox: function () {\r\n\r\n\t\tvar p1 = new THREE.Vector3(),\r\n\t\t\tp2 = new THREE.Vector3();\r\n\r\n\t\treturn function ( box ) {\r\n\r\n\t\t\tvar planes = this.planes;\r\n\r\n\t\t\tfor ( var i = 0; i < 6 ; i ++ ) {\r\n\r\n\t\t\t\tvar plane = planes[ i ];\r\n\r\n\t\t\t\tp1.x = plane.normal.x > 0 ? box.min.x : box.max.x;\r\n\t\t\t\tp2.x = plane.normal.x > 0 ? box.max.x : box.min.x;\r\n\t\t\t\tp1.y = plane.normal.y > 0 ? box.min.y : box.max.y;\r\n\t\t\t\tp2.y = plane.normal.y > 0 ? box.max.y : box.min.y;\r\n\t\t\t\tp1.z = plane.normal.z > 0 ? box.min.z : box.max.z;\r\n\t\t\t\tp2.z = plane.normal.z > 0 ? box.max.z : box.min.z;\r\n\r\n\t\t\t\tvar d1 = plane.distanceToPoint( p1 );\r\n\t\t\t\tvar d2 = plane.distanceToPoint( p2 );\r\n\r\n\t\t\t\t// if both outside plane, no intersection\r\n\r\n\t\t\t\tif ( d1 < 0 && d2 < 0 ) {\r\n\r\n\t\t\t\t\treturn false;\r\n\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\r\n\tcontainsPoint: function ( point ) {\r\n\r\n\t\tvar planes = this.planes;\r\n\r\n\t\tfor ( var i = 0; i < 6; i ++ ) {\r\n\r\n\t\t\tif ( planes[ i ].distanceToPoint( point ) < 0 ) {\r\n\r\n\t\t\t\treturn false;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new THREE.Frustum().copy( this );\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/math/Plane.js\r\n\r\n/**\r\n * @author bhouston / http://exocortex.com\r\n */\r\n\r\nTHREE.Plane = function ( normal, constant ) {\r\n\r\n\tthis.normal = ( normal !== undefined ) ? normal : new THREE.Vector3( 1, 0, 0 );\r\n\tthis.constant = ( constant !== undefined ) ? constant : 0;\r\n\r\n};\r\n\r\nTHREE.Plane.prototype = {\r\n\r\n\tconstructor: THREE.Plane,\r\n\r\n\tset: function ( normal, constant ) {\r\n\r\n\t\tthis.normal.copy( normal );\r\n\t\tthis.constant = constant;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetComponents: function ( x, y, z, w ) {\r\n\r\n\t\tthis.normal.set( x, y, z );\r\n\t\tthis.constant = w;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetFromNormalAndCoplanarPoint: function ( normal, point ) {\r\n\r\n\t\tthis.normal.copy( normal );\r\n\t\tthis.constant = - point.dot( this.normal );\t// must be this.normal, not normal, as this.normal is normalized\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetFromCoplanarPoints: function () {\r\n\r\n\t\tvar v1 = new THREE.Vector3();\r\n\t\tvar v2 = new THREE.Vector3();\r\n\r\n\t\treturn function ( a, b, c ) {\r\n\r\n\t\t\tvar normal = v1.subVectors( c, b ).cross( v2.subVectors( a, b ) ).normalize();\r\n\r\n\t\t\t// Q: should an error be thrown if normal is zero (e.g. degenerate plane)?\r\n\r\n\t\t\tthis.setFromNormalAndCoplanarPoint( normal, a );\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\r\n\tcopy: function ( plane ) {\r\n\r\n\t\tthis.normal.copy( plane.normal );\r\n\t\tthis.constant = plane.constant;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tnormalize: function () {\r\n\r\n\t\t// Note: will lead to a divide by zero if the plane is invalid.\r\n\r\n\t\tvar inverseNormalLength = 1.0 / this.normal.length();\r\n\t\tthis.normal.multiplyScalar( inverseNormalLength );\r\n\t\tthis.constant *= inverseNormalLength;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tnegate: function () {\r\n\r\n\t\tthis.constant *= - 1;\r\n\t\tthis.normal.negate();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tdistanceToPoint: function ( point ) {\r\n\r\n\t\treturn this.normal.dot( point ) + this.constant;\r\n\r\n\t},\r\n\r\n\tdistanceToSphere: function ( sphere ) {\r\n\r\n\t\treturn this.distanceToPoint( sphere.center ) - sphere.radius;\r\n\r\n\t},\r\n\r\n\tprojectPoint: function ( point, optionalTarget ) {\r\n\r\n\t\treturn this.orthoPoint( point, optionalTarget ).sub( point ).negate();\r\n\r\n\t},\r\n\r\n\torthoPoint: function ( point, optionalTarget ) {\r\n\r\n\t\tvar perpendicularMagnitude = this.distanceToPoint( point );\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\t\treturn result.copy( this.normal ).multiplyScalar( perpendicularMagnitude );\r\n\r\n\t},\r\n\r\n\tisIntersectionLine: function ( line ) {\r\n\r\n\t\t// Note: this tests if a line intersects the plane, not whether it (or its end-points) are coplanar with it.\r\n\r\n\t\tvar startSign = this.distanceToPoint( line.start );\r\n\t\tvar endSign = this.distanceToPoint( line.end );\r\n\r\n\t\treturn ( startSign < 0 && endSign > 0 ) || ( endSign < 0 && startSign > 0 );\r\n\r\n\t},\r\n\r\n\tintersectLine: function () {\r\n\r\n\t\tvar v1 = new THREE.Vector3();\r\n\r\n\t\treturn function ( line, optionalTarget ) {\r\n\r\n\t\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\r\n\t\t\tvar direction = line.delta( v1 );\r\n\r\n\t\t\tvar denominator = this.normal.dot( direction );\r\n\r\n\t\t\tif ( denominator == 0 ) {\r\n\r\n\t\t\t\t// line is coplanar, return origin\r\n\t\t\t\tif ( this.distanceToPoint( line.start ) == 0 ) {\r\n\r\n\t\t\t\t\treturn result.copy( line.start );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Unsure if this is the correct method to handle this case.\r\n\t\t\t\treturn undefined;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar t = - ( line.start.dot( this.normal ) + this.constant ) / denominator;\r\n\r\n\t\t\tif ( t < 0 || t > 1 ) {\r\n\r\n\t\t\t\treturn undefined;\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn result.copy( direction ).multiplyScalar( t ).add( line.start );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\r\n\tcoplanarPoint: function ( optionalTarget ) {\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\t\treturn result.copy( this.normal ).multiplyScalar( - this.constant );\r\n\r\n\t},\r\n\r\n\tapplyMatrix4: function () {\r\n\r\n\t\tvar v1 = new THREE.Vector3();\r\n\t\tvar v2 = new THREE.Vector3();\r\n\t\tvar m1 = new THREE.Matrix3();\r\n\r\n\t\treturn function ( matrix, optionalNormalMatrix ) {\r\n\r\n\t\t\t// compute new normal based on theory here:\r\n\t\t\t// http://www.songho.ca/opengl/gl_normaltransform.html\r\n\t\t\tvar normalMatrix = optionalNormalMatrix || m1.getNormalMatrix( matrix );\r\n\t\t\tvar newNormal = v1.copy( this.normal ).applyMatrix3( normalMatrix );\r\n\r\n\t\t\tvar newCoplanarPoint = this.coplanarPoint( v2 );\r\n\t\t\tnewCoplanarPoint.applyMatrix4( matrix );\r\n\r\n\t\t\tthis.setFromNormalAndCoplanarPoint( newNormal, newCoplanarPoint );\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\ttranslate: function ( offset ) {\r\n\r\n\t\tthis.constant = this.constant - offset.dot( this.normal );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tequals: function ( plane ) {\r\n\r\n\t\treturn plane.normal.equals( this.normal ) && ( plane.constant == this.constant );\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new THREE.Plane().copy( this );\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/math/Math.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.Math = {\r\n\r\n\tgenerateUUID: function () {\r\n\r\n\t\t// http://www.broofa.com/Tools/Math.uuid.htm\r\n\r\n\t\tvar chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split( '' );\r\n\t\tvar uuid = new Array( 36 );\r\n\t\tvar rnd = 0, r;\r\n\r\n\t\treturn function () {\r\n\r\n\t\t\tfor ( var i = 0; i < 36; i ++ ) {\r\n\r\n\t\t\t\tif ( i == 8 || i == 13 || i == 18 || i == 23 ) {\r\n\r\n\t\t\t\t\tuuid[ i ] = '-';\r\n\r\n\t\t\t\t} else if ( i == 14 ) {\r\n\r\n\t\t\t\t\tuuid[ i ] = '4';\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tif ( rnd <= 0x02 ) rnd = 0x2000000 + ( Math.random() * 0x1000000 ) | 0;\r\n\t\t\t\t\tr = rnd & 0xf;\r\n\t\t\t\t\trnd = rnd >> 4;\r\n\t\t\t\t\tuuid[ i ] = chars[ ( i == 19 ) ? ( r & 0x3 ) | 0x8 : r ];\r\n\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn uuid.join( '' );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\t// Clamp value to range \r\n\r\n\tclamp: function ( x, a, b ) {\r\n\r\n\t\treturn ( x < a ) ? a : ( ( x > b ) ? b : x );\r\n\r\n\t},\r\n\r\n\t// Clamp value to range to range \r\n\r\n\tmapLinear: function ( x, a1, a2, b1, b2 ) {\r\n\r\n\t\treturn b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 );\r\n\r\n\t},\r\n\r\n\t// http://en.wikipedia.org/wiki/Smoothstep\r\n\r\n\tsmoothstep: function ( x, min, max ) {\r\n\r\n\t\tif ( x <= min ) return 0;\r\n\t\tif ( x >= max ) return 1;\r\n\r\n\t\tx = ( x - min ) / ( max - min );\r\n\r\n\t\treturn x * x * ( 3 - 2 * x );\r\n\r\n\t},\r\n\r\n\tsmootherstep: function ( x, min, max ) {\r\n\r\n\t\tif ( x <= min ) return 0;\r\n\t\tif ( x >= max ) return 1;\r\n\r\n\t\tx = ( x - min ) / ( max - min );\r\n\r\n\t\treturn x * x * x * ( x * ( x * 6 - 15 ) + 10 );\r\n\r\n\t},\r\n\r\n\t// Random float from <0, 1> with 16 bits of randomness\r\n\t// (standard Math.random() creates repetitive patterns when applied over larger space)\r\n\r\n\trandom16: function () {\r\n\r\n\t\treturn ( 65280 * Math.random() + 255 * Math.random() ) / 65535;\r\n\r\n\t},\r\n\r\n\t// Random integer from interval\r\n\r\n\trandInt: function ( low, high ) {\r\n\r\n\t\treturn low + Math.floor( Math.random() * ( high - low + 1 ) );\r\n\r\n\t},\r\n\r\n\t// Random float from interval\r\n\r\n\trandFloat: function ( low, high ) {\r\n\r\n\t\treturn low + Math.random() * ( high - low );\r\n\r\n\t},\r\n\r\n\t// Random float from <-range/2, range/2> interval\r\n\r\n\trandFloatSpread: function ( range ) {\r\n\r\n\t\treturn range * ( 0.5 - Math.random() );\r\n\r\n\t},\r\n\r\n\tdegToRad: function () {\r\n\r\n\t\tvar degreeToRadiansFactor = Math.PI / 180;\r\n\r\n\t\treturn function ( degrees ) {\r\n\r\n\t\t\treturn degrees * degreeToRadiansFactor;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tradToDeg: function () {\r\n\r\n\t\tvar radianToDegreesFactor = 180 / Math.PI;\r\n\r\n\t\treturn function ( radians ) {\r\n\r\n\t\t\treturn radians * radianToDegreesFactor;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tisPowerOfTwo: function ( value ) {\r\n\r\n\t\treturn ( value & ( value - 1 ) ) === 0 && value !== 0;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/math/Spline.js\r\n\r\n/**\r\n * Spline from Tween.js, slightly optimized (and trashed)\r\n * http://sole.github.com/tween.js/examples/05_spline.html\r\n *\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.Spline = function ( points ) {\r\n\r\n\tthis.points = points;\r\n\r\n\tvar c = [], v3 = { x: 0, y: 0, z: 0 },\r\n\tpoint, intPoint, weight, w2, w3,\r\n\tpa, pb, pc, pd;\r\n\r\n\tthis.initFromArray = function ( a ) {\r\n\r\n\t\tthis.points = [];\r\n\r\n\t\tfor ( var i = 0; i < a.length; i ++ ) {\r\n\r\n\t\t\tthis.points[ i ] = { x: a[ i ][ 0 ], y: a[ i ][ 1 ], z: a[ i ][ 2 ] };\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tthis.getPoint = function ( k ) {\r\n\r\n\t\tpoint = ( this.points.length - 1 ) * k;\r\n\t\tintPoint = Math.floor( point );\r\n\t\tweight = point - intPoint;\r\n\r\n\t\tc[ 0 ] = intPoint === 0 ? intPoint : intPoint - 1;\r\n\t\tc[ 1 ] = intPoint;\r\n\t\tc[ 2 ] = intPoint > this.points.length - 2 ? this.points.length - 1 : intPoint + 1;\r\n\t\tc[ 3 ] = intPoint > this.points.length - 3 ? this.points.length - 1 : intPoint + 2;\r\n\r\n\t\tpa = this.points[ c[ 0 ] ];\r\n\t\tpb = this.points[ c[ 1 ] ];\r\n\t\tpc = this.points[ c[ 2 ] ];\r\n\t\tpd = this.points[ c[ 3 ] ];\r\n\r\n\t\tw2 = weight * weight;\r\n\t\tw3 = weight * w2;\r\n\r\n\t\tv3.x = interpolate( pa.x, pb.x, pc.x, pd.x, weight, w2, w3 );\r\n\t\tv3.y = interpolate( pa.y, pb.y, pc.y, pd.y, weight, w2, w3 );\r\n\t\tv3.z = interpolate( pa.z, pb.z, pc.z, pd.z, weight, w2, w3 );\r\n\r\n\t\treturn v3;\r\n\r\n\t};\r\n\r\n\tthis.getControlPointsArray = function () {\r\n\r\n\t\tvar i, p, l = this.points.length,\r\n\t\t\tcoords = [];\r\n\r\n\t\tfor ( i = 0; i < l; i ++ ) {\r\n\r\n\t\t\tp = this.points[ i ];\r\n\t\t\tcoords[ i ] = [ p.x, p.y, p.z ];\r\n\r\n\t\t}\r\n\r\n\t\treturn coords;\r\n\r\n\t};\r\n\r\n\t// approximate length by summing linear segments\r\n\r\n\tthis.getLength = function ( nSubDivisions ) {\r\n\r\n\t\tvar i, index, nSamples, position,\r\n\t\t\tpoint = 0, intPoint = 0, oldIntPoint = 0,\r\n\t\t\toldPosition = new THREE.Vector3(),\r\n\t\t\ttmpVec = new THREE.Vector3(),\r\n\t\t\tchunkLengths = [],\r\n\t\t\ttotalLength = 0;\r\n\r\n\t\t// first point has 0 length\r\n\r\n\t\tchunkLengths[ 0 ] = 0;\r\n\r\n\t\tif ( ! nSubDivisions ) nSubDivisions = 100;\r\n\r\n\t\tnSamples = this.points.length * nSubDivisions;\r\n\r\n\t\toldPosition.copy( this.points[ 0 ] );\r\n\r\n\t\tfor ( i = 1; i < nSamples; i ++ ) {\r\n\r\n\t\t\tindex = i / nSamples;\r\n\r\n\t\t\tposition = this.getPoint( index );\r\n\t\t\ttmpVec.copy( position );\r\n\r\n\t\t\ttotalLength += tmpVec.distanceTo( oldPosition );\r\n\r\n\t\t\toldPosition.copy( position );\r\n\r\n\t\t\tpoint = ( this.points.length - 1 ) * index;\r\n\t\t\tintPoint = Math.floor( point );\r\n\r\n\t\t\tif ( intPoint != oldIntPoint ) {\r\n\r\n\t\t\t\tchunkLengths[ intPoint ] = totalLength;\r\n\t\t\t\toldIntPoint = intPoint;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t// last point ends with total length\r\n\r\n\t\tchunkLengths[ chunkLengths.length ] = totalLength;\r\n\r\n\t\treturn { chunks: chunkLengths, total: totalLength };\r\n\r\n\t};\r\n\r\n\tthis.reparametrizeByArcLength = function ( samplingCoef ) {\r\n\r\n\t\tvar i, j,\r\n\t\t\tindex, indexCurrent, indexNext,\r\n\t\t\tlinearDistance, realDistance,\r\n\t\t\tsampling, position,\r\n\t\t\tnewpoints = [],\r\n\t\t\ttmpVec = new THREE.Vector3(),\r\n\t\t\tsl = this.getLength();\r\n\r\n\t\tnewpoints.push( tmpVec.copy( this.points[ 0 ] ).clone() );\r\n\r\n\t\tfor ( i = 1; i < this.points.length; i ++ ) {\r\n\r\n\t\t\t//tmpVec.copy( this.points[ i - 1 ] );\r\n\t\t\t//linearDistance = tmpVec.distanceTo( this.points[ i ] );\r\n\r\n\t\t\trealDistance = sl.chunks[ i ] - sl.chunks[ i - 1 ];\r\n\r\n\t\t\tsampling = Math.ceil( samplingCoef * realDistance / sl.total );\r\n\r\n\t\t\tindexCurrent = ( i - 1 ) / ( this.points.length - 1 );\r\n\t\t\tindexNext = i / ( this.points.length - 1 );\r\n\r\n\t\t\tfor ( j = 1; j < sampling - 1; j ++ ) {\r\n\r\n\t\t\t\tindex = indexCurrent + j * ( 1 / sampling ) * ( indexNext - indexCurrent );\r\n\r\n\t\t\t\tposition = this.getPoint( index );\r\n\t\t\t\tnewpoints.push( tmpVec.copy( position ).clone() );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tnewpoints.push( tmpVec.copy( this.points[ i ] ).clone() );\r\n\r\n\t\t}\r\n\r\n\t\tthis.points = newpoints;\r\n\r\n\t};\r\n\r\n\t// Catmull-Rom\r\n\r\n\tfunction interpolate( p0, p1, p2, p3, t, t2, t3 ) {\r\n\r\n\t\tvar v0 = ( p2 - p0 ) * 0.5,\r\n\t\t\tv1 = ( p3 - p1 ) * 0.5;\r\n\r\n\t\treturn ( 2 * ( p1 - p2 ) + v0 + v1 ) * t3 + ( - 3 * ( p1 - p2 ) - 2 * v0 - v1 ) * t2 + v0 * t + p1;\r\n\r\n\t};\r\n\r\n};\r\n\r\n// File:src/math/Triangle.js\r\n\r\n/**\r\n * @author bhouston / http://exocortex.com\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.Triangle = function ( a, b, c ) {\r\n\r\n\tthis.a = ( a !== undefined ) ? a : new THREE.Vector3();\r\n\tthis.b = ( b !== undefined ) ? b : new THREE.Vector3();\r\n\tthis.c = ( c !== undefined ) ? c : new THREE.Vector3();\r\n\r\n};\r\n\r\nTHREE.Triangle.normal = function () {\r\n\r\n\tvar v0 = new THREE.Vector3();\r\n\r\n\treturn function ( a, b, c, optionalTarget ) {\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\r\n\t\tresult.subVectors( c, b );\r\n\t\tv0.subVectors( a, b );\r\n\t\tresult.cross( v0 );\r\n\r\n\t\tvar resultLengthSq = result.lengthSq();\r\n\t\tif ( resultLengthSq > 0 ) {\r\n\r\n\t\t\treturn result.multiplyScalar( 1 / Math.sqrt( resultLengthSq ) );\r\n\r\n\t\t}\r\n\r\n\t\treturn result.set( 0, 0, 0 );\r\n\r\n\t};\r\n\r\n}();\r\n\r\n// static/instance method to calculate barycoordinates\r\n// based on: http://www.blackpawn.com/texts/pointinpoly/default.html\r\nTHREE.Triangle.barycoordFromPoint = function () {\r\n\r\n\tvar v0 = new THREE.Vector3();\r\n\tvar v1 = new THREE.Vector3();\r\n\tvar v2 = new THREE.Vector3();\r\n\r\n\treturn function ( point, a, b, c, optionalTarget ) {\r\n\r\n\t\tv0.subVectors( c, a );\r\n\t\tv1.subVectors( b, a );\r\n\t\tv2.subVectors( point, a );\r\n\r\n\t\tvar dot00 = v0.dot( v0 );\r\n\t\tvar dot01 = v0.dot( v1 );\r\n\t\tvar dot02 = v0.dot( v2 );\r\n\t\tvar dot11 = v1.dot( v1 );\r\n\t\tvar dot12 = v1.dot( v2 );\r\n\r\n\t\tvar denom = ( dot00 * dot11 - dot01 * dot01 );\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\r\n\t\t// colinear or singular triangle\r\n\t\tif ( denom == 0 ) {\r\n\t\t\t// arbitrary location outside of triangle?\r\n\t\t\t// not sure if this is the best idea, maybe should be returning undefined\r\n\t\t\treturn result.set( - 2, - 1, - 1 );\r\n\t\t}\r\n\r\n\t\tvar invDenom = 1 / denom;\r\n\t\tvar u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom;\r\n\t\tvar v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom;\r\n\r\n\t\t// barycoordinates must always sum to 1\r\n\t\treturn result.set( 1 - u - v, v, u );\r\n\r\n\t};\r\n\r\n}();\r\n\r\nTHREE.Triangle.containsPoint = function () {\r\n\r\n\tvar v1 = new THREE.Vector3();\r\n\r\n\treturn function ( point, a, b, c ) {\r\n\r\n\t\tvar result = THREE.Triangle.barycoordFromPoint( point, a, b, c, v1 );\r\n\r\n\t\treturn ( result.x >= 0 ) && ( result.y >= 0 ) && ( ( result.x + result.y ) <= 1 );\r\n\r\n\t};\r\n\r\n}();\r\n\r\nTHREE.Triangle.prototype = {\r\n\r\n\tconstructor: THREE.Triangle,\r\n\r\n\tset: function ( a, b, c ) {\r\n\r\n\t\tthis.a.copy( a );\r\n\t\tthis.b.copy( b );\r\n\t\tthis.c.copy( c );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetFromPointsAndIndices: function ( points, i0, i1, i2 ) {\r\n\r\n\t\tthis.a.copy( points[ i0 ] );\r\n\t\tthis.b.copy( points[ i1 ] );\r\n\t\tthis.c.copy( points[ i2 ] );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tcopy: function ( triangle ) {\r\n\r\n\t\tthis.a.copy( triangle.a );\r\n\t\tthis.b.copy( triangle.b );\r\n\t\tthis.c.copy( triangle.c );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tarea: function () {\r\n\r\n\t\tvar v0 = new THREE.Vector3();\r\n\t\tvar v1 = new THREE.Vector3();\r\n\r\n\t\treturn function () {\r\n\r\n\t\t\tv0.subVectors( this.c, this.b );\r\n\t\t\tv1.subVectors( this.a, this.b );\r\n\r\n\t\t\treturn v0.cross( v1 ).length() * 0.5;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tmidpoint: function ( optionalTarget ) {\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\t\treturn result.addVectors( this.a, this.b ).add( this.c ).multiplyScalar( 1 / 3 );\r\n\r\n\t},\r\n\r\n\tnormal: function ( optionalTarget ) {\r\n\r\n\t\treturn THREE.Triangle.normal( this.a, this.b, this.c, optionalTarget );\r\n\r\n\t},\r\n\r\n\tplane: function ( optionalTarget ) {\r\n\r\n\t\tvar result = optionalTarget || new THREE.Plane();\r\n\r\n\t\treturn result.setFromCoplanarPoints( this.a, this.b, this.c );\r\n\r\n\t},\r\n\r\n\tbarycoordFromPoint: function ( point, optionalTarget ) {\r\n\r\n\t\treturn THREE.Triangle.barycoordFromPoint( point, this.a, this.b, this.c, optionalTarget );\r\n\r\n\t},\r\n\r\n\tcontainsPoint: function ( point ) {\r\n\r\n\t\treturn THREE.Triangle.containsPoint( point, this.a, this.b, this.c );\r\n\r\n\t},\r\n\r\n\tequals: function ( triangle ) {\r\n\r\n\t\treturn triangle.a.equals( this.a ) && triangle.b.equals( this.b ) && triangle.c.equals( this.c );\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new THREE.Triangle().copy( this );\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/core/Clock.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.Clock = function ( autoStart ) {\r\n\r\n\tthis.autoStart = ( autoStart !== undefined ) ? autoStart : true;\r\n\r\n\tthis.startTime = 0;\r\n\tthis.oldTime = 0;\r\n\tthis.elapsedTime = 0;\r\n\r\n\tthis.running = false;\r\n\r\n};\r\n\r\nTHREE.Clock.prototype = {\r\n\r\n\tconstructor: THREE.Clock,\r\n\r\n\tstart: function () {\r\n\r\n\t\tthis.startTime = self.performance !== undefined && self.performance.now !== undefined\r\n\t\t\t\t\t ? self.performance.now()\r\n\t\t\t\t\t : Date.now();\r\n\r\n\t\tthis.oldTime = this.startTime;\r\n\t\tthis.running = true;\r\n\t},\r\n\r\n\tstop: function () {\r\n\r\n\t\tthis.getElapsedTime();\r\n\t\tthis.running = false;\r\n\r\n\t},\r\n\r\n\tgetElapsedTime: function () {\r\n\r\n\t\tthis.getDelta();\r\n\t\treturn this.elapsedTime;\r\n\r\n\t},\r\n\r\n\tgetDelta: function () {\r\n\r\n\t\tvar diff = 0;\r\n\r\n\t\tif ( this.autoStart && ! this.running ) {\r\n\r\n\t\t\tthis.start();\r\n\r\n\t\t}\r\n\r\n\t\tif ( this.running ) {\r\n\r\n\t\t\tvar newTime = self.performance !== undefined && self.performance.now !== undefined\r\n\t\t\t\t\t ? self.performance.now()\r\n\t\t\t\t\t : Date.now();\r\n\r\n\t\t\tdiff = 0.001 * ( newTime - this.oldTime );\r\n\t\t\tthis.oldTime = newTime;\r\n\r\n\t\t\tthis.elapsedTime += diff;\r\n\r\n\t\t}\r\n\r\n\t\treturn diff;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/core/EventDispatcher.js\r\n\r\n/**\r\n * https://github.com/mrdoob/eventdispatcher.js/\r\n */\r\n\r\nTHREE.EventDispatcher = function () {}\r\n\r\nTHREE.EventDispatcher.prototype = {\r\n\r\n\tconstructor: THREE.EventDispatcher,\r\n\r\n\tapply: function ( object ) {\r\n\r\n\t\tobject.addEventListener = THREE.EventDispatcher.prototype.addEventListener;\r\n\t\tobject.hasEventListener = THREE.EventDispatcher.prototype.hasEventListener;\r\n\t\tobject.removeEventListener = THREE.EventDispatcher.prototype.removeEventListener;\r\n\t\tobject.dispatchEvent = THREE.EventDispatcher.prototype.dispatchEvent;\r\n\r\n\t},\r\n\r\n\taddEventListener: function ( type, listener ) {\r\n\r\n\t\tif ( this._listeners === undefined ) this._listeners = {};\r\n\r\n\t\tvar listeners = this._listeners;\r\n\r\n\t\tif ( listeners[ type ] === undefined ) {\r\n\r\n\t\t\tlisteners[ type ] = [];\r\n\r\n\t\t}\r\n\r\n\t\tif ( listeners[ type ].indexOf( listener ) === - 1 ) {\r\n\r\n\t\t\tlisteners[ type ].push( listener );\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\thasEventListener: function ( type, listener ) {\r\n\r\n\t\tif ( this._listeners === undefined ) return false;\r\n\r\n\t\tvar listeners = this._listeners;\r\n\r\n\t\tif ( listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1 ) {\r\n\r\n\t\t\treturn true;\r\n\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\r\n\t},\r\n\r\n\tremoveEventListener: function ( type, listener ) {\r\n\r\n\t\tif ( this._listeners === undefined ) return;\r\n\r\n\t\tvar listeners = this._listeners;\r\n\t\tvar listenerArray = listeners[ type ];\r\n\r\n\t\tif ( listenerArray !== undefined ) {\r\n\r\n\t\t\tvar index = listenerArray.indexOf( listener );\r\n\r\n\t\t\tif ( index !== - 1 ) {\r\n\r\n\t\t\t\tlistenerArray.splice( index, 1 );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tdispatchEvent: function ( event ) {\r\n\r\n\t\tif ( this._listeners === undefined ) return;\r\n\r\n\t\tvar listeners = this._listeners;\r\n\t\tvar listenerArray = listeners[ event.type ];\r\n\r\n\t\tif ( listenerArray !== undefined ) {\r\n\r\n\t\t\tevent.target = this;\r\n\r\n\t\t\tvar array = [];\r\n\t\t\tvar length = listenerArray.length;\r\n\r\n\t\t\tfor ( var i = 0; i < length; i ++ ) {\r\n\r\n\t\t\t\tarray[ i ] = listenerArray[ i ];\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfor ( var i = 0; i < length; i ++ ) {\r\n\r\n\t\t\t\tarray[ i ].call( this, event );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/core/Raycaster.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author bhouston / http://exocortex.com/\r\n * @author stephomi / http://stephaneginier.com/\r\n */\r\n\r\n( function ( THREE ) {\r\n\r\n\tTHREE.Raycaster = function ( origin, direction, near, far ) {\r\n\r\n\t\tthis.ray = new THREE.Ray( origin, direction );\r\n\t\t// direction is assumed to be normalized (for accurate distance calculations)\r\n\r\n\t\tthis.near = near || 0;\r\n\t\tthis.far = far || Infinity;\r\n\r\n\t\tthis.params = {\r\n\t\t\tSprite: {},\r\n\t\t\tMesh: {},\r\n\t\t\tPointCloud: { threshold: 1 },\r\n\t\t\tLOD: {},\r\n\t\t\tLine: {}\r\n\t\t};\r\n\r\n\t};\r\n\r\n\tvar descSort = function ( a, b ) {\r\n\r\n\t\treturn a.distance - b.distance;\r\n\r\n\t};\r\n\r\n\tvar intersectObject = function ( object, raycaster, intersects, recursive ) {\r\n\r\n\t\tobject.raycast( raycaster, intersects );\r\n\r\n\t\tif ( recursive === true ) {\r\n\r\n\t\t\tvar children = object.children;\r\n\r\n\t\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\r\n\r\n\t\t\t\tintersectObject( children[ i ], raycaster, intersects, true );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\t//\r\n\r\n\tTHREE.Raycaster.prototype = {\r\n\r\n\t\tconstructor: THREE.Raycaster,\r\n\r\n\t\tprecision: 0.0001,\r\n\t\tlinePrecision: 1,\r\n\r\n\t\tset: function ( origin, direction ) {\r\n\r\n\t\t\tthis.ray.set( origin, direction );\r\n\t\t\t// direction is assumed to be normalized (for accurate distance calculations)\r\n\r\n\t\t},\r\n\r\n\t\tintersectObject: function ( object, recursive ) {\r\n\r\n\t\t\tvar intersects = [];\r\n\r\n\t\t\tintersectObject( object, this, intersects, recursive );\r\n\r\n\t\t\tintersects.sort( descSort );\r\n\r\n\t\t\treturn intersects;\r\n\r\n\t\t},\r\n\r\n\t\tintersectObjects: function ( objects, recursive ) {\r\n\r\n\t\t\tvar intersects = [];\r\n\r\n\t\t\tif ( objects instanceof Array === false ) {\r\n\r\n\t\t\t\tconsole.log( 'THREE.Raycaster.intersectObjects: objects is not an Array.' );\r\n\t\t\t\treturn intersects;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfor ( var i = 0, l = objects.length; i < l; i ++ ) {\r\n\r\n\t\t\t\tintersectObject( objects[ i ], this, intersects, recursive );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tintersects.sort( descSort );\r\n\r\n\t\t\treturn intersects;\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n}( THREE ) );\r\n\r\n// File:src/core/Object3D.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author mikael emtinger / http://gomo.se/\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author WestLangley / http://github.com/WestLangley\r\n */\r\n\r\nTHREE.Object3D = function () {\r\n\r\n\tObject.defineProperty( this, 'id', { value: THREE.Object3DIdCount ++ } );\r\n\r\n\tthis.uuid = THREE.Math.generateUUID();\r\n\r\n\tthis.name = '';\r\n\tthis.type = 'Object3D';\r\n\r\n\tthis.parent = undefined;\r\n\tthis.children = [];\r\n\r\n\tthis.up = THREE.Object3D.DefaultUp.clone();\r\n\r\n\tvar scope = this;\r\n\r\n\tvar position = new THREE.Vector3();\r\n\tvar rotation = new THREE.Euler();\r\n\tvar quaternion = new THREE.Quaternion();\r\n\tvar scale = new THREE.Vector3( 1, 1, 1 );\r\n\r\n\tvar onRotationChange = function () {\r\n\t\tquaternion.setFromEuler( rotation, false );\r\n\t};\r\n\r\n\tvar onQuaternionChange = function () {\r\n\t\trotation.setFromQuaternion( quaternion, undefined, false );\r\n\t};\r\n\r\n\trotation.onChange( onRotationChange );\r\n\tquaternion.onChange( onQuaternionChange );\r\n\r\n\tObject.defineProperties( this, {\r\n\t\tposition: {\r\n\t\t\tenumerable: true,\r\n\t\t\tvalue: position\r\n\t\t},\r\n\t\trotation: {\r\n\t\t\tenumerable: true,\r\n\t\t\tvalue: rotation\r\n\t\t},\r\n\t\tquaternion: {\r\n\t\t\tenumerable: true,\r\n\t\t\tvalue: quaternion\r\n\t\t},\r\n\t\tscale: {\r\n\t\t\tenumerable: true,\r\n\t\t\tvalue: scale\r\n\t\t},\r\n\t} );\r\n\r\n\tthis.renderDepth = null;\r\n\r\n\tthis.rotationAutoUpdate = true;\r\n\r\n\tthis.matrix = new THREE.Matrix4();\r\n\tthis.matrixWorld = new THREE.Matrix4();\r\n\r\n\tthis.matrixAutoUpdate = true;\r\n\tthis.matrixWorldNeedsUpdate = false;\r\n\r\n\tthis.visible = true;\r\n\r\n\tthis.castShadow = false;\r\n\tthis.receiveShadow = false;\r\n\r\n\tthis.frustumCulled = true;\r\n\r\n\tthis.userData = {};\r\n\r\n};\r\n\r\nTHREE.Object3D.DefaultUp = new THREE.Vector3( 0, 1, 0 );\r\n\r\nTHREE.Object3D.prototype = {\r\n\r\n\tconstructor: THREE.Object3D,\r\n\r\n\tget eulerOrder () {\r\n\r\n\t\tconsole.warn( 'THREE.Object3D: .eulerOrder has been moved to .rotation.order.' );\r\n\r\n\t\treturn this.rotation.order;\r\n\r\n\t},\r\n\r\n\tset eulerOrder ( value ) {\r\n\r\n\t\tconsole.warn( 'THREE.Object3D: .eulerOrder has been moved to .rotation.order.' );\r\n\r\n\t\tthis.rotation.order = value;\r\n\r\n\t},\r\n\r\n\tget useQuaternion () {\r\n\r\n\t\tconsole.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' );\r\n\r\n\t},\r\n\r\n\tset useQuaternion ( value ) {\r\n\r\n\t\tconsole.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' );\r\n\r\n\t},\r\n\r\n\tapplyMatrix: function ( matrix ) {\r\n\r\n\t\tthis.matrix.multiplyMatrices( matrix, this.matrix );\r\n\r\n\t\tthis.matrix.decompose( this.position, this.quaternion, this.scale );\r\n\r\n\t},\r\n\r\n\tsetRotationFromAxisAngle: function ( axis, angle ) {\r\n\r\n\t\t// assumes axis is normalized\r\n\r\n\t\tthis.quaternion.setFromAxisAngle( axis, angle );\r\n\r\n\t},\r\n\r\n\tsetRotationFromEuler: function ( euler ) {\r\n\r\n\t\tthis.quaternion.setFromEuler( euler, true );\r\n\r\n\t},\r\n\r\n\tsetRotationFromMatrix: function ( m ) {\r\n\r\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\r\n\r\n\t\tthis.quaternion.setFromRotationMatrix( m );\r\n\r\n\t},\r\n\r\n\tsetRotationFromQuaternion: function ( q ) {\r\n\r\n\t\t// assumes q is normalized\r\n\r\n\t\tthis.quaternion.copy( q );\r\n\r\n\t},\r\n\r\n\trotateOnAxis: function () {\r\n\r\n\t\t// rotate object on axis in object space\r\n\t\t// axis is assumed to be normalized\r\n\r\n\t\tvar q1 = new THREE.Quaternion();\r\n\r\n\t\treturn function ( axis, angle ) {\r\n\r\n\t\t\tq1.setFromAxisAngle( axis, angle );\r\n\r\n\t\t\tthis.quaternion.multiply( q1 );\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t}\r\n\r\n\t}(),\r\n\r\n\trotateX: function () {\r\n\r\n\t\tvar v1 = new THREE.Vector3( 1, 0, 0 );\r\n\r\n\t\treturn function ( angle ) {\r\n\r\n\t\t\treturn this.rotateOnAxis( v1, angle );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\trotateY: function () {\r\n\r\n\t\tvar v1 = new THREE.Vector3( 0, 1, 0 );\r\n\r\n\t\treturn function ( angle ) {\r\n\r\n\t\t\treturn this.rotateOnAxis( v1, angle );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\trotateZ: function () {\r\n\r\n\t\tvar v1 = new THREE.Vector3( 0, 0, 1 );\r\n\r\n\t\treturn function ( angle ) {\r\n\r\n\t\t\treturn this.rotateOnAxis( v1, angle );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\ttranslateOnAxis: function () {\r\n\r\n\t\t// translate object by distance along axis in object space\r\n\t\t// axis is assumed to be normalized\r\n\r\n\t\tvar v1 = new THREE.Vector3();\r\n\r\n\t\treturn function ( axis, distance ) {\r\n\r\n\t\t\tv1.copy( axis ).applyQuaternion( this.quaternion );\r\n\r\n\t\t\tthis.position.add( v1.multiplyScalar( distance ) );\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t}\r\n\r\n\t}(),\r\n\r\n\ttranslate: function ( distance, axis ) {\r\n\r\n\t\tconsole.warn( 'THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.' );\r\n\t\treturn this.translateOnAxis( axis, distance );\r\n\r\n\t},\r\n\r\n\ttranslateX: function () {\r\n\r\n\t\tvar v1 = new THREE.Vector3( 1, 0, 0 );\r\n\r\n\t\treturn function ( distance ) {\r\n\r\n\t\t\treturn this.translateOnAxis( v1, distance );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\ttranslateY: function () {\r\n\r\n\t\tvar v1 = new THREE.Vector3( 0, 1, 0 );\r\n\r\n\t\treturn function ( distance ) {\r\n\r\n\t\t\treturn this.translateOnAxis( v1, distance );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\ttranslateZ: function () {\r\n\r\n\t\tvar v1 = new THREE.Vector3( 0, 0, 1 );\r\n\r\n\t\treturn function ( distance ) {\r\n\r\n\t\t\treturn this.translateOnAxis( v1, distance );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tlocalToWorld: function ( vector ) {\r\n\r\n\t\treturn vector.applyMatrix4( this.matrixWorld );\r\n\r\n\t},\r\n\r\n\tworldToLocal: function () {\r\n\r\n\t\tvar m1 = new THREE.Matrix4();\r\n\r\n\t\treturn function ( vector ) {\r\n\r\n\t\t\treturn vector.applyMatrix4( m1.getInverse( this.matrixWorld ) );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tlookAt: function () {\r\n\r\n\t\t// This routine does not support objects with rotated and/or translated parent(s)\r\n\r\n\t\tvar m1 = new THREE.Matrix4();\r\n\r\n\t\treturn function ( vector ) {\r\n\r\n\t\t\tm1.lookAt( vector, this.position, this.up );\r\n\r\n\t\t\tthis.quaternion.setFromRotationMatrix( m1 );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tadd: function ( object ) {\r\n\r\n\t\tif ( arguments.length > 1 ) {\r\n\r\n\t\t\tfor ( var i = 0; i < arguments.length; i++ ) {\r\n\r\n\t\t\t\tthis.add( arguments[ i ] );\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t};\r\n\r\n\t\tif ( object === this ) {\r\n\r\n\t\t\tconsole.error( \"THREE.Object3D.add:\", object, \"can't be added as a child of itself.\" );\r\n\t\t\treturn this;\r\n\r\n\t\t}\r\n\r\n\t\tif ( object instanceof THREE.Object3D ) {\r\n\r\n\t\t\tif ( object.parent !== undefined ) {\r\n\r\n\t\t\t\tobject.parent.remove( object );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tobject.parent = this;\r\n\t\t\tobject.dispatchEvent( { type: 'added' } );\r\n\r\n\t\t\tthis.children.push( object );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tconsole.error( \"THREE.Object3D.add:\", object, \"is not an instance of THREE.Object3D.\" );\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tremove: function ( object ) {\r\n\r\n\t\tif ( arguments.length > 1 ) {\r\n\r\n\t\t\tfor ( var i = 0; i < arguments.length; i++ ) {\r\n\r\n\t\t\t\tthis.remove( arguments[ i ] );\r\n\r\n\t\t\t}\r\n\r\n\t\t};\r\n\r\n\t\tvar index = this.children.indexOf( object );\r\n\r\n\t\tif ( index !== - 1 ) {\r\n\r\n\t\t\tobject.parent = undefined;\r\n\r\n\t\t\tobject.dispatchEvent( { type: 'removed' } );\r\n\r\n\t\t\tthis.children.splice( index, 1 );\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tgetChildByName: function ( name, recursive ) {\r\n\r\n\t\tconsole.warn( 'THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().' );\r\n\t\treturn this.getObjectByName( name, recursive );\r\n\r\n\t},\r\n\r\n\tgetObjectById: function ( id, recursive ) {\r\n\r\n\t\tif ( this.id === id ) return this;\r\n\r\n\t\tfor ( var i = 0, l = this.children.length; i < l; i ++ ) {\r\n\r\n\t\t\tvar child = this.children[ i ];\r\n\t\t\tvar object = child.getObjectById( id, recursive );\r\n\r\n\t\t\tif ( object !== undefined ) {\r\n\r\n\t\t\t\treturn object;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn undefined;\r\n\r\n\t},\r\n\r\n\tgetObjectByName: function ( name, recursive ) {\r\n\r\n\t\tif ( this.name === name ) return this;\r\n\r\n\t\tfor ( var i = 0, l = this.children.length; i < l; i ++ ) {\r\n\r\n\t\t\tvar child = this.children[ i ];\r\n\t\t\tvar object = child.getObjectByName( name, recursive );\r\n\r\n\t\t\tif ( object !== undefined ) {\r\n\r\n\t\t\t\treturn object;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn undefined;\r\n\r\n\t},\r\n\r\n\tgetWorldPosition: function ( optionalTarget ) {\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\r\n\t\tthis.updateMatrixWorld( true );\r\n\r\n\t\treturn result.setFromMatrixPosition( this.matrixWorld );\r\n\r\n\t},\r\n\r\n\tgetWorldQuaternion: function () {\r\n\r\n\t\tvar position = new THREE.Vector3();\r\n\t\tvar scale = new THREE.Vector3();\r\n\r\n\t\treturn function ( optionalTarget ) {\r\n\r\n\t\t\tvar result = optionalTarget || new THREE.Quaternion();\r\n\r\n\t\t\tthis.updateMatrixWorld( true );\r\n\r\n\t\t\tthis.matrixWorld.decompose( position, result, scale );\r\n\r\n\t\t\treturn result;\r\n\r\n\t\t}\r\n\r\n\t}(),\r\n\r\n\tgetWorldRotation: function () {\r\n\r\n\t\tvar quaternion = new THREE.Quaternion();\r\n\r\n\t\treturn function ( optionalTarget ) {\r\n\r\n\t\t\tvar result = optionalTarget || new THREE.Euler();\r\n\r\n\t\t\tthis.getWorldQuaternion( quaternion );\r\n\r\n\t\t\treturn result.setFromQuaternion( quaternion, this.rotation.order, false );\r\n\r\n\t\t}\r\n\r\n\t}(),\r\n\r\n\tgetWorldScale: function () {\r\n\r\n\t\tvar position = new THREE.Vector3();\r\n\t\tvar quaternion = new THREE.Quaternion();\r\n\r\n\t\treturn function ( optionalTarget ) {\r\n\r\n\t\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\r\n\t\t\tthis.updateMatrixWorld( true );\r\n\r\n\t\t\tthis.matrixWorld.decompose( position, quaternion, result );\r\n\r\n\t\t\treturn result;\r\n\r\n\t\t}\r\n\r\n\t}(),\r\n\r\n\tgetWorldDirection: function () {\r\n\r\n\t\tvar quaternion = new THREE.Quaternion();\r\n\r\n\t\treturn function ( optionalTarget ) {\r\n\r\n\t\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\r\n\t\t\tthis.getWorldQuaternion( quaternion );\r\n\r\n\t\t\treturn result.set( 0, 0, 1 ).applyQuaternion( quaternion );\r\n\r\n\t\t}\r\n\r\n\t}(),\r\n\r\n\traycast: function () {},\r\n\r\n\ttraverse: function ( callback ) {\r\n\r\n\t\tcallback( this );\r\n\r\n\t\tfor ( var i = 0, l = this.children.length; i < l; i ++ ) {\r\n\r\n\t\t\tthis.children[ i ].traverse( callback );\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\ttraverseVisible: function ( callback ) {\r\n\r\n\t\tif ( this.visible === false ) return;\r\n\r\n\t\tcallback( this );\r\n\r\n\t\tfor ( var i = 0, l = this.children.length; i < l; i ++ ) {\r\n\r\n\t\t\tthis.children[ i ].traverseVisible( callback );\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tupdateMatrix: function () {\r\n\r\n\t\tthis.matrix.compose( this.position, this.quaternion, this.scale );\r\n\r\n\t\tthis.matrixWorldNeedsUpdate = true;\r\n\r\n\t},\r\n\r\n\tupdateMatrixWorld: function ( force ) {\r\n\r\n\t\tif ( this.matrixAutoUpdate === true ) this.updateMatrix();\r\n\r\n\t\tif ( this.matrixWorldNeedsUpdate === true || force === true ) {\r\n\r\n\t\t\tif ( this.parent === undefined ) {\r\n\r\n\t\t\t\tthis.matrixWorld.copy( this.matrix );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tthis.matrixWorldNeedsUpdate = false;\r\n\r\n\t\t\tforce = true;\r\n\r\n\t\t}\r\n\r\n\t\t// update children\r\n\r\n\t\tfor ( var i = 0, l = this.children.length; i < l; i ++ ) {\r\n\r\n\t\t\tthis.children[ i ].updateMatrixWorld( force );\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\ttoJSON: function () {\r\n\r\n\t\tvar output = {\r\n\t\t\tmetadata: {\r\n\t\t\t\tversion: 4.3,\r\n\t\t\t\ttype: 'Object',\r\n\t\t\t\tgenerator: 'ObjectExporter'\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t//\r\n\r\n\t\tvar geometries = {};\r\n\r\n\t\tvar parseGeometry = function ( geometry ) {\r\n\r\n\t\t\tif ( output.geometries === undefined ) {\r\n\r\n\t\t\t\toutput.geometries = [];\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( geometries[ geometry.uuid ] === undefined ) {\r\n\r\n\t\t\t\tvar json = geometry.toJSON();\r\n\r\n\t\t\t\tdelete json.metadata;\r\n\r\n\t\t\t\tgeometries[ geometry.uuid ] = json;\r\n\r\n\t\t\t\toutput.geometries.push( json );\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn geometry.uuid;\r\n\r\n\t\t};\r\n\r\n\t\t//\r\n\r\n\t\tvar materials = {};\r\n\r\n\t\tvar parseMaterial = function ( material ) {\r\n\r\n\t\t\tif ( output.materials === undefined ) {\r\n\r\n\t\t\t\toutput.materials = [];\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( materials[ material.uuid ] === undefined ) {\r\n\r\n\t\t\t\tvar json = material.toJSON();\r\n\r\n\t\t\t\tdelete json.metadata;\r\n\r\n\t\t\t\tmaterials[ material.uuid ] = json;\r\n\r\n\t\t\t\toutput.materials.push( json );\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn material.uuid;\r\n\r\n\t\t};\r\n\r\n\t\t//\r\n\r\n\t\tvar parseObject = function ( object ) {\r\n\r\n\t\t\tvar data = {};\r\n\r\n\t\t\tdata.uuid = object.uuid;\r\n\t\t\tdata.type = object.type;\r\n\r\n\t\t\tif ( object.name !== '' ) data.name = object.name;\r\n\t\t\tif ( JSON.stringify( object.userData ) !== '{}' ) data.userData = object.userData;\r\n\t\t\tif ( object.visible !== true ) data.visible = object.visible;\r\n\r\n\t\t\tif ( object instanceof THREE.PerspectiveCamera ) {\r\n\r\n\t\t\t\tdata.fov = object.fov;\r\n\t\t\t\tdata.aspect = object.aspect;\r\n\t\t\t\tdata.near = object.near;\r\n\t\t\t\tdata.far = object.far;\r\n\r\n\t\t\t} else if ( object instanceof THREE.OrthographicCamera ) {\r\n\r\n\t\t\t\tdata.left = object.left;\r\n\t\t\t\tdata.right = object.right;\r\n\t\t\t\tdata.top = object.top;\r\n\t\t\t\tdata.bottom = object.bottom;\r\n\t\t\t\tdata.near = object.near;\r\n\t\t\t\tdata.far = object.far;\r\n\r\n\t\t\t} else if ( object instanceof THREE.AmbientLight ) {\r\n\r\n\t\t\t\tdata.color = object.color.getHex();\r\n\r\n\t\t\t} else if ( object instanceof THREE.DirectionalLight ) {\r\n\r\n\t\t\t\tdata.color = object.color.getHex();\r\n\t\t\t\tdata.intensity = object.intensity;\r\n\r\n\t\t\t} else if ( object instanceof THREE.PointLight ) {\r\n\r\n\t\t\t\tdata.color = object.color.getHex();\r\n\t\t\t\tdata.intensity = object.intensity;\r\n\t\t\t\tdata.distance = object.distance;\r\n\r\n\t\t\t} else if ( object instanceof THREE.SpotLight ) {\r\n\r\n\t\t\t\tdata.color = object.color.getHex();\r\n\t\t\t\tdata.intensity = object.intensity;\r\n\t\t\t\tdata.distance = object.distance;\r\n\t\t\t\tdata.angle = object.angle;\r\n\t\t\t\tdata.exponent = object.exponent;\r\n\r\n\t\t\t} else if ( object instanceof THREE.HemisphereLight ) {\r\n\r\n\t\t\t\tdata.color = object.color.getHex();\r\n\t\t\t\tdata.groundColor = object.groundColor.getHex();\r\n\r\n\t\t\t} else if ( object instanceof THREE.Mesh ) {\r\n\r\n\t\t\t\tdata.geometry = parseGeometry( object.geometry );\r\n\t\t\t\tdata.material = parseMaterial( object.material );\r\n\r\n\t\t\t} else if ( object instanceof THREE.Line ) {\r\n\r\n\t\t\t\tdata.geometry = parseGeometry( object.geometry );\r\n\t\t\t\tdata.material = parseMaterial( object.material );\r\n\r\n\t\t\t} else if ( object instanceof THREE.Sprite ) {\r\n\r\n\t\t\t\tdata.material = parseMaterial( object.material );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tdata.matrix = object.matrix.toArray();\r\n\r\n\t\t\tif ( object.children.length > 0 ) {\r\n\r\n\t\t\t\tdata.children = [];\r\n\r\n\t\t\t\tfor ( var i = 0; i < object.children.length; i ++ ) {\r\n\r\n\t\t\t\t\tdata.children.push( parseObject( object.children[ i ] ) );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn data;\r\n\r\n\t\t}\r\n\r\n\t\toutput.object = parseObject( this );\r\n\r\n\t\treturn output;\r\n\r\n\t},\r\n\r\n\tclone: function ( object, recursive ) {\r\n\r\n\t\tif ( object === undefined ) object = new THREE.Object3D();\r\n\t\tif ( recursive === undefined ) recursive = true;\r\n\r\n\t\tobject.name = this.name;\r\n\r\n\t\tobject.up.copy( this.up );\r\n\r\n\t\tobject.position.copy( this.position );\r\n\t\tobject.quaternion.copy( this.quaternion );\r\n\t\tobject.scale.copy( this.scale );\r\n\r\n\t\tobject.renderDepth = this.renderDepth;\r\n\r\n\t\tobject.rotationAutoUpdate = this.rotationAutoUpdate;\r\n\r\n\t\tobject.matrix.copy( this.matrix );\r\n\t\tobject.matrixWorld.copy( this.matrixWorld );\r\n\r\n\t\tobject.matrixAutoUpdate = this.matrixAutoUpdate;\r\n\t\tobject.matrixWorldNeedsUpdate = this.matrixWorldNeedsUpdate;\r\n\r\n\t\tobject.visible = this.visible;\r\n\r\n\t\tobject.castShadow = this.castShadow;\r\n\t\tobject.receiveShadow = this.receiveShadow;\r\n\r\n\t\tobject.frustumCulled = this.frustumCulled;\r\n\r\n\t\tobject.userData = JSON.parse( JSON.stringify( this.userData ) );\r\n\r\n\t\tif ( recursive === true ) {\r\n\r\n\t\t\tfor ( var i = 0; i < this.children.length; i ++ ) {\r\n\r\n\t\t\t\tvar child = this.children[ i ];\r\n\t\t\t\tobject.add( child.clone() );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn object;\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.EventDispatcher.prototype.apply( THREE.Object3D.prototype );\r\n\r\nTHREE.Object3DIdCount = 0;\r\n\r\n// File:src/core/Projector.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.Projector = function () {\r\n\r\n\tconsole.warn( 'THREE.Projector has been moved to /examples/renderers/Projector.js.' );\r\n\r\n\tthis.projectVector = function ( vector, camera ) {\r\n\r\n\t\tconsole.warn( 'THREE.Projector: .projectVector() is now vector.project().' );\r\n\t\tvector.project( camera );\r\n\r\n\t};\r\n\r\n\tthis.unprojectVector = function ( vector, camera ) {\r\n\r\n\t\tconsole.warn( 'THREE.Projector: .unprojectVector() is now vector.unproject().' );\r\n\t\tvector.unproject( camera );\r\n\r\n\t};\r\n\r\n\tthis.pickingRay = function ( vector, camera ) {\r\n\r\n\t\tconsole.error( 'THREE.Projector: .pickingRay() has been removed.' );\r\n\r\n\t};\r\n\r\n};\r\n\r\n// File:src/core/Face3.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.Face3 = function ( a, b, c, normal, color, materialIndex ) {\r\n\r\n\tthis.a = a;\r\n\tthis.b = b;\r\n\tthis.c = c;\r\n\r\n\tthis.normal = normal instanceof THREE.Vector3 ? normal : new THREE.Vector3();\r\n\tthis.vertexNormals = normal instanceof Array ? normal : [];\r\n\r\n\tthis.color = color instanceof THREE.Color ? color : new THREE.Color();\r\n\tthis.vertexColors = color instanceof Array ? color : [];\r\n\r\n\tthis.vertexTangents = [];\r\n\r\n\tthis.materialIndex = materialIndex !== undefined ? materialIndex : 0;\r\n\r\n};\r\n\r\nTHREE.Face3.prototype = {\r\n\r\n\tconstructor: THREE.Face3,\r\n\r\n\tclone: function () {\r\n\r\n\t\tvar face = new THREE.Face3( this.a, this.b, this.c );\r\n\r\n\t\tface.normal.copy( this.normal );\r\n\t\tface.color.copy( this.color );\r\n\r\n\t\tface.materialIndex = this.materialIndex;\r\n\r\n\t\tfor ( var i = 0, il = this.vertexNormals.length; i < il; i ++ ) {\r\n\r\n\t\t\tface.vertexNormals[ i ] = this.vertexNormals[ i ].clone();\r\n\r\n\t\t}\r\n\r\n\t\tfor ( var i = 0, il = this.vertexColors.length; i < il; i ++ ) {\r\n\r\n\t\t\tface.vertexColors[ i ] = this.vertexColors[ i ].clone();\r\n\r\n\t\t}\r\n\r\n\t\tfor ( var i = 0, il = this.vertexTangents.length; i < il; i ++ ) {\r\n\r\n\t\t\tface.vertexTangents[ i ] = this.vertexTangents[ i ].clone();\r\n\r\n\t\t}\r\n\r\n\t\treturn face;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/core/Face4.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.Face4 = function ( a, b, c, d, normal, color, materialIndex ) {\r\n\r\n\tconsole.warn( 'THREE.Face4 has been removed. A THREE.Face3 will be created instead.' )\r\n\treturn new THREE.Face3( a, b, c, normal, color, materialIndex );\r\n\r\n};\r\n\r\n// File:src/core/BufferAttribute.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.BufferAttribute = function ( array, itemSize ) {\r\n\r\n\tthis.array = array;\r\n\tthis.itemSize = itemSize;\r\n\r\n\tthis.needsUpdate = false;\r\n\r\n};\r\n\r\nTHREE.BufferAttribute.prototype = {\r\n\r\n\tconstructor: THREE.BufferAttribute,\r\n\r\n\tget length () {\r\n\r\n\t\treturn this.array.length;\r\n\r\n\t},\r\n\r\n\tcopyAt: function ( index1, attribute, index2 ) {\r\n\r\n\t\tindex1 *= this.itemSize;\r\n\t\tindex2 *= attribute.itemSize;\r\n\r\n\t\tfor ( var i = 0, l = this.itemSize; i < l; i ++ ) {\r\n\r\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tset: function ( value ) {\r\n\r\n\t\tthis.array.set( value );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetX: function ( index, x ) {\r\n\r\n\t\tthis.array[ index * this.itemSize ] = x;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetY: function ( index, y ) {\r\n\r\n\t\tthis.array[ index * this.itemSize + 1 ] = y;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetZ: function ( index, z ) {\r\n\r\n\t\tthis.array[ index * this.itemSize + 2 ] = z;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetXY: function ( index, x, y ) {\r\n\r\n\t\tindex *= this.itemSize;\r\n\r\n\t\tthis.array[ index ] = x;\r\n\t\tthis.array[ index + 1 ] = y;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetXYZ: function ( index, x, y, z ) {\r\n\r\n\t\tindex *= this.itemSize;\r\n\r\n\t\tthis.array[ index ] = x;\r\n\t\tthis.array[ index + 1 ] = y;\r\n\t\tthis.array[ index + 2 ] = z;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetXYZW: function ( index, x, y, z, w ) {\r\n\r\n\t\tindex *= this.itemSize;\r\n\r\n\t\tthis.array[ index ] = x;\r\n\t\tthis.array[ index + 1 ] = y;\r\n\t\tthis.array[ index + 2 ] = z;\r\n\t\tthis.array[ index + 3 ] = w;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new THREE.BufferAttribute( new this.array.constructor( this.array ), this.itemSize );\r\n\r\n\t}\r\n\r\n};\r\n\r\n//\r\n\r\nTHREE.Int8Attribute = function ( data, itemSize ) {\r\n\r\n\tconsole.warn( 'THREE.Int8Attribute has been removed. Use THREE.BufferAttribute( array, itemSize ) instead.' );\r\n\treturn new THREE.BufferAttribute( data, itemSize );\r\n\r\n};\r\n\r\nTHREE.Uint8Attribute = function ( data, itemSize ) {\r\n\r\n\tconsole.warn( 'THREE.Uint8Attribute has been removed. Use THREE.BufferAttribute( array, itemSize ) instead.' );\r\n\treturn new THREE.BufferAttribute( data, itemSize );\r\n\r\n};\r\n\r\nTHREE.Uint8ClampedAttribute = function ( data, itemSize ) {\r\n\r\n\tconsole.warn( 'THREE.Uint8ClampedAttribute has been removed. Use THREE.BufferAttribute( array, itemSize ) instead.' );\r\n\treturn new THREE.BufferAttribute( data, itemSize );\r\n\r\n\r\n};\r\n\r\nTHREE.Int16Attribute = function ( data, itemSize ) {\r\n\r\n\tconsole.warn( 'THREE.Int16Attribute has been removed. Use THREE.BufferAttribute( array, itemSize ) instead.' );\r\n\treturn new THREE.BufferAttribute( data, itemSize );\r\n\r\n};\r\n\r\nTHREE.Uint16Attribute = function ( data, itemSize ) {\r\n\r\n\tconsole.warn( 'THREE.Uint16Attribute has been removed. Use THREE.BufferAttribute( array, itemSize ) instead.' );\r\n\treturn new THREE.BufferAttribute( data, itemSize );\r\n\r\n};\r\n\r\nTHREE.Int32Attribute = function ( data, itemSize ) {\r\n\r\n\tconsole.warn( 'THREE.Int32Attribute has been removed. Use THREE.BufferAttribute( array, itemSize ) instead.' );\r\n\treturn new THREE.BufferAttribute( data, itemSize );\r\n\r\n};\r\n\r\nTHREE.Uint32Attribute = function ( data, itemSize ) {\r\n\r\n\tconsole.warn( 'THREE.Uint32Attribute has been removed. Use THREE.BufferAttribute( array, itemSize ) instead.' );\r\n\treturn new THREE.BufferAttribute( data, itemSize );\r\n\r\n};\r\n\r\nTHREE.Float32Attribute = function ( data, itemSize ) {\r\n\r\n\tconsole.warn( 'THREE.Float32Attribute has been removed. Use THREE.BufferAttribute( array, itemSize ) instead.' );\r\n\treturn new THREE.BufferAttribute( data, itemSize );\r\n\r\n};\r\n\r\nTHREE.Float64Attribute = function ( data, itemSize ) {\r\n\r\n\tconsole.warn( 'THREE.Float64Attribute has been removed. Use THREE.BufferAttribute( array, itemSize ) instead.' );\r\n\treturn new THREE.BufferAttribute( data, itemSize );\r\n\r\n};\r\n\r\n// File:src/core/BufferGeometry.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.BufferGeometry = function () {\r\n\r\n\tObject.defineProperty( this, 'id', { value: THREE.GeometryIdCount ++ } );\r\n\r\n\tthis.uuid = THREE.Math.generateUUID();\r\n\r\n\tthis.name = '';\r\n\tthis.type = 'BufferGeometry';\r\n\r\n\tthis.attributes = {};\r\n\tthis.attributesKeys = [];\r\n\r\n\tthis.drawcalls = [];\r\n\tthis.offsets = this.drawcalls; // backwards compatibility\r\n\r\n\tthis.boundingBox = null;\r\n\tthis.boundingSphere = null;\r\n\r\n};\r\n\r\nTHREE.BufferGeometry.prototype = {\r\n\r\n\tconstructor: THREE.BufferGeometry,\r\n\r\n\taddAttribute: function ( name, attribute ) {\r\n\r\n\t\tif ( attribute instanceof THREE.BufferAttribute === false ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).' );\r\n\r\n\t\t\tthis.attributes[ name ] = { array: arguments[ 1 ], itemSize: arguments[ 2 ] };\r\n\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\r\n\t\tthis.attributes[ name ] = attribute;\r\n\t\tthis.attributesKeys = Object.keys( this.attributes );\r\n\r\n\t},\r\n\r\n\tgetAttribute: function ( name ) {\r\n\r\n\t\treturn this.attributes[ name ];\r\n\r\n\t},\r\n\r\n\taddDrawCall: function ( start, count, indexOffset ) {\r\n\r\n\t\tthis.drawcalls.push( {\r\n\r\n\t\t\tstart: start,\r\n\t\t\tcount: count,\r\n\t\t\tindex: indexOffset !== undefined ? indexOffset : 0\r\n\r\n\t\t} );\r\n\r\n\t},\r\n\r\n\tapplyMatrix: function ( matrix ) {\r\n\r\n\t\tvar position = this.attributes.position;\r\n\r\n\t\tif ( position !== undefined ) {\r\n\r\n\t\t\tmatrix.applyToVector3Array( position.array );\r\n\t\t\tposition.needsUpdate = true;\r\n\r\n\t\t}\r\n\r\n\t\tvar normal = this.attributes.normal;\r\n\r\n\t\tif ( normal !== undefined ) {\r\n\r\n\t\t\tvar normalMatrix = new THREE.Matrix3().getNormalMatrix( matrix );\r\n\r\n\t\t\tnormalMatrix.applyToVector3Array( normal.array );\r\n\t\t\tnormal.needsUpdate = true;\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tcenter: function () {\r\n\r\n\t\t// TODO\r\n\r\n\t},\r\n\r\n\tfromGeometry: function ( geometry, settings ) {\r\n\r\n\t\tsettings = settings || { 'vertexColors': THREE.NoColors };\r\n\r\n\t\tvar vertices = geometry.vertices;\r\n\t\tvar faces = geometry.faces;\r\n\t\tvar faceVertexUvs = geometry.faceVertexUvs;\r\n\t\tvar vertexColors = settings.vertexColors;\r\n\t\tvar hasFaceVertexUv = faceVertexUvs[ 0 ].length > 0;\r\n\t\tvar hasFaceVertexNormals = faces[ 0 ].vertexNormals.length == 3;\r\n\r\n\t\tvar positions = new Float32Array( faces.length * 3 * 3 );\r\n\t\tthis.addAttribute( 'position', new THREE.BufferAttribute( positions, 3 ) );\r\n\r\n\t\tvar normals = new Float32Array( faces.length * 3 * 3 );\r\n\t\tthis.addAttribute( 'normal', new THREE.BufferAttribute( normals, 3 ) );\r\n\r\n\t\tif ( vertexColors !== THREE.NoColors ) {\r\n\r\n\t\t\tvar colors = new Float32Array( faces.length * 3 * 3 );\r\n\t\t\tthis.addAttribute( 'color', new THREE.BufferAttribute( colors, 3 ) );\r\n\r\n\t\t}\r\n\r\n\t\tif ( hasFaceVertexUv === true ) {\r\n\r\n\t\t\tvar uvs = new Float32Array( faces.length * 3 * 2 );\r\n\t\t\tthis.addAttribute( 'uv', new THREE.BufferAttribute( uvs, 2 ) );\r\n\r\n\t\t}\r\n\r\n\t\tfor ( var i = 0, i2 = 0, i3 = 0; i < faces.length; i ++, i2 += 6, i3 += 9 ) {\r\n\r\n\t\t\tvar face = faces[ i ];\r\n\r\n\t\t\tvar a = vertices[ face.a ];\r\n\t\t\tvar b = vertices[ face.b ];\r\n\t\t\tvar c = vertices[ face.c ];\r\n\r\n\t\t\tpositions[ i3 ] = a.x;\r\n\t\t\tpositions[ i3 + 1 ] = a.y;\r\n\t\t\tpositions[ i3 + 2 ] = a.z;\r\n\r\n\t\t\tpositions[ i3 + 3 ] = b.x;\r\n\t\t\tpositions[ i3 + 4 ] = b.y;\r\n\t\t\tpositions[ i3 + 5 ] = b.z;\r\n\r\n\t\t\tpositions[ i3 + 6 ] = c.x;\r\n\t\t\tpositions[ i3 + 7 ] = c.y;\r\n\t\t\tpositions[ i3 + 8 ] = c.z;\r\n\r\n\t\t\tif ( hasFaceVertexNormals === true ) {\r\n\r\n\t\t\t\tvar na = face.vertexNormals[ 0 ];\r\n\t\t\t\tvar nb = face.vertexNormals[ 1 ];\r\n\t\t\t\tvar nc = face.vertexNormals[ 2 ];\r\n\r\n\t\t\t\tnormals[ i3 ] = na.x;\r\n\t\t\t\tnormals[ i3 + 1 ] = na.y;\r\n\t\t\t\tnormals[ i3 + 2 ] = na.z;\r\n\r\n\t\t\t\tnormals[ i3 + 3 ] = nb.x;\r\n\t\t\t\tnormals[ i3 + 4 ] = nb.y;\r\n\t\t\t\tnormals[ i3 + 5 ] = nb.z;\r\n\r\n\t\t\t\tnormals[ i3 + 6 ] = nc.x;\r\n\t\t\t\tnormals[ i3 + 7 ] = nc.y;\r\n\t\t\t\tnormals[ i3 + 8 ] = nc.z;\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tvar n = face.normal;\r\n\r\n\t\t\t\tnormals[ i3 ] = n.x;\r\n\t\t\t\tnormals[ i3 + 1 ] = n.y;\r\n\t\t\t\tnormals[ i3 + 2 ] = n.z;\r\n\r\n\t\t\t\tnormals[ i3 + 3 ] = n.x;\r\n\t\t\t\tnormals[ i3 + 4 ] = n.y;\r\n\t\t\t\tnormals[ i3 + 5 ] = n.z;\r\n\r\n\t\t\t\tnormals[ i3 + 6 ] = n.x;\r\n\t\t\t\tnormals[ i3 + 7 ] = n.y;\r\n\t\t\t\tnormals[ i3 + 8 ] = n.z;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( vertexColors === THREE.FaceColors ) {\r\n\r\n\t\t\t\tvar fc = face.color;\r\n\r\n\t\t\t\tcolors[ i3 ] = fc.r;\r\n\t\t\t\tcolors[ i3 + 1 ] = fc.g;\r\n\t\t\t\tcolors[ i3 + 2 ] = fc.b;\r\n\r\n\t\t\t\tcolors[ i3 + 3 ] = fc.r;\r\n\t\t\t\tcolors[ i3 + 4 ] = fc.g;\r\n\t\t\t\tcolors[ i3 + 5 ] = fc.b;\r\n\r\n\t\t\t\tcolors[ i3 + 6 ] = fc.r;\r\n\t\t\t\tcolors[ i3 + 7 ] = fc.g;\r\n\t\t\t\tcolors[ i3 + 8 ] = fc.b;\r\n\r\n\t\t\t} else if ( vertexColors === THREE.VertexColors ) {\r\n\r\n\t\t\t\tvar vca = face.vertexColors[ 0 ];\r\n\t\t\t\tvar vcb = face.vertexColors[ 1 ];\r\n\t\t\t\tvar vcc = face.vertexColors[ 2 ];\r\n\r\n\t\t\t\tcolors[ i3 ] = vca.r;\r\n\t\t\t\tcolors[ i3 + 1 ] = vca.g;\r\n\t\t\t\tcolors[ i3 + 2 ] = vca.b;\r\n\r\n\t\t\t\tcolors[ i3 + 3 ] = vcb.r;\r\n\t\t\t\tcolors[ i3 + 4 ] = vcb.g;\r\n\t\t\t\tcolors[ i3 + 5 ] = vcb.b;\r\n\r\n\t\t\t\tcolors[ i3 + 6 ] = vcc.r;\r\n\t\t\t\tcolors[ i3 + 7 ] = vcc.g;\r\n\t\t\t\tcolors[ i3 + 8 ] = vcc.b;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( hasFaceVertexUv === true ) {\r\n\r\n\t\t\t\tvar uva = faceVertexUvs[ 0 ][ i ][ 0 ];\r\n\t\t\t\tvar uvb = faceVertexUvs[ 0 ][ i ][ 1 ];\r\n\t\t\t\tvar uvc = faceVertexUvs[ 0 ][ i ][ 2 ];\r\n\r\n\t\t\t\tuvs[ i2 ] = uva.x;\r\n\t\t\t\tuvs[ i2 + 1 ] = uva.y;\r\n\r\n\t\t\t\tuvs[ i2 + 2 ] = uvb.x;\r\n\t\t\t\tuvs[ i2 + 3 ] = uvb.y;\r\n\r\n\t\t\t\tuvs[ i2 + 4 ] = uvc.x;\r\n\t\t\t\tuvs[ i2 + 5 ] = uvc.y;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tthis.computeBoundingSphere()\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tcomputeBoundingBox: function () {\r\n\r\n\t\tvar vector = new THREE.Vector3();\r\n\r\n\t\treturn function () {\r\n\r\n\t\t\tif ( this.boundingBox === null ) {\r\n\r\n\t\t\t\tthis.boundingBox = new THREE.Box3();\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar positions = this.attributes.position.array;\r\n\r\n\t\t\tif ( positions ) {\r\n\r\n\t\t\t\tvar bb = this.boundingBox;\r\n\t\t\t\tbb.makeEmpty();\r\n\r\n\t\t\t\tfor ( var i = 0, il = positions.length; i < il; i += 3 ) {\r\n\r\n\t\t\t\t\tvector.set( positions[ i ], positions[ i + 1 ], positions[ i + 2 ] );\r\n\t\t\t\t\tbb.expandByPoint( vector );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( positions === undefined || positions.length === 0 ) {\r\n\r\n\t\t\t\tthis.boundingBox.min.set( 0, 0, 0 );\r\n\t\t\t\tthis.boundingBox.max.set( 0, 0, 0 );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( isNaN( this.boundingBox.min.x ) || isNaN( this.boundingBox.min.y ) || isNaN( this.boundingBox.min.z ) ) {\r\n\r\n\t\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox: Computed min/max have NaN values. The \"position\" attribute is likely to have NaN values.' );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}(),\r\n\r\n\tcomputeBoundingSphere: function () {\r\n\r\n\t\tvar box = new THREE.Box3();\r\n\t\tvar vector = new THREE.Vector3();\r\n\r\n\t\treturn function () {\r\n\r\n\t\t\tif ( this.boundingSphere === null ) {\r\n\r\n\t\t\t\tthis.boundingSphere = new THREE.Sphere();\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar positions = this.attributes.position.array;\r\n\r\n\t\t\tif ( positions ) {\r\n\r\n\t\t\t\tbox.makeEmpty();\r\n\r\n\t\t\t\tvar center = this.boundingSphere.center;\r\n\r\n\t\t\t\tfor ( var i = 0, il = positions.length; i < il; i += 3 ) {\r\n\r\n\t\t\t\t\tvector.set( positions[ i ], positions[ i + 1 ], positions[ i + 2 ] );\r\n\t\t\t\t\tbox.expandByPoint( vector );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tbox.center( center );\r\n\r\n\t\t\t\t// hoping to find a boundingSphere with a radius smaller than the\r\n\t\t\t\t// boundingSphere of the boundingBox: sqrt(3) smaller in the best case\r\n\r\n\t\t\t\tvar maxRadiusSq = 0;\r\n\r\n\t\t\t\tfor ( var i = 0, il = positions.length; i < il; i += 3 ) {\r\n\r\n\t\t\t\t\tvector.set( positions[ i ], positions[ i + 1 ], positions[ i + 2 ] );\r\n\t\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( vector ) );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.boundingSphere.radius = Math.sqrt( maxRadiusSq );\r\n\r\n\t\t\t\tif ( isNaN( this.boundingSphere.radius ) ) {\r\n\r\n\t\t\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \"position\" attribute is likely to have NaN values.' );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}(),\r\n\r\n\tcomputeFaceNormals: function () {\r\n\r\n\t\t// backwards compatibility\r\n\r\n\t},\r\n\r\n\tcomputeVertexNormals: function () {\r\n\r\n\t\tvar attributes = this.attributes;\r\n\r\n\t\tif ( attributes.position ) {\r\n\r\n\t\t\tvar positions = attributes.position.array;\r\n\r\n\t\t\tif ( attributes.normal === undefined ) {\r\n\r\n\t\t\t\tthis.addAttribute( 'normal', new THREE.BufferAttribute( new Float32Array( positions.length ), 3 ) );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t// reset existing normals to zero\r\n\r\n\t\t\t\tvar normals = attributes.normal.array;\r\n\r\n\t\t\t\tfor ( var i = 0, il = normals.length; i < il; i ++ ) {\r\n\r\n\t\t\t\t\tnormals[ i ] = 0;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar normals = attributes.normal.array;\r\n\r\n\t\t\tvar vA, vB, vC,\r\n\r\n\t\t\tpA = new THREE.Vector3(),\r\n\t\t\tpB = new THREE.Vector3(),\r\n\t\t\tpC = new THREE.Vector3(),\r\n\r\n\t\t\tcb = new THREE.Vector3(),\r\n\t\t\tab = new THREE.Vector3();\r\n\r\n\t\t\t// indexed elements\r\n\r\n\t\t\tif ( attributes.index ) {\r\n\r\n\t\t\t\tvar indices = attributes.index.array;\r\n\r\n\t\t\t\tvar offsets = ( this.offsets.length > 0 ? this.offsets : [ { start: 0, count: indices.length, index: 0 } ] );\r\n\r\n\t\t\t\tfor ( var j = 0, jl = offsets.length; j < jl; ++ j ) {\r\n\r\n\t\t\t\t\tvar start = offsets[ j ].start;\r\n\t\t\t\t\tvar count = offsets[ j ].count;\r\n\t\t\t\t\tvar index = offsets[ j ].index;\r\n\r\n\t\t\t\t\tfor ( var i = start, il = start + count; i < il; i += 3 ) {\r\n\r\n\t\t\t\t\t\tvA = ( index + indices[ i ] ) * 3;\r\n\t\t\t\t\t\tvB = ( index + indices[ i + 1 ] ) * 3;\r\n\t\t\t\t\t\tvC = ( index + indices[ i + 2 ] ) * 3;\r\n\r\n\t\t\t\t\t\tpA.fromArray( positions, vA );\r\n\t\t\t\t\t\tpB.fromArray( positions, vB );\r\n\t\t\t\t\t\tpC.fromArray( positions, vC );\r\n\r\n\t\t\t\t\t\tcb.subVectors( pC, pB );\r\n\t\t\t\t\t\tab.subVectors( pA, pB );\r\n\t\t\t\t\t\tcb.cross( ab );\r\n\r\n\t\t\t\t\t\tnormals[ vA ] += cb.x;\r\n\t\t\t\t\t\tnormals[ vA + 1 ] += cb.y;\r\n\t\t\t\t\t\tnormals[ vA + 2 ] += cb.z;\r\n\r\n\t\t\t\t\t\tnormals[ vB ] += cb.x;\r\n\t\t\t\t\t\tnormals[ vB + 1 ] += cb.y;\r\n\t\t\t\t\t\tnormals[ vB + 2 ] += cb.z;\r\n\r\n\t\t\t\t\t\tnormals[ vC ] += cb.x;\r\n\t\t\t\t\t\tnormals[ vC + 1 ] += cb.y;\r\n\t\t\t\t\t\tnormals[ vC + 2 ] += cb.z;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t// non-indexed elements (unconnected triangle soup)\r\n\r\n\t\t\t\tfor ( var i = 0, il = positions.length; i < il; i += 9 ) {\r\n\r\n\t\t\t\t\tpA.fromArray( positions, i );\r\n\t\t\t\t\tpB.fromArray( positions, i + 3 );\r\n\t\t\t\t\tpC.fromArray( positions, i + 6 );\r\n\r\n\t\t\t\t\tcb.subVectors( pC, pB );\r\n\t\t\t\t\tab.subVectors( pA, pB );\r\n\t\t\t\t\tcb.cross( ab );\r\n\r\n\t\t\t\t\tnormals[ i ] = cb.x;\r\n\t\t\t\t\tnormals[ i + 1 ] = cb.y;\r\n\t\t\t\t\tnormals[ i + 2 ] = cb.z;\r\n\r\n\t\t\t\t\tnormals[ i + 3 ] = cb.x;\r\n\t\t\t\t\tnormals[ i + 4 ] = cb.y;\r\n\t\t\t\t\tnormals[ i + 5 ] = cb.z;\r\n\r\n\t\t\t\t\tnormals[ i + 6 ] = cb.x;\r\n\t\t\t\t\tnormals[ i + 7 ] = cb.y;\r\n\t\t\t\t\tnormals[ i + 8 ] = cb.z;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tthis.normalizeNormals();\r\n\r\n\t\t\tattributes.normal.needsUpdate = true;\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tcomputeTangents: function () {\r\n\r\n\t\t// based on http://www.terathon.com/code/tangent.html\r\n\t\t// (per vertex tangents)\r\n\r\n\t\tif ( this.attributes.index === undefined ||\r\n\t\t\t this.attributes.position === undefined ||\r\n\t\t\t this.attributes.normal === undefined ||\r\n\t\t\t this.attributes.uv === undefined ) {\r\n\r\n\t\t\tconsole.warn( 'Missing required attributes (index, position, normal or uv) in BufferGeometry.computeTangents()' );\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\r\n\t\tvar indices = this.attributes.index.array;\r\n\t\tvar positions = this.attributes.position.array;\r\n\t\tvar normals = this.attributes.normal.array;\r\n\t\tvar uvs = this.attributes.uv.array;\r\n\r\n\t\tvar nVertices = positions.length / 3;\r\n\r\n\t\tif ( this.attributes.tangent === undefined ) {\r\n\r\n\t\t\tthis.addAttribute( 'tangent', new THREE.BufferAttribute( new Float32Array( 4 * nVertices ), 4 ) );\r\n\r\n\t\t}\r\n\r\n\t\tvar tangents = this.attributes.tangent.array;\r\n\r\n\t\tvar tan1 = [], tan2 = [];\r\n\r\n\t\tfor ( var k = 0; k < nVertices; k ++ ) {\r\n\r\n\t\t\ttan1[ k ] = new THREE.Vector3();\r\n\t\t\ttan2[ k ] = new THREE.Vector3();\r\n\r\n\t\t}\r\n\r\n\t\tvar vA = new THREE.Vector3(),\r\n\t\t\tvB = new THREE.Vector3(),\r\n\t\t\tvC = new THREE.Vector3(),\r\n\r\n\t\t\tuvA = new THREE.Vector2(),\r\n\t\t\tuvB = new THREE.Vector2(),\r\n\t\t\tuvC = new THREE.Vector2(),\r\n\r\n\t\t\tx1, x2, y1, y2, z1, z2,\r\n\t\t\ts1, s2, t1, t2, r;\r\n\r\n\t\tvar sdir = new THREE.Vector3(), tdir = new THREE.Vector3();\r\n\r\n\t\tfunction handleTriangle( a, b, c ) {\r\n\r\n\t\t\tvA.fromArray( positions, a * 3 );\r\n\t\t\tvB.fromArray( positions, b * 3 );\r\n\t\t\tvC.fromArray( positions, c * 3 );\r\n\r\n\t\t\tuvA.fromArray( uvs, a * 2 );\r\n\t\t\tuvB.fromArray( uvs, b * 2 );\r\n\t\t\tuvC.fromArray( uvs, c * 2 );\r\n\r\n\t\t\tx1 = vB.x - vA.x;\r\n\t\t\tx2 = vC.x - vA.x;\r\n\r\n\t\t\ty1 = vB.y - vA.y;\r\n\t\t\ty2 = vC.y - vA.y;\r\n\r\n\t\t\tz1 = vB.z - vA.z;\r\n\t\t\tz2 = vC.z - vA.z;\r\n\r\n\t\t\ts1 = uvB.x - uvA.x;\r\n\t\t\ts2 = uvC.x - uvA.x;\r\n\r\n\t\t\tt1 = uvB.y - uvA.y;\r\n\t\t\tt2 = uvC.y - uvA.y;\r\n\r\n\t\t\tr = 1.0 / ( s1 * t2 - s2 * t1 );\r\n\r\n\t\t\tsdir.set(\r\n\t\t\t\t( t2 * x1 - t1 * x2 ) * r,\r\n\t\t\t\t( t2 * y1 - t1 * y2 ) * r,\r\n\t\t\t\t( t2 * z1 - t1 * z2 ) * r\r\n\t\t\t);\r\n\r\n\t\t\ttdir.set(\r\n\t\t\t\t( s1 * x2 - s2 * x1 ) * r,\r\n\t\t\t\t( s1 * y2 - s2 * y1 ) * r,\r\n\t\t\t\t( s1 * z2 - s2 * z1 ) * r\r\n\t\t\t);\r\n\r\n\t\t\ttan1[ a ].add( sdir );\r\n\t\t\ttan1[ b ].add( sdir );\r\n\t\t\ttan1[ c ].add( sdir );\r\n\r\n\t\t\ttan2[ a ].add( tdir );\r\n\t\t\ttan2[ b ].add( tdir );\r\n\t\t\ttan2[ c ].add( tdir );\r\n\r\n\t\t}\r\n\r\n\t\tvar i, il;\r\n\t\tvar j, jl;\r\n\t\tvar iA, iB, iC;\r\n\r\n\t\tif ( this.drawcalls.length === 0 ) {\r\n\r\n\t\t\tthis.addDrawCall( 0, indices.length, 0 );\r\n\r\n\t\t}\r\n\r\n\t\tvar drawcalls = this.drawcalls;\r\n\r\n\t\tfor ( j = 0, jl = drawcalls.length; j < jl; ++ j ) {\r\n\r\n\t\t\tvar start = drawcalls[ j ].start;\r\n\t\t\tvar count = drawcalls[ j ].count;\r\n\t\t\tvar index = drawcalls[ j ].index;\r\n\r\n\t\t\tfor ( i = start, il = start + count; i < il; i += 3 ) {\r\n\r\n\t\t\t\tiA = index + indices[ i ];\r\n\t\t\t\tiB = index + indices[ i + 1 ];\r\n\t\t\t\tiC = index + indices[ i + 2 ];\r\n\r\n\t\t\t\thandleTriangle( iA, iB, iC );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tvar tmp = new THREE.Vector3(), tmp2 = new THREE.Vector3();\r\n\t\tvar n = new THREE.Vector3(), n2 = new THREE.Vector3();\r\n\t\tvar w, t, test;\r\n\r\n\t\tfunction handleVertex( v ) {\r\n\r\n\t\t\tn.fromArray( normals, v * 3 );\r\n\t\t\tn2.copy( n );\r\n\r\n\t\t\tt = tan1[ v ];\r\n\r\n\t\t\t// Gram-Schmidt orthogonalize\r\n\r\n\t\t\ttmp.copy( t );\r\n\t\t\ttmp.sub( n.multiplyScalar( n.dot( t ) ) ).normalize();\r\n\r\n\t\t\t// Calculate handedness\r\n\r\n\t\t\ttmp2.crossVectors( n2, t );\r\n\t\t\ttest = tmp2.dot( tan2[ v ] );\r\n\t\t\tw = ( test < 0.0 ) ? - 1.0 : 1.0;\r\n\r\n\t\t\ttangents[ v * 4 ] = tmp.x;\r\n\t\t\ttangents[ v * 4 + 1 ] = tmp.y;\r\n\t\t\ttangents[ v * 4 + 2 ] = tmp.z;\r\n\t\t\ttangents[ v * 4 + 3 ] = w;\r\n\r\n\t\t}\r\n\r\n\t\tfor ( j = 0, jl = drawcalls.length; j < jl; ++ j ) {\r\n\r\n\t\t\tvar start = drawcalls[ j ].start;\r\n\t\t\tvar count = drawcalls[ j ].count;\r\n\t\t\tvar index = drawcalls[ j ].index;\r\n\r\n\t\t\tfor ( i = start, il = start + count; i < il; i += 3 ) {\r\n\r\n\t\t\t\tiA = index + indices[ i ];\r\n\t\t\t\tiB = index + indices[ i + 1 ];\r\n\t\t\t\tiC = index + indices[ i + 2 ];\r\n\r\n\t\t\t\thandleVertex( iA );\r\n\t\t\t\thandleVertex( iB );\r\n\t\t\t\thandleVertex( iC );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\t/*\r\n\t\tcomputeOffsets\r\n\t\tCompute the draw offset for large models by chunking the index buffer into chunks of 65k addressable vertices.\r\n\t\tThis method will effectively rewrite the index buffer and remap all attributes to match the new indices.\r\n\t\tWARNING: This method will also expand the vertex count to prevent sprawled triangles across draw offsets.\r\n\t\tindexBufferSize - Defaults to 65535, but allows for larger or smaller chunks.\r\n\t*/\r\n\tcomputeOffsets: function ( indexBufferSize ) {\r\n\r\n\t\tvar size = indexBufferSize;\r\n\t\tif ( indexBufferSize === undefined )\r\n\t\t\tsize = 65535; //WebGL limits type of index buffer values to 16-bit.\r\n\r\n\t\tvar s = Date.now();\r\n\r\n\t\tvar indices = this.attributes.index.array;\r\n\t\tvar vertices = this.attributes.position.array;\r\n\r\n\t\tvar verticesCount = ( vertices.length / 3 );\r\n\t\tvar facesCount = ( indices.length / 3 );\r\n\r\n\t\t/*\r\n\t\tconsole.log(\"Computing buffers in offsets of \"+size+\" -> indices:\"+indices.length+\" vertices:\"+vertices.length);\r\n\t\tconsole.log(\"Faces to process: \"+(indices.length/3));\r\n\t\tconsole.log(\"Reordering \"+verticesCount+\" vertices.\");\r\n\t\t*/\r\n\r\n\t\tvar sortedIndices = new Uint16Array( indices.length ); //16-bit buffers\r\n\t\tvar indexPtr = 0;\r\n\t\tvar vertexPtr = 0;\r\n\r\n\t\tvar offsets = [ { start:0, count:0, index:0 } ];\r\n\t\tvar offset = offsets[ 0 ];\r\n\r\n\t\tvar duplicatedVertices = 0;\r\n\t\tvar newVerticeMaps = 0;\r\n\t\tvar faceVertices = new Int32Array( 6 );\r\n\t\tvar vertexMap = new Int32Array( vertices.length );\r\n\t\tvar revVertexMap = new Int32Array( vertices.length );\r\n\t\tfor ( var j = 0; j < vertices.length; j ++ ) { vertexMap[ j ] = - 1; revVertexMap[ j ] = - 1; }\r\n\r\n\t\t/*\r\n\t\t\tTraverse every face and reorder vertices in the proper offsets of 65k.\r\n\t\t\tWe can have more than 65k entries in the index buffer per offset, but only reference 65k values.\r\n\t\t*/\r\n\t\tfor ( var findex = 0; findex < facesCount; findex ++ ) {\r\n\t\t\tnewVerticeMaps = 0;\r\n\r\n\t\t\tfor ( var vo = 0; vo < 3; vo ++ ) {\r\n\t\t\t\tvar vid = indices[ findex * 3 + vo ];\r\n\t\t\t\tif ( vertexMap[ vid ] == - 1 ) {\r\n\t\t\t\t\t//Unmapped vertice\r\n\t\t\t\t\tfaceVertices[ vo * 2 ] = vid;\r\n\t\t\t\t\tfaceVertices[ vo * 2 + 1 ] = - 1;\r\n\t\t\t\t\tnewVerticeMaps ++;\r\n\t\t\t\t} else if ( vertexMap[ vid ] < offset.index ) {\r\n\t\t\t\t\t//Reused vertices from previous block (duplicate)\r\n\t\t\t\t\tfaceVertices[ vo * 2 ] = vid;\r\n\t\t\t\t\tfaceVertices[ vo * 2 + 1 ] = - 1;\r\n\t\t\t\t\tduplicatedVertices ++;\r\n\t\t\t\t} else {\r\n\t\t\t\t\t//Reused vertice in the current block\r\n\t\t\t\t\tfaceVertices[ vo * 2 ] = vid;\r\n\t\t\t\t\tfaceVertices[ vo * 2 + 1 ] = vertexMap[ vid ];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar faceMax = vertexPtr + newVerticeMaps;\r\n\t\t\tif ( faceMax > ( offset.index + size ) ) {\r\n\t\t\t\tvar new_offset = { start:indexPtr, count:0, index:vertexPtr };\r\n\t\t\t\toffsets.push( new_offset );\r\n\t\t\t\toffset = new_offset;\r\n\r\n\t\t\t\t//Re-evaluate reused vertices in light of new offset.\r\n\t\t\t\tfor ( var v = 0; v < 6; v += 2 ) {\r\n\t\t\t\t\tvar new_vid = faceVertices[ v + 1 ];\r\n\t\t\t\t\tif ( new_vid > - 1 && new_vid < offset.index )\r\n\t\t\t\t\t\tfaceVertices[ v + 1 ] = - 1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//Reindex the face.\r\n\t\t\tfor ( var v = 0; v < 6; v += 2 ) {\r\n\t\t\t\tvar vid = faceVertices[ v ];\r\n\t\t\t\tvar new_vid = faceVertices[ v + 1 ];\r\n\r\n\t\t\t\tif ( new_vid === - 1 )\r\n\t\t\t\t\tnew_vid = vertexPtr ++;\r\n\r\n\t\t\t\tvertexMap[ vid ] = new_vid;\r\n\t\t\t\trevVertexMap[ new_vid ] = vid;\r\n\t\t\t\tsortedIndices[ indexPtr ++ ] = new_vid - offset.index; //XXX overflows at 16bit\r\n\t\t\t\toffset.count ++;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/* Move all attribute values to map to the new computed indices , also expand the vertice stack to match our new vertexPtr. */\r\n\t\tthis.reorderBuffers( sortedIndices, revVertexMap, vertexPtr );\r\n\t\tthis.offsets = offsets;\r\n\r\n\t\t/*\r\n\t\tvar orderTime = Date.now();\r\n\t\tconsole.log(\"Reorder time: \"+(orderTime-s)+\"ms\");\r\n\t\tconsole.log(\"Duplicated \"+duplicatedVertices+\" vertices.\");\r\n\t\tconsole.log(\"Compute Buffers time: \"+(Date.now()-s)+\"ms\");\r\n\t\tconsole.log(\"Draw offsets: \"+offsets.length);\r\n\t\t*/\r\n\r\n\t\treturn offsets;\r\n\t},\r\n\r\n\tmerge: function () {\r\n\r\n\t\tconsole.log( 'BufferGeometry.merge(): TODO' );\r\n\r\n\t},\r\n\r\n\tnormalizeNormals: function () {\r\n\r\n\t\tvar normals = this.attributes.normal.array;\r\n\r\n\t\tvar x, y, z, n;\r\n\r\n\t\tfor ( var i = 0, il = normals.length; i < il; i += 3 ) {\r\n\r\n\t\t\tx = normals[ i ];\r\n\t\t\ty = normals[ i + 1 ];\r\n\t\t\tz = normals[ i + 2 ];\r\n\r\n\t\t\tn = 1.0 / Math.sqrt( x * x + y * y + z * z );\r\n\r\n\t\t\tnormals[ i ] *= n;\r\n\t\t\tnormals[ i + 1 ] *= n;\r\n\t\t\tnormals[ i + 2 ] *= n;\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\t/*\r\n\t\treoderBuffers:\r\n\t\tReorder attributes based on a new indexBuffer and indexMap.\r\n\t\tindexBuffer - Uint16Array of the new ordered indices.\r\n\t\tindexMap - Int32Array where the position is the new vertex ID and the value the old vertex ID for each vertex.\r\n\t\tvertexCount - Amount of total vertices considered in this reordering (in case you want to grow the vertice stack).\r\n\t*/\r\n\treorderBuffers: function ( indexBuffer, indexMap, vertexCount ) {\r\n\r\n\t\t/* Create a copy of all attributes for reordering. */\r\n\t\tvar sortedAttributes = {};\r\n\t\tfor ( var attr in this.attributes ) {\r\n\t\t\tif ( attr == 'index' )\r\n\t\t\t\tcontinue;\r\n\t\t\tvar sourceArray = this.attributes[ attr ].array;\r\n\t\t\tsortedAttributes[ attr ] = new sourceArray.constructor( this.attributes[ attr ].itemSize * vertexCount );\r\n\t\t}\r\n\r\n\t\t/* Move attribute positions based on the new index map */\r\n\t\tfor ( var new_vid = 0; new_vid < vertexCount; new_vid ++ ) {\r\n\t\t\tvar vid = indexMap[ new_vid ];\r\n\t\t\tfor ( var attr in this.attributes ) {\r\n\t\t\t\tif ( attr == 'index' )\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\tvar attrArray = this.attributes[ attr ].array;\r\n\t\t\t\tvar attrSize = this.attributes[ attr ].itemSize;\r\n\t\t\t\tvar sortedAttr = sortedAttributes[ attr ];\r\n\t\t\t\tfor ( var k = 0; k < attrSize; k ++ )\r\n\t\t\t\t\tsortedAttr[ new_vid * attrSize + k ] = attrArray[ vid * attrSize + k ];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/* Carry the new sorted buffers locally */\r\n\t\tthis.attributes[ 'index' ].array = indexBuffer;\r\n\t\tfor ( var attr in this.attributes ) {\r\n\t\t\tif ( attr == 'index' )\r\n\t\t\t\tcontinue;\r\n\t\t\tthis.attributes[ attr ].array = sortedAttributes[ attr ];\r\n\t\t\tthis.attributes[ attr ].numItems = this.attributes[ attr ].itemSize * vertexCount;\r\n\t\t}\r\n\t},\r\n\r\n\ttoJSON: function () {\r\n\r\n\t\tvar output = {\r\n\t\t\tmetadata: {\r\n\t\t\t\tversion: 4.0,\r\n\t\t\t\ttype: 'BufferGeometry',\r\n\t\t\t\tgenerator: 'BufferGeometryExporter'\r\n\t\t\t},\r\n\t\t\tuuid: this.uuid,\r\n\t\t\ttype: this.type,\r\n\t\t\tdata: {\r\n\t\t\t\tattributes: {}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvar attributes = this.attributes;\r\n\t\tvar offsets = this.offsets;\r\n\t\tvar boundingSphere = this.boundingSphere;\r\n\r\n\t\tfor ( var key in attributes ) {\r\n\r\n\t\t\tvar attribute = attributes[ key ];\r\n\r\n\t\t\tvar array = [], typeArray = attribute.array;\r\n\r\n\t\t\tfor ( var i = 0, l = typeArray.length; i < l; i ++ ) {\r\n\r\n\t\t\t\tarray[ i ] = typeArray[ i ];\r\n\r\n\t\t\t}\r\n\r\n\t\t\toutput.data.attributes[ key ] = {\r\n\t\t\t\titemSize: attribute.itemSize,\r\n\t\t\t\ttype: attribute.array.constructor.name,\r\n\t\t\t\tarray: array\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( offsets.length > 0 ) {\r\n\r\n\t\t\toutput.data.offsets = JSON.parse( JSON.stringify( offsets ) );\r\n\r\n\t\t}\r\n\r\n\t\tif ( boundingSphere !== null ) {\r\n\r\n\t\t\toutput.data.boundingSphere = {\r\n\t\t\t\tcenter: boundingSphere.center.toArray(),\r\n\t\t\t\tradius: boundingSphere.radius\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\tvar geometry = new THREE.BufferGeometry();\r\n\r\n\t\tfor ( var attr in this.attributes ) {\r\n\r\n\t\t\tvar sourceAttr = this.attributes[ attr ];\r\n\t\t\tgeometry.addAttribute( attr, sourceAttr.clone() );\r\n\r\n\t\t}\r\n\r\n\t\tfor ( var i = 0, il = this.offsets.length; i < il; i ++ ) {\r\n\r\n\t\t\tvar offset = this.offsets[ i ];\r\n\r\n\t\t\tgeometry.offsets.push( {\r\n\r\n\t\t\t\tstart: offset.start,\r\n\t\t\t\tindex: offset.index,\r\n\t\t\t\tcount: offset.count\r\n\r\n\t\t\t} );\r\n\r\n\t\t}\r\n\r\n\t\treturn geometry;\r\n\r\n\t},\r\n\r\n\tdispose: function () {\r\n\r\n\t\tthis.dispatchEvent( { type: 'dispose' } );\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.EventDispatcher.prototype.apply( THREE.BufferGeometry.prototype );\r\n\r\n// File:src/core/Geometry.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author kile / http://kile.stravaganza.org/\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author mikael emtinger / http://gomo.se/\r\n * @author zz85 / http://www.lab4games.net/zz85/blog\r\n * @author bhouston / http://exocortex.com\r\n */\r\n\r\nTHREE.Geometry = function () {\r\n\r\n\tObject.defineProperty( this, 'id', { value: THREE.GeometryIdCount ++ } );\r\n\r\n\tthis.uuid = THREE.Math.generateUUID();\r\n\r\n\tthis.name = '';\r\n\tthis.type = 'Geometry';\r\n\r\n\tthis.vertices = [];\r\n\tthis.colors = []; // one-to-one vertex colors, used in Points and Line\r\n\r\n\tthis.faces = [];\r\n\r\n\tthis.faceVertexUvs = [ [] ];\r\n\r\n\tthis.morphTargets = [];\r\n\tthis.morphColors = [];\r\n\tthis.morphNormals = [];\r\n\r\n\tthis.skinWeights = [];\r\n\tthis.skinIndices = [];\r\n\r\n\tthis.lineDistances = [];\r\n\r\n\tthis.boundingBox = null;\r\n\tthis.boundingSphere = null;\r\n\r\n\tthis.hasTangents = false;\r\n\r\n\tthis.dynamic = true; // the intermediate typed arrays will be deleted when set to false\r\n\r\n\t// update flags\r\n\r\n\tthis.verticesNeedUpdate = false;\r\n\tthis.elementsNeedUpdate = false;\r\n\tthis.uvsNeedUpdate = false;\r\n\tthis.normalsNeedUpdate = false;\r\n\tthis.tangentsNeedUpdate = false;\r\n\tthis.colorsNeedUpdate = false;\r\n\tthis.lineDistancesNeedUpdate = false;\r\n\r\n\tthis.groupsNeedUpdate = false;\r\n\r\n};\r\n\r\nTHREE.Geometry.prototype = {\r\n\r\n\tconstructor: THREE.Geometry,\r\n\r\n\tapplyMatrix: function ( matrix ) {\r\n\r\n\t\tvar normalMatrix = new THREE.Matrix3().getNormalMatrix( matrix );\r\n\r\n\t\tfor ( var i = 0, il = this.vertices.length; i < il; i ++ ) {\r\n\r\n\t\t\tvar vertex = this.vertices[ i ];\r\n\t\t\tvertex.applyMatrix4( matrix );\r\n\r\n\t\t}\r\n\r\n\t\tfor ( var i = 0, il = this.faces.length; i < il; i ++ ) {\r\n\r\n\t\t\tvar face = this.faces[ i ];\r\n\t\t\tface.normal.applyMatrix3( normalMatrix ).normalize();\r\n\r\n\t\t\tfor ( var j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) {\r\n\r\n\t\t\t\tface.vertexNormals[ j ].applyMatrix3( normalMatrix ).normalize();\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( this.boundingBox instanceof THREE.Box3 ) {\r\n\r\n\t\t\tthis.computeBoundingBox();\r\n\r\n\t\t}\r\n\r\n\t\tif ( this.boundingSphere instanceof THREE.Sphere ) {\r\n\r\n\t\t\tthis.computeBoundingSphere();\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tfromBufferGeometry: function ( geometry ) {\r\n\r\n\t\tvar scope = this;\r\n\r\n\t\tvar attributes = geometry.attributes;\r\n\r\n\t\tvar vertices = attributes.position.array;\r\n\t\tvar indices = attributes.index !== undefined ? attributes.index.array : undefined;\r\n\t\tvar normals = attributes.normal !== undefined ? attributes.normal.array : undefined;\r\n\t\tvar colors = attributes.color !== undefined ? attributes.color.array : undefined;\r\n\t\tvar uvs = attributes.uv !== undefined ? attributes.uv.array : undefined;\r\n\r\n\t\tvar tempNormals = [];\r\n\t\tvar tempUVs = [];\r\n\r\n\t\tfor ( var i = 0, j = 0; i < vertices.length; i += 3, j += 2 ) {\r\n\r\n\t\t\tscope.vertices.push( new THREE.Vector3( vertices[ i ], vertices[ i + 1 ], vertices[ i + 2 ] ) );\r\n\r\n\t\t\tif ( normals !== undefined ) {\r\n\r\n\t\t\t\ttempNormals.push( new THREE.Vector3( normals[ i ], normals[ i + 1 ], normals[ i + 2 ] ) );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( colors !== undefined ) {\r\n\r\n\t\t\t\tscope.colors.push( new THREE.Color( colors[ i ], colors[ i + 1 ], colors[ i + 2 ] ) );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( uvs !== undefined ) {\r\n\r\n\t\t\t\ttempUVs.push( new THREE.Vector2( uvs[ j ], uvs[ j + 1 ] ) );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tvar addFace = function ( a, b, c ) {\r\n\r\n\t\t\tvar vertexNormals = normals !== undefined ? [ tempNormals[ a ].clone(), tempNormals[ b ].clone(), tempNormals[ c ].clone() ] : [];\r\n\t\t\tvar vertexColors = colors !== undefined ? [ scope.colors[ a ].clone(), scope.colors[ b ].clone(), scope.colors[ c ].clone() ] : [];\r\n\r\n\t\t\tscope.faces.push( new THREE.Face3( a, b, c, vertexNormals, vertexColors ) );\r\n\t\t\tscope.faceVertexUvs[ 0 ].push( [ tempUVs[ a ], tempUVs[ b ], tempUVs[ c ] ] );\r\n\r\n\t\t};\r\n\r\n\t\tif ( indices !== undefined ) {\r\n\r\n\t\t\tfor ( var i = 0; i < indices.length; i += 3 ) {\r\n\r\n\t\t\t\taddFace( indices[ i ], indices[ i + 1 ], indices[ i + 2 ] );\r\n\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\r\n\t\t\tfor ( var i = 0; i < vertices.length / 3; i += 3 ) {\r\n\r\n\t\t\t\taddFace( i, i + 1, i + 2 );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t\t\r\n\t\tthis.computeFaceNormals();\r\n\r\n\t\tif ( geometry.boundingBox !== null ) {\r\n\r\n\t\t\tthis.boundingBox = geometry.boundingBox.clone();\r\n\r\n\t\t}\r\n\r\n\t\tif ( geometry.boundingSphere !== null ) {\r\n\r\n\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tcenter: function () {\r\n\r\n\t\tthis.computeBoundingBox();\r\n\r\n\t\tvar offset = new THREE.Vector3();\r\n\r\n\t\toffset.addVectors( this.boundingBox.min, this.boundingBox.max );\r\n\t\toffset.multiplyScalar( - 0.5 );\r\n\r\n\t\tthis.applyMatrix( new THREE.Matrix4().makeTranslation( offset.x, offset.y, offset.z ) );\r\n\t\tthis.computeBoundingBox();\r\n\r\n\t\treturn offset;\r\n\r\n\t},\r\n\r\n\tcomputeFaceNormals: function () {\r\n\r\n\t\tvar cb = new THREE.Vector3(), ab = new THREE.Vector3();\r\n\r\n\t\tfor ( var f = 0, fl = this.faces.length; f < fl; f ++ ) {\r\n\r\n\t\t\tvar face = this.faces[ f ];\r\n\r\n\t\t\tvar vA = this.vertices[ face.a ];\r\n\t\t\tvar vB = this.vertices[ face.b ];\r\n\t\t\tvar vC = this.vertices[ face.c ];\r\n\r\n\t\t\tcb.subVectors( vC, vB );\r\n\t\t\tab.subVectors( vA, vB );\r\n\t\t\tcb.cross( ab );\r\n\r\n\t\t\tcb.normalize();\r\n\r\n\t\t\tface.normal.copy( cb );\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tcomputeVertexNormals: function ( areaWeighted ) {\r\n\r\n\t\tvar v, vl, f, fl, face, vertices;\r\n\r\n\t\tvertices = new Array( this.vertices.length );\r\n\r\n\t\tfor ( v = 0, vl = this.vertices.length; v < vl; v ++ ) {\r\n\r\n\t\t\tvertices[ v ] = new THREE.Vector3();\r\n\r\n\t\t}\r\n\r\n\t\tif ( areaWeighted ) {\r\n\r\n\t\t\t// vertex normals weighted by triangle areas\r\n\t\t\t// http://www.iquilezles.org/www/articles/normals/normals.htm\r\n\r\n\t\t\tvar vA, vB, vC, vD;\r\n\t\t\tvar cb = new THREE.Vector3(), ab = new THREE.Vector3(),\r\n\t\t\t\tdb = new THREE.Vector3(), dc = new THREE.Vector3(), bc = new THREE.Vector3();\r\n\r\n\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\r\n\r\n\t\t\t\tface = this.faces[ f ];\r\n\r\n\t\t\t\tvA = this.vertices[ face.a ];\r\n\t\t\t\tvB = this.vertices[ face.b ];\r\n\t\t\t\tvC = this.vertices[ face.c ];\r\n\r\n\t\t\t\tcb.subVectors( vC, vB );\r\n\t\t\t\tab.subVectors( vA, vB );\r\n\t\t\t\tcb.cross( ab );\r\n\r\n\t\t\t\tvertices[ face.a ].add( cb );\r\n\t\t\t\tvertices[ face.b ].add( cb );\r\n\t\t\t\tvertices[ face.c ].add( cb );\r\n\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\r\n\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\r\n\r\n\t\t\t\tface = this.faces[ f ];\r\n\r\n\t\t\t\tvertices[ face.a ].add( face.normal );\r\n\t\t\t\tvertices[ face.b ].add( face.normal );\r\n\t\t\t\tvertices[ face.c ].add( face.normal );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tfor ( v = 0, vl = this.vertices.length; v < vl; v ++ ) {\r\n\r\n\t\t\tvertices[ v ].normalize();\r\n\r\n\t\t}\r\n\r\n\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\r\n\r\n\t\t\tface = this.faces[ f ];\r\n\r\n\t\t\tface.vertexNormals[ 0 ] = vertices[ face.a ].clone();\r\n\t\t\tface.vertexNormals[ 1 ] = vertices[ face.b ].clone();\r\n\t\t\tface.vertexNormals[ 2 ] = vertices[ face.c ].clone();\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tcomputeMorphNormals: function () {\r\n\r\n\t\tvar i, il, f, fl, face;\r\n\r\n\t\t// save original normals\r\n\t\t// - create temp variables on first access\r\n\t\t// otherwise just copy (for faster repeated calls)\r\n\r\n\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\r\n\r\n\t\t\tface = this.faces[ f ];\r\n\r\n\t\t\tif ( ! face.__originalFaceNormal ) {\r\n\r\n\t\t\t\tface.__originalFaceNormal = face.normal.clone();\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tface.__originalFaceNormal.copy( face.normal );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( ! face.__originalVertexNormals ) face.__originalVertexNormals = [];\r\n\r\n\t\t\tfor ( i = 0, il = face.vertexNormals.length; i < il; i ++ ) {\r\n\r\n\t\t\t\tif ( ! face.__originalVertexNormals[ i ] ) {\r\n\r\n\t\t\t\t\tface.__originalVertexNormals[ i ] = face.vertexNormals[ i ].clone();\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tface.__originalVertexNormals[ i ].copy( face.vertexNormals[ i ] );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t// use temp geometry to compute face and vertex normals for each morph\r\n\r\n\t\tvar tmpGeo = new THREE.Geometry();\r\n\t\ttmpGeo.faces = this.faces;\r\n\r\n\t\tfor ( i = 0, il = this.morphTargets.length; i < il; i ++ ) {\r\n\r\n\t\t\t// create on first access\r\n\r\n\t\t\tif ( ! this.morphNormals[ i ] ) {\r\n\r\n\t\t\t\tthis.morphNormals[ i ] = {};\r\n\t\t\t\tthis.morphNormals[ i ].faceNormals = [];\r\n\t\t\t\tthis.morphNormals[ i ].vertexNormals = [];\r\n\r\n\t\t\t\tvar dstNormalsFace = this.morphNormals[ i ].faceNormals;\r\n\t\t\t\tvar dstNormalsVertex = this.morphNormals[ i ].vertexNormals;\r\n\r\n\t\t\t\tvar faceNormal, vertexNormals;\r\n\r\n\t\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\r\n\r\n\t\t\t\t\tfaceNormal = new THREE.Vector3();\r\n\t\t\t\t\tvertexNormals = { a: new THREE.Vector3(), b: new THREE.Vector3(), c: new THREE.Vector3() };\r\n\r\n\t\t\t\t\tdstNormalsFace.push( faceNormal );\r\n\t\t\t\t\tdstNormalsVertex.push( vertexNormals );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar morphNormals = this.morphNormals[ i ];\r\n\r\n\t\t\t// set vertices to morph target\r\n\r\n\t\t\ttmpGeo.vertices = this.morphTargets[ i ].vertices;\r\n\r\n\t\t\t// compute morph normals\r\n\r\n\t\t\ttmpGeo.computeFaceNormals();\r\n\t\t\ttmpGeo.computeVertexNormals();\r\n\r\n\t\t\t// store morph normals\r\n\r\n\t\t\tvar faceNormal, vertexNormals;\r\n\r\n\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\r\n\r\n\t\t\t\tface = this.faces[ f ];\r\n\r\n\t\t\t\tfaceNormal = morphNormals.faceNormals[ f ];\r\n\t\t\t\tvertexNormals = morphNormals.vertexNormals[ f ];\r\n\r\n\t\t\t\tfaceNormal.copy( face.normal );\r\n\r\n\t\t\t\tvertexNormals.a.copy( face.vertexNormals[ 0 ] );\r\n\t\t\t\tvertexNormals.b.copy( face.vertexNormals[ 1 ] );\r\n\t\t\t\tvertexNormals.c.copy( face.vertexNormals[ 2 ] );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t// restore original normals\r\n\r\n\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\r\n\r\n\t\t\tface = this.faces[ f ];\r\n\r\n\t\t\tface.normal = face.__originalFaceNormal;\r\n\t\t\tface.vertexNormals = face.__originalVertexNormals;\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tcomputeTangents: function () {\r\n\r\n\t\t// based on http://www.terathon.com/code/tangent.html\r\n\t\t// tangents go to vertices\r\n\r\n\t\tvar f, fl, v, vl, i, il, vertexIndex,\r\n\t\t\tface, uv, vA, vB, vC, uvA, uvB, uvC,\r\n\t\t\tx1, x2, y1, y2, z1, z2,\r\n\t\t\ts1, s2, t1, t2, r, t, test,\r\n\t\t\ttan1 = [], tan2 = [],\r\n\t\t\tsdir = new THREE.Vector3(), tdir = new THREE.Vector3(),\r\n\t\t\ttmp = new THREE.Vector3(), tmp2 = new THREE.Vector3(),\r\n\t\t\tn = new THREE.Vector3(), w;\r\n\r\n\t\tfor ( v = 0, vl = this.vertices.length; v < vl; v ++ ) {\r\n\r\n\t\t\ttan1[ v ] = new THREE.Vector3();\r\n\t\t\ttan2[ v ] = new THREE.Vector3();\r\n\r\n\t\t}\r\n\r\n\t\tfunction handleTriangle( context, a, b, c, ua, ub, uc ) {\r\n\r\n\t\t\tvA = context.vertices[ a ];\r\n\t\t\tvB = context.vertices[ b ];\r\n\t\t\tvC = context.vertices[ c ];\r\n\r\n\t\t\tuvA = uv[ ua ];\r\n\t\t\tuvB = uv[ ub ];\r\n\t\t\tuvC = uv[ uc ];\r\n\r\n\t\t\tx1 = vB.x - vA.x;\r\n\t\t\tx2 = vC.x - vA.x;\r\n\t\t\ty1 = vB.y - vA.y;\r\n\t\t\ty2 = vC.y - vA.y;\r\n\t\t\tz1 = vB.z - vA.z;\r\n\t\t\tz2 = vC.z - vA.z;\r\n\r\n\t\t\ts1 = uvB.x - uvA.x;\r\n\t\t\ts2 = uvC.x - uvA.x;\r\n\t\t\tt1 = uvB.y - uvA.y;\r\n\t\t\tt2 = uvC.y - uvA.y;\r\n\r\n\t\t\tr = 1.0 / ( s1 * t2 - s2 * t1 );\r\n\t\t\tsdir.set( ( t2 * x1 - t1 * x2 ) * r,\r\n\t\t\t\t\t ( t2 * y1 - t1 * y2 ) * r,\r\n\t\t\t\t\t ( t2 * z1 - t1 * z2 ) * r );\r\n\t\t\ttdir.set( ( s1 * x2 - s2 * x1 ) * r,\r\n\t\t\t\t\t ( s1 * y2 - s2 * y1 ) * r,\r\n\t\t\t\t\t ( s1 * z2 - s2 * z1 ) * r );\r\n\r\n\t\t\ttan1[ a ].add( sdir );\r\n\t\t\ttan1[ b ].add( sdir );\r\n\t\t\ttan1[ c ].add( sdir );\r\n\r\n\t\t\ttan2[ a ].add( tdir );\r\n\t\t\ttan2[ b ].add( tdir );\r\n\t\t\ttan2[ c ].add( tdir );\r\n\r\n\t\t}\r\n\r\n\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\r\n\r\n\t\t\tface = this.faces[ f ];\r\n\t\t\tuv = this.faceVertexUvs[ 0 ][ f ]; // use UV layer 0 for tangents\r\n\r\n\t\t\thandleTriangle( this, face.a, face.b, face.c, 0, 1, 2 );\r\n\r\n\t\t}\r\n\r\n\t\tvar faceIndex = [ 'a', 'b', 'c', 'd' ];\r\n\r\n\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\r\n\r\n\t\t\tface = this.faces[ f ];\r\n\r\n\t\t\tfor ( i = 0; i < Math.min( face.vertexNormals.length, 3 ); i ++ ) {\r\n\r\n\t\t\t\tn.copy( face.vertexNormals[ i ] );\r\n\r\n\t\t\t\tvertexIndex = face[ faceIndex[ i ] ];\r\n\r\n\t\t\t\tt = tan1[ vertexIndex ];\r\n\r\n\t\t\t\t// Gram-Schmidt orthogonalize\r\n\r\n\t\t\t\ttmp.copy( t );\r\n\t\t\t\ttmp.sub( n.multiplyScalar( n.dot( t ) ) ).normalize();\r\n\r\n\t\t\t\t// Calculate handedness\r\n\r\n\t\t\t\ttmp2.crossVectors( face.vertexNormals[ i ], t );\r\n\t\t\t\ttest = tmp2.dot( tan2[ vertexIndex ] );\r\n\t\t\t\tw = ( test < 0.0 ) ? - 1.0 : 1.0;\r\n\r\n\t\t\t\tface.vertexTangents[ i ] = new THREE.Vector4( tmp.x, tmp.y, tmp.z, w );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tthis.hasTangents = true;\r\n\r\n\t},\r\n\r\n\tcomputeLineDistances: function () {\r\n\r\n\t\tvar d = 0;\r\n\t\tvar vertices = this.vertices;\r\n\r\n\t\tfor ( var i = 0, il = vertices.length; i < il; i ++ ) {\r\n\r\n\t\t\tif ( i > 0 ) {\r\n\r\n\t\t\t\td += vertices[ i ].distanceTo( vertices[ i - 1 ] );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tthis.lineDistances[ i ] = d;\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tcomputeBoundingBox: function () {\r\n\r\n\t\tif ( this.boundingBox === null ) {\r\n\r\n\t\t\tthis.boundingBox = new THREE.Box3();\r\n\r\n\t\t}\r\n\r\n\t\tthis.boundingBox.setFromPoints( this.vertices );\r\n\r\n\t},\r\n\r\n\tcomputeBoundingSphere: function () {\r\n\r\n\t\tif ( this.boundingSphere === null ) {\r\n\r\n\t\t\tthis.boundingSphere = new THREE.Sphere();\r\n\r\n\t\t}\r\n\r\n\t\tthis.boundingSphere.setFromPoints( this.vertices );\r\n\r\n\t},\r\n\r\n\tmerge: function ( geometry, matrix, materialIndexOffset ) {\r\n\r\n\t\tif ( geometry instanceof THREE.Geometry === false ) {\r\n\r\n\t\t\tconsole.error( 'THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.', geometry );\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\r\n\t\tvar normalMatrix,\r\n\t\tvertexOffset = this.vertices.length,\r\n\t\tvertices1 = this.vertices,\r\n\t\tvertices2 = geometry.vertices,\r\n\t\tfaces1 = this.faces,\r\n\t\tfaces2 = geometry.faces,\r\n\t\tuvs1 = this.faceVertexUvs[ 0 ],\r\n\t\tuvs2 = geometry.faceVertexUvs[ 0 ];\r\n\r\n\t\tif ( materialIndexOffset === undefined ) materialIndexOffset = 0;\r\n\r\n\t\tif ( matrix !== undefined ) {\r\n\r\n\t\t\tnormalMatrix = new THREE.Matrix3().getNormalMatrix( matrix );\r\n\r\n\t\t}\r\n\r\n\t\t// vertices\r\n\r\n\t\tfor ( var i = 0, il = vertices2.length; i < il; i ++ ) {\r\n\r\n\t\t\tvar vertex = vertices2[ i ];\r\n\r\n\t\t\tvar vertexCopy = vertex.clone();\r\n\r\n\t\t\tif ( matrix !== undefined ) vertexCopy.applyMatrix4( matrix );\r\n\r\n\t\t\tvertices1.push( vertexCopy );\r\n\r\n\t\t}\r\n\r\n\t\t// faces\r\n\r\n\t\tfor ( i = 0, il = faces2.length; i < il; i ++ ) {\r\n\r\n\t\t\tvar face = faces2[ i ], faceCopy, normal, color,\r\n\t\t\tfaceVertexNormals = face.vertexNormals,\r\n\t\t\tfaceVertexColors = face.vertexColors;\r\n\r\n\t\t\tfaceCopy = new THREE.Face3( face.a + vertexOffset, face.b + vertexOffset, face.c + vertexOffset );\r\n\t\t\tfaceCopy.normal.copy( face.normal );\r\n\r\n\t\t\tif ( normalMatrix !== undefined ) {\r\n\r\n\t\t\t\tfaceCopy.normal.applyMatrix3( normalMatrix ).normalize();\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfor ( var j = 0, jl = faceVertexNormals.length; j < jl; j ++ ) {\r\n\r\n\t\t\t\tnormal = faceVertexNormals[ j ].clone();\r\n\r\n\t\t\t\tif ( normalMatrix !== undefined ) {\r\n\r\n\t\t\t\t\tnormal.applyMatrix3( normalMatrix ).normalize();\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfaceCopy.vertexNormals.push( normal );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfaceCopy.color.copy( face.color );\r\n\r\n\t\t\tfor ( var j = 0, jl = faceVertexColors.length; j < jl; j ++ ) {\r\n\r\n\t\t\t\tcolor = faceVertexColors[ j ];\r\n\t\t\t\tfaceCopy.vertexColors.push( color.clone() );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfaceCopy.materialIndex = face.materialIndex + materialIndexOffset;\r\n\r\n\t\t\tfaces1.push( faceCopy );\r\n\r\n\t\t}\r\n\r\n\t\t// uvs\r\n\r\n\t\tfor ( i = 0, il = uvs2.length; i < il; i ++ ) {\r\n\r\n\t\t\tvar uv = uvs2[ i ], uvCopy = [];\r\n\r\n\t\t\tif ( uv === undefined ) {\r\n\r\n\t\t\t\tcontinue;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfor ( var j = 0, jl = uv.length; j < jl; j ++ ) {\r\n\r\n\t\t\t\tuvCopy.push( new THREE.Vector2( uv[ j ].x, uv[ j ].y ) );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tuvs1.push( uvCopy );\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\t/*\r\n\t * Checks for duplicate vertices with hashmap.\r\n\t * Duplicated vertices are removed\r\n\t * and faces' vertices are updated.\r\n\t */\r\n\r\n\tmergeVertices: function () {\r\n\r\n\t\tvar verticesMap = {}; // Hashmap for looking up vertice by position coordinates (and making sure they are unique)\r\n\t\tvar unique = [], changes = [];\r\n\r\n\t\tvar v, key;\r\n\t\tvar precisionPoints = 4; // number of decimal points, eg. 4 for epsilon of 0.0001\r\n\t\tvar precision = Math.pow( 10, precisionPoints );\r\n\t\tvar i,il, face;\r\n\t\tvar indices, k, j, jl, u;\r\n\r\n\t\tfor ( i = 0, il = this.vertices.length; i < il; i ++ ) {\r\n\r\n\t\t\tv = this.vertices[ i ];\r\n\t\t\tkey = Math.round( v.x * precision ) + '_' + Math.round( v.y * precision ) + '_' + Math.round( v.z * precision );\r\n\r\n\t\t\tif ( verticesMap[ key ] === undefined ) {\r\n\r\n\t\t\t\tverticesMap[ key ] = i;\r\n\t\t\t\tunique.push( this.vertices[ i ] );\r\n\t\t\t\tchanges[ i ] = unique.length - 1;\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t//console.log('Duplicate vertex found. ', i, ' could be using ', verticesMap[key]);\r\n\t\t\t\tchanges[ i ] = changes[ verticesMap[ key ] ];\r\n\r\n\t\t\t}\r\n\r\n\t\t};\r\n\r\n\r\n\t\t// if faces are completely degenerate after merging vertices, we\r\n\t\t// have to remove them from the geometry.\r\n\t\tvar faceIndicesToRemove = [];\r\n\r\n\t\tfor ( i = 0, il = this.faces.length; i < il; i ++ ) {\r\n\r\n\t\t\tface = this.faces[ i ];\r\n\r\n\t\t\tface.a = changes[ face.a ];\r\n\t\t\tface.b = changes[ face.b ];\r\n\t\t\tface.c = changes[ face.c ];\r\n\r\n\t\t\tindices = [ face.a, face.b, face.c ];\r\n\r\n\t\t\tvar dupIndex = - 1;\r\n\r\n\t\t\t// if any duplicate vertices are found in a Face3\r\n\t\t\t// we have to remove the face as nothing can be saved\r\n\t\t\tfor ( var n = 0; n < 3; n ++ ) {\r\n\t\t\t\tif ( indices[ n ] == indices[ ( n + 1 ) % 3 ] ) {\r\n\r\n\t\t\t\t\tdupIndex = n;\r\n\t\t\t\t\tfaceIndicesToRemove.push( i );\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tfor ( i = faceIndicesToRemove.length - 1; i >= 0; i -- ) {\r\n\t\t\tvar idx = faceIndicesToRemove[ i ];\r\n\r\n\t\t\tthis.faces.splice( idx, 1 );\r\n\r\n\t\t\tfor ( j = 0, jl = this.faceVertexUvs.length; j < jl; j ++ ) {\r\n\r\n\t\t\t\tthis.faceVertexUvs[ j ].splice( idx, 1 );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t// Use unique set of vertices\r\n\r\n\t\tvar diff = this.vertices.length - unique.length;\r\n\t\tthis.vertices = unique;\r\n\t\treturn diff;\r\n\r\n\t},\r\n\r\n\ttoJSON: function () {\r\n\r\n\t\tvar output = {\r\n\t\t\tmetadata: {\r\n\t\t\t\tversion: 4.0,\r\n\t\t\t\ttype: 'BufferGeometry',\r\n\t\t\t\tgenerator: 'BufferGeometryExporter'\r\n\t\t\t},\r\n\t\t\tuuid: this.uuid,\r\n\t\t\ttype: this.type\r\n\t\t};\r\n\r\n\t\tif ( this.name !== \"\" ) output.name = this.name;\r\n\r\n\t\tif ( this.parameters !== undefined ) {\r\n\r\n\t\t\tvar parameters = this.parameters;\r\n\r\n\t\t\tfor ( var key in parameters ) {\r\n\r\n\t\t\t\tif ( parameters[ key ] !== undefined ) output[ key ] = parameters[ key ];\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn output;\r\n\r\n\t\t}\r\n\r\n\t\tvar vertices = [];\r\n\r\n\t\tfor ( var i = 0; i < this.vertices.length; i ++ ) {\r\n\r\n\t\t\tvar vertex = this.vertices[ i ];\r\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\r\n\r\n\t\t}\r\n\r\n\t\tvar faces = [];\r\n\t\tvar normals = [];\r\n\t\tvar normalsHash = {};\r\n\t\tvar colors = [];\r\n\t\tvar colorsHash = {};\r\n\t\tvar uvs = [];\r\n\t\tvar uvsHash = {};\r\n\r\n\t\tfor ( var i = 0; i < this.faces.length; i ++ ) {\r\n\r\n\t\t\tvar face = this.faces[ i ];\r\n\r\n\t\t\tvar hasMaterial = false; // face.materialIndex !== undefined;\r\n\t\t\tvar hasFaceUv = false; // deprecated\r\n\t\t\tvar hasFaceVertexUv = this.faceVertexUvs[ 0 ][ i ] !== undefined;\r\n\t\t\tvar hasFaceNormal = face.normal.length() > 0;\r\n\t\t\tvar hasFaceVertexNormal = face.vertexNormals.length > 0;\r\n\t\t\tvar hasFaceColor = face.color.r !== 1 || face.color.g !== 1 || face.color.b !== 1;\r\n\t\t\tvar hasFaceVertexColor = face.vertexColors.length > 0;\r\n\r\n\t\t\tvar faceType = 0;\r\n\r\n\t\t\tfaceType = setBit( faceType, 0, 0 );\r\n\t\t\tfaceType = setBit( faceType, 1, hasMaterial );\r\n\t\t\tfaceType = setBit( faceType, 2, hasFaceUv );\r\n\t\t\tfaceType = setBit( faceType, 3, hasFaceVertexUv );\r\n\t\t\tfaceType = setBit( faceType, 4, hasFaceNormal );\r\n\t\t\tfaceType = setBit( faceType, 5, hasFaceVertexNormal );\r\n\t\t\tfaceType = setBit( faceType, 6, hasFaceColor );\r\n\t\t\tfaceType = setBit( faceType, 7, hasFaceVertexColor );\r\n\r\n\t\t\tfaces.push( faceType );\r\n\t\t\tfaces.push( face.a, face.b, face.c );\r\n\r\n\r\n\t\t\t/*\r\n\t\t\tif ( hasMaterial ) {\r\n\r\n\t\t\t\tfaces.push( face.materialIndex );\r\n\r\n\t\t\t}\r\n\t\t\t*/\r\n\r\n\t\t\tif ( hasFaceVertexUv ) {\r\n\r\n\t\t\t\tvar faceVertexUvs = this.faceVertexUvs[ 0 ][ i ];\r\n\r\n\t\t\t\tfaces.push(\r\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 0 ] ),\r\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 1 ] ),\r\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 2 ] )\r\n\t\t\t\t);\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( hasFaceNormal ) {\r\n\r\n\t\t\t\tfaces.push( getNormalIndex( face.normal ) );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( hasFaceVertexNormal ) {\r\n\r\n\t\t\t\tvar vertexNormals = face.vertexNormals;\r\n\r\n\t\t\t\tfaces.push(\r\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 0 ] ),\r\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 1 ] ),\r\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 2 ] )\r\n\t\t\t\t);\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( hasFaceColor ) {\r\n\r\n\t\t\t\tfaces.push( getColorIndex( face.color ) );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( hasFaceVertexColor ) {\r\n\r\n\t\t\t\tvar vertexColors = face.vertexColors;\r\n\r\n\t\t\t\tfaces.push(\r\n\t\t\t\t\tgetColorIndex( vertexColors[ 0 ] ),\r\n\t\t\t\t\tgetColorIndex( vertexColors[ 1 ] ),\r\n\t\t\t\t\tgetColorIndex( vertexColors[ 2 ] )\r\n\t\t\t\t);\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tfunction setBit( value, position, enabled ) {\r\n\r\n\t\t\treturn enabled ? value | ( 1 << position ) : value & ( ~ ( 1 << position) );\r\n\r\n\t\t}\r\n\r\n\t\tfunction getNormalIndex( normal ) {\r\n\r\n\t\t\tvar hash = normal.x.toString() + normal.y.toString() + normal.z.toString();\r\n\r\n\t\t\tif ( normalsHash[ hash ] !== undefined ) {\r\n\r\n\t\t\t\treturn normalsHash[ hash ];\r\n\r\n\t\t\t}\r\n\r\n\t\t\tnormalsHash[ hash ] = normals.length / 3;\r\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\r\n\r\n\t\t\treturn normalsHash[ hash ];\r\n\r\n\t\t}\r\n\r\n\t\tfunction getColorIndex( color ) {\r\n\r\n\t\t\tvar hash = color.r.toString() + color.g.toString() + color.b.toString();\r\n\r\n\t\t\tif ( colorsHash[ hash ] !== undefined ) {\r\n\r\n\t\t\t\treturn colorsHash[ hash ];\r\n\r\n\t\t\t}\r\n\r\n\t\t\tcolorsHash[ hash ] = colors.length;\r\n\t\t\tcolors.push( color.getHex() );\r\n\r\n\t\t\treturn colorsHash[ hash ];\r\n\r\n\t\t}\r\n\r\n\t\tfunction getUvIndex( uv ) {\r\n\r\n\t\t\tvar hash = uv.x.toString() + uv.y.toString();\r\n\r\n\t\t\tif ( uvsHash[ hash ] !== undefined ) {\r\n\r\n\t\t\t\treturn uvsHash[ hash ];\r\n\r\n\t\t\t}\r\n\r\n\t\t\tuvsHash[ hash ] = uvs.length / 2;\r\n\t\t\tuvs.push( uv.x, uv.y );\r\n\r\n\t\t\treturn uvsHash[ hash ];\r\n\r\n\t\t}\r\n\r\n\t\toutput.data = {};\r\n\r\n\t\toutput.data.vertices = vertices;\r\n\t\toutput.data.normals = normals;\r\n\t\tif ( colors.length > 0 ) output.data.colors = colors;\r\n\t\tif ( uvs.length > 0 ) output.data.uvs = [ uvs ]; // temporal backward compatibility\r\n\t\toutput.data.faces = faces;\r\n\r\n\t\t//\r\n\r\n\t\treturn output;\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\tvar geometry = new THREE.Geometry();\r\n\r\n\t\tvar vertices = this.vertices;\r\n\r\n\t\tfor ( var i = 0, il = vertices.length; i < il; i ++ ) {\r\n\r\n\t\t\tgeometry.vertices.push( vertices[ i ].clone() );\r\n\r\n\t\t}\r\n\r\n\t\tvar faces = this.faces;\r\n\r\n\t\tfor ( var i = 0, il = faces.length; i < il; i ++ ) {\r\n\r\n\t\t\tgeometry.faces.push( faces[ i ].clone() );\r\n\r\n\t\t}\r\n\r\n\t\tvar uvs = this.faceVertexUvs[ 0 ];\r\n\r\n\t\tfor ( var i = 0, il = uvs.length; i < il; i ++ ) {\r\n\r\n\t\t\tvar uv = uvs[ i ], uvCopy = [];\r\n\r\n\t\t\tfor ( var j = 0, jl = uv.length; j < jl; j ++ ) {\r\n\r\n\t\t\t\tuvCopy.push( new THREE.Vector2( uv[ j ].x, uv[ j ].y ) );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tgeometry.faceVertexUvs[ 0 ].push( uvCopy );\r\n\r\n\t\t}\r\n\r\n\t\treturn geometry;\r\n\r\n\t},\r\n\r\n\tdispose: function () {\r\n\r\n\t\tthis.dispatchEvent( { type: 'dispose' } );\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.EventDispatcher.prototype.apply( THREE.Geometry.prototype );\r\n\r\nTHREE.GeometryIdCount = 0;\r\n\r\n// File:src/cameras/Camera.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author mikael emtinger / http://gomo.se/\r\n * @author WestLangley / http://github.com/WestLangley\r\n*/\r\n\r\nTHREE.Camera = function () {\r\n\r\n\tTHREE.Object3D.call( this );\r\n\r\n\tthis.type = 'Camera';\r\n\r\n\tthis.matrixWorldInverse = new THREE.Matrix4();\r\n\tthis.projectionMatrix = new THREE.Matrix4();\r\n\r\n};\r\n\r\nTHREE.Camera.prototype = Object.create( THREE.Object3D.prototype );\r\n\r\nTHREE.Camera.prototype.getWorldDirection = function () {\r\n\r\n\tvar quaternion = new THREE.Quaternion();\r\n\r\n\treturn function ( optionalTarget ) {\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\r\n\t\tthis.getWorldQuaternion( quaternion );\r\n\r\n\t\treturn result.set( 0, 0, - 1 ).applyQuaternion( quaternion );\r\n\r\n\t}\r\n\r\n}();\r\n\r\nTHREE.Camera.prototype.lookAt = function () {\r\n\r\n\t// This routine does not support cameras with rotated and/or translated parent(s)\r\n\r\n\tvar m1 = new THREE.Matrix4();\r\n\r\n\treturn function ( vector ) {\r\n\r\n\t\tm1.lookAt( this.position, vector, this.up );\r\n\r\n\t\tthis.quaternion.setFromRotationMatrix( m1 );\r\n\r\n\t};\r\n\r\n}();\r\n\r\nTHREE.Camera.prototype.clone = function ( camera ) {\r\n\r\n\tif ( camera === undefined ) camera = new THREE.Camera();\r\n\r\n\tTHREE.Object3D.prototype.clone.call( this, camera );\r\n\r\n\tcamera.matrixWorldInverse.copy( this.matrixWorldInverse );\r\n\tcamera.projectionMatrix.copy( this.projectionMatrix );\r\n\r\n\treturn camera;\r\n};\r\n\r\n// File:src/cameras/CubeCamera.js\r\n\r\n/**\r\n * Camera for rendering cube maps\r\n *\t- renders scene into axis-aligned cube\r\n *\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.CubeCamera = function ( near, far, cubeResolution ) {\r\n\r\n\tTHREE.Object3D.call( this );\r\n\r\n\tthis.type = 'CubeCamera';\r\n\r\n\tvar fov = 90, aspect = 1;\r\n\r\n\tvar cameraPX = new THREE.PerspectiveCamera( fov, aspect, near, far );\r\n\tcameraPX.up.set( 0, - 1, 0 );\r\n\tcameraPX.lookAt( new THREE.Vector3( 1, 0, 0 ) );\r\n\tthis.add( cameraPX );\r\n\r\n\tvar cameraNX = new THREE.PerspectiveCamera( fov, aspect, near, far );\r\n\tcameraNX.up.set( 0, - 1, 0 );\r\n\tcameraNX.lookAt( new THREE.Vector3( - 1, 0, 0 ) );\r\n\tthis.add( cameraNX );\r\n\r\n\tvar cameraPY = new THREE.PerspectiveCamera( fov, aspect, near, far );\r\n\tcameraPY.up.set( 0, 0, 1 );\r\n\tcameraPY.lookAt( new THREE.Vector3( 0, 1, 0 ) );\r\n\tthis.add( cameraPY );\r\n\r\n\tvar cameraNY = new THREE.PerspectiveCamera( fov, aspect, near, far );\r\n\tcameraNY.up.set( 0, 0, - 1 );\r\n\tcameraNY.lookAt( new THREE.Vector3( 0, - 1, 0 ) );\r\n\tthis.add( cameraNY );\r\n\r\n\tvar cameraPZ = new THREE.PerspectiveCamera( fov, aspect, near, far );\r\n\tcameraPZ.up.set( 0, - 1, 0 );\r\n\tcameraPZ.lookAt( new THREE.Vector3( 0, 0, 1 ) );\r\n\tthis.add( cameraPZ );\r\n\r\n\tvar cameraNZ = new THREE.PerspectiveCamera( fov, aspect, near, far );\r\n\tcameraNZ.up.set( 0, - 1, 0 );\r\n\tcameraNZ.lookAt( new THREE.Vector3( 0, 0, - 1 ) );\r\n\tthis.add( cameraNZ );\r\n\r\n\tthis.renderTarget = new THREE.WebGLRenderTargetCube( cubeResolution, cubeResolution, { format: THREE.RGBFormat, magFilter: THREE.LinearFilter, minFilter: THREE.LinearFilter } );\r\n\r\n\tthis.updateCubeMap = function ( renderer, scene ) {\r\n\r\n\t\tvar renderTarget = this.renderTarget;\r\n\t\tvar generateMipmaps = renderTarget.generateMipmaps;\r\n\r\n\t\trenderTarget.generateMipmaps = false;\r\n\r\n\t\trenderTarget.activeCubeFace = 0;\r\n\t\trenderer.render( scene, cameraPX, renderTarget );\r\n\r\n\t\trenderTarget.activeCubeFace = 1;\r\n\t\trenderer.render( scene, cameraNX, renderTarget );\r\n\r\n\t\trenderTarget.activeCubeFace = 2;\r\n\t\trenderer.render( scene, cameraPY, renderTarget );\r\n\r\n\t\trenderTarget.activeCubeFace = 3;\r\n\t\trenderer.render( scene, cameraNY, renderTarget );\r\n\r\n\t\trenderTarget.activeCubeFace = 4;\r\n\t\trenderer.render( scene, cameraPZ, renderTarget );\r\n\r\n\t\trenderTarget.generateMipmaps = generateMipmaps;\r\n\r\n\t\trenderTarget.activeCubeFace = 5;\r\n\t\trenderer.render( scene, cameraNZ, renderTarget );\r\n\r\n\t};\r\n\r\n};\r\n\r\nTHREE.CubeCamera.prototype = Object.create( THREE.Object3D.prototype );\r\n\r\n// File:src/cameras/OrthographicCamera.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.OrthographicCamera = function ( left, right, top, bottom, near, far ) {\r\n\r\n\tTHREE.Camera.call( this );\r\n\r\n\tthis.type = 'OrthographicCamera';\r\n\r\n\tthis.zoom = 1;\r\n\r\n\tthis.left = left;\r\n\tthis.right = right;\r\n\tthis.top = top;\r\n\tthis.bottom = bottom;\r\n\r\n\tthis.near = ( near !== undefined ) ? near : 0.1;\r\n\tthis.far = ( far !== undefined ) ? far : 2000;\r\n\r\n\tthis.updateProjectionMatrix();\r\n\r\n};\r\n\r\nTHREE.OrthographicCamera.prototype = Object.create( THREE.Camera.prototype );\r\n\r\nTHREE.OrthographicCamera.prototype.updateProjectionMatrix = function () {\r\n\r\n\tvar dx = ( this.right - this.left ) / ( 2 * this.zoom );\r\n\tvar dy = ( this.top - this.bottom ) / ( 2 * this.zoom );\r\n\tvar cx = ( this.right + this.left ) / 2;\r\n\tvar cy = ( this.top + this.bottom ) / 2;\r\n\r\n\tthis.projectionMatrix.makeOrthographic( cx - dx, cx + dx, cy + dy, cy - dy, this.near, this.far );\r\n\r\n};\r\n\r\nTHREE.OrthographicCamera.prototype.clone = function () {\r\n\r\n\tvar camera = new THREE.OrthographicCamera();\r\n\r\n\tTHREE.Camera.prototype.clone.call( this, camera );\r\n\r\n\tcamera.zoom = this.zoom;\r\n\r\n\tcamera.left = this.left;\r\n\tcamera.right = this.right;\r\n\tcamera.top = this.top;\r\n\tcamera.bottom = this.bottom;\r\n\r\n\tcamera.near = this.near;\r\n\tcamera.far = this.far;\r\n\r\n\tcamera.projectionMatrix.copy( this.projectionMatrix );\r\n\r\n\treturn camera;\r\n};\r\n\r\n// File:src/cameras/PerspectiveCamera.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author greggman / http://games.greggman.com/\r\n * @author zz85 / http://www.lab4games.net/zz85/blog\r\n */\r\n\r\nTHREE.PerspectiveCamera = function ( fov, aspect, near, far ) {\r\n\r\n\tTHREE.Camera.call( this );\r\n\r\n\tthis.type = 'PerspectiveCamera';\r\n\r\n\tthis.zoom = 1;\r\n\r\n\tthis.fov = fov !== undefined ? fov : 50;\r\n\tthis.aspect = aspect !== undefined ? aspect : 1;\r\n\tthis.near = near !== undefined ? near : 0.1;\r\n\tthis.far = far !== undefined ? far : 2000;\r\n\r\n\tthis.updateProjectionMatrix();\r\n\r\n};\r\n\r\nTHREE.PerspectiveCamera.prototype = Object.create( THREE.Camera.prototype );\r\n\r\n\r\n/**\r\n * Uses Focal Length (in mm) to estimate and set FOV\r\n * 35mm (fullframe) camera is used if frame size is not specified;\r\n * Formula based on http://www.bobatkins.com/photography/technical/field_of_view.html\r\n */\r\n\r\nTHREE.PerspectiveCamera.prototype.setLens = function ( focalLength, frameHeight ) {\r\n\r\n\tif ( frameHeight === undefined ) frameHeight = 24;\r\n\r\n\tthis.fov = 2 * THREE.Math.radToDeg( Math.atan( frameHeight / ( focalLength * 2 ) ) );\r\n\tthis.updateProjectionMatrix();\r\n\r\n}\r\n\r\n\r\n/**\r\n * Sets an offset in a larger frustum. This is useful for multi-window or\r\n * multi-monitor/multi-machine setups.\r\n *\r\n * For example, if you have 3x2 monitors and each monitor is 1920x1080 and\r\n * the monitors are in grid like this\r\n *\r\n * +---+---+---+\r\n * | A | B | C |\r\n * +---+---+---+\r\n * | D | E | F |\r\n * +---+---+---+\r\n *\r\n * then for each monitor you would call it like this\r\n *\r\n * var w = 1920;\r\n * var h = 1080;\r\n * var fullWidth = w * 3;\r\n * var fullHeight = h * 2;\r\n *\r\n * --A--\r\n * camera.setOffset( fullWidth, fullHeight, w * 0, h * 0, w, h );\r\n * --B--\r\n * camera.setOffset( fullWidth, fullHeight, w * 1, h * 0, w, h );\r\n * --C--\r\n * camera.setOffset( fullWidth, fullHeight, w * 2, h * 0, w, h );\r\n * --D--\r\n * camera.setOffset( fullWidth, fullHeight, w * 0, h * 1, w, h );\r\n * --E--\r\n * camera.setOffset( fullWidth, fullHeight, w * 1, h * 1, w, h );\r\n * --F--\r\n * camera.setOffset( fullWidth, fullHeight, w * 2, h * 1, w, h );\r\n *\r\n * Note there is no reason monitors have to be the same size or in a grid.\r\n */\r\n\r\nTHREE.PerspectiveCamera.prototype.setViewOffset = function ( fullWidth, fullHeight, x, y, width, height ) {\r\n\r\n\tthis.fullWidth = fullWidth;\r\n\tthis.fullHeight = fullHeight;\r\n\tthis.x = x;\r\n\tthis.y = y;\r\n\tthis.width = width;\r\n\tthis.height = height;\r\n\r\n\tthis.updateProjectionMatrix();\r\n\r\n};\r\n\r\n\r\nTHREE.PerspectiveCamera.prototype.updateProjectionMatrix = function () {\r\n\r\n\tvar fov = THREE.Math.radToDeg( 2 * Math.atan( Math.tan( THREE.Math.degToRad( this.fov ) * 0.5 ) / this.zoom ) );\r\n\r\n\tif ( this.fullWidth ) {\r\n\r\n\t\tvar aspect = this.fullWidth / this.fullHeight;\r\n\t\tvar top = Math.tan( THREE.Math.degToRad( fov * 0.5 ) ) * this.near;\r\n\t\tvar bottom = - top;\r\n\t\tvar left = aspect * bottom;\r\n\t\tvar right = aspect * top;\r\n\t\tvar width = Math.abs( right - left );\r\n\t\tvar height = Math.abs( top - bottom );\r\n\r\n\t\tthis.projectionMatrix.makeFrustum(\r\n\t\t\tleft + this.x * width / this.fullWidth,\r\n\t\t\tleft + ( this.x + this.width ) * width / this.fullWidth,\r\n\t\t\ttop - ( this.y + this.height ) * height / this.fullHeight,\r\n\t\t\ttop - this.y * height / this.fullHeight,\r\n\t\t\tthis.near,\r\n\t\t\tthis.far\r\n\t\t);\r\n\r\n\t} else {\r\n\r\n\t\tthis.projectionMatrix.makePerspective( fov, this.aspect, this.near, this.far );\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.PerspectiveCamera.prototype.clone = function () {\r\n\r\n\tvar camera = new THREE.PerspectiveCamera();\r\n\r\n\tTHREE.Camera.prototype.clone.call( this, camera );\r\n\r\n\tcamera.zoom = this.zoom;\r\n\r\n\tcamera.fov = this.fov;\r\n\tcamera.aspect = this.aspect;\r\n\tcamera.near = this.near;\r\n\tcamera.far = this.far;\r\n\r\n\tcamera.projectionMatrix.copy( this.projectionMatrix );\r\n\r\n\treturn camera;\r\n\r\n};\r\n\r\n// File:src/lights/Light.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.Light = function ( color ) {\r\n\r\n\tTHREE.Object3D.call( this );\r\n\r\n\tthis.type = 'Light';\r\n\t\r\n\tthis.color = new THREE.Color( color );\r\n\r\n};\r\n\r\nTHREE.Light.prototype = Object.create( THREE.Object3D.prototype );\r\n\r\nTHREE.Light.prototype.clone = function ( light ) {\r\n\r\n\tif ( light === undefined ) light = new THREE.Light();\r\n\r\n\tTHREE.Object3D.prototype.clone.call( this, light );\r\n\r\n\tlight.color.copy( this.color );\r\n\r\n\treturn light;\r\n\r\n};\r\n\r\n// File:src/lights/AmbientLight.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.AmbientLight = function ( color ) {\r\n\r\n\tTHREE.Light.call( this, color );\r\n\r\n\tthis.type = 'AmbientLight';\r\n\r\n};\r\n\r\nTHREE.AmbientLight.prototype = Object.create( THREE.Light.prototype );\r\n\r\nTHREE.AmbientLight.prototype.clone = function () {\r\n\r\n\tvar light = new THREE.AmbientLight();\r\n\r\n\tTHREE.Light.prototype.clone.call( this, light );\r\n\r\n\treturn light;\r\n\r\n};\r\n\r\n// File:src/lights/AreaLight.js\r\n\r\n/**\r\n * @author MPanknin / http://www.redplant.de/\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.AreaLight = function ( color, intensity ) {\r\n\r\n\tTHREE.Light.call( this, color );\r\n\r\n\tthis.type = 'AreaLight';\r\n\r\n\tthis.normal = new THREE.Vector3( 0, - 1, 0 );\r\n\tthis.right = new THREE.Vector3( 1, 0, 0 );\r\n\r\n\tthis.intensity = ( intensity !== undefined ) ? intensity : 1;\r\n\r\n\tthis.width = 1.0;\r\n\tthis.height = 1.0;\r\n\r\n\tthis.constantAttenuation = 1.5;\r\n\tthis.linearAttenuation = 0.5;\r\n\tthis.quadraticAttenuation = 0.1;\r\n\r\n};\r\n\r\nTHREE.AreaLight.prototype = Object.create( THREE.Light.prototype );\r\n\r\n\r\n// File:src/lights/DirectionalLight.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.DirectionalLight = function ( color, intensity ) {\r\n\r\n\tTHREE.Light.call( this, color );\r\n\r\n\tthis.type = 'DirectionalLight';\r\n\r\n\tthis.position.set( 0, 1, 0 );\r\n\tthis.target = new THREE.Object3D();\r\n\r\n\tthis.intensity = ( intensity !== undefined ) ? intensity : 1;\r\n\r\n\tthis.castShadow = false;\r\n\tthis.onlyShadow = false;\r\n\r\n\t//\r\n\r\n\tthis.shadowCameraNear = 50;\r\n\tthis.shadowCameraFar = 5000;\r\n\r\n\tthis.shadowCameraLeft = - 500;\r\n\tthis.shadowCameraRight = 500;\r\n\tthis.shadowCameraTop = 500;\r\n\tthis.shadowCameraBottom = - 500;\r\n\r\n\tthis.shadowCameraVisible = false;\r\n\r\n\tthis.shadowBias = 0;\r\n\tthis.shadowDarkness = 0.5;\r\n\r\n\tthis.shadowMapWidth = 512;\r\n\tthis.shadowMapHeight = 512;\r\n\r\n\t//\r\n\r\n\tthis.shadowCascade = false;\r\n\r\n\tthis.shadowCascadeOffset = new THREE.Vector3( 0, 0, - 1000 );\r\n\tthis.shadowCascadeCount = 2;\r\n\r\n\tthis.shadowCascadeBias = [ 0, 0, 0 ];\r\n\tthis.shadowCascadeWidth = [ 512, 512, 512 ];\r\n\tthis.shadowCascadeHeight = [ 512, 512, 512 ];\r\n\r\n\tthis.shadowCascadeNearZ = [ - 1.000, 0.990, 0.998 ];\r\n\tthis.shadowCascadeFarZ = [ 0.990, 0.998, 1.000 ];\r\n\r\n\tthis.shadowCascadeArray = [];\r\n\r\n\t//\r\n\r\n\tthis.shadowMap = null;\r\n\tthis.shadowMapSize = null;\r\n\tthis.shadowCamera = null;\r\n\tthis.shadowMatrix = null;\r\n\r\n};\r\n\r\nTHREE.DirectionalLight.prototype = Object.create( THREE.Light.prototype );\r\n\r\nTHREE.DirectionalLight.prototype.clone = function () {\r\n\r\n\tvar light = new THREE.DirectionalLight();\r\n\r\n\tTHREE.Light.prototype.clone.call( this, light );\r\n\r\n\tlight.target = this.target.clone();\r\n\r\n\tlight.intensity = this.intensity;\r\n\r\n\tlight.castShadow = this.castShadow;\r\n\tlight.onlyShadow = this.onlyShadow;\r\n\r\n\t//\r\n\r\n\tlight.shadowCameraNear = this.shadowCameraNear;\r\n\tlight.shadowCameraFar = this.shadowCameraFar;\r\n\r\n\tlight.shadowCameraLeft = this.shadowCameraLeft;\r\n\tlight.shadowCameraRight = this.shadowCameraRight;\r\n\tlight.shadowCameraTop = this.shadowCameraTop;\r\n\tlight.shadowCameraBottom = this.shadowCameraBottom;\r\n\r\n\tlight.shadowCameraVisible = this.shadowCameraVisible;\r\n\r\n\tlight.shadowBias = this.shadowBias;\r\n\tlight.shadowDarkness = this.shadowDarkness;\r\n\r\n\tlight.shadowMapWidth = this.shadowMapWidth;\r\n\tlight.shadowMapHeight = this.shadowMapHeight;\r\n\r\n\t//\r\n\r\n\tlight.shadowCascade = this.shadowCascade;\r\n\r\n\tlight.shadowCascadeOffset.copy( this.shadowCascadeOffset );\r\n\tlight.shadowCascadeCount = this.shadowCascadeCount;\r\n\r\n\tlight.shadowCascadeBias = this.shadowCascadeBias.slice( 0 );\r\n\tlight.shadowCascadeWidth = this.shadowCascadeWidth.slice( 0 );\r\n\tlight.shadowCascadeHeight = this.shadowCascadeHeight.slice( 0 );\r\n\r\n\tlight.shadowCascadeNearZ = this.shadowCascadeNearZ.slice( 0 );\r\n\tlight.shadowCascadeFarZ = this.shadowCascadeFarZ.slice( 0 );\r\n\r\n\treturn light;\r\n\r\n};\r\n\r\n// File:src/lights/HemisphereLight.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.HemisphereLight = function ( skyColor, groundColor, intensity ) {\r\n\r\n\tTHREE.Light.call( this, skyColor );\r\n\r\n\tthis.type = 'HemisphereLight';\r\n\r\n\tthis.position.set( 0, 100, 0 );\r\n\r\n\tthis.groundColor = new THREE.Color( groundColor );\r\n\tthis.intensity = ( intensity !== undefined ) ? intensity : 1;\r\n\r\n};\r\n\r\nTHREE.HemisphereLight.prototype = Object.create( THREE.Light.prototype );\r\n\r\nTHREE.HemisphereLight.prototype.clone = function () {\r\n\r\n\tvar light = new THREE.HemisphereLight();\r\n\r\n\tTHREE.Light.prototype.clone.call( this, light );\r\n\r\n\tlight.groundColor.copy( this.groundColor );\r\n\tlight.intensity = this.intensity;\r\n\r\n\treturn light;\r\n\r\n};\r\n\r\n// File:src/lights/PointLight.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.PointLight = function ( color, intensity, distance ) {\r\n\r\n\tTHREE.Light.call( this, color );\r\n\r\n\tthis.type = 'PointLight';\r\n\r\n\tthis.intensity = ( intensity !== undefined ) ? intensity : 1;\r\n\tthis.distance = ( distance !== undefined ) ? distance : 0;\r\n\r\n};\r\n\r\nTHREE.PointLight.prototype = Object.create( THREE.Light.prototype );\r\n\r\nTHREE.PointLight.prototype.clone = function () {\r\n\r\n\tvar light = new THREE.PointLight();\r\n\r\n\tTHREE.Light.prototype.clone.call( this, light );\r\n\r\n\tlight.intensity = this.intensity;\r\n\tlight.distance = this.distance;\r\n\r\n\treturn light;\r\n\r\n};\r\n\r\n// File:src/lights/SpotLight.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.SpotLight = function ( color, intensity, distance, angle, exponent ) {\r\n\r\n\tTHREE.Light.call( this, color );\r\n\r\n\tthis.type = 'SpotLight';\r\n\r\n\tthis.position.set( 0, 1, 0 );\r\n\tthis.target = new THREE.Object3D();\r\n\r\n\tthis.intensity = ( intensity !== undefined ) ? intensity : 1;\r\n\tthis.distance = ( distance !== undefined ) ? distance : 0;\r\n\tthis.angle = ( angle !== undefined ) ? angle : Math.PI / 3;\r\n\tthis.exponent = ( exponent !== undefined ) ? exponent : 10;\r\n\r\n\tthis.castShadow = false;\r\n\tthis.onlyShadow = false;\r\n\r\n\t//\r\n\r\n\tthis.shadowCameraNear = 50;\r\n\tthis.shadowCameraFar = 5000;\r\n\tthis.shadowCameraFov = 50;\r\n\r\n\tthis.shadowCameraVisible = false;\r\n\r\n\tthis.shadowBias = 0;\r\n\tthis.shadowDarkness = 0.5;\r\n\r\n\tthis.shadowMapWidth = 512;\r\n\tthis.shadowMapHeight = 512;\r\n\r\n\t//\r\n\r\n\tthis.shadowMap = null;\r\n\tthis.shadowMapSize = null;\r\n\tthis.shadowCamera = null;\r\n\tthis.shadowMatrix = null;\r\n\r\n};\r\n\r\nTHREE.SpotLight.prototype = Object.create( THREE.Light.prototype );\r\n\r\nTHREE.SpotLight.prototype.clone = function () {\r\n\r\n\tvar light = new THREE.SpotLight();\r\n\r\n\tTHREE.Light.prototype.clone.call( this, light );\r\n\r\n\tlight.target = this.target.clone();\r\n\r\n\tlight.intensity = this.intensity;\r\n\tlight.distance = this.distance;\r\n\tlight.angle = this.angle;\r\n\tlight.exponent = this.exponent;\r\n\r\n\tlight.castShadow = this.castShadow;\r\n\tlight.onlyShadow = this.onlyShadow;\r\n\r\n\t//\r\n\r\n\tlight.shadowCameraNear = this.shadowCameraNear;\r\n\tlight.shadowCameraFar = this.shadowCameraFar;\r\n\tlight.shadowCameraFov = this.shadowCameraFov;\r\n\r\n\tlight.shadowCameraVisible = this.shadowCameraVisible;\r\n\r\n\tlight.shadowBias = this.shadowBias;\r\n\tlight.shadowDarkness = this.shadowDarkness;\r\n\r\n\tlight.shadowMapWidth = this.shadowMapWidth;\r\n\tlight.shadowMapHeight = this.shadowMapHeight;\r\n\r\n\treturn light;\r\n\r\n};\r\n\r\n// File:src/loaders/Cache.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.Cache = function () {\r\n\r\n\tthis.files = {};\r\n\r\n};\r\n\r\nTHREE.Cache.prototype = {\r\n\r\n\tconstructor: THREE.Cache,\r\n\r\n\tadd: function ( key, file ) {\r\n\r\n\t\t// console.log( 'THREE.Cache', 'Adding key:', key );\r\n\r\n\t\tthis.files[ key ] = file;\r\n\r\n\t},\r\n\r\n\tget: function ( key ) {\r\n\r\n\t\t// console.log( 'THREE.Cache', 'Checking key:', key );\r\n\r\n\t\treturn this.files[ key ];\r\n\r\n\t},\r\n\r\n\tremove: function ( key ) {\r\n\r\n\t\tdelete this.files[ key ];\r\n\r\n\t},\r\n\r\n\tclear: function () {\r\n\r\n\t\tthis.files = {}\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/loaders/Loader.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.Loader = function ( showStatus ) {\r\n\r\n\tthis.showStatus = showStatus;\r\n\tthis.statusDomElement = showStatus ? THREE.Loader.prototype.addStatusElement() : null;\r\n\r\n\tthis.imageLoader = new THREE.ImageLoader();\r\n\r\n\tthis.onLoadStart = function () {};\r\n\tthis.onLoadProgress = function () {};\r\n\tthis.onLoadComplete = function () {};\r\n\r\n};\r\n\r\nTHREE.Loader.prototype = {\r\n\r\n\tconstructor: THREE.Loader,\r\n\r\n\tcrossOrigin: undefined,\r\n\r\n\taddStatusElement: function () {\r\n\r\n\t\tvar e = document.createElement( 'div' );\r\n\r\n\t\te.style.position = 'absolute';\r\n\t\te.style.right = '0px';\r\n\t\te.style.top = '0px';\r\n\t\te.style.fontSize = '0.8em';\r\n\t\te.style.textAlign = 'left';\r\n\t\te.style.background = 'rgba(0,0,0,0.25)';\r\n\t\te.style.color = '#fff';\r\n\t\te.style.width = '120px';\r\n\t\te.style.padding = '0.5em 0.5em 0.5em 0.5em';\r\n\t\te.style.zIndex = 1000;\r\n\r\n\t\te.innerHTML = 'Loading ...';\r\n\r\n\t\treturn e;\r\n\r\n\t},\r\n\r\n\tupdateProgress: function ( progress ) {\r\n\r\n\t\tvar message = 'Loaded ';\r\n\r\n\t\tif ( progress.total ) {\r\n\r\n\t\t\tmessage += ( 100 * progress.loaded / progress.total ).toFixed( 0 ) + '%';\r\n\r\n\r\n\t\t} else {\r\n\r\n\t\t\tmessage += ( progress.loaded / 1024 ).toFixed( 2 ) + ' KB';\r\n\r\n\t\t}\r\n\r\n\t\tthis.statusDomElement.innerHTML = message;\r\n\r\n\t},\r\n\r\n\textractUrlBase: function ( url ) {\r\n\r\n\t\tvar parts = url.split( '/' );\r\n\r\n\t\tif ( parts.length === 1 ) return './';\r\n\r\n\t\tparts.pop();\r\n\r\n\t\treturn parts.join( '/' ) + '/';\r\n\r\n\t},\r\n\r\n\tinitMaterials: function ( materials, texturePath ) {\r\n\r\n\t\tvar array = [];\r\n\r\n\t\tfor ( var i = 0; i < materials.length; ++ i ) {\r\n\r\n\t\t\tarray[ i ] = this.createMaterial( materials[ i ], texturePath );\r\n\r\n\t\t}\r\n\r\n\t\treturn array;\r\n\r\n\t},\r\n\r\n\tneedsTangents: function ( materials ) {\r\n\r\n\t\tfor ( var i = 0, il = materials.length; i < il; i ++ ) {\r\n\r\n\t\t\tvar m = materials[ i ];\r\n\r\n\t\t\tif ( m instanceof THREE.ShaderMaterial ) return true;\r\n\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\r\n\t},\r\n\r\n\tcreateMaterial: function ( m, texturePath ) {\r\n\r\n\t\tvar scope = this;\r\n\r\n\t\tfunction nearest_pow2( n ) {\r\n\r\n\t\t\tvar l = Math.log( n ) / Math.LN2;\r\n\t\t\treturn Math.pow( 2, Math.round( l ) );\r\n\r\n\t\t}\r\n\r\n\t\tfunction create_texture( where, name, sourceFile, repeat, offset, wrap, anisotropy ) {\r\n\r\n\t\t\tvar fullPath = texturePath + sourceFile;\r\n\r\n\t\t\tvar texture;\r\n\r\n\t\t\tvar loader = THREE.Loader.Handlers.get( fullPath );\r\n\r\n\t\t\tif ( loader !== null ) {\r\n\r\n\t\t\t\ttexture = loader.load( fullPath );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\ttexture = new THREE.Texture();\r\n\r\n\t\t\t\tloader = scope.imageLoader;\r\n\t\t\t\tloader.crossOrigin = scope.crossOrigin;\r\n\t\t\t\tloader.load( fullPath, function ( image ) {\r\n\r\n\t\t\t\t\tif ( THREE.Math.isPowerOfTwo( image.width ) === false ||\r\n\t\t\t\t\t\t THREE.Math.isPowerOfTwo( image.height ) === false ) {\r\n\r\n\t\t\t\t\t\tvar width = nearest_pow2( image.width );\r\n\t\t\t\t\t\tvar height = nearest_pow2( image.height );\r\n\r\n\t\t\t\t\t\tvar canvas = document.createElement( 'canvas' );\r\n\t\t\t\t\t\tcanvas.width = width;\r\n\t\t\t\t\t\tcanvas.height = height;\r\n\r\n\t\t\t\t\t\tvar context = canvas.getContext( '2d' );\r\n\t\t\t\t\t\tcontext.drawImage( image, 0, 0, width, height );\r\n\r\n\t\t\t\t\t\ttexture.image = canvas;\r\n\r\n\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\ttexture.image = image;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ttexture.needsUpdate = true;\r\n\r\n\t\t\t\t} );\r\n\r\n\t\t\t}\r\n\r\n\t\t\ttexture.sourceFile = sourceFile;\r\n\r\n\t\t\tif ( repeat ) {\r\n\r\n\t\t\t\ttexture.repeat.set( repeat[ 0 ], repeat[ 1 ] );\r\n\r\n\t\t\t\tif ( repeat[ 0 ] !== 1 ) texture.wrapS = THREE.RepeatWrapping;\r\n\t\t\t\tif ( repeat[ 1 ] !== 1 ) texture.wrapT = THREE.RepeatWrapping;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( offset ) {\r\n\r\n\t\t\t\ttexture.offset.set( offset[ 0 ], offset[ 1 ] );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( wrap ) {\r\n\r\n\t\t\t\tvar wrapMap = {\r\n\t\t\t\t\t'repeat': THREE.RepeatWrapping,\r\n\t\t\t\t\t'mirror': THREE.MirroredRepeatWrapping\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( wrapMap[ wrap[ 0 ] ] !== undefined ) texture.wrapS = wrapMap[ wrap[ 0 ] ];\r\n\t\t\t\tif ( wrapMap[ wrap[ 1 ] ] !== undefined ) texture.wrapT = wrapMap[ wrap[ 1 ] ];\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( anisotropy ) {\r\n\r\n\t\t\t\ttexture.anisotropy = anisotropy;\r\n\r\n\t\t\t}\r\n\r\n\t\t\twhere[ name ] = texture;\r\n\r\n\t\t}\r\n\r\n\t\tfunction rgb2hex( rgb ) {\r\n\r\n\t\t\treturn ( rgb[ 0 ] * 255 << 16 ) + ( rgb[ 1 ] * 255 << 8 ) + rgb[ 2 ] * 255;\r\n\r\n\t\t}\r\n\r\n\t\t// defaults\r\n\r\n\t\tvar mtype = 'MeshLambertMaterial';\r\n\t\tvar mpars = { color: 0xeeeeee, opacity: 1.0, map: null, lightMap: null, normalMap: null, bumpMap: null, wireframe: false };\r\n\r\n\t\t// parameters from model file\r\n\r\n\t\tif ( m.shading ) {\r\n\r\n\t\t\tvar shading = m.shading.toLowerCase();\r\n\r\n\t\t\tif ( shading === 'phong' ) mtype = 'MeshPhongMaterial';\r\n\t\t\telse if ( shading === 'basic' ) mtype = 'MeshBasicMaterial';\r\n\r\n\t\t}\r\n\r\n\t\tif ( m.blending !== undefined && THREE[ m.blending ] !== undefined ) {\r\n\r\n\t\t\tmpars.blending = THREE[ m.blending ];\r\n\r\n\t\t}\r\n\r\n\t\tif ( m.transparent !== undefined || m.opacity < 1.0 ) {\r\n\r\n\t\t\tmpars.transparent = m.transparent;\r\n\r\n\t\t}\r\n\r\n\t\tif ( m.depthTest !== undefined ) {\r\n\r\n\t\t\tmpars.depthTest = m.depthTest;\r\n\r\n\t\t}\r\n\r\n\t\tif ( m.depthWrite !== undefined ) {\r\n\r\n\t\t\tmpars.depthWrite = m.depthWrite;\r\n\r\n\t\t}\r\n\r\n\t\tif ( m.visible !== undefined ) {\r\n\r\n\t\t\tmpars.visible = m.visible;\r\n\r\n\t\t}\r\n\r\n\t\tif ( m.flipSided !== undefined ) {\r\n\r\n\t\t\tmpars.side = THREE.BackSide;\r\n\r\n\t\t}\r\n\r\n\t\tif ( m.doubleSided !== undefined ) {\r\n\r\n\t\t\tmpars.side = THREE.DoubleSide;\r\n\r\n\t\t}\r\n\r\n\t\tif ( m.wireframe !== undefined ) {\r\n\r\n\t\t\tmpars.wireframe = m.wireframe;\r\n\r\n\t\t}\r\n\r\n\t\tif ( m.vertexColors !== undefined ) {\r\n\r\n\t\t\tif ( m.vertexColors === 'face' ) {\r\n\r\n\t\t\t\tmpars.vertexColors = THREE.FaceColors;\r\n\r\n\t\t\t} else if ( m.vertexColors ) {\r\n\r\n\t\t\t\tmpars.vertexColors = THREE.VertexColors;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t// colors\r\n\r\n\t\tif ( m.colorDiffuse ) {\r\n\r\n\t\t\tmpars.color = rgb2hex( m.colorDiffuse );\r\n\r\n\t\t} else if ( m.DbgColor ) {\r\n\r\n\t\t\tmpars.color = m.DbgColor;\r\n\r\n\t\t}\r\n\r\n\t\tif ( m.colorSpecular ) {\r\n\r\n\t\t\tmpars.specular = rgb2hex( m.colorSpecular );\r\n\r\n\t\t}\r\n\r\n\t\tif ( m.colorAmbient ) {\r\n\r\n\t\t\tmpars.ambient = rgb2hex( m.colorAmbient );\r\n\r\n\t\t}\r\n\r\n\t\tif ( m.colorEmissive ) {\r\n\r\n\t\t\tmpars.emissive = rgb2hex( m.colorEmissive );\r\n\r\n\t\t}\r\n\r\n\t\t// modifiers\r\n\r\n\t\tif ( m.transparency ) {\r\n\r\n\t\t\tmpars.opacity = m.transparency;\r\n\r\n\t\t}\r\n\r\n\t\tif ( m.specularCoef ) {\r\n\r\n\t\t\tmpars.shininess = m.specularCoef;\r\n\r\n\t\t}\r\n\r\n\t\t// textures\r\n\r\n\t\tif ( m.mapDiffuse && texturePath ) {\r\n\r\n\t\t\tcreate_texture( mpars, 'map', m.mapDiffuse, m.mapDiffuseRepeat, m.mapDiffuseOffset, m.mapDiffuseWrap, m.mapDiffuseAnisotropy );\r\n\r\n\t\t}\r\n\r\n\t\tif ( m.mapLight && texturePath ) {\r\n\r\n\t\t\tcreate_texture( mpars, 'lightMap', m.mapLight, m.mapLightRepeat, m.mapLightOffset, m.mapLightWrap, m.mapLightAnisotropy );\r\n\r\n\t\t}\r\n\r\n\t\tif ( m.mapBump && texturePath ) {\r\n\r\n\t\t\tcreate_texture( mpars, 'bumpMap', m.mapBump, m.mapBumpRepeat, m.mapBumpOffset, m.mapBumpWrap, m.mapBumpAnisotropy );\r\n\r\n\t\t}\r\n\r\n\t\tif ( m.mapNormal && texturePath ) {\r\n\r\n\t\t\tcreate_texture( mpars, 'normalMap', m.mapNormal, m.mapNormalRepeat, m.mapNormalOffset, m.mapNormalWrap, m.mapNormalAnisotropy );\r\n\r\n\t\t}\r\n\r\n\t\tif ( m.mapSpecular && texturePath ) {\r\n\r\n\t\t\tcreate_texture( mpars, 'specularMap', m.mapSpecular, m.mapSpecularRepeat, m.mapSpecularOffset, m.mapSpecularWrap, m.mapSpecularAnisotropy );\r\n\r\n\t\t}\r\n\r\n\t\tif ( m.mapAlpha && texturePath ) {\r\n\r\n\t\t\tcreate_texture( mpars, 'alphaMap', m.mapAlpha, m.mapAlphaRepeat, m.mapAlphaOffset, m.mapAlphaWrap, m.mapAlphaAnisotropy );\r\n\r\n\t\t}\r\n\r\n\t\t//\r\n\r\n\t\tif ( m.mapBumpScale ) {\r\n\r\n\t\t\tmpars.bumpScale = m.mapBumpScale;\r\n\r\n\t\t}\r\n\r\n\t\t// special case for normal mapped material\r\n\r\n\t\tif ( m.mapNormal ) {\r\n\r\n\t\t\tvar shader = THREE.ShaderLib[ 'normalmap' ];\r\n\t\t\tvar uniforms = THREE.UniformsUtils.clone( shader.uniforms );\r\n\r\n\t\t\tuniforms[ 'tNormal' ].value = mpars.normalMap;\r\n\r\n\t\t\tif ( m.mapNormalFactor ) {\r\n\r\n\t\t\t\tuniforms[ 'uNormalScale' ].value.set( m.mapNormalFactor, m.mapNormalFactor );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( mpars.map ) {\r\n\r\n\t\t\t\tuniforms[ 'tDiffuse' ].value = mpars.map;\r\n\t\t\t\tuniforms[ 'enableDiffuse' ].value = true;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( mpars.specularMap ) {\r\n\r\n\t\t\t\tuniforms[ 'tSpecular' ].value = mpars.specularMap;\r\n\t\t\t\tuniforms[ 'enableSpecular' ].value = true;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( mpars.lightMap ) {\r\n\r\n\t\t\t\tuniforms[ 'tAO' ].value = mpars.lightMap;\r\n\t\t\t\tuniforms[ 'enableAO' ].value = true;\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// for the moment don't handle displacement texture\r\n\r\n\t\t\tuniforms[ 'diffuse' ].value.setHex( mpars.color );\r\n\t\t\tuniforms[ 'specular' ].value.setHex( mpars.specular );\r\n\t\t\tuniforms[ 'ambient' ].value.setHex( mpars.ambient );\r\n\r\n\t\t\tuniforms[ 'shininess' ].value = mpars.shininess;\r\n\r\n\t\t\tif ( mpars.opacity !== undefined ) {\r\n\r\n\t\t\t\tuniforms[ 'opacity' ].value = mpars.opacity;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar parameters = { fragmentShader: shader.fragmentShader, vertexShader: shader.vertexShader, uniforms: uniforms, lights: true, fog: true };\r\n\t\t\tvar material = new THREE.ShaderMaterial( parameters );\r\n\r\n\t\t\tif ( mpars.transparent ) {\r\n\r\n\t\t\t\tmaterial.transparent = true;\r\n\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\r\n\t\t\tvar material = new THREE[ mtype ]( mpars );\r\n\r\n\t\t}\r\n\r\n\t\tif ( m.DbgName !== undefined ) material.name = m.DbgName;\r\n\r\n\t\treturn material;\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.Loader.Handlers = {\r\n\r\n\thandlers: [],\r\n\r\n\tadd: function ( regex, loader ) {\r\n\r\n\t\tthis.handlers.push( regex, loader );\r\n\r\n\t},\r\n\r\n\tget: function ( file ) {\r\n\r\n\t\tfor ( var i = 0, l = this.handlers.length; i < l; i += 2 ) {\r\n\r\n\t\t\tvar regex = this.handlers[ i ];\r\n\t\t\tvar loader = this.handlers[ i + 1 ];\r\n\r\n\t\t\tif ( regex.test( file ) ) {\r\n\r\n\t\t\t\treturn loader;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/loaders/XHRLoader.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.XHRLoader = function ( manager ) {\r\n\r\n\tthis.cache = new THREE.Cache();\r\n\tthis.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;\r\n\r\n};\r\n\r\nTHREE.XHRLoader.prototype = {\r\n\r\n\tconstructor: THREE.XHRLoader,\r\n\r\n\tload: function ( url, onLoad, onProgress, onError ) {\r\n\r\n\t\tvar scope = this;\r\n\r\n\t\tvar cached = scope.cache.get( url );\r\n\r\n\t\tif ( cached !== undefined ) {\r\n\r\n\t\t\tif ( onLoad ) onLoad( cached );\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\r\n\t\tvar request = new XMLHttpRequest();\r\n\t\trequest.open( 'GET', url, true );\r\n\r\n\t\trequest.addEventListener( 'load', function ( event ) {\r\n\r\n\t\t\tscope.cache.add( url, this.response );\r\n\r\n\t\t\tif ( onLoad ) onLoad( this.response );\r\n\r\n\t\t\tscope.manager.itemEnd( url );\r\n\r\n\t\t}, false );\r\n\r\n\t\tif ( onProgress !== undefined ) {\r\n\r\n\t\t\trequest.addEventListener( 'progress', function ( event ) {\r\n\r\n\t\t\t\tonProgress( event );\r\n\r\n\t\t\t}, false );\r\n\r\n\t\t}\r\n\r\n\t\tif ( onError !== undefined ) {\r\n\r\n\t\t\trequest.addEventListener( 'error', function ( event ) {\r\n\r\n\t\t\t\tonError( event );\r\n\r\n\t\t\t}, false );\r\n\r\n\t\t}\r\n\r\n\t\tif ( this.crossOrigin !== undefined ) request.crossOrigin = this.crossOrigin;\r\n\t\tif ( this.responseType !== undefined ) request.responseType = this.responseType;\r\n\r\n\t\trequest.send( null );\r\n\r\n\t\tscope.manager.itemStart( url );\r\n\r\n\t},\r\n\r\n\tsetResponseType: function ( value ) {\r\n\r\n\t\tthis.responseType = value;\r\n\r\n\t},\r\n\r\n\tsetCrossOrigin: function ( value ) {\r\n\r\n\t\tthis.crossOrigin = value;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/loaders/ImageLoader.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.ImageLoader = function ( manager ) {\r\n\r\n\tthis.cache = new THREE.Cache();\r\n\tthis.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;\r\n\r\n};\r\n\r\nTHREE.ImageLoader.prototype = {\r\n\r\n\tconstructor: THREE.ImageLoader,\r\n\r\n\tload: function ( url, onLoad, onProgress, onError ) {\r\n\r\n\t\tvar scope = this;\r\n\r\n\t\tvar cached = scope.cache.get( url );\r\n\r\n\t\tif ( cached !== undefined ) {\r\n\r\n\t\t\tonLoad( cached );\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\r\n\t\tvar image = document.createElement( 'img' );\r\n\r\n\t\tif ( onLoad !== undefined ) {\r\n\r\n\t\t\timage.addEventListener( 'load', function ( event ) {\r\n\r\n\t\t\t\tscope.cache.add( url, this );\r\n\r\n\t\t\t\tonLoad( this );\r\n\t\t\t\tscope.manager.itemEnd( url );\r\n\r\n\t\t\t}, false );\r\n\r\n\t\t}\r\n\r\n\t\tif ( onProgress !== undefined ) {\r\n\r\n\t\t\timage.addEventListener( 'progress', function ( event ) {\r\n\r\n\t\t\t\tonProgress( event );\r\n\r\n\t\t\t}, false );\r\n\r\n\t\t}\r\n\r\n\t\tif ( onError !== undefined ) {\r\n\r\n\t\t\timage.addEventListener( 'error', function ( event ) {\r\n\r\n\t\t\t\tonError( event );\r\n\r\n\t\t\t}, false );\r\n\r\n\t\t}\r\n\r\n\t\tif ( this.crossOrigin !== undefined ) image.crossOrigin = this.crossOrigin;\r\n\r\n\t\timage.src = url;\r\n\r\n\t\tscope.manager.itemStart( url );\r\n\r\n\t\treturn image;\r\n\r\n\t},\r\n\r\n\tsetCrossOrigin: function ( value ) {\r\n\r\n\t\tthis.crossOrigin = value;\r\n\r\n\t}\r\n\r\n}\r\n\r\n// File:src/loaders/JSONLoader.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.JSONLoader = function ( showStatus ) {\r\n\r\n\tTHREE.Loader.call( this, showStatus );\r\n\r\n\tthis.withCredentials = false;\r\n\r\n};\r\n\r\nTHREE.JSONLoader.prototype = Object.create( THREE.Loader.prototype );\r\n\r\nTHREE.JSONLoader.prototype.load = function ( url, callback, texturePath ) {\r\n\r\n\tvar scope = this;\r\n\r\n\t// todo: unify load API to for easier SceneLoader use\r\n\r\n\ttexturePath = texturePath && ( typeof texturePath === 'string' ) ? texturePath : this.extractUrlBase( url );\r\n\r\n\tthis.onLoadStart();\r\n\tthis.loadAjaxJSON( this, url, callback, texturePath );\r\n\r\n};\r\n\r\nTHREE.JSONLoader.prototype.loadAjaxJSON = function ( context, url, callback, texturePath, callbackProgress ) {\r\n\r\n\tvar xhr = new XMLHttpRequest();\r\n\r\n\tvar length = 0;\r\n\r\n\txhr.onreadystatechange = function () {\r\n\r\n\t\tif ( xhr.readyState === xhr.DONE ) {\r\n\r\n\t\t\tif ( xhr.status === 200 || xhr.status === 0 ) {\r\n\r\n\t\t\t\tif ( xhr.responseText ) {\r\n\r\n\t\t\t\t\tvar json = JSON.parse( xhr.responseText );\r\n\r\n\t\t\t\t\tif ( json.metadata !== undefined && json.metadata.type === 'scene' ) {\r\n\r\n\t\t\t\t\t\tconsole.error( 'THREE.JSONLoader: \"' + url + '\" seems to be a Scene. Use THREE.SceneLoader instead.' );\r\n\t\t\t\t\t\treturn;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar result = context.parse( json, texturePath );\r\n\t\t\t\t\tcallback( result.geometry, result.materials );\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tconsole.error( 'THREE.JSONLoader: \"' + url + '\" seems to be unreachable or the file is empty.' );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// in context of more complex asset initialization\r\n\t\t\t\t// do not block on single failed file\r\n\t\t\t\t// maybe should go even one more level up\r\n\r\n\t\t\t\tcontext.onLoadComplete();\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tconsole.error( 'THREE.JSONLoader: Couldn\\'t load \"' + url + '\" (' + xhr.status + ')' );\r\n\r\n\t\t\t}\r\n\r\n\t\t} else if ( xhr.readyState === xhr.LOADING ) {\r\n\r\n\t\t\tif ( callbackProgress ) {\r\n\r\n\t\t\t\tif ( length === 0 ) {\r\n\r\n\t\t\t\t\tlength = xhr.getResponseHeader( 'Content-Length' );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcallbackProgress( { total: length, loaded: xhr.responseText.length } );\r\n\r\n\t\t\t}\r\n\r\n\t\t} else if ( xhr.readyState === xhr.HEADERS_RECEIVED ) {\r\n\r\n\t\t\tif ( callbackProgress !== undefined ) {\r\n\r\n\t\t\t\tlength = xhr.getResponseHeader( 'Content-Length' );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\txhr.open( 'GET', url, true );\r\n\txhr.withCredentials = this.withCredentials;\r\n\txhr.send( null );\r\n\r\n};\r\n\r\nTHREE.JSONLoader.prototype.parse = function ( json, texturePath ) {\r\n\r\n\tvar scope = this,\r\n\tgeometry = new THREE.Geometry(),\r\n\tscale = ( json.scale !== undefined ) ? 1.0 / json.scale : 1.0;\r\n\r\n\tparseModel( scale );\r\n\r\n\tparseSkin();\r\n\tparseMorphing( scale );\r\n\r\n\tgeometry.computeFaceNormals();\r\n\tgeometry.computeBoundingSphere();\r\n\r\n\tfunction parseModel( scale ) {\r\n\r\n\t\tfunction isBitSet( value, position ) {\r\n\r\n\t\t\treturn value & ( 1 << position );\r\n\r\n\t\t}\r\n\r\n\t\tvar i, j, fi,\r\n\r\n\t\toffset, zLength,\r\n\r\n\t\tcolorIndex, normalIndex, uvIndex, materialIndex,\r\n\r\n\t\ttype,\r\n\t\tisQuad,\r\n\t\thasMaterial,\r\n\t\thasFaceVertexUv,\r\n\t\thasFaceNormal, hasFaceVertexNormal,\r\n\t\thasFaceColor, hasFaceVertexColor,\r\n\r\n\t\tvertex, face, faceA, faceB, color, hex, normal,\r\n\r\n\t\tuvLayer, uv, u, v,\r\n\r\n\t\tfaces = json.faces,\r\n\t\tvertices = json.vertices,\r\n\t\tnormals = json.normals,\r\n\t\tcolors = json.colors,\r\n\r\n\t\tnUvLayers = 0;\r\n\r\n\t\tif ( json.uvs !== undefined ) {\r\n\r\n\t\t\t// disregard empty arrays\r\n\r\n\t\t\tfor ( i = 0; i < json.uvs.length; i ++ ) {\r\n\r\n\t\t\t\tif ( json.uvs[ i ].length ) nUvLayers ++;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\r\n\r\n\t\t\t\tgeometry.faceVertexUvs[ i ] = [];\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\toffset = 0;\r\n\t\tzLength = vertices.length;\r\n\r\n\t\twhile ( offset < zLength ) {\r\n\r\n\t\t\tvertex = new THREE.Vector3();\r\n\r\n\t\t\tvertex.x = vertices[ offset ++ ] * scale;\r\n\t\t\tvertex.y = vertices[ offset ++ ] * scale;\r\n\t\t\tvertex.z = vertices[ offset ++ ] * scale;\r\n\r\n\t\t\tgeometry.vertices.push( vertex );\r\n\r\n\t\t}\r\n\r\n\t\toffset = 0;\r\n\t\tzLength = faces.length;\r\n\r\n\t\twhile ( offset < zLength ) {\r\n\r\n\t\t\ttype = faces[ offset ++ ];\r\n\r\n\r\n\t\t\tisQuad = isBitSet( type, 0 );\r\n\t\t\thasMaterial = isBitSet( type, 1 );\r\n\t\t\thasFaceVertexUv = isBitSet( type, 3 );\r\n\t\t\thasFaceNormal = isBitSet( type, 4 );\r\n\t\t\thasFaceVertexNormal = isBitSet( type, 5 );\r\n\t\t\thasFaceColor\t = isBitSet( type, 6 );\r\n\t\t\thasFaceVertexColor = isBitSet( type, 7 );\r\n\r\n\t\t\t// console.log(\"type\", type, \"bits\", isQuad, hasMaterial, hasFaceVertexUv, hasFaceNormal, hasFaceVertexNormal, hasFaceColor, hasFaceVertexColor);\r\n\r\n\t\t\tif ( isQuad ) {\r\n\r\n\t\t\t\tfaceA = new THREE.Face3();\r\n\t\t\t\tfaceA.a = faces[ offset ];\r\n\t\t\t\tfaceA.b = faces[ offset + 1 ];\r\n\t\t\t\tfaceA.c = faces[ offset + 3 ];\r\n\r\n\t\t\t\tfaceB = new THREE.Face3();\r\n\t\t\t\tfaceB.a = faces[ offset + 1 ];\r\n\t\t\t\tfaceB.b = faces[ offset + 2 ];\r\n\t\t\t\tfaceB.c = faces[ offset + 3 ];\r\n\r\n\t\t\t\toffset += 4;\r\n\r\n\t\t\t\tif ( hasMaterial ) {\r\n\r\n\t\t\t\t\tmaterialIndex = faces[ offset ++ ];\r\n\t\t\t\t\tfaceA.materialIndex = materialIndex;\r\n\t\t\t\t\tfaceB.materialIndex = materialIndex;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// to get face <=> uv index correspondence\r\n\r\n\t\t\t\tfi = geometry.faces.length;\r\n\r\n\t\t\t\tif ( hasFaceVertexUv ) {\r\n\r\n\t\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\r\n\r\n\t\t\t\t\t\tuvLayer = json.uvs[ i ];\r\n\r\n\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ] = [];\r\n\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi + 1 ] = []\r\n\r\n\t\t\t\t\t\tfor ( j = 0; j < 4; j ++ ) {\r\n\r\n\t\t\t\t\t\t\tuvIndex = faces[ offset ++ ];\r\n\r\n\t\t\t\t\t\t\tu = uvLayer[ uvIndex * 2 ];\r\n\t\t\t\t\t\t\tv = uvLayer[ uvIndex * 2 + 1 ];\r\n\r\n\t\t\t\t\t\t\tuv = new THREE.Vector2( u, v );\r\n\r\n\t\t\t\t\t\t\tif ( j !== 2 ) geometry.faceVertexUvs[ i ][ fi ].push( uv );\r\n\t\t\t\t\t\t\tif ( j !== 0 ) geometry.faceVertexUvs[ i ][ fi + 1 ].push( uv );\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( hasFaceNormal ) {\r\n\r\n\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\r\n\r\n\t\t\t\t\tfaceA.normal.set(\r\n\t\t\t\t\t\tnormals[ normalIndex ++ ],\r\n\t\t\t\t\t\tnormals[ normalIndex ++ ],\r\n\t\t\t\t\t\tnormals[ normalIndex ]\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t\tfaceB.normal.copy( faceA.normal );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( hasFaceVertexNormal ) {\r\n\r\n\t\t\t\t\tfor ( i = 0; i < 4; i ++ ) {\r\n\r\n\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\r\n\r\n\t\t\t\t\t\tnormal = new THREE.Vector3(\r\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\r\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\r\n\t\t\t\t\t\t\tnormals[ normalIndex ]\r\n\t\t\t\t\t\t);\r\n\r\n\r\n\t\t\t\t\t\tif ( i !== 2 ) faceA.vertexNormals.push( normal );\r\n\t\t\t\t\t\tif ( i !== 0 ) faceB.vertexNormals.push( normal );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\tif ( hasFaceColor ) {\r\n\r\n\t\t\t\t\tcolorIndex = faces[ offset ++ ];\r\n\t\t\t\t\thex = colors[ colorIndex ];\r\n\r\n\t\t\t\t\tfaceA.color.setHex( hex );\r\n\t\t\t\t\tfaceB.color.setHex( hex );\r\n\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\tif ( hasFaceVertexColor ) {\r\n\r\n\t\t\t\t\tfor ( i = 0; i < 4; i ++ ) {\r\n\r\n\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\r\n\t\t\t\t\t\thex = colors[ colorIndex ];\r\n\r\n\t\t\t\t\t\tif ( i !== 2 ) faceA.vertexColors.push( new THREE.Color( hex ) );\r\n\t\t\t\t\t\tif ( i !== 0 ) faceB.vertexColors.push( new THREE.Color( hex ) );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tgeometry.faces.push( faceA );\r\n\t\t\t\tgeometry.faces.push( faceB );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tface = new THREE.Face3();\r\n\t\t\t\tface.a = faces[ offset ++ ];\r\n\t\t\t\tface.b = faces[ offset ++ ];\r\n\t\t\t\tface.c = faces[ offset ++ ];\r\n\r\n\t\t\t\tif ( hasMaterial ) {\r\n\r\n\t\t\t\t\tmaterialIndex = faces[ offset ++ ];\r\n\t\t\t\t\tface.materialIndex = materialIndex;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// to get face <=> uv index correspondence\r\n\r\n\t\t\t\tfi = geometry.faces.length;\r\n\r\n\t\t\t\tif ( hasFaceVertexUv ) {\r\n\r\n\t\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\r\n\r\n\t\t\t\t\t\tuvLayer = json.uvs[ i ];\r\n\r\n\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ] = [];\r\n\r\n\t\t\t\t\t\tfor ( j = 0; j < 3; j ++ ) {\r\n\r\n\t\t\t\t\t\t\tuvIndex = faces[ offset ++ ];\r\n\r\n\t\t\t\t\t\t\tu = uvLayer[ uvIndex * 2 ];\r\n\t\t\t\t\t\t\tv = uvLayer[ uvIndex * 2 + 1 ];\r\n\r\n\t\t\t\t\t\t\tuv = new THREE.Vector2( u, v );\r\n\r\n\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ].push( uv );\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( hasFaceNormal ) {\r\n\r\n\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\r\n\r\n\t\t\t\t\tface.normal.set(\r\n\t\t\t\t\t\tnormals[ normalIndex ++ ],\r\n\t\t\t\t\t\tnormals[ normalIndex ++ ],\r\n\t\t\t\t\t\tnormals[ normalIndex ]\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( hasFaceVertexNormal ) {\r\n\r\n\t\t\t\t\tfor ( i = 0; i < 3; i ++ ) {\r\n\r\n\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\r\n\r\n\t\t\t\t\t\tnormal = new THREE.Vector3(\r\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\r\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\r\n\t\t\t\t\t\t\tnormals[ normalIndex ]\r\n\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\tface.vertexNormals.push( normal );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\tif ( hasFaceColor ) {\r\n\r\n\t\t\t\t\tcolorIndex = faces[ offset ++ ];\r\n\t\t\t\t\tface.color.setHex( colors[ colorIndex ] );\r\n\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\tif ( hasFaceVertexColor ) {\r\n\r\n\t\t\t\t\tfor ( i = 0; i < 3; i ++ ) {\r\n\r\n\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\r\n\t\t\t\t\t\tface.vertexColors.push( new THREE.Color( colors[ colorIndex ] ) );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tgeometry.faces.push( face );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tfunction parseSkin() {\r\n\t\tvar influencesPerVertex = ( json.influencesPerVertex !== undefined ) ? json.influencesPerVertex : 2;\r\n\r\n\t\tif ( json.skinWeights ) {\r\n\r\n\t\t\tfor ( var i = 0, l = json.skinWeights.length; i < l; i += influencesPerVertex ) {\r\n\r\n\t\t\t\tvar x = json.skinWeights[ i ];\r\n\t\t\t\tvar y = ( influencesPerVertex > 1 ) ? json.skinWeights[ i + 1 ] : 0;\r\n\t\t\t\tvar z = ( influencesPerVertex > 2 ) ? json.skinWeights[ i + 2 ] : 0;\r\n\t\t\t\tvar w = ( influencesPerVertex > 3 ) ? json.skinWeights[ i + 3 ] : 0;\r\n\r\n\t\t\t\tgeometry.skinWeights.push( new THREE.Vector4( x, y, z, w ) );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( json.skinIndices ) {\r\n\r\n\t\t\tfor ( var i = 0, l = json.skinIndices.length; i < l; i += influencesPerVertex ) {\r\n\r\n\t\t\t\tvar a = json.skinIndices[ i ];\r\n\t\t\t\tvar b = ( influencesPerVertex > 1 ) ? json.skinIndices[ i + 1 ] : 0;\r\n\t\t\t\tvar c = ( influencesPerVertex > 2 ) ? json.skinIndices[ i + 2 ] : 0;\r\n\t\t\t\tvar d = ( influencesPerVertex > 3 ) ? json.skinIndices[ i + 3 ] : 0;\r\n\r\n\t\t\t\tgeometry.skinIndices.push( new THREE.Vector4( a, b, c, d ) );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tgeometry.bones = json.bones;\r\n\r\n\t\tif ( geometry.bones && geometry.bones.length > 0 && ( geometry.skinWeights.length !== geometry.skinIndices.length || geometry.skinIndices.length !== geometry.vertices.length ) ) {\r\n\r\n\t\t\t\tconsole.warn( 'When skinning, number of vertices (' + geometry.vertices.length + '), skinIndices (' +\r\n\t\t\t\t\tgeometry.skinIndices.length + '), and skinWeights (' + geometry.skinWeights.length + ') should match.' );\r\n\r\n\t\t}\r\n\r\n\r\n\t\t// could change this to json.animations[0] or remove completely\r\n\r\n\t\tgeometry.animation = json.animation;\r\n\t\tgeometry.animations = json.animations;\r\n\r\n\t};\r\n\r\n\tfunction parseMorphing( scale ) {\r\n\r\n\t\tif ( json.morphTargets !== undefined ) {\r\n\r\n\t\t\tvar i, l, v, vl, dstVertices, srcVertices;\r\n\r\n\t\t\tfor ( i = 0, l = json.morphTargets.length; i < l; i ++ ) {\r\n\r\n\t\t\t\tgeometry.morphTargets[ i ] = {};\r\n\t\t\t\tgeometry.morphTargets[ i ].name = json.morphTargets[ i ].name;\r\n\t\t\t\tgeometry.morphTargets[ i ].vertices = [];\r\n\r\n\t\t\t\tdstVertices = geometry.morphTargets[ i ].vertices;\r\n\t\t\t\tsrcVertices = json.morphTargets [ i ].vertices;\r\n\r\n\t\t\t\tfor ( v = 0, vl = srcVertices.length; v < vl; v += 3 ) {\r\n\r\n\t\t\t\t\tvar vertex = new THREE.Vector3();\r\n\t\t\t\t\tvertex.x = srcVertices[ v ] * scale;\r\n\t\t\t\t\tvertex.y = srcVertices[ v + 1 ] * scale;\r\n\t\t\t\t\tvertex.z = srcVertices[ v + 2 ] * scale;\r\n\r\n\t\t\t\t\tdstVertices.push( vertex );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( json.morphColors !== undefined ) {\r\n\r\n\t\t\tvar i, l, c, cl, dstColors, srcColors, color;\r\n\r\n\t\t\tfor ( i = 0, l = json.morphColors.length; i < l; i ++ ) {\r\n\r\n\t\t\t\tgeometry.morphColors[ i ] = {};\r\n\t\t\t\tgeometry.morphColors[ i ].name = json.morphColors[ i ].name;\r\n\t\t\t\tgeometry.morphColors[ i ].colors = [];\r\n\r\n\t\t\t\tdstColors = geometry.morphColors[ i ].colors;\r\n\t\t\t\tsrcColors = json.morphColors [ i ].colors;\r\n\r\n\t\t\t\tfor ( c = 0, cl = srcColors.length; c < cl; c += 3 ) {\r\n\r\n\t\t\t\t\tcolor = new THREE.Color( 0xffaa00 );\r\n\t\t\t\t\tcolor.setRGB( srcColors[ c ], srcColors[ c + 1 ], srcColors[ c + 2 ] );\r\n\t\t\t\t\tdstColors.push( color );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tif ( json.materials === undefined || json.materials.length === 0 ) {\r\n\r\n\t\treturn { geometry: geometry };\r\n\r\n\t} else {\r\n\r\n\t\tvar materials = this.initMaterials( json.materials, texturePath );\r\n\r\n\t\tif ( this.needsTangents( materials ) ) {\r\n\r\n\t\t\tgeometry.computeTangents();\r\n\r\n\t\t}\r\n\r\n\t\treturn { geometry: geometry, materials: materials };\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/loaders/LoadingManager.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.LoadingManager = function ( onLoad, onProgress, onError ) {\r\n\r\n\tvar scope = this;\r\n\r\n\tvar loaded = 0, total = 0;\r\n\r\n\tthis.onLoad = onLoad;\r\n\tthis.onProgress = onProgress;\r\n\tthis.onError = onError;\r\n\r\n\tthis.itemStart = function ( url ) {\r\n\r\n\t\ttotal ++;\r\n\r\n\t};\r\n\r\n\tthis.itemEnd = function ( url ) {\r\n\r\n\t\tloaded ++;\r\n\r\n\t\tif ( scope.onProgress !== undefined ) {\r\n\r\n\t\t\tscope.onProgress( url, loaded, total );\r\n\r\n\t\t}\r\n\r\n\t\tif ( loaded === total && scope.onLoad !== undefined ) {\r\n\r\n\t\t\tscope.onLoad();\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n};\r\n\r\nTHREE.DefaultLoadingManager = new THREE.LoadingManager();\r\n\r\n// File:src/loaders/BufferGeometryLoader.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.BufferGeometryLoader = function ( manager ) {\r\n\r\n\tthis.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;\r\n\r\n};\r\n\r\nTHREE.BufferGeometryLoader.prototype = {\r\n\r\n\tconstructor: THREE.BufferGeometryLoader,\r\n\r\n\tload: function ( url, onLoad, onProgress, onError ) {\r\n\r\n\t\tvar scope = this;\r\n\r\n\t\tvar loader = new THREE.XHRLoader();\r\n\t\tloader.setCrossOrigin( this.crossOrigin );\r\n\t\tloader.load( url, function ( text ) {\r\n\r\n\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\r\n\r\n\t\t}, onProgress, onError );\r\n\r\n\t},\r\n\r\n\tsetCrossOrigin: function ( value ) {\r\n\r\n\t\tthis.crossOrigin = value;\r\n\r\n\t},\r\n\r\n\tparse: function ( json ) {\r\n\r\n\t\tvar geometry = new THREE.BufferGeometry();\r\n\r\n\t\tvar attributes = json.attributes;\r\n\r\n\t\tfor ( var key in attributes ) {\r\n\r\n\t\t\tvar attribute = attributes[ key ];\r\n\t\t\tvar typedArray = new self[ attribute.type ]( attribute.array );\r\n\r\n\t\t\tgeometry.addAttribute( key, new THREE.BufferAttribute( typedArray, attribute.itemSize ) );\r\n\r\n\t\t}\r\n\r\n\t\tvar offsets = json.offsets;\r\n\r\n\t\tif ( offsets !== undefined ) {\r\n\r\n\t\t\tgeometry.offsets = JSON.parse( JSON.stringify( offsets ) );\r\n\r\n\t\t}\r\n\r\n\t\tvar boundingSphere = json.boundingSphere;\r\n\r\n\t\tif ( boundingSphere !== undefined ) {\r\n\r\n\t\t\tvar center = new THREE.Vector3();\r\n\r\n\t\t\tif ( boundingSphere.center !== undefined ) {\r\n\r\n\t\t\t\tcenter.fromArray( boundingSphere.center );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tgeometry.boundingSphere = new THREE.Sphere( center, boundingSphere.radius );\r\n\r\n\t\t}\r\n\r\n\t\treturn geometry;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/loaders/MaterialLoader.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.MaterialLoader = function ( manager ) {\r\n\r\n\tthis.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;\r\n\r\n};\r\n\r\nTHREE.MaterialLoader.prototype = {\r\n\r\n\tconstructor: THREE.MaterialLoader,\r\n\r\n\tload: function ( url, onLoad, onProgress, onError ) {\r\n\r\n\t\tvar scope = this;\r\n\r\n\t\tvar loader = new THREE.XHRLoader();\r\n\t\tloader.setCrossOrigin( this.crossOrigin );\r\n\t\tloader.load( url, function ( text ) {\r\n\r\n\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\r\n\r\n\t\t}, onProgress, onError );\r\n\r\n\t},\r\n\r\n\tsetCrossOrigin: function ( value ) {\r\n\r\n\t\tthis.crossOrigin = value;\r\n\r\n\t},\r\n\r\n\tparse: function ( json ) {\r\n\r\n\t\tvar material = new THREE[ json.type ];\r\n\r\n\t\tif ( json.color !== undefined ) material.color.setHex( json.color );\r\n\t\tif ( json.ambient !== undefined ) material.ambient.setHex( json.ambient );\r\n\t\tif ( json.emissive !== undefined ) material.emissive.setHex( json.emissive );\r\n\t\tif ( json.specular !== undefined ) material.specular.setHex( json.specular );\r\n\t\tif ( json.shininess !== undefined ) material.shininess = json.shininess;\r\n\t\tif ( json.uniforms !== undefined ) material.uniforms = json.uniforms;\r\n\t\tif ( json.vertexShader !== undefined ) material.vertexShader = json.vertexShader;\r\n\t\tif ( json.fragmentShader !== undefined ) material.fragmentShader = json.fragmentShader;\t\t\r\n\t\tif ( json.vertexColors !== undefined ) material.vertexColors = json.vertexColors;\r\n\t\tif ( json.shading !== undefined ) material.shading = json.shading;\r\n\t\tif ( json.blending !== undefined ) material.blending = json.blending;\r\n\t\tif ( json.side !== undefined ) material.side = json.side;\r\n\t\tif ( json.opacity !== undefined ) material.opacity = json.opacity;\r\n\t\tif ( json.transparent !== undefined ) material.transparent = json.transparent;\r\n\t\tif ( json.wireframe !== undefined ) material.wireframe = json.wireframe;\r\n\r\n\t\tif ( json.materials !== undefined ) {\r\n\r\n\t\t\tfor ( var i = 0, l = json.materials.length; i < l; i ++ ) {\r\n\r\n\t\t\t\tmaterial.materials.push( this.parse( json.materials[ i ] ) );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn material;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/loaders/ObjectLoader.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.ObjectLoader = function ( manager ) {\r\n\r\n\tthis.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;\r\n\r\n};\r\n\r\nTHREE.ObjectLoader.prototype = {\r\n\r\n\tconstructor: THREE.ObjectLoader,\r\n\r\n\tload: function ( url, onLoad, onProgress, onError ) {\r\n\r\n\t\tvar scope = this;\r\n\r\n\t\tvar loader = new THREE.XHRLoader( scope.manager );\r\n\t\tloader.setCrossOrigin( this.crossOrigin );\r\n\t\tloader.load( url, function ( text ) {\r\n\r\n\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\r\n\r\n\t\t}, onProgress, onError );\r\n\r\n\t},\r\n\r\n\tsetCrossOrigin: function ( value ) {\r\n\r\n\t\tthis.crossOrigin = value;\r\n\r\n\t},\r\n\r\n\tparse: function ( json ) {\r\n\r\n\t\tvar geometries = this.parseGeometries( json.geometries );\r\n\t\tvar materials = this.parseMaterials( json.materials );\r\n\t\tvar object = this.parseObject( json.object, geometries, materials );\r\n\r\n\t\treturn object;\r\n\r\n\t},\r\n\r\n\tparseGeometries: function ( json ) {\r\n\r\n\t\tvar geometries = {};\r\n\r\n\t\tif ( json !== undefined ) {\r\n\r\n\t\t\tvar geometryLoader = new THREE.JSONLoader();\r\n\t\t\tvar bufferGeometryLoader = new THREE.BufferGeometryLoader();\r\n\r\n\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\r\n\r\n\t\t\t\tvar geometry;\r\n\t\t\t\tvar data = json[ i ];\r\n\r\n\t\t\t\tswitch ( data.type ) {\r\n\r\n\t\t\t\t\tcase 'PlaneGeometry':\r\n\r\n\t\t\t\t\t\tgeometry = new THREE.PlaneGeometry(\r\n\t\t\t\t\t\t\tdata.width,\r\n\t\t\t\t\t\t\tdata.height,\r\n\t\t\t\t\t\t\tdata.widthSegments,\r\n\t\t\t\t\t\t\tdata.heightSegments\r\n\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 'BoxGeometry':\r\n\t\t\t\t\tcase 'CubeGeometry': // backwards compatible\r\n\r\n\t\t\t\t\t\tgeometry = new THREE.BoxGeometry(\r\n\t\t\t\t\t\t\tdata.width,\r\n\t\t\t\t\t\t\tdata.height,\r\n\t\t\t\t\t\t\tdata.depth,\r\n\t\t\t\t\t\t\tdata.widthSegments,\r\n\t\t\t\t\t\t\tdata.heightSegments,\r\n\t\t\t\t\t\t\tdata.depthSegments\r\n\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 'CircleGeometry':\r\n\r\n\t\t\t\t\t\tgeometry = new THREE.CircleGeometry(\r\n\t\t\t\t\t\t\tdata.radius,\r\n\t\t\t\t\t\t\tdata.segments\r\n\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 'CylinderGeometry':\r\n\r\n\t\t\t\t\t\tgeometry = new THREE.CylinderGeometry(\r\n\t\t\t\t\t\t\tdata.radiusTop,\r\n\t\t\t\t\t\t\tdata.radiusBottom,\r\n\t\t\t\t\t\t\tdata.height,\r\n\t\t\t\t\t\t\tdata.radialSegments,\r\n\t\t\t\t\t\t\tdata.heightSegments,\r\n\t\t\t\t\t\t\tdata.openEnded\r\n\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 'SphereGeometry':\r\n\r\n\t\t\t\t\t\tgeometry = new THREE.SphereGeometry(\r\n\t\t\t\t\t\t\tdata.radius,\r\n\t\t\t\t\t\t\tdata.widthSegments,\r\n\t\t\t\t\t\t\tdata.heightSegments,\r\n\t\t\t\t\t\t\tdata.phiStart,\r\n\t\t\t\t\t\t\tdata.phiLength,\r\n\t\t\t\t\t\t\tdata.thetaStart,\r\n\t\t\t\t\t\t\tdata.thetaLength\r\n\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 'IcosahedronGeometry':\r\n\r\n\t\t\t\t\t\tgeometry = new THREE.IcosahedronGeometry(\r\n\t\t\t\t\t\t\tdata.radius,\r\n\t\t\t\t\t\t\tdata.detail\r\n\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 'TorusGeometry':\r\n\r\n\t\t\t\t\t\tgeometry = new THREE.TorusGeometry(\r\n\t\t\t\t\t\t\tdata.radius,\r\n\t\t\t\t\t\t\tdata.tube,\r\n\t\t\t\t\t\t\tdata.radialSegments,\r\n\t\t\t\t\t\t\tdata.tubularSegments,\r\n\t\t\t\t\t\t\tdata.arc\r\n\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 'TorusKnotGeometry':\r\n\r\n\t\t\t\t\t\tgeometry = new THREE.TorusKnotGeometry(\r\n\t\t\t\t\t\t\tdata.radius,\r\n\t\t\t\t\t\t\tdata.tube,\r\n\t\t\t\t\t\t\tdata.radialSegments,\r\n\t\t\t\t\t\t\tdata.tubularSegments,\r\n\t\t\t\t\t\t\tdata.p,\r\n\t\t\t\t\t\t\tdata.q,\r\n\t\t\t\t\t\t\tdata.heightScale\r\n\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 'BufferGeometry':\r\n\r\n\t\t\t\t\t\tgeometry = bufferGeometryLoader.parse( data.data );\r\n\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 'Geometry':\r\n\r\n\t\t\t\t\t\tgeometry = geometryLoader.parse( data.data ).geometry;\r\n\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tgeometry.uuid = data.uuid;\r\n\r\n\t\t\t\tif ( data.name !== undefined ) geometry.name = data.name;\r\n\r\n\t\t\t\tgeometries[ data.uuid ] = geometry;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn geometries;\r\n\r\n\t},\r\n\r\n\tparseMaterials: function ( json ) {\r\n\r\n\t\tvar materials = {};\r\n\r\n\t\tif ( json !== undefined ) {\r\n\r\n\t\t\tvar loader = new THREE.MaterialLoader();\r\n\r\n\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\r\n\r\n\t\t\t\tvar data = json[ i ];\r\n\t\t\t\tvar material = loader.parse( data );\r\n\r\n\t\t\t\tmaterial.uuid = data.uuid;\r\n\r\n\t\t\t\tif ( data.name !== undefined ) material.name = data.name;\r\n\r\n\t\t\t\tmaterials[ data.uuid ] = material;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn materials;\r\n\r\n\t},\r\n\r\n\tparseObject: function () {\r\n\r\n\t\tvar matrix = new THREE.Matrix4();\r\n\r\n\t\treturn function ( data, geometries, materials ) {\r\n\r\n\t\t\tvar object;\r\n\r\n\t\t\tswitch ( data.type ) {\r\n\r\n\t\t\t\tcase 'Scene':\r\n\r\n\t\t\t\t\tobject = new THREE.Scene();\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'PerspectiveCamera':\r\n\r\n\t\t\t\t\tobject = new THREE.PerspectiveCamera( data.fov, data.aspect, data.near, data.far );\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'OrthographicCamera':\r\n\r\n\t\t\t\t\tobject = new THREE.OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far );\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'AmbientLight':\r\n\r\n\t\t\t\t\tobject = new THREE.AmbientLight( data.color );\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'DirectionalLight':\r\n\r\n\t\t\t\t\tobject = new THREE.DirectionalLight( data.color, data.intensity );\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'PointLight':\r\n\r\n\t\t\t\t\tobject = new THREE.PointLight( data.color, data.intensity, data.distance );\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'SpotLight':\r\n\r\n\t\t\t\t\tobject = new THREE.SpotLight( data.color, data.intensity, data.distance, data.angle, data.exponent );\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'HemisphereLight':\r\n\r\n\t\t\t\t\tobject = new THREE.HemisphereLight( data.color, data.groundColor, data.intensity );\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'Mesh':\r\n\r\n\t\t\t\t\tvar geometry = geometries[ data.geometry ];\r\n\t\t\t\t\tvar material = materials[ data.material ];\r\n\r\n\t\t\t\t\tif ( geometry === undefined ) {\r\n\r\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined geometry', data.geometry );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ( material === undefined ) {\r\n\r\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', data.material );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tobject = new THREE.Mesh( geometry, material );\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'Line':\r\n\r\n\t\t\t\t\tvar geometry = geometries[ data.geometry ];\r\n\t\t\t\t\tvar material = materials[ data.material ];\r\n\r\n\t\t\t\t\tif ( geometry === undefined ) {\r\n\r\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined geometry', data.geometry );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ( material === undefined ) {\r\n\r\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', data.material );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tobject = new THREE.Line( geometry, material );\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'Sprite':\r\n\r\n\t\t\t\t\tvar material = materials[ data.material ];\r\n\r\n\t\t\t\t\tif ( material === undefined ) {\r\n\r\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', data.material );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tobject = new THREE.Sprite( material );\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'Group':\r\n\r\n\t\t\t\t\tobject = new THREE.Group();\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\r\n\t\t\t\t\tobject = new THREE.Object3D();\r\n\r\n\t\t\t}\r\n\r\n\t\t\tobject.uuid = data.uuid;\r\n\r\n\t\t\tif ( data.name !== undefined ) object.name = data.name;\r\n\t\t\tif ( data.matrix !== undefined ) {\r\n\r\n\t\t\t\tmatrix.fromArray( data.matrix );\r\n\t\t\t\tmatrix.decompose( object.position, object.quaternion, object.scale );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tif ( data.position !== undefined ) object.position.fromArray( data.position );\r\n\t\t\t\tif ( data.rotation !== undefined ) object.rotation.fromArray( data.rotation );\r\n\t\t\t\tif ( data.scale !== undefined ) object.scale.fromArray( data.scale );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( data.visible !== undefined ) object.visible = data.visible;\r\n\t\t\tif ( data.userData !== undefined ) object.userData = data.userData;\r\n\r\n\t\t\tif ( data.children !== undefined ) {\r\n\r\n\t\t\t\tfor ( var child in data.children ) {\r\n\r\n\t\t\t\t\tobject.add( this.parseObject( data.children[ child ], geometries, materials ) );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn object;\r\n\r\n\t\t}\r\n\r\n\t}()\r\n\r\n};\r\n\r\n// File:src/loaders/TextureLoader.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.TextureLoader = function ( manager ) {\r\n\r\n\tthis.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;\r\n\r\n};\r\n\r\nTHREE.TextureLoader.prototype = {\r\n\r\n\tconstructor: THREE.TextureLoader,\r\n\r\n\tload: function ( url, onLoad, onProgress, onError ) {\r\n\r\n\t\tvar scope = this;\r\n\r\n\t\tvar loader = new THREE.ImageLoader( scope.manager );\r\n\t\tloader.setCrossOrigin( this.crossOrigin );\r\n\t\tloader.load( url, function ( image ) {\r\n\r\n\t\t\tvar texture = new THREE.Texture( image );\r\n\t\t\ttexture.needsUpdate = true;\r\n\r\n\t\t\tif ( onLoad !== undefined ) {\r\n\r\n\t\t\t\tonLoad( texture );\r\n\r\n\t\t\t}\r\n\r\n\t\t}, onProgress, onError );\r\n\r\n\t},\r\n\r\n\tsetCrossOrigin: function ( value ) {\r\n\r\n\t\tthis.crossOrigin = value;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/loaders/CompressedTextureLoader.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n *\r\n * Abstract Base class to block based textures loader (dds, pvr, ...)\r\n */\r\n\r\nTHREE.CompressedTextureLoader = function () {\r\n\r\n\t// override in sub classes\r\n\tthis._parser = null;\r\n\r\n};\r\n\r\n\r\nTHREE.CompressedTextureLoader.prototype = {\r\n\r\n\tconstructor: THREE.CompressedTextureLoader,\r\n\r\n\tload: function ( url, onLoad, onError ) {\r\n\r\n\t\tvar scope = this;\r\n\r\n\t\tvar images = [];\r\n\r\n\t\tvar texture = new THREE.CompressedTexture();\r\n\t\ttexture.image = images;\r\n\r\n\t\tvar loader = new THREE.XHRLoader();\r\n\t\tloader.setResponseType( 'arraybuffer' );\r\n\r\n\t\tif ( url instanceof Array ) {\r\n\r\n\t\t\tvar loaded = 0;\r\n\r\n\t\t\tvar loadTexture = function ( i ) {\r\n\r\n\t\t\t\tloader.load( url[ i ], function ( buffer ) {\r\n\r\n\t\t\t\t\tvar texDatas = scope._parser( buffer, true );\r\n\r\n\t\t\t\t\timages[ i ] = {\r\n\t\t\t\t\t\twidth: texDatas.width,\r\n\t\t\t\t\t\theight: texDatas.height,\r\n\t\t\t\t\t\tformat: texDatas.format,\r\n\t\t\t\t\t\tmipmaps: texDatas.mipmaps\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tloaded += 1;\r\n\r\n\t\t\t\t\tif ( loaded === 6 ) {\r\n\r\n \t\t\t\t\t\tif (texDatas.mipmapCount == 1)\r\n \t\t\t\t\t\t\ttexture.minFilter = THREE.LinearFilter;\r\n\r\n\t\t\t\t\t\ttexture.format = texDatas.format;\r\n\t\t\t\t\t\ttexture.needsUpdate = true;\r\n\r\n\t\t\t\t\t\tif ( onLoad ) onLoad( texture );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} );\r\n\r\n\t\t\t};\r\n\r\n\t\t\tfor ( var i = 0, il = url.length; i < il; ++ i ) {\r\n\r\n\t\t\t\tloadTexture( i );\r\n\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// compressed cubemap texture stored in a single DDS file\r\n\r\n\t\t\tloader.load( url, function ( buffer ) {\r\n\r\n\t\t\t\tvar texDatas = scope._parser( buffer, true );\r\n\r\n\t\t\t\tif ( texDatas.isCubemap ) {\r\n\r\n\t\t\t\t\tvar faces = texDatas.mipmaps.length / texDatas.mipmapCount;\r\n\r\n\t\t\t\t\tfor ( var f = 0; f < faces; f ++ ) {\r\n\r\n\t\t\t\t\t\timages[ f ] = { mipmaps : [] };\r\n\r\n\t\t\t\t\t\tfor ( var i = 0; i < texDatas.mipmapCount; i ++ ) {\r\n\r\n\t\t\t\t\t\t\timages[ f ].mipmaps.push( texDatas.mipmaps[ f * texDatas.mipmapCount + i ] );\r\n\t\t\t\t\t\t\timages[ f ].format = texDatas.format;\r\n\t\t\t\t\t\t\timages[ f ].width = texDatas.width;\r\n\t\t\t\t\t\t\timages[ f ].height = texDatas.height;\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\ttexture.image.width = texDatas.width;\r\n\t\t\t\t\ttexture.image.height = texDatas.height;\r\n\t\t\t\t\ttexture.mipmaps = texDatas.mipmaps;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( texDatas.mipmapCount === 1 ) {\r\n\r\n\t\t\t\t\ttexture.minFilter = THREE.LinearFilter;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttexture.format = texDatas.format;\r\n\t\t\t\ttexture.needsUpdate = true;\r\n\r\n\t\t\t\tif ( onLoad ) onLoad( texture );\r\n\r\n\t\t\t} );\r\n\r\n\t\t}\r\n\r\n\t\treturn texture;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/materials/Material.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.Material = function () {\r\n\r\n\tObject.defineProperty( this, 'id', { value: THREE.MaterialIdCount ++ } );\r\n\r\n\tthis.uuid = THREE.Math.generateUUID();\r\n\r\n\tthis.name = '';\r\n\tthis.type = 'Material';\r\n\r\n\tthis.side = THREE.FrontSide;\r\n\r\n\tthis.opacity = 1;\r\n\tthis.transparent = false;\r\n\r\n\tthis.blending = THREE.NormalBlending;\r\n\r\n\tthis.blendSrc = THREE.SrcAlphaFactor;\r\n\tthis.blendDst = THREE.OneMinusSrcAlphaFactor;\r\n\tthis.blendEquation = THREE.AddEquation;\r\n\r\n\tthis.depthTest = true;\r\n\tthis.depthWrite = true;\r\n\r\n\tthis.polygonOffset = false;\r\n\tthis.polygonOffsetFactor = 0;\r\n\tthis.polygonOffsetUnits = 0;\r\n\r\n\tthis.alphaTest = 0;\r\n\r\n\tthis.overdraw = 0; // Overdrawn pixels (typically between 0 and 1) for fixing antialiasing gaps in CanvasRenderer\r\n\r\n\tthis.visible = true;\r\n\r\n\tthis.needsUpdate = true;\r\n\r\n};\r\n\r\nTHREE.Material.prototype = {\r\n\r\n\tconstructor: THREE.Material,\r\n\r\n\tsetValues: function ( values ) {\r\n\r\n\t\tif ( values === undefined ) return;\r\n\r\n\t\tfor ( var key in values ) {\r\n\r\n\t\t\tvar newValue = values[ key ];\r\n\r\n\t\t\tif ( newValue === undefined ) {\r\n\r\n\t\t\t\tconsole.warn( \"THREE.Material: '\" + key + \"' parameter is undefined.\" );\r\n\t\t\t\tcontinue;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( key in this ) {\r\n\r\n\t\t\t\tvar currentValue = this[ key ];\r\n\r\n\t\t\t\tif ( currentValue instanceof THREE.Color ) {\r\n\r\n\t\t\t\t\tcurrentValue.set( newValue );\r\n\r\n\t\t\t\t} else if ( currentValue instanceof THREE.Vector3 && newValue instanceof THREE.Vector3 ) {\r\n\r\n\t\t\t\t\tcurrentValue.copy( newValue );\r\n\r\n\t\t\t\t} else if ( key == 'overdraw' ) {\r\n\r\n\t\t\t\t\t// ensure overdraw is backwards-compatable with legacy boolean type\r\n\t\t\t\t\tthis[ key ] = Number( newValue );\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tthis[ key ] = newValue;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\ttoJSON: function () {\r\n\r\n\t\tvar output = {\r\n\t\t\tmetadata: {\r\n\t\t\t\tversion: 4.2,\r\n\t\t\t\ttype: 'material',\r\n\t\t\t\tgenerator: 'MaterialExporter'\r\n\t\t\t},\r\n\t\t\tuuid: this.uuid,\r\n\t\t\ttype: this.type\r\n\t\t};\r\n\r\n\t\tif ( this.name !== \"\" ) output.name = this.name;\r\n\r\n\t\tif ( this instanceof THREE.MeshBasicMaterial ) {\r\n\r\n\t\t\toutput.color = this.color.getHex();\r\n\t\t\tif ( this.vertexColors !== THREE.NoColors ) output.vertexColors = this.vertexColors;\r\n\t\t\tif ( this.blending !== THREE.NormalBlending ) output.blending = this.blending;\r\n\t\t\tif ( this.side !== THREE.FrontSide ) output.side = this.side;\r\n\r\n\t\t} else if ( this instanceof THREE.MeshLambertMaterial ) {\r\n\r\n\t\t\toutput.color = this.color.getHex();\r\n\t\t\toutput.ambient = this.ambient.getHex();\r\n\t\t\toutput.emissive = this.emissive.getHex();\r\n\t\t\tif ( this.vertexColors !== THREE.NoColors ) output.vertexColors = this.vertexColors;\r\n\t\t\tif ( this.blending !== THREE.NormalBlending ) output.blending = this.blending;\r\n\t\t\tif ( this.side !== THREE.FrontSide ) output.side = this.side;\r\n\r\n\t\t} else if ( this instanceof THREE.MeshPhongMaterial ) {\r\n\r\n\t\t\toutput.color = this.color.getHex();\r\n\t\t\toutput.ambient = this.ambient.getHex();\r\n\t\t\toutput.emissive = this.emissive.getHex();\r\n\t\t\toutput.specular = this.specular.getHex();\r\n\t\t\toutput.shininess = this.shininess;\r\n\t\t\tif ( this.vertexColors !== THREE.NoColors ) output.vertexColors = this.vertexColors;\r\n\t\t\tif ( this.blending !== THREE.NormalBlending ) output.blending = this.blending;\r\n\t\t\tif ( this.side !== THREE.FrontSide ) output.side = this.side;\r\n\r\n\t\t} else if ( this instanceof THREE.MeshNormalMaterial ) {\r\n\r\n\t\t\tif ( this.shading !== THREE.FlatShading ) output.shading = this.shading;\r\n\t\t\tif ( this.blending !== THREE.NormalBlending ) output.blending = this.blending;\r\n\t\t\tif ( this.side !== THREE.FrontSide ) output.side = this.side;\r\n\r\n\t\t} else if ( this instanceof THREE.MeshDepthMaterial ) {\r\n\r\n\t\t\tif ( this.blending !== THREE.NormalBlending ) output.blending = this.blending;\r\n\t\t\tif ( this.side !== THREE.FrontSide ) output.side = this.side;\r\n\r\n\t\t} else if ( this instanceof THREE.ShaderMaterial ) {\r\n\r\n\t\t\toutput.uniforms = this.uniforms;\r\n\t\t\toutput.vertexShader = this.vertexShader;\r\n\t\t\toutput.fragmentShader = this.fragmentShader;\r\n\r\n\t\t} else if ( this instanceof THREE.SpriteMaterial ) {\r\n\r\n\t\t\toutput.color = this.color.getHex();\r\n\r\n\t\t}\r\n\r\n\t\tif ( this.opacity < 1 ) output.opacity = this.opacity;\r\n\t\tif ( this.transparent !== false ) output.transparent = this.transparent;\r\n\t\tif ( this.wireframe !== false ) output.wireframe = this.wireframe;\r\n\r\n\t\treturn output;\r\n\r\n\t},\r\n\r\n\tclone: function ( material ) {\r\n\r\n\t\tif ( material === undefined ) material = new THREE.Material();\r\n\r\n\t\tmaterial.name = this.name;\r\n\r\n\t\tmaterial.side = this.side;\r\n\r\n\t\tmaterial.opacity = this.opacity;\r\n\t\tmaterial.transparent = this.transparent;\r\n\r\n\t\tmaterial.blending = this.blending;\r\n\r\n\t\tmaterial.blendSrc = this.blendSrc;\r\n\t\tmaterial.blendDst = this.blendDst;\r\n\t\tmaterial.blendEquation = this.blendEquation;\r\n\r\n\t\tmaterial.depthTest = this.depthTest;\r\n\t\tmaterial.depthWrite = this.depthWrite;\r\n\r\n\t\tmaterial.polygonOffset = this.polygonOffset;\r\n\t\tmaterial.polygonOffsetFactor = this.polygonOffsetFactor;\r\n\t\tmaterial.polygonOffsetUnits = this.polygonOffsetUnits;\r\n\r\n\t\tmaterial.alphaTest = this.alphaTest;\r\n\r\n\t\tmaterial.overdraw = this.overdraw;\r\n\r\n\t\tmaterial.visible = this.visible;\r\n\r\n\t\treturn material;\r\n\r\n\t},\r\n\r\n\tdispose: function () {\r\n\r\n\t\tthis.dispatchEvent( { type: 'dispose' } );\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.EventDispatcher.prototype.apply( THREE.Material.prototype );\r\n\r\nTHREE.MaterialIdCount = 0;\r\n\r\n// File:src/materials/LineBasicMaterial.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author alteredq / http://alteredqualia.com/\r\n *\r\n * parameters = {\r\n * color: ,\r\n * opacity: ,\r\n *\r\n * blending: THREE.NormalBlending,\r\n * depthTest: ,\r\n * depthWrite: ,\r\n *\r\n * linewidth: ,\r\n * linecap: \"round\",\r\n * linejoin: \"round\",\r\n *\r\n * vertexColors: \r\n *\r\n * fog: \r\n * }\r\n */\r\n\r\nTHREE.LineBasicMaterial = function ( parameters ) {\r\n\r\n\tTHREE.Material.call( this );\r\n\r\n\tthis.type = 'LineBasicMaterial';\r\n\r\n\tthis.color = new THREE.Color( 0xffffff );\r\n\r\n\tthis.linewidth = 1;\r\n\tthis.linecap = 'round';\r\n\tthis.linejoin = 'round';\r\n\r\n\tthis.vertexColors = THREE.NoColors;\r\n\r\n\tthis.fog = true;\r\n\r\n\tthis.setValues( parameters );\r\n\r\n};\r\n\r\nTHREE.LineBasicMaterial.prototype = Object.create( THREE.Material.prototype );\r\n\r\nTHREE.LineBasicMaterial.prototype.clone = function () {\r\n\r\n\tvar material = new THREE.LineBasicMaterial();\r\n\r\n\tTHREE.Material.prototype.clone.call( this, material );\r\n\r\n\tmaterial.color.copy( this.color );\r\n\r\n\tmaterial.linewidth = this.linewidth;\r\n\tmaterial.linecap = this.linecap;\r\n\tmaterial.linejoin = this.linejoin;\r\n\r\n\tmaterial.vertexColors = this.vertexColors;\r\n\r\n\tmaterial.fog = this.fog;\r\n\r\n\treturn material;\r\n\r\n};\r\n\r\n// File:src/materials/LineDashedMaterial.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n *\r\n * parameters = {\r\n * color: ,\r\n * opacity: ,\r\n *\r\n * blending: THREE.NormalBlending,\r\n * depthTest: ,\r\n * depthWrite: ,\r\n *\r\n * linewidth: ,\r\n *\r\n * scale: ,\r\n * dashSize: ,\r\n * gapSize: ,\r\n *\r\n * vertexColors: \r\n *\r\n * fog: \r\n * }\r\n */\r\n\r\nTHREE.LineDashedMaterial = function ( parameters ) {\r\n\r\n\tTHREE.Material.call( this );\r\n\r\n\tthis.type = 'LineDashedMaterial';\r\n\r\n\tthis.color = new THREE.Color( 0xffffff );\r\n\r\n\tthis.linewidth = 1;\r\n\r\n\tthis.scale = 1;\r\n\tthis.dashSize = 3;\r\n\tthis.gapSize = 1;\r\n\r\n\tthis.vertexColors = false;\r\n\r\n\tthis.fog = true;\r\n\r\n\tthis.setValues( parameters );\r\n\r\n};\r\n\r\nTHREE.LineDashedMaterial.prototype = Object.create( THREE.Material.prototype );\r\n\r\nTHREE.LineDashedMaterial.prototype.clone = function () {\r\n\r\n\tvar material = new THREE.LineDashedMaterial();\r\n\r\n\tTHREE.Material.prototype.clone.call( this, material );\r\n\r\n\tmaterial.color.copy( this.color );\r\n\r\n\tmaterial.linewidth = this.linewidth;\r\n\r\n\tmaterial.scale = this.scale;\r\n\tmaterial.dashSize = this.dashSize;\r\n\tmaterial.gapSize = this.gapSize;\r\n\r\n\tmaterial.vertexColors = this.vertexColors;\r\n\r\n\tmaterial.fog = this.fog;\r\n\r\n\treturn material;\r\n\r\n};\r\n\r\n// File:src/materials/MeshBasicMaterial.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author alteredq / http://alteredqualia.com/\r\n *\r\n * parameters = {\r\n * color: ,\r\n * opacity: ,\r\n * map: new THREE.Texture( ),\r\n *\r\n * lightMap: new THREE.Texture( ),\r\n *\r\n * specularMap: new THREE.Texture( ),\r\n *\r\n * alphaMap: new THREE.Texture( ),\r\n *\r\n * envMap: new THREE.TextureCube( [posx, negx, posy, negy, posz, negz] ),\r\n * combine: THREE.Multiply,\r\n * reflectivity: ,\r\n * refractionRatio: ,\r\n *\r\n * shading: THREE.SmoothShading,\r\n * blending: THREE.NormalBlending,\r\n * depthTest: ,\r\n * depthWrite: ,\r\n *\r\n * wireframe: ,\r\n * wireframeLinewidth: ,\r\n *\r\n * vertexColors: THREE.NoColors / THREE.VertexColors / THREE.FaceColors,\r\n *\r\n * skinning: ,\r\n * morphTargets: ,\r\n *\r\n * fog: \r\n * }\r\n */\r\n\r\nTHREE.MeshBasicMaterial = function ( parameters ) {\r\n\r\n\tTHREE.Material.call( this );\r\n\r\n\tthis.type = 'MeshBasicMaterial';\r\n\r\n\tthis.color = new THREE.Color( 0xffffff ); // emissive\r\n\r\n\tthis.map = null;\r\n\r\n\tthis.lightMap = null;\r\n\r\n\tthis.specularMap = null;\r\n\r\n\tthis.alphaMap = null;\r\n\r\n\tthis.envMap = null;\r\n\tthis.combine = THREE.MultiplyOperation;\r\n\tthis.reflectivity = 1;\r\n\tthis.refractionRatio = 0.98;\r\n\r\n\tthis.fog = true;\r\n\r\n\tthis.shading = THREE.SmoothShading;\r\n\r\n\tthis.wireframe = false;\r\n\tthis.wireframeLinewidth = 1;\r\n\tthis.wireframeLinecap = 'round';\r\n\tthis.wireframeLinejoin = 'round';\r\n\r\n\tthis.vertexColors = THREE.NoColors;\r\n\r\n\tthis.skinning = false;\r\n\tthis.morphTargets = false;\r\n\r\n\tthis.setValues( parameters );\r\n\r\n};\r\n\r\nTHREE.MeshBasicMaterial.prototype = Object.create( THREE.Material.prototype );\r\n\r\nTHREE.MeshBasicMaterial.prototype.clone = function () {\r\n\r\n\tvar material = new THREE.MeshBasicMaterial();\r\n\r\n\tTHREE.Material.prototype.clone.call( this, material );\r\n\r\n\tmaterial.color.copy( this.color );\r\n\r\n\tmaterial.map = this.map;\r\n\r\n\tmaterial.lightMap = this.lightMap;\r\n\r\n\tmaterial.specularMap = this.specularMap;\r\n\r\n\tmaterial.alphaMap = this.alphaMap;\r\n\r\n\tmaterial.envMap = this.envMap;\r\n\tmaterial.combine = this.combine;\r\n\tmaterial.reflectivity = this.reflectivity;\r\n\tmaterial.refractionRatio = this.refractionRatio;\r\n\r\n\tmaterial.fog = this.fog;\r\n\r\n\tmaterial.shading = this.shading;\r\n\r\n\tmaterial.wireframe = this.wireframe;\r\n\tmaterial.wireframeLinewidth = this.wireframeLinewidth;\r\n\tmaterial.wireframeLinecap = this.wireframeLinecap;\r\n\tmaterial.wireframeLinejoin = this.wireframeLinejoin;\r\n\r\n\tmaterial.vertexColors = this.vertexColors;\r\n\r\n\tmaterial.skinning = this.skinning;\r\n\tmaterial.morphTargets = this.morphTargets;\r\n\r\n\treturn material;\r\n\r\n};\r\n\r\n// File:src/materials/MeshLambertMaterial.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author alteredq / http://alteredqualia.com/\r\n *\r\n * parameters = {\r\n * color: ,\r\n * ambient: ,\r\n * emissive: ,\r\n * opacity: ,\r\n *\r\n * map: new THREE.Texture( ),\r\n *\r\n * lightMap: new THREE.Texture( ),\r\n *\r\n * specularMap: new THREE.Texture( ),\r\n *\r\n * alphaMap: new THREE.Texture( ),\r\n *\r\n * envMap: new THREE.TextureCube( [posx, negx, posy, negy, posz, negz] ),\r\n * combine: THREE.Multiply,\r\n * reflectivity: ,\r\n * refractionRatio: ,\r\n *\r\n * shading: THREE.SmoothShading,\r\n * blending: THREE.NormalBlending,\r\n * depthTest: ,\r\n * depthWrite: ,\r\n *\r\n * wireframe: ,\r\n * wireframeLinewidth: ,\r\n *\r\n * vertexColors: THREE.NoColors / THREE.VertexColors / THREE.FaceColors,\r\n *\r\n * skinning: ,\r\n * morphTargets: ,\r\n * morphNormals: ,\r\n *\r\n *\tfog: \r\n * }\r\n */\r\n\r\nTHREE.MeshLambertMaterial = function ( parameters ) {\r\n\r\n\tTHREE.Material.call( this );\r\n\r\n\tthis.type = 'MeshLambertMaterial';\r\n\r\n\tthis.color = new THREE.Color( 0xffffff ); // diffuse\r\n\tthis.ambient = new THREE.Color( 0xffffff );\r\n\tthis.emissive = new THREE.Color( 0x000000 );\r\n\r\n\tthis.wrapAround = false;\r\n\tthis.wrapRGB = new THREE.Vector3( 1, 1, 1 );\r\n\r\n\tthis.map = null;\r\n\r\n\tthis.lightMap = null;\r\n\r\n\tthis.specularMap = null;\r\n\r\n\tthis.alphaMap = null;\r\n\r\n\tthis.envMap = null;\r\n\tthis.combine = THREE.MultiplyOperation;\r\n\tthis.reflectivity = 1;\r\n\tthis.refractionRatio = 0.98;\r\n\r\n\tthis.fog = true;\r\n\r\n\tthis.shading = THREE.SmoothShading;\r\n\r\n\tthis.wireframe = false;\r\n\tthis.wireframeLinewidth = 1;\r\n\tthis.wireframeLinecap = 'round';\r\n\tthis.wireframeLinejoin = 'round';\r\n\r\n\tthis.vertexColors = THREE.NoColors;\r\n\r\n\tthis.skinning = false;\r\n\tthis.morphTargets = false;\r\n\tthis.morphNormals = false;\r\n\r\n\tthis.setValues( parameters );\r\n\r\n};\r\n\r\nTHREE.MeshLambertMaterial.prototype = Object.create( THREE.Material.prototype );\r\n\r\nTHREE.MeshLambertMaterial.prototype.clone = function () {\r\n\r\n\tvar material = new THREE.MeshLambertMaterial();\r\n\r\n\tTHREE.Material.prototype.clone.call( this, material );\r\n\r\n\tmaterial.color.copy( this.color );\r\n\tmaterial.ambient.copy( this.ambient );\r\n\tmaterial.emissive.copy( this.emissive );\r\n\r\n\tmaterial.wrapAround = this.wrapAround;\r\n\tmaterial.wrapRGB.copy( this.wrapRGB );\r\n\r\n\tmaterial.map = this.map;\r\n\r\n\tmaterial.lightMap = this.lightMap;\r\n\r\n\tmaterial.specularMap = this.specularMap;\r\n\r\n\tmaterial.alphaMap = this.alphaMap;\r\n\r\n\tmaterial.envMap = this.envMap;\r\n\tmaterial.combine = this.combine;\r\n\tmaterial.reflectivity = this.reflectivity;\r\n\tmaterial.refractionRatio = this.refractionRatio;\r\n\r\n\tmaterial.fog = this.fog;\r\n\r\n\tmaterial.shading = this.shading;\r\n\r\n\tmaterial.wireframe = this.wireframe;\r\n\tmaterial.wireframeLinewidth = this.wireframeLinewidth;\r\n\tmaterial.wireframeLinecap = this.wireframeLinecap;\r\n\tmaterial.wireframeLinejoin = this.wireframeLinejoin;\r\n\r\n\tmaterial.vertexColors = this.vertexColors;\r\n\r\n\tmaterial.skinning = this.skinning;\r\n\tmaterial.morphTargets = this.morphTargets;\r\n\tmaterial.morphNormals = this.morphNormals;\r\n\r\n\treturn material;\r\n\r\n};\r\n\r\n// File:src/materials/MeshPhongMaterial.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author alteredq / http://alteredqualia.com/\r\n *\r\n * parameters = {\r\n * color: ,\r\n * ambient: ,\r\n * emissive: ,\r\n * specular: ,\r\n * shininess: ,\r\n * opacity: ,\r\n *\r\n * map: new THREE.Texture( ),\r\n *\r\n * lightMap: new THREE.Texture( ),\r\n *\r\n * bumpMap: new THREE.Texture( ),\r\n * bumpScale: ,\r\n *\r\n * normalMap: new THREE.Texture( ),\r\n * normalScale: ,\r\n *\r\n * specularMap: new THREE.Texture( ),\r\n *\r\n * alphaMap: new THREE.Texture( ),\r\n *\r\n * envMap: new THREE.TextureCube( [posx, negx, posy, negy, posz, negz] ),\r\n * combine: THREE.Multiply,\r\n * reflectivity: ,\r\n * refractionRatio: ,\r\n *\r\n * shading: THREE.SmoothShading,\r\n * blending: THREE.NormalBlending,\r\n * depthTest: ,\r\n * depthWrite: ,\r\n *\r\n * wireframe: ,\r\n * wireframeLinewidth: ,\r\n *\r\n * vertexColors: THREE.NoColors / THREE.VertexColors / THREE.FaceColors,\r\n *\r\n * skinning: ,\r\n * morphTargets: ,\r\n * morphNormals: ,\r\n *\r\n *\tfog: \r\n * }\r\n */\r\n\r\nTHREE.MeshPhongMaterial = function ( parameters ) {\r\n\r\n\tTHREE.Material.call( this );\r\n\r\n\tthis.type = 'MeshPhongMaterial';\r\n\r\n\tthis.color = new THREE.Color( 0xffffff ); // diffuse\r\n\tthis.ambient = new THREE.Color( 0xffffff );\r\n\tthis.emissive = new THREE.Color( 0x000000 );\r\n\tthis.specular = new THREE.Color( 0x111111 );\r\n\tthis.shininess = 30;\r\n\r\n\tthis.metal = false;\r\n\r\n\tthis.wrapAround = false;\r\n\tthis.wrapRGB = new THREE.Vector3( 1, 1, 1 );\r\n\r\n\tthis.map = null;\r\n\r\n\tthis.lightMap = null;\r\n\r\n\tthis.bumpMap = null;\r\n\tthis.bumpScale = 1;\r\n\r\n\tthis.normalMap = null;\r\n\tthis.normalScale = new THREE.Vector2( 1, 1 );\r\n\r\n\tthis.specularMap = null;\r\n\r\n\tthis.alphaMap = null;\r\n\r\n\tthis.envMap = null;\r\n\tthis.combine = THREE.MultiplyOperation;\r\n\tthis.reflectivity = 1;\r\n\tthis.refractionRatio = 0.98;\r\n\r\n\tthis.fog = true;\r\n\r\n\tthis.shading = THREE.SmoothShading;\r\n\r\n\tthis.wireframe = false;\r\n\tthis.wireframeLinewidth = 1;\r\n\tthis.wireframeLinecap = 'round';\r\n\tthis.wireframeLinejoin = 'round';\r\n\r\n\tthis.vertexColors = THREE.NoColors;\r\n\r\n\tthis.skinning = false;\r\n\tthis.morphTargets = false;\r\n\tthis.morphNormals = false;\r\n\r\n\tthis.setValues( parameters );\r\n\r\n};\r\n\r\nTHREE.MeshPhongMaterial.prototype = Object.create( THREE.Material.prototype );\r\n\r\nTHREE.MeshPhongMaterial.prototype.clone = function () {\r\n\r\n\tvar material = new THREE.MeshPhongMaterial();\r\n\r\n\tTHREE.Material.prototype.clone.call( this, material );\r\n\r\n\tmaterial.color.copy( this.color );\r\n\tmaterial.ambient.copy( this.ambient );\r\n\tmaterial.emissive.copy( this.emissive );\r\n\tmaterial.specular.copy( this.specular );\r\n\tmaterial.shininess = this.shininess;\r\n\r\n\tmaterial.metal = this.metal;\r\n\r\n\tmaterial.wrapAround = this.wrapAround;\r\n\tmaterial.wrapRGB.copy( this.wrapRGB );\r\n\r\n\tmaterial.map = this.map;\r\n\r\n\tmaterial.lightMap = this.lightMap;\r\n\r\n\tmaterial.bumpMap = this.bumpMap;\r\n\tmaterial.bumpScale = this.bumpScale;\r\n\r\n\tmaterial.normalMap = this.normalMap;\r\n\tmaterial.normalScale.copy( this.normalScale );\r\n\r\n\tmaterial.specularMap = this.specularMap;\r\n\r\n\tmaterial.alphaMap = this.alphaMap;\r\n\r\n\tmaterial.envMap = this.envMap;\r\n\tmaterial.combine = this.combine;\r\n\tmaterial.reflectivity = this.reflectivity;\r\n\tmaterial.refractionRatio = this.refractionRatio;\r\n\r\n\tmaterial.fog = this.fog;\r\n\r\n\tmaterial.shading = this.shading;\r\n\r\n\tmaterial.wireframe = this.wireframe;\r\n\tmaterial.wireframeLinewidth = this.wireframeLinewidth;\r\n\tmaterial.wireframeLinecap = this.wireframeLinecap;\r\n\tmaterial.wireframeLinejoin = this.wireframeLinejoin;\r\n\r\n\tmaterial.vertexColors = this.vertexColors;\r\n\r\n\tmaterial.skinning = this.skinning;\r\n\tmaterial.morphTargets = this.morphTargets;\r\n\tmaterial.morphNormals = this.morphNormals;\r\n\r\n\treturn material;\r\n\r\n};\r\n\r\n// File:src/materials/MeshDepthMaterial.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author alteredq / http://alteredqualia.com/\r\n *\r\n * parameters = {\r\n * opacity: ,\r\n *\r\n * blending: THREE.NormalBlending,\r\n * depthTest: ,\r\n * depthWrite: ,\r\n *\r\n * wireframe: ,\r\n * wireframeLinewidth: \r\n * }\r\n */\r\n\r\nTHREE.MeshDepthMaterial = function ( parameters ) {\r\n\r\n\tTHREE.Material.call( this );\r\n\r\n\tthis.type = 'MeshDepthMaterial';\r\n\r\n\tthis.morphTargets = false;\r\n\tthis.wireframe = false;\r\n\tthis.wireframeLinewidth = 1;\r\n\r\n\tthis.setValues( parameters );\r\n\r\n};\r\n\r\nTHREE.MeshDepthMaterial.prototype = Object.create( THREE.Material.prototype );\r\n\r\nTHREE.MeshDepthMaterial.prototype.clone = function () {\r\n\r\n\tvar material = new THREE.MeshDepthMaterial();\r\n\r\n\tTHREE.Material.prototype.clone.call( this, material );\r\n\r\n\tmaterial.wireframe = this.wireframe;\r\n\tmaterial.wireframeLinewidth = this.wireframeLinewidth;\r\n\r\n\treturn material;\r\n\r\n};\r\n\r\n// File:src/materials/MeshNormalMaterial.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n *\r\n * parameters = {\r\n * opacity: ,\r\n *\r\n * shading: THREE.FlatShading,\r\n * blending: THREE.NormalBlending,\r\n * depthTest: ,\r\n * depthWrite: ,\r\n *\r\n * wireframe: ,\r\n * wireframeLinewidth: \r\n * }\r\n */\r\n\r\nTHREE.MeshNormalMaterial = function ( parameters ) {\r\n\r\n\tTHREE.Material.call( this, parameters );\r\n\r\n\tthis.type = 'MeshNormalMaterial';\r\n\r\n\tthis.shading = THREE.FlatShading;\r\n\r\n\tthis.wireframe = false;\r\n\tthis.wireframeLinewidth = 1;\r\n\r\n\tthis.morphTargets = false;\r\n\r\n\tthis.setValues( parameters );\r\n\r\n};\r\n\r\nTHREE.MeshNormalMaterial.prototype = Object.create( THREE.Material.prototype );\r\n\r\nTHREE.MeshNormalMaterial.prototype.clone = function () {\r\n\r\n\tvar material = new THREE.MeshNormalMaterial();\r\n\r\n\tTHREE.Material.prototype.clone.call( this, material );\r\n\r\n\tmaterial.shading = this.shading;\r\n\r\n\tmaterial.wireframe = this.wireframe;\r\n\tmaterial.wireframeLinewidth = this.wireframeLinewidth;\r\n\r\n\treturn material;\r\n\r\n};\r\n\r\n// File:src/materials/MeshFaceMaterial.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.MeshFaceMaterial = function ( materials ) {\r\n\r\n\tthis.uuid = THREE.Math.generateUUID();\r\n\r\n\tthis.type = 'MeshFaceMaterial';\r\n\t\r\n\tthis.materials = materials instanceof Array ? materials : [];\r\n\r\n};\r\n\r\nTHREE.MeshFaceMaterial.prototype = {\r\n\r\n\tconstructor: THREE.MeshFaceMaterial,\r\n\r\n\ttoJSON: function () {\r\n\r\n\t\tvar output = {\r\n\t\t\tmetadata: {\r\n\t\t\t\tversion: 4.2,\r\n\t\t\t\ttype: 'material',\r\n\t\t\t\tgenerator: 'MaterialExporter'\r\n\t\t\t},\r\n\t\t\tuuid: this.uuid,\r\n\t\t\ttype: this.type,\r\n\t\t\tmaterials: []\r\n\t\t};\r\n\r\n\t\tfor ( var i = 0, l = this.materials.length; i < l; i ++ ) {\r\n\r\n\t\t\toutput.materials.push( this.materials[ i ].toJSON() );\r\n\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\tvar material = new THREE.MeshFaceMaterial();\r\n\r\n\t\tfor ( var i = 0; i < this.materials.length; i ++ ) {\r\n\r\n\t\t\tmaterial.materials.push( this.materials[ i ].clone() );\r\n\r\n\t\t}\r\n\r\n\t\treturn material;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/materials/PointCloudMaterial.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author alteredq / http://alteredqualia.com/\r\n *\r\n * parameters = {\r\n * color: ,\r\n * opacity: ,\r\n * map: new THREE.Texture( ),\r\n *\r\n * size: ,\r\n *\r\n * blending: THREE.NormalBlending,\r\n * depthTest: ,\r\n * depthWrite: ,\r\n *\r\n * vertexColors: ,\r\n *\r\n * fog: \r\n * }\r\n */\r\n\r\nTHREE.PointCloudMaterial = function ( parameters ) {\r\n\r\n\tTHREE.Material.call( this );\r\n\r\n\tthis.type = 'PointCloudMaterial';\r\n\r\n\tthis.color = new THREE.Color( 0xffffff );\r\n\r\n\tthis.map = null;\r\n\r\n\tthis.size = 1;\r\n\tthis.sizeAttenuation = true;\r\n\r\n\tthis.vertexColors = THREE.NoColors;\r\n\r\n\tthis.fog = true;\r\n\r\n\tthis.setValues( parameters );\r\n\r\n};\r\n\r\nTHREE.PointCloudMaterial.prototype = Object.create( THREE.Material.prototype );\r\n\r\nTHREE.PointCloudMaterial.prototype.clone = function () {\r\n\r\n\tvar material = new THREE.PointCloudMaterial();\r\n\r\n\tTHREE.Material.prototype.clone.call( this, material );\r\n\r\n\tmaterial.color.copy( this.color );\r\n\r\n\tmaterial.map = this.map;\r\n\r\n\tmaterial.size = this.size;\r\n\tmaterial.sizeAttenuation = this.sizeAttenuation;\r\n\r\n\tmaterial.vertexColors = this.vertexColors;\r\n\r\n\tmaterial.fog = this.fog;\r\n\r\n\treturn material;\r\n\r\n};\r\n\r\n// backwards compatibility\r\n\r\nTHREE.ParticleBasicMaterial = function ( parameters ) {\r\n\r\n\tconsole.warn( 'THREE.ParticleBasicMaterial has been renamed to THREE.PointCloudMaterial.' );\r\n\treturn new THREE.PointCloudMaterial( parameters );\r\n\r\n};\r\n\r\nTHREE.ParticleSystemMaterial = function ( parameters ) {\r\n\r\n\tconsole.warn( 'THREE.ParticleSystemMaterial has been renamed to THREE.PointCloudMaterial.' );\r\n\treturn new THREE.PointCloudMaterial( parameters );\r\n\r\n};\r\n\r\n// File:src/materials/ShaderMaterial.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n *\r\n * parameters = {\r\n * defines: { \"label\" : \"value\" },\r\n * uniforms: { \"parameter1\": { type: \"f\", value: 1.0 }, \"parameter2\": { type: \"i\" value2: 2 } },\r\n *\r\n * fragmentShader: ,\r\n * vertexShader: ,\r\n *\r\n * shading: THREE.SmoothShading,\r\n * blending: THREE.NormalBlending,\r\n * depthTest: ,\r\n * depthWrite: ,\r\n *\r\n * wireframe: ,\r\n * wireframeLinewidth: ,\r\n *\r\n * lights: ,\r\n *\r\n * vertexColors: THREE.NoColors / THREE.VertexColors / THREE.FaceColors,\r\n *\r\n * skinning: ,\r\n * morphTargets: ,\r\n * morphNormals: ,\r\n *\r\n *\tfog: \r\n * }\r\n */\r\n\r\nTHREE.ShaderMaterial = function ( parameters ) {\r\n\r\n\tTHREE.Material.call( this );\r\n\r\n\tthis.type = 'ShaderMaterial';\r\n\r\n\tthis.defines = {};\r\n\tthis.uniforms = {};\r\n\tthis.attributes = null;\r\n\r\n\tthis.vertexShader = 'void main() {\\n\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\n}';\r\n\tthis.fragmentShader = 'void main() {\\n\\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\\n}';\r\n\r\n\tthis.shading = THREE.SmoothShading;\r\n\r\n\tthis.linewidth = 1;\r\n\r\n\tthis.wireframe = false;\r\n\tthis.wireframeLinewidth = 1;\r\n\r\n\tthis.fog = false; // set to use scene fog\r\n\r\n\tthis.lights = false; // set to use scene lights\r\n\r\n\tthis.vertexColors = THREE.NoColors; // set to use \"color\" attribute stream\r\n\r\n\tthis.skinning = false; // set to use skinning attribute streams\r\n\r\n\tthis.morphTargets = false; // set to use morph targets\r\n\tthis.morphNormals = false; // set to use morph normals\r\n\r\n\t// When rendered geometry doesn't include these attributes but the material does,\r\n\t// use these default values in WebGL. This avoids errors when buffer data is missing.\r\n\tthis.defaultAttributeValues = {\r\n\t\t'color': [ 1, 1, 1 ],\r\n\t\t'uv': [ 0, 0 ],\r\n\t\t'uv2': [ 0, 0 ]\r\n\t};\r\n\r\n\tthis.index0AttributeName = undefined;\r\n\r\n\tthis.setValues( parameters );\r\n\r\n};\r\n\r\nTHREE.ShaderMaterial.prototype = Object.create( THREE.Material.prototype );\r\n\r\nTHREE.ShaderMaterial.prototype.clone = function () {\r\n\r\n\tvar material = new THREE.ShaderMaterial();\r\n\r\n\tTHREE.Material.prototype.clone.call( this, material );\r\n\r\n\tmaterial.fragmentShader = this.fragmentShader;\r\n\tmaterial.vertexShader = this.vertexShader;\r\n\r\n\tmaterial.uniforms = THREE.UniformsUtils.clone( this.uniforms );\r\n\r\n\tmaterial.attributes = this.attributes;\r\n\tmaterial.defines = this.defines;\r\n\r\n\tmaterial.shading = this.shading;\r\n\r\n\tmaterial.wireframe = this.wireframe;\r\n\tmaterial.wireframeLinewidth = this.wireframeLinewidth;\r\n\r\n\tmaterial.fog = this.fog;\r\n\r\n\tmaterial.lights = this.lights;\r\n\r\n\tmaterial.vertexColors = this.vertexColors;\r\n\r\n\tmaterial.skinning = this.skinning;\r\n\r\n\tmaterial.morphTargets = this.morphTargets;\r\n\tmaterial.morphNormals = this.morphNormals;\r\n\r\n\treturn material;\r\n\r\n};\r\n\r\n// File:src/materials/RawShaderMaterial.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.RawShaderMaterial = function ( parameters ) {\r\n\r\n\tTHREE.ShaderMaterial.call( this, parameters );\r\n\r\n\tthis.type = 'RawShaderMaterial';\r\n\r\n};\r\n\r\nTHREE.RawShaderMaterial.prototype = Object.create( THREE.ShaderMaterial.prototype );\r\n\r\nTHREE.RawShaderMaterial.prototype.clone = function () {\r\n\r\n\tvar material = new THREE.RawShaderMaterial();\r\n\r\n\tTHREE.ShaderMaterial.prototype.clone.call( this, material );\r\n\r\n\treturn material;\r\n\r\n};\r\n\r\n// File:src/materials/SpriteMaterial.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n *\r\n * parameters = {\r\n * color: ,\r\n * opacity: ,\r\n * map: new THREE.Texture( ),\r\n *\r\n * blending: THREE.NormalBlending,\r\n * depthTest: ,\r\n * depthWrite: ,\r\n *\r\n *\tuvOffset: new THREE.Vector2(),\r\n *\tuvScale: new THREE.Vector2(),\r\n *\r\n * fog: \r\n * }\r\n */\r\n\r\nTHREE.SpriteMaterial = function ( parameters ) {\r\n\r\n\tTHREE.Material.call( this );\r\n\r\n\tthis.type = 'SpriteMaterial';\r\n\r\n\tthis.color = new THREE.Color( 0xffffff );\r\n\tthis.map = null;\r\n\r\n\tthis.rotation = 0;\r\n\r\n\tthis.fog = false;\r\n\r\n\t// set parameters\r\n\r\n\tthis.setValues( parameters );\r\n\r\n};\r\n\r\nTHREE.SpriteMaterial.prototype = Object.create( THREE.Material.prototype );\r\n\r\nTHREE.SpriteMaterial.prototype.clone = function () {\r\n\r\n\tvar material = new THREE.SpriteMaterial();\r\n\r\n\tTHREE.Material.prototype.clone.call( this, material );\r\n\r\n\tmaterial.color.copy( this.color );\r\n\tmaterial.map = this.map;\r\n\r\n\tmaterial.rotation = this.rotation;\r\n\r\n\tmaterial.fog = this.fog;\r\n\r\n\treturn material;\r\n\r\n};\r\n\r\n// File:src/textures/Texture.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author szimek / https://github.com/szimek/\r\n */\r\n\r\nTHREE.Texture = function ( image, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\r\n\r\n\tObject.defineProperty( this, 'id', { value: THREE.TextureIdCount ++ } );\r\n\r\n\tthis.uuid = THREE.Math.generateUUID();\r\n\r\n\tthis.name = '';\r\n\r\n\tthis.image = image !== undefined ? image : THREE.Texture.DEFAULT_IMAGE;\r\n\tthis.mipmaps = [];\r\n\r\n\tthis.mapping = mapping !== undefined ? mapping : THREE.Texture.DEFAULT_MAPPING;\r\n\r\n\tthis.wrapS = wrapS !== undefined ? wrapS : THREE.ClampToEdgeWrapping;\r\n\tthis.wrapT = wrapT !== undefined ? wrapT : THREE.ClampToEdgeWrapping;\r\n\r\n\tthis.magFilter = magFilter !== undefined ? magFilter : THREE.LinearFilter;\r\n\tthis.minFilter = minFilter !== undefined ? minFilter : THREE.LinearMipMapLinearFilter;\r\n\r\n\tthis.anisotropy = anisotropy !== undefined ? anisotropy : 1;\r\n\r\n\tthis.format = format !== undefined ? format : THREE.RGBAFormat;\r\n\tthis.type = type !== undefined ? type : THREE.UnsignedByteType;\r\n\r\n\tthis.offset = new THREE.Vector2( 0, 0 );\r\n\tthis.repeat = new THREE.Vector2( 1, 1 );\r\n\r\n\tthis.generateMipmaps = true;\r\n\tthis.premultiplyAlpha = false;\r\n\tthis.flipY = true;\r\n\tthis.unpackAlignment = 4; // valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml)\r\n\r\n\tthis._needsUpdate = false;\r\n\tthis.onUpdate = null;\r\n\r\n};\r\n\r\nTHREE.Texture.DEFAULT_IMAGE = undefined;\r\nTHREE.Texture.DEFAULT_MAPPING = new THREE.UVMapping();\r\n\r\nTHREE.Texture.prototype = {\r\n\r\n\tconstructor: THREE.Texture,\r\n\r\n\tget needsUpdate () {\r\n\r\n\t\treturn this._needsUpdate;\r\n\r\n\t},\r\n\r\n\tset needsUpdate ( value ) {\r\n\r\n\t\tif ( value === true ) this.update();\r\n\r\n\t\tthis._needsUpdate = value;\r\n\r\n\t},\r\n\r\n\tclone: function ( texture ) {\r\n\r\n\t\tif ( texture === undefined ) texture = new THREE.Texture();\r\n\r\n\t\ttexture.image = this.image;\r\n\t\ttexture.mipmaps = this.mipmaps.slice( 0 );\r\n\r\n\t\ttexture.mapping = this.mapping;\r\n\r\n\t\ttexture.wrapS = this.wrapS;\r\n\t\ttexture.wrapT = this.wrapT;\r\n\r\n\t\ttexture.magFilter = this.magFilter;\r\n\t\ttexture.minFilter = this.minFilter;\r\n\r\n\t\ttexture.anisotropy = this.anisotropy;\r\n\r\n\t\ttexture.format = this.format;\r\n\t\ttexture.type = this.type;\r\n\r\n\t\ttexture.offset.copy( this.offset );\r\n\t\ttexture.repeat.copy( this.repeat );\r\n\r\n\t\ttexture.generateMipmaps = this.generateMipmaps;\r\n\t\ttexture.premultiplyAlpha = this.premultiplyAlpha;\r\n\t\ttexture.flipY = this.flipY;\r\n\t\ttexture.unpackAlignment = this.unpackAlignment;\r\n\r\n\t\treturn texture;\r\n\r\n\t},\r\n\r\n\tupdate: function () {\r\n\r\n\t\tthis.dispatchEvent( { type: 'update' } );\r\n\r\n\t},\r\n\r\n\tdispose: function () {\r\n\r\n\t\tthis.dispatchEvent( { type: 'dispose' } );\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.EventDispatcher.prototype.apply( THREE.Texture.prototype );\r\n\r\nTHREE.TextureIdCount = 0;\r\n\r\n// File:src/textures/CubeTexture.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.CubeTexture = function ( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\r\n\r\n\tTHREE.Texture.call( this, images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\r\n\r\n\tthis.images = images;\r\n\r\n};\r\n\r\nTHREE.CubeTexture.prototype = Object.create( THREE.Texture.prototype );\r\n\r\nTHREE.CubeTexture.clone = function ( texture ) {\r\n\r\n\tif ( texture === undefined ) texture = new THREE.CubeTexture();\r\n\r\n\tTHREE.Texture.prototype.clone.call( this, texture );\r\n\r\n\ttexture.images = this.images;\r\n\r\n\treturn texture;\r\n\r\n};\r\n\r\n// File:src/textures/CompressedTexture.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.CompressedTexture = function ( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy ) {\r\n\r\n\tTHREE.Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\r\n\r\n\tthis.image = { width: width, height: height };\r\n\tthis.mipmaps = mipmaps;\r\n\r\n\t// no flipping for cube textures\r\n\t// (also flipping doesn't work for compressed textures )\r\n\r\n\tthis.flipY = false;\r\n\r\n\t// can't generate mipmaps for compressed textures\r\n\t// mips must be embedded in DDS files\r\n\r\n\tthis.generateMipmaps = false;\r\n\r\n};\r\n\r\nTHREE.CompressedTexture.prototype = Object.create( THREE.Texture.prototype );\r\n\r\nTHREE.CompressedTexture.prototype.clone = function () {\r\n\r\n\tvar texture = new THREE.CompressedTexture();\r\n\r\n\tTHREE.Texture.prototype.clone.call( this, texture );\r\n\r\n\treturn texture;\r\n\r\n};\r\n\r\n// File:src/textures/DataTexture.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.DataTexture = function ( data, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy ) {\r\n\r\n\tTHREE.Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\r\n\r\n\tthis.image = { data: data, width: width, height: height };\r\n\r\n};\r\n\r\nTHREE.DataTexture.prototype = Object.create( THREE.Texture.prototype );\r\n\r\nTHREE.DataTexture.prototype.clone = function () {\r\n\r\n\tvar texture = new THREE.DataTexture();\r\n\r\n\tTHREE.Texture.prototype.clone.call( this, texture );\r\n\r\n\treturn texture;\r\n\r\n};\r\n\r\n// File:src/textures/VideoTexture.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.VideoTexture = function ( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\r\n\r\n\tTHREE.Texture.call( this, video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\r\n\r\n\tthis.generateMipmaps = false;\r\n\r\n\tvar scope = this;\r\n\r\n\tvar update = function () {\r\n\r\n\t\trequestAnimationFrame( update );\r\n\r\n\t\tif ( video.readyState === video.HAVE_ENOUGH_DATA ) {\r\n\r\n\t\t\tscope.needsUpdate = true;\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tupdate();\r\n\r\n};\r\n\r\nTHREE.VideoTexture.prototype = Object.create( THREE.Texture.prototype );\r\n\r\n// File:src/objects/Group.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.Group = function () {\r\n\r\n\tTHREE.Object3D.call( this );\r\n\r\n\tthis.type = 'Group';\r\n\r\n};\r\n\r\nTHREE.Group.prototype = Object.create( THREE.Object3D.prototype );\r\n\r\n// File:src/objects/PointCloud.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.PointCloud = function ( geometry, material ) {\r\n\r\n\tTHREE.Object3D.call( this );\r\n\r\n\tthis.type = 'PointCloud';\r\n\r\n\tthis.geometry = geometry !== undefined ? geometry : new THREE.Geometry();\r\n\tthis.material = material !== undefined ? material : new THREE.PointCloudMaterial( { color: Math.random() * 0xffffff } );\r\n\r\n\tthis.sortParticles = false;\r\n\r\n};\r\n\r\nTHREE.PointCloud.prototype = Object.create( THREE.Object3D.prototype );\r\n\r\nTHREE.PointCloud.prototype.raycast = ( function () {\r\n\r\n\tvar inverseMatrix = new THREE.Matrix4();\r\n\tvar ray = new THREE.Ray();\r\n\r\n\treturn function ( raycaster, intersects ) {\r\n\r\n\t\tvar object = this;\r\n\t\tvar geometry = object.geometry;\r\n\t\tvar threshold = raycaster.params.PointCloud.threshold;\r\n\r\n\t\tinverseMatrix.getInverse( this.matrixWorld );\r\n\t\tray.copy( raycaster.ray ).applyMatrix4( inverseMatrix );\r\n\r\n\t\tif ( geometry.boundingBox !== null ) {\r\n\r\n\t\t\tif ( ray.isIntersectionBox( geometry.boundingBox ) === false ) {\r\n\r\n\t\t\t\treturn;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tvar localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\r\n\t\tvar position = new THREE.Vector3();\r\n\r\n\t\tvar testPoint = function ( point, index ) {\r\n\r\n\t\t\tvar rayPointDistance = ray.distanceToPoint( point );\r\n\r\n\t\t\tif ( rayPointDistance < localThreshold ) {\r\n\r\n\t\t\t\tvar intersectPoint = ray.closestPointToPoint( point );\r\n\t\t\t\tintersectPoint.applyMatrix4( object.matrixWorld );\r\n\r\n\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( intersectPoint );\r\n\r\n\t\t\t\tintersects.push( {\r\n\r\n\t\t\t\t\tdistance: distance,\r\n\t\t\t\t\tdistanceToRay: rayPointDistance,\r\n\t\t\t\t\tpoint: intersectPoint.clone(),\r\n\t\t\t\t\tindex: index,\r\n\t\t\t\t\tface: null,\r\n\t\t\t\t\tobject: object\r\n\r\n\t\t\t\t} );\r\n\r\n\t\t\t}\r\n\r\n\t\t};\r\n\r\n\t\tif ( geometry instanceof THREE.BufferGeometry ) {\r\n\r\n\t\t\tvar attributes = geometry.attributes;\r\n\t\t\tvar positions = attributes.position.array;\r\n\r\n\t\t\tif ( attributes.index !== undefined ) {\r\n\r\n\t\t\t\tvar indices = attributes.index.array;\r\n\t\t\t\tvar offsets = geometry.offsets;\r\n\r\n\t\t\t\tif ( offsets.length === 0 ) {\r\n\r\n\t\t\t\t\tvar offset = {\r\n\t\t\t\t\t\tstart: 0,\r\n\t\t\t\t\t\tcount: indices.length,\r\n\t\t\t\t\t\tindex: 0\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\toffsets = [ offset ];\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor ( var oi = 0, ol = offsets.length; oi < ol; ++oi ) {\r\n\r\n\t\t\t\t\tvar start = offsets[ oi ].start;\r\n\t\t\t\t\tvar count = offsets[ oi ].count;\r\n\t\t\t\t\tvar index = offsets[ oi ].index;\r\n\r\n\t\t\t\t\tfor ( var i = start, il = start + count; i < il; i ++ ) {\r\n\r\n\t\t\t\t\t\tvar a = index + indices[ i ];\r\n\r\n\t\t\t\t\t\tposition.fromArray( positions, a * 3 );\r\n\r\n\t\t\t\t\t\ttestPoint( position, a );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tvar pointCount = positions.length / 3;\r\n\r\n\t\t\t\tfor ( var i = 0; i < pointCount; i ++ ) {\r\n\r\n\t\t\t\t\tposition.set(\r\n\t\t\t\t\t\tpositions[ 3 * i ],\r\n\t\t\t\t\t\tpositions[ 3 * i + 1 ],\r\n\t\t\t\t\t\tpositions[ 3 * i + 2 ]\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t\ttestPoint( position, i );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\r\n\t\t\tvar vertices = this.geometry.vertices;\r\n\r\n\t\t\tfor ( var i = 0; i < vertices.length; i ++ ) {\r\n\r\n\t\t\t\ttestPoint( vertices[ i ], i );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n}() );\r\n\r\nTHREE.PointCloud.prototype.clone = function ( object ) {\r\n\r\n\tif ( object === undefined ) object = new THREE.PointCloud( this.geometry, this.material );\r\n\r\n\tobject.sortParticles = this.sortParticles;\r\n\r\n\tTHREE.Object3D.prototype.clone.call( this, object );\r\n\r\n\treturn object;\r\n\r\n};\r\n\r\n// Backwards compatibility\r\n\r\nTHREE.ParticleSystem = function ( geometry, material ) {\r\n\r\n\tconsole.warn( 'THREE.ParticleSystem has been renamed to THREE.PointCloud.' );\r\n\treturn new THREE.PointCloud( geometry, material );\r\n\r\n};\r\n\r\n// File:src/objects/Line.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.Line = function ( geometry, material, mode ) {\r\n\r\n\tTHREE.Object3D.call( this );\r\n\r\n\tthis.type = 'Line';\r\n\r\n\tthis.geometry = geometry !== undefined ? geometry : new THREE.Geometry();\r\n\tthis.material = material !== undefined ? material : new THREE.LineBasicMaterial( { color: Math.random() * 0xffffff } );\r\n\r\n\tthis.mode = ( mode !== undefined ) ? mode : THREE.LineStrip;\r\n\r\n};\r\n\r\nTHREE.LineStrip = 0;\r\nTHREE.LinePieces = 1;\r\n\r\nTHREE.Line.prototype = Object.create( THREE.Object3D.prototype );\r\n\r\nTHREE.Line.prototype.raycast = ( function () {\r\n\r\n\tvar inverseMatrix = new THREE.Matrix4();\r\n\tvar ray = new THREE.Ray();\r\n\tvar sphere = new THREE.Sphere();\r\n\r\n\treturn function ( raycaster, intersects ) {\r\n\r\n\t\tvar precision = raycaster.linePrecision;\r\n\t\tvar precisionSq = precision * precision;\r\n\r\n\t\tvar geometry = this.geometry;\r\n\r\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\r\n\r\n\t\t// Checking boundingSphere distance to ray\r\n\r\n\t\tsphere.copy( geometry.boundingSphere );\r\n\t\tsphere.applyMatrix4( this.matrixWorld );\r\n\r\n\t\tif ( raycaster.ray.isIntersectionSphere( sphere ) === false ) {\r\n\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\r\n\t\tinverseMatrix.getInverse( this.matrixWorld );\r\n\t\tray.copy( raycaster.ray ).applyMatrix4( inverseMatrix );\r\n\r\n\t\t/* if ( geometry instanceof THREE.BufferGeometry ) {\r\n\r\n\t\t} else */ if ( geometry instanceof THREE.Geometry ) {\r\n\r\n\t\t\tvar vertices = geometry.vertices;\r\n\t\t\tvar nbVertices = vertices.length;\r\n\t\t\tvar interSegment = new THREE.Vector3();\r\n\t\t\tvar interRay = new THREE.Vector3();\r\n\t\t\tvar step = this.mode === THREE.LineStrip ? 1 : 2;\r\n\r\n\t\t\tfor ( var i = 0; i < nbVertices - 1; i = i + step ) {\r\n\r\n\t\t\t\tvar distSq = ray.distanceSqToSegment( vertices[ i ], vertices[ i + 1 ], interRay, interSegment );\r\n\r\n\t\t\t\tif ( distSq > precisionSq ) continue;\r\n\r\n\t\t\t\tvar distance = ray.origin.distanceTo( interRay );\r\n\r\n\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\r\n\r\n\t\t\t\tintersects.push( {\r\n\r\n\t\t\t\t\tdistance: distance,\r\n\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\r\n\t\t\t\t\t// point: raycaster.ray.at( distance ),\r\n\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\r\n\t\t\t\t\tface: null,\r\n\t\t\t\t\tfaceIndex: null,\r\n\t\t\t\t\tobject: this\r\n\r\n\t\t\t\t} );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n}() );\r\n\r\nTHREE.Line.prototype.clone = function ( object ) {\r\n\r\n\tif ( object === undefined ) object = new THREE.Line( this.geometry, this.material, this.mode );\r\n\r\n\tTHREE.Object3D.prototype.clone.call( this, object );\r\n\r\n\treturn object;\r\n\r\n};\r\n\r\n// File:src/objects/Mesh.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author mikael emtinger / http://gomo.se/\r\n * @author jonobr1 / http://jonobr1.com/\r\n */\r\n\r\nTHREE.Mesh = function ( geometry, material ) {\r\n\r\n\tTHREE.Object3D.call( this );\r\n\r\n\tthis.type = 'Mesh';\r\n\t\r\n\tthis.geometry = geometry !== undefined ? geometry : new THREE.Geometry();\r\n\tthis.material = material !== undefined ? material : new THREE.MeshBasicMaterial( { color: Math.random() * 0xffffff } );\r\n\r\n\tthis.updateMorphTargets();\r\n\r\n};\r\n\r\nTHREE.Mesh.prototype = Object.create( THREE.Object3D.prototype );\r\n\r\nTHREE.Mesh.prototype.updateMorphTargets = function () {\r\n\r\n\tif ( this.geometry.morphTargets !== undefined && this.geometry.morphTargets.length > 0 ) {\r\n\r\n\t\tthis.morphTargetBase = - 1;\r\n\t\tthis.morphTargetForcedOrder = [];\r\n\t\tthis.morphTargetInfluences = [];\r\n\t\tthis.morphTargetDictionary = {};\r\n\r\n\t\tfor ( var m = 0, ml = this.geometry.morphTargets.length; m < ml; m ++ ) {\r\n\r\n\t\t\tthis.morphTargetInfluences.push( 0 );\r\n\t\t\tthis.morphTargetDictionary[ this.geometry.morphTargets[ m ].name ] = m;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.Mesh.prototype.getMorphTargetIndexByName = function ( name ) {\r\n\r\n\tif ( this.morphTargetDictionary[ name ] !== undefined ) {\r\n\r\n\t\treturn this.morphTargetDictionary[ name ];\r\n\r\n\t}\r\n\r\n\tconsole.log( 'THREE.Mesh.getMorphTargetIndexByName: morph target ' + name + ' does not exist. Returning 0.' );\r\n\r\n\treturn 0;\r\n\r\n};\r\n\r\n\r\nTHREE.Mesh.prototype.raycast = ( function () {\r\n\r\n\tvar inverseMatrix = new THREE.Matrix4();\r\n\tvar ray = new THREE.Ray();\r\n\tvar sphere = new THREE.Sphere();\r\n\r\n\tvar vA = new THREE.Vector3();\r\n\tvar vB = new THREE.Vector3();\r\n\tvar vC = new THREE.Vector3();\r\n\r\n\treturn function ( raycaster, intersects ) {\r\n\r\n\t\tvar geometry = this.geometry;\r\n\r\n\t\t// Checking boundingSphere distance to ray\r\n\r\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\r\n\r\n\t\tsphere.copy( geometry.boundingSphere );\r\n\t\tsphere.applyMatrix4( this.matrixWorld );\r\n\r\n\t\tif ( raycaster.ray.isIntersectionSphere( sphere ) === false ) {\r\n\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\r\n\t\t// Check boundingBox before continuing\r\n\r\n\t\tinverseMatrix.getInverse( this.matrixWorld );\r\n\t\tray.copy( raycaster.ray ).applyMatrix4( inverseMatrix );\r\n\r\n\t\tif ( geometry.boundingBox !== null ) {\r\n\r\n\t\t\tif ( ray.isIntersectionBox( geometry.boundingBox ) === false ) {\r\n\r\n\t\t\t\treturn;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( geometry instanceof THREE.BufferGeometry ) {\r\n\r\n\t\t\tvar material = this.material;\r\n\r\n\t\t\tif ( material === undefined ) return;\r\n\r\n\t\t\tvar attributes = geometry.attributes;\r\n\r\n\t\t\tvar a, b, c;\r\n\t\t\tvar precision = raycaster.precision;\r\n\r\n\t\t\tif ( attributes.index !== undefined ) {\r\n\r\n\t\t\t\tvar indices = attributes.index.array;\r\n\t\t\t\tvar positions = attributes.position.array;\r\n\t\t\t\tvar offsets = geometry.offsets;\r\n\r\n\t\t\t\tif ( offsets.length === 0 ) {\r\n\r\n\t\t\t\t\toffsets = [ { start: 0, count: indices.length, index: 0 } ];\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor ( var oi = 0, ol = offsets.length; oi < ol; ++oi ) {\r\n\r\n\t\t\t\t\tvar start = offsets[ oi ].start;\r\n\t\t\t\t\tvar count = offsets[ oi ].count;\r\n\t\t\t\t\tvar index = offsets[ oi ].index;\r\n\r\n\t\t\t\t\tfor ( var i = start, il = start + count; i < il; i += 3 ) {\r\n\r\n\t\t\t\t\t\ta = index + indices[ i ];\r\n\t\t\t\t\t\tb = index + indices[ i + 1 ];\r\n\t\t\t\t\t\tc = index + indices[ i + 2 ];\r\n\r\n\t\t\t\t\t\tvA.fromArray( positions, a * 3 );\r\n\t\t\t\t\t\tvB.fromArray( positions, b * 3 );\r\n\t\t\t\t\t\tvC.fromArray( positions, c * 3 );\r\n\r\n\t\t\t\t\t\tif ( material.side === THREE.BackSide ) {\r\n\r\n\t\t\t\t\t\t\tvar intersectionPoint = ray.intersectTriangle( vC, vB, vA, true );\r\n\r\n\t\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\t\tvar intersectionPoint = ray.intersectTriangle( vA, vB, vC, material.side !== THREE.DoubleSide );\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif ( intersectionPoint === null ) continue;\r\n\r\n\t\t\t\t\t\tintersectionPoint.applyMatrix4( this.matrixWorld );\r\n\r\n\t\t\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( intersectionPoint );\r\n\r\n\t\t\t\t\t\tif ( distance < precision || distance < raycaster.near || distance > raycaster.far ) continue;\r\n\r\n\t\t\t\t\t\tintersects.push( {\r\n\r\n\t\t\t\t\t\t\tdistance: distance,\r\n\t\t\t\t\t\t\tpoint: intersectionPoint,\r\n\t\t\t\t\t\t\tface: new THREE.Face3( a, b, c, THREE.Triangle.normal( vA, vB, vC ) ),\r\n\t\t\t\t\t\t\tfaceIndex: null,\r\n\t\t\t\t\t\t\tobject: this\r\n\r\n\t\t\t\t\t\t} );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tvar positions = attributes.position.array;\r\n\r\n\t\t\t\tfor ( var i = 0, j = 0, il = positions.length; i < il; i += 3, j += 9 ) {\r\n\r\n\t\t\t\t\ta = i;\r\n\t\t\t\t\tb = i + 1;\r\n\t\t\t\t\tc = i + 2;\r\n\r\n\t\t\t\t\tvA.fromArray( positions, j );\r\n\t\t\t\t\tvB.fromArray( positions, j + 3 );\r\n\t\t\t\t\tvC.fromArray( positions, j + 6 );\r\n\r\n\t\t\t\t\tif ( material.side === THREE.BackSide ) {\r\n\r\n\t\t\t\t\t\tvar intersectionPoint = ray.intersectTriangle( vC, vB, vA, true );\r\n\r\n\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\tvar intersectionPoint = ray.intersectTriangle( vA, vB, vC, material.side !== THREE.DoubleSide );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ( intersectionPoint === null ) continue;\r\n\r\n\t\t\t\t\tintersectionPoint.applyMatrix4( this.matrixWorld );\r\n\r\n\t\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( intersectionPoint );\r\n\r\n\t\t\t\t\tif ( distance < precision || distance < raycaster.near || distance > raycaster.far ) continue;\r\n\r\n\t\t\t\t\tintersects.push( {\r\n\r\n\t\t\t\t\t\tdistance: distance,\r\n\t\t\t\t\t\tpoint: intersectionPoint,\r\n\t\t\t\t\t\tface: new THREE.Face3( a, b, c, THREE.Triangle.normal( vA, vB, vC ) ),\r\n\t\t\t\t\t\tfaceIndex: null,\r\n\t\t\t\t\t\tobject: this\r\n\r\n\t\t\t\t\t} );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t} else if ( geometry instanceof THREE.Geometry ) {\r\n\r\n\t\t\tvar isFaceMaterial = this.material instanceof THREE.MeshFaceMaterial;\r\n\t\t\tvar objectMaterials = isFaceMaterial === true ? this.material.materials : null;\r\n\r\n\t\t\tvar a, b, c, d;\r\n\t\t\tvar precision = raycaster.precision;\r\n\r\n\t\t\tvar vertices = geometry.vertices;\r\n\r\n\t\t\tfor ( var f = 0, fl = geometry.faces.length; f < fl; f ++ ) {\r\n\r\n\t\t\t\tvar face = geometry.faces[ f ];\r\n\r\n\t\t\t\tvar material = isFaceMaterial === true ? objectMaterials[ face.materialIndex ] : this.material;\r\n\r\n\t\t\t\tif ( material === undefined ) continue;\r\n\r\n\t\t\t\ta = vertices[ face.a ];\r\n\t\t\t\tb = vertices[ face.b ];\r\n\t\t\t\tc = vertices[ face.c ];\r\n\r\n\t\t\t\tif ( material.morphTargets === true ) {\r\n\r\n\t\t\t\t\tvar morphTargets = geometry.morphTargets;\r\n\t\t\t\t\tvar morphInfluences = this.morphTargetInfluences;\r\n\r\n\t\t\t\t\tvA.set( 0, 0, 0 );\r\n\t\t\t\t\tvB.set( 0, 0, 0 );\r\n\t\t\t\t\tvC.set( 0, 0, 0 );\r\n\r\n\t\t\t\t\tfor ( var t = 0, tl = morphTargets.length; t < tl; t ++ ) {\r\n\r\n\t\t\t\t\t\tvar influence = morphInfluences[ t ];\r\n\r\n\t\t\t\t\t\tif ( influence === 0 ) continue;\r\n\r\n\t\t\t\t\t\tvar targets = morphTargets[ t ].vertices;\r\n\r\n\t\t\t\t\t\tvA.x += ( targets[ face.a ].x - a.x ) * influence;\r\n\t\t\t\t\t\tvA.y += ( targets[ face.a ].y - a.y ) * influence;\r\n\t\t\t\t\t\tvA.z += ( targets[ face.a ].z - a.z ) * influence;\r\n\r\n\t\t\t\t\t\tvB.x += ( targets[ face.b ].x - b.x ) * influence;\r\n\t\t\t\t\t\tvB.y += ( targets[ face.b ].y - b.y ) * influence;\r\n\t\t\t\t\t\tvB.z += ( targets[ face.b ].z - b.z ) * influence;\r\n\r\n\t\t\t\t\t\tvC.x += ( targets[ face.c ].x - c.x ) * influence;\r\n\t\t\t\t\t\tvC.y += ( targets[ face.c ].y - c.y ) * influence;\r\n\t\t\t\t\t\tvC.z += ( targets[ face.c ].z - c.z ) * influence;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvA.add( a );\r\n\t\t\t\t\tvB.add( b );\r\n\t\t\t\t\tvC.add( c );\r\n\r\n\t\t\t\t\ta = vA;\r\n\t\t\t\t\tb = vB;\r\n\t\t\t\t\tc = vC;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( material.side === THREE.BackSide ) {\r\n\r\n\t\t\t\t\tvar intersectionPoint = ray.intersectTriangle( c, b, a, true );\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tvar intersectionPoint = ray.intersectTriangle( a, b, c, material.side !== THREE.DoubleSide );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( intersectionPoint === null ) continue;\r\n\r\n\t\t\t\tintersectionPoint.applyMatrix4( this.matrixWorld );\r\n\r\n\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( intersectionPoint );\r\n\r\n\t\t\t\tif ( distance < precision || distance < raycaster.near || distance > raycaster.far ) continue;\r\n\r\n\t\t\t\tintersects.push( {\r\n\r\n\t\t\t\t\tdistance: distance,\r\n\t\t\t\t\tpoint: intersectionPoint,\r\n\t\t\t\t\tface: face,\r\n\t\t\t\t\tfaceIndex: f,\r\n\t\t\t\t\tobject: this\r\n\r\n\t\t\t\t} );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n}() );\r\n\r\nTHREE.Mesh.prototype.clone = function ( object, recursive ) {\r\n\r\n\tif ( object === undefined ) object = new THREE.Mesh( this.geometry, this.material );\r\n\r\n\tTHREE.Object3D.prototype.clone.call( this, object, recursive );\r\n\r\n\treturn object;\r\n\r\n};\r\n\r\n// File:src/objects/Bone.js\r\n\r\n/**\r\n * @author mikael emtinger / http://gomo.se/\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author ikerr / http://verold.com\r\n */\r\n\r\nTHREE.Bone = function ( belongsToSkin ) {\r\n\r\n\tTHREE.Object3D.call( this );\r\n\r\n\tthis.skin = belongsToSkin;\r\n\r\n};\r\n\r\nTHREE.Bone.prototype = Object.create( THREE.Object3D.prototype );\r\n\r\n\r\n// File:src/objects/Skeleton.js\r\n\r\n/**\r\n * @author mikael emtinger / http://gomo.se/\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author michael guerrero / http://realitymeltdown.com\r\n * @author ikerr / http://verold.com\r\n */\r\n\r\nTHREE.Skeleton = function ( bones, boneInverses, useVertexTexture ) {\r\n\r\n\tthis.useVertexTexture = useVertexTexture !== undefined ? useVertexTexture : true;\r\n\r\n\tthis.identityMatrix = new THREE.Matrix4();\r\n\r\n\t// copy the bone array\r\n\r\n\tbones = bones || [];\r\n\r\n\tthis.bones = bones.slice( 0 );\r\n\r\n\t// create a bone texture or an array of floats\r\n\r\n\tif ( this.useVertexTexture ) {\r\n\r\n\t\t// layout (1 matrix = 4 pixels)\r\n\t\t// RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4)\r\n\t\t// with 8x8 pixel texture max 16 bones (8 * 8 / 4)\r\n\t\t// 16x16 pixel texture max 64 bones (16 * 16 / 4)\r\n\t\t// 32x32 pixel texture max 256 bones (32 * 32 / 4)\r\n\t\t// 64x64 pixel texture max 1024 bones (64 * 64 / 4)\r\n\r\n\t\tvar size;\r\n\r\n\t\tif ( this.bones.length > 256 )\r\n\t\t\tsize = 64;\r\n\t\telse if ( this.bones.length > 64 )\r\n\t\t\tsize = 32;\r\n\t\telse if ( this.bones.length > 16 )\r\n\t\t\tsize = 16;\r\n\t\telse\r\n\t\t\tsize = 8;\r\n\r\n\t\tthis.boneTextureWidth = size;\r\n\t\tthis.boneTextureHeight = size;\r\n\r\n\t\tthis.boneMatrices = new Float32Array( this.boneTextureWidth * this.boneTextureHeight * 4 ); // 4 floats per RGBA pixel\r\n\t\tthis.boneTexture = new THREE.DataTexture( this.boneMatrices, this.boneTextureWidth, this.boneTextureHeight, THREE.RGBAFormat, THREE.FloatType );\r\n\t\tthis.boneTexture.minFilter = THREE.NearestFilter;\r\n\t\tthis.boneTexture.magFilter = THREE.NearestFilter;\r\n\t\tthis.boneTexture.generateMipmaps = false;\r\n\t\tthis.boneTexture.flipY = false;\r\n\r\n\t} else {\r\n\r\n\t\tthis.boneMatrices = new Float32Array( 16 * this.bones.length );\r\n\r\n\t}\r\n\r\n\t// use the supplied bone inverses or calculate the inverses\r\n\r\n\tif ( boneInverses === undefined ) {\r\n\r\n\t\tthis.calculateInverses();\r\n\r\n\t} else {\r\n\r\n\t\tif ( this.bones.length === boneInverses.length ) {\r\n\r\n\t\t\tthis.boneInverses = boneInverses.slice( 0 );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tconsole.warn( 'THREE.Skeleton bonInverses is the wrong length.' );\r\n\r\n\t\t\tthis.boneInverses = [];\r\n\r\n\t\t\tfor ( var b = 0, bl = this.bones.length; b < bl; b ++ ) {\r\n\r\n\t\t\t\tthis.boneInverses.push( new THREE.Matrix4() );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.Skeleton.prototype.calculateInverses = function () {\r\n\r\n\tthis.boneInverses = [];\r\n\r\n\tfor ( var b = 0, bl = this.bones.length; b < bl; b ++ ) {\r\n\r\n\t\tvar inverse = new THREE.Matrix4();\r\n\r\n\t\tif ( this.bones[ b ] ) {\r\n\r\n\t\t\tinverse.getInverse( this.bones[ b ].matrixWorld );\r\n\r\n\t\t}\r\n\r\n\t\tthis.boneInverses.push( inverse );\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.Skeleton.prototype.pose = function () {\r\n\r\n\tvar bone;\r\n\r\n\t// recover the bind-time world matrices\r\n\r\n\tfor ( var b = 0, bl = this.bones.length; b < bl; b ++ ) {\r\n\r\n\t\tbone = this.bones[ b ];\r\n\r\n\t\tif ( bone ) {\r\n\r\n\t\t\tbone.matrixWorld.getInverse( this.boneInverses[ b ] );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// compute the local matrices, positions, rotations and scales\r\n\r\n\tfor ( var b = 0, bl = this.bones.length; b < bl; b ++ ) {\r\n\r\n\t\tbone = this.bones[ b ];\r\n\r\n\t\tif ( bone ) {\r\n\r\n\t\t\tif ( bone.parent ) {\r\n\r\n\t\t\t\tbone.matrix.getInverse( bone.parent.matrixWorld );\r\n\t\t\t\tbone.matrix.multiply( bone.matrixWorld );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tbone.matrix.copy( bone.matrixWorld );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tbone.matrix.decompose( bone.position, bone.quaternion, bone.scale );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.Skeleton.prototype.update = ( function () {\r\n\r\n\tvar offsetMatrix = new THREE.Matrix4();\r\n\t\r\n\treturn function () {\r\n\r\n\t\t// flatten bone matrices to array\r\n\r\n\t\tfor ( var b = 0, bl = this.bones.length; b < bl; b ++ ) {\r\n\r\n\t\t\t// compute the offset between the current and the original transform\r\n\r\n\t\t\tvar matrix = this.bones[ b ] ? this.bones[ b ].matrixWorld : this.identityMatrix;\r\n\r\n\t\t\toffsetMatrix.multiplyMatrices( matrix, this.boneInverses[ b ] );\r\n\t\t\toffsetMatrix.flattenToArrayOffset( this.boneMatrices, b * 16 );\r\n\r\n\t\t}\r\n\r\n\t\tif ( this.useVertexTexture ) {\r\n\r\n\t\t\tthis.boneTexture.needsUpdate = true;\r\n\r\n\t\t}\r\n\t\t\r\n\t};\r\n\r\n} )();\r\n\r\n\r\n// File:src/objects/SkinnedMesh.js\r\n\r\n/**\r\n * @author mikael emtinger / http://gomo.se/\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author ikerr / http://verold.com\r\n */\r\n\r\nTHREE.SkinnedMesh = function ( geometry, material, useVertexTexture ) {\r\n\r\n\tTHREE.Mesh.call( this, geometry, material );\r\n\r\n\tthis.type = 'SkinnedMesh';\r\n\r\n\tthis.bindMode = \"attached\";\r\n\tthis.bindMatrix = new THREE.Matrix4();\r\n\tthis.bindMatrixInverse = new THREE.Matrix4();\r\n\r\n\t// init bones\r\n\r\n\t// TODO: remove bone creation as there is no reason (other than\r\n\t// convenience) for THREE.SkinnedMesh to do this.\r\n\r\n\tvar bones = [];\r\n\r\n\tif ( this.geometry && this.geometry.bones !== undefined ) {\r\n\r\n\t\tvar bone, gbone, p, q, s;\r\n\r\n\t\tfor ( var b = 0, bl = this.geometry.bones.length; b < bl; ++b ) {\r\n\r\n\t\t\tgbone = this.geometry.bones[ b ];\r\n\r\n\t\t\tp = gbone.pos;\r\n\t\t\tq = gbone.rotq;\r\n\t\t\ts = gbone.scl;\r\n\r\n\t\t\tbone = new THREE.Bone( this );\r\n\t\t\tbones.push( bone );\r\n\r\n\t\t\tbone.name = gbone.name;\r\n\t\t\tbone.position.set( p[ 0 ], p[ 1 ], p[ 2 ] );\r\n\t\t\tbone.quaternion.set( q[ 0 ], q[ 1 ], q[ 2 ], q[ 3 ] );\r\n\r\n\t\t\tif ( s !== undefined ) {\r\n\r\n\t\t\t\tbone.scale.set( s[ 0 ], s[ 1 ], s[ 2 ] );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tbone.scale.set( 1, 1, 1 );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tfor ( var b = 0, bl = this.geometry.bones.length; b < bl; ++b ) {\r\n\r\n\t\t\tgbone = this.geometry.bones[ b ];\r\n\r\n\t\t\tif ( gbone.parent !== - 1 ) {\r\n\r\n\t\t\t\tbones[ gbone.parent ].add( bones[ b ] );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tthis.add( bones[ b ] );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tthis.normalizeSkinWeights();\r\n\r\n\tthis.updateMatrixWorld( true );\r\n\tthis.bind( new THREE.Skeleton( bones, undefined, useVertexTexture ) );\r\n\r\n};\r\n\r\n\r\nTHREE.SkinnedMesh.prototype = Object.create( THREE.Mesh.prototype );\r\n\r\nTHREE.SkinnedMesh.prototype.bind = function( skeleton, bindMatrix ) {\r\n\r\n\tthis.skeleton = skeleton;\r\n\r\n\tif ( bindMatrix === undefined ) {\r\n\r\n\t\tthis.updateMatrixWorld( true );\r\n\r\n\t\tbindMatrix = this.matrixWorld;\r\n\r\n\t}\r\n\r\n\tthis.bindMatrix.copy( bindMatrix );\r\n\tthis.bindMatrixInverse.getInverse( bindMatrix );\r\n\r\n};\r\n\r\nTHREE.SkinnedMesh.prototype.pose = function () {\r\n\r\n\tthis.skeleton.pose();\r\n\r\n};\r\n\r\nTHREE.SkinnedMesh.prototype.normalizeSkinWeights = function () {\r\n\r\n\tif ( this.geometry instanceof THREE.Geometry ) {\r\n\r\n\t\tfor ( var i = 0; i < this.geometry.skinIndices.length; i ++ ) {\r\n\r\n\t\t\tvar sw = this.geometry.skinWeights[ i ];\r\n\r\n\t\t\tvar scale = 1.0 / sw.lengthManhattan();\r\n\r\n\t\t\tif ( scale !== Infinity ) {\r\n\r\n\t\t\t\tsw.multiplyScalar( scale );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tsw.set( 1 ); // this will be normalized by the shader anyway\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t} else {\r\n\r\n\t\t// skinning weights assumed to be normalized for THREE.BufferGeometry\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.SkinnedMesh.prototype.updateMatrixWorld = function( force ) {\r\n\r\n\tTHREE.Mesh.prototype.updateMatrixWorld.call( this, true );\r\n\r\n\tif ( this.bindMode === \"attached\" ) {\r\n\r\n\t\tthis.bindMatrixInverse.getInverse( this.matrixWorld );\r\n\r\n\t} else if ( this.bindMode === \"detached\" ) {\r\n\r\n\t\tthis.bindMatrixInverse.getInverse( this.bindMatrix );\r\n\r\n\t} else {\r\n\r\n\t\tconsole.warn( 'THREE.SkinnedMesh unreckognized bindMode: ' + this.bindMode );\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.SkinnedMesh.prototype.clone = function( object ) {\r\n\r\n\tif ( object === undefined ) {\r\n\r\n\t\tobject = new THREE.SkinnedMesh( this.geometry, this.material, this.useVertexTexture );\r\n\r\n\t}\r\n\r\n\tTHREE.Mesh.prototype.clone.call( this, object );\r\n\r\n\treturn object;\r\n\r\n};\r\n\r\n\r\n// File:src/objects/MorphAnimMesh.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.MorphAnimMesh = function ( geometry, material ) {\r\n\r\n\tTHREE.Mesh.call( this, geometry, material );\r\n\r\n\tthis.type = 'MorphAnimMesh';\r\n\r\n\t// API\r\n\r\n\tthis.duration = 1000; // milliseconds\r\n\tthis.mirroredLoop = false;\r\n\tthis.time = 0;\r\n\r\n\t// internals\r\n\r\n\tthis.lastKeyframe = 0;\r\n\tthis.currentKeyframe = 0;\r\n\r\n\tthis.direction = 1;\r\n\tthis.directionBackwards = false;\r\n\r\n\tthis.setFrameRange( 0, this.geometry.morphTargets.length - 1 );\r\n\r\n};\r\n\r\nTHREE.MorphAnimMesh.prototype = Object.create( THREE.Mesh.prototype );\r\n\r\nTHREE.MorphAnimMesh.prototype.setFrameRange = function ( start, end ) {\r\n\r\n\tthis.startKeyframe = start;\r\n\tthis.endKeyframe = end;\r\n\r\n\tthis.length = this.endKeyframe - this.startKeyframe + 1;\r\n\r\n};\r\n\r\nTHREE.MorphAnimMesh.prototype.setDirectionForward = function () {\r\n\r\n\tthis.direction = 1;\r\n\tthis.directionBackwards = false;\r\n\r\n};\r\n\r\nTHREE.MorphAnimMesh.prototype.setDirectionBackward = function () {\r\n\r\n\tthis.direction = - 1;\r\n\tthis.directionBackwards = true;\r\n\r\n};\r\n\r\nTHREE.MorphAnimMesh.prototype.parseAnimations = function () {\r\n\r\n\tvar geometry = this.geometry;\r\n\r\n\tif ( ! geometry.animations ) geometry.animations = {};\r\n\r\n\tvar firstAnimation, animations = geometry.animations;\r\n\r\n\tvar pattern = /([a-z]+)_?(\\d+)/;\r\n\r\n\tfor ( var i = 0, il = geometry.morphTargets.length; i < il; i ++ ) {\r\n\r\n\t\tvar morph = geometry.morphTargets[ i ];\r\n\t\tvar parts = morph.name.match( pattern );\r\n\r\n\t\tif ( parts && parts.length > 1 ) {\r\n\r\n\t\t\tvar label = parts[ 1 ];\r\n\t\t\tvar num = parts[ 2 ];\r\n\r\n\t\t\tif ( ! animations[ label ] ) animations[ label ] = { start: Infinity, end: - Infinity };\r\n\r\n\t\t\tvar animation = animations[ label ];\r\n\r\n\t\t\tif ( i < animation.start ) animation.start = i;\r\n\t\t\tif ( i > animation.end ) animation.end = i;\r\n\r\n\t\t\tif ( ! firstAnimation ) firstAnimation = label;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tgeometry.firstAnimation = firstAnimation;\r\n\r\n};\r\n\r\nTHREE.MorphAnimMesh.prototype.setAnimationLabel = function ( label, start, end ) {\r\n\r\n\tif ( ! this.geometry.animations ) this.geometry.animations = {};\r\n\r\n\tthis.geometry.animations[ label ] = { start: start, end: end };\r\n\r\n};\r\n\r\nTHREE.MorphAnimMesh.prototype.playAnimation = function ( label, fps ) {\r\n\r\n\tvar animation = this.geometry.animations[ label ];\r\n\r\n\tif ( animation ) {\r\n\r\n\t\tthis.setFrameRange( animation.start, animation.end );\r\n\t\tthis.duration = 1000 * ( ( animation.end - animation.start ) / fps );\r\n\t\tthis.time = 0;\r\n\r\n\t} else {\r\n\r\n\t\tconsole.warn( 'animation[' + label + '] undefined' );\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.MorphAnimMesh.prototype.updateAnimation = function ( delta ) {\r\n\r\n\tvar frameTime = this.duration / this.length;\r\n\r\n\tthis.time += this.direction * delta;\r\n\r\n\tif ( this.mirroredLoop ) {\r\n\r\n\t\tif ( this.time > this.duration || this.time < 0 ) {\r\n\r\n\t\t\tthis.direction *= - 1;\r\n\r\n\t\t\tif ( this.time > this.duration ) {\r\n\r\n\t\t\t\tthis.time = this.duration;\r\n\t\t\t\tthis.directionBackwards = true;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( this.time < 0 ) {\r\n\r\n\t\t\t\tthis.time = 0;\r\n\t\t\t\tthis.directionBackwards = false;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t} else {\r\n\r\n\t\tthis.time = this.time % this.duration;\r\n\r\n\t\tif ( this.time < 0 ) this.time += this.duration;\r\n\r\n\t}\r\n\r\n\tvar keyframe = this.startKeyframe + THREE.Math.clamp( Math.floor( this.time / frameTime ), 0, this.length - 1 );\r\n\r\n\tif ( keyframe !== this.currentKeyframe ) {\r\n\r\n\t\tthis.morphTargetInfluences[ this.lastKeyframe ] = 0;\r\n\t\tthis.morphTargetInfluences[ this.currentKeyframe ] = 1;\r\n\r\n\t\tthis.morphTargetInfluences[ keyframe ] = 0;\r\n\r\n\t\tthis.lastKeyframe = this.currentKeyframe;\r\n\t\tthis.currentKeyframe = keyframe;\r\n\r\n\t}\r\n\r\n\tvar mix = ( this.time % frameTime ) / frameTime;\r\n\r\n\tif ( this.directionBackwards ) {\r\n\r\n\t\tmix = 1 - mix;\r\n\r\n\t}\r\n\r\n\tthis.morphTargetInfluences[ this.currentKeyframe ] = mix;\r\n\tthis.morphTargetInfluences[ this.lastKeyframe ] = 1 - mix;\r\n\r\n};\r\n\r\nTHREE.MorphAnimMesh.prototype.interpolateTargets = function ( a, b, t ) {\r\n\r\n\tvar influences = this.morphTargetInfluences;\r\n\r\n\tfor ( var i = 0, l = influences.length; i < l; i ++ ) {\r\n\r\n\t\tinfluences[ i ] = 0;\r\n\r\n\t}\r\n\r\n\tif ( a > -1 ) influences[ a ] = 1 - t;\r\n\tif ( b > -1 ) influences[ b ] = t;\r\n\r\n};\r\n\r\nTHREE.MorphAnimMesh.prototype.clone = function ( object ) {\r\n\r\n\tif ( object === undefined ) object = new THREE.MorphAnimMesh( this.geometry, this.material );\r\n\r\n\tobject.duration = this.duration;\r\n\tobject.mirroredLoop = this.mirroredLoop;\r\n\tobject.time = this.time;\r\n\r\n\tobject.lastKeyframe = this.lastKeyframe;\r\n\tobject.currentKeyframe = this.currentKeyframe;\r\n\r\n\tobject.direction = this.direction;\r\n\tobject.directionBackwards = this.directionBackwards;\r\n\r\n\tTHREE.Mesh.prototype.clone.call( this, object );\r\n\r\n\treturn object;\r\n\r\n};\r\n\r\n// File:src/objects/LOD.js\r\n\r\n/**\r\n * @author mikael emtinger / http://gomo.se/\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.LOD = function () {\r\n\r\n\tTHREE.Object3D.call( this );\r\n\r\n\tthis.objects = [];\r\n\r\n};\r\n\r\n\r\nTHREE.LOD.prototype = Object.create( THREE.Object3D.prototype );\r\n\r\nTHREE.LOD.prototype.addLevel = function ( object, distance ) {\r\n\r\n\tif ( distance === undefined ) distance = 0;\r\n\r\n\tdistance = Math.abs( distance );\r\n\r\n\tfor ( var l = 0; l < this.objects.length; l ++ ) {\r\n\r\n\t\tif ( distance < this.objects[ l ].distance ) {\r\n\r\n\t\t\tbreak;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tthis.objects.splice( l, 0, { distance: distance, object: object } );\r\n\tthis.add( object );\r\n\r\n};\r\n\r\nTHREE.LOD.prototype.getObjectForDistance = function ( distance ) {\r\n\r\n\tfor ( var i = 1, l = this.objects.length; i < l; i ++ ) {\r\n\r\n\t\tif ( distance < this.objects[ i ].distance ) {\r\n\r\n\t\t\tbreak;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\treturn this.objects[ i - 1 ].object;\r\n\r\n};\r\n\r\nTHREE.LOD.prototype.raycast = ( function () {\r\n\r\n\tvar matrixPosition = new THREE.Vector3();\r\n\r\n\treturn function ( raycaster, intersects ) {\r\n\r\n\t\tmatrixPosition.setFromMatrixPosition( this.matrixWorld );\r\n\r\n\t\tvar distance = raycaster.ray.origin.distanceTo( matrixPosition );\r\n\r\n\t\tthis.getObjectForDistance( distance ).raycast( raycaster, intersects );\r\n\r\n\t};\r\n\r\n}() );\r\n\r\nTHREE.LOD.prototype.update = function () {\r\n\r\n\tvar v1 = new THREE.Vector3();\r\n\tvar v2 = new THREE.Vector3();\r\n\r\n\treturn function ( camera ) {\r\n\r\n\t\tif ( this.objects.length > 1 ) {\r\n\r\n\t\t\tv1.setFromMatrixPosition( camera.matrixWorld );\r\n\t\t\tv2.setFromMatrixPosition( this.matrixWorld );\r\n\r\n\t\t\tvar distance = v1.distanceTo( v2 );\r\n\r\n\t\t\tthis.objects[ 0 ].object.visible = true;\r\n\r\n\t\t\tfor ( var i = 1, l = this.objects.length; i < l; i ++ ) {\r\n\r\n\t\t\t\tif ( distance >= this.objects[ i ].distance ) {\r\n\r\n\t\t\t\t\tthis.objects[ i - 1 ].object.visible = false;\r\n\t\t\t\t\tthis.objects[ i ].object.visible = true;\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfor ( ; i < l; i ++ ) {\r\n\r\n\t\t\t\tthis.objects[ i ].object.visible = false;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n}();\r\n\r\nTHREE.LOD.prototype.clone = function ( object ) {\r\n\r\n\tif ( object === undefined ) object = new THREE.LOD();\r\n\r\n\tTHREE.Object3D.prototype.clone.call( this, object );\r\n\r\n\tfor ( var i = 0, l = this.objects.length; i < l; i ++ ) {\r\n\t\tvar x = this.objects[ i ].object.clone();\r\n\t\tx.visible = i === 0;\r\n\t\tobject.addLevel( x, this.objects[ i ].distance );\r\n\t}\r\n\r\n\treturn object;\r\n\r\n};\r\n\r\n// File:src/objects/Sprite.js\r\n\r\n/**\r\n * @author mikael emtinger / http://gomo.se/\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.Sprite = ( function () {\r\n\r\n\tvar indices = new Uint16Array( [ 0, 1, 2, 0, 2, 3 ] );\r\n\tvar vertices = new Float32Array( [ - 0.5, - 0.5, 0, 0.5, - 0.5, 0, 0.5, 0.5, 0, - 0.5, 0.5, 0 ] );\r\n\tvar uvs = new Float32Array( [ 0, 0, 1, 0, 1, 1, 0, 1 ] );\r\n\r\n\tvar geometry = new THREE.BufferGeometry();\r\n\tgeometry.addAttribute( 'index', new THREE.BufferAttribute( indices, 1 ) );\r\n\tgeometry.addAttribute( 'position', new THREE.BufferAttribute( vertices, 3 ) );\r\n\tgeometry.addAttribute( 'uv', new THREE.BufferAttribute( uvs, 2 ) );\r\n\r\n\treturn function ( material ) {\r\n\r\n\t\tTHREE.Object3D.call( this );\r\n\r\n\t\tthis.type = 'Sprite';\r\n\r\n\t\tthis.geometry = geometry;\r\n\t\tthis.material = ( material !== undefined ) ? material : new THREE.SpriteMaterial();\r\n\r\n\t};\r\n\r\n} )();\r\n\r\nTHREE.Sprite.prototype = Object.create( THREE.Object3D.prototype );\r\n\r\nTHREE.Sprite.prototype.raycast = ( function () {\r\n\r\n\tvar matrixPosition = new THREE.Vector3();\r\n\r\n\treturn function ( raycaster, intersects ) {\r\n\r\n\t\tmatrixPosition.setFromMatrixPosition( this.matrixWorld );\r\n\r\n\t\tvar distance = raycaster.ray.distanceToPoint( matrixPosition );\r\n\r\n\t\tif ( distance > this.scale.x ) {\r\n\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\r\n\t\tintersects.push( {\r\n\r\n\t\t\tdistance: distance,\r\n\t\t\tpoint: this.position,\r\n\t\t\tface: null,\r\n\t\t\tobject: this\r\n\r\n\t\t} );\r\n\r\n\t};\r\n\r\n}() );\r\n\r\nTHREE.Sprite.prototype.clone = function ( object ) {\r\n\r\n\tif ( object === undefined ) object = new THREE.Sprite( this.material );\r\n\r\n\tTHREE.Object3D.prototype.clone.call( this, object );\r\n\r\n\treturn object;\r\n\r\n};\r\n\r\n// Backwards compatibility\r\n\r\nTHREE.Particle = THREE.Sprite;\r\n\r\n// File:src/objects/LensFlare.js\r\n\r\n/**\r\n * @author mikael emtinger / http://gomo.se/\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.LensFlare = function ( texture, size, distance, blending, color ) {\r\n\r\n\tTHREE.Object3D.call( this );\r\n\r\n\tthis.lensFlares = [];\r\n\r\n\tthis.positionScreen = new THREE.Vector3();\r\n\tthis.customUpdateCallback = undefined;\r\n\r\n\tif( texture !== undefined ) {\r\n\r\n\t\tthis.add( texture, size, distance, blending, color );\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.LensFlare.prototype = Object.create( THREE.Object3D.prototype );\r\n\r\n\r\n/*\r\n * Add: adds another flare\r\n */\r\n\r\nTHREE.LensFlare.prototype.add = function ( texture, size, distance, blending, color, opacity ) {\r\n\r\n\tif ( size === undefined ) size = - 1;\r\n\tif ( distance === undefined ) distance = 0;\r\n\tif ( opacity === undefined ) opacity = 1;\r\n\tif ( color === undefined ) color = new THREE.Color( 0xffffff );\r\n\tif ( blending === undefined ) blending = THREE.NormalBlending;\r\n\r\n\tdistance = Math.min( distance, Math.max( 0, distance ) );\r\n\r\n\tthis.lensFlares.push( {\r\n\t\ttexture: texture, \t\t\t// THREE.Texture\r\n\t\tsize: size, \t\t\t\t// size in pixels (-1 = use texture.width)\r\n\t\tdistance: distance, \t\t// distance (0-1) from light source (0=at light source)\r\n\t\tx: 0, y: 0, z: 0,\t\t\t// screen position (-1 => 1) z = 0 is ontop z = 1 is back\r\n\t\tscale: 1, \t\t\t\t\t// scale\r\n\t\trotation: 1, \t\t\t\t// rotation\r\n\t\topacity: opacity,\t\t\t// opacity\r\n\t\tcolor: color,\t\t\t\t// color\r\n\t\tblending: blending\t\t\t// blending\r\n\t} );\r\n\r\n};\r\n\r\n/*\r\n * Update lens flares update positions on all flares based on the screen position\r\n * Set myLensFlare.customUpdateCallback to alter the flares in your project specific way.\r\n */\r\n\r\nTHREE.LensFlare.prototype.updateLensFlares = function () {\r\n\r\n\tvar f, fl = this.lensFlares.length;\r\n\tvar flare;\r\n\tvar vecX = - this.positionScreen.x * 2;\r\n\tvar vecY = - this.positionScreen.y * 2;\r\n\r\n\tfor( f = 0; f < fl; f ++ ) {\r\n\r\n\t\tflare = this.lensFlares[ f ];\r\n\r\n\t\tflare.x = this.positionScreen.x + vecX * flare.distance;\r\n\t\tflare.y = this.positionScreen.y + vecY * flare.distance;\r\n\r\n\t\tflare.wantedRotation = flare.x * Math.PI * 0.25;\r\n\t\tflare.rotation += ( flare.wantedRotation - flare.rotation ) * 0.25;\r\n\r\n\t}\r\n\r\n};\r\n\r\n\r\n// File:src/scenes/Scene.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.Scene = function () {\r\n\r\n\tTHREE.Object3D.call( this );\r\n\r\n\tthis.type = 'Scene';\r\n\r\n\tthis.fog = null;\r\n\tthis.overrideMaterial = null;\r\n\r\n\tthis.autoUpdate = true; // checked by the renderer\r\n\r\n};\r\n\r\nTHREE.Scene.prototype = Object.create( THREE.Object3D.prototype );\r\n\r\nTHREE.Scene.prototype.clone = function ( object ) {\r\n\r\n\tif ( object === undefined ) object = new THREE.Scene();\r\n\r\n\tTHREE.Object3D.prototype.clone.call( this, object );\r\n\r\n\tif ( this.fog !== null ) object.fog = this.fog.clone();\r\n\tif ( this.overrideMaterial !== null ) object.overrideMaterial = this.overrideMaterial.clone();\r\n\r\n\tobject.autoUpdate = this.autoUpdate;\r\n\tobject.matrixAutoUpdate = this.matrixAutoUpdate;\r\n\r\n\treturn object;\r\n\r\n};\r\n\r\n// File:src/scenes/Fog.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.Fog = function ( color, near, far ) {\r\n\r\n\tthis.name = '';\r\n\r\n\tthis.color = new THREE.Color( color );\r\n\r\n\tthis.near = ( near !== undefined ) ? near : 1;\r\n\tthis.far = ( far !== undefined ) ? far : 1000;\r\n\r\n};\r\n\r\nTHREE.Fog.prototype.clone = function () {\r\n\r\n\treturn new THREE.Fog( this.color.getHex(), this.near, this.far );\r\n\r\n};\r\n\r\n// File:src/scenes/FogExp2.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.FogExp2 = function ( color, density ) {\r\n\r\n\tthis.name = '';\r\n\r\n\tthis.color = new THREE.Color( color );\r\n\tthis.density = ( density !== undefined ) ? density : 0.00025;\r\n\r\n};\r\n\r\nTHREE.FogExp2.prototype.clone = function () {\r\n\r\n\treturn new THREE.FogExp2( this.color.getHex(), this.density );\r\n\r\n};\r\n\r\n// File:src/renderers/shaders/ShaderChunk.js\r\n\r\nTHREE.ShaderChunk = {};\r\n\r\n// File:src/renderers/shaders/ShaderChunk/alphatest_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'alphatest_fragment'] = \"#ifdef ALPHATEST\\n\\n\tif ( gl_FragColor.a < ALPHATEST ) discard;\\n\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/lights_lambert_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'lights_lambert_vertex'] = \"vLightFront = vec3( 0.0 );\\n\\n#ifdef DOUBLE_SIDED\\n\\n\tvLightBack = vec3( 0.0 );\\n\\n#endif\\n\\ntransformedNormal = normalize( transformedNormal );\\n\\n#if MAX_DIR_LIGHTS > 0\\n\\nfor( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\\n\\n\tvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\\n\tvec3 dirVector = normalize( lDirection.xyz );\\n\\n\tfloat dotProduct = dot( transformedNormal, dirVector );\\n\tvec3 directionalLightWeighting = vec3( max( dotProduct, 0.0 ) );\\n\\n\t#ifdef DOUBLE_SIDED\\n\\n\t\tvec3 directionalLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\\n\\n\t\t#ifdef WRAP_AROUND\\n\\n\t\t\tvec3 directionalLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\\n\\n\t\t#endif\\n\\n\t#endif\\n\\n\t#ifdef WRAP_AROUND\\n\\n\t\tvec3 directionalLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\\n\t\tdirectionalLightWeighting = mix( directionalLightWeighting, directionalLightWeightingHalf, wrapRGB );\\n\\n\t\t#ifdef DOUBLE_SIDED\\n\\n\t\t\tdirectionalLightWeightingBack = mix( directionalLightWeightingBack, directionalLightWeightingHalfBack, wrapRGB );\\n\\n\t\t#endif\\n\\n\t#endif\\n\\n\tvLightFront += directionalLightColor[ i ] * directionalLightWeighting;\\n\\n\t#ifdef DOUBLE_SIDED\\n\\n\t\tvLightBack += directionalLightColor[ i ] * directionalLightWeightingBack;\\n\\n\t#endif\\n\\n}\\n\\n#endif\\n\\n#if MAX_POINT_LIGHTS > 0\\n\\n\tfor( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\\n\\n\t\tvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\\n\t\tvec3 lVector = lPosition.xyz - mvPosition.xyz;\\n\\n\t\tfloat lDistance = 1.0;\\n\t\tif ( pointLightDistance[ i ] > 0.0 )\\n\t\t\tlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\\n\\n\t\tlVector = normalize( lVector );\\n\t\tfloat dotProduct = dot( transformedNormal, lVector );\\n\\n\t\tvec3 pointLightWeighting = vec3( max( dotProduct, 0.0 ) );\\n\\n\t\t#ifdef DOUBLE_SIDED\\n\\n\t\t\tvec3 pointLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\\n\\n\t\t\t#ifdef WRAP_AROUND\\n\\n\t\t\t\tvec3 pointLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\\n\\n\t\t\t#endif\\n\\n\t\t#endif\\n\\n\t\t#ifdef WRAP_AROUND\\n\\n\t\t\tvec3 pointLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\\n\t\t\tpointLightWeighting = mix( pointLightWeighting, pointLightWeightingHalf, wrapRGB );\\n\\n\t\t\t#ifdef DOUBLE_SIDED\\n\\n\t\t\t\tpointLightWeightingBack = mix( pointLightWeightingBack, pointLightWeightingHalfBack, wrapRGB );\\n\\n\t\t\t#endif\\n\\n\t\t#endif\\n\\n\t\tvLightFront += pointLightColor[ i ] * pointLightWeighting * lDistance;\\n\\n\t\t#ifdef DOUBLE_SIDED\\n\\n\t\t\tvLightBack += pointLightColor[ i ] * pointLightWeightingBack * lDistance;\\n\\n\t\t#endif\\n\\n\t}\\n\\n#endif\\n\\n#if MAX_SPOT_LIGHTS > 0\\n\\n\tfor( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\\n\\n\t\tvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );\\n\t\tvec3 lVector = lPosition.xyz - mvPosition.xyz;\\n\\n\t\tfloat spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - worldPosition.xyz ) );\\n\\n\t\tif ( spotEffect > spotLightAngleCos[ i ] ) {\\n\\n\t\t\tspotEffect = max( pow( max( spotEffect, 0.0 ), spotLightExponent[ i ] ), 0.0 );\\n\\n\t\t\tfloat lDistance = 1.0;\\n\t\t\tif ( spotLightDistance[ i ] > 0.0 )\\n\t\t\t\tlDistance = 1.0 - min( ( length( lVector ) / spotLightDistance[ i ] ), 1.0 );\\n\\n\t\t\tlVector = normalize( lVector );\\n\\n\t\t\tfloat dotProduct = dot( transformedNormal, lVector );\\n\t\t\tvec3 spotLightWeighting = vec3( max( dotProduct, 0.0 ) );\\n\\n\t\t\t#ifdef DOUBLE_SIDED\\n\\n\t\t\t\tvec3 spotLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\\n\\n\t\t\t\t#ifdef WRAP_AROUND\\n\\n\t\t\t\t\tvec3 spotLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\\n\\n\t\t\t\t#endif\\n\\n\t\t\t#endif\\n\\n\t\t\t#ifdef WRAP_AROUND\\n\\n\t\t\t\tvec3 spotLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\\n\t\t\t\tspotLightWeighting = mix( spotLightWeighting, spotLightWeightingHalf, wrapRGB );\\n\\n\t\t\t\t#ifdef DOUBLE_SIDED\\n\\n\t\t\t\t\tspotLightWeightingBack = mix( spotLightWeightingBack, spotLightWeightingHalfBack, wrapRGB );\\n\\n\t\t\t\t#endif\\n\\n\t\t\t#endif\\n\\n\t\t\tvLightFront += spotLightColor[ i ] * spotLightWeighting * lDistance * spotEffect;\\n\\n\t\t\t#ifdef DOUBLE_SIDED\\n\\n\t\t\t\tvLightBack += spotLightColor[ i ] * spotLightWeightingBack * lDistance * spotEffect;\\n\\n\t\t\t#endif\\n\\n\t\t}\\n\\n\t}\\n\\n#endif\\n\\n#if MAX_HEMI_LIGHTS > 0\\n\\n\tfor( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {\\n\\n\t\tvec4 lDirection = viewMatrix * vec4( hemisphereLightDirection[ i ], 0.0 );\\n\t\tvec3 lVector = normalize( lDirection.xyz );\\n\\n\t\tfloat dotProduct = dot( transformedNormal, lVector );\\n\\n\t\tfloat hemiDiffuseWeight = 0.5 * dotProduct + 0.5;\\n\t\tfloat hemiDiffuseWeightBack = -0.5 * dotProduct + 0.5;\\n\\n\t\tvLightFront += mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );\\n\\n\t\t#ifdef DOUBLE_SIDED\\n\\n\t\t\tvLightBack += mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeightBack );\\n\\n\t\t#endif\\n\\n\t}\\n\\n#endif\\n\\nvLightFront = vLightFront * diffuse + ambient * ambientLightColor + emissive;\\n\\n#ifdef DOUBLE_SIDED\\n\\n\tvLightBack = vLightBack * diffuse + ambient * ambientLightColor + emissive;\\n\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/map_particle_pars_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'map_particle_pars_fragment'] = \"#ifdef USE_MAP\\n\\n\tuniform sampler2D map;\\n\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/default_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'default_vertex'] = \"vec4 mvPosition;\\n\\n#ifdef USE_SKINNING\\n\\n\tmvPosition = modelViewMatrix * skinned;\\n\\n#endif\\n\\n#if !defined( USE_SKINNING ) && defined( USE_MORPHTARGETS )\\n\\n\tmvPosition = modelViewMatrix * vec4( morphed, 1.0 );\\n\\n#endif\\n\\n#if !defined( USE_SKINNING ) && ! defined( USE_MORPHTARGETS )\\n\\n\tmvPosition = modelViewMatrix * vec4( position, 1.0 );\\n\\n#endif\\n\\ngl_Position = projectionMatrix * mvPosition;\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/map_pars_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'map_pars_fragment'] = \"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP )\\n\\n\tvarying vec2 vUv;\\n\\n#endif\\n\\n#ifdef USE_MAP\\n\\n\tuniform sampler2D map;\\n\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/skinnormal_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'skinnormal_vertex'] = \"#ifdef USE_SKINNING\\n\\n\tmat4 skinMatrix = mat4( 0.0 );\\n\tskinMatrix += skinWeight.x * boneMatX;\\n\tskinMatrix += skinWeight.y * boneMatY;\\n\tskinMatrix += skinWeight.z * boneMatZ;\\n\tskinMatrix += skinWeight.w * boneMatW;\\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\\n\\n\t#ifdef USE_MORPHNORMALS\\n\\n\tvec4 skinnedNormal = skinMatrix * vec4( morphedNormal, 0.0 );\\n\\n\t#else\\n\\n\tvec4 skinnedNormal = skinMatrix * vec4( normal, 0.0 );\\n\\n\t#endif\\n\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'logdepthbuf_pars_vertex'] = \"#ifdef USE_LOGDEPTHBUF\\n\\n\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\n\t\tvarying float vFragDepth;\\n\\n\t#endif\\n\\n\tuniform float logDepthBufFC;\\n\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/lightmap_pars_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'lightmap_pars_vertex'] = \"#ifdef USE_LIGHTMAP\\n\\n\tvarying vec2 vUv2;\\n\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/lights_phong_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'lights_phong_fragment'] = \"vec3 normal = normalize( vNormal );\\nvec3 viewPosition = normalize( vViewPosition );\\n\\n#ifdef DOUBLE_SIDED\\n\\n\tnormal = normal * ( -1.0 + 2.0 * float( gl_FrontFacing ) );\\n\\n#endif\\n\\n#ifdef USE_NORMALMAP\\n\\n\tnormal = perturbNormal2Arb( -vViewPosition, normal );\\n\\n#elif defined( USE_BUMPMAP )\\n\\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\\n\\n#endif\\n\\n#if MAX_POINT_LIGHTS > 0\\n\\n\tvec3 pointDiffuse = vec3( 0.0 );\\n\tvec3 pointSpecular = vec3( 0.0 );\\n\\n\tfor ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\\n\\n\t\tvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\\n\t\tvec3 lVector = lPosition.xyz + vViewPosition.xyz;\\n\\n\t\tfloat lDistance = 1.0;\\n\t\tif ( pointLightDistance[ i ] > 0.0 )\\n\t\t\tlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\\n\\n\t\tlVector = normalize( lVector );\\n\\n\t\t\t\t// diffuse\\n\\n\t\tfloat dotProduct = dot( normal, lVector );\\n\\n\t\t#ifdef WRAP_AROUND\\n\\n\t\t\tfloat pointDiffuseWeightFull = max( dotProduct, 0.0 );\\n\t\t\tfloat pointDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\\n\\n\t\t\tvec3 pointDiffuseWeight = mix( vec3( pointDiffuseWeightFull ), vec3( pointDiffuseWeightHalf ), wrapRGB );\\n\\n\t\t#else\\n\\n\t\t\tfloat pointDiffuseWeight = max( dotProduct, 0.0 );\\n\\n\t\t#endif\\n\\n\t\tpointDiffuse += diffuse * pointLightColor[ i ] * pointDiffuseWeight * lDistance;\\n\\n\t\t\t\t// specular\\n\\n\t\tvec3 pointHalfVector = normalize( lVector + viewPosition );\\n\t\tfloat pointDotNormalHalf = max( dot( normal, pointHalfVector ), 0.0 );\\n\t\tfloat pointSpecularWeight = specularStrength * max( pow( pointDotNormalHalf, shininess ), 0.0 );\\n\\n\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;\\n\\n\t\tvec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVector, pointHalfVector ), 0.0 ), 5.0 );\\n\t\tpointSpecular += schlick * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * lDistance * specularNormalization;\\n\\n\t}\\n\\n#endif\\n\\n#if MAX_SPOT_LIGHTS > 0\\n\\n\tvec3 spotDiffuse = vec3( 0.0 );\\n\tvec3 spotSpecular = vec3( 0.0 );\\n\\n\tfor ( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\\n\\n\t\tvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );\\n\t\tvec3 lVector = lPosition.xyz + vViewPosition.xyz;\\n\\n\t\tfloat lDistance = 1.0;\\n\t\tif ( spotLightDistance[ i ] > 0.0 )\\n\t\t\tlDistance = 1.0 - min( ( length( lVector ) / spotLightDistance[ i ] ), 1.0 );\\n\\n\t\tlVector = normalize( lVector );\\n\\n\t\tfloat spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - vWorldPosition ) );\\n\\n\t\tif ( spotEffect > spotLightAngleCos[ i ] ) {\\n\\n\t\t\tspotEffect = max( pow( max( spotEffect, 0.0 ), spotLightExponent[ i ] ), 0.0 );\\n\\n\t\t\t\t\t// diffuse\\n\\n\t\t\tfloat dotProduct = dot( normal, lVector );\\n\\n\t\t\t#ifdef WRAP_AROUND\\n\\n\t\t\t\tfloat spotDiffuseWeightFull = max( dotProduct, 0.0 );\\n\t\t\t\tfloat spotDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\\n\\n\t\t\t\tvec3 spotDiffuseWeight = mix( vec3( spotDiffuseWeightFull ), vec3( spotDiffuseWeightHalf ), wrapRGB );\\n\\n\t\t\t#else\\n\\n\t\t\t\tfloat spotDiffuseWeight = max( dotProduct, 0.0 );\\n\\n\t\t\t#endif\\n\\n\t\t\tspotDiffuse += diffuse * spotLightColor[ i ] * spotDiffuseWeight * lDistance * spotEffect;\\n\\n\t\t\t\t\t// specular\\n\\n\t\t\tvec3 spotHalfVector = normalize( lVector + viewPosition );\\n\t\t\tfloat spotDotNormalHalf = max( dot( normal, spotHalfVector ), 0.0 );\\n\t\t\tfloat spotSpecularWeight = specularStrength * max( pow( spotDotNormalHalf, shininess ), 0.0 );\\n\\n\t\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;\\n\\n\t\t\tvec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVector, spotHalfVector ), 0.0 ), 5.0 );\\n\t\t\tspotSpecular += schlick * spotLightColor[ i ] * spotSpecularWeight * spotDiffuseWeight * lDistance * specularNormalization * spotEffect;\\n\\n\t\t}\\n\\n\t}\\n\\n#endif\\n\\n#if MAX_DIR_LIGHTS > 0\\n\\n\tvec3 dirDiffuse = vec3( 0.0 );\\n\tvec3 dirSpecular = vec3( 0.0 );\\n\\n\tfor( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\\n\\n\t\tvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\\n\t\tvec3 dirVector = normalize( lDirection.xyz );\\n\\n\t\t\t\t// diffuse\\n\\n\t\tfloat dotProduct = dot( normal, dirVector );\\n\\n\t\t#ifdef WRAP_AROUND\\n\\n\t\t\tfloat dirDiffuseWeightFull = max( dotProduct, 0.0 );\\n\t\t\tfloat dirDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\\n\\n\t\t\tvec3 dirDiffuseWeight = mix( vec3( dirDiffuseWeightFull ), vec3( dirDiffuseWeightHalf ), wrapRGB );\\n\\n\t\t#else\\n\\n\t\t\tfloat dirDiffuseWeight = max( dotProduct, 0.0 );\\n\\n\t\t#endif\\n\\n\t\tdirDiffuse += diffuse * directionalLightColor[ i ] * dirDiffuseWeight;\\n\\n\t\t// specular\\n\\n\t\tvec3 dirHalfVector = normalize( dirVector + viewPosition );\\n\t\tfloat dirDotNormalHalf = max( dot( normal, dirHalfVector ), 0.0 );\\n\t\tfloat dirSpecularWeight = specularStrength * max( pow( dirDotNormalHalf, shininess ), 0.0 );\\n\\n\t\t/*\\n\t\t// fresnel term from skin shader\\n\t\tconst float F0 = 0.128;\\n\\n\t\tfloat base = 1.0 - dot( viewPosition, dirHalfVector );\\n\t\tfloat exponential = pow( base, 5.0 );\\n\\n\t\tfloat fresnel = exponential + F0 * ( 1.0 - exponential );\\n\t\t*/\\n\\n\t\t/*\\n\t\t// fresnel term from fresnel shader\\n\t\tconst float mFresnelBias = 0.08;\\n\t\tconst float mFresnelScale = 0.3;\\n\t\tconst float mFresnelPower = 5.0;\\n\\n\t\tfloat fresnel = mFresnelBias + mFresnelScale * pow( 1.0 + dot( normalize( -viewPosition ), normal ), mFresnelPower );\\n\t\t*/\\n\\n\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;\\n\\n\t\t// \t\tdirSpecular += specular * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight * specularNormalization * fresnel;\\n\\n\t\tvec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( dirVector, dirHalfVector ), 0.0 ), 5.0 );\\n\t\tdirSpecular += schlick * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight * specularNormalization;\\n\\n\\n\t}\\n\\n#endif\\n\\n#if MAX_HEMI_LIGHTS > 0\\n\\n\tvec3 hemiDiffuse = vec3( 0.0 );\\n\tvec3 hemiSpecular = vec3( 0.0 );\\n\\n\tfor( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {\\n\\n\t\tvec4 lDirection = viewMatrix * vec4( hemisphereLightDirection[ i ], 0.0 );\\n\t\tvec3 lVector = normalize( lDirection.xyz );\\n\\n\t\t// diffuse\\n\\n\t\tfloat dotProduct = dot( normal, lVector );\\n\t\tfloat hemiDiffuseWeight = 0.5 * dotProduct + 0.5;\\n\\n\t\tvec3 hemiColor = mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );\\n\\n\t\themiDiffuse += diffuse * hemiColor;\\n\\n\t\t// specular (sky light)\\n\\n\t\tvec3 hemiHalfVectorSky = normalize( lVector + viewPosition );\\n\t\tfloat hemiDotNormalHalfSky = 0.5 * dot( normal, hemiHalfVectorSky ) + 0.5;\\n\t\tfloat hemiSpecularWeightSky = specularStrength * max( pow( max( hemiDotNormalHalfSky, 0.0 ), shininess ), 0.0 );\\n\\n\t\t// specular (ground light)\\n\\n\t\tvec3 lVectorGround = -lVector;\\n\\n\t\tvec3 hemiHalfVectorGround = normalize( lVectorGround + viewPosition );\\n\t\tfloat hemiDotNormalHalfGround = 0.5 * dot( normal, hemiHalfVectorGround ) + 0.5;\\n\t\tfloat hemiSpecularWeightGround = specularStrength * max( pow( max( hemiDotNormalHalfGround, 0.0 ), shininess ), 0.0 );\\n\\n\t\tfloat dotProductGround = dot( normal, lVectorGround );\\n\\n\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;\\n\\n\t\tvec3 schlickSky = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVector, hemiHalfVectorSky ), 0.0 ), 5.0 );\\n\t\tvec3 schlickGround = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVectorGround, hemiHalfVectorGround ), 0.0 ), 5.0 );\\n\t\themiSpecular += hemiColor * specularNormalization * ( schlickSky * hemiSpecularWeightSky * max( dotProduct, 0.0 ) + schlickGround * hemiSpecularWeightGround * max( dotProductGround, 0.0 ) );\\n\\n\t}\\n\\n#endif\\n\\nvec3 totalDiffuse = vec3( 0.0 );\\nvec3 totalSpecular = vec3( 0.0 );\\n\\n#if MAX_DIR_LIGHTS > 0\\n\\n\ttotalDiffuse += dirDiffuse;\\n\ttotalSpecular += dirSpecular;\\n\\n#endif\\n\\n#if MAX_HEMI_LIGHTS > 0\\n\\n\ttotalDiffuse += hemiDiffuse;\\n\ttotalSpecular += hemiSpecular;\\n\\n#endif\\n\\n#if MAX_POINT_LIGHTS > 0\\n\\n\ttotalDiffuse += pointDiffuse;\\n\ttotalSpecular += pointSpecular;\\n\\n#endif\\n\\n#if MAX_SPOT_LIGHTS > 0\\n\\n\ttotalDiffuse += spotDiffuse;\\n\ttotalSpecular += spotSpecular;\\n\\n#endif\\n\\n#ifdef METAL\\n\\n\tgl_FragColor.xyz = gl_FragColor.xyz * ( emissive + totalDiffuse + ambientLightColor * ambient + totalSpecular );\\n\\n#else\\n\\n\tgl_FragColor.xyz = gl_FragColor.xyz * ( emissive + totalDiffuse + ambientLightColor * ambient ) + totalSpecular;\\n\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/fog_pars_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'fog_pars_fragment'] = \"#ifdef USE_FOG\\n\\n\tuniform vec3 fogColor;\\n\\n\t#ifdef FOG_EXP2\\n\\n\t\tuniform float fogDensity;\\n\\n\t#else\\n\\n\t\tuniform float fogNear;\\n\t\tuniform float fogFar;\\n\t#endif\\n\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/morphnormal_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'morphnormal_vertex'] = \"#ifdef USE_MORPHNORMALS\\n\\n\tvec3 morphedNormal = vec3( 0.0 );\\n\\n\tmorphedNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\\n\tmorphedNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\\n\tmorphedNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\\n\tmorphedNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\\n\\n\tmorphedNormal += normal;\\n\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'envmap_pars_fragment'] = \"#ifdef USE_ENVMAP\\n\\n\tuniform float reflectivity;\\n\tuniform samplerCube envMap;\\n\tuniform float flipEnvMap;\\n\tuniform int combine;\\n\\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\n\\n\t\tuniform bool useRefract;\\n\t\tuniform float refractionRatio;\\n\\n\t#else\\n\\n\t\tvarying vec3 vReflect;\\n\\n\t#endif\\n\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'logdepthbuf_fragment'] = \"#if defined(USE_LOGDEPTHBUF) && defined(USE_LOGDEPTHBUF_EXT)\\n\\n\tgl_FragDepthEXT = log2(vFragDepth) * logDepthBufFC * 0.5;\\n\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'normalmap_pars_fragment'] = \"#ifdef USE_NORMALMAP\\n\\n\tuniform sampler2D normalMap;\\n\tuniform vec2 normalScale;\\n\\n\t\t\t// Per-Pixel Tangent Space Normal Mapping\\n\t\t\t// http://hacksoflife.blogspot.ch/2009/11/per-pixel-tangent-space-normal-mapping.html\\n\\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\\n\\n\t\tvec3 q0 = dFdx( eye_pos.xyz );\\n\t\tvec3 q1 = dFdy( eye_pos.xyz );\\n\t\tvec2 st0 = dFdx( vUv.st );\\n\t\tvec2 st1 = dFdy( vUv.st );\\n\\n\t\tvec3 S = normalize( q0 * st1.t - q1 * st0.t );\\n\t\tvec3 T = normalize( -q0 * st1.s + q1 * st0.s );\\n\t\tvec3 N = normalize( surf_norm );\\n\\n\t\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\n\t\tmapN.xy = normalScale * mapN.xy;\\n\t\tmat3 tsn = mat3( S, T, N );\\n\t\treturn normalize( tsn * mapN );\\n\\n\t}\\n\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/lights_phong_pars_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'lights_phong_pars_vertex'] = \"#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP ) || defined( USE_ENVMAP )\\n\\n\tvarying vec3 vWorldPosition;\\n\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/lightmap_pars_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'lightmap_pars_fragment'] = \"#ifdef USE_LIGHTMAP\\n\\n\tvarying vec2 vUv2;\\n\tuniform sampler2D lightMap;\\n\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'shadowmap_vertex'] = \"#ifdef USE_SHADOWMAP\\n\\n\tfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\\n\\n\t\tvShadowCoord[ i ] = shadowMatrix[ i ] * worldPosition;\\n\\n\t}\\n\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/lights_phong_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'lights_phong_vertex'] = \"#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP ) || defined( USE_ENVMAP )\\n\\n\tvWorldPosition = worldPosition.xyz;\\n\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/map_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'map_fragment'] = \"#ifdef USE_MAP\\n\\n\tvec4 texelColor = texture2D( map, vUv );\\n\\n\t#ifdef GAMMA_INPUT\\n\\n\t\ttexelColor.xyz *= texelColor.xyz;\\n\\n\t#endif\\n\\n\tgl_FragColor = gl_FragColor * texelColor;\\n\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/lightmap_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'lightmap_vertex'] = \"#ifdef USE_LIGHTMAP\\n\\n\tvUv2 = uv2;\\n\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/map_particle_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'map_particle_fragment'] = \"#ifdef USE_MAP\\n\\n\tgl_FragColor = gl_FragColor * texture2D( map, vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y ) );\\n\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'color_pars_fragment'] = \"#ifdef USE_COLOR\\n\\n\tvarying vec3 vColor;\\n\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/color_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'color_vertex'] = \"#ifdef USE_COLOR\\n\\n\t#ifdef GAMMA_INPUT\\n\\n\t\tvColor = color * color;\\n\\n\t#else\\n\\n\t\tvColor = color;\\n\\n\t#endif\\n\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/skinning_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'skinning_vertex'] = \"#ifdef USE_SKINNING\\n\\n\t#ifdef USE_MORPHTARGETS\\n\\n\tvec4 skinVertex = bindMatrix * vec4( morphed, 1.0 );\\n\\n\t#else\\n\\n\tvec4 skinVertex = bindMatrix * vec4( position, 1.0 );\\n\\n\t#endif\\n\\n\tvec4 skinned = vec4( 0.0 );\\n\tskinned += boneMatX * skinVertex * skinWeight.x;\\n\tskinned += boneMatY * skinVertex * skinWeight.y;\\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\\n\tskinned += boneMatW * skinVertex * skinWeight.w;\\n\tskinned = bindMatrixInverse * skinned;\\n\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/envmap_pars_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'envmap_pars_vertex'] = \"#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP ) && ! defined( PHONG )\\n\\n\tvarying vec3 vReflect;\\n\\n\tuniform float refractionRatio;\\n\tuniform bool useRefract;\\n\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/linear_to_gamma_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'linear_to_gamma_fragment'] = \"#ifdef GAMMA_OUTPUT\\n\\n\tgl_FragColor.xyz = sqrt( gl_FragColor.xyz );\\n\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'color_pars_vertex'] = \"#ifdef USE_COLOR\\n\\n\tvarying vec3 vColor;\\n\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/lights_lambert_pars_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'lights_lambert_pars_vertex'] = \"uniform vec3 ambient;\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\n\\nuniform vec3 ambientLightColor;\\n\\n#if MAX_DIR_LIGHTS > 0\\n\\n\tuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\\n\tuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\\n\\n#endif\\n\\n#if MAX_HEMI_LIGHTS > 0\\n\\n\tuniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];\\n\tuniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];\\n\tuniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];\\n\\n#endif\\n\\n#if MAX_POINT_LIGHTS > 0\\n\\n\tuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\\n\tuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\\n\tuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\\n\\n#endif\\n\\n#if MAX_SPOT_LIGHTS > 0\\n\\n\tuniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];\\n\tuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];\\n\tuniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];\\n\tuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];\\n\tuniform float spotLightAngleCos[ MAX_SPOT_LIGHTS ];\\n\tuniform float spotLightExponent[ MAX_SPOT_LIGHTS ];\\n\\n#endif\\n\\n#ifdef WRAP_AROUND\\n\\n\tuniform vec3 wrapRGB;\\n\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/map_pars_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'map_pars_vertex'] = \"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP )\\n\\n\tvarying vec2 vUv;\\n\tuniform vec4 offsetRepeat;\\n\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/envmap_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'envmap_fragment'] = \"#ifdef USE_ENVMAP\\n\\n\tvec3 reflectVec;\\n\\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\n\\n\t\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\\n\\n\t\t// http://en.wikibooks.org/wiki/GLSL_Programming/Applying_Matrix_Transformations\\n\t\t// Transforming Normal Vectors with the Inverse Transformation\\n\\n\t\tvec3 worldNormal = normalize( vec3( vec4( normal, 0.0 ) * viewMatrix ) );\\n\\n\t\tif ( useRefract ) {\\n\\n\t\t\treflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\\n\\n\t\t} else { \\n\\n\t\t\treflectVec = reflect( cameraToVertex, worldNormal );\\n\\n\t\t}\\n\\n\t#else\\n\\n\t\treflectVec = vReflect;\\n\\n\t#endif\\n\\n\t#ifdef DOUBLE_SIDED\\n\\n\t\tfloat flipNormal = ( -1.0 + 2.0 * float( gl_FrontFacing ) );\\n\t\tvec4 cubeColor = textureCube( envMap, flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\\n\\n\t#else\\n\\n\t\tvec4 cubeColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\\n\\n\t#endif\\n\\n\t#ifdef GAMMA_INPUT\\n\\n\t\tcubeColor.xyz *= cubeColor.xyz;\\n\\n\t#endif\\n\\n\tif ( combine == 1 ) {\\n\\n\t\tgl_FragColor.xyz = mix( gl_FragColor.xyz, cubeColor.xyz, specularStrength * reflectivity );\\n\\n\t} else if ( combine == 2 ) {\\n\\n\t\tgl_FragColor.xyz += cubeColor.xyz * specularStrength * reflectivity;\\n\\n\t} else {\\n\\n\t\tgl_FragColor.xyz = mix( gl_FragColor.xyz, gl_FragColor.xyz * cubeColor.xyz, specularStrength * reflectivity );\\n\\n\t}\\n\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/specularmap_pars_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'specularmap_pars_fragment'] = \"#ifdef USE_SPECULARMAP\\n\\n\tuniform sampler2D specularMap;\\n\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'logdepthbuf_vertex'] = \"#ifdef USE_LOGDEPTHBUF\\n\\n\tgl_Position.z = log2(max(1e-6, gl_Position.w + 1.0)) * logDepthBufFC;\\n\\n\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\n\t\tvFragDepth = 1.0 + gl_Position.w;\\n\\n#else\\n\\n\t\tgl_Position.z = (gl_Position.z - 1.0) * gl_Position.w;\\n\\n\t#endif\\n\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'morphtarget_pars_vertex'] = \"#ifdef USE_MORPHTARGETS\\n\\n\t#ifndef USE_MORPHNORMALS\\n\\n\tuniform float morphTargetInfluences[ 8 ];\\n\\n\t#else\\n\\n\tuniform float morphTargetInfluences[ 4 ];\\n\\n\t#endif\\n\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/specularmap_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'specularmap_fragment'] = \"float specularStrength;\\n\\n#ifdef USE_SPECULARMAP\\n\\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\\n\tspecularStrength = texelSpecular.r;\\n\\n#else\\n\\n\tspecularStrength = 1.0;\\n\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/fog_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'fog_fragment'] = \"#ifdef USE_FOG\\n\\n\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\n\t\tfloat depth = gl_FragDepthEXT / gl_FragCoord.w;\\n\\n\t#else\\n\\n\t\tfloat depth = gl_FragCoord.z / gl_FragCoord.w;\\n\\n\t#endif\\n\\n\t#ifdef FOG_EXP2\\n\\n\t\tconst float LOG2 = 1.442695;\\n\t\tfloat fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\\n\t\tfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\\n\\n\t#else\\n\\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, depth );\\n\\n\t#endif\\n\t\\n\tgl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\\n\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'bumpmap_pars_fragment'] = \"#ifdef USE_BUMPMAP\\n\\n\tuniform sampler2D bumpMap;\\n\tuniform float bumpScale;\\n\\n\t\t\t// Derivative maps - bump mapping unparametrized surfaces by Morten Mikkelsen\\n\t\t\t//\thttp://mmikkelsen3d.blogspot.sk/2011/07/derivative-maps.html\\n\\n\t\t\t// Evaluate the derivative of the height w.r.t. screen-space using forward differencing (listing 2)\\n\\n\tvec2 dHdxy_fwd() {\\n\\n\t\tvec2 dSTdx = dFdx( vUv );\\n\t\tvec2 dSTdy = dFdy( vUv );\\n\\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\\n\\n\t\treturn vec2( dBx, dBy );\\n\\n\t}\\n\\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\\n\\n\t\tvec3 vSigmaX = dFdx( surf_pos );\\n\t\tvec3 vSigmaY = dFdy( surf_pos );\\n\t\tvec3 vN = surf_norm;\t\t// normalized\\n\\n\t\tvec3 R1 = cross( vSigmaY, vN );\\n\t\tvec3 R2 = cross( vN, vSigmaX );\\n\\n\t\tfloat fDet = dot( vSigmaX, R1 );\\n\\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\\n\\n\t}\\n\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'defaultnormal_vertex'] = \"vec3 objectNormal;\\n\\n#ifdef USE_SKINNING\\n\\n\tobjectNormal = skinnedNormal.xyz;\\n\\n#endif\\n\\n#if !defined( USE_SKINNING ) && defined( USE_MORPHNORMALS )\\n\\n\tobjectNormal = morphedNormal;\\n\\n#endif\\n\\n#if !defined( USE_SKINNING ) && ! defined( USE_MORPHNORMALS )\\n\\n\tobjectNormal = normal;\\n\\n#endif\\n\\n#ifdef FLIP_SIDED\\n\\n\tobjectNormal = -objectNormal;\\n\\n#endif\\n\\nvec3 transformedNormal = normalMatrix * objectNormal;\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'lights_phong_pars_fragment'] = \"uniform vec3 ambientLightColor;\\n\\n#if MAX_DIR_LIGHTS > 0\\n\\n\tuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\\n\tuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\\n\\n#endif\\n\\n#if MAX_HEMI_LIGHTS > 0\\n\\n\tuniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];\\n\tuniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];\\n\tuniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];\\n\\n#endif\\n\\n#if MAX_POINT_LIGHTS > 0\\n\\n\tuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\\n\\n\tuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\\n\tuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\\n\\n#endif\\n\\n#if MAX_SPOT_LIGHTS > 0\\n\\n\tuniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];\\n\tuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];\\n\tuniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];\\n\tuniform float spotLightAngleCos[ MAX_SPOT_LIGHTS ];\\n\tuniform float spotLightExponent[ MAX_SPOT_LIGHTS ];\\n\\n\tuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];\\n\\n#endif\\n\\n#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP ) || defined( USE_ENVMAP )\\n\\n\tvarying vec3 vWorldPosition;\\n\\n#endif\\n\\n#ifdef WRAP_AROUND\\n\\n\tuniform vec3 wrapRGB;\\n\\n#endif\\n\\nvarying vec3 vViewPosition;\\nvarying vec3 vNormal;\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/skinbase_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'skinbase_vertex'] = \"#ifdef USE_SKINNING\\n\\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\\n\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/map_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'map_vertex'] = \"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP )\\n\\n\tvUv = uv * offsetRepeat.zw + offsetRepeat.xy;\\n\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'lightmap_fragment'] = \"#ifdef USE_LIGHTMAP\\n\\n\tgl_FragColor = gl_FragColor * texture2D( lightMap, vUv2 );\\n\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'shadowmap_pars_vertex'] = \"#ifdef USE_SHADOWMAP\\n\\n\tvarying vec4 vShadowCoord[ MAX_SHADOWS ];\\n\tuniform mat4 shadowMatrix[ MAX_SHADOWS ];\\n\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/color_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'color_fragment'] = \"#ifdef USE_COLOR\\n\\n\tgl_FragColor = gl_FragColor * vec4( vColor, 1.0 );\\n\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/morphtarget_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'morphtarget_vertex'] = \"#ifdef USE_MORPHTARGETS\\n\\n\tvec3 morphed = vec3( 0.0 );\\n\tmorphed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\\n\tmorphed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\\n\tmorphed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\\n\tmorphed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\\n\\n\t#ifndef USE_MORPHNORMALS\\n\\n\tmorphed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\\n\tmorphed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\\n\tmorphed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\\n\tmorphed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\\n\\n\t#endif\\n\\n\tmorphed += position;\\n\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/envmap_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'envmap_vertex'] = \"#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP ) && ! defined( PHONG )\\n\\n\tvec3 worldNormal = mat3( modelMatrix[ 0 ].xyz, modelMatrix[ 1 ].xyz, modelMatrix[ 2 ].xyz ) * objectNormal;\\n\tworldNormal = normalize( worldNormal );\\n\\n\tvec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\\n\\n\tif ( useRefract ) {\\n\\n\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\\n\\n\t} else {\\n\\n\t\tvReflect = reflect( cameraToVertex, worldNormal );\\n\\n\t}\\n\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/shadowmap_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'shadowmap_fragment'] = \"#ifdef USE_SHADOWMAP\\n\\n\t#ifdef SHADOWMAP_DEBUG\\n\\n\t\tvec3 frustumColors[3];\\n\t\tfrustumColors[0] = vec3( 1.0, 0.5, 0.0 );\\n\t\tfrustumColors[1] = vec3( 0.0, 1.0, 0.8 );\\n\t\tfrustumColors[2] = vec3( 0.0, 0.5, 1.0 );\\n\\n\t#endif\\n\\n\t#ifdef SHADOWMAP_CASCADE\\n\\n\t\tint inFrustumCount = 0;\\n\\n\t#endif\\n\\n\tfloat fDepth;\\n\tvec3 shadowColor = vec3( 1.0 );\\n\\n\tfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\\n\\n\t\tvec3 shadowCoord = vShadowCoord[ i ].xyz / vShadowCoord[ i ].w;\\n\\n\t\t\t\t// if ( something && something ) breaks ATI OpenGL shader compiler\\n\t\t\t\t// if ( all( something, something ) ) using this instead\\n\\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\\n\t\tbool inFrustum = all( inFrustumVec );\\n\\n\t\t\t\t// don't shadow pixels outside of light frustum\\n\t\t\t\t// use just first frustum (for cascades)\\n\t\t\t\t// don't shadow pixels behind far plane of light frustum\\n\\n\t\t#ifdef SHADOWMAP_CASCADE\\n\\n\t\t\tinFrustumCount += int( inFrustum );\\n\t\t\tbvec3 frustumTestVec = bvec3( inFrustum, inFrustumCount == 1, shadowCoord.z <= 1.0 );\\n\\n\t\t#else\\n\\n\t\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\\n\\n\t\t#endif\\n\\n\t\tbool frustumTest = all( frustumTestVec );\\n\\n\t\tif ( frustumTest ) {\\n\\n\t\t\tshadowCoord.z += shadowBias[ i ];\\n\\n\t\t\t#if defined( SHADOWMAP_TYPE_PCF )\\n\\n\t\t\t\t\t\t// Percentage-close filtering\\n\t\t\t\t\t\t// (9 pixel kernel)\\n\t\t\t\t\t\t// http://fabiensanglard.net/shadowmappingPCF/\\n\\n\t\t\t\tfloat shadow = 0.0;\\n\\n\t\t/*\\n\t\t\t\t\t\t// nested loops breaks shader compiler / validator on some ATI cards when using OpenGL\\n\t\t\t\t\t\t// must enroll loop manually\\n\\n\t\t\t\tfor ( float y = -1.25; y <= 1.25; y += 1.25 )\\n\t\t\t\t\tfor ( float x = -1.25; x <= 1.25; x += 1.25 ) {\\n\\n\t\t\t\t\t\tvec4 rgbaDepth = texture2D( shadowMap[ i ], vec2( x * xPixelOffset, y * yPixelOffset ) + shadowCoord.xy );\\n\\n\t\t\t\t\t\t\t\t// doesn't seem to produce any noticeable visual difference compared to simple texture2D lookup\\n\t\t\t\t\t\t\t\t//vec4 rgbaDepth = texture2DProj( shadowMap[ i ], vec4( vShadowCoord[ i ].w * ( vec2( x * xPixelOffset, y * yPixelOffset ) + shadowCoord.xy ), 0.05, vShadowCoord[ i ].w ) );\\n\\n\t\t\t\t\t\tfloat fDepth = unpackDepth( rgbaDepth );\\n\\n\t\t\t\t\t\tif ( fDepth < shadowCoord.z )\\n\t\t\t\t\t\t\tshadow += 1.0;\\n\\n\t\t\t\t}\\n\\n\t\t\t\tshadow /= 9.0;\\n\\n\t\t*/\\n\\n\t\t\t\tconst float shadowDelta = 1.0 / 9.0;\\n\\n\t\t\t\tfloat xPixelOffset = 1.0 / shadowMapSize[ i ].x;\\n\t\t\t\tfloat yPixelOffset = 1.0 / shadowMapSize[ i ].y;\\n\\n\t\t\t\tfloat dx0 = -1.25 * xPixelOffset;\\n\t\t\t\tfloat dy0 = -1.25 * yPixelOffset;\\n\t\t\t\tfloat dx1 = 1.25 * xPixelOffset;\\n\t\t\t\tfloat dy1 = 1.25 * yPixelOffset;\\n\\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy0 ) ) );\\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\\n\\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy0 ) ) );\\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\\n\\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy0 ) ) );\\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\\n\\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, 0.0 ) ) );\\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\\n\\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy ) );\\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\\n\\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, 0.0 ) ) );\\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\\n\\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy1 ) ) );\\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\\n\\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy1 ) ) );\\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\\n\\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy1 ) ) );\\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\\n\\n\t\t\t\tshadowColor = shadowColor * vec3( ( 1.0 - shadowDarkness[ i ] * shadow ) );\\n\\n\t\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\\n\\n\t\t\t\t\t\t// Percentage-close filtering\\n\t\t\t\t\t\t// (9 pixel kernel)\\n\t\t\t\t\t\t// http://fabiensanglard.net/shadowmappingPCF/\\n\\n\t\t\t\tfloat shadow = 0.0;\\n\\n\t\t\t\tfloat xPixelOffset = 1.0 / shadowMapSize[ i ].x;\\n\t\t\t\tfloat yPixelOffset = 1.0 / shadowMapSize[ i ].y;\\n\\n\t\t\t\tfloat dx0 = -1.0 * xPixelOffset;\\n\t\t\t\tfloat dy0 = -1.0 * yPixelOffset;\\n\t\t\t\tfloat dx1 = 1.0 * xPixelOffset;\\n\t\t\t\tfloat dy1 = 1.0 * yPixelOffset;\\n\\n\t\t\t\tmat3 shadowKernel;\\n\t\t\t\tmat3 depthKernel;\\n\\n\t\t\t\tdepthKernel[0][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy0 ) ) );\\n\t\t\t\tdepthKernel[0][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, 0.0 ) ) );\\n\t\t\t\tdepthKernel[0][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy1 ) ) );\\n\t\t\t\tdepthKernel[1][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy0 ) ) );\\n\t\t\t\tdepthKernel[1][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy ) );\\n\t\t\t\tdepthKernel[1][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy1 ) ) );\\n\t\t\t\tdepthKernel[2][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy0 ) ) );\\n\t\t\t\tdepthKernel[2][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, 0.0 ) ) );\\n\t\t\t\tdepthKernel[2][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy1 ) ) );\\n\\n\t\t\t\tvec3 shadowZ = vec3( shadowCoord.z );\\n\t\t\t\tshadowKernel[0] = vec3(lessThan(depthKernel[0], shadowZ ));\\n\t\t\t\tshadowKernel[0] *= vec3(0.25);\\n\\n\t\t\t\tshadowKernel[1] = vec3(lessThan(depthKernel[1], shadowZ ));\\n\t\t\t\tshadowKernel[1] *= vec3(0.25);\\n\\n\t\t\t\tshadowKernel[2] = vec3(lessThan(depthKernel[2], shadowZ ));\\n\t\t\t\tshadowKernel[2] *= vec3(0.25);\\n\\n\t\t\t\tvec2 fractionalCoord = 1.0 - fract( shadowCoord.xy * shadowMapSize[i].xy );\\n\\n\t\t\t\tshadowKernel[0] = mix( shadowKernel[1], shadowKernel[0], fractionalCoord.x );\\n\t\t\t\tshadowKernel[1] = mix( shadowKernel[2], shadowKernel[1], fractionalCoord.x );\\n\\n\t\t\t\tvec4 shadowValues;\\n\t\t\t\tshadowValues.x = mix( shadowKernel[0][1], shadowKernel[0][0], fractionalCoord.y );\\n\t\t\t\tshadowValues.y = mix( shadowKernel[0][2], shadowKernel[0][1], fractionalCoord.y );\\n\t\t\t\tshadowValues.z = mix( shadowKernel[1][1], shadowKernel[1][0], fractionalCoord.y );\\n\t\t\t\tshadowValues.w = mix( shadowKernel[1][2], shadowKernel[1][1], fractionalCoord.y );\\n\\n\t\t\t\tshadow = dot( shadowValues, vec4( 1.0 ) );\\n\\n\t\t\t\tshadowColor = shadowColor * vec3( ( 1.0 - shadowDarkness[ i ] * shadow ) );\\n\\n\t\t\t#else\\n\\n\t\t\t\tvec4 rgbaDepth = texture2D( shadowMap[ i ], shadowCoord.xy );\\n\t\t\t\tfloat fDepth = unpackDepth( rgbaDepth );\\n\\n\t\t\t\tif ( fDepth < shadowCoord.z )\\n\\n\t\t// spot with multiple shadows is darker\\n\\n\t\t\t\t\tshadowColor = shadowColor * vec3( 1.0 - shadowDarkness[ i ] );\\n\\n\t\t// spot with multiple shadows has the same color as single shadow spot\\n\\n\t\t// \t\t\t\t\tshadowColor = min( shadowColor, vec3( shadowDarkness[ i ] ) );\\n\\n\t\t\t#endif\\n\\n\t\t}\\n\\n\\n\t\t#ifdef SHADOWMAP_DEBUG\\n\\n\t\t\t#ifdef SHADOWMAP_CASCADE\\n\\n\t\t\t\tif ( inFrustum && inFrustumCount == 1 ) gl_FragColor.xyz *= frustumColors[ i ];\\n\\n\t\t\t#else\\n\\n\t\t\t\tif ( inFrustum ) gl_FragColor.xyz *= frustumColors[ i ];\\n\\n\t\t\t#endif\\n\\n\t\t#endif\\n\\n\t}\\n\\n\t#ifdef GAMMA_OUTPUT\\n\\n\t\tshadowColor *= shadowColor;\\n\\n\t#endif\\n\\n\tgl_FragColor.xyz = gl_FragColor.xyz * shadowColor;\\n\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'worldpos_vertex'] = \"#if defined( USE_ENVMAP ) || defined( PHONG ) || defined( LAMBERT ) || defined ( USE_SHADOWMAP )\\n\\n\t#ifdef USE_SKINNING\\n\\n\t\tvec4 worldPosition = modelMatrix * skinned;\\n\\n\t#endif\\n\\n\t#if defined( USE_MORPHTARGETS ) && ! defined( USE_SKINNING )\\n\\n\t\tvec4 worldPosition = modelMatrix * vec4( morphed, 1.0 );\\n\\n\t#endif\\n\\n\t#if ! defined( USE_MORPHTARGETS ) && ! defined( USE_SKINNING )\\n\\n\t\tvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\\n\\n\t#endif\\n\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'shadowmap_pars_fragment'] = \"#ifdef USE_SHADOWMAP\\n\\n\tuniform sampler2D shadowMap[ MAX_SHADOWS ];\\n\tuniform vec2 shadowMapSize[ MAX_SHADOWS ];\\n\\n\tuniform float shadowDarkness[ MAX_SHADOWS ];\\n\tuniform float shadowBias[ MAX_SHADOWS ];\\n\\n\tvarying vec4 vShadowCoord[ MAX_SHADOWS ];\\n\\n\tfloat unpackDepth( const in vec4 rgba_depth ) {\\n\\n\t\tconst vec4 bit_shift = vec4( 1.0 / ( 256.0 * 256.0 * 256.0 ), 1.0 / ( 256.0 * 256.0 ), 1.0 / 256.0, 1.0 );\\n\t\tfloat depth = dot( rgba_depth, bit_shift );\\n\t\treturn depth;\\n\\n\t}\\n\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'skinning_pars_vertex'] = \"#ifdef USE_SKINNING\\n\\n\tuniform mat4 bindMatrix;\\n\tuniform mat4 bindMatrixInverse;\\n\\n\t#ifdef BONE_TEXTURE\\n\\n\t\tuniform sampler2D boneTexture;\\n\t\tuniform int boneTextureWidth;\\n\t\tuniform int boneTextureHeight;\\n\\n\t\tmat4 getBoneMatrix( const in float i ) {\\n\\n\t\t\tfloat j = i * 4.0;\\n\t\t\tfloat x = mod( j, float( boneTextureWidth ) );\\n\t\t\tfloat y = floor( j / float( boneTextureWidth ) );\\n\\n\t\t\tfloat dx = 1.0 / float( boneTextureWidth );\\n\t\t\tfloat dy = 1.0 / float( boneTextureHeight );\\n\\n\t\t\ty = dy * ( y + 0.5 );\\n\\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\\n\\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\\n\\n\t\t\treturn bone;\\n\\n\t\t}\\n\\n\t#else\\n\\n\t\tuniform mat4 boneGlobalMatrices[ MAX_BONES ];\\n\\n\t\tmat4 getBoneMatrix( const in float i ) {\\n\\n\t\t\tmat4 bone = boneGlobalMatrices[ int(i) ];\\n\t\t\treturn bone;\\n\\n\t\t}\\n\\n\t#endif\\n\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'logdepthbuf_pars_fragment'] = \"#ifdef USE_LOGDEPTHBUF\\n\\n\tuniform float logDepthBufFC;\\n\\n\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\n\t\t#extension GL_EXT_frag_depth : enable\\n\t\tvarying float vFragDepth;\\n\\n\t#endif\\n\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'alphamap_fragment'] = \"#ifdef USE_ALPHAMAP\\n\\n\tgl_FragColor.a *= texture2D( alphaMap, vUv ).g;\\n\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/alphamap_pars_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'alphamap_pars_fragment'] = \"#ifdef USE_ALPHAMAP\\n\\n\tuniform sampler2D alphaMap;\\n\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/UniformsUtils.js\r\n\r\n/**\r\n * Uniform Utilities\r\n */\r\n\r\nTHREE.UniformsUtils = {\r\n\r\n\tmerge: function ( uniforms ) {\r\n\r\n\t\tvar merged = {};\r\n\r\n\t\tfor ( var u = 0; u < uniforms.length; u ++ ) {\r\n\r\n\t\t\tvar tmp = this.clone( uniforms[ u ] );\r\n\r\n\t\t\tfor ( var p in tmp ) {\r\n\r\n\t\t\t\tmerged[ p ] = tmp[ p ];\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn merged;\r\n\r\n\t},\r\n\r\n\tclone: function ( uniforms_src ) {\r\n\r\n\t\tvar uniforms_dst = {};\r\n\r\n\t\tfor ( var u in uniforms_src ) {\r\n\r\n\t\t\tuniforms_dst[ u ] = {};\r\n\r\n\t\t\tfor ( var p in uniforms_src[ u ] ) {\r\n\r\n\t\t\t\tvar parameter_src = uniforms_src[ u ][ p ];\r\n\r\n\t\t\t\tif ( parameter_src instanceof THREE.Color ||\r\n\t\t\t\t\t parameter_src instanceof THREE.Vector2 ||\r\n\t\t\t\t\t parameter_src instanceof THREE.Vector3 ||\r\n\t\t\t\t\t parameter_src instanceof THREE.Vector4 ||\r\n\t\t\t\t\t parameter_src instanceof THREE.Matrix4 ||\r\n\t\t\t\t\t parameter_src instanceof THREE.Texture ) {\r\n\r\n\t\t\t\t\tuniforms_dst[ u ][ p ] = parameter_src.clone();\r\n\r\n\t\t\t\t} else if ( parameter_src instanceof Array ) {\r\n\r\n\t\t\t\t\tuniforms_dst[ u ][ p ] = parameter_src.slice();\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tuniforms_dst[ u ][ p ] = parameter_src;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn uniforms_dst;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/renderers/shaders/UniformsLib.js\r\n\r\n/**\r\n * Uniforms library for shared webgl shaders\r\n */\r\n\r\nTHREE.UniformsLib = {\r\n\r\n\tcommon: {\r\n\r\n\t\t\"diffuse\" : { type: \"c\", value: new THREE.Color( 0xeeeeee ) },\r\n\t\t\"opacity\" : { type: \"f\", value: 1.0 },\r\n\r\n\t\t\"map\" : { type: \"t\", value: null },\r\n\t\t\"offsetRepeat\" : { type: \"v4\", value: new THREE.Vector4( 0, 0, 1, 1 ) },\r\n\r\n\t\t\"lightMap\" : { type: \"t\", value: null },\r\n\t\t\"specularMap\" : { type: \"t\", value: null },\r\n\t\t\"alphaMap\" : { type: \"t\", value: null },\r\n\r\n\t\t\"envMap\" : { type: \"t\", value: null },\r\n\t\t\"flipEnvMap\" : { type: \"f\", value: - 1 },\r\n\t\t\"useRefract\" : { type: \"i\", value: 0 },\r\n\t\t\"reflectivity\" : { type: \"f\", value: 1.0 },\r\n\t\t\"refractionRatio\" : { type: \"f\", value: 0.98 },\r\n\t\t\"combine\" : { type: \"i\", value: 0 },\r\n\r\n\t\t\"morphTargetInfluences\" : { type: \"f\", value: 0 }\r\n\r\n\t},\r\n\r\n\tbump: {\r\n\r\n\t\t\"bumpMap\" : { type: \"t\", value: null },\r\n\t\t\"bumpScale\" : { type: \"f\", value: 1 }\r\n\r\n\t},\r\n\r\n\tnormalmap: {\r\n\r\n\t\t\"normalMap\" : { type: \"t\", value: null },\r\n\t\t\"normalScale\" : { type: \"v2\", value: new THREE.Vector2( 1, 1 ) }\r\n\t},\r\n\r\n\tfog : {\r\n\r\n\t\t\"fogDensity\" : { type: \"f\", value: 0.00025 },\r\n\t\t\"fogNear\" : { type: \"f\", value: 1 },\r\n\t\t\"fogFar\" : { type: \"f\", value: 2000 },\r\n\t\t\"fogColor\" : { type: \"c\", value: new THREE.Color( 0xffffff ) }\r\n\r\n\t},\r\n\r\n\tlights: {\r\n\r\n\t\t\"ambientLightColor\" : { type: \"fv\", value: [] },\r\n\r\n\t\t\"directionalLightDirection\" : { type: \"fv\", value: [] },\r\n\t\t\"directionalLightColor\" : { type: \"fv\", value: [] },\r\n\r\n\t\t\"hemisphereLightDirection\" : { type: \"fv\", value: [] },\r\n\t\t\"hemisphereLightSkyColor\" : { type: \"fv\", value: [] },\r\n\t\t\"hemisphereLightGroundColor\" : { type: \"fv\", value: [] },\r\n\r\n\t\t\"pointLightColor\" : { type: \"fv\", value: [] },\r\n\t\t\"pointLightPosition\" : { type: \"fv\", value: [] },\r\n\t\t\"pointLightDistance\" : { type: \"fv1\", value: [] },\r\n\r\n\t\t\"spotLightColor\" : { type: \"fv\", value: [] },\r\n\t\t\"spotLightPosition\" : { type: \"fv\", value: [] },\r\n\t\t\"spotLightDirection\" : { type: \"fv\", value: [] },\r\n\t\t\"spotLightDistance\" : { type: \"fv1\", value: [] },\r\n\t\t\"spotLightAngleCos\" : { type: \"fv1\", value: [] },\r\n\t\t\"spotLightExponent\" : { type: \"fv1\", value: [] }\r\n\r\n\t},\r\n\r\n\tparticle: {\r\n\r\n\t\t\"psColor\" : { type: \"c\", value: new THREE.Color( 0xeeeeee ) },\r\n\t\t\"opacity\" : { type: \"f\", value: 1.0 },\r\n\t\t\"size\" : { type: \"f\", value: 1.0 },\r\n\t\t\"scale\" : { type: \"f\", value: 1.0 },\r\n\t\t\"map\" : { type: \"t\", value: null },\r\n\r\n\t\t\"fogDensity\" : { type: \"f\", value: 0.00025 },\r\n\t\t\"fogNear\" : { type: \"f\", value: 1 },\r\n\t\t\"fogFar\" : { type: \"f\", value: 2000 },\r\n\t\t\"fogColor\" : { type: \"c\", value: new THREE.Color( 0xffffff ) }\r\n\r\n\t},\r\n\r\n\tshadowmap: {\r\n\r\n\t\t\"shadowMap\": { type: \"tv\", value: [] },\r\n\t\t\"shadowMapSize\": { type: \"v2v\", value: [] },\r\n\r\n\t\t\"shadowBias\" : { type: \"fv1\", value: [] },\r\n\t\t\"shadowDarkness\": { type: \"fv1\", value: [] },\r\n\r\n\t\t\"shadowMatrix\" : { type: \"m4v\", value: [] }\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/renderers/shaders/ShaderLib.js\r\n\r\n/**\r\n * Webgl Shader Library for three.js\r\n *\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author mikael emtinger / http://gomo.se/\r\n */\r\n\r\n\r\nTHREE.ShaderLib = {\r\n\r\n\t'basic': {\r\n\r\n\t\tuniforms: THREE.UniformsUtils.merge( [\r\n\r\n\t\t\tTHREE.UniformsLib[ \"common\" ],\r\n\t\t\tTHREE.UniformsLib[ \"fog\" ],\r\n\t\t\tTHREE.UniformsLib[ \"shadowmap\" ]\r\n\r\n\t\t] ),\r\n\r\n\t\tvertexShader: [\r\n\r\n\t\t\tTHREE.ShaderChunk[ \"map_pars_vertex\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"lightmap_pars_vertex\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"envmap_pars_vertex\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"color_pars_vertex\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"morphtarget_pars_vertex\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"skinning_pars_vertex\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"shadowmap_pars_vertex\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"logdepthbuf_pars_vertex\" ],\r\n\r\n\t\t\t\"void main() {\",\r\n\r\n\t\t\t\tTHREE.ShaderChunk[ \"map_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"lightmap_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"color_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"skinbase_vertex\" ],\r\n\r\n\t\t\t\"\t#ifdef USE_ENVMAP\",\r\n\r\n\t\t\t\tTHREE.ShaderChunk[ \"morphnormal_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"skinnormal_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"defaultnormal_vertex\" ],\r\n\r\n\t\t\t\"\t#endif\",\r\n\r\n\t\t\t\tTHREE.ShaderChunk[ \"morphtarget_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"skinning_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"default_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"logdepthbuf_vertex\" ],\r\n\r\n\t\t\t\tTHREE.ShaderChunk[ \"worldpos_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"envmap_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"shadowmap_vertex\" ],\r\n\r\n\t\t\t\"}\"\r\n\r\n\t\t].join(\"\\n\"),\r\n\r\n\t\tfragmentShader: [\r\n\r\n\t\t\t\"uniform vec3 diffuse;\",\r\n\t\t\t\"uniform float opacity;\",\r\n\r\n\t\t\tTHREE.ShaderChunk[ \"color_pars_fragment\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"map_pars_fragment\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"alphamap_pars_fragment\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"lightmap_pars_fragment\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"envmap_pars_fragment\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"fog_pars_fragment\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"shadowmap_pars_fragment\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"specularmap_pars_fragment\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"logdepthbuf_pars_fragment\" ],\r\n\r\n\t\t\t\"void main() {\",\r\n\r\n\t\t\t\"\tgl_FragColor = vec4( diffuse, opacity );\",\r\n\r\n\t\t\t\tTHREE.ShaderChunk[ \"logdepthbuf_fragment\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"map_fragment\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"alphamap_fragment\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"alphatest_fragment\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"specularmap_fragment\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"lightmap_fragment\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"color_fragment\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"envmap_fragment\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"shadowmap_fragment\" ],\r\n\r\n\t\t\t\tTHREE.ShaderChunk[ \"linear_to_gamma_fragment\" ],\r\n\r\n\t\t\t\tTHREE.ShaderChunk[ \"fog_fragment\" ],\r\n\r\n\t\t\t\"}\"\r\n\r\n\t\t].join(\"\\n\")\r\n\r\n\t},\r\n\r\n\t'lambert': {\r\n\r\n\t\tuniforms: THREE.UniformsUtils.merge( [\r\n\r\n\t\t\tTHREE.UniformsLib[ \"common\" ],\r\n\t\t\tTHREE.UniformsLib[ \"fog\" ],\r\n\t\t\tTHREE.UniformsLib[ \"lights\" ],\r\n\t\t\tTHREE.UniformsLib[ \"shadowmap\" ],\r\n\r\n\t\t\t{\r\n\t\t\t\t\"ambient\" : { type: \"c\", value: new THREE.Color( 0xffffff ) },\r\n\t\t\t\t\"emissive\" : { type: \"c\", value: new THREE.Color( 0x000000 ) },\r\n\t\t\t\t\"wrapRGB\" : { type: \"v3\", value: new THREE.Vector3( 1, 1, 1 ) }\r\n\t\t\t}\r\n\r\n\t\t] ),\r\n\r\n\t\tvertexShader: [\r\n\r\n\t\t\t\"#define LAMBERT\",\r\n\r\n\t\t\t\"varying vec3 vLightFront;\",\r\n\r\n\t\t\t\"#ifdef DOUBLE_SIDED\",\r\n\r\n\t\t\t\"\tvarying vec3 vLightBack;\",\r\n\r\n\t\t\t\"#endif\",\r\n\r\n\t\t\tTHREE.ShaderChunk[ \"map_pars_vertex\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"lightmap_pars_vertex\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"envmap_pars_vertex\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"lights_lambert_pars_vertex\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"color_pars_vertex\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"morphtarget_pars_vertex\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"skinning_pars_vertex\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"shadowmap_pars_vertex\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"logdepthbuf_pars_vertex\" ],\r\n\r\n\t\t\t\"void main() {\",\r\n\r\n\t\t\t\tTHREE.ShaderChunk[ \"map_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"lightmap_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"color_vertex\" ],\r\n\r\n\t\t\t\tTHREE.ShaderChunk[ \"morphnormal_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"skinbase_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"skinnormal_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"defaultnormal_vertex\" ],\r\n\r\n\t\t\t\tTHREE.ShaderChunk[ \"morphtarget_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"skinning_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"default_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"logdepthbuf_vertex\" ],\r\n\r\n\t\t\t\tTHREE.ShaderChunk[ \"worldpos_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"envmap_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"lights_lambert_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"shadowmap_vertex\" ],\r\n\r\n\t\t\t\"}\"\r\n\r\n\t\t].join(\"\\n\"),\r\n\r\n\t\tfragmentShader: [\r\n\r\n\t\t\t\"uniform float opacity;\",\r\n\r\n\t\t\t\"varying vec3 vLightFront;\",\r\n\r\n\t\t\t\"#ifdef DOUBLE_SIDED\",\r\n\r\n\t\t\t\"\tvarying vec3 vLightBack;\",\r\n\r\n\t\t\t\"#endif\",\r\n\r\n\t\t\tTHREE.ShaderChunk[ \"color_pars_fragment\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"map_pars_fragment\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"alphamap_pars_fragment\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"lightmap_pars_fragment\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"envmap_pars_fragment\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"fog_pars_fragment\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"shadowmap_pars_fragment\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"specularmap_pars_fragment\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"logdepthbuf_pars_fragment\" ],\r\n\r\n\t\t\t\"void main() {\",\r\n\r\n\t\t\t\"\tgl_FragColor = vec4( vec3( 1.0 ), opacity );\",\r\n\r\n\t\t\t\tTHREE.ShaderChunk[ \"logdepthbuf_fragment\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"map_fragment\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"alphamap_fragment\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"alphatest_fragment\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"specularmap_fragment\" ],\r\n\r\n\t\t\t\"\t#ifdef DOUBLE_SIDED\",\r\n\r\n\t\t\t\t\t//\"float isFront = float( gl_FrontFacing );\",\r\n\t\t\t\t\t//\"gl_FragColor.xyz *= isFront * vLightFront + ( 1.0 - isFront ) * vLightBack;\",\r\n\r\n\t\t\t\"\t\tif ( gl_FrontFacing )\",\r\n\t\t\t\"\t\t\tgl_FragColor.xyz *= vLightFront;\",\r\n\t\t\t\"\t\telse\",\r\n\t\t\t\"\t\t\tgl_FragColor.xyz *= vLightBack;\",\r\n\r\n\t\t\t\"\t#else\",\r\n\r\n\t\t\t\"\t\tgl_FragColor.xyz *= vLightFront;\",\r\n\r\n\t\t\t\"\t#endif\",\r\n\r\n\t\t\t\tTHREE.ShaderChunk[ \"lightmap_fragment\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"color_fragment\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"envmap_fragment\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"shadowmap_fragment\" ],\r\n\r\n\t\t\t\tTHREE.ShaderChunk[ \"linear_to_gamma_fragment\" ],\r\n\r\n\t\t\t\tTHREE.ShaderChunk[ \"fog_fragment\" ],\r\n\r\n\t\t\t\"}\"\r\n\r\n\t\t].join(\"\\n\")\r\n\r\n\t},\r\n\r\n\t'phong': {\r\n\r\n\t\tuniforms: THREE.UniformsUtils.merge( [\r\n\r\n\t\t\tTHREE.UniformsLib[ \"common\" ],\r\n\t\t\tTHREE.UniformsLib[ \"bump\" ],\r\n\t\t\tTHREE.UniformsLib[ \"normalmap\" ],\r\n\t\t\tTHREE.UniformsLib[ \"fog\" ],\r\n\t\t\tTHREE.UniformsLib[ \"lights\" ],\r\n\t\t\tTHREE.UniformsLib[ \"shadowmap\" ],\r\n\r\n\t\t\t{\r\n\t\t\t\t\"ambient\" : { type: \"c\", value: new THREE.Color( 0xffffff ) },\r\n\t\t\t\t\"emissive\" : { type: \"c\", value: new THREE.Color( 0x000000 ) },\r\n\t\t\t\t\"specular\" : { type: \"c\", value: new THREE.Color( 0x111111 ) },\r\n\t\t\t\t\"shininess\": { type: \"f\", value: 30 },\r\n\t\t\t\t\"wrapRGB\" : { type: \"v3\", value: new THREE.Vector3( 1, 1, 1 ) }\r\n\t\t\t}\r\n\r\n\t\t] ),\r\n\r\n\t\tvertexShader: [\r\n\r\n\t\t\t\"#define PHONG\",\r\n\r\n\t\t\t\"varying vec3 vViewPosition;\",\r\n\t\t\t\"varying vec3 vNormal;\",\r\n\r\n\t\t\tTHREE.ShaderChunk[ \"map_pars_vertex\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"lightmap_pars_vertex\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"envmap_pars_vertex\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"lights_phong_pars_vertex\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"color_pars_vertex\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"morphtarget_pars_vertex\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"skinning_pars_vertex\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"shadowmap_pars_vertex\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"logdepthbuf_pars_vertex\" ],\r\n\r\n\t\t\t\"void main() {\",\r\n\r\n\t\t\t\tTHREE.ShaderChunk[ \"map_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"lightmap_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"color_vertex\" ],\r\n\r\n\t\t\t\tTHREE.ShaderChunk[ \"morphnormal_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"skinbase_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"skinnormal_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"defaultnormal_vertex\" ],\r\n\r\n\t\t\t\"\tvNormal = normalize( transformedNormal );\",\r\n\r\n\t\t\t\tTHREE.ShaderChunk[ \"morphtarget_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"skinning_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"default_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"logdepthbuf_vertex\" ],\r\n\r\n\t\t\t\"\tvViewPosition = -mvPosition.xyz;\",\r\n\r\n\t\t\t\tTHREE.ShaderChunk[ \"worldpos_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"envmap_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"lights_phong_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"shadowmap_vertex\" ],\r\n\r\n\t\t\t\"}\"\r\n\r\n\t\t].join(\"\\n\"),\r\n\r\n\t\tfragmentShader: [\r\n\r\n\t\t\t\"#define PHONG\",\r\n\r\n\t\t\t\"uniform vec3 diffuse;\",\r\n\t\t\t\"uniform float opacity;\",\r\n\r\n\t\t\t\"uniform vec3 ambient;\",\r\n\t\t\t\"uniform vec3 emissive;\",\r\n\t\t\t\"uniform vec3 specular;\",\r\n\t\t\t\"uniform float shininess;\",\r\n\r\n\t\t\tTHREE.ShaderChunk[ \"color_pars_fragment\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"map_pars_fragment\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"alphamap_pars_fragment\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"lightmap_pars_fragment\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"envmap_pars_fragment\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"fog_pars_fragment\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"lights_phong_pars_fragment\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"shadowmap_pars_fragment\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"bumpmap_pars_fragment\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"normalmap_pars_fragment\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"specularmap_pars_fragment\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"logdepthbuf_pars_fragment\" ],\r\n\r\n\t\t\t\"void main() {\",\r\n\r\n\t\t\t\"\tgl_FragColor = vec4( vec3( 1.0 ), opacity );\",\r\n\r\n\t\t\t\tTHREE.ShaderChunk[ \"logdepthbuf_fragment\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"map_fragment\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"alphamap_fragment\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"alphatest_fragment\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"specularmap_fragment\" ],\r\n\r\n\t\t\t\tTHREE.ShaderChunk[ \"lights_phong_fragment\" ],\r\n\r\n\t\t\t\tTHREE.ShaderChunk[ \"lightmap_fragment\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"color_fragment\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"envmap_fragment\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"shadowmap_fragment\" ],\r\n\r\n\t\t\t\tTHREE.ShaderChunk[ \"linear_to_gamma_fragment\" ],\r\n\r\n\t\t\t\tTHREE.ShaderChunk[ \"fog_fragment\" ],\r\n\r\n\t\t\t\"}\"\r\n\r\n\t\t].join(\"\\n\")\r\n\r\n\t},\r\n\r\n\t'particle_basic': {\r\n\r\n\t\tuniforms: THREE.UniformsUtils.merge( [\r\n\r\n\t\t\tTHREE.UniformsLib[ \"particle\" ],\r\n\t\t\tTHREE.UniformsLib[ \"shadowmap\" ]\r\n\r\n\t\t] ),\r\n\r\n\t\tvertexShader: [\r\n\r\n\t\t\t\"uniform float size;\",\r\n\t\t\t\"uniform float scale;\",\r\n\r\n\t\t\tTHREE.ShaderChunk[ \"color_pars_vertex\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"shadowmap_pars_vertex\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"logdepthbuf_pars_vertex\" ],\r\n\r\n\t\t\t\"void main() {\",\r\n\r\n\t\t\t\tTHREE.ShaderChunk[ \"color_vertex\" ],\r\n\r\n\t\t\t\"\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\",\r\n\r\n\t\t\t\"\t#ifdef USE_SIZEATTENUATION\",\r\n\t\t\t\"\t\tgl_PointSize = size * ( scale / length( mvPosition.xyz ) );\",\r\n\t\t\t\"\t#else\",\r\n\t\t\t\"\t\tgl_PointSize = size;\",\r\n\t\t\t\"\t#endif\",\r\n\r\n\t\t\t\"\tgl_Position = projectionMatrix * mvPosition;\",\r\n\r\n\t\t\t\tTHREE.ShaderChunk[ \"logdepthbuf_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"worldpos_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"shadowmap_vertex\" ],\r\n\r\n\t\t\t\"}\"\r\n\r\n\t\t].join(\"\\n\"),\r\n\r\n\t\tfragmentShader: [\r\n\r\n\t\t\t\"uniform vec3 psColor;\",\r\n\t\t\t\"uniform float opacity;\",\r\n\r\n\t\t\tTHREE.ShaderChunk[ \"color_pars_fragment\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"map_particle_pars_fragment\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"fog_pars_fragment\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"shadowmap_pars_fragment\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"logdepthbuf_pars_fragment\" ],\r\n\r\n\t\t\t\"void main() {\",\r\n\r\n\t\t\t\"\tgl_FragColor = vec4( psColor, opacity );\",\r\n\r\n\t\t\t\tTHREE.ShaderChunk[ \"logdepthbuf_fragment\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"map_particle_fragment\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"alphatest_fragment\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"color_fragment\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"shadowmap_fragment\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"fog_fragment\" ],\r\n\r\n\t\t\t\"}\"\r\n\r\n\t\t].join(\"\\n\")\r\n\r\n\t},\r\n\r\n\t'dashed': {\r\n\r\n\t\tuniforms: THREE.UniformsUtils.merge( [\r\n\r\n\t\t\tTHREE.UniformsLib[ \"common\" ],\r\n\t\t\tTHREE.UniformsLib[ \"fog\" ],\r\n\r\n\t\t\t{\r\n\t\t\t\t\"scale\" : { type: \"f\", value: 1 },\r\n\t\t\t\t\"dashSize\" : { type: \"f\", value: 1 },\r\n\t\t\t\t\"totalSize\": { type: \"f\", value: 2 }\r\n\t\t\t}\r\n\r\n\t\t] ),\r\n\r\n\t\tvertexShader: [\r\n\r\n\t\t\t\"uniform float scale;\",\r\n\t\t\t\"attribute float lineDistance;\",\r\n\r\n\t\t\t\"varying float vLineDistance;\",\r\n\r\n\t\t\tTHREE.ShaderChunk[ \"color_pars_vertex\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"logdepthbuf_pars_vertex\" ],\r\n\r\n\t\t\t\"void main() {\",\r\n\r\n\t\t\t\tTHREE.ShaderChunk[ \"color_vertex\" ],\r\n\r\n\t\t\t\"\tvLineDistance = scale * lineDistance;\",\r\n\r\n\t\t\t\"\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\",\r\n\t\t\t\"\tgl_Position = projectionMatrix * mvPosition;\",\r\n\r\n\t\t\t\tTHREE.ShaderChunk[ \"logdepthbuf_vertex\" ],\r\n\r\n\t\t\t\"}\"\r\n\r\n\t\t].join(\"\\n\"),\r\n\r\n\t\tfragmentShader: [\r\n\r\n\t\t\t\"uniform vec3 diffuse;\",\r\n\t\t\t\"uniform float opacity;\",\r\n\r\n\t\t\t\"uniform float dashSize;\",\r\n\t\t\t\"uniform float totalSize;\",\r\n\r\n\t\t\t\"varying float vLineDistance;\",\r\n\r\n\t\t\tTHREE.ShaderChunk[ \"color_pars_fragment\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"fog_pars_fragment\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"logdepthbuf_pars_fragment\" ],\r\n\r\n\t\t\t\"void main() {\",\r\n\r\n\t\t\t\"\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\",\r\n\r\n\t\t\t\"\t\tdiscard;\",\r\n\r\n\t\t\t\"\t}\",\r\n\r\n\t\t\t\"\tgl_FragColor = vec4( diffuse, opacity );\",\r\n\r\n\t\t\t\tTHREE.ShaderChunk[ \"logdepthbuf_fragment\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"color_fragment\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"fog_fragment\" ],\r\n\r\n\t\t\t\"}\"\r\n\r\n\t\t].join(\"\\n\")\r\n\r\n\t},\r\n\r\n\t'depth': {\r\n\r\n\t\tuniforms: {\r\n\r\n\t\t\t\"mNear\": { type: \"f\", value: 1.0 },\r\n\t\t\t\"mFar\" : { type: \"f\", value: 2000.0 },\r\n\t\t\t\"opacity\" : { type: \"f\", value: 1.0 }\r\n\r\n\t\t},\r\n\r\n\t\tvertexShader: [\r\n\r\n\t\t\tTHREE.ShaderChunk[ \"morphtarget_pars_vertex\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"logdepthbuf_pars_vertex\" ],\r\n\r\n\t\t\t\"void main() {\",\r\n\r\n\t\t\t\tTHREE.ShaderChunk[ \"morphtarget_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"default_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"logdepthbuf_vertex\" ],\r\n\r\n\t\t\t\"}\"\r\n\r\n\t\t].join(\"\\n\"),\r\n\r\n\t\tfragmentShader: [\r\n\r\n\t\t\t\"uniform float mNear;\",\r\n\t\t\t\"uniform float mFar;\",\r\n\t\t\t\"uniform float opacity;\",\r\n\r\n\t\t\tTHREE.ShaderChunk[ \"logdepthbuf_pars_fragment\" ],\r\n\r\n\t\t\t\"void main() {\",\r\n\r\n\t\t\t\tTHREE.ShaderChunk[ \"logdepthbuf_fragment\" ],\r\n\r\n\t\t\t\"\t#ifdef USE_LOGDEPTHBUF_EXT\",\r\n\r\n\t\t\t\"\t\tfloat depth = gl_FragDepthEXT / gl_FragCoord.w;\",\r\n\r\n\t\t\t\"\t#else\",\r\n\r\n\t\t\t\"\t\tfloat depth = gl_FragCoord.z / gl_FragCoord.w;\",\r\n\r\n\t\t\t\"\t#endif\",\r\n\r\n\t\t\t\"\tfloat color = 1.0 - smoothstep( mNear, mFar, depth );\",\r\n\t\t\t\"\tgl_FragColor = vec4( vec3( color ), opacity );\",\r\n\r\n\t\t\t\"}\"\r\n\r\n\t\t].join(\"\\n\")\r\n\r\n\t},\r\n\r\n\t'normal': {\r\n\r\n\t\tuniforms: {\r\n\r\n\t\t\t\"opacity\" : { type: \"f\", value: 1.0 }\r\n\r\n\t\t},\r\n\r\n\t\tvertexShader: [\r\n\r\n\t\t\t\"varying vec3 vNormal;\",\r\n\r\n\t\t\tTHREE.ShaderChunk[ \"morphtarget_pars_vertex\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"logdepthbuf_pars_vertex\" ],\r\n\r\n\t\t\t\"void main() {\",\r\n\r\n\t\t\t\"\tvNormal = normalize( normalMatrix * normal );\",\r\n\r\n\t\t\t\tTHREE.ShaderChunk[ \"morphtarget_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"default_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"logdepthbuf_vertex\" ],\r\n\r\n\t\t\t\"}\"\r\n\r\n\t\t].join(\"\\n\"),\r\n\r\n\t\tfragmentShader: [\r\n\r\n\t\t\t\"uniform float opacity;\",\r\n\t\t\t\"varying vec3 vNormal;\",\r\n\r\n\t\t\tTHREE.ShaderChunk[ \"logdepthbuf_pars_fragment\" ],\r\n\r\n\t\t\t\"void main() {\",\r\n\r\n\t\t\t\"\tgl_FragColor = vec4( 0.5 * normalize( vNormal ) + 0.5, opacity );\",\r\n\r\n\t\t\t\tTHREE.ShaderChunk[ \"logdepthbuf_fragment\" ],\r\n\r\n\t\t\t\"}\"\r\n\r\n\t\t].join(\"\\n\")\r\n\r\n\t},\r\n\r\n\t/* -------------------------------------------------------------------------\r\n\t//\tNormal map shader\r\n\t//\t\t- Blinn-Phong\r\n\t//\t\t- normal + diffuse + specular + AO + displacement + reflection + shadow maps\r\n\t//\t\t- point and directional lights (use with \"lights: true\" material option)\r\n\t ------------------------------------------------------------------------- */\r\n\r\n\t'normalmap' : {\r\n\r\n\t\tuniforms: THREE.UniformsUtils.merge( [\r\n\r\n\t\t\tTHREE.UniformsLib[ \"fog\" ],\r\n\t\t\tTHREE.UniformsLib[ \"lights\" ],\r\n\t\t\tTHREE.UniformsLib[ \"shadowmap\" ],\r\n\r\n\t\t\t{\r\n\r\n\t\t\t\"enableAO\" : { type: \"i\", value: 0 },\r\n\t\t\t\"enableDiffuse\" : { type: \"i\", value: 0 },\r\n\t\t\t\"enableSpecular\" : { type: \"i\", value: 0 },\r\n\t\t\t\"enableReflection\" : { type: \"i\", value: 0 },\r\n\t\t\t\"enableDisplacement\": { type: \"i\", value: 0 },\r\n\r\n\t\t\t\"tDisplacement\": { type: \"t\", value: null }, // must go first as this is vertex texture\r\n\t\t\t\"tDiffuse\" : { type: \"t\", value: null },\r\n\t\t\t\"tCube\" : { type: \"t\", value: null },\r\n\t\t\t\"tNormal\" : { type: \"t\", value: null },\r\n\t\t\t\"tSpecular\" : { type: \"t\", value: null },\r\n\t\t\t\"tAO\" : { type: \"t\", value: null },\r\n\r\n\t\t\t\"uNormalScale\": { type: \"v2\", value: new THREE.Vector2( 1, 1 ) },\r\n\r\n\t\t\t\"uDisplacementBias\": { type: \"f\", value: 0.0 },\r\n\t\t\t\"uDisplacementScale\": { type: \"f\", value: 1.0 },\r\n\r\n\t\t\t\"diffuse\": { type: \"c\", value: new THREE.Color( 0xffffff ) },\r\n\t\t\t\"specular\": { type: \"c\", value: new THREE.Color( 0x111111 ) },\r\n\t\t\t\"ambient\": { type: \"c\", value: new THREE.Color( 0xffffff ) },\r\n\t\t\t\"shininess\": { type: \"f\", value: 30 },\r\n\t\t\t\"opacity\": { type: \"f\", value: 1 },\r\n\r\n\t\t\t\"useRefract\": { type: \"i\", value: 0 },\r\n\t\t\t\"refractionRatio\": { type: \"f\", value: 0.98 },\r\n\t\t\t\"reflectivity\": { type: \"f\", value: 0.5 },\r\n\r\n\t\t\t\"uOffset\" : { type: \"v2\", value: new THREE.Vector2( 0, 0 ) },\r\n\t\t\t\"uRepeat\" : { type: \"v2\", value: new THREE.Vector2( 1, 1 ) },\r\n\r\n\t\t\t\"wrapRGB\" : { type: \"v3\", value: new THREE.Vector3( 1, 1, 1 ) }\r\n\r\n\t\t\t}\r\n\r\n\t\t] ),\r\n\r\n\t\tfragmentShader: [\r\n\r\n\t\t\t\"uniform vec3 ambient;\",\r\n\t\t\t\"uniform vec3 diffuse;\",\r\n\t\t\t\"uniform vec3 specular;\",\r\n\t\t\t\"uniform float shininess;\",\r\n\t\t\t\"uniform float opacity;\",\r\n\r\n\t\t\t\"uniform bool enableDiffuse;\",\r\n\t\t\t\"uniform bool enableSpecular;\",\r\n\t\t\t\"uniform bool enableAO;\",\r\n\t\t\t\"uniform bool enableReflection;\",\r\n\r\n\t\t\t\"uniform sampler2D tDiffuse;\",\r\n\t\t\t\"uniform sampler2D tNormal;\",\r\n\t\t\t\"uniform sampler2D tSpecular;\",\r\n\t\t\t\"uniform sampler2D tAO;\",\r\n\r\n\t\t\t\"uniform samplerCube tCube;\",\r\n\r\n\t\t\t\"uniform vec2 uNormalScale;\",\r\n\r\n\t\t\t\"uniform bool useRefract;\",\r\n\t\t\t\"uniform float refractionRatio;\",\r\n\t\t\t\"uniform float reflectivity;\",\r\n\r\n\t\t\t\"varying vec3 vTangent;\",\r\n\t\t\t\"varying vec3 vBinormal;\",\r\n\t\t\t\"varying vec3 vNormal;\",\r\n\t\t\t\"varying vec2 vUv;\",\r\n\r\n\t\t\t\"uniform vec3 ambientLightColor;\",\r\n\r\n\t\t\t\"#if MAX_DIR_LIGHTS > 0\",\r\n\r\n\t\t\t\"\tuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\",\r\n\t\t\t\"\tuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\",\r\n\r\n\t\t\t\"#endif\",\r\n\r\n\t\t\t\"#if MAX_HEMI_LIGHTS > 0\",\r\n\r\n\t\t\t\"\tuniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];\",\r\n\t\t\t\"\tuniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];\",\r\n\t\t\t\"\tuniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];\",\r\n\r\n\t\t\t\"#endif\",\r\n\r\n\t\t\t\"#if MAX_POINT_LIGHTS > 0\",\r\n\r\n\t\t\t\"\tuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\",\r\n\t\t\t\"\tuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\",\r\n\t\t\t\"\tuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\",\r\n\r\n\t\t\t\"#endif\",\r\n\r\n\t\t\t\"#if MAX_SPOT_LIGHTS > 0\",\r\n\r\n\t\t\t\"\tuniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];\",\r\n\t\t\t\"\tuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];\",\r\n\t\t\t\"\tuniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];\",\r\n\t\t\t\"\tuniform float spotLightAngleCos[ MAX_SPOT_LIGHTS ];\",\r\n\t\t\t\"\tuniform float spotLightExponent[ MAX_SPOT_LIGHTS ];\",\r\n\t\t\t\"\tuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];\",\r\n\r\n\t\t\t\"#endif\",\r\n\r\n\t\t\t\"#ifdef WRAP_AROUND\",\r\n\r\n\t\t\t\"\tuniform vec3 wrapRGB;\",\r\n\r\n\t\t\t\"#endif\",\r\n\r\n\t\t\t\"varying vec3 vWorldPosition;\",\r\n\t\t\t\"varying vec3 vViewPosition;\",\r\n\r\n\t\t\tTHREE.ShaderChunk[ \"shadowmap_pars_fragment\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"fog_pars_fragment\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"logdepthbuf_pars_fragment\" ],\r\n\r\n\t\t\t\"void main() {\",\r\n\t\t\t\tTHREE.ShaderChunk[ \"logdepthbuf_fragment\" ],\r\n\r\n\t\t\t\"\tgl_FragColor = vec4( vec3( 1.0 ), opacity );\",\r\n\r\n\t\t\t\"\tvec3 specularTex = vec3( 1.0 );\",\r\n\r\n\t\t\t\"\tvec3 normalTex = texture2D( tNormal, vUv ).xyz * 2.0 - 1.0;\",\r\n\t\t\t\"\tnormalTex.xy *= uNormalScale;\",\r\n\t\t\t\"\tnormalTex = normalize( normalTex );\",\r\n\r\n\t\t\t\"\tif( enableDiffuse ) {\",\r\n\r\n\t\t\t\"\t\t#ifdef GAMMA_INPUT\",\r\n\r\n\t\t\t\"\t\t\tvec4 texelColor = texture2D( tDiffuse, vUv );\",\r\n\t\t\t\"\t\t\ttexelColor.xyz *= texelColor.xyz;\",\r\n\r\n\t\t\t\"\t\t\tgl_FragColor = gl_FragColor * texelColor;\",\r\n\r\n\t\t\t\"\t\t#else\",\r\n\r\n\t\t\t\"\t\t\tgl_FragColor = gl_FragColor * texture2D( tDiffuse, vUv );\",\r\n\r\n\t\t\t\"\t\t#endif\",\r\n\r\n\t\t\t\"\t}\",\r\n\r\n\t\t\t\"\tif( enableAO ) {\",\r\n\r\n\t\t\t\"\t\t#ifdef GAMMA_INPUT\",\r\n\r\n\t\t\t\"\t\t\tvec4 aoColor = texture2D( tAO, vUv );\",\r\n\t\t\t\"\t\t\taoColor.xyz *= aoColor.xyz;\",\r\n\r\n\t\t\t\"\t\t\tgl_FragColor.xyz = gl_FragColor.xyz * aoColor.xyz;\",\r\n\r\n\t\t\t\"\t\t#else\",\r\n\r\n\t\t\t\"\t\t\tgl_FragColor.xyz = gl_FragColor.xyz * texture2D( tAO, vUv ).xyz;\",\r\n\r\n\t\t\t\"\t\t#endif\",\r\n\r\n\t\t\t\"\t}\",\r\n\t\t\t\r\n\t\t\tTHREE.ShaderChunk[ \"alphatest_fragment\" ],\r\n\r\n\t\t\t\"\tif( enableSpecular )\",\r\n\t\t\t\"\t\tspecularTex = texture2D( tSpecular, vUv ).xyz;\",\r\n\r\n\t\t\t\"\tmat3 tsb = mat3( normalize( vTangent ), normalize( vBinormal ), normalize( vNormal ) );\",\r\n\t\t\t\"\tvec3 finalNormal = tsb * normalTex;\",\r\n\r\n\t\t\t\"\t#ifdef FLIP_SIDED\",\r\n\r\n\t\t\t\"\t\tfinalNormal = -finalNormal;\",\r\n\r\n\t\t\t\"\t#endif\",\r\n\r\n\t\t\t\"\tvec3 normal = normalize( finalNormal );\",\r\n\t\t\t\"\tvec3 viewPosition = normalize( vViewPosition );\",\r\n\r\n\t\t\t\t// point lights\r\n\r\n\t\t\t\"\t#if MAX_POINT_LIGHTS > 0\",\r\n\r\n\t\t\t\"\t\tvec3 pointDiffuse = vec3( 0.0 );\",\r\n\t\t\t\"\t\tvec3 pointSpecular = vec3( 0.0 );\",\r\n\r\n\t\t\t\"\t\tfor ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\",\r\n\r\n\t\t\t\"\t\t\tvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\",\r\n\t\t\t\"\t\t\tvec3 pointVector = lPosition.xyz + vViewPosition.xyz;\",\r\n\r\n\t\t\t\"\t\t\tfloat pointDistance = 1.0;\",\r\n\t\t\t\"\t\t\tif ( pointLightDistance[ i ] > 0.0 )\",\r\n\t\t\t\"\t\t\t\tpointDistance = 1.0 - min( ( length( pointVector ) / pointLightDistance[ i ] ), 1.0 );\",\r\n\r\n\t\t\t\"\t\t\tpointVector = normalize( pointVector );\",\r\n\r\n\t\t\t\t\t\t// diffuse\r\n\r\n\t\t\t\"\t\t\t#ifdef WRAP_AROUND\",\r\n\r\n\t\t\t\"\t\t\t\tfloat pointDiffuseWeightFull = max( dot( normal, pointVector ), 0.0 );\",\r\n\t\t\t\"\t\t\t\tfloat pointDiffuseWeightHalf = max( 0.5 * dot( normal, pointVector ) + 0.5, 0.0 );\",\r\n\r\n\t\t\t\"\t\t\t\tvec3 pointDiffuseWeight = mix( vec3( pointDiffuseWeightFull ), vec3( pointDiffuseWeightHalf ), wrapRGB );\",\r\n\r\n\t\t\t\"\t\t\t#else\",\r\n\r\n\t\t\t\"\t\t\t\tfloat pointDiffuseWeight = max( dot( normal, pointVector ), 0.0 );\",\r\n\r\n\t\t\t\"\t\t\t#endif\",\r\n\r\n\t\t\t\"\t\t\tpointDiffuse += pointDistance * pointLightColor[ i ] * diffuse * pointDiffuseWeight;\",\r\n\r\n\t\t\t\t\t\t// specular\r\n\r\n\t\t\t\"\t\t\tvec3 pointHalfVector = normalize( pointVector + viewPosition );\",\r\n\t\t\t\"\t\t\tfloat pointDotNormalHalf = max( dot( normal, pointHalfVector ), 0.0 );\",\r\n\t\t\t\"\t\t\tfloat pointSpecularWeight = specularTex.r * max( pow( pointDotNormalHalf, shininess ), 0.0 );\",\r\n\r\n\t\t\t\"\t\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;\",\r\n\r\n\t\t\t\"\t\t\tvec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( pointVector, pointHalfVector ), 0.0 ), 5.0 );\",\r\n\t\t\t\"\t\t\tpointSpecular += schlick * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * pointDistance * specularNormalization;\",\r\n\r\n\t\t\t\"\t\t}\",\r\n\r\n\t\t\t\"\t#endif\",\r\n\r\n\t\t\t\t// spot lights\r\n\r\n\t\t\t\"\t#if MAX_SPOT_LIGHTS > 0\",\r\n\r\n\t\t\t\"\t\tvec3 spotDiffuse = vec3( 0.0 );\",\r\n\t\t\t\"\t\tvec3 spotSpecular = vec3( 0.0 );\",\r\n\r\n\t\t\t\"\t\tfor ( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\",\r\n\r\n\t\t\t\"\t\t\tvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );\",\r\n\t\t\t\"\t\t\tvec3 spotVector = lPosition.xyz + vViewPosition.xyz;\",\r\n\r\n\t\t\t\"\t\t\tfloat spotDistance = 1.0;\",\r\n\t\t\t\"\t\t\tif ( spotLightDistance[ i ] > 0.0 )\",\r\n\t\t\t\"\t\t\t\tspotDistance = 1.0 - min( ( length( spotVector ) / spotLightDistance[ i ] ), 1.0 );\",\r\n\r\n\t\t\t\"\t\t\tspotVector = normalize( spotVector );\",\r\n\r\n\t\t\t\"\t\t\tfloat spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - vWorldPosition ) );\",\r\n\r\n\t\t\t\"\t\t\tif ( spotEffect > spotLightAngleCos[ i ] ) {\",\r\n\r\n\t\t\t\"\t\t\t\tspotEffect = max( pow( max( spotEffect, 0.0 ), spotLightExponent[ i ] ), 0.0 );\",\r\n\r\n\t\t\t\t\t\t\t// diffuse\r\n\r\n\t\t\t\"\t\t\t\t#ifdef WRAP_AROUND\",\r\n\r\n\t\t\t\"\t\t\t\t\tfloat spotDiffuseWeightFull = max( dot( normal, spotVector ), 0.0 );\",\r\n\t\t\t\"\t\t\t\t\tfloat spotDiffuseWeightHalf = max( 0.5 * dot( normal, spotVector ) + 0.5, 0.0 );\",\r\n\r\n\t\t\t\"\t\t\t\t\tvec3 spotDiffuseWeight = mix( vec3( spotDiffuseWeightFull ), vec3( spotDiffuseWeightHalf ), wrapRGB );\",\r\n\r\n\t\t\t\"\t\t\t\t#else\",\r\n\r\n\t\t\t\"\t\t\t\t\tfloat spotDiffuseWeight = max( dot( normal, spotVector ), 0.0 );\",\r\n\r\n\t\t\t\"\t\t\t\t#endif\",\r\n\r\n\t\t\t\"\t\t\t\tspotDiffuse += spotDistance * spotLightColor[ i ] * diffuse * spotDiffuseWeight * spotEffect;\",\r\n\r\n\t\t\t\t\t\t\t// specular\r\n\r\n\t\t\t\"\t\t\t\tvec3 spotHalfVector = normalize( spotVector + viewPosition );\",\r\n\t\t\t\"\t\t\t\tfloat spotDotNormalHalf = max( dot( normal, spotHalfVector ), 0.0 );\",\r\n\t\t\t\"\t\t\t\tfloat spotSpecularWeight = specularTex.r * max( pow( spotDotNormalHalf, shininess ), 0.0 );\",\r\n\r\n\t\t\t\"\t\t\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;\",\r\n\r\n\t\t\t\"\t\t\t\tvec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( spotVector, spotHalfVector ), 0.0 ), 5.0 );\",\r\n\t\t\t\"\t\t\t\tspotSpecular += schlick * spotLightColor[ i ] * spotSpecularWeight * spotDiffuseWeight * spotDistance * specularNormalization * spotEffect;\",\r\n\r\n\t\t\t\"\t\t\t}\",\r\n\r\n\t\t\t\"\t\t}\",\r\n\r\n\t\t\t\"\t#endif\",\r\n\r\n\t\t\t\t// directional lights\r\n\r\n\t\t\t\"\t#if MAX_DIR_LIGHTS > 0\",\r\n\r\n\t\t\t\"\t\tvec3 dirDiffuse = vec3( 0.0 );\",\r\n\t\t\t\"\t\tvec3 dirSpecular = vec3( 0.0 );\",\r\n\r\n\t\t\t\"\t\tfor( int i = 0; i < MAX_DIR_LIGHTS; i++ ) {\",\r\n\r\n\t\t\t\"\t\t\tvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\",\r\n\t\t\t\"\t\t\tvec3 dirVector = normalize( lDirection.xyz );\",\r\n\r\n\t\t\t\t\t\t// diffuse\r\n\r\n\t\t\t\"\t\t\t#ifdef WRAP_AROUND\",\r\n\r\n\t\t\t\"\t\t\t\tfloat directionalLightWeightingFull = max( dot( normal, dirVector ), 0.0 );\",\r\n\t\t\t\"\t\t\t\tfloat directionalLightWeightingHalf = max( 0.5 * dot( normal, dirVector ) + 0.5, 0.0 );\",\r\n\r\n\t\t\t\"\t\t\t\tvec3 dirDiffuseWeight = mix( vec3( directionalLightWeightingFull ), vec3( directionalLightWeightingHalf ), wrapRGB );\",\r\n\r\n\t\t\t\"\t\t\t#else\",\r\n\r\n\t\t\t\"\t\t\t\tfloat dirDiffuseWeight = max( dot( normal, dirVector ), 0.0 );\",\r\n\r\n\t\t\t\"\t\t\t#endif\",\r\n\r\n\t\t\t\"\t\t\tdirDiffuse += directionalLightColor[ i ] * diffuse * dirDiffuseWeight;\",\r\n\r\n\t\t\t\t\t\t// specular\r\n\r\n\t\t\t\"\t\t\tvec3 dirHalfVector = normalize( dirVector + viewPosition );\",\r\n\t\t\t\"\t\t\tfloat dirDotNormalHalf = max( dot( normal, dirHalfVector ), 0.0 );\",\r\n\t\t\t\"\t\t\tfloat dirSpecularWeight = specularTex.r * max( pow( dirDotNormalHalf, shininess ), 0.0 );\",\r\n\r\n\t\t\t\"\t\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;\",\r\n\r\n\t\t\t\"\t\t\tvec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( dirVector, dirHalfVector ), 0.0 ), 5.0 );\",\r\n\t\t\t\"\t\t\tdirSpecular += schlick * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight * specularNormalization;\",\r\n\r\n\t\t\t\"\t\t}\",\r\n\r\n\t\t\t\"\t#endif\",\r\n\r\n\t\t\t\t// hemisphere lights\r\n\r\n\t\t\t\"\t#if MAX_HEMI_LIGHTS > 0\",\r\n\r\n\t\t\t\"\t\tvec3 hemiDiffuse = vec3( 0.0 );\",\r\n\t\t\t\"\t\tvec3 hemiSpecular = vec3( 0.0 );\" ,\r\n\r\n\t\t\t\"\t\tfor( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {\",\r\n\r\n\t\t\t\"\t\t\tvec4 lDirection = viewMatrix * vec4( hemisphereLightDirection[ i ], 0.0 );\",\r\n\t\t\t\"\t\t\tvec3 lVector = normalize( lDirection.xyz );\",\r\n\r\n\t\t\t\t\t\t// diffuse\r\n\r\n\t\t\t\"\t\t\tfloat dotProduct = dot( normal, lVector );\",\r\n\t\t\t\"\t\t\tfloat hemiDiffuseWeight = 0.5 * dotProduct + 0.5;\",\r\n\r\n\t\t\t\"\t\t\tvec3 hemiColor = mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );\",\r\n\r\n\t\t\t\"\t\t\themiDiffuse += diffuse * hemiColor;\",\r\n\r\n\t\t\t\t\t\t// specular (sky light)\r\n\r\n\r\n\t\t\t\"\t\t\tvec3 hemiHalfVectorSky = normalize( lVector + viewPosition );\",\r\n\t\t\t\"\t\t\tfloat hemiDotNormalHalfSky = 0.5 * dot( normal, hemiHalfVectorSky ) + 0.5;\",\r\n\t\t\t\"\t\t\tfloat hemiSpecularWeightSky = specularTex.r * max( pow( max( hemiDotNormalHalfSky, 0.0 ), shininess ), 0.0 );\",\r\n\r\n\t\t\t\t\t\t// specular (ground light)\r\n\r\n\t\t\t\"\t\t\tvec3 lVectorGround = -lVector;\",\r\n\r\n\t\t\t\"\t\t\tvec3 hemiHalfVectorGround = normalize( lVectorGround + viewPosition );\",\r\n\t\t\t\"\t\t\tfloat hemiDotNormalHalfGround = 0.5 * dot( normal, hemiHalfVectorGround ) + 0.5;\",\r\n\t\t\t\"\t\t\tfloat hemiSpecularWeightGround = specularTex.r * max( pow( max( hemiDotNormalHalfGround, 0.0 ), shininess ), 0.0 );\",\r\n\r\n\t\t\t\"\t\t\tfloat dotProductGround = dot( normal, lVectorGround );\",\r\n\r\n\t\t\t\"\t\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;\",\r\n\r\n\t\t\t\"\t\t\tvec3 schlickSky = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVector, hemiHalfVectorSky ), 0.0 ), 5.0 );\",\r\n\t\t\t\"\t\t\tvec3 schlickGround = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVectorGround, hemiHalfVectorGround ), 0.0 ), 5.0 );\",\r\n\t\t\t\"\t\t\themiSpecular += hemiColor * specularNormalization * ( schlickSky * hemiSpecularWeightSky * max( dotProduct, 0.0 ) + schlickGround * hemiSpecularWeightGround * max( dotProductGround, 0.0 ) );\",\r\n\r\n\t\t\t\"\t\t}\",\r\n\r\n\t\t\t\"\t#endif\",\r\n\r\n\t\t\t\t// all lights contribution summation\r\n\r\n\t\t\t\"\tvec3 totalDiffuse = vec3( 0.0 );\",\r\n\t\t\t\"\tvec3 totalSpecular = vec3( 0.0 );\",\r\n\r\n\t\t\t\"\t#if MAX_DIR_LIGHTS > 0\",\r\n\r\n\t\t\t\"\t\ttotalDiffuse += dirDiffuse;\",\r\n\t\t\t\"\t\ttotalSpecular += dirSpecular;\",\r\n\r\n\t\t\t\"\t#endif\",\r\n\r\n\t\t\t\"\t#if MAX_HEMI_LIGHTS > 0\",\r\n\r\n\t\t\t\"\t\ttotalDiffuse += hemiDiffuse;\",\r\n\t\t\t\"\t\ttotalSpecular += hemiSpecular;\",\r\n\r\n\t\t\t\"\t#endif\",\r\n\r\n\t\t\t\"\t#if MAX_POINT_LIGHTS > 0\",\r\n\r\n\t\t\t\"\t\ttotalDiffuse += pointDiffuse;\",\r\n\t\t\t\"\t\ttotalSpecular += pointSpecular;\",\r\n\r\n\t\t\t\"\t#endif\",\r\n\r\n\t\t\t\"\t#if MAX_SPOT_LIGHTS > 0\",\r\n\r\n\t\t\t\"\t\ttotalDiffuse += spotDiffuse;\",\r\n\t\t\t\"\t\ttotalSpecular += spotSpecular;\",\r\n\r\n\t\t\t\"\t#endif\",\r\n\r\n\t\t\t\"\t#ifdef METAL\",\r\n\r\n\t\t\t\"\t\tgl_FragColor.xyz = gl_FragColor.xyz * ( totalDiffuse + ambientLightColor * ambient + totalSpecular );\",\r\n\r\n\t\t\t\"\t#else\",\r\n\r\n\t\t\t\"\t\tgl_FragColor.xyz = gl_FragColor.xyz * ( totalDiffuse + ambientLightColor * ambient ) + totalSpecular;\",\r\n\r\n\t\t\t\"\t#endif\",\r\n\r\n\t\t\t\"\tif ( enableReflection ) {\",\r\n\r\n\t\t\t\"\t\tvec3 vReflect;\",\r\n\t\t\t\"\t\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\",\r\n\r\n\t\t\t\"\t\tif ( useRefract ) {\",\r\n\r\n\t\t\t\"\t\t\tvReflect = refract( cameraToVertex, normal, refractionRatio );\",\r\n\r\n\t\t\t\"\t\t} else {\",\r\n\r\n\t\t\t\"\t\t\tvReflect = reflect( cameraToVertex, normal );\",\r\n\r\n\t\t\t\"\t\t}\",\r\n\r\n\t\t\t\"\t\tvec4 cubeColor = textureCube( tCube, vec3( -vReflect.x, vReflect.yz ) );\",\r\n\r\n\t\t\t\"\t\t#ifdef GAMMA_INPUT\",\r\n\r\n\t\t\t\"\t\t\tcubeColor.xyz *= cubeColor.xyz;\",\r\n\r\n\t\t\t\"\t\t#endif\",\r\n\r\n\t\t\t\"\t\tgl_FragColor.xyz = mix( gl_FragColor.xyz, cubeColor.xyz, specularTex.r * reflectivity );\",\r\n\r\n\t\t\t\"\t}\",\r\n\r\n\t\t\t\tTHREE.ShaderChunk[ \"shadowmap_fragment\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"linear_to_gamma_fragment\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"fog_fragment\" ],\r\n\r\n\t\t\t\"}\"\r\n\r\n\t\t].join(\"\\n\"),\r\n\r\n\t\tvertexShader: [\r\n\r\n\t\t\t\"attribute vec4 tangent;\",\r\n\r\n\t\t\t\"uniform vec2 uOffset;\",\r\n\t\t\t\"uniform vec2 uRepeat;\",\r\n\r\n\t\t\t\"uniform bool enableDisplacement;\",\r\n\r\n\t\t\t\"#ifdef VERTEX_TEXTURES\",\r\n\r\n\t\t\t\"\tuniform sampler2D tDisplacement;\",\r\n\t\t\t\"\tuniform float uDisplacementScale;\",\r\n\t\t\t\"\tuniform float uDisplacementBias;\",\r\n\r\n\t\t\t\"#endif\",\r\n\r\n\t\t\t\"varying vec3 vTangent;\",\r\n\t\t\t\"varying vec3 vBinormal;\",\r\n\t\t\t\"varying vec3 vNormal;\",\r\n\t\t\t\"varying vec2 vUv;\",\r\n\r\n\t\t\t\"varying vec3 vWorldPosition;\",\r\n\t\t\t\"varying vec3 vViewPosition;\",\r\n\r\n\t\t\tTHREE.ShaderChunk[ \"skinning_pars_vertex\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"shadowmap_pars_vertex\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"logdepthbuf_pars_vertex\" ],\r\n\r\n\t\t\t\"void main() {\",\r\n\r\n\t\t\t\tTHREE.ShaderChunk[ \"skinbase_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"skinnormal_vertex\" ],\r\n\r\n\t\t\t\t// normal, tangent and binormal vectors\r\n\r\n\t\t\t\"\t#ifdef USE_SKINNING\",\r\n\r\n\t\t\t\"\t\tvNormal = normalize( normalMatrix * skinnedNormal.xyz );\",\r\n\r\n\t\t\t\"\t\tvec4 skinnedTangent = skinMatrix * vec4( tangent.xyz, 0.0 );\",\r\n\t\t\t\"\t\tvTangent = normalize( normalMatrix * skinnedTangent.xyz );\",\r\n\r\n\t\t\t\"\t#else\",\r\n\r\n\t\t\t\"\t\tvNormal = normalize( normalMatrix * normal );\",\r\n\t\t\t\"\t\tvTangent = normalize( normalMatrix * tangent.xyz );\",\r\n\r\n\t\t\t\"\t#endif\",\r\n\r\n\t\t\t\"\tvBinormal = normalize( cross( vNormal, vTangent ) * tangent.w );\",\r\n\r\n\t\t\t\"\tvUv = uv * uRepeat + uOffset;\",\r\n\r\n\t\t\t\t// displacement mapping\r\n\r\n\t\t\t\"\tvec3 displacedPosition;\",\r\n\r\n\t\t\t\"\t#ifdef VERTEX_TEXTURES\",\r\n\r\n\t\t\t\"\t\tif ( enableDisplacement ) {\",\r\n\r\n\t\t\t\"\t\t\tvec3 dv = texture2D( tDisplacement, uv ).xyz;\",\r\n\t\t\t\"\t\t\tfloat df = uDisplacementScale * dv.x + uDisplacementBias;\",\r\n\t\t\t\"\t\t\tdisplacedPosition = position + normalize( normal ) * df;\",\r\n\r\n\t\t\t\"\t\t} else {\",\r\n\r\n\t\t\t\"\t\t\t#ifdef USE_SKINNING\",\r\n\r\n\t\t\t\"\t\t\t\tvec4 skinVertex = bindMatrix * vec4( position, 1.0 );\",\r\n\r\n\t\t\t\"\t\t\t\tvec4 skinned = vec4( 0.0 );\",\r\n\t\t\t\"\t\t\t\tskinned += boneMatX * skinVertex * skinWeight.x;\",\r\n\t\t\t\"\t\t\t\tskinned += boneMatY * skinVertex * skinWeight.y;\",\r\n\t\t\t\"\t\t\t\tskinned += boneMatZ * skinVertex * skinWeight.z;\",\r\n\t\t\t\"\t\t\t\tskinned += boneMatW * skinVertex * skinWeight.w;\",\r\n\t\t\t\"\t\t\t\tskinned = bindMatrixInverse * skinned;\",\r\n\r\n\t\t\t\"\t\t\t\tdisplacedPosition = skinned.xyz;\",\r\n\r\n\t\t\t\"\t\t\t#else\",\r\n\r\n\t\t\t\"\t\t\t\tdisplacedPosition = position;\",\r\n\r\n\t\t\t\"\t\t\t#endif\",\r\n\r\n\t\t\t\"\t\t}\",\r\n\r\n\t\t\t\"\t#else\",\r\n\r\n\t\t\t\"\t\t#ifdef USE_SKINNING\",\r\n\r\n\t\t\t\"\t\t\tvec4 skinVertex = bindMatrix * vec4( position, 1.0 );\",\r\n\r\n\t\t\t\"\t\t\tvec4 skinned = vec4( 0.0 );\",\r\n\t\t\t\"\t\t\tskinned += boneMatX * skinVertex * skinWeight.x;\",\r\n\t\t\t\"\t\t\tskinned += boneMatY * skinVertex * skinWeight.y;\",\r\n\t\t\t\"\t\t\tskinned += boneMatZ * skinVertex * skinWeight.z;\",\r\n\t\t\t\"\t\t\tskinned += boneMatW * skinVertex * skinWeight.w;\",\r\n\t\t\t\"\t\t\tskinned = bindMatrixInverse * skinned;\",\r\n\r\n\t\t\t\"\t\t\tdisplacedPosition = skinned.xyz;\",\r\n\r\n\t\t\t\"\t\t#else\",\r\n\r\n\t\t\t\"\t\t\tdisplacedPosition = position;\",\r\n\r\n\t\t\t\"\t\t#endif\",\r\n\r\n\t\t\t\"\t#endif\",\r\n\r\n\t\t\t\t//\r\n\r\n\t\t\t\"\tvec4 mvPosition = modelViewMatrix * vec4( displacedPosition, 1.0 );\",\r\n\t\t\t\"\tvec4 worldPosition = modelMatrix * vec4( displacedPosition, 1.0 );\",\r\n\r\n\t\t\t\"\tgl_Position = projectionMatrix * mvPosition;\",\r\n\r\n\t\t\t\tTHREE.ShaderChunk[ \"logdepthbuf_vertex\" ],\r\n\r\n\t\t\t\t//\r\n\r\n\t\t\t\"\tvWorldPosition = worldPosition.xyz;\",\r\n\t\t\t\"\tvViewPosition = -mvPosition.xyz;\",\r\n\r\n\t\t\t\t// shadows\r\n\r\n\t\t\t\"\t#ifdef USE_SHADOWMAP\",\r\n\r\n\t\t\t\"\t\tfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\",\r\n\r\n\t\t\t\"\t\t\tvShadowCoord[ i ] = shadowMatrix[ i ] * worldPosition;\",\r\n\r\n\t\t\t\"\t\t}\",\r\n\r\n\t\t\t\"\t#endif\",\r\n\r\n\t\t\t\"}\"\r\n\r\n\t\t].join(\"\\n\")\r\n\r\n\t},\r\n\r\n\t/* -------------------------------------------------------------------------\r\n\t//\tCube map shader\r\n\t ------------------------------------------------------------------------- */\r\n\r\n\t'cube': {\r\n\r\n\t\tuniforms: { \"tCube\": { type: \"t\", value: null },\r\n\t\t\t\t\t\"tFlip\": { type: \"f\", value: - 1 } },\r\n\r\n\t\tvertexShader: [\r\n\r\n\t\t\t\"varying vec3 vWorldPosition;\",\r\n\r\n\t\t\tTHREE.ShaderChunk[ \"logdepthbuf_pars_vertex\" ],\r\n\r\n\t\t\t\"void main() {\",\r\n\r\n\t\t\t\"\tvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\",\r\n\t\t\t\"\tvWorldPosition = worldPosition.xyz;\",\r\n\r\n\t\t\t\"\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\",\r\n\r\n\t\t\t\tTHREE.ShaderChunk[ \"logdepthbuf_vertex\" ],\r\n\r\n\t\t\t\"}\"\r\n\r\n\t\t].join(\"\\n\"),\r\n\r\n\t\tfragmentShader: [\r\n\r\n\t\t\t\"uniform samplerCube tCube;\",\r\n\t\t\t\"uniform float tFlip;\",\r\n\r\n\t\t\t\"varying vec3 vWorldPosition;\",\r\n\r\n\t\t\tTHREE.ShaderChunk[ \"logdepthbuf_pars_fragment\" ],\r\n\r\n\t\t\t\"void main() {\",\r\n\r\n\t\t\t\"\tgl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );\",\r\n\r\n\t\t\t\tTHREE.ShaderChunk[ \"logdepthbuf_fragment\" ],\r\n\r\n\t\t\t\"}\"\r\n\r\n\t\t].join(\"\\n\")\r\n\r\n\t},\r\n\r\n\t/* Depth encoding into RGBA texture\r\n\t *\r\n\t * based on SpiderGL shadow map example\r\n\t * http://spidergl.org/example.php?id=6\r\n\t *\r\n\t * originally from\r\n\t * http://www.gamedev.net/topic/442138-packing-a-float-into-a-a8r8g8b8-texture-shader/page__whichpage__1%25EF%25BF%25BD\r\n\t *\r\n\t * see also\r\n\t * http://aras-p.info/blog/2009/07/30/encoding-floats-to-rgba-the-final/\r\n\t */\r\n\r\n\t'depthRGBA': {\r\n\r\n\t\tuniforms: {},\r\n\r\n\t\tvertexShader: [\r\n\r\n\t\t\tTHREE.ShaderChunk[ \"morphtarget_pars_vertex\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"skinning_pars_vertex\" ],\r\n\t\t\tTHREE.ShaderChunk[ \"logdepthbuf_pars_vertex\" ],\r\n\r\n\t\t\t\"void main() {\",\r\n\r\n\t\t\t\tTHREE.ShaderChunk[ \"skinbase_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"morphtarget_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"skinning_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"default_vertex\" ],\r\n\t\t\t\tTHREE.ShaderChunk[ \"logdepthbuf_vertex\" ],\r\n\r\n\t\t\t\"}\"\r\n\r\n\t\t].join(\"\\n\"),\r\n\r\n\t\tfragmentShader: [\r\n\r\n\t\t\tTHREE.ShaderChunk[ \"logdepthbuf_pars_fragment\" ],\r\n\r\n\t\t\t\"vec4 pack_depth( const in float depth ) {\",\r\n\r\n\t\t\t\"\tconst vec4 bit_shift = vec4( 256.0 * 256.0 * 256.0, 256.0 * 256.0, 256.0, 1.0 );\",\r\n\t\t\t\"\tconst vec4 bit_mask = vec4( 0.0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0 );\",\r\n\t\t\t\"\tvec4 res = mod( depth * bit_shift * vec4( 255 ), vec4( 256 ) ) / vec4( 255 );\", // \"\tvec4 res = fract( depth * bit_shift );\",\r\n\t\t\t\"\tres -= res.xxyz * bit_mask;\",\r\n\t\t\t\"\treturn res;\",\r\n\r\n\t\t\t\"}\",\r\n\r\n\t\t\t\"void main() {\",\r\n\r\n\t\t\t\tTHREE.ShaderChunk[ \"logdepthbuf_fragment\" ],\r\n\r\n\t\t\t\"\t#ifdef USE_LOGDEPTHBUF_EXT\",\r\n\r\n\t\t\t\"\t\tgl_FragData[ 0 ] = pack_depth( gl_FragDepthEXT );\",\r\n\r\n\t\t\t\"\t#else\",\r\n\r\n\t\t\t\"\t\tgl_FragData[ 0 ] = pack_depth( gl_FragCoord.z );\",\r\n\r\n\t\t\t\"\t#endif\",\r\n\r\n\t\t\t\t//\"gl_FragData[ 0 ] = pack_depth( gl_FragCoord.z / gl_FragCoord.w );\",\r\n\t\t\t\t//\"float z = ( ( gl_FragCoord.z / gl_FragCoord.w ) - 3.0 ) / ( 4000.0 - 3.0 );\",\r\n\t\t\t\t//\"gl_FragData[ 0 ] = pack_depth( z );\",\r\n\t\t\t\t//\"gl_FragData[ 0 ] = vec4( z, z, z, 1.0 );\",\r\n\r\n\t\t\t\"}\"\r\n\r\n\t\t].join(\"\\n\")\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/renderers/WebGLRenderer.js\r\n\r\n/**\r\n * @author supereggbert / http://www.paulbrunt.co.uk/\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author szimek / https://github.com/szimek/\r\n */\r\n\r\nTHREE.WebGLRenderer = function ( parameters ) {\r\n\r\n\tconsole.log( 'THREE.WebGLRenderer', THREE.REVISION );\r\n\r\n\tparameters = parameters || {};\r\n\r\n\tvar _canvas = parameters.canvas !== undefined ? parameters.canvas : document.createElement( 'canvas' ),\r\n\t_context = parameters.context !== undefined ? parameters.context : null,\r\n\r\n\t_precision = parameters.precision !== undefined ? parameters.precision : 'highp',\r\n\r\n\t_alpha = parameters.alpha !== undefined ? parameters.alpha : false,\r\n\t_depth = parameters.depth !== undefined ? parameters.depth : true,\r\n\t_stencil = parameters.stencil !== undefined ? parameters.stencil : true,\r\n\t_antialias = parameters.antialias !== undefined ? parameters.antialias : false,\r\n\t_premultipliedAlpha = parameters.premultipliedAlpha !== undefined ? parameters.premultipliedAlpha : true,\r\n\t_preserveDrawingBuffer = parameters.preserveDrawingBuffer !== undefined ? parameters.preserveDrawingBuffer : false,\r\n\t_logarithmicDepthBuffer = parameters.logarithmicDepthBuffer !== undefined ? parameters.logarithmicDepthBuffer : false,\r\n\r\n\t_clearColor = new THREE.Color( 0x000000 ),\r\n\t_clearAlpha = 0;\r\n\r\n\tvar lights = [];\r\n\r\n\tvar _webglObjects = {};\r\n\tvar _webglObjectsImmediate = [];\r\n\r\n\tvar opaqueObjects = [];\r\n\tvar transparentObjects = [];\r\n\r\n\tvar sprites = [];\r\n\tvar lensFlares = [];\r\n\r\n\t// public properties\r\n\r\n\tthis.domElement = _canvas;\r\n\tthis.context = null;\r\n\tthis.devicePixelRatio = parameters.devicePixelRatio !== undefined\r\n\t\t\t\t ? parameters.devicePixelRatio\r\n\t\t\t\t : self.devicePixelRatio !== undefined\r\n\t\t\t\t\t ? self.devicePixelRatio\r\n\t\t\t\t\t : 1;\r\n\r\n\t// clearing\r\n\r\n\tthis.autoClear = true;\r\n\tthis.autoClearColor = true;\r\n\tthis.autoClearDepth = true;\r\n\tthis.autoClearStencil = true;\r\n\r\n\t// scene graph\r\n\r\n\tthis.sortObjects = true;\r\n\r\n\t// physically based shading\r\n\r\n\tthis.gammaInput = false;\r\n\tthis.gammaOutput = false;\r\n\r\n\t// shadow map\r\n\r\n\tthis.shadowMapEnabled = false;\r\n\tthis.shadowMapType = THREE.PCFShadowMap;\r\n\tthis.shadowMapCullFace = THREE.CullFaceFront;\r\n\tthis.shadowMapDebug = false;\r\n\tthis.shadowMapCascade = false;\r\n\r\n\t// morphs\r\n\r\n\tthis.maxMorphTargets = 8;\r\n\tthis.maxMorphNormals = 4;\r\n\r\n\t// flags\r\n\r\n\tthis.autoScaleCubemaps = true;\r\n\r\n\t// info\r\n\r\n\tthis.info = {\r\n\r\n\t\tmemory: {\r\n\r\n\t\t\tprograms: 0,\r\n\t\t\tgeometries: 0,\r\n\t\t\ttextures: 0\r\n\r\n\t\t},\r\n\r\n\t\trender: {\r\n\r\n\t\t\tcalls: 0,\r\n\t\t\tvertices: 0,\r\n\t\t\tfaces: 0,\r\n\t\t\tpoints: 0\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\t// internal properties\r\n\r\n\tvar _this = this,\r\n\r\n\t_programs = [],\r\n\r\n\t// internal state cache\r\n\r\n\t_currentProgram = null,\r\n\t_currentFramebuffer = null,\r\n\t_currentMaterialId = - 1,\r\n\t_currentGeometryGroupHash = - 1,\r\n\t_currentCamera = null,\r\n\r\n\t_usedTextureUnits = 0,\r\n\r\n\t// GL state cache\r\n\r\n\t_oldDoubleSided = - 1,\r\n\t_oldFlipSided = - 1,\r\n\r\n\t_oldBlending = - 1,\r\n\r\n\t_oldBlendEquation = - 1,\r\n\t_oldBlendSrc = - 1,\r\n\t_oldBlendDst = - 1,\r\n\r\n\t_oldDepthTest = - 1,\r\n\t_oldDepthWrite = - 1,\r\n\r\n\t_oldPolygonOffset = null,\r\n\t_oldPolygonOffsetFactor = null,\r\n\t_oldPolygonOffsetUnits = null,\r\n\r\n\t_oldLineWidth = null,\r\n\r\n\t_viewportX = 0,\r\n\t_viewportY = 0,\r\n\t_viewportWidth = _canvas.width,\r\n\t_viewportHeight = _canvas.height,\r\n\t_currentWidth = 0,\r\n\t_currentHeight = 0,\r\n\r\n\t_newAttributes = new Uint8Array( 16 ),\r\n\t_enabledAttributes = new Uint8Array( 16 ),\r\n\r\n\t// frustum\r\n\r\n\t_frustum = new THREE.Frustum(),\r\n\r\n\t // camera matrices cache\r\n\r\n\t_projScreenMatrix = new THREE.Matrix4(),\r\n\t_projScreenMatrixPS = new THREE.Matrix4(),\r\n\r\n\t_vector3 = new THREE.Vector3(),\r\n\r\n\t// light arrays cache\r\n\r\n\t_direction = new THREE.Vector3(),\r\n\r\n\t_lightsNeedUpdate = true,\r\n\r\n\t_lights = {\r\n\r\n\t\tambient: [ 0, 0, 0 ],\r\n\t\tdirectional: { length: 0, colors:[], positions: [] },\r\n\t\tpoint: { length: 0, colors: [], positions: [], distances: [] },\r\n\t\tspot: { length: 0, colors: [], positions: [], distances: [], directions: [], anglesCos: [], exponents: [] },\r\n\t\themi: { length: 0, skyColors: [], groundColors: [], positions: [] }\r\n\r\n\t};\r\n\r\n\t// initialize\r\n\r\n\tvar _gl;\r\n\r\n\ttry {\r\n\r\n\t\tvar attributes = {\r\n\t\t\talpha: _alpha,\r\n\t\t\tdepth: _depth,\r\n\t\t\tstencil: _stencil,\r\n\t\t\tantialias: _antialias,\r\n\t\t\tpremultipliedAlpha: _premultipliedAlpha,\r\n\t\t\tpreserveDrawingBuffer: _preserveDrawingBuffer\r\n\t\t};\r\n\r\n\t\t_gl = _context || _canvas.getContext( 'webgl', attributes ) || _canvas.getContext( 'experimental-webgl', attributes );\r\n\r\n\t\tif ( _gl === null ) {\r\n\r\n\t\t\tif ( _canvas.getContext( 'webgl') !== null ) {\r\n\r\n\t\t\t\tthrow 'Error creating WebGL context with your selected attributes.';\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tthrow 'Error creating WebGL context.';\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t} catch ( error ) {\r\n\r\n\t\tconsole.error( error );\r\n\r\n\t}\r\n\r\n\tif ( _gl.getShaderPrecisionFormat === undefined ) {\r\n\r\n\t\t_gl.getShaderPrecisionFormat = function () {\r\n\r\n\t\t\treturn {\r\n\t\t\t\t'rangeMin': 1,\r\n\t\t\t\t'rangeMax': 1,\r\n\t\t\t\t'precision': 1\r\n\t\t\t};\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tvar extensions = new THREE.WebGLExtensions( _gl );\r\n\r\n\textensions.get( 'OES_texture_float' );\r\n\textensions.get( 'OES_texture_float_linear' );\r\n\textensions.get( 'OES_standard_derivatives' );\r\n\r\n\tif ( _logarithmicDepthBuffer ) {\r\n\r\n\t\textensions.get( 'EXT_frag_depth' );\r\n\r\n\t}\r\n\r\n\t//\r\n\r\n\tfunction setDefaultGLState() {\r\n\r\n\t\t_gl.clearColor( 0, 0, 0, 1 );\r\n\t\t_gl.clearDepth( 1 );\r\n\t\t_gl.clearStencil( 0 );\r\n\r\n\t\t_gl.enable( _gl.DEPTH_TEST );\r\n\t\t_gl.depthFunc( _gl.LEQUAL );\r\n\r\n\t\t_gl.frontFace( _gl.CCW );\r\n\t\t_gl.cullFace( _gl.BACK );\r\n\t\t_gl.enable( _gl.CULL_FACE );\r\n\r\n\t\t_gl.enable( _gl.BLEND );\r\n\t\t_gl.blendEquation( _gl.FUNC_ADD );\r\n\t\t_gl.blendFunc( _gl.SRC_ALPHA, _gl.ONE_MINUS_SRC_ALPHA );\r\n\r\n\t\t_gl.viewport( _viewportX, _viewportY, _viewportWidth, _viewportHeight );\r\n\r\n\t\t_gl.clearColor( _clearColor.r, _clearColor.g, _clearColor.b, _clearAlpha );\r\n\r\n\t}\r\n\r\n\tsetDefaultGLState();\r\n\r\n\tthis.context = _gl;\r\n\r\n\t// GPU capabilities\r\n\r\n\tvar _maxTextures = _gl.getParameter( _gl.MAX_TEXTURE_IMAGE_UNITS );\r\n\tvar _maxVertexTextures = _gl.getParameter( _gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS );\r\n\tvar _maxTextureSize = _gl.getParameter( _gl.MAX_TEXTURE_SIZE );\r\n\tvar _maxCubemapSize = _gl.getParameter( _gl.MAX_CUBE_MAP_TEXTURE_SIZE );\r\n\r\n\tvar _supportsVertexTextures = _maxVertexTextures > 0;\r\n\tvar _supportsBoneTextures = _supportsVertexTextures && extensions.get( 'OES_texture_float' );\r\n\r\n\t//\r\n\r\n\tvar _vertexShaderPrecisionHighpFloat = _gl.getShaderPrecisionFormat( _gl.VERTEX_SHADER, _gl.HIGH_FLOAT );\r\n\tvar _vertexShaderPrecisionMediumpFloat = _gl.getShaderPrecisionFormat( _gl.VERTEX_SHADER, _gl.MEDIUM_FLOAT );\r\n\tvar _vertexShaderPrecisionLowpFloat = _gl.getShaderPrecisionFormat( _gl.VERTEX_SHADER, _gl.LOW_FLOAT );\r\n\r\n\tvar _fragmentShaderPrecisionHighpFloat = _gl.getShaderPrecisionFormat( _gl.FRAGMENT_SHADER, _gl.HIGH_FLOAT );\r\n\tvar _fragmentShaderPrecisionMediumpFloat = _gl.getShaderPrecisionFormat( _gl.FRAGMENT_SHADER, _gl.MEDIUM_FLOAT );\r\n\tvar _fragmentShaderPrecisionLowpFloat = _gl.getShaderPrecisionFormat( _gl.FRAGMENT_SHADER, _gl.LOW_FLOAT );\r\n\r\n\tvar getCompressedTextureFormats = ( function () {\r\n\r\n\t\tvar array;\r\n\r\n\t\treturn function () {\r\n\r\n\t\t\tif ( array !== undefined ) {\r\n\r\n\t\t\t\treturn array;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tarray = [];\r\n\r\n\t\t\tif ( extensions.get( 'WEBGL_compressed_texture_pvrtc' ) || extensions.get( 'WEBGL_compressed_texture_s3tc' ) ) {\r\n\r\n\t\t\t\tvar formats = _gl.getParameter( _gl.COMPRESSED_TEXTURE_FORMATS );\r\n\r\n\t\t\t\tfor ( var i = 0; i < formats.length; i ++ ){\r\n\r\n\t\t\t\t\tarray.push( formats[ i ] );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn array;\r\n\r\n\t\t};\r\n\r\n\t} )();\r\n\r\n\t// clamp precision to maximum available\r\n\r\n\tvar highpAvailable = _vertexShaderPrecisionHighpFloat.precision > 0 && _fragmentShaderPrecisionHighpFloat.precision > 0;\r\n\tvar mediumpAvailable = _vertexShaderPrecisionMediumpFloat.precision > 0 && _fragmentShaderPrecisionMediumpFloat.precision > 0;\r\n\r\n\tif ( _precision === 'highp' && ! highpAvailable ) {\r\n\r\n\t\tif ( mediumpAvailable ) {\r\n\r\n\t\t\t_precision = 'mediump';\r\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: highp not supported, using mediump.' );\r\n\r\n\t\t} else {\r\n\r\n\t\t\t_precision = 'lowp';\r\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: highp and mediump not supported, using lowp.' );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tif ( _precision === 'mediump' && ! mediumpAvailable ) {\r\n\r\n\t\t_precision = 'lowp';\r\n\t\tconsole.warn( 'THREE.WebGLRenderer: mediump not supported, using lowp.' );\r\n\r\n\t}\r\n\r\n\t// Plugins\r\n\r\n\tvar shadowMapPlugin = new THREE.ShadowMapPlugin( this, lights, _webglObjects, _webglObjectsImmediate );\r\n\r\n\tvar spritePlugin = new THREE.SpritePlugin( this, sprites );\r\n\tvar lensFlarePlugin = new THREE.LensFlarePlugin( this, lensFlares );\r\n\r\n\t// API\r\n\r\n\tthis.getContext = function () {\r\n\r\n\t\treturn _gl;\r\n\r\n\t};\r\n\r\n\tthis.supportsVertexTextures = function () {\r\n\r\n\t\treturn _supportsVertexTextures;\r\n\r\n\t};\r\n\r\n\tthis.supportsFloatTextures = function () {\r\n\r\n\t\treturn extensions.get( 'OES_texture_float' );\r\n\r\n\t};\r\n\r\n\tthis.supportsStandardDerivatives = function () {\r\n\r\n\t\treturn extensions.get( 'OES_standard_derivatives' );\r\n\r\n\t};\r\n\r\n\tthis.supportsCompressedTextureS3TC = function () {\r\n\r\n\t\treturn extensions.get( 'WEBGL_compressed_texture_s3tc' );\r\n\r\n\t};\r\n\r\n\tthis.supportsCompressedTexturePVRTC = function () {\r\n\r\n\t\treturn extensions.get( 'WEBGL_compressed_texture_pvrtc' );\r\n\r\n\t};\r\n\r\n\tthis.supportsBlendMinMax = function () {\r\n\r\n\t\treturn extensions.get( 'EXT_blend_minmax' );\r\n\r\n\t};\r\n\r\n\tthis.getMaxAnisotropy = ( function () {\r\n\r\n\t\tvar value;\r\n\r\n\t\treturn function () {\r\n\r\n\t\t\tif ( value !== undefined ) {\r\n\r\n\t\t\t\treturn value;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar extension = extensions.get( 'EXT_texture_filter_anisotropic' );\r\n\r\n\t\t\tvalue = extension !== null ? _gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT ) : 0;\r\n\r\n\t\t\treturn value;\r\n\r\n\t\t}\r\n\r\n\t} )();\r\n\r\n\tthis.getPrecision = function () {\r\n\r\n\t\treturn _precision;\r\n\r\n\t};\r\n\r\n\tthis.setSize = function ( width, height, updateStyle ) {\r\n\r\n\t\t_canvas.width = width * this.devicePixelRatio;\r\n\t\t_canvas.height = height * this.devicePixelRatio;\r\n\r\n\t\tif ( updateStyle !== false ) {\r\n\r\n\t\t\t_canvas.style.width = width + 'px';\r\n\t\t\t_canvas.style.height = height + 'px';\r\n\r\n\t\t}\r\n\r\n\t\tthis.setViewport( 0, 0, width, height );\r\n\r\n\t};\r\n\r\n\tthis.setViewport = function ( x, y, width, height ) {\r\n\r\n\t\t_viewportX = x * this.devicePixelRatio;\r\n\t\t_viewportY = y * this.devicePixelRatio;\r\n\r\n\t\t_viewportWidth = width * this.devicePixelRatio;\r\n\t\t_viewportHeight = height * this.devicePixelRatio;\r\n\r\n\t\t_gl.viewport( _viewportX, _viewportY, _viewportWidth, _viewportHeight );\r\n\r\n\t};\r\n\r\n\tthis.setScissor = function ( x, y, width, height ) {\r\n\r\n\t\t_gl.scissor(\r\n\t\t\tx * this.devicePixelRatio,\r\n\t\t\ty * this.devicePixelRatio,\r\n\t\t\twidth * this.devicePixelRatio,\r\n\t\t\theight * this.devicePixelRatio\r\n\t\t);\r\n\r\n\t};\r\n\r\n\tthis.enableScissorTest = function ( enable ) {\r\n\r\n\t\tenable ? _gl.enable( _gl.SCISSOR_TEST ) : _gl.disable( _gl.SCISSOR_TEST );\r\n\r\n\t};\r\n\r\n\t// Clearing\r\n\r\n\tthis.setClearColor = function ( color, alpha ) {\r\n\r\n\t\t_clearColor.set( color );\r\n\t\t_clearAlpha = alpha !== undefined ? alpha : 1;\r\n\r\n\t\t_gl.clearColor( _clearColor.r, _clearColor.g, _clearColor.b, _clearAlpha );\r\n\r\n\t};\r\n\r\n\tthis.setClearColorHex = function ( hex, alpha ) {\r\n\r\n\t\tconsole.warn( 'THREE.WebGLRenderer: .setClearColorHex() is being removed. Use .setClearColor() instead.' );\r\n\t\tthis.setClearColor( hex, alpha );\r\n\r\n\t};\r\n\r\n\tthis.getClearColor = function () {\r\n\r\n\t\treturn _clearColor;\r\n\r\n\t};\r\n\r\n\tthis.getClearAlpha = function () {\r\n\r\n\t\treturn _clearAlpha;\r\n\r\n\t};\r\n\r\n\tthis.clear = function ( color, depth, stencil ) {\r\n\r\n\t\tvar bits = 0;\r\n\r\n\t\tif ( color === undefined || color ) bits |= _gl.COLOR_BUFFER_BIT;\r\n\t\tif ( depth === undefined || depth ) bits |= _gl.DEPTH_BUFFER_BIT;\r\n\t\tif ( stencil === undefined || stencil ) bits |= _gl.STENCIL_BUFFER_BIT;\r\n\r\n\t\t_gl.clear( bits );\r\n\r\n\t};\r\n\r\n\tthis.clearColor = function () {\r\n\r\n\t\t_gl.clear( _gl.COLOR_BUFFER_BIT );\r\n\r\n\t};\r\n\r\n\tthis.clearDepth = function () {\r\n\r\n\t\t_gl.clear( _gl.DEPTH_BUFFER_BIT );\r\n\r\n\t};\r\n\r\n\tthis.clearStencil = function () {\r\n\r\n\t\t_gl.clear( _gl.STENCIL_BUFFER_BIT );\r\n\r\n\t};\r\n\r\n\tthis.clearTarget = function ( renderTarget, color, depth, stencil ) {\r\n\r\n\t\tthis.setRenderTarget( renderTarget );\r\n\t\tthis.clear( color, depth, stencil );\r\n\r\n\t};\r\n\r\n\t// Reset\r\n\r\n\tthis.resetGLState = function () {\r\n\r\n\t\t_currentProgram = null;\r\n\t\t_currentCamera = null;\r\n\r\n\t\t_oldBlending = - 1;\r\n\t\t_oldDepthTest = - 1;\r\n\t\t_oldDepthWrite = - 1;\r\n\t\t_oldDoubleSided = - 1;\r\n\t\t_oldFlipSided = - 1;\r\n\t\t_currentGeometryGroupHash = - 1;\r\n\t\t_currentMaterialId = - 1;\r\n\r\n\t\t_lightsNeedUpdate = true;\r\n\r\n\t};\r\n\r\n\t// Buffer allocation\r\n\r\n\tfunction createParticleBuffers ( geometry ) {\r\n\r\n\t\tgeometry.__webglVertexBuffer = _gl.createBuffer();\r\n\t\tgeometry.__webglColorBuffer = _gl.createBuffer();\r\n\r\n\t\t_this.info.memory.geometries ++;\r\n\r\n\t};\r\n\r\n\tfunction createLineBuffers ( geometry ) {\r\n\r\n\t\tgeometry.__webglVertexBuffer = _gl.createBuffer();\r\n\t\tgeometry.__webglColorBuffer = _gl.createBuffer();\r\n\t\tgeometry.__webglLineDistanceBuffer = _gl.createBuffer();\r\n\r\n\t\t_this.info.memory.geometries ++;\r\n\r\n\t};\r\n\r\n\tfunction createMeshBuffers ( geometryGroup ) {\r\n\r\n\t\tgeometryGroup.__webglVertexBuffer = _gl.createBuffer();\r\n\t\tgeometryGroup.__webglNormalBuffer = _gl.createBuffer();\r\n\t\tgeometryGroup.__webglTangentBuffer = _gl.createBuffer();\r\n\t\tgeometryGroup.__webglColorBuffer = _gl.createBuffer();\r\n\t\tgeometryGroup.__webglUVBuffer = _gl.createBuffer();\r\n\t\tgeometryGroup.__webglUV2Buffer = _gl.createBuffer();\r\n\r\n\t\tgeometryGroup.__webglSkinIndicesBuffer = _gl.createBuffer();\r\n\t\tgeometryGroup.__webglSkinWeightsBuffer = _gl.createBuffer();\r\n\r\n\t\tgeometryGroup.__webglFaceBuffer = _gl.createBuffer();\r\n\t\tgeometryGroup.__webglLineBuffer = _gl.createBuffer();\r\n\r\n\t\tvar m, ml;\r\n\r\n\t\tif ( geometryGroup.numMorphTargets ) {\r\n\r\n\t\t\tgeometryGroup.__webglMorphTargetsBuffers = [];\r\n\r\n\t\t\tfor ( m = 0, ml = geometryGroup.numMorphTargets; m < ml; m ++ ) {\r\n\r\n\t\t\t\tgeometryGroup.__webglMorphTargetsBuffers.push( _gl.createBuffer() );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( geometryGroup.numMorphNormals ) {\r\n\r\n\t\t\tgeometryGroup.__webglMorphNormalsBuffers = [];\r\n\r\n\t\t\tfor ( m = 0, ml = geometryGroup.numMorphNormals; m < ml; m ++ ) {\r\n\r\n\t\t\t\tgeometryGroup.__webglMorphNormalsBuffers.push( _gl.createBuffer() );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t_this.info.memory.geometries ++;\r\n\r\n\t};\r\n\r\n\t// Events\r\n\r\n\tvar onObjectRemoved = function ( event ) {\r\n\r\n\t\tvar object = event.target;\r\n\r\n\t\tobject.traverse( function ( child ) {\r\n\r\n\t\t\tchild.removeEventListener( 'remove', onObjectRemoved );\r\n\r\n\t\t\tremoveObject( child );\r\n\r\n\t\t} );\r\n\r\n\t};\r\n\r\n\tvar onGeometryDispose = function ( event ) {\r\n\r\n\t\tvar geometry = event.target;\r\n\r\n\t\tgeometry.removeEventListener( 'dispose', onGeometryDispose );\r\n\r\n\t\tdeallocateGeometry( geometry );\r\n\r\n\t};\r\n\r\n\tvar onTextureDispose = function ( event ) {\r\n\r\n\t\tvar texture = event.target;\r\n\r\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\r\n\r\n\t\tdeallocateTexture( texture );\r\n\r\n\t\t_this.info.memory.textures --;\r\n\r\n\r\n\t};\r\n\r\n\tvar onRenderTargetDispose = function ( event ) {\r\n\r\n\t\tvar renderTarget = event.target;\r\n\r\n\t\trenderTarget.removeEventListener( 'dispose', onRenderTargetDispose );\r\n\r\n\t\tdeallocateRenderTarget( renderTarget );\r\n\r\n\t\t_this.info.memory.textures --;\r\n\r\n\t};\r\n\r\n\tvar onMaterialDispose = function ( event ) {\r\n\r\n\t\tvar material = event.target;\r\n\r\n\t\tmaterial.removeEventListener( 'dispose', onMaterialDispose );\r\n\r\n\t\tdeallocateMaterial( material );\r\n\r\n\t};\r\n\r\n\t// Buffer deallocation\r\n\r\n\tvar deleteBuffers = function ( geometry ) {\r\n\t\r\n\t\tvar buffers = [\r\n\t\t\t'__webglVertexBuffer',\r\n\t\t\t'__webglNormalBuffer',\r\n\t\t\t'__webglTangentBuffer',\r\n\t\t\t'__webglColorBuffer',\r\n\t\t\t'__webglUVBuffer',\r\n\t\t\t'__webglUV2Buffer',\r\n\t\t\t\r\n\t\t\t'__webglSkinIndicesBuffer',\r\n\t\t\t'__webglSkinWeightsBuffer',\r\n\t\t\t\r\n\t\t\t'__webglFaceBuffer',\r\n\t\t\t'__webglLineBuffer',\r\n\t\t\t\r\n\t\t\t'__webglLineDistanceBuffer'\r\n\t\t];\r\n\r\n\t\tfor ( var i = 0, l = buffers.length; i < l; i ++ ) {\r\n\r\n\t\t\tvar name = buffers[ i ];\r\n\r\n\t\t\tif ( geometry[ name ] !== undefined ) {\r\n\r\n\t\t\t\t_gl.deleteBuffer( geometry[ name ] );\r\n\r\n\t\t\t\tdelete geometry[ name ];\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t// custom attributes\r\n\r\n\t\tif ( geometry.__webglCustomAttributesList !== undefined ) {\r\n\r\n\t\t\tfor ( var name in geometry.__webglCustomAttributesList ) {\r\n\r\n\t\t\t\t_gl.deleteBuffer( geometry.__webglCustomAttributesList[ name ].buffer );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tdelete geometry.__webglCustomAttributesList;\r\n\r\n\t\t}\r\n\r\n\t\t_this.info.memory.geometries --;\r\n\r\n\t};\r\n\r\n\tvar deallocateGeometry = function ( geometry ) {\r\n\r\n\t\tdelete geometry.__webglInit;\r\n\r\n\t\tif ( geometry instanceof THREE.BufferGeometry ) {\r\n\r\n\t\t\tfor ( var name in geometry.attributes ) {\r\n\t\t\t\r\n\t\t\t\tvar attribute = geometry.attributes[ name ];\r\n\r\n\t\t\t\tif ( attribute.buffer !== undefined ) {\r\n\r\n\t\t\t\t\t_gl.deleteBuffer( attribute.buffer );\r\n\r\n\t\t\t\t\tdelete attribute.buffer;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t_this.info.memory.geometries --;\r\n\r\n\t\t} else {\r\n\r\n\t\t\tvar geometryGroupsList = geometryGroups[ geometry.id ];\r\n\r\n\t\t\tif ( geometryGroupsList !== undefined ) {\r\n\r\n\t\t\t\tfor ( var i = 0,l = geometryGroupsList.length; i < l; i ++ ) {\r\n\r\n\t\t\t\t\tvar geometryGroup = geometryGroupsList[ i ];\r\n\r\n\t\t\t\t\tif ( geometryGroup.numMorphTargets !== undefined ) {\r\n\r\n\t\t\t\t\t\tfor ( var m = 0, ml = geometryGroup.numMorphTargets; m < ml; m ++ ) {\r\n\r\n\t\t\t\t\t\t\t_gl.deleteBuffer( geometryGroup.__webglMorphTargetsBuffers[ m ] );\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tdelete geometryGroup.__webglMorphTargetsBuffers;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ( geometryGroup.numMorphNormals !== undefined ) {\r\n\r\n\t\t\t\t\t\tfor ( var m = 0, ml = geometryGroup.numMorphNormals; m < ml; m ++ ) {\r\n\r\n\t\t\t\t\t\t\t_gl.deleteBuffer( geometryGroup.__webglMorphNormalsBuffers[ m ] );\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tdelete geometryGroup.__webglMorphNormalsBuffers;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdeleteBuffers( geometryGroup );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdelete geometryGroups[ geometry.id ];\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tdeleteBuffers( geometry );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t// TOFIX: Workaround for deleted geometry being currently bound\r\n\r\n\t\t_currentGeometryGroupHash = - 1;\r\n\r\n\t};\r\n\r\n\tvar deallocateTexture = function ( texture ) {\r\n\r\n\t\tif ( texture.image && texture.image.__webglTextureCube ) {\r\n\r\n\t\t\t// cube texture\r\n\r\n\t\t\t_gl.deleteTexture( texture.image.__webglTextureCube );\r\n\r\n\t\t\tdelete texture.image.__webglTextureCube;\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// 2D texture\r\n\r\n\t\t\tif ( texture.__webglInit === undefined ) return;\r\n\r\n\t\t\t_gl.deleteTexture( texture.__webglTexture );\r\n\r\n\t\t\tdelete texture.__webglTexture;\r\n\t\t\tdelete texture.__webglInit;\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tvar deallocateRenderTarget = function ( renderTarget ) {\r\n\r\n\t\tif ( ! renderTarget || renderTarget.__webglTexture === undefined ) return;\r\n\r\n\t\t_gl.deleteTexture( renderTarget.__webglTexture );\r\n\r\n\t\tdelete renderTarget.__webglTexture;\r\n\r\n\t\tif ( renderTarget instanceof THREE.WebGLRenderTargetCube ) {\r\n\r\n\t\t\tfor ( var i = 0; i < 6; i ++ ) {\r\n\r\n\t\t\t\t_gl.deleteFramebuffer( renderTarget.__webglFramebuffer[ i ] );\r\n\t\t\t\t_gl.deleteRenderbuffer( renderTarget.__webglRenderbuffer[ i ] );\r\n\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\r\n\t\t\t_gl.deleteFramebuffer( renderTarget.__webglFramebuffer );\r\n\t\t\t_gl.deleteRenderbuffer( renderTarget.__webglRenderbuffer );\r\n\r\n\t\t}\r\n\r\n\t\tdelete renderTarget.__webglFramebuffer;\r\n\t\tdelete renderTarget.__webglRenderbuffer;\r\n\r\n\t};\r\n\r\n\tvar deallocateMaterial = function ( material ) {\r\n\r\n\t\tvar program = material.program.program;\r\n\r\n\t\tif ( program === undefined ) return;\r\n\r\n\t\tmaterial.program = undefined;\r\n\r\n\t\t// only deallocate GL program if this was the last use of shared program\r\n\t\t// assumed there is only single copy of any program in the _programs list\r\n\t\t// (that's how it's constructed)\r\n\r\n\t\tvar i, il, programInfo;\r\n\t\tvar deleteProgram = false;\r\n\r\n\t\tfor ( i = 0, il = _programs.length; i < il; i ++ ) {\r\n\r\n\t\t\tprogramInfo = _programs[ i ];\r\n\r\n\t\t\tif ( programInfo.program === program ) {\r\n\r\n\t\t\t\tprogramInfo.usedTimes --;\r\n\r\n\t\t\t\tif ( programInfo.usedTimes === 0 ) {\r\n\r\n\t\t\t\t\tdeleteProgram = true;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( deleteProgram === true ) {\r\n\r\n\t\t\t// avoid using array.splice, this is costlier than creating new array from scratch\r\n\r\n\t\t\tvar newPrograms = [];\r\n\r\n\t\t\tfor ( i = 0, il = _programs.length; i < il; i ++ ) {\r\n\r\n\t\t\t\tprogramInfo = _programs[ i ];\r\n\r\n\t\t\t\tif ( programInfo.program !== program ) {\r\n\r\n\t\t\t\t\tnewPrograms.push( programInfo );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t_programs = newPrograms;\r\n\r\n\t\t\t_gl.deleteProgram( program );\r\n\r\n\t\t\t_this.info.memory.programs --;\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\t// Buffer initialization\r\n\r\n\tfunction initCustomAttributes ( object ) {\r\n\r\n\t\tvar geometry = object.geometry;\r\n\t\tvar material = object.material;\r\n\r\n\t\tvar nvertices = geometry.vertices.length;\r\n\r\n\t\tif ( material.attributes ) {\r\n\r\n\t\t\tif ( geometry.__webglCustomAttributesList === undefined ) {\r\n\r\n\t\t\t\tgeometry.__webglCustomAttributesList = [];\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfor ( var name in material.attributes ) {\r\n\r\n\t\t\t\tvar attribute = material.attributes[ name ];\r\n\r\n\t\t\t\tif ( ! attribute.__webglInitialized || attribute.createUniqueBuffers ) {\r\n\r\n\t\t\t\t\tattribute.__webglInitialized = true;\r\n\r\n\t\t\t\t\tvar size = 1; // \"f\" and \"i\"\r\n\r\n\t\t\t\t\tif ( attribute.type === 'v2' ) size = 2;\r\n\t\t\t\t\telse if ( attribute.type === 'v3' ) size = 3;\r\n\t\t\t\t\telse if ( attribute.type === 'v4' ) size = 4;\r\n\t\t\t\t\telse if ( attribute.type === 'c' ) size = 3;\r\n\r\n\t\t\t\t\tattribute.size = size;\r\n\r\n\t\t\t\t\tattribute.array = new Float32Array( nvertices * size );\r\n\r\n\t\t\t\t\tattribute.buffer = _gl.createBuffer();\r\n\t\t\t\t\tattribute.buffer.belongsToAttribute = name;\r\n\r\n\t\t\t\t\tattribute.needsUpdate = true;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tgeometry.__webglCustomAttributesList.push( attribute );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tfunction initParticleBuffers ( geometry, object ) {\r\n\r\n\t\tvar nvertices = geometry.vertices.length;\r\n\r\n\t\tgeometry.__vertexArray = new Float32Array( nvertices * 3 );\r\n\t\tgeometry.__colorArray = new Float32Array( nvertices * 3 );\r\n\r\n\t\tgeometry.__sortArray = [];\r\n\r\n\t\tgeometry.__webglParticleCount = nvertices;\r\n\r\n\t\tinitCustomAttributes( object );\r\n\r\n\t};\r\n\r\n\tfunction initLineBuffers ( geometry, object ) {\r\n\r\n\t\tvar nvertices = geometry.vertices.length;\r\n\r\n\t\tgeometry.__vertexArray = new Float32Array( nvertices * 3 );\r\n\t\tgeometry.__colorArray = new Float32Array( nvertices * 3 );\r\n\t\tgeometry.__lineDistanceArray = new Float32Array( nvertices * 1 );\r\n\r\n\t\tgeometry.__webglLineCount = nvertices;\r\n\r\n\t\tinitCustomAttributes( object );\r\n\r\n\t};\r\n\r\n\tfunction initMeshBuffers ( geometryGroup, object ) {\r\n\r\n\t\tvar geometry = object.geometry,\r\n\t\t\tfaces3 = geometryGroup.faces3,\r\n\r\n\t\t\tnvertices = faces3.length * 3,\r\n\t\t\tntris = faces3.length * 1,\r\n\t\t\tnlines = faces3.length * 3,\r\n\r\n\t\t\tmaterial = getBufferMaterial( object, geometryGroup );\r\n\r\n\t\tgeometryGroup.__vertexArray = new Float32Array( nvertices * 3 );\r\n\t\tgeometryGroup.__normalArray = new Float32Array( nvertices * 3 );\r\n\t\tgeometryGroup.__colorArray = new Float32Array( nvertices * 3 );\r\n\t\tgeometryGroup.__uvArray = new Float32Array( nvertices * 2 );\r\n\r\n\t\tif ( geometry.faceVertexUvs.length > 1 ) {\r\n\r\n\t\t\tgeometryGroup.__uv2Array = new Float32Array( nvertices * 2 );\r\n\r\n\t\t}\r\n\r\n\t\tif ( geometry.hasTangents ) {\r\n\r\n\t\t\tgeometryGroup.__tangentArray = new Float32Array( nvertices * 4 );\r\n\r\n\t\t}\r\n\r\n\t\tif ( object.geometry.skinWeights.length && object.geometry.skinIndices.length ) {\r\n\r\n\t\t\tgeometryGroup.__skinIndexArray = new Float32Array( nvertices * 4 );\r\n\t\t\tgeometryGroup.__skinWeightArray = new Float32Array( nvertices * 4 );\r\n\r\n\t\t}\r\n\r\n\t\tvar UintArray = extensions.get( 'OES_element_index_uint' ) !== null && ntris > 21845 ? Uint32Array : Uint16Array; // 65535 / 3\r\n\r\n\t\tgeometryGroup.__typeArray = UintArray;\r\n\t\tgeometryGroup.__faceArray = new UintArray( ntris * 3 );\r\n\t\tgeometryGroup.__lineArray = new UintArray( nlines * 2 );\r\n\r\n\t\tvar m, ml;\r\n\r\n\t\tif ( geometryGroup.numMorphTargets ) {\r\n\r\n\t\t\tgeometryGroup.__morphTargetsArrays = [];\r\n\r\n\t\t\tfor ( m = 0, ml = geometryGroup.numMorphTargets; m < ml; m ++ ) {\r\n\r\n\t\t\t\tgeometryGroup.__morphTargetsArrays.push( new Float32Array( nvertices * 3 ) );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( geometryGroup.numMorphNormals ) {\r\n\r\n\t\t\tgeometryGroup.__morphNormalsArrays = [];\r\n\r\n\t\t\tfor ( m = 0, ml = geometryGroup.numMorphNormals; m < ml; m ++ ) {\r\n\r\n\t\t\t\tgeometryGroup.__morphNormalsArrays.push( new Float32Array( nvertices * 3 ) );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tgeometryGroup.__webglFaceCount = ntris * 3;\r\n\t\tgeometryGroup.__webglLineCount = nlines * 2;\r\n\r\n\r\n\t\t// custom attributes\r\n\r\n\t\tif ( material.attributes ) {\r\n\r\n\t\t\tif ( geometryGroup.__webglCustomAttributesList === undefined ) {\r\n\r\n\t\t\t\tgeometryGroup.__webglCustomAttributesList = [];\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfor ( var name in material.attributes ) {\r\n\r\n\t\t\t\t// Do a shallow copy of the attribute object so different geometryGroup chunks use different\r\n\t\t\t\t// attribute buffers which are correctly indexed in the setMeshBuffers function\r\n\r\n\t\t\t\tvar originalAttribute = material.attributes[ name ];\r\n\r\n\t\t\t\tvar attribute = {};\r\n\r\n\t\t\t\tfor ( var property in originalAttribute ) {\r\n\r\n\t\t\t\t\tattribute[ property ] = originalAttribute[ property ];\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( ! attribute.__webglInitialized || attribute.createUniqueBuffers ) {\r\n\r\n\t\t\t\t\tattribute.__webglInitialized = true;\r\n\r\n\t\t\t\t\tvar size = 1; // \"f\" and \"i\"\r\n\r\n\t\t\t\t\tif ( attribute.type === 'v2' ) size = 2;\r\n\t\t\t\t\telse if ( attribute.type === 'v3' ) size = 3;\r\n\t\t\t\t\telse if ( attribute.type === 'v4' ) size = 4;\r\n\t\t\t\t\telse if ( attribute.type === 'c' ) size = 3;\r\n\r\n\t\t\t\t\tattribute.size = size;\r\n\r\n\t\t\t\t\tattribute.array = new Float32Array( nvertices * size );\r\n\r\n\t\t\t\t\tattribute.buffer = _gl.createBuffer();\r\n\t\t\t\t\tattribute.buffer.belongsToAttribute = name;\r\n\r\n\t\t\t\t\toriginalAttribute.needsUpdate = true;\r\n\t\t\t\t\tattribute.__original = originalAttribute;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tgeometryGroup.__webglCustomAttributesList.push( attribute );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tgeometryGroup.__inittedArrays = true;\r\n\r\n\t};\r\n\r\n\tfunction getBufferMaterial( object, geometryGroup ) {\r\n\r\n\t\treturn object.material instanceof THREE.MeshFaceMaterial\r\n\t\t\t ? object.material.materials[ geometryGroup.materialIndex ]\r\n\t\t\t : object.material;\r\n\r\n\t};\r\n\r\n\tfunction materialNeedsSmoothNormals ( material ) {\r\n\r\n\t\treturn material && material.shading !== undefined && material.shading === THREE.SmoothShading;\r\n\r\n\t};\r\n\r\n\t// Buffer setting\r\n\r\n\tfunction setParticleBuffers ( geometry, hint, object ) {\r\n\r\n\t\tvar v, c, vertex, offset, index, color,\r\n\r\n\t\tvertices = geometry.vertices,\r\n\t\tvl = vertices.length,\r\n\r\n\t\tcolors = geometry.colors,\r\n\t\tcl = colors.length,\r\n\r\n\t\tvertexArray = geometry.__vertexArray,\r\n\t\tcolorArray = geometry.__colorArray,\r\n\r\n\t\tsortArray = geometry.__sortArray,\r\n\r\n\t\tdirtyVertices = geometry.verticesNeedUpdate,\r\n\t\tdirtyElements = geometry.elementsNeedUpdate,\r\n\t\tdirtyColors = geometry.colorsNeedUpdate,\r\n\r\n\t\tcustomAttributes = geometry.__webglCustomAttributesList,\r\n\t\ti, il,\r\n\t\ta, ca, cal, value,\r\n\t\tcustomAttribute;\r\n\r\n\t\tif ( object.sortParticles ) {\r\n\r\n\t\t\t_projScreenMatrixPS.copy( _projScreenMatrix );\r\n\t\t\t_projScreenMatrixPS.multiply( object.matrixWorld );\r\n\r\n\t\t\tfor ( v = 0; v < vl; v ++ ) {\r\n\r\n\t\t\t\tvertex = vertices[ v ];\r\n\r\n\t\t\t\t_vector3.copy( vertex );\r\n\t\t\t\t_vector3.applyProjection( _projScreenMatrixPS );\r\n\r\n\t\t\t\tsortArray[ v ] = [ _vector3.z, v ];\r\n\r\n\t\t\t}\r\n\r\n\t\t\tsortArray.sort( numericalSort );\r\n\r\n\t\t\tfor ( v = 0; v < vl; v ++ ) {\r\n\r\n\t\t\t\tvertex = vertices[ sortArray[ v ][ 1 ] ];\r\n\r\n\t\t\t\toffset = v * 3;\r\n\r\n\t\t\t\tvertexArray[ offset ] = vertex.x;\r\n\t\t\t\tvertexArray[ offset + 1 ] = vertex.y;\r\n\t\t\t\tvertexArray[ offset + 2 ] = vertex.z;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfor ( c = 0; c < cl; c ++ ) {\r\n\r\n\t\t\t\toffset = c * 3;\r\n\r\n\t\t\t\tcolor = colors[ sortArray[ c ][ 1 ] ];\r\n\r\n\t\t\t\tcolorArray[ offset ] = color.r;\r\n\t\t\t\tcolorArray[ offset + 1 ] = color.g;\r\n\t\t\t\tcolorArray[ offset + 2 ] = color.b;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( customAttributes ) {\r\n\r\n\t\t\t\tfor ( i = 0, il = customAttributes.length; i < il; i ++ ) {\r\n\r\n\t\t\t\t\tcustomAttribute = customAttributes[ i ];\r\n\r\n\t\t\t\t\tif ( ! ( customAttribute.boundTo === undefined || customAttribute.boundTo === 'vertices' ) ) continue;\r\n\r\n\t\t\t\t\toffset = 0;\r\n\r\n\t\t\t\t\tcal = customAttribute.value.length;\r\n\r\n\t\t\t\t\tif ( customAttribute.size === 1 ) {\r\n\r\n\t\t\t\t\t\tfor ( ca = 0; ca < cal; ca ++ ) {\r\n\r\n\t\t\t\t\t\t\tindex = sortArray[ ca ][ 1 ];\r\n\r\n\t\t\t\t\t\t\tcustomAttribute.array[ ca ] = customAttribute.value[ index ];\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t} else if ( customAttribute.size === 2 ) {\r\n\r\n\t\t\t\t\t\tfor ( ca = 0; ca < cal; ca ++ ) {\r\n\r\n\t\t\t\t\t\t\tindex = sortArray[ ca ][ 1 ];\r\n\r\n\t\t\t\t\t\t\tvalue = customAttribute.value[ index ];\r\n\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset ] = value.x;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset + 1 ] = value.y;\r\n\r\n\t\t\t\t\t\t\toffset += 2;\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t} else if ( customAttribute.size === 3 ) {\r\n\r\n\t\t\t\t\t\tif ( customAttribute.type === 'c' ) {\r\n\r\n\t\t\t\t\t\t\tfor ( ca = 0; ca < cal; ca ++ ) {\r\n\r\n\t\t\t\t\t\t\t\tindex = sortArray[ ca ][ 1 ];\r\n\r\n\t\t\t\t\t\t\t\tvalue = customAttribute.value[ index ];\r\n\r\n\t\t\t\t\t\t\t\tcustomAttribute.array[ offset ] = value.r;\r\n\t\t\t\t\t\t\t\tcustomAttribute.array[ offset + 1 ] = value.g;\r\n\t\t\t\t\t\t\t\tcustomAttribute.array[ offset + 2 ] = value.b;\r\n\r\n\t\t\t\t\t\t\t\toffset += 3;\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\t\tfor ( ca = 0; ca < cal; ca ++ ) {\r\n\r\n\t\t\t\t\t\t\t\tindex = sortArray[ ca ][ 1 ];\r\n\r\n\t\t\t\t\t\t\t\tvalue = customAttribute.value[ index ];\r\n\r\n\t\t\t\t\t\t\t\tcustomAttribute.array[ offset ] = value.x;\r\n\t\t\t\t\t\t\t\tcustomAttribute.array[ offset + 1 ] = value.y;\r\n\t\t\t\t\t\t\t\tcustomAttribute.array[ offset + 2 ] = value.z;\r\n\r\n\t\t\t\t\t\t\t\toffset += 3;\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t} else if ( customAttribute.size === 4 ) {\r\n\r\n\t\t\t\t\t\tfor ( ca = 0; ca < cal; ca ++ ) {\r\n\r\n\t\t\t\t\t\t\tindex = sortArray[ ca ][ 1 ];\r\n\r\n\t\t\t\t\t\t\tvalue = customAttribute.value[ index ];\r\n\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset ] = value.x;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset + 1 ] = value.y;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset + 2 ] = value.z;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset + 3 ] = value.w;\r\n\r\n\t\t\t\t\t\t\toffset += 4;\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\r\n\t\t\tif ( dirtyVertices ) {\r\n\r\n\t\t\t\tfor ( v = 0; v < vl; v ++ ) {\r\n\r\n\t\t\t\t\tvertex = vertices[ v ];\r\n\r\n\t\t\t\t\toffset = v * 3;\r\n\r\n\t\t\t\t\tvertexArray[ offset ] = vertex.x;\r\n\t\t\t\t\tvertexArray[ offset + 1 ] = vertex.y;\r\n\t\t\t\t\tvertexArray[ offset + 2 ] = vertex.z;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( dirtyColors ) {\r\n\r\n\t\t\t\tfor ( c = 0; c < cl; c ++ ) {\r\n\r\n\t\t\t\t\tcolor = colors[ c ];\r\n\r\n\t\t\t\t\toffset = c * 3;\r\n\r\n\t\t\t\t\tcolorArray[ offset ] = color.r;\r\n\t\t\t\t\tcolorArray[ offset + 1 ] = color.g;\r\n\t\t\t\t\tcolorArray[ offset + 2 ] = color.b;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( customAttributes ) {\r\n\r\n\t\t\t\tfor ( i = 0, il = customAttributes.length; i < il; i ++ ) {\r\n\r\n\t\t\t\t\tcustomAttribute = customAttributes[ i ];\r\n\r\n\t\t\t\t\tif ( customAttribute.needsUpdate &&\r\n\t\t\t\t\t\t ( customAttribute.boundTo === undefined ||\r\n\t\t\t\t\t\t\t customAttribute.boundTo === 'vertices' ) ) {\r\n\r\n\t\t\t\t\t\tcal = customAttribute.value.length;\r\n\r\n\t\t\t\t\t\toffset = 0;\r\n\r\n\t\t\t\t\t\tif ( customAttribute.size === 1 ) {\r\n\r\n\t\t\t\t\t\t\tfor ( ca = 0; ca < cal; ca ++ ) {\r\n\r\n\t\t\t\t\t\t\t\tcustomAttribute.array[ ca ] = customAttribute.value[ ca ];\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t} else if ( customAttribute.size === 2 ) {\r\n\r\n\t\t\t\t\t\t\tfor ( ca = 0; ca < cal; ca ++ ) {\r\n\r\n\t\t\t\t\t\t\t\tvalue = customAttribute.value[ ca ];\r\n\r\n\t\t\t\t\t\t\t\tcustomAttribute.array[ offset ] = value.x;\r\n\t\t\t\t\t\t\t\tcustomAttribute.array[ offset + 1 ] = value.y;\r\n\r\n\t\t\t\t\t\t\t\toffset += 2;\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t} else if ( customAttribute.size === 3 ) {\r\n\r\n\t\t\t\t\t\t\tif ( customAttribute.type === 'c' ) {\r\n\r\n\t\t\t\t\t\t\t\tfor ( ca = 0; ca < cal; ca ++ ) {\r\n\r\n\t\t\t\t\t\t\t\t\tvalue = customAttribute.value[ ca ];\r\n\r\n\t\t\t\t\t\t\t\t\tcustomAttribute.array[ offset ] = value.r;\r\n\t\t\t\t\t\t\t\t\tcustomAttribute.array[ offset + 1 ] = value.g;\r\n\t\t\t\t\t\t\t\t\tcustomAttribute.array[ offset + 2 ] = value.b;\r\n\r\n\t\t\t\t\t\t\t\t\toffset += 3;\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\t\t\tfor ( ca = 0; ca < cal; ca ++ ) {\r\n\r\n\t\t\t\t\t\t\t\t\tvalue = customAttribute.value[ ca ];\r\n\r\n\t\t\t\t\t\t\t\t\tcustomAttribute.array[ offset ] = value.x;\r\n\t\t\t\t\t\t\t\t\tcustomAttribute.array[ offset + 1 ] = value.y;\r\n\t\t\t\t\t\t\t\t\tcustomAttribute.array[ offset + 2 ] = value.z;\r\n\r\n\t\t\t\t\t\t\t\t\toffset += 3;\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t} else if ( customAttribute.size === 4 ) {\r\n\r\n\t\t\t\t\t\t\tfor ( ca = 0; ca < cal; ca ++ ) {\r\n\r\n\t\t\t\t\t\t\t\tvalue = customAttribute.value[ ca ];\r\n\r\n\t\t\t\t\t\t\t\tcustomAttribute.array[ offset ] = value.x;\r\n\t\t\t\t\t\t\t\tcustomAttribute.array[ offset + 1 ] = value.y;\r\n\t\t\t\t\t\t\t\tcustomAttribute.array[ offset + 2 ] = value.z;\r\n\t\t\t\t\t\t\t\tcustomAttribute.array[ offset + 3 ] = value.w;\r\n\r\n\t\t\t\t\t\t\t\toffset += 4;\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( dirtyVertices || object.sortParticles ) {\r\n\r\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, geometry.__webglVertexBuffer );\r\n\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, vertexArray, hint );\r\n\r\n\t\t}\r\n\r\n\t\tif ( dirtyColors || object.sortParticles ) {\r\n\r\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, geometry.__webglColorBuffer );\r\n\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, colorArray, hint );\r\n\r\n\t\t}\r\n\r\n\t\tif ( customAttributes ) {\r\n\r\n\t\t\tfor ( i = 0, il = customAttributes.length; i < il; i ++ ) {\r\n\r\n\t\t\t\tcustomAttribute = customAttributes[ i ];\r\n\r\n\t\t\t\tif ( customAttribute.needsUpdate || object.sortParticles ) {\r\n\r\n\t\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, customAttribute.buffer );\r\n\t\t\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, customAttribute.array, hint );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction setLineBuffers ( geometry, hint ) {\r\n\r\n\t\tvar v, c, d, vertex, offset, color,\r\n\r\n\t\tvertices = geometry.vertices,\r\n\t\tcolors = geometry.colors,\r\n\t\tlineDistances = geometry.lineDistances,\r\n\r\n\t\tvl = vertices.length,\r\n\t\tcl = colors.length,\r\n\t\tdl = lineDistances.length,\r\n\r\n\t\tvertexArray = geometry.__vertexArray,\r\n\t\tcolorArray = geometry.__colorArray,\r\n\t\tlineDistanceArray = geometry.__lineDistanceArray,\r\n\r\n\t\tdirtyVertices = geometry.verticesNeedUpdate,\r\n\t\tdirtyColors = geometry.colorsNeedUpdate,\r\n\t\tdirtyLineDistances = geometry.lineDistancesNeedUpdate,\r\n\r\n\t\tcustomAttributes = geometry.__webglCustomAttributesList,\r\n\r\n\t\ti, il,\r\n\t\ta, ca, cal, value,\r\n\t\tcustomAttribute;\r\n\r\n\t\tif ( dirtyVertices ) {\r\n\r\n\t\t\tfor ( v = 0; v < vl; v ++ ) {\r\n\r\n\t\t\t\tvertex = vertices[ v ];\r\n\r\n\t\t\t\toffset = v * 3;\r\n\r\n\t\t\t\tvertexArray[ offset ] = vertex.x;\r\n\t\t\t\tvertexArray[ offset + 1 ] = vertex.y;\r\n\t\t\t\tvertexArray[ offset + 2 ] = vertex.z;\r\n\r\n\t\t\t}\r\n\r\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, geometry.__webglVertexBuffer );\r\n\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, vertexArray, hint );\r\n\r\n\t\t}\r\n\r\n\t\tif ( dirtyColors ) {\r\n\r\n\t\t\tfor ( c = 0; c < cl; c ++ ) {\r\n\r\n\t\t\t\tcolor = colors[ c ];\r\n\r\n\t\t\t\toffset = c * 3;\r\n\r\n\t\t\t\tcolorArray[ offset ] = color.r;\r\n\t\t\t\tcolorArray[ offset + 1 ] = color.g;\r\n\t\t\t\tcolorArray[ offset + 2 ] = color.b;\r\n\r\n\t\t\t}\r\n\r\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, geometry.__webglColorBuffer );\r\n\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, colorArray, hint );\r\n\r\n\t\t}\r\n\r\n\t\tif ( dirtyLineDistances ) {\r\n\r\n\t\t\tfor ( d = 0; d < dl; d ++ ) {\r\n\r\n\t\t\t\tlineDistanceArray[ d ] = lineDistances[ d ];\r\n\r\n\t\t\t}\r\n\r\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, geometry.__webglLineDistanceBuffer );\r\n\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, lineDistanceArray, hint );\r\n\r\n\t\t}\r\n\r\n\t\tif ( customAttributes ) {\r\n\r\n\t\t\tfor ( i = 0, il = customAttributes.length; i < il; i ++ ) {\r\n\r\n\t\t\t\tcustomAttribute = customAttributes[ i ];\r\n\r\n\t\t\t\tif ( customAttribute.needsUpdate &&\r\n\t\t\t\t\t ( customAttribute.boundTo === undefined ||\r\n\t\t\t\t\t\t customAttribute.boundTo === 'vertices' ) ) {\r\n\r\n\t\t\t\t\toffset = 0;\r\n\r\n\t\t\t\t\tcal = customAttribute.value.length;\r\n\r\n\t\t\t\t\tif ( customAttribute.size === 1 ) {\r\n\r\n\t\t\t\t\t\tfor ( ca = 0; ca < cal; ca ++ ) {\r\n\r\n\t\t\t\t\t\t\tcustomAttribute.array[ ca ] = customAttribute.value[ ca ];\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t} else if ( customAttribute.size === 2 ) {\r\n\r\n\t\t\t\t\t\tfor ( ca = 0; ca < cal; ca ++ ) {\r\n\r\n\t\t\t\t\t\t\tvalue = customAttribute.value[ ca ];\r\n\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset ] = value.x;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset + 1 ] = value.y;\r\n\r\n\t\t\t\t\t\t\toffset += 2;\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t} else if ( customAttribute.size === 3 ) {\r\n\r\n\t\t\t\t\t\tif ( customAttribute.type === 'c' ) {\r\n\r\n\t\t\t\t\t\t\tfor ( ca = 0; ca < cal; ca ++ ) {\r\n\r\n\t\t\t\t\t\t\t\tvalue = customAttribute.value[ ca ];\r\n\r\n\t\t\t\t\t\t\t\tcustomAttribute.array[ offset ] = value.r;\r\n\t\t\t\t\t\t\t\tcustomAttribute.array[ offset + 1 ] = value.g;\r\n\t\t\t\t\t\t\t\tcustomAttribute.array[ offset + 2 ] = value.b;\r\n\r\n\t\t\t\t\t\t\t\toffset += 3;\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\t\tfor ( ca = 0; ca < cal; ca ++ ) {\r\n\r\n\t\t\t\t\t\t\t\tvalue = customAttribute.value[ ca ];\r\n\r\n\t\t\t\t\t\t\t\tcustomAttribute.array[ offset ] = value.x;\r\n\t\t\t\t\t\t\t\tcustomAttribute.array[ offset + 1 ] = value.y;\r\n\t\t\t\t\t\t\t\tcustomAttribute.array[ offset + 2 ] = value.z;\r\n\r\n\t\t\t\t\t\t\t\toffset += 3;\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t} else if ( customAttribute.size === 4 ) {\r\n\r\n\t\t\t\t\t\tfor ( ca = 0; ca < cal; ca ++ ) {\r\n\r\n\t\t\t\t\t\t\tvalue = customAttribute.value[ ca ];\r\n\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset ] = value.x;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset + 1 ] = value.y;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset + 2 ] = value.z;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset + 3 ] = value.w;\r\n\r\n\t\t\t\t\t\t\toffset += 4;\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, customAttribute.buffer );\r\n\t\t\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, customAttribute.array, hint );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction setMeshBuffers( geometryGroup, object, hint, dispose, material ) {\r\n\r\n\t\tif ( ! geometryGroup.__inittedArrays ) {\r\n\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\r\n\t\tvar needsSmoothNormals = materialNeedsSmoothNormals( material );\r\n\r\n\t\tvar f, fl, fi, face,\r\n\t\tvertexNormals, faceNormal, normal,\r\n\t\tvertexColors, faceColor,\r\n\t\tvertexTangents,\r\n\t\tuv, uv2, v1, v2, v3, v4, t1, t2, t3, t4, n1, n2, n3, n4,\r\n\t\tc1, c2, c3,\r\n\t\tsw1, sw2, sw3, sw4,\r\n\t\tsi1, si2, si3, si4,\r\n\t\tsa1, sa2, sa3, sa4,\r\n\t\tsb1, sb2, sb3, sb4,\r\n\t\tm, ml, i, il,\r\n\t\tvn, uvi, uv2i,\r\n\t\tvk, vkl, vka,\r\n\t\tnka, chf, faceVertexNormals,\r\n\t\ta,\r\n\r\n\t\tvertexIndex = 0,\r\n\r\n\t\toffset = 0,\r\n\t\toffset_uv = 0,\r\n\t\toffset_uv2 = 0,\r\n\t\toffset_face = 0,\r\n\t\toffset_normal = 0,\r\n\t\toffset_tangent = 0,\r\n\t\toffset_line = 0,\r\n\t\toffset_color = 0,\r\n\t\toffset_skin = 0,\r\n\t\toffset_morphTarget = 0,\r\n\t\toffset_custom = 0,\r\n\t\toffset_customSrc = 0,\r\n\r\n\t\tvalue,\r\n\r\n\t\tvertexArray = geometryGroup.__vertexArray,\r\n\t\tuvArray = geometryGroup.__uvArray,\r\n\t\tuv2Array = geometryGroup.__uv2Array,\r\n\t\tnormalArray = geometryGroup.__normalArray,\r\n\t\ttangentArray = geometryGroup.__tangentArray,\r\n\t\tcolorArray = geometryGroup.__colorArray,\r\n\r\n\t\tskinIndexArray = geometryGroup.__skinIndexArray,\r\n\t\tskinWeightArray = geometryGroup.__skinWeightArray,\r\n\r\n\t\tmorphTargetsArrays = geometryGroup.__morphTargetsArrays,\r\n\t\tmorphNormalsArrays = geometryGroup.__morphNormalsArrays,\r\n\r\n\t\tcustomAttributes = geometryGroup.__webglCustomAttributesList,\r\n\t\tcustomAttribute,\r\n\r\n\t\tfaceArray = geometryGroup.__faceArray,\r\n\t\tlineArray = geometryGroup.__lineArray,\r\n\r\n\t\tgeometry = object.geometry, // this is shared for all chunks\r\n\r\n\t\tdirtyVertices = geometry.verticesNeedUpdate,\r\n\t\tdirtyElements = geometry.elementsNeedUpdate,\r\n\t\tdirtyUvs = geometry.uvsNeedUpdate,\r\n\t\tdirtyNormals = geometry.normalsNeedUpdate,\r\n\t\tdirtyTangents = geometry.tangentsNeedUpdate,\r\n\t\tdirtyColors = geometry.colorsNeedUpdate,\r\n\t\tdirtyMorphTargets = geometry.morphTargetsNeedUpdate,\r\n\r\n\t\tvertices = geometry.vertices,\r\n\t\tchunk_faces3 = geometryGroup.faces3,\r\n\t\tobj_faces = geometry.faces,\r\n\r\n\t\tobj_uvs = geometry.faceVertexUvs[ 0 ],\r\n\t\tobj_uvs2 = geometry.faceVertexUvs[ 1 ],\r\n\r\n\t\tobj_colors = geometry.colors,\r\n\r\n\t\tobj_skinIndices = geometry.skinIndices,\r\n\t\tobj_skinWeights = geometry.skinWeights,\r\n\r\n\t\tmorphTargets = geometry.morphTargets,\r\n\t\tmorphNormals = geometry.morphNormals;\r\n\r\n\t\tif ( dirtyVertices ) {\r\n\r\n\t\t\tfor ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {\r\n\r\n\t\t\t\tface = obj_faces[ chunk_faces3[ f ] ];\r\n\r\n\t\t\t\tv1 = vertices[ face.a ];\r\n\t\t\t\tv2 = vertices[ face.b ];\r\n\t\t\t\tv3 = vertices[ face.c ];\r\n\r\n\t\t\t\tvertexArray[ offset ] = v1.x;\r\n\t\t\t\tvertexArray[ offset + 1 ] = v1.y;\r\n\t\t\t\tvertexArray[ offset + 2 ] = v1.z;\r\n\r\n\t\t\t\tvertexArray[ offset + 3 ] = v2.x;\r\n\t\t\t\tvertexArray[ offset + 4 ] = v2.y;\r\n\t\t\t\tvertexArray[ offset + 5 ] = v2.z;\r\n\r\n\t\t\t\tvertexArray[ offset + 6 ] = v3.x;\r\n\t\t\t\tvertexArray[ offset + 7 ] = v3.y;\r\n\t\t\t\tvertexArray[ offset + 8 ] = v3.z;\r\n\r\n\t\t\t\toffset += 9;\r\n\r\n\t\t\t}\r\n\r\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, geometryGroup.__webglVertexBuffer );\r\n\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, vertexArray, hint );\r\n\r\n\t\t}\r\n\r\n\t\tif ( dirtyMorphTargets ) {\r\n\r\n\t\t\tfor ( vk = 0, vkl = morphTargets.length; vk < vkl; vk ++ ) {\r\n\r\n\t\t\t\toffset_morphTarget = 0;\r\n\r\n\t\t\t\tfor ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {\r\n\r\n\t\t\t\t\tchf = chunk_faces3[ f ];\r\n\t\t\t\t\tface = obj_faces[ chf ];\r\n\r\n\t\t\t\t\t// morph positions\r\n\r\n\t\t\t\t\tv1 = morphTargets[ vk ].vertices[ face.a ];\r\n\t\t\t\t\tv2 = morphTargets[ vk ].vertices[ face.b ];\r\n\t\t\t\t\tv3 = morphTargets[ vk ].vertices[ face.c ];\r\n\r\n\t\t\t\t\tvka = morphTargetsArrays[ vk ];\r\n\r\n\t\t\t\t\tvka[ offset_morphTarget ] = v1.x;\r\n\t\t\t\t\tvka[ offset_morphTarget + 1 ] = v1.y;\r\n\t\t\t\t\tvka[ offset_morphTarget + 2 ] = v1.z;\r\n\r\n\t\t\t\t\tvka[ offset_morphTarget + 3 ] = v2.x;\r\n\t\t\t\t\tvka[ offset_morphTarget + 4 ] = v2.y;\r\n\t\t\t\t\tvka[ offset_morphTarget + 5 ] = v2.z;\r\n\r\n\t\t\t\t\tvka[ offset_morphTarget + 6 ] = v3.x;\r\n\t\t\t\t\tvka[ offset_morphTarget + 7 ] = v3.y;\r\n\t\t\t\t\tvka[ offset_morphTarget + 8 ] = v3.z;\r\n\r\n\t\t\t\t\t// morph normals\r\n\r\n\t\t\t\t\tif ( material.morphNormals ) {\r\n\r\n\t\t\t\t\t\tif ( needsSmoothNormals ) {\r\n\r\n\t\t\t\t\t\t\tfaceVertexNormals = morphNormals[ vk ].vertexNormals[ chf ];\r\n\r\n\t\t\t\t\t\t\tn1 = faceVertexNormals.a;\r\n\t\t\t\t\t\t\tn2 = faceVertexNormals.b;\r\n\t\t\t\t\t\t\tn3 = faceVertexNormals.c;\r\n\r\n\t\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\t\tn1 = morphNormals[ vk ].faceNormals[ chf ];\r\n\t\t\t\t\t\t\tn2 = n1;\r\n\t\t\t\t\t\t\tn3 = n1;\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tnka = morphNormalsArrays[ vk ];\r\n\r\n\t\t\t\t\t\tnka[ offset_morphTarget ] = n1.x;\r\n\t\t\t\t\t\tnka[ offset_morphTarget + 1 ] = n1.y;\r\n\t\t\t\t\t\tnka[ offset_morphTarget + 2 ] = n1.z;\r\n\r\n\t\t\t\t\t\tnka[ offset_morphTarget + 3 ] = n2.x;\r\n\t\t\t\t\t\tnka[ offset_morphTarget + 4 ] = n2.y;\r\n\t\t\t\t\t\tnka[ offset_morphTarget + 5 ] = n2.z;\r\n\r\n\t\t\t\t\t\tnka[ offset_morphTarget + 6 ] = n3.x;\r\n\t\t\t\t\t\tnka[ offset_morphTarget + 7 ] = n3.y;\r\n\t\t\t\t\t\tnka[ offset_morphTarget + 8 ] = n3.z;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//\r\n\r\n\t\t\t\t\toffset_morphTarget += 9;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, geometryGroup.__webglMorphTargetsBuffers[ vk ] );\r\n\t\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, morphTargetsArrays[ vk ], hint );\r\n\r\n\t\t\t\tif ( material.morphNormals ) {\r\n\r\n\t\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, geometryGroup.__webglMorphNormalsBuffers[ vk ] );\r\n\t\t\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, morphNormalsArrays[ vk ], hint );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( obj_skinWeights.length ) {\r\n\r\n\t\t\tfor ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {\r\n\r\n\t\t\t\tface = obj_faces[ chunk_faces3[ f ] ];\r\n\r\n\t\t\t\t// weights\r\n\r\n\t\t\t\tsw1 = obj_skinWeights[ face.a ];\r\n\t\t\t\tsw2 = obj_skinWeights[ face.b ];\r\n\t\t\t\tsw3 = obj_skinWeights[ face.c ];\r\n\r\n\t\t\t\tskinWeightArray[ offset_skin ] = sw1.x;\r\n\t\t\t\tskinWeightArray[ offset_skin + 1 ] = sw1.y;\r\n\t\t\t\tskinWeightArray[ offset_skin + 2 ] = sw1.z;\r\n\t\t\t\tskinWeightArray[ offset_skin + 3 ] = sw1.w;\r\n\r\n\t\t\t\tskinWeightArray[ offset_skin + 4 ] = sw2.x;\r\n\t\t\t\tskinWeightArray[ offset_skin + 5 ] = sw2.y;\r\n\t\t\t\tskinWeightArray[ offset_skin + 6 ] = sw2.z;\r\n\t\t\t\tskinWeightArray[ offset_skin + 7 ] = sw2.w;\r\n\r\n\t\t\t\tskinWeightArray[ offset_skin + 8 ] = sw3.x;\r\n\t\t\t\tskinWeightArray[ offset_skin + 9 ] = sw3.y;\r\n\t\t\t\tskinWeightArray[ offset_skin + 10 ] = sw3.z;\r\n\t\t\t\tskinWeightArray[ offset_skin + 11 ] = sw3.w;\r\n\r\n\t\t\t\t// indices\r\n\r\n\t\t\t\tsi1 = obj_skinIndices[ face.a ];\r\n\t\t\t\tsi2 = obj_skinIndices[ face.b ];\r\n\t\t\t\tsi3 = obj_skinIndices[ face.c ];\r\n\r\n\t\t\t\tskinIndexArray[ offset_skin ] = si1.x;\r\n\t\t\t\tskinIndexArray[ offset_skin + 1 ] = si1.y;\r\n\t\t\t\tskinIndexArray[ offset_skin + 2 ] = si1.z;\r\n\t\t\t\tskinIndexArray[ offset_skin + 3 ] = si1.w;\r\n\r\n\t\t\t\tskinIndexArray[ offset_skin + 4 ] = si2.x;\r\n\t\t\t\tskinIndexArray[ offset_skin + 5 ] = si2.y;\r\n\t\t\t\tskinIndexArray[ offset_skin + 6 ] = si2.z;\r\n\t\t\t\tskinIndexArray[ offset_skin + 7 ] = si2.w;\r\n\r\n\t\t\t\tskinIndexArray[ offset_skin + 8 ] = si3.x;\r\n\t\t\t\tskinIndexArray[ offset_skin + 9 ] = si3.y;\r\n\t\t\t\tskinIndexArray[ offset_skin + 10 ] = si3.z;\r\n\t\t\t\tskinIndexArray[ offset_skin + 11 ] = si3.w;\r\n\r\n\t\t\t\toffset_skin += 12;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( offset_skin > 0 ) {\r\n\r\n\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, geometryGroup.__webglSkinIndicesBuffer );\r\n\t\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, skinIndexArray, hint );\r\n\r\n\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, geometryGroup.__webglSkinWeightsBuffer );\r\n\t\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, skinWeightArray, hint );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( dirtyColors ) {\r\n\r\n\t\t\tfor ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {\r\n\r\n\t\t\t\tface = obj_faces[ chunk_faces3[ f ] ];\r\n\r\n\t\t\t\tvertexColors = face.vertexColors;\r\n\t\t\t\tfaceColor = face.color;\r\n\r\n\t\t\t\tif ( vertexColors.length === 3 && material.vertexColors === THREE.VertexColors ) {\r\n\r\n\t\t\t\t\tc1 = vertexColors[ 0 ];\r\n\t\t\t\t\tc2 = vertexColors[ 1 ];\r\n\t\t\t\t\tc3 = vertexColors[ 2 ];\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tc1 = faceColor;\r\n\t\t\t\t\tc2 = faceColor;\r\n\t\t\t\t\tc3 = faceColor;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcolorArray[ offset_color ] = c1.r;\r\n\t\t\t\tcolorArray[ offset_color + 1 ] = c1.g;\r\n\t\t\t\tcolorArray[ offset_color + 2 ] = c1.b;\r\n\r\n\t\t\t\tcolorArray[ offset_color + 3 ] = c2.r;\r\n\t\t\t\tcolorArray[ offset_color + 4 ] = c2.g;\r\n\t\t\t\tcolorArray[ offset_color + 5 ] = c2.b;\r\n\r\n\t\t\t\tcolorArray[ offset_color + 6 ] = c3.r;\r\n\t\t\t\tcolorArray[ offset_color + 7 ] = c3.g;\r\n\t\t\t\tcolorArray[ offset_color + 8 ] = c3.b;\r\n\r\n\t\t\t\toffset_color += 9;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( offset_color > 0 ) {\r\n\r\n\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, geometryGroup.__webglColorBuffer );\r\n\t\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, colorArray, hint );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( dirtyTangents && geometry.hasTangents ) {\r\n\r\n\t\t\tfor ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {\r\n\r\n\t\t\t\tface = obj_faces[ chunk_faces3[ f ] ];\r\n\r\n\t\t\t\tvertexTangents = face.vertexTangents;\r\n\r\n\t\t\t\tt1 = vertexTangents[ 0 ];\r\n\t\t\t\tt2 = vertexTangents[ 1 ];\r\n\t\t\t\tt3 = vertexTangents[ 2 ];\r\n\r\n\t\t\t\ttangentArray[ offset_tangent ] = t1.x;\r\n\t\t\t\ttangentArray[ offset_tangent + 1 ] = t1.y;\r\n\t\t\t\ttangentArray[ offset_tangent + 2 ] = t1.z;\r\n\t\t\t\ttangentArray[ offset_tangent + 3 ] = t1.w;\r\n\r\n\t\t\t\ttangentArray[ offset_tangent + 4 ] = t2.x;\r\n\t\t\t\ttangentArray[ offset_tangent + 5 ] = t2.y;\r\n\t\t\t\ttangentArray[ offset_tangent + 6 ] = t2.z;\r\n\t\t\t\ttangentArray[ offset_tangent + 7 ] = t2.w;\r\n\r\n\t\t\t\ttangentArray[ offset_tangent + 8 ] = t3.x;\r\n\t\t\t\ttangentArray[ offset_tangent + 9 ] = t3.y;\r\n\t\t\t\ttangentArray[ offset_tangent + 10 ] = t3.z;\r\n\t\t\t\ttangentArray[ offset_tangent + 11 ] = t3.w;\r\n\r\n\t\t\t\toffset_tangent += 12;\r\n\r\n\t\t\t}\r\n\r\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, geometryGroup.__webglTangentBuffer );\r\n\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, tangentArray, hint );\r\n\r\n\t\t}\r\n\r\n\t\tif ( dirtyNormals ) {\r\n\r\n\t\t\tfor ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {\r\n\r\n\t\t\t\tface = obj_faces[ chunk_faces3[ f ] ];\r\n\r\n\t\t\t\tvertexNormals = face.vertexNormals;\r\n\t\t\t\tfaceNormal = face.normal;\r\n\r\n\t\t\t\tif ( vertexNormals.length === 3 && needsSmoothNormals ) {\r\n\r\n\t\t\t\t\tfor ( i = 0; i < 3; i ++ ) {\r\n\r\n\t\t\t\t\t\tvn = vertexNormals[ i ];\r\n\r\n\t\t\t\t\t\tnormalArray[ offset_normal ] = vn.x;\r\n\t\t\t\t\t\tnormalArray[ offset_normal + 1 ] = vn.y;\r\n\t\t\t\t\t\tnormalArray[ offset_normal + 2 ] = vn.z;\r\n\r\n\t\t\t\t\t\toffset_normal += 3;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tfor ( i = 0; i < 3; i ++ ) {\r\n\r\n\t\t\t\t\t\tnormalArray[ offset_normal ] = faceNormal.x;\r\n\t\t\t\t\t\tnormalArray[ offset_normal + 1 ] = faceNormal.y;\r\n\t\t\t\t\t\tnormalArray[ offset_normal + 2 ] = faceNormal.z;\r\n\r\n\t\t\t\t\t\toffset_normal += 3;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, geometryGroup.__webglNormalBuffer );\r\n\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, normalArray, hint );\r\n\r\n\t\t}\r\n\r\n\t\tif ( dirtyUvs && obj_uvs ) {\r\n\r\n\t\t\tfor ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {\r\n\r\n\t\t\t\tfi = chunk_faces3[ f ];\r\n\r\n\t\t\t\tuv = obj_uvs[ fi ];\r\n\r\n\t\t\t\tif ( uv === undefined ) continue;\r\n\r\n\t\t\t\tfor ( i = 0; i < 3; i ++ ) {\r\n\r\n\t\t\t\t\tuvi = uv[ i ];\r\n\r\n\t\t\t\t\tuvArray[ offset_uv ] = uvi.x;\r\n\t\t\t\t\tuvArray[ offset_uv + 1 ] = uvi.y;\r\n\r\n\t\t\t\t\toffset_uv += 2;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( offset_uv > 0 ) {\r\n\r\n\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, geometryGroup.__webglUVBuffer );\r\n\t\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, uvArray, hint );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( dirtyUvs && obj_uvs2 ) {\r\n\r\n\t\t\tfor ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {\r\n\r\n\t\t\t\tfi = chunk_faces3[ f ];\r\n\r\n\t\t\t\tuv2 = obj_uvs2[ fi ];\r\n\r\n\t\t\t\tif ( uv2 === undefined ) continue;\r\n\r\n\t\t\t\tfor ( i = 0; i < 3; i ++ ) {\r\n\r\n\t\t\t\t\tuv2i = uv2[ i ];\r\n\r\n\t\t\t\t\tuv2Array[ offset_uv2 ] = uv2i.x;\r\n\t\t\t\t\tuv2Array[ offset_uv2 + 1 ] = uv2i.y;\r\n\r\n\t\t\t\t\toffset_uv2 += 2;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( offset_uv2 > 0 ) {\r\n\r\n\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, geometryGroup.__webglUV2Buffer );\r\n\t\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, uv2Array, hint );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( dirtyElements ) {\r\n\r\n\t\t\tfor ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {\r\n\r\n\t\t\t\tfaceArray[ offset_face ] = vertexIndex;\r\n\t\t\t\tfaceArray[ offset_face + 1 ] = vertexIndex + 1;\r\n\t\t\t\tfaceArray[ offset_face + 2 ] = vertexIndex + 2;\r\n\r\n\t\t\t\toffset_face += 3;\r\n\r\n\t\t\t\tlineArray[ offset_line ] = vertexIndex;\r\n\t\t\t\tlineArray[ offset_line + 1 ] = vertexIndex + 1;\r\n\r\n\t\t\t\tlineArray[ offset_line + 2 ] = vertexIndex;\r\n\t\t\t\tlineArray[ offset_line + 3 ] = vertexIndex + 2;\r\n\r\n\t\t\t\tlineArray[ offset_line + 4 ] = vertexIndex + 1;\r\n\t\t\t\tlineArray[ offset_line + 5 ] = vertexIndex + 2;\r\n\r\n\t\t\t\toffset_line += 6;\r\n\r\n\t\t\t\tvertexIndex += 3;\r\n\r\n\t\t\t}\r\n\r\n\t\t\t_gl.bindBuffer( _gl.ELEMENT_ARRAY_BUFFER, geometryGroup.__webglFaceBuffer );\r\n\t\t\t_gl.bufferData( _gl.ELEMENT_ARRAY_BUFFER, faceArray, hint );\r\n\r\n\t\t\t_gl.bindBuffer( _gl.ELEMENT_ARRAY_BUFFER, geometryGroup.__webglLineBuffer );\r\n\t\t\t_gl.bufferData( _gl.ELEMENT_ARRAY_BUFFER, lineArray, hint );\r\n\r\n\t\t}\r\n\r\n\t\tif ( customAttributes ) {\r\n\r\n\t\t\tfor ( i = 0, il = customAttributes.length; i < il; i ++ ) {\r\n\r\n\t\t\t\tcustomAttribute = customAttributes[ i ];\r\n\r\n\t\t\t\tif ( ! customAttribute.__original.needsUpdate ) continue;\r\n\r\n\t\t\t\toffset_custom = 0;\r\n\t\t\t\toffset_customSrc = 0;\r\n\r\n\t\t\t\tif ( customAttribute.size === 1 ) {\r\n\r\n\t\t\t\t\tif ( customAttribute.boundTo === undefined || customAttribute.boundTo === 'vertices' ) {\r\n\r\n\t\t\t\t\t\tfor ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {\r\n\r\n\t\t\t\t\t\t\tface = obj_faces[ chunk_faces3[ f ] ];\r\n\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom ] = customAttribute.value[ face.a ];\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 1 ] = customAttribute.value[ face.b ];\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 2 ] = customAttribute.value[ face.c ];\r\n\r\n\t\t\t\t\t\t\toffset_custom += 3;\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t} else if ( customAttribute.boundTo === 'faces' ) {\r\n\r\n\t\t\t\t\t\tfor ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {\r\n\r\n\t\t\t\t\t\t\tvalue = customAttribute.value[ chunk_faces3[ f ] ];\r\n\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom ] = value;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 1 ] = value;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 2 ] = value;\r\n\r\n\t\t\t\t\t\t\toffset_custom += 3;\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else if ( customAttribute.size === 2 ) {\r\n\r\n\t\t\t\t\tif ( customAttribute.boundTo === undefined || customAttribute.boundTo === 'vertices' ) {\r\n\r\n\t\t\t\t\t\tfor ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {\r\n\r\n\t\t\t\t\t\t\tface = obj_faces[ chunk_faces3[ f ] ];\r\n\r\n\t\t\t\t\t\t\tv1 = customAttribute.value[ face.a ];\r\n\t\t\t\t\t\t\tv2 = customAttribute.value[ face.b ];\r\n\t\t\t\t\t\t\tv3 = customAttribute.value[ face.c ];\r\n\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom ] = v1.x;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 1 ] = v1.y;\r\n\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 2 ] = v2.x;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 3 ] = v2.y;\r\n\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 4 ] = v3.x;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 5 ] = v3.y;\r\n\r\n\t\t\t\t\t\t\toffset_custom += 6;\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t} else if ( customAttribute.boundTo === 'faces' ) {\r\n\r\n\t\t\t\t\t\tfor ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {\r\n\r\n\t\t\t\t\t\t\tvalue = customAttribute.value[ chunk_faces3[ f ] ];\r\n\r\n\t\t\t\t\t\t\tv1 = value;\r\n\t\t\t\t\t\t\tv2 = value;\r\n\t\t\t\t\t\t\tv3 = value;\r\n\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom ] = v1.x;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 1 ] = v1.y;\r\n\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 2 ] = v2.x;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 3 ] = v2.y;\r\n\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 4 ] = v3.x;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 5 ] = v3.y;\r\n\r\n\t\t\t\t\t\t\toffset_custom += 6;\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else if ( customAttribute.size === 3 ) {\r\n\r\n\t\t\t\t\tvar pp;\r\n\r\n\t\t\t\t\tif ( customAttribute.type === 'c' ) {\r\n\r\n\t\t\t\t\t\tpp = [ 'r', 'g', 'b' ];\r\n\r\n\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\tpp = [ 'x', 'y', 'z' ];\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ( customAttribute.boundTo === undefined || customAttribute.boundTo === 'vertices' ) {\r\n\r\n\t\t\t\t\t\tfor ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {\r\n\r\n\t\t\t\t\t\t\tface = obj_faces[ chunk_faces3[ f ] ];\r\n\r\n\t\t\t\t\t\t\tv1 = customAttribute.value[ face.a ];\r\n\t\t\t\t\t\t\tv2 = customAttribute.value[ face.b ];\r\n\t\t\t\t\t\t\tv3 = customAttribute.value[ face.c ];\r\n\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom ] = v1[ pp[ 0 ] ];\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 1 ] = v1[ pp[ 1 ] ];\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 2 ] = v1[ pp[ 2 ] ];\r\n\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 3 ] = v2[ pp[ 0 ] ];\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 4 ] = v2[ pp[ 1 ] ];\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 5 ] = v2[ pp[ 2 ] ];\r\n\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 6 ] = v3[ pp[ 0 ] ];\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 7 ] = v3[ pp[ 1 ] ];\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 8 ] = v3[ pp[ 2 ] ];\r\n\r\n\t\t\t\t\t\t\toffset_custom += 9;\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t} else if ( customAttribute.boundTo === 'faces' ) {\r\n\r\n\t\t\t\t\t\tfor ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {\r\n\r\n\t\t\t\t\t\t\tvalue = customAttribute.value[ chunk_faces3[ f ] ];\r\n\r\n\t\t\t\t\t\t\tv1 = value;\r\n\t\t\t\t\t\t\tv2 = value;\r\n\t\t\t\t\t\t\tv3 = value;\r\n\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom ] = v1[ pp[ 0 ] ];\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 1 ] = v1[ pp[ 1 ] ];\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 2 ] = v1[ pp[ 2 ] ];\r\n\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 3 ] = v2[ pp[ 0 ] ];\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 4 ] = v2[ pp[ 1 ] ];\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 5 ] = v2[ pp[ 2 ] ];\r\n\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 6 ] = v3[ pp[ 0 ] ];\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 7 ] = v3[ pp[ 1 ] ];\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 8 ] = v3[ pp[ 2 ] ];\r\n\r\n\t\t\t\t\t\t\toffset_custom += 9;\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t} else if ( customAttribute.boundTo === 'faceVertices' ) {\r\n\r\n\t\t\t\t\t\tfor ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {\r\n\r\n\t\t\t\t\t\t\tvalue = customAttribute.value[ chunk_faces3[ f ] ];\r\n\r\n\t\t\t\t\t\t\tv1 = value[ 0 ];\r\n\t\t\t\t\t\t\tv2 = value[ 1 ];\r\n\t\t\t\t\t\t\tv3 = value[ 2 ];\r\n\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom ] = v1[ pp[ 0 ] ];\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 1 ] = v1[ pp[ 1 ] ];\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 2 ] = v1[ pp[ 2 ] ];\r\n\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 3 ] = v2[ pp[ 0 ] ];\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 4 ] = v2[ pp[ 1 ] ];\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 5 ] = v2[ pp[ 2 ] ];\r\n\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 6 ] = v3[ pp[ 0 ] ];\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 7 ] = v3[ pp[ 1 ] ];\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 8 ] = v3[ pp[ 2 ] ];\r\n\r\n\t\t\t\t\t\t\toffset_custom += 9;\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else if ( customAttribute.size === 4 ) {\r\n\r\n\t\t\t\t\tif ( customAttribute.boundTo === undefined || customAttribute.boundTo === 'vertices' ) {\r\n\r\n\t\t\t\t\t\tfor ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {\r\n\r\n\t\t\t\t\t\t\tface = obj_faces[ chunk_faces3[ f ] ];\r\n\r\n\t\t\t\t\t\t\tv1 = customAttribute.value[ face.a ];\r\n\t\t\t\t\t\t\tv2 = customAttribute.value[ face.b ];\r\n\t\t\t\t\t\t\tv3 = customAttribute.value[ face.c ];\r\n\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom ] = v1.x;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 1 ] = v1.y;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 2 ] = v1.z;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 3 ] = v1.w;\r\n\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 4 ] = v2.x;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 5 ] = v2.y;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 6 ] = v2.z;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 7 ] = v2.w;\r\n\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 8 ] = v3.x;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 9 ] = v3.y;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 10 ] = v3.z;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 11 ] = v3.w;\r\n\r\n\t\t\t\t\t\t\toffset_custom += 12;\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t} else if ( customAttribute.boundTo === 'faces' ) {\r\n\r\n\t\t\t\t\t\tfor ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {\r\n\r\n\t\t\t\t\t\t\tvalue = customAttribute.value[ chunk_faces3[ f ] ];\r\n\r\n\t\t\t\t\t\t\tv1 = value;\r\n\t\t\t\t\t\t\tv2 = value;\r\n\t\t\t\t\t\t\tv3 = value;\r\n\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom ] = v1.x;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 1 ] = v1.y;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 2 ] = v1.z;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 3 ] = v1.w;\r\n\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 4 ] = v2.x;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 5 ] = v2.y;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 6 ] = v2.z;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 7 ] = v2.w;\r\n\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 8 ] = v3.x;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 9 ] = v3.y;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 10 ] = v3.z;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 11 ] = v3.w;\r\n\r\n\t\t\t\t\t\t\toffset_custom += 12;\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t} else if ( customAttribute.boundTo === 'faceVertices' ) {\r\n\r\n\t\t\t\t\t\tfor ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {\r\n\r\n\t\t\t\t\t\t\tvalue = customAttribute.value[ chunk_faces3[ f ] ];\r\n\r\n\t\t\t\t\t\t\tv1 = value[ 0 ];\r\n\t\t\t\t\t\t\tv2 = value[ 1 ];\r\n\t\t\t\t\t\t\tv3 = value[ 2 ];\r\n\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom ] = v1.x;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 1 ] = v1.y;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 2 ] = v1.z;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 3 ] = v1.w;\r\n\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 4 ] = v2.x;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 5 ] = v2.y;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 6 ] = v2.z;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 7 ] = v2.w;\r\n\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 8 ] = v3.x;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 9 ] = v3.y;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 10 ] = v3.z;\r\n\t\t\t\t\t\t\tcustomAttribute.array[ offset_custom + 11 ] = v3.w;\r\n\r\n\t\t\t\t\t\t\toffset_custom += 12;\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, customAttribute.buffer );\r\n\t\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, customAttribute.array, hint );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( dispose ) {\r\n\r\n\t\t\tdelete geometryGroup.__inittedArrays;\r\n\t\t\tdelete geometryGroup.__colorArray;\r\n\t\t\tdelete geometryGroup.__normalArray;\r\n\t\t\tdelete geometryGroup.__tangentArray;\r\n\t\t\tdelete geometryGroup.__uvArray;\r\n\t\t\tdelete geometryGroup.__uv2Array;\r\n\t\t\tdelete geometryGroup.__faceArray;\r\n\t\t\tdelete geometryGroup.__vertexArray;\r\n\t\t\tdelete geometryGroup.__lineArray;\r\n\t\t\tdelete geometryGroup.__skinIndexArray;\r\n\t\t\tdelete geometryGroup.__skinWeightArray;\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tfunction setDirectBuffers( geometry ) {\r\n\r\n\t\tvar attributes = geometry.attributes;\r\n\t\tvar attributesKeys = geometry.attributesKeys;\r\n\r\n\t\tfor ( var i = 0, l = attributesKeys.length; i < l; i ++ ) {\r\n\r\n\t\t\tvar key = attributesKeys[ i ];\r\n\t\t\tvar attribute = attributes[ key ];\r\n\r\n\t\t\tif ( attribute.buffer === undefined ) {\r\n\r\n\t\t\t\tattribute.buffer = _gl.createBuffer();\r\n\t\t\t\tattribute.needsUpdate = true;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( attribute.needsUpdate === true ) {\r\n\r\n\t\t\t\tvar bufferType = ( key === 'index' ) ? _gl.ELEMENT_ARRAY_BUFFER : _gl.ARRAY_BUFFER;\r\n\r\n\t\t\t\t_gl.bindBuffer( bufferType, attribute.buffer );\r\n\t\t\t\t_gl.bufferData( bufferType, attribute.array, _gl.STATIC_DRAW );\r\n\r\n\t\t\t\tattribute.needsUpdate = false;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// Buffer rendering\r\n\r\n\tthis.renderBufferImmediate = function ( object, program, material ) {\r\n\r\n\t\tinitAttributes();\r\n\r\n\t\tif ( object.hasPositions && ! object.__webglVertexBuffer ) object.__webglVertexBuffer = _gl.createBuffer();\r\n\t\tif ( object.hasNormals && ! object.__webglNormalBuffer ) object.__webglNormalBuffer = _gl.createBuffer();\r\n\t\tif ( object.hasUvs && ! object.__webglUvBuffer ) object.__webglUvBuffer = _gl.createBuffer();\r\n\t\tif ( object.hasColors && ! object.__webglColorBuffer ) object.__webglColorBuffer = _gl.createBuffer();\r\n\r\n\t\tif ( object.hasPositions ) {\r\n\r\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, object.__webglVertexBuffer );\r\n\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, object.positionArray, _gl.DYNAMIC_DRAW );\r\n\t\t\tenableAttribute( program.attributes.position );\r\n\t\t\t_gl.vertexAttribPointer( program.attributes.position, 3, _gl.FLOAT, false, 0, 0 );\r\n\r\n\t\t}\r\n\r\n\t\tif ( object.hasNormals ) {\r\n\r\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, object.__webglNormalBuffer );\r\n\r\n\t\t\tif ( material.shading === THREE.FlatShading ) {\r\n\r\n\t\t\t\tvar nx, ny, nz,\r\n\t\t\t\t\tnax, nbx, ncx, nay, nby, ncy, naz, nbz, ncz,\r\n\t\t\t\t\tnormalArray,\r\n\t\t\t\t\ti, il = object.count * 3;\r\n\r\n\t\t\t\tfor ( i = 0; i < il; i += 9 ) {\r\n\r\n\t\t\t\t\tnormalArray = object.normalArray;\r\n\r\n\t\t\t\t\tnax = normalArray[ i ];\r\n\t\t\t\t\tnay = normalArray[ i + 1 ];\r\n\t\t\t\t\tnaz = normalArray[ i + 2 ];\r\n\r\n\t\t\t\t\tnbx = normalArray[ i + 3 ];\r\n\t\t\t\t\tnby = normalArray[ i + 4 ];\r\n\t\t\t\t\tnbz = normalArray[ i + 5 ];\r\n\r\n\t\t\t\t\tncx = normalArray[ i + 6 ];\r\n\t\t\t\t\tncy = normalArray[ i + 7 ];\r\n\t\t\t\t\tncz = normalArray[ i + 8 ];\r\n\r\n\t\t\t\t\tnx = ( nax + nbx + ncx ) / 3;\r\n\t\t\t\t\tny = ( nay + nby + ncy ) / 3;\r\n\t\t\t\t\tnz = ( naz + nbz + ncz ) / 3;\r\n\r\n\t\t\t\t\tnormalArray[ i ] = nx;\r\n\t\t\t\t\tnormalArray[ i + 1 ] = ny;\r\n\t\t\t\t\tnormalArray[ i + 2 ] = nz;\r\n\r\n\t\t\t\t\tnormalArray[ i + 3 ] = nx;\r\n\t\t\t\t\tnormalArray[ i + 4 ] = ny;\r\n\t\t\t\t\tnormalArray[ i + 5 ] = nz;\r\n\r\n\t\t\t\t\tnormalArray[ i + 6 ] = nx;\r\n\t\t\t\t\tnormalArray[ i + 7 ] = ny;\r\n\t\t\t\t\tnormalArray[ i + 8 ] = nz;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, object.normalArray, _gl.DYNAMIC_DRAW );\r\n\t\t\tenableAttribute( program.attributes.normal );\r\n\t\t\t_gl.vertexAttribPointer( program.attributes.normal, 3, _gl.FLOAT, false, 0, 0 );\r\n\r\n\t\t}\r\n\r\n\t\tif ( object.hasUvs && material.map ) {\r\n\r\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, object.__webglUvBuffer );\r\n\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, object.uvArray, _gl.DYNAMIC_DRAW );\r\n\t\t\tenableAttribute( program.attributes.uv );\r\n\t\t\t_gl.vertexAttribPointer( program.attributes.uv, 2, _gl.FLOAT, false, 0, 0 );\r\n\r\n\t\t}\r\n\r\n\t\tif ( object.hasColors && material.vertexColors !== THREE.NoColors ) {\r\n\r\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, object.__webglColorBuffer );\r\n\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, object.colorArray, _gl.DYNAMIC_DRAW );\r\n\t\t\tenableAttribute( program.attributes.color );\r\n\t\t\t_gl.vertexAttribPointer( program.attributes.color, 3, _gl.FLOAT, false, 0, 0 );\r\n\r\n\t\t}\r\n\r\n\t\tdisableUnusedAttributes();\r\n\r\n\t\t_gl.drawArrays( _gl.TRIANGLES, 0, object.count );\r\n\r\n\t\tobject.count = 0;\r\n\r\n\t};\r\n\r\n\tfunction setupVertexAttributes( material, program, geometry, startIndex ) {\r\n\r\n\t\tvar geometryAttributes = geometry.attributes;\r\n\r\n\t\tvar programAttributes = program.attributes;\r\n\t\tvar programAttributesKeys = program.attributesKeys;\r\n\r\n\t\tfor ( var i = 0, l = programAttributesKeys.length; i < l; i ++ ) {\r\n\r\n\t\t\tvar key = programAttributesKeys[ i ];\r\n\t\t\tvar programAttribute = programAttributes[ key ];\r\n\r\n\t\t\tif ( programAttribute >= 0 ) {\r\n\r\n\t\t\t\tvar geometryAttribute = geometryAttributes[ key ];\r\n\r\n\t\t\t\tif ( geometryAttribute !== undefined ) {\r\n\r\n\t\t\t\t\tvar size = geometryAttribute.itemSize;\r\n\r\n\t\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, geometryAttribute.buffer );\r\n\r\n\t\t\t\t\tenableAttribute( programAttribute );\r\n\r\n\t\t\t\t\t_gl.vertexAttribPointer( programAttribute, size, _gl.FLOAT, false, 0, startIndex * size * 4 ); // 4 bytes per Float32\r\n\r\n\t\t\t\t} else if ( material.defaultAttributeValues !== undefined ) {\r\n\r\n\t\t\t\t\tif ( material.defaultAttributeValues[ key ].length === 2 ) {\r\n\r\n\t\t\t\t\t\t_gl.vertexAttrib2fv( programAttribute, material.defaultAttributeValues[ key ] );\r\n\r\n\t\t\t\t\t} else if ( material.defaultAttributeValues[ key ].length === 3 ) {\r\n\r\n\t\t\t\t\t\t_gl.vertexAttrib3fv( programAttribute, material.defaultAttributeValues[ key ] );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tdisableUnusedAttributes();\r\n\r\n\t}\r\n\r\n\tthis.renderBufferDirect = function ( camera, lights, fog, material, geometry, object ) {\r\n\r\n\t\tif ( material.visible === false ) return;\r\n\r\n\t\tvar program = setProgram( camera, lights, fog, material, object );\r\n\r\n\t\tvar updateBuffers = false,\r\n\t\t\twireframeBit = material.wireframe ? 1 : 0,\r\n\t\t\tgeometryHash = ( geometry.id * 0xffffff ) + ( program.id * 2 ) + wireframeBit;\r\n\r\n\t\tif ( geometryHash !== _currentGeometryGroupHash ) {\r\n\r\n\t\t\t_currentGeometryGroupHash = geometryHash;\r\n\t\t\tupdateBuffers = true;\r\n\r\n\t\t}\r\n\r\n\t\tif ( updateBuffers ) {\r\n\r\n\t\t\tinitAttributes();\r\n\r\n\t\t}\r\n\r\n\t\t// render mesh\r\n\r\n\t\tif ( object instanceof THREE.Mesh ) {\r\n\r\n\t\t\tvar mode = material.wireframe === true ? _gl.LINES : _gl.TRIANGLES;\r\n\r\n\t\t\tvar index = geometry.attributes.index;\r\n\r\n\t\t\tif ( index ) {\r\n\r\n\t\t\t\t// indexed triangles\r\n\r\n\t\t\t\tvar type, size;\r\n\r\n\t\t\t\tif ( index.array instanceof Uint32Array && extensions.get( 'OES_element_index_uint' ) ) {\r\n\r\n\t\t\t\t\ttype = _gl.UNSIGNED_INT;\r\n\t\t\t\t\tsize = 4;\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\ttype = _gl.UNSIGNED_SHORT;\r\n\t\t\t\t\tsize = 2;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar offsets = geometry.offsets;\r\n\r\n\t\t\t\tif ( offsets.length === 0 ) {\r\n\r\n\t\t\t\t\tif ( updateBuffers ) {\r\n\r\n\t\t\t\t\t\tsetupVertexAttributes( material, program, geometry, 0 );\r\n\t\t\t\t\t\t_gl.bindBuffer( _gl.ELEMENT_ARRAY_BUFFER, index.buffer );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t_gl.drawElements( mode, index.array.length, type, 0 );\r\n\r\n\t\t\t\t\t_this.info.render.calls ++;\r\n\t\t\t\t\t_this.info.render.vertices += index.array.length; // not really true, here vertices can be shared\r\n\t\t\t\t\t_this.info.render.faces += index.array.length / 3;\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\t// if there is more than 1 chunk\r\n\t\t\t\t\t// must set attribute pointers to use new offsets for each chunk\r\n\t\t\t\t\t// even if geometry and materials didn't change\r\n\r\n\t\t\t\t\tupdateBuffers = true;\r\n\r\n\t\t\t\t\tfor ( var i = 0, il = offsets.length; i < il; i ++ ) {\r\n\r\n\t\t\t\t\t\tvar startIndex = offsets[ i ].index;\r\n\r\n\t\t\t\t\t\tif ( updateBuffers ) {\r\n\r\n\t\t\t\t\t\t\tsetupVertexAttributes( material, program, geometry, startIndex );\r\n\t\t\t\t\t\t\t_gl.bindBuffer( _gl.ELEMENT_ARRAY_BUFFER, index.buffer );\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// render indexed triangles\r\n\r\n\t\t\t\t\t\t_gl.drawElements( mode, offsets[ i ].count, type, offsets[ i ].start * size );\r\n\r\n\t\t\t\t\t\t_this.info.render.calls ++;\r\n\t\t\t\t\t\t_this.info.render.vertices += offsets[ i ].count; // not really true, here vertices can be shared\r\n\t\t\t\t\t\t_this.info.render.faces += offsets[ i ].count / 3;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t// non-indexed triangles\r\n\r\n\t\t\t\tif ( updateBuffers ) {\r\n\r\n\t\t\t\t\tsetupVertexAttributes( material, program, geometry, 0 );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar position = geometry.attributes[ 'position' ];\r\n\r\n\t\t\t\t// render non-indexed triangles\r\n\r\n\t\t\t\t_gl.drawArrays( mode, 0, position.array.length / 3 );\r\n\r\n\t\t\t\t_this.info.render.calls ++;\r\n\t\t\t\t_this.info.render.vertices += position.array.length / 3;\r\n\t\t\t\t_this.info.render.faces += position.array.length / 9;\r\n\r\n\t\t\t}\r\n\r\n\t\t} else if ( object instanceof THREE.PointCloud ) {\r\n\r\n\t\t\t// render particles\r\n\r\n\t\t\tif ( updateBuffers ) {\r\n\r\n\t\t\t\tsetupVertexAttributes( material, program, geometry, 0 );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar position = geometry.attributes.position;\r\n\r\n\t\t\t// render particles\r\n\r\n\t\t\t_gl.drawArrays( _gl.POINTS, 0, position.array.length / 3 );\r\n\r\n\t\t\t_this.info.render.calls ++;\r\n\t\t\t_this.info.render.points += position.array.length / 3;\r\n\r\n\t\t} else if ( object instanceof THREE.Line ) {\r\n\r\n\t\t\tvar mode = ( object.mode === THREE.LineStrip ) ? _gl.LINE_STRIP : _gl.LINES;\r\n\r\n\t\t\tsetLineWidth( material.linewidth );\r\n\r\n\t\t\tvar index = geometry.attributes.index;\r\n\r\n\t\t\tif ( index ) {\r\n\r\n\t\t\t\t// indexed lines\r\n\r\n\t\t\t\tvar type, size;\r\n\r\n\t\t\t\tif ( index.array instanceof Uint32Array ) {\r\n\r\n\t\t\t\t\ttype = _gl.UNSIGNED_INT;\r\n\t\t\t\t\tsize = 4;\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\ttype = _gl.UNSIGNED_SHORT;\r\n\t\t\t\t\tsize = 2;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar offsets = geometry.offsets;\r\n\r\n\t\t\t\tif ( offsets.length === 0 ) {\r\n\r\n\t\t\t\t\tif ( updateBuffers ) {\r\n\r\n\t\t\t\t\t\tsetupVertexAttributes( material, program, geometry, 0 );\r\n\t\t\t\t\t\t_gl.bindBuffer( _gl.ELEMENT_ARRAY_BUFFER, index.buffer );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t_gl.drawElements( mode, index.array.length, type, 0 ); // 2 bytes per Uint16Array\r\n\r\n\t\t\t\t\t_this.info.render.calls ++;\r\n\t\t\t\t\t_this.info.render.vertices += index.array.length; // not really true, here vertices can be shared\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\t// if there is more than 1 chunk\r\n\t\t\t\t\t// must set attribute pointers to use new offsets for each chunk\r\n\t\t\t\t\t// even if geometry and materials didn't change\r\n\r\n\t\t\t\t\tif ( offsets.length > 1 ) updateBuffers = true;\r\n\r\n\t\t\t\t\tfor ( var i = 0, il = offsets.length; i < il; i ++ ) {\r\n\r\n\t\t\t\t\t\tvar startIndex = offsets[ i ].index;\r\n\r\n\t\t\t\t\t\tif ( updateBuffers ) {\r\n\r\n\t\t\t\t\t\t\tsetupVertexAttributes( material, program, geometry, startIndex );\r\n\t\t\t\t\t\t\t_gl.bindBuffer( _gl.ELEMENT_ARRAY_BUFFER, index.buffer );\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// render indexed lines\r\n\r\n\t\t\t\t\t\t_gl.drawElements( mode, offsets[ i ].count, type, offsets[ i ].start * size ); // 2 bytes per Uint16Array\r\n\r\n\t\t\t\t\t\t_this.info.render.calls ++;\r\n\t\t\t\t\t\t_this.info.render.vertices += offsets[ i ].count; // not really true, here vertices can be shared\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t// non-indexed lines\r\n\r\n\t\t\t\tif ( updateBuffers ) {\r\n\r\n\t\t\t\t\tsetupVertexAttributes( material, program, geometry, 0 );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar position = geometry.attributes.position;\r\n\r\n\t\t\t\t_gl.drawArrays( mode, 0, position.array.length / 3 );\r\n\r\n\t\t\t\t_this.info.render.calls ++;\r\n\t\t\t\t_this.info.render.points += position.array.length / 3;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tthis.renderBuffer = function ( camera, lights, fog, material, geometryGroup, object ) {\r\n\r\n\t\tif ( material.visible === false ) return;\r\n\r\n\t\tvar program = setProgram( camera, lights, fog, material, object );\r\n\r\n\t\tvar attributes = program.attributes;\r\n\r\n\t\tvar updateBuffers = false,\r\n\t\t\twireframeBit = material.wireframe ? 1 : 0,\r\n\t\t\tgeometryGroupHash = ( geometryGroup.id * 0xffffff ) + ( program.id * 2 ) + wireframeBit;\r\n\r\n\t\tif ( geometryGroupHash !== _currentGeometryGroupHash ) {\r\n\r\n\t\t\t_currentGeometryGroupHash = geometryGroupHash;\r\n\t\t\tupdateBuffers = true;\r\n\r\n\t\t}\r\n\r\n\t\tif ( updateBuffers ) {\r\n\r\n\t\t\tinitAttributes();\r\n\r\n\t\t}\r\n\r\n\t\t// vertices\r\n\r\n\t\tif ( ! material.morphTargets && attributes.position >= 0 ) {\r\n\r\n\t\t\tif ( updateBuffers ) {\r\n\r\n\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, geometryGroup.__webglVertexBuffer );\r\n\t\t\t\tenableAttribute( attributes.position );\r\n\t\t\t\t_gl.vertexAttribPointer( attributes.position, 3, _gl.FLOAT, false, 0, 0 );\r\n\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\r\n\t\t\tif ( object.morphTargetBase ) {\r\n\r\n\t\t\t\tsetupMorphTargets( material, geometryGroup, object );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\r\n\t\tif ( updateBuffers ) {\r\n\r\n\t\t\t// custom attributes\r\n\r\n\t\t\t// Use the per-geometryGroup custom attribute arrays which are setup in initMeshBuffers\r\n\r\n\t\t\tif ( geometryGroup.__webglCustomAttributesList ) {\r\n\r\n\t\t\t\tfor ( var i = 0, il = geometryGroup.__webglCustomAttributesList.length; i < il; i ++ ) {\r\n\r\n\t\t\t\t\tvar attribute = geometryGroup.__webglCustomAttributesList[ i ];\r\n\r\n\t\t\t\t\tif ( attributes[ attribute.buffer.belongsToAttribute ] >= 0 ) {\r\n\r\n\t\t\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, attribute.buffer );\r\n\t\t\t\t\t\tenableAttribute( attributes[ attribute.buffer.belongsToAttribute ] );\r\n\t\t\t\t\t\t_gl.vertexAttribPointer( attributes[ attribute.buffer.belongsToAttribute ], attribute.size, _gl.FLOAT, false, 0, 0 );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\r\n\t\t\t// colors\r\n\r\n\t\t\tif ( attributes.color >= 0 ) {\r\n\r\n\t\t\t\tif ( object.geometry.colors.length > 0 || object.geometry.faces.length > 0 ) {\r\n\r\n\t\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, geometryGroup.__webglColorBuffer );\r\n\t\t\t\t\tenableAttribute( attributes.color );\r\n\t\t\t\t\t_gl.vertexAttribPointer( attributes.color, 3, _gl.FLOAT, false, 0, 0 );\r\n\r\n\t\t\t\t} else if ( material.defaultAttributeValues !== undefined ) {\r\n\r\n\r\n\t\t\t\t\t_gl.vertexAttrib3fv( attributes.color, material.defaultAttributeValues.color );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// normals\r\n\r\n\t\t\tif ( attributes.normal >= 0 ) {\r\n\r\n\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, geometryGroup.__webglNormalBuffer );\r\n\t\t\t\tenableAttribute( attributes.normal );\r\n\t\t\t\t_gl.vertexAttribPointer( attributes.normal, 3, _gl.FLOAT, false, 0, 0 );\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// tangents\r\n\r\n\t\t\tif ( attributes.tangent >= 0 ) {\r\n\r\n\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, geometryGroup.__webglTangentBuffer );\r\n\t\t\t\tenableAttribute( attributes.tangent );\r\n\t\t\t\t_gl.vertexAttribPointer( attributes.tangent, 4, _gl.FLOAT, false, 0, 0 );\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// uvs\r\n\r\n\t\t\tif ( attributes.uv >= 0 ) {\r\n\r\n\t\t\t\tif ( object.geometry.faceVertexUvs[ 0 ] ) {\r\n\r\n\t\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, geometryGroup.__webglUVBuffer );\r\n\t\t\t\t\tenableAttribute( attributes.uv );\r\n\t\t\t\t\t_gl.vertexAttribPointer( attributes.uv, 2, _gl.FLOAT, false, 0, 0 );\r\n\r\n\t\t\t\t} else if ( material.defaultAttributeValues !== undefined ) {\r\n\r\n\r\n\t\t\t\t\t_gl.vertexAttrib2fv( attributes.uv, material.defaultAttributeValues.uv );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( attributes.uv2 >= 0 ) {\r\n\r\n\t\t\t\tif ( object.geometry.faceVertexUvs[ 1 ] ) {\r\n\r\n\t\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, geometryGroup.__webglUV2Buffer );\r\n\t\t\t\t\tenableAttribute( attributes.uv2 );\r\n\t\t\t\t\t_gl.vertexAttribPointer( attributes.uv2, 2, _gl.FLOAT, false, 0, 0 );\r\n\r\n\t\t\t\t} else if ( material.defaultAttributeValues !== undefined ) {\r\n\r\n\r\n\t\t\t\t\t_gl.vertexAttrib2fv( attributes.uv2, material.defaultAttributeValues.uv2 );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( material.skinning &&\r\n\t\t\t\t attributes.skinIndex >= 0 && attributes.skinWeight >= 0 ) {\r\n\r\n\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, geometryGroup.__webglSkinIndicesBuffer );\r\n\t\t\t\tenableAttribute( attributes.skinIndex );\r\n\t\t\t\t_gl.vertexAttribPointer( attributes.skinIndex, 4, _gl.FLOAT, false, 0, 0 );\r\n\r\n\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, geometryGroup.__webglSkinWeightsBuffer );\r\n\t\t\t\tenableAttribute( attributes.skinWeight );\r\n\t\t\t\t_gl.vertexAttribPointer( attributes.skinWeight, 4, _gl.FLOAT, false, 0, 0 );\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// line distances\r\n\r\n\t\t\tif ( attributes.lineDistance >= 0 ) {\r\n\r\n\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, geometryGroup.__webglLineDistanceBuffer );\r\n\t\t\t\tenableAttribute( attributes.lineDistance );\r\n\t\t\t\t_gl.vertexAttribPointer( attributes.lineDistance, 1, _gl.FLOAT, false, 0, 0 );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tdisableUnusedAttributes();\r\n\r\n\t\t// render mesh\r\n\r\n\t\tif ( object instanceof THREE.Mesh ) {\r\n\r\n\t\t\tvar type = geometryGroup.__typeArray === Uint32Array ? _gl.UNSIGNED_INT : _gl.UNSIGNED_SHORT;\r\n\r\n\t\t\t// wireframe\r\n\r\n\t\t\tif ( material.wireframe ) {\r\n\r\n\t\t\t\tsetLineWidth( material.wireframeLinewidth );\r\n\t\t\t\tif ( updateBuffers ) _gl.bindBuffer( _gl.ELEMENT_ARRAY_BUFFER, geometryGroup.__webglLineBuffer );\r\n\t\t\t\t_gl.drawElements( _gl.LINES, geometryGroup.__webglLineCount, type, 0 );\r\n\r\n\t\t\t// triangles\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tif ( updateBuffers ) _gl.bindBuffer( _gl.ELEMENT_ARRAY_BUFFER, geometryGroup.__webglFaceBuffer );\r\n\t\t\t\t_gl.drawElements( _gl.TRIANGLES, geometryGroup.__webglFaceCount, type, 0 );\r\n\r\n\t\t\t}\r\n\r\n\t\t\t_this.info.render.calls ++;\r\n\t\t\t_this.info.render.vertices += geometryGroup.__webglFaceCount;\r\n\t\t\t_this.info.render.faces += geometryGroup.__webglFaceCount / 3;\r\n\r\n\t\t// render lines\r\n\r\n\t\t} else if ( object instanceof THREE.Line ) {\r\n\r\n\t\t\tvar mode = ( object.mode === THREE.LineStrip ) ? _gl.LINE_STRIP : _gl.LINES;\r\n\r\n\t\t\tsetLineWidth( material.linewidth );\r\n\r\n\t\t\t_gl.drawArrays( mode, 0, geometryGroup.__webglLineCount );\r\n\r\n\t\t\t_this.info.render.calls ++;\r\n\r\n\t\t// render particles\r\n\r\n\t\t} else if ( object instanceof THREE.PointCloud ) {\r\n\r\n\t\t\t_gl.drawArrays( _gl.POINTS, 0, geometryGroup.__webglParticleCount );\r\n\r\n\t\t\t_this.info.render.calls ++;\r\n\t\t\t_this.info.render.points += geometryGroup.__webglParticleCount;\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tfunction initAttributes() {\r\n\r\n\t\tfor ( var i = 0, l = _newAttributes.length; i < l; i ++ ) {\r\n\r\n\t\t\t_newAttributes[ i ] = 0;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction enableAttribute( attribute ) {\r\n\r\n\t\t_newAttributes[ attribute ] = 1;\r\n\r\n\t\tif ( _enabledAttributes[ attribute ] === 0 ) {\r\n\r\n\t\t\t_gl.enableVertexAttribArray( attribute );\r\n\t\t\t_enabledAttributes[ attribute ] = 1;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction disableUnusedAttributes() {\r\n\r\n\t\tfor ( var i = 0, l = _enabledAttributes.length; i < l; i ++ ) {\r\n\r\n\t\t\tif ( _enabledAttributes[ i ] !== _newAttributes[ i ] ) {\r\n\r\n\t\t\t\t_gl.disableVertexAttribArray( i );\r\n\t\t\t\t_enabledAttributes[ i ] = 0;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction setupMorphTargets ( material, geometryGroup, object ) {\r\n\r\n\t\t// set base\r\n\r\n\t\tvar attributes = material.program.attributes;\r\n\r\n\t\tif ( object.morphTargetBase !== - 1 && attributes.position >= 0 ) {\r\n\r\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, geometryGroup.__webglMorphTargetsBuffers[ object.morphTargetBase ] );\r\n\t\t\tenableAttribute( attributes.position );\r\n\t\t\t_gl.vertexAttribPointer( attributes.position, 3, _gl.FLOAT, false, 0, 0 );\r\n\r\n\t\t} else if ( attributes.position >= 0 ) {\r\n\r\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, geometryGroup.__webglVertexBuffer );\r\n\t\t\tenableAttribute( attributes.position );\r\n\t\t\t_gl.vertexAttribPointer( attributes.position, 3, _gl.FLOAT, false, 0, 0 );\r\n\r\n\t\t}\r\n\r\n\t\tif ( object.morphTargetForcedOrder.length ) {\r\n\r\n\t\t\t// set forced order\r\n\r\n\t\t\tvar m = 0;\r\n\t\t\tvar order = object.morphTargetForcedOrder;\r\n\t\t\tvar influences = object.morphTargetInfluences;\r\n\r\n\t\t\twhile ( m < material.numSupportedMorphTargets && m < order.length ) {\r\n\r\n\t\t\t\tif ( attributes[ 'morphTarget' + m ] >= 0 ) {\r\n\r\n\t\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, geometryGroup.__webglMorphTargetsBuffers[ order[ m ] ] );\r\n\t\t\t\t\tenableAttribute( attributes[ 'morphTarget' + m ] );\r\n\t\t\t\t\t_gl.vertexAttribPointer( attributes[ 'morphTarget' + m ], 3, _gl.FLOAT, false, 0, 0 );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( attributes[ 'morphNormal' + m ] >= 0 && material.morphNormals ) {\r\n\r\n\t\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, geometryGroup.__webglMorphNormalsBuffers[ order[ m ] ] );\r\n\t\t\t\t\tenableAttribute( attributes[ 'morphNormal' + m ] );\r\n\t\t\t\t\t_gl.vertexAttribPointer( attributes[ 'morphNormal' + m ], 3, _gl.FLOAT, false, 0, 0 );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tobject.__webglMorphTargetInfluences[ m ] = influences[ order[ m ] ];\r\n\r\n\t\t\t\tm ++;\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// find the most influencing\r\n\r\n\t\t\tvar influence, activeInfluenceIndices = [];\r\n\t\t\tvar influences = object.morphTargetInfluences;\r\n\t\t\tvar i, il = influences.length;\r\n\r\n\t\t\tfor ( i = 0; i < il; i ++ ) {\r\n\r\n\t\t\t\tinfluence = influences[ i ];\r\n\r\n\t\t\t\tif ( influence > 0 ) {\r\n\r\n\t\t\t\t\tactiveInfluenceIndices.push( [ influence, i ] );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( activeInfluenceIndices.length > material.numSupportedMorphTargets ) {\r\n\r\n\t\t\t\tactiveInfluenceIndices.sort( numericalSort );\r\n\t\t\t\tactiveInfluenceIndices.length = material.numSupportedMorphTargets;\r\n\r\n\t\t\t} else if ( activeInfluenceIndices.length > material.numSupportedMorphNormals ) {\r\n\r\n\t\t\t\tactiveInfluenceIndices.sort( numericalSort );\r\n\r\n\t\t\t} else if ( activeInfluenceIndices.length === 0 ) {\r\n\r\n\t\t\t\tactiveInfluenceIndices.push( [ 0, 0 ] );\r\n\r\n\t\t\t};\r\n\r\n\t\t\tvar influenceIndex, m = 0;\r\n\r\n\t\t\twhile ( m < material.numSupportedMorphTargets ) {\r\n\r\n\t\t\t\tif ( activeInfluenceIndices[ m ] ) {\r\n\r\n\t\t\t\t\tinfluenceIndex = activeInfluenceIndices[ m ][ 1 ];\r\n\r\n\t\t\t\t\tif ( attributes[ 'morphTarget' + m ] >= 0 ) {\r\n\r\n\t\t\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, geometryGroup.__webglMorphTargetsBuffers[ influenceIndex ] );\r\n\t\t\t\t\t\tenableAttribute( attributes[ 'morphTarget' + m ] );\r\n\t\t\t\t\t\t_gl.vertexAttribPointer( attributes[ 'morphTarget' + m ], 3, _gl.FLOAT, false, 0, 0 );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ( attributes[ 'morphNormal' + m ] >= 0 && material.morphNormals ) {\r\n\r\n\t\t\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, geometryGroup.__webglMorphNormalsBuffers[ influenceIndex ] );\r\n\t\t\t\t\t\tenableAttribute( attributes[ 'morphNormal' + m ] );\r\n\t\t\t\t\t\t_gl.vertexAttribPointer( attributes[ 'morphNormal' + m ], 3, _gl.FLOAT, false, 0, 0 );\r\n\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tobject.__webglMorphTargetInfluences[ m ] = influences[ influenceIndex ];\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\t/*\r\n\t\t\t\t\t_gl.vertexAttribPointer( attributes[ \"morphTarget\" + m ], 3, _gl.FLOAT, false, 0, 0 );\r\n\r\n\t\t\t\t\tif ( material.morphNormals ) {\r\n\r\n\t\t\t\t\t\t_gl.vertexAttribPointer( attributes[ \"morphNormal\" + m ], 3, _gl.FLOAT, false, 0, 0 );\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t\t*/\r\n\r\n\t\t\t\t\tobject.__webglMorphTargetInfluences[ m ] = 0;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tm ++;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t// load updated influences uniform\r\n\r\n\t\tif ( material.program.uniforms.morphTargetInfluences !== null ) {\r\n\r\n\t\t\t_gl.uniform1fv( material.program.uniforms.morphTargetInfluences, object.__webglMorphTargetInfluences );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// Sorting\r\n\r\n\tfunction painterSortStable ( a, b ) {\r\n\r\n\t\tif ( a.material.id !== b.material.id ) {\r\n\r\n\t\t\treturn b.material.id - a.material.id;\r\n\r\n\t\t} else if ( a.z !== b.z ) {\r\n\r\n\t\t\treturn b.z - a.z;\r\n\r\n\t\t} else {\r\n\r\n\t\t\treturn a.id - b.id;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction reversePainterSortStable ( a, b ) {\r\n\r\n\t\tif ( a.z !== b.z ) {\r\n\r\n\t\t\treturn a.z - b.z;\r\n\r\n\t\t} else {\r\n\r\n\t\t\treturn a.id - b.id;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction numericalSort ( a, b ) {\r\n\r\n\t\treturn b[ 0 ] - a[ 0 ];\r\n\r\n\t}\r\n\r\n\t// Rendering\r\n\r\n\tthis.render = function ( scene, camera, renderTarget, forceClear ) {\r\n\r\n\t\tif ( camera instanceof THREE.Camera === false ) {\r\n\r\n\t\t\tconsole.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' );\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\r\n\t\tvar fog = scene.fog;\r\n\r\n\t\t// reset caching for this frame\r\n\r\n\t\t_currentGeometryGroupHash = - 1;\r\n\t\t_currentMaterialId = - 1;\r\n\t\t_currentCamera = null;\r\n\t\t_lightsNeedUpdate = true;\r\n\r\n\t\t// update scene graph\r\n\r\n\t\tif ( scene.autoUpdate === true ) scene.updateMatrixWorld();\r\n\r\n\t\t// update camera matrices and frustum\r\n\r\n\t\tif ( camera.parent === undefined ) camera.updateMatrixWorld();\r\n\r\n\t\t// update Skeleton objects\r\n\r\n\t\tscene.traverse( function ( object ) {\r\n\r\n\t\t\tif ( object instanceof THREE.SkinnedMesh ) {\r\n\r\n\t\t\t\tobject.skeleton.update();\r\n\r\n\t\t\t}\r\n\r\n\t\t} );\r\n\r\n\t\tcamera.matrixWorldInverse.getInverse( camera.matrixWorld );\r\n\r\n\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\r\n\t\t_frustum.setFromMatrix( _projScreenMatrix );\r\n\r\n\t\tlights.length = 0;\r\n\t\topaqueObjects.length = 0;\r\n\t\ttransparentObjects.length = 0;\r\n\r\n\t\tsprites.length = 0;\r\n\t\tlensFlares.length = 0;\r\n\r\n\t\tprojectObject( scene, scene );\r\n\r\n\t\tif ( _this.sortObjects === true ) {\r\n\r\n\t\t\topaqueObjects.sort( painterSortStable );\r\n\t\t\ttransparentObjects.sort( reversePainterSortStable );\r\n\r\n\t\t}\r\n\r\n\t\t// custom render plugins (pre pass)\r\n\r\n\t\tshadowMapPlugin.render( scene, camera );\r\n\r\n\t\t//\r\n\r\n\t\t_this.info.render.calls = 0;\r\n\t\t_this.info.render.vertices = 0;\r\n\t\t_this.info.render.faces = 0;\r\n\t\t_this.info.render.points = 0;\r\n\r\n\t\tthis.setRenderTarget( renderTarget );\r\n\r\n\t\tif ( this.autoClear || forceClear ) {\r\n\r\n\t\t\tthis.clear( this.autoClearColor, this.autoClearDepth, this.autoClearStencil );\r\n\r\n\t\t}\r\n\r\n\t\t// set matrices for immediate objects\r\n\r\n\t\tfor ( var i = 0, il = _webglObjectsImmediate.length; i < il; i ++ ) {\r\n\r\n\t\t\tvar webglObject = _webglObjectsImmediate[ i ];\r\n\t\t\tvar object = webglObject.object;\r\n\r\n\t\t\tif ( object.visible ) {\r\n\r\n\t\t\t\tsetupMatrices( object, camera );\r\n\r\n\t\t\t\tunrollImmediateBufferMaterial( webglObject );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( scene.overrideMaterial ) {\r\n\r\n\t\t\tvar material = scene.overrideMaterial;\r\n\r\n\t\t\tthis.setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst );\r\n\t\t\tthis.setDepthTest( material.depthTest );\r\n\t\t\tthis.setDepthWrite( material.depthWrite );\r\n\t\t\tsetPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits );\r\n\r\n\t\t\trenderObjects( opaqueObjects, camera, lights, fog, true, material );\r\n\t\t\trenderObjects( transparentObjects, camera, lights, fog, true, material );\r\n\t\t\trenderObjectsImmediate( _webglObjectsImmediate, '', camera, lights, fog, false, material );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tvar material = null;\r\n\r\n\t\t\t// opaque pass (front-to-back order)\r\n\r\n\t\t\tthis.setBlending( THREE.NoBlending );\r\n\r\n\t\t\trenderObjects( opaqueObjects, camera, lights, fog, false, material );\r\n\t\t\trenderObjectsImmediate( _webglObjectsImmediate, 'opaque', camera, lights, fog, false, material );\r\n\r\n\t\t\t// transparent pass (back-to-front order)\r\n\r\n\t\t\trenderObjects( transparentObjects, camera, lights, fog, true, material );\r\n\t\t\trenderObjectsImmediate( _webglObjectsImmediate, 'transparent', camera, lights, fog, true, material );\r\n\r\n\t\t}\r\n\r\n\t\t// custom render plugins (post pass)\r\n\r\n\t\tspritePlugin.render( scene, camera );\r\n\t\tlensFlarePlugin.render( scene, camera, _currentWidth, _currentHeight );\r\n\r\n\t\t// Generate mipmap if we're using any kind of mipmap filtering\r\n\r\n\t\tif ( renderTarget && renderTarget.generateMipmaps && renderTarget.minFilter !== THREE.NearestFilter && renderTarget.minFilter !== THREE.LinearFilter ) {\r\n\r\n\t\t\tupdateRenderTargetMipmap( renderTarget );\r\n\r\n\t\t}\r\n\r\n\t\t// Ensure depth buffer writing is enabled so it can be cleared on next render\r\n\r\n\t\tthis.setDepthTest( true );\r\n\t\tthis.setDepthWrite( true );\r\n\r\n\t\t// _gl.finish();\r\n\r\n\t};\r\n\r\n\tfunction projectObject( scene, object ) {\r\n\r\n\t\tif ( object.visible === false ) return;\r\n\r\n\t\tif ( object instanceof THREE.Scene || object instanceof THREE.Group ) {\r\n\r\n\t\t\t// skip\r\n\r\n\t\t} else {\r\n\r\n\t\t\tinitObject( object, scene );\r\n\r\n\t\t\tif ( object instanceof THREE.Light ) {\r\n\r\n\t\t\t\tlights.push( object );\r\n\r\n\t\t\t} else if ( object instanceof THREE.Sprite ) {\r\n\r\n\t\t\t\tsprites.push( object );\r\n\r\n\t\t\t} else if ( object instanceof THREE.LensFlare ) {\r\n\r\n\t\t\t\tlensFlares.push( object );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tvar webglObjects = _webglObjects[ object.id ];\r\n\r\n\t\t\t\tif ( webglObjects && ( object.frustumCulled === false || _frustum.intersectsObject( object ) === true ) ) {\r\n\r\n\t\t\t\t\tupdateObject( object, scene );\r\n\r\n\t\t\t\t\tfor ( var i = 0, l = webglObjects.length; i < l; i ++ ) {\r\n\r\n\t\t\t\t\t\tvar webglObject = webglObjects[i];\r\n\r\n\t\t\t\t\t\tunrollBufferMaterial( webglObject );\r\n\r\n\t\t\t\t\t\twebglObject.render = true;\r\n\r\n\t\t\t\t\t\tif ( _this.sortObjects === true ) {\r\n\r\n\t\t\t\t\t\t\tif ( object.renderDepth !== null ) {\r\n\r\n\t\t\t\t\t\t\t\twebglObject.z = object.renderDepth;\r\n\r\n\t\t\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld );\r\n\t\t\t\t\t\t\t\t_vector3.applyProjection( _projScreenMatrix );\r\n\r\n\t\t\t\t\t\t\t\twebglObject.z = _vector3.z;\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tfor ( var i = 0, l = object.children.length; i < l; i ++ ) {\r\n\r\n\t\t\tprojectObject( scene, object.children[ i ] );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction renderObjects( renderList, camera, lights, fog, useBlending, overrideMaterial ) {\r\n\r\n\t\tvar material;\r\n\r\n\t\tfor ( var i = renderList.length - 1; i !== - 1; i -- ) {\r\n\r\n\t\t\tvar webglObject = renderList[ i ];\r\n\r\n\t\t\tvar object = webglObject.object;\r\n\t\t\tvar buffer = webglObject.buffer;\r\n\r\n\t\t\tsetupMatrices( object, camera );\r\n\r\n\t\t\tif ( overrideMaterial ) {\r\n\r\n\t\t\t\tmaterial = overrideMaterial;\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tmaterial = webglObject.material;\r\n\r\n\t\t\t\tif ( ! material ) continue;\r\n\r\n\t\t\t\tif ( useBlending ) _this.setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst );\r\n\r\n\t\t\t\t_this.setDepthTest( material.depthTest );\r\n\t\t\t\t_this.setDepthWrite( material.depthWrite );\r\n\t\t\t\tsetPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits );\r\n\r\n\t\t\t}\r\n\r\n\t\t\t_this.setMaterialFaces( material );\r\n\r\n\t\t\tif ( buffer instanceof THREE.BufferGeometry ) {\r\n\r\n\t\t\t\t_this.renderBufferDirect( camera, lights, fog, material, buffer, object );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t_this.renderBuffer( camera, lights, fog, material, buffer, object );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction renderObjectsImmediate ( renderList, materialType, camera, lights, fog, useBlending, overrideMaterial ) {\r\n\r\n\t\tvar material;\r\n\r\n\t\tfor ( var i = 0, il = renderList.length; i < il; i ++ ) {\r\n\r\n\t\t\tvar webglObject = renderList[ i ];\r\n\t\t\tvar object = webglObject.object;\r\n\r\n\t\t\tif ( object.visible ) {\r\n\r\n\t\t\t\tif ( overrideMaterial ) {\r\n\r\n\t\t\t\t\tmaterial = overrideMaterial;\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tmaterial = webglObject[ materialType ];\r\n\r\n\t\t\t\t\tif ( ! material ) continue;\r\n\r\n\t\t\t\t\tif ( useBlending ) _this.setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst );\r\n\r\n\t\t\t\t\t_this.setDepthTest( material.depthTest );\r\n\t\t\t\t\t_this.setDepthWrite( material.depthWrite );\r\n\t\t\t\t\tsetPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t_this.renderImmediateObject( camera, lights, fog, material, object );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tthis.renderImmediateObject = function ( camera, lights, fog, material, object ) {\r\n\r\n\t\tvar program = setProgram( camera, lights, fog, material, object );\r\n\r\n\t\t_currentGeometryGroupHash = - 1;\r\n\r\n\t\t_this.setMaterialFaces( material );\r\n\r\n\t\tif ( object.immediateRenderCallback ) {\r\n\r\n\t\t\tobject.immediateRenderCallback( program, _gl, _frustum );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tobject.render( function ( object ) { _this.renderBufferImmediate( object, program, material ); } );\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tfunction unrollImmediateBufferMaterial ( globject ) {\r\n\r\n\t\tvar object = globject.object,\r\n\t\t\tmaterial = object.material;\r\n\r\n\t\tif ( material.transparent ) {\r\n\r\n\t\t\tglobject.transparent = material;\r\n\t\t\tglobject.opaque = null;\r\n\r\n\t\t} else {\r\n\r\n\t\t\tglobject.opaque = material;\r\n\t\t\tglobject.transparent = null;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction unrollBufferMaterial ( globject ) {\r\n\r\n\t\tvar object = globject.object;\r\n\t\tvar buffer = globject.buffer;\r\n\r\n\t\tvar geometry = object.geometry;\r\n\t\tvar material = object.material;\r\n\r\n\t\tif ( material instanceof THREE.MeshFaceMaterial ) {\r\n\r\n\t\t\tvar materialIndex = geometry instanceof THREE.BufferGeometry ? 0 : buffer.materialIndex;\r\n\r\n\t\t\tmaterial = material.materials[ materialIndex ];\r\n\r\n\t\t\tglobject.material = material;\r\n\r\n\t\t\tif ( material.transparent ) {\r\n\r\n\t\t\t\ttransparentObjects.push( globject );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\topaqueObjects.push( globject );\r\n\r\n\t\t\t}\r\n\r\n\t\t} else if ( material ) {\r\n\r\n\t\t\tglobject.material = material;\r\n\r\n\t\t\tif ( material.transparent ) {\r\n\r\n\t\t\t\ttransparentObjects.push( globject );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\topaqueObjects.push( globject );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction initObject( object, scene ) {\r\n\r\n\t\tif ( object.__webglInit === undefined ) {\r\n\r\n\t\t\tobject.__webglInit = true;\r\n\t\t\tobject._modelViewMatrix = new THREE.Matrix4();\r\n\t\t\tobject._normalMatrix = new THREE.Matrix3();\r\n\r\n\t\t\tobject.addEventListener( 'removed', onObjectRemoved );\r\n\r\n\t\t}\r\n\r\n\t\tvar geometry = object.geometry;\r\n\r\n\t\tif ( geometry === undefined ) {\r\n\r\n\t\t\t// ImmediateRenderObject\r\n\r\n\t\t} else if ( geometry.__webglInit === undefined ) {\r\n\r\n\t\t\tgeometry.__webglInit = true;\r\n\t\t\tgeometry.addEventListener( 'dispose', onGeometryDispose );\r\n\r\n\t\t\tif ( geometry instanceof THREE.BufferGeometry ) {\r\n\r\n\t\t\t\t//\r\n\r\n\t\t\t} else if ( object instanceof THREE.Mesh ) {\r\n\r\n\t\t\t\tinitGeometryGroups( scene, object, geometry );\r\n\r\n\t\t\t} else if ( object instanceof THREE.Line ) {\r\n\r\n\t\t\t\tif ( geometry.__webglVertexBuffer === undefined ) {\r\n\r\n\t\t\t\t\tcreateLineBuffers( geometry );\r\n\t\t\t\t\tinitLineBuffers( geometry, object );\r\n\r\n\t\t\t\t\tgeometry.verticesNeedUpdate = true;\r\n\t\t\t\t\tgeometry.colorsNeedUpdate = true;\r\n\t\t\t\t\tgeometry.lineDistancesNeedUpdate = true;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else if ( object instanceof THREE.PointCloud ) {\r\n\r\n\t\t\t\tif ( geometry.__webglVertexBuffer === undefined ) {\r\n\r\n\t\t\t\t\tcreateParticleBuffers( geometry );\r\n\t\t\t\t\tinitParticleBuffers( geometry, object );\r\n\r\n\t\t\t\t\tgeometry.verticesNeedUpdate = true;\r\n\t\t\t\t\tgeometry.colorsNeedUpdate = true;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( object.__webglActive === undefined) {\r\n\r\n\t\t\tobject.__webglActive = true;\r\n\r\n\t\t\tif ( object instanceof THREE.Mesh ) {\r\n\r\n\t\t\t\tif ( geometry instanceof THREE.BufferGeometry ) {\r\n\r\n\t\t\t\t\taddBuffer( _webglObjects, geometry, object );\r\n\r\n\t\t\t\t} else if ( geometry instanceof THREE.Geometry ) {\r\n\r\n\t\t\t\t\tvar geometryGroupsList = geometryGroups[ geometry.id ];\r\n\r\n\t\t\t\t\tfor ( var i = 0,l = geometryGroupsList.length; i < l; i ++ ) {\r\n\r\n\t\t\t\t\t\taddBuffer( _webglObjects, geometryGroupsList[ i ], object );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else if ( object instanceof THREE.Line || object instanceof THREE.PointCloud ) {\r\n\r\n\t\t\t\taddBuffer( _webglObjects, geometry, object );\r\n\r\n\t\t\t} else if ( object instanceof THREE.ImmediateRenderObject || object.immediateRenderCallback ) {\r\n\r\n\t\t\t\taddBufferImmediate( _webglObjectsImmediate, object );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// Geometry splitting\r\n\r\n\tvar geometryGroups = {};\r\n\tvar geometryGroupCounter = 0;\r\n\r\n\tfunction makeGroups( geometry, usesFaceMaterial ) {\r\n\r\n\t\tvar maxVerticesInGroup = extensions.get( 'OES_element_index_uint' ) ? 4294967296 : 65535;\r\n\r\n\t\tvar groupHash, hash_map = {};\r\n\r\n\t\tvar numMorphTargets = geometry.morphTargets.length;\r\n\t\tvar numMorphNormals = geometry.morphNormals.length;\r\n\r\n\t\tvar group;\r\n\t\tvar groups = {};\r\n\t\tvar groupsList = [];\r\n\r\n\t\tfor ( var f = 0, fl = geometry.faces.length; f < fl; f ++ ) {\r\n\r\n\t\t\tvar face = geometry.faces[ f ];\r\n\t\t\tvar materialIndex = usesFaceMaterial ? face.materialIndex : 0;\r\n\r\n\t\t\tif ( ! ( materialIndex in hash_map ) ) {\r\n\r\n\t\t\t\thash_map[ materialIndex ] = { hash: materialIndex, counter: 0 };\r\n\r\n\t\t\t}\r\n\r\n\t\t\tgroupHash = hash_map[ materialIndex ].hash + '_' + hash_map[ materialIndex ].counter;\r\n\r\n\t\t\tif ( ! ( groupHash in groups ) ) {\r\n\r\n\t\t\t\tgroup = {\r\n\t\t\t\t\tid: geometryGroupCounter ++,\r\n\t\t\t\t\tfaces3: [],\r\n\t\t\t\t\tmaterialIndex: materialIndex,\r\n\t\t\t\t\tvertices: 0,\r\n\t\t\t\t\tnumMorphTargets: numMorphTargets,\r\n\t\t\t\t\tnumMorphNormals: numMorphNormals\r\n\t\t\t\t};\r\n\t\t\t\t\r\n\t\t\t\tgroups[ groupHash ] = group;\r\n\t\t\t\tgroupsList.push( group );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( groups[ groupHash ].vertices + 3 > maxVerticesInGroup ) {\r\n\r\n\t\t\t\thash_map[ materialIndex ].counter += 1;\r\n\t\t\t\tgroupHash = hash_map[ materialIndex ].hash + '_' + hash_map[ materialIndex ].counter;\r\n\r\n\t\t\t\tif ( ! ( groupHash in groups ) ) {\r\n\r\n\t\t\t\t\tgroup = {\r\n\t\t\t\t\t\tid: geometryGroupCounter ++,\r\n\t\t\t\t\t\tfaces3: [],\r\n\t\t\t\t\t\tmaterialIndex: materialIndex,\r\n\t\t\t\t\t\tvertices: 0,\r\n\t\t\t\t\t\tnumMorphTargets: numMorphTargets,\r\n\t\t\t\t\t\tnumMorphNormals: numMorphNormals\r\n\t\t\t\t\t};\r\n\t\t\t\t\t\r\n\t\t\t\t\tgroups[ groupHash ] = group;\r\n\t\t\t\t\tgroupsList.push( group );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tgroups[ groupHash ].faces3.push( f );\r\n\t\t\tgroups[ groupHash ].vertices += 3;\r\n\r\n\t\t}\r\n\r\n\t\treturn groupsList;\r\n\r\n\t}\r\n\r\n\tfunction initGeometryGroups( scene, object, geometry ) {\r\n\r\n\t\tvar material = object.material, addBuffers = false;\r\n\r\n\t\tif ( geometryGroups[ geometry.id ] === undefined || geometry.groupsNeedUpdate === true ) {\r\n\r\n\t\t\tdelete _webglObjects[ object.id ];\r\n\r\n\t\t\tgeometryGroups[ geometry.id ] = makeGroups( geometry, material instanceof THREE.MeshFaceMaterial );\r\n\r\n\t\t\tgeometry.groupsNeedUpdate = false;\r\n\r\n\t\t}\r\n\r\n\t\tvar geometryGroupsList = geometryGroups[ geometry.id ];\r\n\r\n\t\t// create separate VBOs per geometry chunk\r\n\r\n\t\tfor ( var i = 0, il = geometryGroupsList.length; i < il; i ++ ) {\r\n\r\n\t\t\tvar geometryGroup = geometryGroupsList[ i ];\r\n\r\n\t\t\t// initialise VBO on the first access\r\n\r\n\t\t\tif ( geometryGroup.__webglVertexBuffer === undefined ) {\r\n\r\n\t\t\t\tcreateMeshBuffers( geometryGroup );\r\n\t\t\t\tinitMeshBuffers( geometryGroup, object );\r\n\r\n\t\t\t\tgeometry.verticesNeedUpdate = true;\r\n\t\t\t\tgeometry.morphTargetsNeedUpdate = true;\r\n\t\t\t\tgeometry.elementsNeedUpdate = true;\r\n\t\t\t\tgeometry.uvsNeedUpdate = true;\r\n\t\t\t\tgeometry.normalsNeedUpdate = true;\r\n\t\t\t\tgeometry.tangentsNeedUpdate = true;\r\n\t\t\t\tgeometry.colorsNeedUpdate = true;\r\n\r\n\t\t\t\taddBuffers = true;\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\taddBuffers = false;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( addBuffers || object.__webglActive === undefined ) {\r\n\r\n\t\t\t\taddBuffer( _webglObjects, geometryGroup, object );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tobject.__webglActive = true;\r\n\r\n\t}\r\n\r\n\tfunction addBuffer( objlist, buffer, object ) {\r\n\r\n\t\tvar id = object.id;\r\n\t\tobjlist[id] = objlist[id] || [];\r\n\t\tobjlist[id].push(\r\n\t\t\t{\r\n\t\t\t\tid: id,\r\n\t\t\t\tbuffer: buffer,\r\n\t\t\t\tobject: object,\r\n\t\t\t\tmaterial: null,\r\n\t\t\t\tz: 0\r\n\t\t\t}\r\n\t\t);\r\n\r\n\t};\r\n\r\n\tfunction addBufferImmediate( objlist, object ) {\r\n\r\n\t\tobjlist.push(\r\n\t\t\t{\r\n\t\t\t\tid: null,\r\n\t\t\t\tobject: object,\r\n\t\t\t\topaque: null,\r\n\t\t\t\ttransparent: null,\r\n\t\t\t\tz: 0\r\n\t\t\t}\r\n\t\t);\r\n\r\n\t};\r\n\r\n\t// Objects updates\r\n\r\n\tfunction updateObject( object, scene ) {\r\n\r\n\t\tvar geometry = object.geometry, customAttributesDirty, material;\r\n\r\n\t\tif ( geometry instanceof THREE.BufferGeometry ) {\r\n\r\n\t\t\tsetDirectBuffers( geometry );\r\n\r\n\t\t} else if ( object instanceof THREE.Mesh ) {\r\n\r\n\t\t\t// check all geometry groups\r\n\r\n\t\t\tif ( geometry.groupsNeedUpdate === true ) {\r\n\r\n\t\t\t\tinitGeometryGroups( scene, object, geometry );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar geometryGroupsList = geometryGroups[ geometry.id ];\r\n\r\n\t\t\tfor ( var i = 0, il = geometryGroupsList.length; i < il; i ++ ) {\r\n\r\n\t\t\t\tvar geometryGroup = geometryGroupsList[ i ];\r\n\r\n\t\t\t\tmaterial = getBufferMaterial( object, geometryGroup );\r\n\r\n\t\t\t\tif ( geometry.groupsNeedUpdate === true ) {\r\n\r\n\t\t\t\t\tinitMeshBuffers( geometryGroup, object );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcustomAttributesDirty = material.attributes && areCustomAttributesDirty( material );\r\n\r\n\t\t\t\tif ( geometry.verticesNeedUpdate || geometry.morphTargetsNeedUpdate || geometry.elementsNeedUpdate ||\r\n\t\t\t\t\t geometry.uvsNeedUpdate || geometry.normalsNeedUpdate ||\r\n\t\t\t\t\t geometry.colorsNeedUpdate || geometry.tangentsNeedUpdate || customAttributesDirty ) {\r\n\r\n\t\t\t\t\tsetMeshBuffers( geometryGroup, object, _gl.DYNAMIC_DRAW, ! geometry.dynamic, material );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tgeometry.verticesNeedUpdate = false;\r\n\t\t\tgeometry.morphTargetsNeedUpdate = false;\r\n\t\t\tgeometry.elementsNeedUpdate = false;\r\n\t\t\tgeometry.uvsNeedUpdate = false;\r\n\t\t\tgeometry.normalsNeedUpdate = false;\r\n\t\t\tgeometry.colorsNeedUpdate = false;\r\n\t\t\tgeometry.tangentsNeedUpdate = false;\r\n\r\n\t\t\tmaterial.attributes && clearCustomAttributes( material );\r\n\r\n\t\t} else if ( object instanceof THREE.Line ) {\r\n\r\n\t\t\tmaterial = getBufferMaterial( object, geometry );\r\n\r\n\t\t\tcustomAttributesDirty = material.attributes && areCustomAttributesDirty( material );\r\n\r\n\t\t\tif ( geometry.verticesNeedUpdate || geometry.colorsNeedUpdate || geometry.lineDistancesNeedUpdate || customAttributesDirty ) {\r\n\r\n\t\t\t\tsetLineBuffers( geometry, _gl.DYNAMIC_DRAW );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tgeometry.verticesNeedUpdate = false;\r\n\t\t\tgeometry.colorsNeedUpdate = false;\r\n\t\t\tgeometry.lineDistancesNeedUpdate = false;\r\n\r\n\t\t\tmaterial.attributes && clearCustomAttributes( material );\r\n\r\n\r\n\t\t} else if ( object instanceof THREE.PointCloud ) {\r\n\r\n\t\t\tmaterial = getBufferMaterial( object, geometry );\r\n\r\n\t\t\tcustomAttributesDirty = material.attributes && areCustomAttributesDirty( material );\r\n\r\n\t\t\tif ( geometry.verticesNeedUpdate || geometry.colorsNeedUpdate || object.sortParticles || customAttributesDirty ) {\r\n\r\n\t\t\t\tsetParticleBuffers( geometry, _gl.DYNAMIC_DRAW, object );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tgeometry.verticesNeedUpdate = false;\r\n\t\t\tgeometry.colorsNeedUpdate = false;\r\n\r\n\t\t\tmaterial.attributes && clearCustomAttributes( material );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// Objects updates - custom attributes check\r\n\r\n\tfunction areCustomAttributesDirty( material ) {\r\n\r\n\t\tfor ( var name in material.attributes ) {\r\n\r\n\t\t\tif ( material.attributes[ name ].needsUpdate ) return true;\r\n\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\r\n\t}\r\n\r\n\tfunction clearCustomAttributes( material ) {\r\n\r\n\t\tfor ( var name in material.attributes ) {\r\n\r\n\t\t\tmaterial.attributes[ name ].needsUpdate = false;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// Objects removal\r\n\r\n\tfunction removeObject( object ) {\r\n\r\n\t\tif ( object instanceof THREE.Mesh ||\r\n\t\t\t object instanceof THREE.PointCloud ||\r\n\t\t\t object instanceof THREE.Line ) {\r\n\r\n\t\t\tdelete _webglObjects[ object.id ];\r\n\r\n\t\t} else if ( object instanceof THREE.ImmediateRenderObject || object.immediateRenderCallback ) {\r\n\r\n\t\t\tremoveInstances( _webglObjectsImmediate, object );\r\n\r\n\t\t}\r\n\r\n\t\tdelete object.__webglInit;\r\n\t\tdelete object._modelViewMatrix;\r\n\t\tdelete object._normalMatrix;\r\n\r\n\t\tdelete object.__webglActive;\r\n\r\n\t}\r\n\r\n\tfunction removeInstances( objlist, object ) {\r\n\r\n\t\tfor ( var o = objlist.length - 1; o >= 0; o -- ) {\r\n\r\n\t\t\tif ( objlist[ o ].object === object ) {\r\n\r\n\t\t\t\tobjlist.splice( o, 1 );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// Materials\r\n\r\n\tfunction initMaterial( material, lights, fog, object ) {\r\n\r\n\t\tmaterial.addEventListener( 'dispose', onMaterialDispose );\r\n\r\n\t\tvar shaderID;\r\n\r\n\t\tif ( material instanceof THREE.MeshDepthMaterial ) {\r\n\r\n\t\t\tshaderID = 'depth';\r\n\r\n\t\t} else if ( material instanceof THREE.MeshNormalMaterial ) {\r\n\r\n\t\t\tshaderID = 'normal';\r\n\r\n\t\t} else if ( material instanceof THREE.MeshBasicMaterial ) {\r\n\r\n\t\t\tshaderID = 'basic';\r\n\r\n\t\t} else if ( material instanceof THREE.MeshLambertMaterial ) {\r\n\r\n\t\t\tshaderID = 'lambert';\r\n\r\n\t\t} else if ( material instanceof THREE.MeshPhongMaterial ) {\r\n\r\n\t\t\tshaderID = 'phong';\r\n\r\n\t\t} else if ( material instanceof THREE.LineBasicMaterial ) {\r\n\r\n\t\t\tshaderID = 'basic';\r\n\r\n\t\t} else if ( material instanceof THREE.LineDashedMaterial ) {\r\n\r\n\t\t\tshaderID = 'dashed';\r\n\r\n\t\t} else if ( material instanceof THREE.PointCloudMaterial ) {\r\n\r\n\t\t\tshaderID = 'particle_basic';\r\n\r\n\t\t}\r\n\r\n\t\tif ( shaderID ) {\r\n\r\n\t\t\tvar shader = THREE.ShaderLib[ shaderID ];\r\n\r\n\t\t\tmaterial.__webglShader = {\r\n\t\t\t\tuniforms: THREE.UniformsUtils.clone( shader.uniforms ),\r\n\t\t\t\tvertexShader: shader.vertexShader,\r\n\t\t\t\tfragmentShader: shader.fragmentShader\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\r\n\t\t\tmaterial.__webglShader = {\r\n\t\t\t\tuniforms: material.uniforms,\r\n\t\t\t\tvertexShader: material.vertexShader,\r\n\t\t\t\tfragmentShader: material.fragmentShader\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t// heuristics to create shader parameters according to lights in the scene\r\n\t\t// (not to blow over maxLights budget)\r\n\r\n\t\tvar maxLightCount = allocateLights( lights );\r\n\t\tvar maxShadows = allocateShadows( lights );\r\n\t\tvar maxBones = allocateBones( object );\r\n\r\n\t\tvar parameters = {\r\n\r\n\t\t\tprecision: _precision,\r\n\t\t\tsupportsVertexTextures: _supportsVertexTextures,\r\n\r\n\t\t\tmap: !! material.map,\r\n\t\t\tenvMap: !! material.envMap,\r\n\t\t\tlightMap: !! material.lightMap,\r\n\t\t\tbumpMap: !! material.bumpMap,\r\n\t\t\tnormalMap: !! material.normalMap,\r\n\t\t\tspecularMap: !! material.specularMap,\r\n\t\t\talphaMap: !! material.alphaMap,\r\n\r\n\t\t\tvertexColors: material.vertexColors,\r\n\r\n\t\t\tfog: fog,\r\n\t\t\tuseFog: material.fog,\r\n\t\t\tfogExp: fog instanceof THREE.FogExp2,\r\n\r\n\t\t\tsizeAttenuation: material.sizeAttenuation,\r\n\t\t\tlogarithmicDepthBuffer: _logarithmicDepthBuffer,\r\n\r\n\t\t\tskinning: material.skinning,\r\n\t\t\tmaxBones: maxBones,\r\n\t\t\tuseVertexTexture: _supportsBoneTextures && object && object.skeleton && object.skeleton.useVertexTexture,\r\n\r\n\t\t\tmorphTargets: material.morphTargets,\r\n\t\t\tmorphNormals: material.morphNormals,\r\n\t\t\tmaxMorphTargets: _this.maxMorphTargets,\r\n\t\t\tmaxMorphNormals: _this.maxMorphNormals,\r\n\r\n\t\t\tmaxDirLights: maxLightCount.directional,\r\n\t\t\tmaxPointLights: maxLightCount.point,\r\n\t\t\tmaxSpotLights: maxLightCount.spot,\r\n\t\t\tmaxHemiLights: maxLightCount.hemi,\r\n\r\n\t\t\tmaxShadows: maxShadows,\r\n\t\t\tshadowMapEnabled: _this.shadowMapEnabled && object.receiveShadow && maxShadows > 0,\r\n\t\t\tshadowMapType: _this.shadowMapType,\r\n\t\t\tshadowMapDebug: _this.shadowMapDebug,\r\n\t\t\tshadowMapCascade: _this.shadowMapCascade,\r\n\r\n\t\t\talphaTest: material.alphaTest,\r\n\t\t\tmetal: material.metal,\r\n\t\t\twrapAround: material.wrapAround,\r\n\t\t\tdoubleSided: material.side === THREE.DoubleSide,\r\n\t\t\tflipSided: material.side === THREE.BackSide\r\n\r\n\t\t};\r\n\r\n\t\t// Generate code\r\n\r\n\t\tvar chunks = [];\r\n\r\n\t\tif ( shaderID ) {\r\n\r\n\t\t\tchunks.push( shaderID );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tchunks.push( material.fragmentShader );\r\n\t\t\tchunks.push( material.vertexShader );\r\n\r\n\t\t}\r\n\r\n\t\tif ( material.defines !== undefined ) {\r\n\r\n\t\t\tfor ( var name in material.defines ) {\r\n\r\n\t\t\t\tchunks.push( name );\r\n\t\t\t\tchunks.push( material.defines[ name ] );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tfor ( var name in parameters ) {\r\n\r\n\t\t\tchunks.push( name );\r\n\t\t\tchunks.push( parameters[ name ] );\r\n\r\n\t\t}\r\n\r\n\t\tvar code = chunks.join();\r\n\r\n\t\tvar program;\r\n\r\n\t\t// Check if code has been already compiled\r\n\r\n\t\tfor ( var p = 0, pl = _programs.length; p < pl; p ++ ) {\r\n\r\n\t\t\tvar programInfo = _programs[ p ];\r\n\r\n\t\t\tif ( programInfo.code === code ) {\r\n\r\n\t\t\t\tprogram = programInfo;\r\n\t\t\t\tprogram.usedTimes ++;\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( program === undefined ) {\r\n\r\n\t\t\tprogram = new THREE.WebGLProgram( _this, code, material, parameters );\r\n\t\t\t_programs.push( program );\r\n\r\n\t\t\t_this.info.memory.programs = _programs.length;\r\n\r\n\t\t}\r\n\r\n\t\tmaterial.program = program;\r\n\r\n\t\tvar attributes = program.attributes;\r\n\r\n\t\tif ( material.morphTargets ) {\r\n\r\n\t\t\tmaterial.numSupportedMorphTargets = 0;\r\n\r\n\t\t\tvar id, base = 'morphTarget';\r\n\r\n\t\t\tfor ( var i = 0; i < _this.maxMorphTargets; i ++ ) {\r\n\r\n\t\t\t\tid = base + i;\r\n\r\n\t\t\t\tif ( attributes[ id ] >= 0 ) {\r\n\r\n\t\t\t\t\tmaterial.numSupportedMorphTargets ++;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( material.morphNormals ) {\r\n\r\n\t\t\tmaterial.numSupportedMorphNormals = 0;\r\n\r\n\t\t\tvar id, base = 'morphNormal';\r\n\r\n\t\t\tfor ( i = 0; i < _this.maxMorphNormals; i ++ ) {\r\n\r\n\t\t\t\tid = base + i;\r\n\r\n\t\t\t\tif ( attributes[ id ] >= 0 ) {\r\n\r\n\t\t\t\t\tmaterial.numSupportedMorphNormals ++;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tmaterial.uniformsList = [];\r\n\r\n\t\tfor ( var u in material.__webglShader.uniforms ) {\r\n\r\n\t\t\tvar location = material.program.uniforms[ u ];\r\n\r\n\t\t\tif ( location ) {\r\n\t\t\t\tmaterial.uniformsList.push( [ material.__webglShader.uniforms[ u ], location ] );\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction setProgram( camera, lights, fog, material, object ) {\r\n\r\n\t\t_usedTextureUnits = 0;\r\n\r\n\t\tif ( material.needsUpdate ) {\r\n\r\n\t\t\tif ( material.program ) deallocateMaterial( material );\r\n\r\n\t\t\tinitMaterial( material, lights, fog, object );\r\n\t\t\tmaterial.needsUpdate = false;\r\n\r\n\t\t}\r\n\r\n\t\tif ( material.morphTargets ) {\r\n\r\n\t\t\tif ( ! object.__webglMorphTargetInfluences ) {\r\n\r\n\t\t\t\tobject.__webglMorphTargetInfluences = new Float32Array( _this.maxMorphTargets );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tvar refreshProgram = false;\r\n\t\tvar refreshMaterial = false;\r\n\t\tvar refreshLights = false;\r\n\r\n\t\tvar program = material.program,\r\n\t\t\tp_uniforms = program.uniforms,\r\n\t\t\tm_uniforms = material.__webglShader.uniforms;\r\n\r\n\t\tif ( program.id !== _currentProgram ) {\r\n\r\n\t\t\t_gl.useProgram( program.program );\r\n\t\t\t_currentProgram = program.id;\r\n\r\n\t\t\trefreshProgram = true;\r\n\t\t\trefreshMaterial = true;\r\n\t\t\trefreshLights = true;\r\n\r\n\t\t}\r\n\r\n\t\tif ( material.id !== _currentMaterialId ) {\r\n\r\n\t\t\tif ( _currentMaterialId === -1 ) refreshLights = true;\r\n\t\t\t_currentMaterialId = material.id;\r\n\r\n\t\t\trefreshMaterial = true;\r\n\r\n\t\t}\r\n\r\n\t\tif ( refreshProgram || camera !== _currentCamera ) {\r\n\r\n\t\t\t_gl.uniformMatrix4fv( p_uniforms.projectionMatrix, false, camera.projectionMatrix.elements );\r\n\r\n\t\t\tif ( _logarithmicDepthBuffer ) {\r\n\r\n\t\t\t\t_gl.uniform1f( p_uniforms.logDepthBufFC, 2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) );\r\n\r\n\t\t\t}\r\n\r\n\r\n\t\t\tif ( camera !== _currentCamera ) _currentCamera = camera;\r\n\r\n\t\t\t// load material specific uniforms\r\n\t\t\t// (shader material also gets them for the sake of genericity)\r\n\r\n\t\t\tif ( material instanceof THREE.ShaderMaterial ||\r\n\t\t\t\t material instanceof THREE.MeshPhongMaterial ||\r\n\t\t\t\t material.envMap ) {\r\n\r\n\t\t\t\tif ( p_uniforms.cameraPosition !== null ) {\r\n\r\n\t\t\t\t\t_vector3.setFromMatrixPosition( camera.matrixWorld );\r\n\t\t\t\t\t_gl.uniform3f( p_uniforms.cameraPosition, _vector3.x, _vector3.y, _vector3.z );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( material instanceof THREE.MeshPhongMaterial ||\r\n\t\t\t\t material instanceof THREE.MeshLambertMaterial ||\r\n\t\t\t\t material instanceof THREE.ShaderMaterial ||\r\n\t\t\t\t material.skinning ) {\r\n\r\n\t\t\t\tif ( p_uniforms.viewMatrix !== null ) {\r\n\r\n\t\t\t\t\t_gl.uniformMatrix4fv( p_uniforms.viewMatrix, false, camera.matrixWorldInverse.elements );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t// skinning uniforms must be set even if material didn't change\r\n\t\t// auto-setting of texture unit for bone texture must go before other textures\r\n\t\t// not sure why, but otherwise weird things happen\r\n\r\n\t\tif ( material.skinning ) {\r\n\r\n\t\t\tif ( object.bindMatrix && p_uniforms.bindMatrix !== null ) {\r\n\r\n\t\t\t\t_gl.uniformMatrix4fv( p_uniforms.bindMatrix, false, object.bindMatrix.elements );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( object.bindMatrixInverse && p_uniforms.bindMatrixInverse !== null ) {\r\n\r\n\t\t\t\t_gl.uniformMatrix4fv( p_uniforms.bindMatrixInverse, false, object.bindMatrixInverse.elements );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( _supportsBoneTextures && object.skeleton && object.skeleton.useVertexTexture ) {\r\n\r\n\t\t\t\tif ( p_uniforms.boneTexture !== null ) {\r\n\r\n\t\t\t\t\tvar textureUnit = getTextureUnit();\r\n\r\n\t\t\t\t\t_gl.uniform1i( p_uniforms.boneTexture, textureUnit );\r\n\t\t\t\t\t_this.setTexture( object.skeleton.boneTexture, textureUnit );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( p_uniforms.boneTextureWidth !== null ) {\r\n\r\n\t\t\t\t\t_gl.uniform1i( p_uniforms.boneTextureWidth, object.skeleton.boneTextureWidth );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( p_uniforms.boneTextureHeight !== null ) {\r\n\r\n\t\t\t\t\t_gl.uniform1i( p_uniforms.boneTextureHeight, object.skeleton.boneTextureHeight );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else if ( object.skeleton && object.skeleton.boneMatrices ) {\r\n\r\n\t\t\t\tif ( p_uniforms.boneGlobalMatrices !== null ) {\r\n\r\n\t\t\t\t\t_gl.uniformMatrix4fv( p_uniforms.boneGlobalMatrices, false, object.skeleton.boneMatrices );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( refreshMaterial ) {\r\n\r\n\t\t\t// refresh uniforms common to several materials\r\n\r\n\t\t\tif ( fog && material.fog ) {\r\n\r\n\t\t\t\trefreshUniformsFog( m_uniforms, fog );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( material instanceof THREE.MeshPhongMaterial ||\r\n\t\t\t\t material instanceof THREE.MeshLambertMaterial ||\r\n\t\t\t\t material.lights ) {\r\n\r\n\t\t\t\tif ( _lightsNeedUpdate ) {\r\n\r\n\t\t\t\t\trefreshLights = true;\r\n\t\t\t\t\tsetupLights( lights );\r\n\t\t\t\t\t_lightsNeedUpdate = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( refreshLights ) {\r\n\t\t\t\t\trefreshUniformsLights( m_uniforms, _lights );\r\n\t\t\t\t\tmarkUniformsLightsNeedsUpdate( m_uniforms, true );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tmarkUniformsLightsNeedsUpdate( m_uniforms, false );\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( material instanceof THREE.MeshBasicMaterial ||\r\n\t\t\t\t material instanceof THREE.MeshLambertMaterial ||\r\n\t\t\t\t material instanceof THREE.MeshPhongMaterial ) {\r\n\r\n\t\t\t\trefreshUniformsCommon( m_uniforms, material );\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// refresh single material specific uniforms\r\n\r\n\t\t\tif ( material instanceof THREE.LineBasicMaterial ) {\r\n\r\n\t\t\t\trefreshUniformsLine( m_uniforms, material );\r\n\r\n\t\t\t} else if ( material instanceof THREE.LineDashedMaterial ) {\r\n\r\n\t\t\t\trefreshUniformsLine( m_uniforms, material );\r\n\t\t\t\trefreshUniformsDash( m_uniforms, material );\r\n\r\n\t\t\t} else if ( material instanceof THREE.PointCloudMaterial ) {\r\n\r\n\t\t\t\trefreshUniformsParticle( m_uniforms, material );\r\n\r\n\t\t\t} else if ( material instanceof THREE.MeshPhongMaterial ) {\r\n\r\n\t\t\t\trefreshUniformsPhong( m_uniforms, material );\r\n\r\n\t\t\t} else if ( material instanceof THREE.MeshLambertMaterial ) {\r\n\r\n\t\t\t\trefreshUniformsLambert( m_uniforms, material );\r\n\r\n\t\t\t} else if ( material instanceof THREE.MeshDepthMaterial ) {\r\n\r\n\t\t\t\tm_uniforms.mNear.value = camera.near;\r\n\t\t\t\tm_uniforms.mFar.value = camera.far;\r\n\t\t\t\tm_uniforms.opacity.value = material.opacity;\r\n\r\n\t\t\t} else if ( material instanceof THREE.MeshNormalMaterial ) {\r\n\r\n\t\t\t\tm_uniforms.opacity.value = material.opacity;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( object.receiveShadow && ! material._shadowPass ) {\r\n\r\n\t\t\t\trefreshUniformsShadow( m_uniforms, lights );\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// load common uniforms\r\n\r\n\t\t\tloadUniformsGeneric( material.uniformsList );\r\n\r\n\t\t}\r\n\r\n\t\tloadUniformsMatrices( p_uniforms, object );\r\n\r\n\t\tif ( p_uniforms.modelMatrix !== null ) {\r\n\r\n\t\t\t_gl.uniformMatrix4fv( p_uniforms.modelMatrix, false, object.matrixWorld.elements );\r\n\r\n\t\t}\r\n\r\n\t\treturn program;\r\n\r\n\t}\r\n\r\n\t// Uniforms (refresh uniforms objects)\r\n\r\n\tfunction refreshUniformsCommon ( uniforms, material ) {\r\n\r\n\t\tuniforms.opacity.value = material.opacity;\r\n\r\n\t\tif ( _this.gammaInput ) {\r\n\r\n\t\t\tuniforms.diffuse.value.copyGammaToLinear( material.color );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tuniforms.diffuse.value = material.color;\r\n\r\n\t\t}\r\n\r\n\t\tuniforms.map.value = material.map;\r\n\t\tuniforms.lightMap.value = material.lightMap;\r\n\t\tuniforms.specularMap.value = material.specularMap;\r\n\t\tuniforms.alphaMap.value = material.alphaMap;\r\n\r\n\t\tif ( material.bumpMap ) {\r\n\r\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\r\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\r\n\r\n\t\t}\r\n\r\n\t\tif ( material.normalMap ) {\r\n\r\n\t\t\tuniforms.normalMap.value = material.normalMap;\r\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\r\n\r\n\t\t}\r\n\r\n\t\t// uv repeat and offset setting priorities\r\n\t\t// 1. color map\r\n\t\t// 2. specular map\r\n\t\t// 3. normal map\r\n\t\t// 4. bump map\r\n\t\t// 5. alpha map\r\n\r\n\t\tvar uvScaleMap;\r\n\r\n\t\tif ( material.map ) {\r\n\r\n\t\t\tuvScaleMap = material.map;\r\n\r\n\t\t} else if ( material.specularMap ) {\r\n\r\n\t\t\tuvScaleMap = material.specularMap;\r\n\r\n\t\t} else if ( material.normalMap ) {\r\n\r\n\t\t\tuvScaleMap = material.normalMap;\r\n\r\n\t\t} else if ( material.bumpMap ) {\r\n\r\n\t\t\tuvScaleMap = material.bumpMap;\r\n\r\n\t\t} else if ( material.alphaMap ) {\r\n\r\n\t\t\tuvScaleMap = material.alphaMap;\r\n\r\n\t\t}\r\n\r\n\t\tif ( uvScaleMap !== undefined ) {\r\n\r\n\t\t\tvar offset = uvScaleMap.offset;\r\n\t\t\tvar repeat = uvScaleMap.repeat;\r\n\r\n\t\t\tuniforms.offsetRepeat.value.set( offset.x, offset.y, repeat.x, repeat.y );\r\n\r\n\t\t}\r\n\r\n\t\tuniforms.envMap.value = material.envMap;\r\n\t\tuniforms.flipEnvMap.value = ( material.envMap instanceof THREE.WebGLRenderTargetCube ) ? 1 : - 1;\r\n\r\n\t\tif ( _this.gammaInput ) {\r\n\r\n\t\t\t//uniforms.reflectivity.value = material.reflectivity * material.reflectivity;\r\n\t\t\tuniforms.reflectivity.value = material.reflectivity;\r\n\r\n\t\t} else {\r\n\r\n\t\t\tuniforms.reflectivity.value = material.reflectivity;\r\n\r\n\t\t}\r\n\r\n\t\tuniforms.refractionRatio.value = material.refractionRatio;\r\n\t\tuniforms.combine.value = material.combine;\r\n\t\tuniforms.useRefract.value = material.envMap && material.envMap.mapping instanceof THREE.CubeRefractionMapping;\r\n\r\n\t}\r\n\r\n\tfunction refreshUniformsLine ( uniforms, material ) {\r\n\r\n\t\tuniforms.diffuse.value = material.color;\r\n\t\tuniforms.opacity.value = material.opacity;\r\n\r\n\t}\r\n\r\n\tfunction refreshUniformsDash ( uniforms, material ) {\r\n\r\n\t\tuniforms.dashSize.value = material.dashSize;\r\n\t\tuniforms.totalSize.value = material.dashSize + material.gapSize;\r\n\t\tuniforms.scale.value = material.scale;\r\n\r\n\t}\r\n\r\n\tfunction refreshUniformsParticle ( uniforms, material ) {\r\n\r\n\t\tuniforms.psColor.value = material.color;\r\n\t\tuniforms.opacity.value = material.opacity;\r\n\t\tuniforms.size.value = material.size;\r\n\t\tuniforms.scale.value = _canvas.height / 2.0; // TODO: Cache this.\r\n\r\n\t\tuniforms.map.value = material.map;\r\n\r\n\t}\r\n\r\n\tfunction refreshUniformsFog ( uniforms, fog ) {\r\n\r\n\t\tuniforms.fogColor.value = fog.color;\r\n\r\n\t\tif ( fog instanceof THREE.Fog ) {\r\n\r\n\t\t\tuniforms.fogNear.value = fog.near;\r\n\t\t\tuniforms.fogFar.value = fog.far;\r\n\r\n\t\t} else if ( fog instanceof THREE.FogExp2 ) {\r\n\r\n\t\t\tuniforms.fogDensity.value = fog.density;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction refreshUniformsPhong ( uniforms, material ) {\r\n\r\n\t\tuniforms.shininess.value = material.shininess;\r\n\r\n\t\tif ( _this.gammaInput ) {\r\n\r\n\t\t\tuniforms.ambient.value.copyGammaToLinear( material.ambient );\r\n\t\t\tuniforms.emissive.value.copyGammaToLinear( material.emissive );\r\n\t\t\tuniforms.specular.value.copyGammaToLinear( material.specular );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tuniforms.ambient.value = material.ambient;\r\n\t\t\tuniforms.emissive.value = material.emissive;\r\n\t\t\tuniforms.specular.value = material.specular;\r\n\r\n\t\t}\r\n\r\n\t\tif ( material.wrapAround ) {\r\n\r\n\t\t\tuniforms.wrapRGB.value.copy( material.wrapRGB );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction refreshUniformsLambert ( uniforms, material ) {\r\n\r\n\t\tif ( _this.gammaInput ) {\r\n\r\n\t\t\tuniforms.ambient.value.copyGammaToLinear( material.ambient );\r\n\t\t\tuniforms.emissive.value.copyGammaToLinear( material.emissive );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tuniforms.ambient.value = material.ambient;\r\n\t\t\tuniforms.emissive.value = material.emissive;\r\n\r\n\t\t}\r\n\r\n\t\tif ( material.wrapAround ) {\r\n\r\n\t\t\tuniforms.wrapRGB.value.copy( material.wrapRGB );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction refreshUniformsLights ( uniforms, lights ) {\r\n\r\n\t\tuniforms.ambientLightColor.value = lights.ambient;\r\n\r\n\t\tuniforms.directionalLightColor.value = lights.directional.colors;\r\n\t\tuniforms.directionalLightDirection.value = lights.directional.positions;\r\n\r\n\t\tuniforms.pointLightColor.value = lights.point.colors;\r\n\t\tuniforms.pointLightPosition.value = lights.point.positions;\r\n\t\tuniforms.pointLightDistance.value = lights.point.distances;\r\n\r\n\t\tuniforms.spotLightColor.value = lights.spot.colors;\r\n\t\tuniforms.spotLightPosition.value = lights.spot.positions;\r\n\t\tuniforms.spotLightDistance.value = lights.spot.distances;\r\n\t\tuniforms.spotLightDirection.value = lights.spot.directions;\r\n\t\tuniforms.spotLightAngleCos.value = lights.spot.anglesCos;\r\n\t\tuniforms.spotLightExponent.value = lights.spot.exponents;\r\n\r\n\t\tuniforms.hemisphereLightSkyColor.value = lights.hemi.skyColors;\r\n\t\tuniforms.hemisphereLightGroundColor.value = lights.hemi.groundColors;\r\n\t\tuniforms.hemisphereLightDirection.value = lights.hemi.positions;\r\n\r\n\t}\r\n\r\n\t// If uniforms are marked as clean, they don't need to be loaded to the GPU.\r\n\r\n\tfunction markUniformsLightsNeedsUpdate ( uniforms, boolean ) {\r\n\r\n\t\tuniforms.ambientLightColor.needsUpdate = boolean;\r\n\r\n\t\tuniforms.directionalLightColor.needsUpdate = boolean;\r\n\t\tuniforms.directionalLightDirection.needsUpdate = boolean;\r\n\r\n\t\tuniforms.pointLightColor.needsUpdate = boolean;\r\n\t\tuniforms.pointLightPosition.needsUpdate = boolean;\r\n\t\tuniforms.pointLightDistance.needsUpdate = boolean;\r\n\r\n\t\tuniforms.spotLightColor.needsUpdate = boolean;\r\n\t\tuniforms.spotLightPosition.needsUpdate = boolean;\r\n\t\tuniforms.spotLightDistance.needsUpdate = boolean;\r\n\t\tuniforms.spotLightDirection.needsUpdate = boolean;\r\n\t\tuniforms.spotLightAngleCos.needsUpdate = boolean;\r\n\t\tuniforms.spotLightExponent.needsUpdate = boolean;\r\n\r\n\t\tuniforms.hemisphereLightSkyColor.needsUpdate = boolean;\r\n\t\tuniforms.hemisphereLightGroundColor.needsUpdate = boolean;\r\n\t\tuniforms.hemisphereLightDirection.needsUpdate = boolean;\r\n\r\n\t}\r\n\r\n\tfunction refreshUniformsShadow ( uniforms, lights ) {\r\n\r\n\t\tif ( uniforms.shadowMatrix ) {\r\n\r\n\t\t\tvar j = 0;\r\n\r\n\t\t\tfor ( var i = 0, il = lights.length; i < il; i ++ ) {\r\n\r\n\t\t\t\tvar light = lights[ i ];\r\n\r\n\t\t\t\tif ( ! light.castShadow ) continue;\r\n\r\n\t\t\t\tif ( light instanceof THREE.SpotLight || ( light instanceof THREE.DirectionalLight && ! light.shadowCascade ) ) {\r\n\r\n\t\t\t\t\tuniforms.shadowMap.value[ j ] = light.shadowMap;\r\n\t\t\t\t\tuniforms.shadowMapSize.value[ j ] = light.shadowMapSize;\r\n\r\n\t\t\t\t\tuniforms.shadowMatrix.value[ j ] = light.shadowMatrix;\r\n\r\n\t\t\t\t\tuniforms.shadowDarkness.value[ j ] = light.shadowDarkness;\r\n\t\t\t\t\tuniforms.shadowBias.value[ j ] = light.shadowBias;\r\n\r\n\t\t\t\t\tj ++;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// Uniforms (load to GPU)\r\n\r\n\tfunction loadUniformsMatrices ( uniforms, object ) {\r\n\r\n\t\t_gl.uniformMatrix4fv( uniforms.modelViewMatrix, false, object._modelViewMatrix.elements );\r\n\r\n\t\tif ( uniforms.normalMatrix ) {\r\n\r\n\t\t\t_gl.uniformMatrix3fv( uniforms.normalMatrix, false, object._normalMatrix.elements );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction getTextureUnit() {\r\n\r\n\t\tvar textureUnit = _usedTextureUnits;\r\n\r\n\t\tif ( textureUnit >= _maxTextures ) {\r\n\r\n\t\t\tconsole.warn( 'WebGLRenderer: trying to use ' + textureUnit + ' texture units while this GPU supports only ' + _maxTextures );\r\n\r\n\t\t}\r\n\r\n\t\t_usedTextureUnits += 1;\r\n\r\n\t\treturn textureUnit;\r\n\r\n\t}\r\n\r\n\tfunction loadUniformsGeneric ( uniforms ) {\r\n\r\n\t\tvar texture, textureUnit, offset;\r\n\r\n\t\tfor ( var j = 0, jl = uniforms.length; j < jl; j ++ ) {\r\n\r\n\t\t\tvar uniform = uniforms[ j ][ 0 ];\r\n\r\n\t\t\t// needsUpdate property is not added to all uniforms.\r\n\t\t\tif ( uniform.needsUpdate === false ) continue;\r\n\r\n\t\t\tvar type = uniform.type;\r\n\t\t\tvar value = uniform.value;\r\n\t\t\tvar location = uniforms[ j ][ 1 ];\r\n\r\n\t\t\tswitch ( type ) {\r\n\r\n\t\t\t\tcase '1i':\r\n\t\t\t\t\t_gl.uniform1i( location, value );\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase '1f':\r\n\t\t\t\t\t_gl.uniform1f( location, value );\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase '2f':\r\n\t\t\t\t\t_gl.uniform2f( location, value[ 0 ], value[ 1 ] );\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase '3f':\r\n\t\t\t\t\t_gl.uniform3f( location, value[ 0 ], value[ 1 ], value[ 2 ] );\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase '4f':\r\n\t\t\t\t\t_gl.uniform4f( location, value[ 0 ], value[ 1 ], value[ 2 ], value[ 3 ] );\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase '1iv':\r\n\t\t\t\t\t_gl.uniform1iv( location, value );\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase '3iv':\r\n\t\t\t\t\t_gl.uniform3iv( location, value );\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase '1fv':\r\n\t\t\t\t\t_gl.uniform1fv( location, value );\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase '2fv':\r\n\t\t\t\t\t_gl.uniform2fv( location, value );\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase '3fv':\r\n\t\t\t\t\t_gl.uniform3fv( location, value );\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase '4fv':\r\n\t\t\t\t\t_gl.uniform4fv( location, value );\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'Matrix3fv':\r\n\t\t\t\t\t_gl.uniformMatrix3fv( location, false, value );\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'Matrix4fv':\r\n\t\t\t\t\t_gl.uniformMatrix4fv( location, false, value );\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t//\r\n\r\n\t\t\t\tcase 'i':\r\n\r\n\t\t\t\t\t// single integer\r\n\t\t\t\t\t_gl.uniform1i( location, value );\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'f':\r\n\r\n\t\t\t\t\t// single float\r\n\t\t\t\t\t_gl.uniform1f( location, value );\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'v2':\r\n\r\n\t\t\t\t\t// single THREE.Vector2\r\n\t\t\t\t\t_gl.uniform2f( location, value.x, value.y );\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'v3':\r\n\r\n\t\t\t\t\t// single THREE.Vector3\r\n\t\t\t\t\t_gl.uniform3f( location, value.x, value.y, value.z );\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'v4':\r\n\r\n\t\t\t\t\t// single THREE.Vector4\r\n\t\t\t\t\t_gl.uniform4f( location, value.x, value.y, value.z, value.w );\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'c':\r\n\r\n\t\t\t\t\t// single THREE.Color\r\n\t\t\t\t\t_gl.uniform3f( location, value.r, value.g, value.b );\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'iv1':\r\n\r\n\t\t\t\t\t// flat array of integers (JS or typed array)\r\n\t\t\t\t\t_gl.uniform1iv( location, value );\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'iv':\r\n\r\n\t\t\t\t\t// flat array of integers with 3 x N size (JS or typed array)\r\n\t\t\t\t\t_gl.uniform3iv( location, value );\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'fv1':\r\n\r\n\t\t\t\t\t// flat array of floats (JS or typed array)\r\n\t\t\t\t\t_gl.uniform1fv( location, value );\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'fv':\r\n\r\n\t\t\t\t\t// flat array of floats with 3 x N size (JS or typed array)\r\n\t\t\t\t\t_gl.uniform3fv( location, value );\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'v2v':\r\n\r\n\t\t\t\t\t// array of THREE.Vector2\r\n\r\n\t\t\t\t\tif ( uniform._array === undefined ) {\r\n\r\n\t\t\t\t\t\tuniform._array = new Float32Array( 2 * value.length );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfor ( var i = 0, il = value.length; i < il; i ++ ) {\r\n\r\n\t\t\t\t\t\toffset = i * 2;\r\n\r\n\t\t\t\t\t\tuniform._array[ offset ] = value[ i ].x;\r\n\t\t\t\t\t\tuniform._array[ offset + 1 ] = value[ i ].y;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t_gl.uniform2fv( location, uniform._array );\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'v3v':\r\n\r\n\t\t\t\t\t// array of THREE.Vector3\r\n\r\n\t\t\t\t\tif ( uniform._array === undefined ) {\r\n\r\n\t\t\t\t\t\tuniform._array = new Float32Array( 3 * value.length );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfor ( var i = 0, il = value.length; i < il; i ++ ) {\r\n\r\n\t\t\t\t\t\toffset = i * 3;\r\n\r\n\t\t\t\t\t\tuniform._array[ offset ] = value[ i ].x;\r\n\t\t\t\t\t\tuniform._array[ offset + 1 ] = value[ i ].y;\r\n\t\t\t\t\t\tuniform._array[ offset + 2 ] = value[ i ].z;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t_gl.uniform3fv( location, uniform._array );\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'v4v':\r\n\r\n\t\t\t\t\t// array of THREE.Vector4\r\n\r\n\t\t\t\t\tif ( uniform._array === undefined ) {\r\n\r\n\t\t\t\t\t\tuniform._array = new Float32Array( 4 * value.length );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfor ( var i = 0, il = value.length; i < il; i ++ ) {\r\n\r\n\t\t\t\t\t\toffset = i * 4;\r\n\r\n\t\t\t\t\t\tuniform._array[ offset ] = value[ i ].x;\r\n\t\t\t\t\t\tuniform._array[ offset + 1 ] = value[ i ].y;\r\n\t\t\t\t\t\tuniform._array[ offset + 2 ] = value[ i ].z;\r\n\t\t\t\t\t\tuniform._array[ offset + 3 ] = value[ i ].w;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t_gl.uniform4fv( location, uniform._array );\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'm3':\r\n\r\n\t\t\t\t\t// single THREE.Matrix3\r\n\t\t\t\t\t_gl.uniformMatrix3fv( location, false, value.elements );\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'm3v':\r\n\r\n\t\t\t\t\t// array of THREE.Matrix3\r\n\r\n\t\t\t\t\tif ( uniform._array === undefined ) {\r\n\r\n\t\t\t\t\t\tuniform._array = new Float32Array( 9 * value.length );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfor ( var i = 0, il = value.length; i < il; i ++ ) {\r\n\r\n\t\t\t\t\t\tvalue[ i ].flattenToArrayOffset( uniform._array, i * 9 );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t_gl.uniformMatrix3fv( location, false, uniform._array );\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'm4':\r\n\r\n\t\t\t\t\t// single THREE.Matrix4\r\n\t\t\t\t\t_gl.uniformMatrix4fv( location, false, value.elements );\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'm4v':\r\n\r\n\t\t\t\t\t// array of THREE.Matrix4\r\n\r\n\t\t\t\t\tif ( uniform._array === undefined ) {\r\n\r\n\t\t\t\t\t\tuniform._array = new Float32Array( 16 * value.length );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfor ( var i = 0, il = value.length; i < il; i ++ ) {\r\n\r\n\t\t\t\t\t\tvalue[ i ].flattenToArrayOffset( uniform._array, i * 16 );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t_gl.uniformMatrix4fv( location, false, uniform._array );\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 't':\r\n\r\n\t\t\t\t\t// single THREE.Texture (2d or cube)\r\n\r\n\t\t\t\t\ttexture = value;\r\n\t\t\t\t\ttextureUnit = getTextureUnit();\r\n\r\n\t\t\t\t\t_gl.uniform1i( location, textureUnit );\r\n\r\n\t\t\t\t\tif ( ! texture ) continue;\r\n\r\n\t\t\t\t\tif ( texture instanceof THREE.CubeTexture ||\r\n\t\t\t\t\t ( texture.image instanceof Array && texture.image.length === 6 ) ) { // CompressedTexture can have Array in image :/\r\n\r\n\t\t\t\t\t\tsetCubeTexture( texture, textureUnit );\r\n\r\n\t\t\t\t\t} else if ( texture instanceof THREE.WebGLRenderTargetCube ) {\r\n\r\n\t\t\t\t\t\tsetCubeTextureDynamic( texture, textureUnit );\r\n\r\n\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\t_this.setTexture( texture, textureUnit );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'tv':\r\n\r\n\t\t\t\t\t// array of THREE.Texture (2d)\r\n\r\n\t\t\t\t\tif ( uniform._array === undefined ) {\r\n\r\n\t\t\t\t\t\tuniform._array = [];\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfor ( var i = 0, il = uniform.value.length; i < il; i ++ ) {\r\n\r\n\t\t\t\t\t\tuniform._array[ i ] = getTextureUnit();\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t_gl.uniform1iv( location, uniform._array );\r\n\r\n\t\t\t\t\tfor ( var i = 0, il = uniform.value.length; i < il; i ++ ) {\r\n\r\n\t\t\t\t\t\ttexture = uniform.value[ i ];\r\n\t\t\t\t\t\ttextureUnit = uniform._array[ i ];\r\n\r\n\t\t\t\t\t\tif ( ! texture ) continue;\r\n\r\n\t\t\t\t\t\t_this.setTexture( texture, textureUnit );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\r\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Unknown uniform type: ' + type );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction setupMatrices ( object, camera ) {\r\n\r\n\t\tobject._modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );\r\n\t\tobject._normalMatrix.getNormalMatrix( object._modelViewMatrix );\r\n\r\n\t}\r\n\r\n\t//\r\n\r\n\tfunction setColorGamma( array, offset, color, intensitySq ) {\r\n\r\n\t\tarray[ offset ] = color.r * color.r * intensitySq;\r\n\t\tarray[ offset + 1 ] = color.g * color.g * intensitySq;\r\n\t\tarray[ offset + 2 ] = color.b * color.b * intensitySq;\r\n\r\n\t}\r\n\r\n\tfunction setColorLinear( array, offset, color, intensity ) {\r\n\r\n\t\tarray[ offset ] = color.r * intensity;\r\n\t\tarray[ offset + 1 ] = color.g * intensity;\r\n\t\tarray[ offset + 2 ] = color.b * intensity;\r\n\r\n\t}\r\n\r\n\tfunction setupLights ( lights ) {\r\n\r\n\t\tvar l, ll, light, n,\r\n\t\tr = 0, g = 0, b = 0,\r\n\t\tcolor, skyColor, groundColor,\r\n\t\tintensity, intensitySq,\r\n\t\tposition,\r\n\t\tdistance,\r\n\r\n\t\tzlights = _lights,\r\n\r\n\t\tdirColors = zlights.directional.colors,\r\n\t\tdirPositions = zlights.directional.positions,\r\n\r\n\t\tpointColors = zlights.point.colors,\r\n\t\tpointPositions = zlights.point.positions,\r\n\t\tpointDistances = zlights.point.distances,\r\n\r\n\t\tspotColors = zlights.spot.colors,\r\n\t\tspotPositions = zlights.spot.positions,\r\n\t\tspotDistances = zlights.spot.distances,\r\n\t\tspotDirections = zlights.spot.directions,\r\n\t\tspotAnglesCos = zlights.spot.anglesCos,\r\n\t\tspotExponents = zlights.spot.exponents,\r\n\r\n\t\themiSkyColors = zlights.hemi.skyColors,\r\n\t\themiGroundColors = zlights.hemi.groundColors,\r\n\t\themiPositions = zlights.hemi.positions,\r\n\r\n\t\tdirLength = 0,\r\n\t\tpointLength = 0,\r\n\t\tspotLength = 0,\r\n\t\themiLength = 0,\r\n\r\n\t\tdirCount = 0,\r\n\t\tpointCount = 0,\r\n\t\tspotCount = 0,\r\n\t\themiCount = 0,\r\n\r\n\t\tdirOffset = 0,\r\n\t\tpointOffset = 0,\r\n\t\tspotOffset = 0,\r\n\t\themiOffset = 0;\r\n\r\n\t\tfor ( l = 0, ll = lights.length; l < ll; l ++ ) {\r\n\r\n\t\t\tlight = lights[ l ];\r\n\r\n\t\t\tif ( light.onlyShadow ) continue;\r\n\r\n\t\t\tcolor = light.color;\r\n\t\t\tintensity = light.intensity;\r\n\t\t\tdistance = light.distance;\r\n\r\n\t\t\tif ( light instanceof THREE.AmbientLight ) {\r\n\r\n\t\t\t\tif ( ! light.visible ) continue;\r\n\r\n\t\t\t\tif ( _this.gammaInput ) {\r\n\r\n\t\t\t\t\tr += color.r * color.r;\r\n\t\t\t\t\tg += color.g * color.g;\r\n\t\t\t\t\tb += color.b * color.b;\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tr += color.r;\r\n\t\t\t\t\tg += color.g;\r\n\t\t\t\t\tb += color.b;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else if ( light instanceof THREE.DirectionalLight ) {\r\n\r\n\t\t\t\tdirCount += 1;\r\n\r\n\t\t\t\tif ( ! light.visible ) continue;\r\n\r\n\t\t\t\t_direction.setFromMatrixPosition( light.matrixWorld );\r\n\t\t\t\t_vector3.setFromMatrixPosition( light.target.matrixWorld );\r\n\t\t\t\t_direction.sub( _vector3 );\r\n\t\t\t\t_direction.normalize();\r\n\r\n\t\t\t\tdirOffset = dirLength * 3;\r\n\r\n\t\t\t\tdirPositions[ dirOffset ] = _direction.x;\r\n\t\t\t\tdirPositions[ dirOffset + 1 ] = _direction.y;\r\n\t\t\t\tdirPositions[ dirOffset + 2 ] = _direction.z;\r\n\r\n\t\t\t\tif ( _this.gammaInput ) {\r\n\r\n\t\t\t\t\tsetColorGamma( dirColors, dirOffset, color, intensity * intensity );\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tsetColorLinear( dirColors, dirOffset, color, intensity );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdirLength += 1;\r\n\r\n\t\t\t} else if ( light instanceof THREE.PointLight ) {\r\n\r\n\t\t\t\tpointCount += 1;\r\n\r\n\t\t\t\tif ( ! light.visible ) continue;\r\n\r\n\t\t\t\tpointOffset = pointLength * 3;\r\n\r\n\t\t\t\tif ( _this.gammaInput ) {\r\n\r\n\t\t\t\t\tsetColorGamma( pointColors, pointOffset, color, intensity * intensity );\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tsetColorLinear( pointColors, pointOffset, color, intensity );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t_vector3.setFromMatrixPosition( light.matrixWorld );\r\n\r\n\t\t\t\tpointPositions[ pointOffset ] = _vector3.x;\r\n\t\t\t\tpointPositions[ pointOffset + 1 ] = _vector3.y;\r\n\t\t\t\tpointPositions[ pointOffset + 2 ] = _vector3.z;\r\n\r\n\t\t\t\tpointDistances[ pointLength ] = distance;\r\n\r\n\t\t\t\tpointLength += 1;\r\n\r\n\t\t\t} else if ( light instanceof THREE.SpotLight ) {\r\n\r\n\t\t\t\tspotCount += 1;\r\n\r\n\t\t\t\tif ( ! light.visible ) continue;\r\n\r\n\t\t\t\tspotOffset = spotLength * 3;\r\n\r\n\t\t\t\tif ( _this.gammaInput ) {\r\n\r\n\t\t\t\t\tsetColorGamma( spotColors, spotOffset, color, intensity * intensity );\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tsetColorLinear( spotColors, spotOffset, color, intensity );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t_direction.setFromMatrixPosition( light.matrixWorld );\r\n\r\n\t\t\t\tspotPositions[ spotOffset ] = _direction.x;\r\n\t\t\t\tspotPositions[ spotOffset + 1 ] = _direction.y;\r\n\t\t\t\tspotPositions[ spotOffset + 2 ] = _direction.z;\r\n\r\n\t\t\t\tspotDistances[ spotLength ] = distance;\r\n\r\n\t\t\t\t_vector3.setFromMatrixPosition( light.target.matrixWorld );\r\n\t\t\t\t_direction.sub( _vector3 );\r\n\t\t\t\t_direction.normalize();\r\n\r\n\t\t\t\tspotDirections[ spotOffset ] = _direction.x;\r\n\t\t\t\tspotDirections[ spotOffset + 1 ] = _direction.y;\r\n\t\t\t\tspotDirections[ spotOffset + 2 ] = _direction.z;\r\n\r\n\t\t\t\tspotAnglesCos[ spotLength ] = Math.cos( light.angle );\r\n\t\t\t\tspotExponents[ spotLength ] = light.exponent;\r\n\r\n\t\t\t\tspotLength += 1;\r\n\r\n\t\t\t} else if ( light instanceof THREE.HemisphereLight ) {\r\n\r\n\t\t\t\themiCount += 1;\r\n\r\n\t\t\t\tif ( ! light.visible ) continue;\r\n\r\n\t\t\t\t_direction.setFromMatrixPosition( light.matrixWorld );\r\n\t\t\t\t_direction.normalize();\r\n\r\n\t\t\t\themiOffset = hemiLength * 3;\r\n\r\n\t\t\t\themiPositions[ hemiOffset ] = _direction.x;\r\n\t\t\t\themiPositions[ hemiOffset + 1 ] = _direction.y;\r\n\t\t\t\themiPositions[ hemiOffset + 2 ] = _direction.z;\r\n\r\n\t\t\t\tskyColor = light.color;\r\n\t\t\t\tgroundColor = light.groundColor;\r\n\r\n\t\t\t\tif ( _this.gammaInput ) {\r\n\r\n\t\t\t\t\tintensitySq = intensity * intensity;\r\n\r\n\t\t\t\t\tsetColorGamma( hemiSkyColors, hemiOffset, skyColor, intensitySq );\r\n\t\t\t\t\tsetColorGamma( hemiGroundColors, hemiOffset, groundColor, intensitySq );\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tsetColorLinear( hemiSkyColors, hemiOffset, skyColor, intensity );\r\n\t\t\t\t\tsetColorLinear( hemiGroundColors, hemiOffset, groundColor, intensity );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\themiLength += 1;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t// null eventual remains from removed lights\r\n\t\t// (this is to avoid if in shader)\r\n\r\n\t\tfor ( l = dirLength * 3, ll = Math.max( dirColors.length, dirCount * 3 ); l < ll; l ++ ) dirColors[ l ] = 0.0;\r\n\t\tfor ( l = pointLength * 3, ll = Math.max( pointColors.length, pointCount * 3 ); l < ll; l ++ ) pointColors[ l ] = 0.0;\r\n\t\tfor ( l = spotLength * 3, ll = Math.max( spotColors.length, spotCount * 3 ); l < ll; l ++ ) spotColors[ l ] = 0.0;\r\n\t\tfor ( l = hemiLength * 3, ll = Math.max( hemiSkyColors.length, hemiCount * 3 ); l < ll; l ++ ) hemiSkyColors[ l ] = 0.0;\r\n\t\tfor ( l = hemiLength * 3, ll = Math.max( hemiGroundColors.length, hemiCount * 3 ); l < ll; l ++ ) hemiGroundColors[ l ] = 0.0;\r\n\r\n\t\tzlights.directional.length = dirLength;\r\n\t\tzlights.point.length = pointLength;\r\n\t\tzlights.spot.length = spotLength;\r\n\t\tzlights.hemi.length = hemiLength;\r\n\r\n\t\tzlights.ambient[ 0 ] = r;\r\n\t\tzlights.ambient[ 1 ] = g;\r\n\t\tzlights.ambient[ 2 ] = b;\r\n\r\n\t}\r\n\r\n\t// GL state setting\r\n\r\n\tthis.setFaceCulling = function ( cullFace, frontFaceDirection ) {\r\n\r\n\t\tif ( cullFace === THREE.CullFaceNone ) {\r\n\r\n\t\t\t_gl.disable( _gl.CULL_FACE );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tif ( frontFaceDirection === THREE.FrontFaceDirectionCW ) {\r\n\r\n\t\t\t\t_gl.frontFace( _gl.CW );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t_gl.frontFace( _gl.CCW );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( cullFace === THREE.CullFaceBack ) {\r\n\r\n\t\t\t\t_gl.cullFace( _gl.BACK );\r\n\r\n\t\t\t} else if ( cullFace === THREE.CullFaceFront ) {\r\n\r\n\t\t\t\t_gl.cullFace( _gl.FRONT );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t_gl.cullFace( _gl.FRONT_AND_BACK );\r\n\r\n\t\t\t}\r\n\r\n\t\t\t_gl.enable( _gl.CULL_FACE );\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tthis.setMaterialFaces = function ( material ) {\r\n\r\n\t\tvar doubleSided = material.side === THREE.DoubleSide;\r\n\t\tvar flipSided = material.side === THREE.BackSide;\r\n\r\n\t\tif ( _oldDoubleSided !== doubleSided ) {\r\n\r\n\t\t\tif ( doubleSided ) {\r\n\r\n\t\t\t\t_gl.disable( _gl.CULL_FACE );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t_gl.enable( _gl.CULL_FACE );\r\n\r\n\t\t\t}\r\n\r\n\t\t\t_oldDoubleSided = doubleSided;\r\n\r\n\t\t}\r\n\r\n\t\tif ( _oldFlipSided !== flipSided ) {\r\n\r\n\t\t\tif ( flipSided ) {\r\n\r\n\t\t\t\t_gl.frontFace( _gl.CW );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t_gl.frontFace( _gl.CCW );\r\n\r\n\t\t\t}\r\n\r\n\t\t\t_oldFlipSided = flipSided;\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tthis.setDepthTest = function ( depthTest ) {\r\n\r\n\t\tif ( _oldDepthTest !== depthTest ) {\r\n\r\n\t\t\tif ( depthTest ) {\r\n\r\n\t\t\t\t_gl.enable( _gl.DEPTH_TEST );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t_gl.disable( _gl.DEPTH_TEST );\r\n\r\n\t\t\t}\r\n\r\n\t\t\t_oldDepthTest = depthTest;\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tthis.setDepthWrite = function ( depthWrite ) {\r\n\r\n\t\tif ( _oldDepthWrite !== depthWrite ) {\r\n\r\n\t\t\t_gl.depthMask( depthWrite );\r\n\t\t\t_oldDepthWrite = depthWrite;\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tfunction setLineWidth ( width ) {\r\n\r\n\t\tif ( width !== _oldLineWidth ) {\r\n\r\n\t\t\t_gl.lineWidth( width );\r\n\r\n\t\t\t_oldLineWidth = width;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction setPolygonOffset ( polygonoffset, factor, units ) {\r\n\r\n\t\tif ( _oldPolygonOffset !== polygonoffset ) {\r\n\r\n\t\t\tif ( polygonoffset ) {\r\n\r\n\t\t\t\t_gl.enable( _gl.POLYGON_OFFSET_FILL );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t_gl.disable( _gl.POLYGON_OFFSET_FILL );\r\n\r\n\t\t\t}\r\n\r\n\t\t\t_oldPolygonOffset = polygonoffset;\r\n\r\n\t\t}\r\n\r\n\t\tif ( polygonoffset && ( _oldPolygonOffsetFactor !== factor || _oldPolygonOffsetUnits !== units ) ) {\r\n\r\n\t\t\t_gl.polygonOffset( factor, units );\r\n\r\n\t\t\t_oldPolygonOffsetFactor = factor;\r\n\t\t\t_oldPolygonOffsetUnits = units;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tthis.setBlending = function ( blending, blendEquation, blendSrc, blendDst ) {\r\n\r\n\t\tif ( blending !== _oldBlending ) {\r\n\r\n\t\t\tif ( blending === THREE.NoBlending ) {\r\n\r\n\t\t\t\t_gl.disable( _gl.BLEND );\r\n\r\n\t\t\t} else if ( blending === THREE.AdditiveBlending ) {\r\n\r\n\t\t\t\t_gl.enable( _gl.BLEND );\r\n\t\t\t\t_gl.blendEquation( _gl.FUNC_ADD );\r\n\t\t\t\t_gl.blendFunc( _gl.SRC_ALPHA, _gl.ONE );\r\n\r\n\t\t\t} else if ( blending === THREE.SubtractiveBlending ) {\r\n\r\n\t\t\t\t// TODO: Find blendFuncSeparate() combination\r\n\t\t\t\t_gl.enable( _gl.BLEND );\r\n\t\t\t\t_gl.blendEquation( _gl.FUNC_ADD );\r\n\t\t\t\t_gl.blendFunc( _gl.ZERO, _gl.ONE_MINUS_SRC_COLOR );\r\n\r\n\t\t\t} else if ( blending === THREE.MultiplyBlending ) {\r\n\r\n\t\t\t\t// TODO: Find blendFuncSeparate() combination\r\n\t\t\t\t_gl.enable( _gl.BLEND );\r\n\t\t\t\t_gl.blendEquation( _gl.FUNC_ADD );\r\n\t\t\t\t_gl.blendFunc( _gl.ZERO, _gl.SRC_COLOR );\r\n\r\n\t\t\t} else if ( blending === THREE.CustomBlending ) {\r\n\r\n\t\t\t\t_gl.enable( _gl.BLEND );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t_gl.enable( _gl.BLEND );\r\n\t\t\t\t_gl.blendEquationSeparate( _gl.FUNC_ADD, _gl.FUNC_ADD );\r\n\t\t\t\t_gl.blendFuncSeparate( _gl.SRC_ALPHA, _gl.ONE_MINUS_SRC_ALPHA, _gl.ONE, _gl.ONE_MINUS_SRC_ALPHA );\r\n\r\n\t\t\t}\r\n\r\n\t\t\t_oldBlending = blending;\r\n\r\n\t\t}\r\n\r\n\t\tif ( blending === THREE.CustomBlending ) {\r\n\r\n\t\t\tif ( blendEquation !== _oldBlendEquation ) {\r\n\r\n\t\t\t\t_gl.blendEquation( paramThreeToGL( blendEquation ) );\r\n\r\n\t\t\t\t_oldBlendEquation = blendEquation;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( blendSrc !== _oldBlendSrc || blendDst !== _oldBlendDst ) {\r\n\r\n\t\t\t\t_gl.blendFunc( paramThreeToGL( blendSrc ), paramThreeToGL( blendDst ) );\r\n\r\n\t\t\t\t_oldBlendSrc = blendSrc;\r\n\t\t\t\t_oldBlendDst = blendDst;\r\n\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\r\n\t\t\t_oldBlendEquation = null;\r\n\t\t\t_oldBlendSrc = null;\r\n\t\t\t_oldBlendDst = null;\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\t// Textures\r\n\r\n\tfunction setTextureParameters ( textureType, texture, isImagePowerOfTwo ) {\r\n\r\n\t\tvar extension;\r\n\r\n\t\tif ( isImagePowerOfTwo ) {\r\n\r\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, paramThreeToGL( texture.wrapS ) );\r\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, paramThreeToGL( texture.wrapT ) );\r\n\r\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, paramThreeToGL( texture.magFilter ) );\r\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, paramThreeToGL( texture.minFilter ) );\r\n\r\n\t\t} else {\r\n\r\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, _gl.CLAMP_TO_EDGE );\r\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, _gl.CLAMP_TO_EDGE );\r\n\r\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, filterFallback( texture.magFilter ) );\r\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, filterFallback( texture.minFilter ) );\r\n\r\n\t\t}\r\n\r\n\t\textension = extensions.get( 'EXT_texture_filter_anisotropic' );\r\n\r\n\t\tif ( extension && texture.type !== THREE.FloatType ) {\r\n\r\n\t\t\tif ( texture.anisotropy > 1 || texture.__oldAnisotropy ) {\r\n\r\n\t\t\t\t_gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, _this.getMaxAnisotropy() ) );\r\n\t\t\t\ttexture.__oldAnisotropy = texture.anisotropy;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tthis.uploadTexture = function ( texture ) {\r\n\r\n\t\tif ( texture.__webglInit === undefined ) {\r\n\r\n\t\t\ttexture.__webglInit = true;\r\n\r\n\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\r\n\r\n\t\t\ttexture.__webglTexture = _gl.createTexture();\r\n\r\n\t\t\t_this.info.memory.textures ++;\r\n\r\n\t\t}\r\n\r\n\t\t_gl.bindTexture( _gl.TEXTURE_2D, texture.__webglTexture );\r\n\r\n\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );\r\n\t\t_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );\r\n\t\t_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );\r\n\r\n\t\ttexture.image = clampToMaxSize( texture.image, _maxTextureSize );\r\n\r\n\t\tvar image = texture.image,\r\n\t\tisImagePowerOfTwo = THREE.Math.isPowerOfTwo( image.width ) && THREE.Math.isPowerOfTwo( image.height ),\r\n\t\tglFormat = paramThreeToGL( texture.format ),\r\n\t\tglType = paramThreeToGL( texture.type );\r\n\r\n\t\tsetTextureParameters( _gl.TEXTURE_2D, texture, isImagePowerOfTwo );\r\n\r\n\t\tvar mipmap, mipmaps = texture.mipmaps;\r\n\r\n\t\tif ( texture instanceof THREE.DataTexture ) {\r\n\r\n\t\t\t// use manually created mipmaps if available\r\n\t\t\t// if there are no manual mipmaps\r\n\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\r\n\r\n\t\t\tif ( mipmaps.length > 0 && isImagePowerOfTwo ) {\r\n\r\n\t\t\t\tfor ( var i = 0, il = mipmaps.length; i < il; i ++ ) {\r\n\r\n\t\t\t\t\tmipmap = mipmaps[ i ];\r\n\t\t\t\t\t_gl.texImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttexture.generateMipmaps = false;\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t_gl.texImage2D( _gl.TEXTURE_2D, 0, glFormat, image.width, image.height, 0, glFormat, glType, image.data );\r\n\r\n\t\t\t}\r\n\r\n\t\t} else if ( texture instanceof THREE.CompressedTexture ) {\r\n\r\n\t\t\tfor ( var i = 0, il = mipmaps.length; i < il; i ++ ) {\r\n\r\n\t\t\t\tmipmap = mipmaps[ i ];\r\n\r\n\t\t\t\tif ( texture.format !== THREE.RGBAFormat && texture.format !== THREE.RGBFormat ) {\r\n\r\n\t\t\t\t\tif ( getCompressedTextureFormats().indexOf( glFormat ) > -1 ) {\r\n\r\n\t\t\t\t\t\t_gl.compressedTexImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, mipmap.data );\r\n\r\n\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\tconsole.warn( \"Attempt to load unsupported compressed texture format\" );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\t_gl.texImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t} else { // regular Texture (image, video, canvas)\r\n\r\n\t\t\t// use manually created mipmaps if available\r\n\t\t\t// if there are no manual mipmaps\r\n\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\r\n\r\n\t\t\tif ( mipmaps.length > 0 && isImagePowerOfTwo ) {\r\n\r\n\t\t\t\tfor ( var i = 0, il = mipmaps.length; i < il; i ++ ) {\r\n\r\n\t\t\t\t\tmipmap = mipmaps[ i ];\r\n\t\t\t\t\t_gl.texImage2D( _gl.TEXTURE_2D, i, glFormat, glFormat, glType, mipmap );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttexture.generateMipmaps = false;\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t_gl.texImage2D( _gl.TEXTURE_2D, 0, glFormat, glFormat, glType, texture.image );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( texture.generateMipmaps && isImagePowerOfTwo ) _gl.generateMipmap( _gl.TEXTURE_2D );\r\n\r\n\t\ttexture.needsUpdate = false;\r\n\r\n\t\tif ( texture.onUpdate ) texture.onUpdate();\r\n\r\n\t};\r\n\r\n\tthis.setTexture = function ( texture, slot ) {\r\n\r\n\t\t_gl.activeTexture( _gl.TEXTURE0 + slot );\r\n\r\n\t\tif ( texture.needsUpdate ) {\r\n\r\n\t\t\t_this.uploadTexture( texture );\r\n\r\n\t\t} else {\r\n\r\n\t\t\t_gl.bindTexture( _gl.TEXTURE_2D, texture.__webglTexture );\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tfunction clampToMaxSize ( image, maxSize ) {\r\n\r\n\t\tif ( image.width > maxSize || image.height > maxSize ) {\r\n\r\n\t\t\t// Warning: Scaling through the canvas will only work with images that use\r\n\t\t\t// premultiplied alpha.\r\n\r\n\t\t\tvar scale = maxSize / Math.max( image.width, image.height );\r\n\r\n\t\t\tvar canvas = document.createElement( 'canvas' );\r\n\t\t\tcanvas.width = Math.floor( image.width * scale );\r\n\t\t\tcanvas.height = Math.floor( image.height * scale );\r\n\r\n\t\t\tvar context = canvas.getContext( '2d' );\r\n\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height, 0, 0, canvas.width, canvas.height );\r\n\r\n\t\t\tconsole.log( 'THREE.WebGLRenderer:', image, 'is too big (' + image.width + 'x' + image.height + '). Resized to ' + canvas.width + 'x' + canvas.height + '.' );\r\n\r\n\t\t\treturn canvas;\r\n\r\n\t\t}\r\n\r\n\t\treturn image;\r\n\r\n\t}\r\n\r\n\tfunction setCubeTexture ( texture, slot ) {\r\n\r\n\t\tif ( texture.image.length === 6 ) {\r\n\r\n\t\t\tif ( texture.needsUpdate ) {\r\n\r\n\t\t\t\tif ( ! texture.image.__webglTextureCube ) {\r\n\r\n\t\t\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\r\n\r\n\t\t\t\t\ttexture.image.__webglTextureCube = _gl.createTexture();\r\n\r\n\t\t\t\t\t_this.info.memory.textures ++;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t_gl.activeTexture( _gl.TEXTURE0 + slot );\r\n\t\t\t\t_gl.bindTexture( _gl.TEXTURE_CUBE_MAP, texture.image.__webglTextureCube );\r\n\r\n\t\t\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );\r\n\r\n\t\t\t\tvar isCompressed = texture instanceof THREE.CompressedTexture;\r\n\t\t\t\tvar isDataTexture = texture.image[ 0 ] instanceof THREE.DataTexture;\r\n\r\n\t\t\t\tvar cubeImage = [];\r\n\r\n\t\t\t\tfor ( var i = 0; i < 6; i ++ ) {\r\n\r\n\t\t\t\t\tif ( _this.autoScaleCubemaps && ! isCompressed && ! isDataTexture ) {\r\n\r\n\t\t\t\t\t\tcubeImage[ i ] = clampToMaxSize( texture.image[ i ], _maxCubemapSize );\r\n\r\n\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\tcubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ];\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar image = cubeImage[ 0 ],\r\n\t\t\t\tisImagePowerOfTwo = THREE.Math.isPowerOfTwo( image.width ) && THREE.Math.isPowerOfTwo( image.height ),\r\n\t\t\t\tglFormat = paramThreeToGL( texture.format ),\r\n\t\t\t\tglType = paramThreeToGL( texture.type );\r\n\r\n\t\t\t\tsetTextureParameters( _gl.TEXTURE_CUBE_MAP, texture, isImagePowerOfTwo );\r\n\r\n\t\t\t\tfor ( var i = 0; i < 6; i ++ ) {\r\n\r\n\t\t\t\t\tif ( ! isCompressed ) {\r\n\r\n\t\t\t\t\t\tif ( isDataTexture ) {\r\n\r\n\t\t\t\t\t\t\t_gl.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data );\r\n\r\n\t\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\t\t_gl.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glFormat, glFormat, glType, cubeImage[ i ] );\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\tvar mipmap, mipmaps = cubeImage[ i ].mipmaps;\r\n\r\n\t\t\t\t\t\tfor ( var j = 0, jl = mipmaps.length; j < jl; j ++ ) {\r\n\r\n\t\t\t\t\t\t\tmipmap = mipmaps[ j ];\r\n\r\n\t\t\t\t\t\t\tif ( texture.format !== THREE.RGBAFormat && texture.format !== THREE.RGBFormat ) {\r\n\r\n\t\t\t\t\t\t\t\tif ( getCompressedTextureFormats().indexOf( glFormat ) > -1 ) {\r\n\r\n\t\t\t\t\t\t\t\t\t_gl.compressedTexImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glFormat, mipmap.width, mipmap.height, 0, mipmap.data );\r\n\r\n\t\t\t\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\t\t\t\tconsole.warn( \"Attempt to load unsupported compressed texture format\" );\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\t\t\t_gl.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( texture.generateMipmaps && isImagePowerOfTwo ) {\r\n\r\n\t\t\t\t\t_gl.generateMipmap( _gl.TEXTURE_CUBE_MAP );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttexture.needsUpdate = false;\r\n\r\n\t\t\t\tif ( texture.onUpdate ) texture.onUpdate();\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t_gl.activeTexture( _gl.TEXTURE0 + slot );\r\n\t\t\t\t_gl.bindTexture( _gl.TEXTURE_CUBE_MAP, texture.image.__webglTextureCube );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction setCubeTextureDynamic ( texture, slot ) {\r\n\r\n\t\t_gl.activeTexture( _gl.TEXTURE0 + slot );\r\n\t\t_gl.bindTexture( _gl.TEXTURE_CUBE_MAP, texture.__webglTexture );\r\n\r\n\t}\r\n\r\n\t// Render targets\r\n\r\n\tfunction setupFrameBuffer ( framebuffer, renderTarget, textureTarget ) {\r\n\r\n\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\r\n\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, textureTarget, renderTarget.__webglTexture, 0 );\r\n\r\n\t}\r\n\r\n\tfunction setupRenderBuffer ( renderbuffer, renderTarget ) {\r\n\r\n\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, renderbuffer );\r\n\r\n\t\tif ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) {\r\n\r\n\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.DEPTH_COMPONENT16, renderTarget.width, renderTarget.height );\r\n\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer );\r\n\r\n\t\t/* For some reason this is not working. Defaulting to RGBA4.\r\n\t\t} else if ( ! renderTarget.depthBuffer && renderTarget.stencilBuffer ) {\r\n\r\n\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.STENCIL_INDEX8, renderTarget.width, renderTarget.height );\r\n\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.STENCIL_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer );\r\n\t\t*/\r\n\t\t} else if ( renderTarget.depthBuffer && renderTarget.stencilBuffer ) {\r\n\r\n\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.DEPTH_STENCIL, renderTarget.width, renderTarget.height );\r\n\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer );\r\n\r\n\t\t} else {\r\n\r\n\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.RGBA4, renderTarget.width, renderTarget.height );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tthis.setRenderTarget = function ( renderTarget ) {\r\n\r\n\t\tvar isCube = ( renderTarget instanceof THREE.WebGLRenderTargetCube );\r\n\r\n\t\tif ( renderTarget && renderTarget.__webglFramebuffer === undefined ) {\r\n\r\n\t\t\tif ( renderTarget.depthBuffer === undefined ) renderTarget.depthBuffer = true;\r\n\t\t\tif ( renderTarget.stencilBuffer === undefined ) renderTarget.stencilBuffer = true;\r\n\r\n\t\t\trenderTarget.addEventListener( 'dispose', onRenderTargetDispose );\r\n\r\n\t\t\trenderTarget.__webglTexture = _gl.createTexture();\r\n\r\n\t\t\t_this.info.memory.textures ++;\r\n\r\n\t\t\t// Setup texture, create render and frame buffers\r\n\r\n\t\t\tvar isTargetPowerOfTwo = THREE.Math.isPowerOfTwo( renderTarget.width ) && THREE.Math.isPowerOfTwo( renderTarget.height ),\r\n\t\t\t\tglFormat = paramThreeToGL( renderTarget.format ),\r\n\t\t\t\tglType = paramThreeToGL( renderTarget.type );\r\n\r\n\t\t\tif ( isCube ) {\r\n\r\n\t\t\t\trenderTarget.__webglFramebuffer = [];\r\n\t\t\t\trenderTarget.__webglRenderbuffer = [];\r\n\r\n\t\t\t\t_gl.bindTexture( _gl.TEXTURE_CUBE_MAP, renderTarget.__webglTexture );\r\n\t\t\t\tsetTextureParameters( _gl.TEXTURE_CUBE_MAP, renderTarget, isTargetPowerOfTwo );\r\n\r\n\t\t\t\tfor ( var i = 0; i < 6; i ++ ) {\r\n\r\n\t\t\t\t\trenderTarget.__webglFramebuffer[ i ] = _gl.createFramebuffer();\r\n\t\t\t\t\trenderTarget.__webglRenderbuffer[ i ] = _gl.createRenderbuffer();\r\n\r\n\t\t\t\t\t_gl.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null );\r\n\r\n\t\t\t\t\tsetupFrameBuffer( renderTarget.__webglFramebuffer[ i ], renderTarget, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i );\r\n\t\t\t\t\tsetupRenderBuffer( renderTarget.__webglRenderbuffer[ i ], renderTarget );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( isTargetPowerOfTwo ) _gl.generateMipmap( _gl.TEXTURE_CUBE_MAP );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\trenderTarget.__webglFramebuffer = _gl.createFramebuffer();\r\n\r\n\t\t\t\tif ( renderTarget.shareDepthFrom ) {\r\n\r\n\t\t\t\t\trenderTarget.__webglRenderbuffer = renderTarget.shareDepthFrom.__webglRenderbuffer;\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\trenderTarget.__webglRenderbuffer = _gl.createRenderbuffer();\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t_gl.bindTexture( _gl.TEXTURE_2D, renderTarget.__webglTexture );\r\n\t\t\t\tsetTextureParameters( _gl.TEXTURE_2D, renderTarget, isTargetPowerOfTwo );\r\n\r\n\t\t\t\t_gl.texImage2D( _gl.TEXTURE_2D, 0, glFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null );\r\n\r\n\t\t\t\tsetupFrameBuffer( renderTarget.__webglFramebuffer, renderTarget, _gl.TEXTURE_2D );\r\n\r\n\t\t\t\tif ( renderTarget.shareDepthFrom ) {\r\n\r\n\t\t\t\t\tif ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) {\r\n\r\n\t\t\t\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.RENDERBUFFER, renderTarget.__webglRenderbuffer );\r\n\r\n\t\t\t\t\t} else if ( renderTarget.depthBuffer && renderTarget.stencilBuffer ) {\r\n\r\n\t\t\t\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.RENDERBUFFER, renderTarget.__webglRenderbuffer );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tsetupRenderBuffer( renderTarget.__webglRenderbuffer, renderTarget );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( isTargetPowerOfTwo ) _gl.generateMipmap( _gl.TEXTURE_2D );\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// Release everything\r\n\r\n\t\t\tif ( isCube ) {\r\n\r\n\t\t\t\t_gl.bindTexture( _gl.TEXTURE_CUBE_MAP, null );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t_gl.bindTexture( _gl.TEXTURE_2D, null );\r\n\r\n\t\t\t}\r\n\r\n\t\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, null );\r\n\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, null );\r\n\r\n\t\t}\r\n\r\n\t\tvar framebuffer, width, height, vx, vy;\r\n\r\n\t\tif ( renderTarget ) {\r\n\r\n\t\t\tif ( isCube ) {\r\n\r\n\t\t\t\tframebuffer = renderTarget.__webglFramebuffer[ renderTarget.activeCubeFace ];\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tframebuffer = renderTarget.__webglFramebuffer;\r\n\r\n\t\t\t}\r\n\r\n\t\t\twidth = renderTarget.width;\r\n\t\t\theight = renderTarget.height;\r\n\r\n\t\t\tvx = 0;\r\n\t\t\tvy = 0;\r\n\r\n\t\t} else {\r\n\r\n\t\t\tframebuffer = null;\r\n\r\n\t\t\twidth = _viewportWidth;\r\n\t\t\theight = _viewportHeight;\r\n\r\n\t\t\tvx = _viewportX;\r\n\t\t\tvy = _viewportY;\r\n\r\n\t\t}\r\n\r\n\t\tif ( framebuffer !== _currentFramebuffer ) {\r\n\r\n\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\r\n\t\t\t_gl.viewport( vx, vy, width, height );\r\n\r\n\t\t\t_currentFramebuffer = framebuffer;\r\n\r\n\t\t}\r\n\r\n\t\t_currentWidth = width;\r\n\t\t_currentHeight = height;\r\n\r\n\t};\r\n\r\n\tfunction updateRenderTargetMipmap ( renderTarget ) {\r\n\r\n\t\tif ( renderTarget instanceof THREE.WebGLRenderTargetCube ) {\r\n\r\n\t\t\t_gl.bindTexture( _gl.TEXTURE_CUBE_MAP, renderTarget.__webglTexture );\r\n\t\t\t_gl.generateMipmap( _gl.TEXTURE_CUBE_MAP );\r\n\t\t\t_gl.bindTexture( _gl.TEXTURE_CUBE_MAP, null );\r\n\r\n\t\t} else {\r\n\r\n\t\t\t_gl.bindTexture( _gl.TEXTURE_2D, renderTarget.__webglTexture );\r\n\t\t\t_gl.generateMipmap( _gl.TEXTURE_2D );\r\n\t\t\t_gl.bindTexture( _gl.TEXTURE_2D, null );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// Fallback filters for non-power-of-2 textures\r\n\r\n\tfunction filterFallback ( f ) {\r\n\r\n\t\tif ( f === THREE.NearestFilter || f === THREE.NearestMipMapNearestFilter || f === THREE.NearestMipMapLinearFilter ) {\r\n\r\n\t\t\treturn _gl.NEAREST;\r\n\r\n\t\t}\r\n\r\n\t\treturn _gl.LINEAR;\r\n\r\n\t}\r\n\r\n\t// Map three.js constants to WebGL constants\r\n\r\n\tfunction paramThreeToGL ( p ) {\r\n\r\n\t\tvar extension;\r\n\r\n\t\tif ( p === THREE.RepeatWrapping ) return _gl.REPEAT;\r\n\t\tif ( p === THREE.ClampToEdgeWrapping ) return _gl.CLAMP_TO_EDGE;\r\n\t\tif ( p === THREE.MirroredRepeatWrapping ) return _gl.MIRRORED_REPEAT;\r\n\r\n\t\tif ( p === THREE.NearestFilter ) return _gl.NEAREST;\r\n\t\tif ( p === THREE.NearestMipMapNearestFilter ) return _gl.NEAREST_MIPMAP_NEAREST;\r\n\t\tif ( p === THREE.NearestMipMapLinearFilter ) return _gl.NEAREST_MIPMAP_LINEAR;\r\n\r\n\t\tif ( p === THREE.LinearFilter ) return _gl.LINEAR;\r\n\t\tif ( p === THREE.LinearMipMapNearestFilter ) return _gl.LINEAR_MIPMAP_NEAREST;\r\n\t\tif ( p === THREE.LinearMipMapLinearFilter ) return _gl.LINEAR_MIPMAP_LINEAR;\r\n\r\n\t\tif ( p === THREE.UnsignedByteType ) return _gl.UNSIGNED_BYTE;\r\n\t\tif ( p === THREE.UnsignedShort4444Type ) return _gl.UNSIGNED_SHORT_4_4_4_4;\r\n\t\tif ( p === THREE.UnsignedShort5551Type ) return _gl.UNSIGNED_SHORT_5_5_5_1;\r\n\t\tif ( p === THREE.UnsignedShort565Type ) return _gl.UNSIGNED_SHORT_5_6_5;\r\n\r\n\t\tif ( p === THREE.ByteType ) return _gl.BYTE;\r\n\t\tif ( p === THREE.ShortType ) return _gl.SHORT;\r\n\t\tif ( p === THREE.UnsignedShortType ) return _gl.UNSIGNED_SHORT;\r\n\t\tif ( p === THREE.IntType ) return _gl.INT;\r\n\t\tif ( p === THREE.UnsignedIntType ) return _gl.UNSIGNED_INT;\r\n\t\tif ( p === THREE.FloatType ) return _gl.FLOAT;\r\n\r\n\t\tif ( p === THREE.AlphaFormat ) return _gl.ALPHA;\r\n\t\tif ( p === THREE.RGBFormat ) return _gl.RGB;\r\n\t\tif ( p === THREE.RGBAFormat ) return _gl.RGBA;\r\n\t\tif ( p === THREE.LuminanceFormat ) return _gl.LUMINANCE;\r\n\t\tif ( p === THREE.LuminanceAlphaFormat ) return _gl.LUMINANCE_ALPHA;\r\n\r\n\t\tif ( p === THREE.AddEquation ) return _gl.FUNC_ADD;\r\n\t\tif ( p === THREE.SubtractEquation ) return _gl.FUNC_SUBTRACT;\r\n\t\tif ( p === THREE.ReverseSubtractEquation ) return _gl.FUNC_REVERSE_SUBTRACT;\r\n\r\n\t\tif ( p === THREE.ZeroFactor ) return _gl.ZERO;\r\n\t\tif ( p === THREE.OneFactor ) return _gl.ONE;\r\n\t\tif ( p === THREE.SrcColorFactor ) return _gl.SRC_COLOR;\r\n\t\tif ( p === THREE.OneMinusSrcColorFactor ) return _gl.ONE_MINUS_SRC_COLOR;\r\n\t\tif ( p === THREE.SrcAlphaFactor ) return _gl.SRC_ALPHA;\r\n\t\tif ( p === THREE.OneMinusSrcAlphaFactor ) return _gl.ONE_MINUS_SRC_ALPHA;\r\n\t\tif ( p === THREE.DstAlphaFactor ) return _gl.DST_ALPHA;\r\n\t\tif ( p === THREE.OneMinusDstAlphaFactor ) return _gl.ONE_MINUS_DST_ALPHA;\r\n\r\n\t\tif ( p === THREE.DstColorFactor ) return _gl.DST_COLOR;\r\n\t\tif ( p === THREE.OneMinusDstColorFactor ) return _gl.ONE_MINUS_DST_COLOR;\r\n\t\tif ( p === THREE.SrcAlphaSaturateFactor ) return _gl.SRC_ALPHA_SATURATE;\r\n\r\n\t\textension = extensions.get( 'WEBGL_compressed_texture_s3tc' );\r\n\r\n\t\tif ( extension !== null ) {\r\n\r\n\t\t\tif ( p === THREE.RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT;\r\n\t\t\tif ( p === THREE.RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT;\r\n\t\t\tif ( p === THREE.RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT;\r\n\t\t\tif ( p === THREE.RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT;\r\n\r\n\t\t}\r\n\r\n\t\textension = extensions.get( 'WEBGL_compressed_texture_pvrtc' );\r\n\r\n\t\tif ( extension !== null ) {\r\n\r\n\t\t\tif ( p === THREE.RGB_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;\r\n\t\t\tif ( p === THREE.RGB_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;\r\n\t\t\tif ( p === THREE.RGBA_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;\r\n\t\t\tif ( p === THREE.RGBA_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;\r\n\r\n\t\t}\r\n\r\n\t\textension = extensions.get( 'EXT_blend_minmax' );\r\n\r\n\t\tif ( extension !== null ) {\r\n\r\n\t\t\tif ( p === THREE.MinEquation ) return extension.MIN_EXT;\r\n\t\t\tif ( p === THREE.MaxEquation ) return extension.MAX_EXT;\r\n\r\n\t\t}\r\n\r\n\t\treturn 0;\r\n\r\n\t}\r\n\r\n\t// Allocations\r\n\r\n\tfunction allocateBones ( object ) {\r\n\r\n\t\tif ( _supportsBoneTextures && object && object.skeleton && object.skeleton.useVertexTexture ) {\r\n\r\n\t\t\treturn 1024;\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// default for when object is not specified\r\n\t\t\t// ( for example when prebuilding shader\r\n\t\t\t// to be used with multiple objects )\r\n\t\t\t//\r\n\t\t\t// - leave some extra space for other uniforms\r\n\t\t\t// - limit here is ANGLE's 254 max uniform vectors\r\n\t\t\t// (up to 54 should be safe)\r\n\r\n\t\t\tvar nVertexUniforms = _gl.getParameter( _gl.MAX_VERTEX_UNIFORM_VECTORS );\r\n\t\t\tvar nVertexMatrices = Math.floor( ( nVertexUniforms - 20 ) / 4 );\r\n\r\n\t\t\tvar maxBones = nVertexMatrices;\r\n\r\n\t\t\tif ( object !== undefined && object instanceof THREE.SkinnedMesh ) {\r\n\r\n\t\t\t\tmaxBones = Math.min( object.skeleton.bones.length, maxBones );\r\n\r\n\t\t\t\tif ( maxBones < object.skeleton.bones.length ) {\r\n\r\n\t\t\t\t\tconsole.warn( 'WebGLRenderer: too many bones - ' + object.skeleton.bones.length + ', this GPU supports just ' + maxBones + ' (try OpenGL instead of ANGLE)' );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn maxBones;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction allocateLights( lights ) {\r\n\r\n\t\tvar dirLights = 0;\r\n\t\tvar pointLights = 0;\r\n\t\tvar spotLights = 0;\r\n\t\tvar hemiLights = 0;\r\n\r\n\t\tfor ( var l = 0, ll = lights.length; l < ll; l ++ ) {\r\n\r\n\t\t\tvar light = lights[ l ];\r\n\r\n\t\t\tif ( light.onlyShadow || light.visible === false ) continue;\r\n\r\n\t\t\tif ( light instanceof THREE.DirectionalLight ) dirLights ++;\r\n\t\t\tif ( light instanceof THREE.PointLight ) pointLights ++;\r\n\t\t\tif ( light instanceof THREE.SpotLight ) spotLights ++;\r\n\t\t\tif ( light instanceof THREE.HemisphereLight ) hemiLights ++;\r\n\r\n\t\t}\r\n\r\n\t\treturn { 'directional': dirLights, 'point': pointLights, 'spot': spotLights, 'hemi': hemiLights };\r\n\r\n\t}\r\n\r\n\tfunction allocateShadows( lights ) {\r\n\r\n\t\tvar maxShadows = 0;\r\n\r\n\t\tfor ( var l = 0, ll = lights.length; l < ll; l ++ ) {\r\n\r\n\t\t\tvar light = lights[ l ];\r\n\r\n\t\t\tif ( ! light.castShadow ) continue;\r\n\r\n\t\t\tif ( light instanceof THREE.SpotLight ) maxShadows ++;\r\n\t\t\tif ( light instanceof THREE.DirectionalLight && ! light.shadowCascade ) maxShadows ++;\r\n\r\n\t\t}\r\n\r\n\t\treturn maxShadows;\r\n\r\n\t}\r\n\r\n\t// DEPRECATED\r\n\t\r\n\tthis.initMaterial = function () {\r\n\r\n\t\tconsole.warn( 'THREE.WebGLRenderer: .initMaterial() has been removed.' );\r\n\r\n\t};\r\n\r\n\tthis.addPrePlugin = function () {\r\n\r\n\t\tconsole.warn( 'THREE.WebGLRenderer: .addPrePlugin() has been removed.' );\r\n\r\n\t};\r\n\r\n\tthis.addPostPlugin = function () {\r\n\r\n\t\tconsole.warn( 'THREE.WebGLRenderer: .addPostPlugin() has been removed.' );\r\n\r\n\t};\r\n\r\n\tthis.updateShadowMap = function () {\r\n\r\n\t\tconsole.warn( 'THREE.WebGLRenderer: .updateShadowMap() has been removed.' );\r\n\r\n\t};\r\n\r\n};\r\n\r\n// File:src/renderers/WebGLRenderTarget.js\r\n\r\n/**\r\n * @author szimek / https://github.com/szimek/\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.WebGLRenderTarget = function ( width, height, options ) {\r\n\r\n\tthis.width = width;\r\n\tthis.height = height;\r\n\r\n\toptions = options || {};\r\n\r\n\tthis.wrapS = options.wrapS !== undefined ? options.wrapS : THREE.ClampToEdgeWrapping;\r\n\tthis.wrapT = options.wrapT !== undefined ? options.wrapT : THREE.ClampToEdgeWrapping;\r\n\r\n\tthis.magFilter = options.magFilter !== undefined ? options.magFilter : THREE.LinearFilter;\r\n\tthis.minFilter = options.minFilter !== undefined ? options.minFilter : THREE.LinearMipMapLinearFilter;\r\n\r\n\tthis.anisotropy = options.anisotropy !== undefined ? options.anisotropy : 1;\r\n\r\n\tthis.offset = new THREE.Vector2( 0, 0 );\r\n\tthis.repeat = new THREE.Vector2( 1, 1 );\r\n\r\n\tthis.format = options.format !== undefined ? options.format : THREE.RGBAFormat;\r\n\tthis.type = options.type !== undefined ? options.type : THREE.UnsignedByteType;\r\n\r\n\tthis.depthBuffer = options.depthBuffer !== undefined ? options.depthBuffer : true;\r\n\tthis.stencilBuffer = options.stencilBuffer !== undefined ? options.stencilBuffer : true;\r\n\r\n\tthis.generateMipmaps = true;\r\n\r\n\tthis.shareDepthFrom = null;\r\n\r\n};\r\n\r\nTHREE.WebGLRenderTarget.prototype = {\r\n\r\n\tconstructor: THREE.WebGLRenderTarget,\r\n\r\n\tsetSize: function ( width, height ) {\r\n\r\n\t\tthis.width = width;\r\n\t\tthis.height = height;\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\tvar tmp = new THREE.WebGLRenderTarget( this.width, this.height );\r\n\r\n\t\ttmp.wrapS = this.wrapS;\r\n\t\ttmp.wrapT = this.wrapT;\r\n\r\n\t\ttmp.magFilter = this.magFilter;\r\n\t\ttmp.minFilter = this.minFilter;\r\n\r\n\t\ttmp.anisotropy = this.anisotropy;\r\n\r\n\t\ttmp.offset.copy( this.offset );\r\n\t\ttmp.repeat.copy( this.repeat );\r\n\r\n\t\ttmp.format = this.format;\r\n\t\ttmp.type = this.type;\r\n\r\n\t\ttmp.depthBuffer = this.depthBuffer;\r\n\t\ttmp.stencilBuffer = this.stencilBuffer;\r\n\r\n\t\ttmp.generateMipmaps = this.generateMipmaps;\r\n\r\n\t\ttmp.shareDepthFrom = this.shareDepthFrom;\r\n\r\n\t\treturn tmp;\r\n\r\n\t},\r\n\r\n\tdispose: function () {\r\n\r\n\t\tthis.dispatchEvent( { type: 'dispose' } );\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.EventDispatcher.prototype.apply( THREE.WebGLRenderTarget.prototype );\r\n\r\n// File:src/renderers/WebGLRenderTargetCube.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com\r\n */\r\n\r\nTHREE.WebGLRenderTargetCube = function ( width, height, options ) {\r\n\r\n\tTHREE.WebGLRenderTarget.call( this, width, height, options );\r\n\r\n\tthis.activeCubeFace = 0; // PX 0, NX 1, PY 2, NY 3, PZ 4, NZ 5\r\n\r\n};\r\n\r\nTHREE.WebGLRenderTargetCube.prototype = Object.create( THREE.WebGLRenderTarget.prototype );\r\n\r\n// File:src/renderers/webgl/WebGLExtensions.js\r\n\r\nTHREE.WebGLExtensions = function ( gl ) {\r\n\r\n\tvar extensions = {};\r\n\r\n\tthis.get = function ( name ) {\r\n\r\n\t\tif ( extensions[ name ] !== undefined ) {\r\n\r\n\t\t\treturn extensions[ name ];\r\n\r\n\t\t}\r\n\r\n\t\tvar extension;\r\n\r\n\t\tswitch ( name ) {\r\n\t\t\r\n\t\t\tcase 'OES_texture_float':\r\n\t\t\t\textension = gl.getExtension( 'OES_texture_float' );\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'OES_texture_float_linear':\r\n\t\t\t\textension = gl.getExtension( 'OES_texture_float_linear' );\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'OES_standard_derivatives':\r\n\t\t\t\textension = gl.getExtension( 'OES_standard_derivatives' );\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'EXT_texture_filter_anisotropic':\r\n\t\t\t\textension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' );\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'WEBGL_compressed_texture_s3tc':\r\n\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' );\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'WEBGL_compressed_texture_pvrtc':\r\n\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' );\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'OES_element_index_uint':\r\n\t\t\t\textension = gl.getExtension( 'OES_element_index_uint' );\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'EXT_blend_minmax':\r\n\t\t\t\textension = gl.getExtension( 'EXT_blend_minmax' );\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'EXT_frag_depth':\r\n\t\t\t\textension = gl.getExtension( 'EXT_frag_depth' );\r\n\t\t\t\tbreak;\r\n\r\n\t\t}\r\n\r\n\t\tif ( extension === null ) {\r\n\r\n\t\t\tconsole.log( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' );\r\n\r\n\t\t}\r\n\r\n\t\textensions[ name ] = extension;\r\n\r\n\t\treturn extension;\r\n\r\n\t};\r\n\r\n};\r\n\r\n// File:src/renderers/webgl/WebGLProgram.js\r\n\r\nTHREE.WebGLProgram = ( function () {\r\n\r\n\tvar programIdCount = 0;\r\n\r\n\tvar generateDefines = function ( defines ) {\r\n\r\n\t\tvar value, chunk, chunks = [];\r\n\r\n\t\tfor ( var d in defines ) {\r\n\r\n\t\t\tvalue = defines[ d ];\r\n\t\t\tif ( value === false ) continue;\r\n\r\n\t\t\tchunk = \"#define \" + d + \" \" + value;\r\n\t\t\tchunks.push( chunk );\r\n\r\n\t\t}\r\n\r\n\t\treturn chunks.join( \"\\n\" );\r\n\r\n\t};\r\n\r\n\tvar cacheUniformLocations = function ( gl, program, identifiers ) {\r\n\r\n\t\tvar uniforms = {};\r\n\r\n\t\tfor ( var i = 0, l = identifiers.length; i < l; i ++ ) {\r\n\r\n\t\t\tvar id = identifiers[ i ];\r\n\t\t\tuniforms[ id ] = gl.getUniformLocation( program, id );\r\n\r\n\t\t}\r\n\r\n\t\treturn uniforms;\r\n\r\n\t};\r\n\r\n\tvar cacheAttributeLocations = function ( gl, program, identifiers ) {\r\n\r\n\t\tvar attributes = {};\r\n\r\n\t\tfor ( var i = 0, l = identifiers.length; i < l; i ++ ) {\r\n\r\n\t\t\tvar id = identifiers[ i ];\r\n\t\t\tattributes[ id ] = gl.getAttribLocation( program, id );\r\n\r\n\t\t}\r\n\r\n\t\treturn attributes;\r\n\r\n\t};\r\n\r\n\treturn function ( renderer, code, material, parameters ) {\r\n\r\n\t\tvar _this = renderer;\r\n\t\tvar _gl = _this.context;\r\n\r\n\t\tvar defines = material.defines;\r\n\t\tvar uniforms = material.__webglShader.uniforms;\r\n\t\tvar attributes = material.attributes;\r\n\r\n\t\tvar vertexShader = material.__webglShader.vertexShader;\r\n\t\tvar fragmentShader = material.__webglShader.fragmentShader;\r\n\r\n\t\tvar index0AttributeName = material.index0AttributeName;\r\n\r\n\t\tif ( index0AttributeName === undefined && parameters.morphTargets === true ) {\r\n\r\n\t\t\t// programs with morphTargets displace position out of attribute 0\r\n\r\n\t\t\tindex0AttributeName = 'position';\r\n\r\n\t\t}\r\n\r\n\t\tvar shadowMapTypeDefine = \"SHADOWMAP_TYPE_BASIC\";\r\n\r\n\t\tif ( parameters.shadowMapType === THREE.PCFShadowMap ) {\r\n\r\n\t\t\tshadowMapTypeDefine = \"SHADOWMAP_TYPE_PCF\";\r\n\r\n\t\t} else if ( parameters.shadowMapType === THREE.PCFSoftShadowMap ) {\r\n\r\n\t\t\tshadowMapTypeDefine = \"SHADOWMAP_TYPE_PCF_SOFT\";\r\n\r\n\t\t}\r\n\r\n\t\t// console.log( \"building new program \" );\r\n\r\n\t\t//\r\n\r\n\t\tvar customDefines = generateDefines( defines );\r\n\r\n\t\t//\r\n\r\n\t\tvar program = _gl.createProgram();\r\n\r\n\t\tvar prefix_vertex, prefix_fragment;\r\n\r\n\t\tif ( material instanceof THREE.RawShaderMaterial ) {\r\n\r\n\t\t\tprefix_vertex = '';\r\n\t\t\tprefix_fragment = '';\r\n\r\n\t\t} else {\r\n\r\n\t\t\tprefix_vertex = [\r\n\r\n\t\t\t\t\"precision \" + parameters.precision + \" float;\",\r\n\t\t\t\t\"precision \" + parameters.precision + \" int;\",\r\n\r\n\t\t\t\tcustomDefines,\r\n\r\n\t\t\t\tparameters.supportsVertexTextures ? \"#define VERTEX_TEXTURES\" : \"\",\r\n\r\n\t\t\t\t_this.gammaInput ? \"#define GAMMA_INPUT\" : \"\",\r\n\t\t\t\t_this.gammaOutput ? \"#define GAMMA_OUTPUT\" : \"\",\r\n\r\n\t\t\t\t\"#define MAX_DIR_LIGHTS \" + parameters.maxDirLights,\r\n\t\t\t\t\"#define MAX_POINT_LIGHTS \" + parameters.maxPointLights,\r\n\t\t\t\t\"#define MAX_SPOT_LIGHTS \" + parameters.maxSpotLights,\r\n\t\t\t\t\"#define MAX_HEMI_LIGHTS \" + parameters.maxHemiLights,\r\n\r\n\t\t\t\t\"#define MAX_SHADOWS \" + parameters.maxShadows,\r\n\r\n\t\t\t\t\"#define MAX_BONES \" + parameters.maxBones,\r\n\r\n\t\t\t\tparameters.map ? \"#define USE_MAP\" : \"\",\r\n\t\t\t\tparameters.envMap ? \"#define USE_ENVMAP\" : \"\",\r\n\t\t\t\tparameters.lightMap ? \"#define USE_LIGHTMAP\" : \"\",\r\n\t\t\t\tparameters.bumpMap ? \"#define USE_BUMPMAP\" : \"\",\r\n\t\t\t\tparameters.normalMap ? \"#define USE_NORMALMAP\" : \"\",\r\n\t\t\t\tparameters.specularMap ? \"#define USE_SPECULARMAP\" : \"\",\r\n\t\t\t\tparameters.alphaMap ? \"#define USE_ALPHAMAP\" : \"\",\r\n\t\t\t\tparameters.vertexColors ? \"#define USE_COLOR\" : \"\",\r\n\r\n\t\t\t\tparameters.skinning ? \"#define USE_SKINNING\" : \"\",\r\n\t\t\t\tparameters.useVertexTexture ? \"#define BONE_TEXTURE\" : \"\",\r\n\r\n\t\t\t\tparameters.morphTargets ? \"#define USE_MORPHTARGETS\" : \"\",\r\n\t\t\t\tparameters.morphNormals ? \"#define USE_MORPHNORMALS\" : \"\",\r\n\t\t\t\tparameters.wrapAround ? \"#define WRAP_AROUND\" : \"\",\r\n\t\t\t\tparameters.doubleSided ? \"#define DOUBLE_SIDED\" : \"\",\r\n\t\t\t\tparameters.flipSided ? \"#define FLIP_SIDED\" : \"\",\r\n\r\n\t\t\t\tparameters.shadowMapEnabled ? \"#define USE_SHADOWMAP\" : \"\",\r\n\t\t\t\tparameters.shadowMapEnabled ? \"#define \" + shadowMapTypeDefine : \"\",\r\n\t\t\t\tparameters.shadowMapDebug ? \"#define SHADOWMAP_DEBUG\" : \"\",\r\n\t\t\t\tparameters.shadowMapCascade ? \"#define SHADOWMAP_CASCADE\" : \"\",\r\n\r\n\t\t\t\tparameters.sizeAttenuation ? \"#define USE_SIZEATTENUATION\" : \"\",\r\n\r\n\t\t\t\tparameters.logarithmicDepthBuffer ? \"#define USE_LOGDEPTHBUF\" : \"\",\r\n\t\t\t\t//_this._glExtensionFragDepth ? \"#define USE_LOGDEPTHBUF_EXT\" : \"\",\r\n\r\n\r\n\t\t\t\t\"uniform mat4 modelMatrix;\",\r\n\t\t\t\t\"uniform mat4 modelViewMatrix;\",\r\n\t\t\t\t\"uniform mat4 projectionMatrix;\",\r\n\t\t\t\t\"uniform mat4 viewMatrix;\",\r\n\t\t\t\t\"uniform mat3 normalMatrix;\",\r\n\t\t\t\t\"uniform vec3 cameraPosition;\",\r\n\r\n\t\t\t\t\"attribute vec3 position;\",\r\n\t\t\t\t\"attribute vec3 normal;\",\r\n\t\t\t\t\"attribute vec2 uv;\",\r\n\t\t\t\t\"attribute vec2 uv2;\",\r\n\r\n\t\t\t\t\"#ifdef USE_COLOR\",\r\n\r\n\t\t\t\t\"\tattribute vec3 color;\",\r\n\r\n\t\t\t\t\"#endif\",\r\n\r\n\t\t\t\t\"#ifdef USE_MORPHTARGETS\",\r\n\r\n\t\t\t\t\"\tattribute vec3 morphTarget0;\",\r\n\t\t\t\t\"\tattribute vec3 morphTarget1;\",\r\n\t\t\t\t\"\tattribute vec3 morphTarget2;\",\r\n\t\t\t\t\"\tattribute vec3 morphTarget3;\",\r\n\r\n\t\t\t\t\"\t#ifdef USE_MORPHNORMALS\",\r\n\r\n\t\t\t\t\"\t\tattribute vec3 morphNormal0;\",\r\n\t\t\t\t\"\t\tattribute vec3 morphNormal1;\",\r\n\t\t\t\t\"\t\tattribute vec3 morphNormal2;\",\r\n\t\t\t\t\"\t\tattribute vec3 morphNormal3;\",\r\n\r\n\t\t\t\t\"\t#else\",\r\n\r\n\t\t\t\t\"\t\tattribute vec3 morphTarget4;\",\r\n\t\t\t\t\"\t\tattribute vec3 morphTarget5;\",\r\n\t\t\t\t\"\t\tattribute vec3 morphTarget6;\",\r\n\t\t\t\t\"\t\tattribute vec3 morphTarget7;\",\r\n\r\n\t\t\t\t\"\t#endif\",\r\n\r\n\t\t\t\t\"#endif\",\r\n\r\n\t\t\t\t\"#ifdef USE_SKINNING\",\r\n\r\n\t\t\t\t\"\tattribute vec4 skinIndex;\",\r\n\t\t\t\t\"\tattribute vec4 skinWeight;\",\r\n\r\n\t\t\t\t\"#endif\",\r\n\r\n\t\t\t\t\"\"\r\n\r\n\t\t\t].join( '\\n' );\r\n\r\n\t\t\tprefix_fragment = [\r\n\r\n\t\t\t\t\"precision \" + parameters.precision + \" float;\",\r\n\t\t\t\t\"precision \" + parameters.precision + \" int;\",\r\n\r\n\t\t\t\t( parameters.bumpMap || parameters.normalMap ) ? \"#extension GL_OES_standard_derivatives : enable\" : \"\",\r\n\r\n\t\t\t\tcustomDefines,\r\n\r\n\t\t\t\t\"#define MAX_DIR_LIGHTS \" + parameters.maxDirLights,\r\n\t\t\t\t\"#define MAX_POINT_LIGHTS \" + parameters.maxPointLights,\r\n\t\t\t\t\"#define MAX_SPOT_LIGHTS \" + parameters.maxSpotLights,\r\n\t\t\t\t\"#define MAX_HEMI_LIGHTS \" + parameters.maxHemiLights,\r\n\r\n\t\t\t\t\"#define MAX_SHADOWS \" + parameters.maxShadows,\r\n\r\n\t\t\t\tparameters.alphaTest ? \"#define ALPHATEST \" + parameters.alphaTest: \"\",\r\n\r\n\t\t\t\t_this.gammaInput ? \"#define GAMMA_INPUT\" : \"\",\r\n\t\t\t\t_this.gammaOutput ? \"#define GAMMA_OUTPUT\" : \"\",\r\n\r\n\t\t\t\t( parameters.useFog && parameters.fog ) ? \"#define USE_FOG\" : \"\",\r\n\t\t\t\t( parameters.useFog && parameters.fogExp ) ? \"#define FOG_EXP2\" : \"\",\r\n\r\n\t\t\t\tparameters.map ? \"#define USE_MAP\" : \"\",\r\n\t\t\t\tparameters.envMap ? \"#define USE_ENVMAP\" : \"\",\r\n\t\t\t\tparameters.lightMap ? \"#define USE_LIGHTMAP\" : \"\",\r\n\t\t\t\tparameters.bumpMap ? \"#define USE_BUMPMAP\" : \"\",\r\n\t\t\t\tparameters.normalMap ? \"#define USE_NORMALMAP\" : \"\",\r\n\t\t\t\tparameters.specularMap ? \"#define USE_SPECULARMAP\" : \"\",\r\n\t\t\t\tparameters.alphaMap ? \"#define USE_ALPHAMAP\" : \"\",\r\n\t\t\t\tparameters.vertexColors ? \"#define USE_COLOR\" : \"\",\r\n\r\n\t\t\t\tparameters.metal ? \"#define METAL\" : \"\",\r\n\t\t\t\tparameters.wrapAround ? \"#define WRAP_AROUND\" : \"\",\r\n\t\t\t\tparameters.doubleSided ? \"#define DOUBLE_SIDED\" : \"\",\r\n\t\t\t\tparameters.flipSided ? \"#define FLIP_SIDED\" : \"\",\r\n\r\n\t\t\t\tparameters.shadowMapEnabled ? \"#define USE_SHADOWMAP\" : \"\",\r\n\t\t\t\tparameters.shadowMapEnabled ? \"#define \" + shadowMapTypeDefine : \"\",\r\n\t\t\t\tparameters.shadowMapDebug ? \"#define SHADOWMAP_DEBUG\" : \"\",\r\n\t\t\t\tparameters.shadowMapCascade ? \"#define SHADOWMAP_CASCADE\" : \"\",\r\n\r\n\t\t\t\tparameters.logarithmicDepthBuffer ? \"#define USE_LOGDEPTHBUF\" : \"\",\r\n\t\t\t\t//_this._glExtensionFragDepth ? \"#define USE_LOGDEPTHBUF_EXT\" : \"\",\r\n\r\n\t\t\t\t\"uniform mat4 viewMatrix;\",\r\n\t\t\t\t\"uniform vec3 cameraPosition;\",\r\n\t\t\t\t\"\"\r\n\r\n\t\t\t].join( '\\n' );\r\n\r\n\t\t}\r\n\r\n\t\tvar glVertexShader = new THREE.WebGLShader( _gl, _gl.VERTEX_SHADER, prefix_vertex + vertexShader );\r\n\t\tvar glFragmentShader = new THREE.WebGLShader( _gl, _gl.FRAGMENT_SHADER, prefix_fragment + fragmentShader );\r\n\r\n\t\t_gl.attachShader( program, glVertexShader );\r\n\t\t_gl.attachShader( program, glFragmentShader );\r\n\r\n\t\tif ( index0AttributeName !== undefined ) {\r\n\r\n\t\t\t// Force a particular attribute to index 0.\r\n\t\t\t// because potentially expensive emulation is done by browser if attribute 0 is disabled.\r\n\t\t\t// And, color, for example is often automatically bound to index 0 so disabling it\r\n\r\n\t\t\t_gl.bindAttribLocation( program, 0, index0AttributeName );\r\n\r\n\t\t}\r\n\r\n\t\t_gl.linkProgram( program );\r\n\r\n\t\tif ( _gl.getProgramParameter( program, _gl.LINK_STATUS ) === false ) {\r\n\r\n\t\t\tconsole.error( 'THREE.WebGLProgram: Could not initialise shader.' );\r\n\t\t\tconsole.error( 'gl.VALIDATE_STATUS', _gl.getProgramParameter( program, _gl.VALIDATE_STATUS ) );\r\n\t\t\tconsole.error( 'gl.getError()', _gl.getError() );\r\n\r\n\t\t}\r\n\r\n\t\tif ( _gl.getProgramInfoLog( program ) !== '' ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.WebGLProgram: gl.getProgramInfoLog()', _gl.getProgramInfoLog( program ) );\r\n\r\n\t\t}\r\n\r\n\t\t// clean up\r\n\r\n\t\t_gl.deleteShader( glVertexShader );\r\n\t\t_gl.deleteShader( glFragmentShader );\r\n\r\n\t\t// cache uniform locations\r\n\r\n\t\tvar identifiers = [\r\n\r\n\t\t\t'viewMatrix', 'modelViewMatrix', 'projectionMatrix', 'normalMatrix', 'modelMatrix', 'cameraPosition', 'morphTargetInfluences', 'bindMatrix', 'bindMatrixInverse'\r\n\r\n\t\t];\r\n\r\n\t\tif ( parameters.useVertexTexture ) {\r\n\r\n\t\t\tidentifiers.push( 'boneTexture' );\r\n\t\t\tidentifiers.push( 'boneTextureWidth' );\r\n\t\t\tidentifiers.push( 'boneTextureHeight' );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tidentifiers.push( 'boneGlobalMatrices' );\r\n\r\n\t\t}\r\n\r\n\t\tif ( parameters.logarithmicDepthBuffer ) {\r\n\r\n\t\t\tidentifiers.push('logDepthBufFC');\r\n\r\n\t\t}\r\n\r\n\r\n\t\tfor ( var u in uniforms ) {\r\n\r\n\t\t\tidentifiers.push( u );\r\n\r\n\t\t}\r\n\r\n\t\tthis.uniforms = cacheUniformLocations( _gl, program, identifiers );\r\n\r\n\t\t// cache attributes locations\r\n\r\n\t\tidentifiers = [\r\n\r\n\t\t\t\"position\", \"normal\", \"uv\", \"uv2\", \"tangent\", \"color\",\r\n\t\t\t\"skinIndex\", \"skinWeight\", \"lineDistance\"\r\n\r\n\t\t];\r\n\r\n\t\tfor ( var i = 0; i < parameters.maxMorphTargets; i ++ ) {\r\n\r\n\t\t\tidentifiers.push( \"morphTarget\" + i );\r\n\r\n\t\t}\r\n\r\n\t\tfor ( var i = 0; i < parameters.maxMorphNormals; i ++ ) {\r\n\r\n\t\t\tidentifiers.push( \"morphNormal\" + i );\r\n\r\n\t\t}\r\n\r\n\t\tfor ( var a in attributes ) {\r\n\r\n\t\t\tidentifiers.push( a );\r\n\r\n\t\t}\r\n\r\n\t\tthis.attributes = cacheAttributeLocations( _gl, program, identifiers );\r\n\t\tthis.attributesKeys = Object.keys( this.attributes );\r\n\r\n\t\t//\r\n\r\n\t\tthis.id = programIdCount ++;\r\n\t\tthis.code = code;\r\n\t\tthis.usedTimes = 1;\r\n\t\tthis.program = program;\r\n\t\tthis.vertexShader = glVertexShader;\r\n\t\tthis.fragmentShader = glFragmentShader;\r\n\r\n\t\treturn this;\r\n\r\n\t};\r\n\r\n} )();\r\n\r\n// File:src/renderers/webgl/WebGLShader.js\r\n\r\nTHREE.WebGLShader = ( function () {\r\n\r\n\tvar addLineNumbers = function ( string ) {\r\n\r\n\t\tvar lines = string.split( '\\n' );\r\n\r\n\t\tfor ( var i = 0; i < lines.length; i ++ ) {\r\n\r\n\t\t\tlines[ i ] = ( i + 1 ) + ': ' + lines[ i ];\r\n\r\n\t\t}\r\n\r\n\t\treturn lines.join( '\\n' );\r\n\r\n\t};\r\n\r\n\treturn function ( gl, type, string ) {\r\n\r\n\t\tvar shader = gl.createShader( type ); \r\n\r\n\t\tgl.shaderSource( shader, string );\r\n\t\tgl.compileShader( shader );\r\n\r\n\t\tif ( gl.getShaderParameter( shader, gl.COMPILE_STATUS ) === false ) {\r\n\r\n\t\t\tconsole.error( 'THREE.WebGLShader: Shader couldn\\'t compile.' );\r\n\r\n\t\t}\r\n\r\n\t\tif ( gl.getShaderInfoLog( shader ) !== '' ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.WebGLShader: gl.getShaderInfoLog()', gl.getShaderInfoLog( shader ) );\r\n\t\t\tconsole.warn( addLineNumbers( string ) );\r\n\r\n\t\t}\r\n\r\n\t\t// --enable-privileged-webgl-extension\r\n\t\t// console.log( type, gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) );\r\n\r\n\t\treturn shader;\r\n\r\n\t};\r\n\r\n} )();\r\n\r\n// File:src/renderers/webgl/plugins/LensFlarePlugin.js\r\n\r\n/**\r\n * @author mikael emtinger / http://gomo.se/\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.LensFlarePlugin = function ( renderer, flares ) {\r\n\r\n\tvar gl = renderer.context;\r\n\r\n\tvar vertexBuffer, elementBuffer;\r\n\tvar program, attributes, uniforms;\r\n\tvar hasVertexTexture;\r\n\r\n\tvar tempTexture, occlusionTexture;\r\n\r\n\tvar init = function () {\r\n\r\n\t\tvar vertices = new Float32Array( [\r\n\t\t\t-1, -1, 0, 0,\r\n\t\t\t 1, -1, 1, 0,\r\n\t\t\t 1, 1, 1, 1,\r\n\t\t\t-1, 1, 0, 1\r\n\t\t] );\r\n\r\n\t\tvar faces = new Uint16Array( [\r\n\t\t\t0, 1, 2,\r\n\t\t\t0, 2, 3\r\n\t\t] );\r\n\r\n\t\t// buffers\r\n\r\n\t\tvertexBuffer = gl.createBuffer();\r\n\t\telementBuffer = gl.createBuffer();\r\n\r\n\t\tgl.bindBuffer( gl.ARRAY_BUFFER, vertexBuffer );\r\n\t\tgl.bufferData( gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW );\r\n\r\n\t\tgl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, elementBuffer );\r\n\t\tgl.bufferData( gl.ELEMENT_ARRAY_BUFFER, faces, gl.STATIC_DRAW );\r\n\r\n\t\t// textures\r\n\r\n\t\ttempTexture = gl.createTexture();\r\n\t\tocclusionTexture = gl.createTexture();\r\n\r\n\t\tgl.bindTexture( gl.TEXTURE_2D, tempTexture );\r\n\t\tgl.texImage2D( gl.TEXTURE_2D, 0, gl.RGB, 16, 16, 0, gl.RGB, gl.UNSIGNED_BYTE, null );\r\n\t\tgl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE );\r\n\t\tgl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE );\r\n\t\tgl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST );\r\n\t\tgl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST );\r\n\r\n\t\tgl.bindTexture( gl.TEXTURE_2D, occlusionTexture );\r\n\t\tgl.texImage2D( gl.TEXTURE_2D, 0, gl.RGBA, 16, 16, 0, gl.RGBA, gl.UNSIGNED_BYTE, null );\r\n\t\tgl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE );\r\n\t\tgl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE );\r\n\t\tgl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST );\r\n\t\tgl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST );\r\n\r\n\t\thasVertexTexture = gl.getParameter( gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS ) > 0;\r\n\r\n\t\tvar shader;\r\n\r\n\t\tif ( hasVertexTexture ) {\r\n\r\n\t\t\tshader = {\r\n\r\n\t\t\t\tvertexShader: [\r\n\r\n\t\t\t\t\t\"uniform lowp int renderType;\",\r\n\r\n\t\t\t\t\t\"uniform vec3 screenPosition;\",\r\n\t\t\t\t\t\"uniform vec2 scale;\",\r\n\t\t\t\t\t\"uniform float rotation;\",\r\n\r\n\t\t\t\t\t\"uniform sampler2D occlusionMap;\",\r\n\r\n\t\t\t\t\t\"attribute vec2 position;\",\r\n\t\t\t\t\t\"attribute vec2 uv;\",\r\n\r\n\t\t\t\t\t\"varying vec2 vUV;\",\r\n\t\t\t\t\t\"varying float vVisibility;\",\r\n\r\n\t\t\t\t\t\"void main() {\",\r\n\r\n\t\t\t\t\t\t\"vUV = uv;\",\r\n\r\n\t\t\t\t\t\t\"vec2 pos = position;\",\r\n\r\n\t\t\t\t\t\t\"if( renderType == 2 ) {\",\r\n\r\n\t\t\t\t\t\t\t\"vec4 visibility = texture2D( occlusionMap, vec2( 0.1, 0.1 ) );\",\r\n\t\t\t\t\t\t\t\"visibility += texture2D( occlusionMap, vec2( 0.5, 0.1 ) );\",\r\n\t\t\t\t\t\t\t\"visibility += texture2D( occlusionMap, vec2( 0.9, 0.1 ) );\",\r\n\t\t\t\t\t\t\t\"visibility += texture2D( occlusionMap, vec2( 0.9, 0.5 ) );\",\r\n\t\t\t\t\t\t\t\"visibility += texture2D( occlusionMap, vec2( 0.9, 0.9 ) );\",\r\n\t\t\t\t\t\t\t\"visibility += texture2D( occlusionMap, vec2( 0.5, 0.9 ) );\",\r\n\t\t\t\t\t\t\t\"visibility += texture2D( occlusionMap, vec2( 0.1, 0.9 ) );\",\r\n\t\t\t\t\t\t\t\"visibility += texture2D( occlusionMap, vec2( 0.1, 0.5 ) );\",\r\n\t\t\t\t\t\t\t\"visibility += texture2D( occlusionMap, vec2( 0.5, 0.5 ) );\",\r\n\r\n\t\t\t\t\t\t\t\"vVisibility = visibility.r / 9.0;\",\r\n\t\t\t\t\t\t\t\"vVisibility *= 1.0 - visibility.g / 9.0;\",\r\n\t\t\t\t\t\t\t\"vVisibility *= visibility.b / 9.0;\",\r\n\t\t\t\t\t\t\t\"vVisibility *= 1.0 - visibility.a / 9.0;\",\r\n\r\n\t\t\t\t\t\t\t\"pos.x = cos( rotation ) * position.x - sin( rotation ) * position.y;\",\r\n\t\t\t\t\t\t\t\"pos.y = sin( rotation ) * position.x + cos( rotation ) * position.y;\",\r\n\r\n\t\t\t\t\t\t\"}\",\r\n\r\n\t\t\t\t\t\t\"gl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );\",\r\n\r\n\t\t\t\t\t\"}\"\r\n\r\n\t\t\t\t].join( \"\\n\" ),\r\n\r\n\t\t\t\tfragmentShader: [\r\n\r\n\t\t\t\t\t\"uniform lowp int renderType;\",\r\n\r\n\t\t\t\t\t\"uniform sampler2D map;\",\r\n\t\t\t\t\t\"uniform float opacity;\",\r\n\t\t\t\t\t\"uniform vec3 color;\",\r\n\r\n\t\t\t\t\t\"varying vec2 vUV;\",\r\n\t\t\t\t\t\"varying float vVisibility;\",\r\n\r\n\t\t\t\t\t\"void main() {\",\r\n\r\n\t\t\t\t\t\t// pink square\r\n\r\n\t\t\t\t\t\t\"if( renderType == 0 ) {\",\r\n\r\n\t\t\t\t\t\t\t\"gl_FragColor = vec4( 1.0, 0.0, 1.0, 0.0 );\",\r\n\r\n\t\t\t\t\t\t// restore\r\n\r\n\t\t\t\t\t\t\"} else if( renderType == 1 ) {\",\r\n\r\n\t\t\t\t\t\t\t\"gl_FragColor = texture2D( map, vUV );\",\r\n\r\n\t\t\t\t\t\t// flare\r\n\r\n\t\t\t\t\t\t\"} else {\",\r\n\r\n\t\t\t\t\t\t\t\"vec4 texture = texture2D( map, vUV );\",\r\n\t\t\t\t\t\t\t\"texture.a *= opacity * vVisibility;\",\r\n\t\t\t\t\t\t\t\"gl_FragColor = texture;\",\r\n\t\t\t\t\t\t\t\"gl_FragColor.rgb *= color;\",\r\n\r\n\t\t\t\t\t\t\"}\",\r\n\r\n\t\t\t\t\t\"}\"\r\n\r\n\t\t\t\t].join( \"\\n\" )\r\n\r\n\t\t\t};\r\n\r\n\t\t} else {\r\n\r\n\t\t\tshader = {\r\n\r\n\t\t\t\tvertexShader: [\r\n\r\n\t\t\t\t\t\"uniform lowp int renderType;\",\r\n\r\n\t\t\t\t\t\"uniform vec3 screenPosition;\",\r\n\t\t\t\t\t\"uniform vec2 scale;\",\r\n\t\t\t\t\t\"uniform float rotation;\",\r\n\r\n\t\t\t\t\t\"attribute vec2 position;\",\r\n\t\t\t\t\t\"attribute vec2 uv;\",\r\n\r\n\t\t\t\t\t\"varying vec2 vUV;\",\r\n\r\n\t\t\t\t\t\"void main() {\",\r\n\r\n\t\t\t\t\t\t\"vUV = uv;\",\r\n\r\n\t\t\t\t\t\t\"vec2 pos = position;\",\r\n\r\n\t\t\t\t\t\t\"if( renderType == 2 ) {\",\r\n\r\n\t\t\t\t\t\t\t\"pos.x = cos( rotation ) * position.x - sin( rotation ) * position.y;\",\r\n\t\t\t\t\t\t\t\"pos.y = sin( rotation ) * position.x + cos( rotation ) * position.y;\",\r\n\r\n\t\t\t\t\t\t\"}\",\r\n\r\n\t\t\t\t\t\t\"gl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );\",\r\n\r\n\t\t\t\t\t\"}\"\r\n\r\n\t\t\t\t].join( \"\\n\" ),\r\n\r\n\t\t\t\tfragmentShader: [\r\n\r\n\t\t\t\t\t\"precision mediump float;\",\r\n\r\n\t\t\t\t\t\"uniform lowp int renderType;\",\r\n\r\n\t\t\t\t\t\"uniform sampler2D map;\",\r\n\t\t\t\t\t\"uniform sampler2D occlusionMap;\",\r\n\t\t\t\t\t\"uniform float opacity;\",\r\n\t\t\t\t\t\"uniform vec3 color;\",\r\n\r\n\t\t\t\t\t\"varying vec2 vUV;\",\r\n\r\n\t\t\t\t\t\"void main() {\",\r\n\r\n\t\t\t\t\t\t// pink square\r\n\r\n\t\t\t\t\t\t\"if( renderType == 0 ) {\",\r\n\r\n\t\t\t\t\t\t\t\"gl_FragColor = vec4( texture2D( map, vUV ).rgb, 0.0 );\",\r\n\r\n\t\t\t\t\t\t// restore\r\n\r\n\t\t\t\t\t\t\"} else if( renderType == 1 ) {\",\r\n\r\n\t\t\t\t\t\t\t\"gl_FragColor = texture2D( map, vUV );\",\r\n\r\n\t\t\t\t\t\t// flare\r\n\r\n\t\t\t\t\t\t\"} else {\",\r\n\r\n\t\t\t\t\t\t\t\"float visibility = texture2D( occlusionMap, vec2( 0.5, 0.1 ) ).a;\",\r\n\t\t\t\t\t\t\t\"visibility += texture2D( occlusionMap, vec2( 0.9, 0.5 ) ).a;\",\r\n\t\t\t\t\t\t\t\"visibility += texture2D( occlusionMap, vec2( 0.5, 0.9 ) ).a;\",\r\n\t\t\t\t\t\t\t\"visibility += texture2D( occlusionMap, vec2( 0.1, 0.5 ) ).a;\",\r\n\t\t\t\t\t\t\t\"visibility = ( 1.0 - visibility / 4.0 );\",\r\n\r\n\t\t\t\t\t\t\t\"vec4 texture = texture2D( map, vUV );\",\r\n\t\t\t\t\t\t\t\"texture.a *= opacity * visibility;\",\r\n\t\t\t\t\t\t\t\"gl_FragColor = texture;\",\r\n\t\t\t\t\t\t\t\"gl_FragColor.rgb *= color;\",\r\n\r\n\t\t\t\t\t\t\"}\",\r\n\r\n\t\t\t\t\t\"}\"\r\n\r\n\t\t\t\t].join( \"\\n\" )\r\n\r\n\t\t\t};\r\n\r\n\t\t}\r\n\r\n\t\tprogram = createProgram( shader );\r\n\r\n\t\tattributes = {\r\n\t\t\tvertex: gl.getAttribLocation ( program, \"position\" ),\r\n\t\t\tuv: gl.getAttribLocation ( program, \"uv\" )\r\n\t\t}\r\n\r\n\t\tuniforms = {\r\n\t\t\trenderType: gl.getUniformLocation( program, \"renderType\" ),\r\n\t\t\tmap: gl.getUniformLocation( program, \"map\" ),\r\n\t\t\tocclusionMap: gl.getUniformLocation( program, \"occlusionMap\" ),\r\n\t\t\topacity: gl.getUniformLocation( program, \"opacity\" ),\r\n\t\t\tcolor: gl.getUniformLocation( program, \"color\" ),\r\n\t\t\tscale: gl.getUniformLocation( program, \"scale\" ),\r\n\t\t\trotation: gl.getUniformLocation( program, \"rotation\" ),\r\n\t\t\tscreenPosition: gl.getUniformLocation( program, \"screenPosition\" )\r\n\t\t};\r\n\r\n\t};\r\n\r\n\t/*\r\n\t * Render lens flares\r\n\t * Method: renders 16x16 0xff00ff-colored points scattered over the light source area,\r\n\t * reads these back and calculates occlusion.\r\n\t */\r\n\r\n\tthis.render = function ( scene, camera, viewportWidth, viewportHeight ) {\r\n\r\n\t\tif ( flares.length === 0 ) return;\r\n\r\n\t\tvar tempPosition = new THREE.Vector3();\r\n\r\n\t\tvar invAspect = viewportHeight / viewportWidth,\r\n\t\t\thalfViewportWidth = viewportWidth * 0.5,\r\n\t\t\thalfViewportHeight = viewportHeight * 0.5;\r\n\r\n\t\tvar size = 16 / viewportHeight,\r\n\t\t\tscale = new THREE.Vector2( size * invAspect, size );\r\n\r\n\t\tvar screenPosition = new THREE.Vector3( 1, 1, 0 ),\r\n\t\t\tscreenPositionPixels = new THREE.Vector2( 1, 1 );\r\n\r\n\t\tif ( program === undefined ) {\r\n\r\n\t\t\tinit();\r\n\r\n\t\t}\r\n\r\n\t\tgl.useProgram( program );\r\n\r\n\t\tgl.enableVertexAttribArray( attributes.vertex );\r\n\t\tgl.enableVertexAttribArray( attributes.uv );\r\n\r\n\t\t// loop through all lens flares to update their occlusion and positions\r\n\t\t// setup gl and common used attribs/unforms\r\n\r\n\t\tgl.uniform1i( uniforms.occlusionMap, 0 );\r\n\t\tgl.uniform1i( uniforms.map, 1 );\r\n\r\n\t\tgl.bindBuffer( gl.ARRAY_BUFFER, vertexBuffer );\r\n\t\tgl.vertexAttribPointer( attributes.vertex, 2, gl.FLOAT, false, 2 * 8, 0 );\r\n\t\tgl.vertexAttribPointer( attributes.uv, 2, gl.FLOAT, false, 2 * 8, 8 );\r\n\r\n\t\tgl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, elementBuffer );\r\n\r\n\t\tgl.disable( gl.CULL_FACE );\r\n\t\tgl.depthMask( false );\r\n\r\n\t\tfor ( var i = 0, l = flares.length; i < l; i ++ ) {\r\n\r\n\t\t\tsize = 16 / viewportHeight;\r\n\t\t\tscale.set( size * invAspect, size );\r\n\r\n\t\t\t// calc object screen position\r\n\r\n\t\t\tvar flare = flares[ i ];\r\n\t\t\t\r\n\t\t\ttempPosition.set( flare.matrixWorld.elements[12], flare.matrixWorld.elements[13], flare.matrixWorld.elements[14] );\r\n\r\n\t\t\ttempPosition.applyMatrix4( camera.matrixWorldInverse );\r\n\t\t\ttempPosition.applyProjection( camera.projectionMatrix );\r\n\r\n\t\t\t// setup arrays for gl programs\r\n\r\n\t\t\tscreenPosition.copy( tempPosition )\r\n\r\n\t\t\tscreenPositionPixels.x = screenPosition.x * halfViewportWidth + halfViewportWidth;\r\n\t\t\tscreenPositionPixels.y = screenPosition.y * halfViewportHeight + halfViewportHeight;\r\n\r\n\t\t\t// screen cull\r\n\r\n\t\t\tif ( hasVertexTexture || (\r\n\t\t\t\tscreenPositionPixels.x > 0 &&\r\n\t\t\t\tscreenPositionPixels.x < viewportWidth &&\r\n\t\t\t\tscreenPositionPixels.y > 0 &&\r\n\t\t\t\tscreenPositionPixels.y < viewportHeight ) ) {\r\n\r\n\t\t\t\t// save current RGB to temp texture\r\n\r\n\t\t\t\tgl.activeTexture( gl.TEXTURE1 );\r\n\t\t\t\tgl.bindTexture( gl.TEXTURE_2D, tempTexture );\r\n\t\t\t\tgl.copyTexImage2D( gl.TEXTURE_2D, 0, gl.RGB, screenPositionPixels.x - 8, screenPositionPixels.y - 8, 16, 16, 0 );\r\n\r\n\r\n\t\t\t\t// render pink quad\r\n\r\n\t\t\t\tgl.uniform1i( uniforms.renderType, 0 );\r\n\t\t\t\tgl.uniform2f( uniforms.scale, scale.x, scale.y );\r\n\t\t\t\tgl.uniform3f( uniforms.screenPosition, screenPosition.x, screenPosition.y, screenPosition.z );\r\n\r\n\t\t\t\tgl.disable( gl.BLEND );\r\n\t\t\t\tgl.enable( gl.DEPTH_TEST );\r\n\r\n\t\t\t\tgl.drawElements( gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 );\r\n\r\n\r\n\t\t\t\t// copy result to occlusionMap\r\n\r\n\t\t\t\tgl.activeTexture( gl.TEXTURE0 );\r\n\t\t\t\tgl.bindTexture( gl.TEXTURE_2D, occlusionTexture );\r\n\t\t\t\tgl.copyTexImage2D( gl.TEXTURE_2D, 0, gl.RGBA, screenPositionPixels.x - 8, screenPositionPixels.y - 8, 16, 16, 0 );\r\n\r\n\r\n\t\t\t\t// restore graphics\r\n\r\n\t\t\t\tgl.uniform1i( uniforms.renderType, 1 );\r\n\t\t\t\tgl.disable( gl.DEPTH_TEST );\r\n\r\n\t\t\t\tgl.activeTexture( gl.TEXTURE1 );\r\n\t\t\t\tgl.bindTexture( gl.TEXTURE_2D, tempTexture );\r\n\t\t\t\tgl.drawElements( gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 );\r\n\r\n\r\n\t\t\t\t// update object positions\r\n\r\n\t\t\t\tflare.positionScreen.copy( screenPosition )\r\n\r\n\t\t\t\tif ( flare.customUpdateCallback ) {\r\n\r\n\t\t\t\t\tflare.customUpdateCallback( flare );\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tflare.updateLensFlares();\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// render flares\r\n\r\n\t\t\t\tgl.uniform1i( uniforms.renderType, 2 );\r\n\t\t\t\tgl.enable( gl.BLEND );\r\n\r\n\t\t\t\tfor ( var j = 0, jl = flare.lensFlares.length; j < jl; j ++ ) {\r\n\r\n\t\t\t\t\tvar sprite = flare.lensFlares[ j ];\r\n\r\n\t\t\t\t\tif ( sprite.opacity > 0.001 && sprite.scale > 0.001 ) {\r\n\r\n\t\t\t\t\t\tscreenPosition.x = sprite.x;\r\n\t\t\t\t\t\tscreenPosition.y = sprite.y;\r\n\t\t\t\t\t\tscreenPosition.z = sprite.z;\r\n\r\n\t\t\t\t\t\tsize = sprite.size * sprite.scale / viewportHeight;\r\n\r\n\t\t\t\t\t\tscale.x = size * invAspect;\r\n\t\t\t\t\t\tscale.y = size;\r\n\r\n\t\t\t\t\t\tgl.uniform3f( uniforms.screenPosition, screenPosition.x, screenPosition.y, screenPosition.z );\r\n\t\t\t\t\t\tgl.uniform2f( uniforms.scale, scale.x, scale.y );\r\n\t\t\t\t\t\tgl.uniform1f( uniforms.rotation, sprite.rotation );\r\n\r\n\t\t\t\t\t\tgl.uniform1f( uniforms.opacity, sprite.opacity );\r\n\t\t\t\t\t\tgl.uniform3f( uniforms.color, sprite.color.r, sprite.color.g, sprite.color.b );\r\n\r\n\t\t\t\t\t\trenderer.setBlending( sprite.blending, sprite.blendEquation, sprite.blendSrc, sprite.blendDst );\r\n\t\t\t\t\t\trenderer.setTexture( sprite.texture, 1 );\r\n\r\n\t\t\t\t\t\tgl.drawElements( gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t// restore gl\r\n\r\n\t\tgl.enable( gl.CULL_FACE );\r\n\t\tgl.enable( gl.DEPTH_TEST );\r\n\t\tgl.depthMask( true );\r\n\r\n\t\trenderer.resetGLState();\r\n\r\n\t};\r\n\r\n\tfunction createProgram ( shader ) {\r\n\r\n\t\tvar program = gl.createProgram();\r\n\r\n\t\tvar fragmentShader = gl.createShader( gl.FRAGMENT_SHADER );\r\n\t\tvar vertexShader = gl.createShader( gl.VERTEX_SHADER );\r\n\r\n\t\tvar prefix = \"precision \" + renderer.getPrecision() + \" float;\\n\";\r\n\r\n\t\tgl.shaderSource( fragmentShader, prefix + shader.fragmentShader );\r\n\t\tgl.shaderSource( vertexShader, prefix + shader.vertexShader );\r\n\r\n\t\tgl.compileShader( fragmentShader );\r\n\t\tgl.compileShader( vertexShader );\r\n\r\n\t\tgl.attachShader( program, fragmentShader );\r\n\t\tgl.attachShader( program, vertexShader );\r\n\r\n\t\tgl.linkProgram( program );\r\n\r\n\t\treturn program;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/renderers/webgl/plugins/ShadowMapPlugin.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.ShadowMapPlugin = function ( _renderer, _lights, _webglObjects, _webglObjectsImmediate ) {\r\n\r\n\tvar _gl = _renderer.context;\r\n\r\n\tvar _depthMaterial, _depthMaterialMorph, _depthMaterialSkin, _depthMaterialMorphSkin,\r\n\r\n\t_frustum = new THREE.Frustum(),\r\n\t_projScreenMatrix = new THREE.Matrix4(),\r\n\r\n\t_min = new THREE.Vector3(),\r\n\t_max = new THREE.Vector3(),\r\n\r\n\t_matrixPosition = new THREE.Vector3(),\r\n\t\r\n\t_renderList = [];\r\n\r\n\t// init\r\n\r\n\tvar depthShader = THREE.ShaderLib[ \"depthRGBA\" ];\r\n\tvar depthUniforms = THREE.UniformsUtils.clone( depthShader.uniforms );\r\n\r\n\t_depthMaterial = new THREE.ShaderMaterial( {\r\n\t\tuniforms: depthUniforms,\r\n\t\tvertexShader: depthShader.vertexShader,\r\n\t\tfragmentShader: depthShader.fragmentShader\r\n\t } );\r\n\r\n\t_depthMaterialMorph = new THREE.ShaderMaterial( {\r\n\t\tuniforms: depthUniforms,\r\n\t\tvertexShader: depthShader.vertexShader,\r\n\t\tfragmentShader: depthShader.fragmentShader,\r\n\t\tmorphTargets: true\r\n\t} );\r\n\r\n\t_depthMaterialSkin = new THREE.ShaderMaterial( {\r\n\t\tuniforms: depthUniforms,\r\n\t\tvertexShader: depthShader.vertexShader,\r\n\t\tfragmentShader: depthShader.fragmentShader,\r\n\t\tskinning: true\r\n\t} );\r\n\r\n\t_depthMaterialMorphSkin = new THREE.ShaderMaterial( {\r\n\t\tuniforms: depthUniforms,\r\n\t\tvertexShader: depthShader.vertexShader,\r\n\t\tfragmentShader: depthShader.fragmentShader,\r\n\t\tmorphTargets: true,\r\n\t\tskinning: true\r\n\t} );\r\n\r\n\t_depthMaterial._shadowPass = true;\r\n\t_depthMaterialMorph._shadowPass = true;\r\n\t_depthMaterialSkin._shadowPass = true;\r\n\t_depthMaterialMorphSkin._shadowPass = true;\r\n\r\n\tthis.render = function ( scene, camera ) {\r\n\r\n\t\tif ( _renderer.shadowMapEnabled === false ) return;\r\n\r\n\t\tvar i, il, j, jl, n,\r\n\r\n\t\tshadowMap, shadowMatrix, shadowCamera,\r\n\t\tprogram, buffer, material,\r\n\t\twebglObject, object, light,\r\n\r\n\t\tlights = [],\r\n\t\tk = 0,\r\n\r\n\t\tfog = null;\r\n\r\n\t\t// set GL state for depth map\r\n\r\n\t\t_gl.clearColor( 1, 1, 1, 1 );\r\n\t\t_gl.disable( _gl.BLEND );\r\n\r\n\t\t_gl.enable( _gl.CULL_FACE );\r\n\t\t_gl.frontFace( _gl.CCW );\r\n\r\n\t\tif ( _renderer.shadowMapCullFace === THREE.CullFaceFront ) {\r\n\r\n\t\t\t_gl.cullFace( _gl.FRONT );\r\n\r\n\t\t} else {\r\n\r\n\t\t\t_gl.cullFace( _gl.BACK );\r\n\r\n\t\t}\r\n\r\n\t\t_renderer.setDepthTest( true );\r\n\r\n\t\t// preprocess lights\r\n\t\t// \t- skip lights that are not casting shadows\r\n\t\t//\t- create virtual lights for cascaded shadow maps\r\n\r\n\t\tfor ( i = 0, il = _lights.length; i < il; i ++ ) {\r\n\r\n\t\t\tlight = _lights[ i ];\r\n\r\n\t\t\tif ( ! light.castShadow ) continue;\r\n\r\n\t\t\tif ( ( light instanceof THREE.DirectionalLight ) && light.shadowCascade ) {\r\n\r\n\t\t\t\tfor ( n = 0; n < light.shadowCascadeCount; n ++ ) {\r\n\r\n\t\t\t\t\tvar virtualLight;\r\n\r\n\t\t\t\t\tif ( ! light.shadowCascadeArray[ n ] ) {\r\n\r\n\t\t\t\t\t\tvirtualLight = createVirtualLight( light, n );\r\n\t\t\t\t\t\tvirtualLight.originalCamera = camera;\r\n\r\n\t\t\t\t\t\tvar gyro = new THREE.Gyroscope();\r\n\t\t\t\t\t\tgyro.position.copy( light.shadowCascadeOffset );\r\n\r\n\t\t\t\t\t\tgyro.add( virtualLight );\r\n\t\t\t\t\t\tgyro.add( virtualLight.target );\r\n\r\n\t\t\t\t\t\tcamera.add( gyro );\r\n\r\n\t\t\t\t\t\tlight.shadowCascadeArray[ n ] = virtualLight;\r\n\r\n\t\t\t\t\t\tconsole.log( \"Created virtualLight\", virtualLight );\r\n\r\n\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\tvirtualLight = light.shadowCascadeArray[ n ];\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tupdateVirtualLight( light, n );\r\n\r\n\t\t\t\t\tlights[ k ] = virtualLight;\r\n\t\t\t\t\tk ++;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tlights[ k ] = light;\r\n\t\t\t\tk ++;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t// render depth map\r\n\r\n\t\tfor ( i = 0, il = lights.length; i < il; i ++ ) {\r\n\r\n\t\t\tlight = lights[ i ];\r\n\r\n\t\t\tif ( ! light.shadowMap ) {\r\n\r\n\t\t\t\tvar shadowFilter = THREE.LinearFilter;\r\n\r\n\t\t\t\tif ( _renderer.shadowMapType === THREE.PCFSoftShadowMap ) {\r\n\r\n\t\t\t\t\tshadowFilter = THREE.NearestFilter;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar pars = { minFilter: shadowFilter, magFilter: shadowFilter, format: THREE.RGBAFormat };\r\n\r\n\t\t\t\tlight.shadowMap = new THREE.WebGLRenderTarget( light.shadowMapWidth, light.shadowMapHeight, pars );\r\n\t\t\t\tlight.shadowMapSize = new THREE.Vector2( light.shadowMapWidth, light.shadowMapHeight );\r\n\r\n\t\t\t\tlight.shadowMatrix = new THREE.Matrix4();\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( ! light.shadowCamera ) {\r\n\r\n\t\t\t\tif ( light instanceof THREE.SpotLight ) {\r\n\r\n\t\t\t\t\tlight.shadowCamera = new THREE.PerspectiveCamera( light.shadowCameraFov, light.shadowMapWidth / light.shadowMapHeight, light.shadowCameraNear, light.shadowCameraFar );\r\n\r\n\t\t\t\t} else if ( light instanceof THREE.DirectionalLight ) {\r\n\r\n\t\t\t\t\tlight.shadowCamera = new THREE.OrthographicCamera( light.shadowCameraLeft, light.shadowCameraRight, light.shadowCameraTop, light.shadowCameraBottom, light.shadowCameraNear, light.shadowCameraFar );\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tconsole.error( \"Unsupported light type for shadow\" );\r\n\t\t\t\t\tcontinue;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tscene.add( light.shadowCamera );\r\n\r\n\t\t\t\tif ( scene.autoUpdate === true ) scene.updateMatrixWorld();\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( light.shadowCameraVisible && ! light.cameraHelper ) {\r\n\r\n\t\t\t\tlight.cameraHelper = new THREE.CameraHelper( light.shadowCamera );\r\n\t\t\t\tscene.add( light.cameraHelper );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( light.isVirtual && virtualLight.originalCamera == camera ) {\r\n\r\n\t\t\t\tupdateShadowCamera( camera, light );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tshadowMap = light.shadowMap;\r\n\t\t\tshadowMatrix = light.shadowMatrix;\r\n\t\t\tshadowCamera = light.shadowCamera;\r\n\r\n\t\t\t//\r\n\r\n\t\t\tshadowCamera.position.setFromMatrixPosition( light.matrixWorld );\r\n\t\t\t_matrixPosition.setFromMatrixPosition( light.target.matrixWorld );\r\n\t\t\tshadowCamera.lookAt( _matrixPosition );\r\n\t\t\tshadowCamera.updateMatrixWorld();\r\n\r\n\t\t\tshadowCamera.matrixWorldInverse.getInverse( shadowCamera.matrixWorld );\r\n\r\n\t\t\t//\r\n\r\n\t\t\tif ( light.cameraHelper ) light.cameraHelper.visible = light.shadowCameraVisible;\r\n\t\t\tif ( light.shadowCameraVisible ) light.cameraHelper.update();\r\n\r\n\t\t\t// compute shadow matrix\r\n\r\n\t\t\tshadowMatrix.set(\r\n\t\t\t\t0.5, 0.0, 0.0, 0.5,\r\n\t\t\t\t0.0, 0.5, 0.0, 0.5,\r\n\t\t\t\t0.0, 0.0, 0.5, 0.5,\r\n\t\t\t\t0.0, 0.0, 0.0, 1.0\r\n\t\t\t);\r\n\r\n\t\t\tshadowMatrix.multiply( shadowCamera.projectionMatrix );\r\n\t\t\tshadowMatrix.multiply( shadowCamera.matrixWorldInverse );\r\n\r\n\t\t\t// update camera matrices and frustum\r\n\r\n\t\t\t_projScreenMatrix.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse );\r\n\t\t\t_frustum.setFromMatrix( _projScreenMatrix );\r\n\r\n\t\t\t// render shadow map\r\n\r\n\t\t\t_renderer.setRenderTarget( shadowMap );\r\n\t\t\t_renderer.clear();\r\n\r\n\t\t\t// set object matrices & frustum culling\r\n\r\n\t\t\t_renderList.length = 0;\r\n\r\n\t\t\tprojectObject( scene, scene, shadowCamera );\r\n\r\n\r\n\t\t\t// render regular objects\r\n\r\n\t\t\tvar objectMaterial, useMorphing, useSkinning;\r\n\r\n\t\t\tfor ( j = 0, jl = _renderList.length; j < jl; j ++ ) {\r\n\r\n\t\t\t\twebglObject = _renderList[ j ];\r\n\r\n\t\t\t\tobject = webglObject.object;\r\n\t\t\t\tbuffer = webglObject.buffer;\r\n\r\n\t\t\t\t// culling is overriden globally for all objects\r\n\t\t\t\t// while rendering depth map\r\n\r\n\t\t\t\t// need to deal with MeshFaceMaterial somehow\r\n\t\t\t\t// in that case just use the first of material.materials for now\r\n\t\t\t\t// (proper solution would require to break objects by materials\r\n\t\t\t\t// similarly to regular rendering and then set corresponding\r\n\t\t\t\t// depth materials per each chunk instead of just once per object)\r\n\r\n\t\t\t\tobjectMaterial = getObjectMaterial( object );\r\n\r\n\t\t\t\tuseMorphing = object.geometry.morphTargets !== undefined && object.geometry.morphTargets.length > 0 && objectMaterial.morphTargets;\r\n\t\t\t\tuseSkinning = object instanceof THREE.SkinnedMesh && objectMaterial.skinning;\r\n\r\n\t\t\t\tif ( object.customDepthMaterial ) {\r\n\r\n\t\t\t\t\tmaterial = object.customDepthMaterial;\r\n\r\n\t\t\t\t} else if ( useSkinning ) {\r\n\r\n\t\t\t\t\tmaterial = useMorphing ? _depthMaterialMorphSkin : _depthMaterialSkin;\r\n\r\n\t\t\t\t} else if ( useMorphing ) {\r\n\r\n\t\t\t\t\tmaterial = _depthMaterialMorph;\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tmaterial = _depthMaterial;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t_renderer.setMaterialFaces( objectMaterial );\r\n\r\n\t\t\t\tif ( buffer instanceof THREE.BufferGeometry ) {\r\n\r\n\t\t\t\t\t_renderer.renderBufferDirect( shadowCamera, _lights, fog, material, buffer, object );\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\t_renderer.renderBuffer( shadowCamera, _lights, fog, material, buffer, object );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// set matrices and render immediate objects\r\n\r\n\t\t\tfor ( j = 0, jl = _webglObjectsImmediate.length; j < jl; j ++ ) {\r\n\r\n\t\t\t\twebglObject = _webglObjectsImmediate[ j ];\r\n\t\t\t\tobject = webglObject.object;\r\n\r\n\t\t\t\tif ( object.visible && object.castShadow ) {\r\n\r\n\t\t\t\t\tobject._modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld );\r\n\r\n\t\t\t\t\t_renderer.renderImmediateObject( shadowCamera, _lights, fog, _depthMaterial, object );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t// restore GL state\r\n\r\n\t\tvar clearColor = _renderer.getClearColor(),\r\n\t\tclearAlpha = _renderer.getClearAlpha();\r\n\r\n\t\t_gl.clearColor( clearColor.r, clearColor.g, clearColor.b, clearAlpha );\r\n\t\t_gl.enable( _gl.BLEND );\r\n\r\n\t\tif ( _renderer.shadowMapCullFace === THREE.CullFaceFront ) {\r\n\r\n\t\t\t_gl.cullFace( _gl.BACK );\r\n\r\n\t\t}\r\n\r\n\t\t_renderer.resetGLState();\r\n\r\n\t};\r\n\r\n\tfunction projectObject( scene, object, shadowCamera ){\r\n\r\n\t\tif ( object.visible ) {\r\n\r\n\t\t\tvar webglObjects = _webglObjects[ object.id ];\r\n\r\n\t\t\tif ( webglObjects && object.castShadow && (object.frustumCulled === false || _frustum.intersectsObject( object ) === true) ) {\r\n\r\n\t\t\t\tfor ( var i = 0, l = webglObjects.length; i < l; i ++ ) {\r\n\r\n\t\t\t\t\tvar webglObject = webglObjects[ i ];\r\n\r\n\t\t\t\t\tobject._modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld );\r\n\t\t\t\t\t_renderList.push( webglObject );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfor ( var i = 0, l = object.children.length; i < l; i ++ ) {\r\n\r\n\t\t\t\tprojectObject( scene, object.children[ i ], shadowCamera );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction createVirtualLight( light, cascade ) {\r\n\r\n\t\tvar virtualLight = new THREE.DirectionalLight();\r\n\r\n\t\tvirtualLight.isVirtual = true;\r\n\r\n\t\tvirtualLight.onlyShadow = true;\r\n\t\tvirtualLight.castShadow = true;\r\n\r\n\t\tvirtualLight.shadowCameraNear = light.shadowCameraNear;\r\n\t\tvirtualLight.shadowCameraFar = light.shadowCameraFar;\r\n\r\n\t\tvirtualLight.shadowCameraLeft = light.shadowCameraLeft;\r\n\t\tvirtualLight.shadowCameraRight = light.shadowCameraRight;\r\n\t\tvirtualLight.shadowCameraBottom = light.shadowCameraBottom;\r\n\t\tvirtualLight.shadowCameraTop = light.shadowCameraTop;\r\n\r\n\t\tvirtualLight.shadowCameraVisible = light.shadowCameraVisible;\r\n\r\n\t\tvirtualLight.shadowDarkness = light.shadowDarkness;\r\n\r\n\t\tvirtualLight.shadowBias = light.shadowCascadeBias[ cascade ];\r\n\t\tvirtualLight.shadowMapWidth = light.shadowCascadeWidth[ cascade ];\r\n\t\tvirtualLight.shadowMapHeight = light.shadowCascadeHeight[ cascade ];\r\n\r\n\t\tvirtualLight.pointsWorld = [];\r\n\t\tvirtualLight.pointsFrustum = [];\r\n\r\n\t\tvar pointsWorld = virtualLight.pointsWorld,\r\n\t\t\tpointsFrustum = virtualLight.pointsFrustum;\r\n\r\n\t\tfor ( var i = 0; i < 8; i ++ ) {\r\n\r\n\t\t\tpointsWorld[ i ] = new THREE.Vector3();\r\n\t\t\tpointsFrustum[ i ] = new THREE.Vector3();\r\n\r\n\t\t}\r\n\r\n\t\tvar nearZ = light.shadowCascadeNearZ[ cascade ];\r\n\t\tvar farZ = light.shadowCascadeFarZ[ cascade ];\r\n\r\n\t\tpointsFrustum[ 0 ].set( - 1, - 1, nearZ );\r\n\t\tpointsFrustum[ 1 ].set( 1, - 1, nearZ );\r\n\t\tpointsFrustum[ 2 ].set( - 1, 1, nearZ );\r\n\t\tpointsFrustum[ 3 ].set( 1, 1, nearZ );\r\n\r\n\t\tpointsFrustum[ 4 ].set( - 1, - 1, farZ );\r\n\t\tpointsFrustum[ 5 ].set( 1, - 1, farZ );\r\n\t\tpointsFrustum[ 6 ].set( - 1, 1, farZ );\r\n\t\tpointsFrustum[ 7 ].set( 1, 1, farZ );\r\n\r\n\t\treturn virtualLight;\r\n\r\n\t}\r\n\r\n\t// Synchronize virtual light with the original light\r\n\r\n\tfunction updateVirtualLight( light, cascade ) {\r\n\r\n\t\tvar virtualLight = light.shadowCascadeArray[ cascade ];\r\n\r\n\t\tvirtualLight.position.copy( light.position );\r\n\t\tvirtualLight.target.position.copy( light.target.position );\r\n\t\tvirtualLight.lookAt( virtualLight.target );\r\n\r\n\t\tvirtualLight.shadowCameraVisible = light.shadowCameraVisible;\r\n\t\tvirtualLight.shadowDarkness = light.shadowDarkness;\r\n\r\n\t\tvirtualLight.shadowBias = light.shadowCascadeBias[ cascade ];\r\n\r\n\t\tvar nearZ = light.shadowCascadeNearZ[ cascade ];\r\n\t\tvar farZ = light.shadowCascadeFarZ[ cascade ];\r\n\r\n\t\tvar pointsFrustum = virtualLight.pointsFrustum;\r\n\r\n\t\tpointsFrustum[ 0 ].z = nearZ;\r\n\t\tpointsFrustum[ 1 ].z = nearZ;\r\n\t\tpointsFrustum[ 2 ].z = nearZ;\r\n\t\tpointsFrustum[ 3 ].z = nearZ;\r\n\r\n\t\tpointsFrustum[ 4 ].z = farZ;\r\n\t\tpointsFrustum[ 5 ].z = farZ;\r\n\t\tpointsFrustum[ 6 ].z = farZ;\r\n\t\tpointsFrustum[ 7 ].z = farZ;\r\n\r\n\t}\r\n\r\n\t// Fit shadow camera's ortho frustum to camera frustum\r\n\r\n\tfunction updateShadowCamera( camera, light ) {\r\n\r\n\t\tvar shadowCamera = light.shadowCamera,\r\n\t\t\tpointsFrustum = light.pointsFrustum,\r\n\t\t\tpointsWorld = light.pointsWorld;\r\n\r\n\t\t_min.set( Infinity, Infinity, Infinity );\r\n\t\t_max.set( - Infinity, - Infinity, - Infinity );\r\n\r\n\t\tfor ( var i = 0; i < 8; i ++ ) {\r\n\r\n\t\t\tvar p = pointsWorld[ i ];\r\n\r\n\t\t\tp.copy( pointsFrustum[ i ] );\r\n\t\t\tp.unproject( camera );\r\n\r\n\t\t\tp.applyMatrix4( shadowCamera.matrixWorldInverse );\r\n\r\n\t\t\tif ( p.x < _min.x ) _min.x = p.x;\r\n\t\t\tif ( p.x > _max.x ) _max.x = p.x;\r\n\r\n\t\t\tif ( p.y < _min.y ) _min.y = p.y;\r\n\t\t\tif ( p.y > _max.y ) _max.y = p.y;\r\n\r\n\t\t\tif ( p.z < _min.z ) _min.z = p.z;\r\n\t\t\tif ( p.z > _max.z ) _max.z = p.z;\r\n\r\n\t\t}\r\n\r\n\t\tshadowCamera.left = _min.x;\r\n\t\tshadowCamera.right = _max.x;\r\n\t\tshadowCamera.top = _max.y;\r\n\t\tshadowCamera.bottom = _min.y;\r\n\r\n\t\t// can't really fit near/far\r\n\t\t//shadowCamera.near = _min.z;\r\n\t\t//shadowCamera.far = _max.z;\r\n\r\n\t\tshadowCamera.updateProjectionMatrix();\r\n\r\n\t}\r\n\r\n\t// For the moment just ignore objects that have multiple materials with different animation methods\r\n\t// Only the first material will be taken into account for deciding which depth material to use for shadow maps\r\n\r\n\tfunction getObjectMaterial( object ) {\r\n\r\n\t\treturn object.material instanceof THREE.MeshFaceMaterial\r\n\t\t\t? object.material.materials[ 0 ]\r\n\t\t\t: object.material;\r\n\r\n\t};\r\n\r\n};\r\n\r\n// File:src/renderers/webgl/plugins/SpritePlugin.js\r\n\r\n/**\r\n * @author mikael emtinger / http://gomo.se/\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.SpritePlugin = function ( renderer, sprites ) {\r\n\r\n\tvar gl = renderer.context;\r\n\r\n\tvar vertexBuffer, elementBuffer;\r\n\tvar program, attributes, uniforms;\r\n\r\n\tvar texture;\r\n\t\r\n\tvar init = function () {\r\n\r\n\t\tvar vertices = new Float32Array( [\r\n\t\t\t- 0.5, - 0.5, 0, 0,\r\n\t\t\t 0.5, - 0.5, 1, 0,\r\n\t\t\t 0.5, 0.5, 1, 1,\r\n\t\t\t- 0.5, 0.5, 0, 1\r\n\t\t] );\r\n\r\n\t\tvar faces = new Uint16Array( [\r\n\t\t\t0, 1, 2,\r\n\t\t\t0, 2, 3\r\n\t\t] );\r\n\r\n\t\tvertexBuffer = gl.createBuffer();\r\n\t\telementBuffer = gl.createBuffer();\r\n\r\n\t\tgl.bindBuffer( gl.ARRAY_BUFFER, vertexBuffer );\r\n\t\tgl.bufferData( gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW );\r\n\r\n\t\tgl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, elementBuffer );\r\n\t\tgl.bufferData( gl.ELEMENT_ARRAY_BUFFER, faces, gl.STATIC_DRAW );\r\n\r\n\t\tprogram = createProgram();\r\n\r\n\t\tattributes = {\r\n\t\t\tposition:\t\t\tgl.getAttribLocation ( program, 'position' ),\r\n\t\t\tuv:\t\t\t\t\tgl.getAttribLocation ( program, 'uv' )\r\n\t\t};\r\n\r\n\t\tuniforms = {\r\n\t\t\tuvOffset:\t\t\tgl.getUniformLocation( program, 'uvOffset' ),\r\n\t\t\tuvScale:\t\t\tgl.getUniformLocation( program, 'uvScale' ),\r\n\r\n\t\t\trotation:\t\t\tgl.getUniformLocation( program, 'rotation' ),\r\n\t\t\tscale:\t\t\t\tgl.getUniformLocation( program, 'scale' ),\r\n\r\n\t\t\tcolor:\t\t\t\tgl.getUniformLocation( program, 'color' ),\r\n\t\t\tmap:\t\t\t\tgl.getUniformLocation( program, 'map' ),\r\n\t\t\topacity:\t\t\tgl.getUniformLocation( program, 'opacity' ),\r\n\r\n\t\t\tmodelViewMatrix: \tgl.getUniformLocation( program, 'modelViewMatrix' ),\r\n\t\t\tprojectionMatrix:\tgl.getUniformLocation( program, 'projectionMatrix' ),\r\n\r\n\t\t\tfogType:\t\t\tgl.getUniformLocation( program, 'fogType' ),\r\n\t\t\tfogDensity:\t\t\tgl.getUniformLocation( program, 'fogDensity' ),\r\n\t\t\tfogNear:\t\t\tgl.getUniformLocation( program, 'fogNear' ),\r\n\t\t\tfogFar:\t\t\t\tgl.getUniformLocation( program, 'fogFar' ),\r\n\t\t\tfogColor:\t\t\tgl.getUniformLocation( program, 'fogColor' ),\r\n\r\n\t\t\talphaTest:\t\t\tgl.getUniformLocation( program, 'alphaTest' )\r\n\t\t};\r\n\r\n\t\tvar canvas = document.createElement( 'canvas' );\r\n\t\tcanvas.width = 8;\r\n\t\tcanvas.height = 8;\r\n\r\n\t\tvar context = canvas.getContext( '2d' );\r\n\t\tcontext.fillStyle = 'white';\r\n\t\tcontext.fillRect( 0, 0, 8, 8 );\r\n\r\n\t\ttexture = new THREE.Texture( canvas );\r\n\t\ttexture.needsUpdate = true;\r\n\r\n\t};\r\n\r\n\tthis.render = function ( scene, camera ) {\r\n\r\n\t\tif ( sprites.length === 0 ) return;\r\n\r\n\t\t// setup gl\r\n\r\n\t\tif ( program === undefined ) {\r\n\r\n\t\t\tinit();\r\n\r\n\t\t}\r\n\r\n\t\tgl.useProgram( program );\r\n\r\n\t\tgl.enableVertexAttribArray( attributes.position );\r\n\t\tgl.enableVertexAttribArray( attributes.uv );\r\n\r\n\t\tgl.disable( gl.CULL_FACE );\r\n\t\tgl.enable( gl.BLEND );\r\n\r\n\t\tgl.bindBuffer( gl.ARRAY_BUFFER, vertexBuffer );\r\n\t\tgl.vertexAttribPointer( attributes.position, 2, gl.FLOAT, false, 2 * 8, 0 );\r\n\t\tgl.vertexAttribPointer( attributes.uv, 2, gl.FLOAT, false, 2 * 8, 8 );\r\n\r\n\t\tgl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, elementBuffer );\r\n\r\n\t\tgl.uniformMatrix4fv( uniforms.projectionMatrix, false, camera.projectionMatrix.elements );\r\n\r\n\t\tgl.activeTexture( gl.TEXTURE0 );\r\n\t\tgl.uniform1i( uniforms.map, 0 );\r\n\r\n\t\tvar oldFogType = 0;\r\n\t\tvar sceneFogType = 0;\r\n\t\tvar fog = scene.fog;\r\n\r\n\t\tif ( fog ) {\r\n\r\n\t\t\tgl.uniform3f( uniforms.fogColor, fog.color.r, fog.color.g, fog.color.b );\r\n\r\n\t\t\tif ( fog instanceof THREE.Fog ) {\r\n\r\n\t\t\t\tgl.uniform1f( uniforms.fogNear, fog.near );\r\n\t\t\t\tgl.uniform1f( uniforms.fogFar, fog.far );\r\n\r\n\t\t\t\tgl.uniform1i( uniforms.fogType, 1 );\r\n\t\t\t\toldFogType = 1;\r\n\t\t\t\tsceneFogType = 1;\r\n\r\n\t\t\t} else if ( fog instanceof THREE.FogExp2 ) {\r\n\r\n\t\t\t\tgl.uniform1f( uniforms.fogDensity, fog.density );\r\n\r\n\t\t\t\tgl.uniform1i( uniforms.fogType, 2 );\r\n\t\t\t\toldFogType = 2;\r\n\t\t\t\tsceneFogType = 2;\r\n\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\r\n\t\t\tgl.uniform1i( uniforms.fogType, 0 );\r\n\t\t\toldFogType = 0;\r\n\t\t\tsceneFogType = 0;\r\n\r\n\t\t}\r\n\r\n\r\n\t\t// update positions and sort\r\n\r\n\t\tfor ( var i = 0, l = sprites.length; i < l; i ++ ) {\r\n\r\n\t\t\tvar sprite = sprites[ i ];\r\n\r\n\t\t\tsprite._modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, sprite.matrixWorld );\r\n\r\n\t\t\tif ( sprite.renderDepth === null ) {\r\n\r\n\t\t\t\tsprite.z = - sprite._modelViewMatrix.elements[ 14 ];\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tsprite.z = sprite.renderDepth;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tsprites.sort( painterSortStable );\r\n\r\n\t\t// render all sprites\r\n\r\n\t\tvar scale = [];\r\n\r\n\t\tfor ( var i = 0, l = sprites.length; i < l; i ++ ) {\r\n\r\n\t\t\tvar sprite = sprites[ i ];\r\n\t\t\tvar material = sprite.material;\r\n\r\n\t\t\tgl.uniform1f( uniforms.alphaTest, material.alphaTest );\r\n\t\t\tgl.uniformMatrix4fv( uniforms.modelViewMatrix, false, sprite._modelViewMatrix.elements );\r\n\r\n\t\t\tscale[ 0 ] = sprite.scale.x;\r\n\t\t\tscale[ 1 ] = sprite.scale.y;\r\n\r\n\t\t\tvar fogType = 0;\r\n\r\n\t\t\tif ( scene.fog && material.fog ) {\r\n\r\n\t\t\t\tfogType = sceneFogType;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( oldFogType !== fogType ) {\r\n\r\n\t\t\t\tgl.uniform1i( uniforms.fogType, fogType );\r\n\t\t\t\toldFogType = fogType;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( material.map !== null ) {\r\n\r\n\t\t\t\tgl.uniform2f( uniforms.uvOffset, material.map.offset.x, material.map.offset.y );\r\n\t\t\t\tgl.uniform2f( uniforms.uvScale, material.map.repeat.x, material.map.repeat.y );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tgl.uniform2f( uniforms.uvOffset, 0, 0 );\r\n\t\t\t\tgl.uniform2f( uniforms.uvScale, 1, 1 );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tgl.uniform1f( uniforms.opacity, material.opacity );\r\n\t\t\tgl.uniform3f( uniforms.color, material.color.r, material.color.g, material.color.b );\r\n\r\n\t\t\tgl.uniform1f( uniforms.rotation, material.rotation );\r\n\t\t\tgl.uniform2fv( uniforms.scale, scale );\r\n\r\n\t\t\trenderer.setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst );\r\n\t\t\trenderer.setDepthTest( material.depthTest );\r\n\t\t\trenderer.setDepthWrite( material.depthWrite );\r\n\r\n\t\t\tif ( material.map && material.map.image && material.map.image.width ) {\r\n\r\n\t\t\t\trenderer.setTexture( material.map, 0 );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\trenderer.setTexture( texture, 0 );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tgl.drawElements( gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 );\r\n\r\n\t\t}\r\n\r\n\t\t// restore gl\r\n\r\n\t\tgl.enable( gl.CULL_FACE );\r\n\t\t\r\n\t\trenderer.resetGLState();\r\n\r\n\t};\r\n\r\n\tfunction createProgram () {\r\n\r\n\t\tvar program = gl.createProgram();\r\n\r\n\t\tvar vertexShader = gl.createShader( gl.VERTEX_SHADER );\r\n\t\tvar fragmentShader = gl.createShader( gl.FRAGMENT_SHADER );\r\n\r\n\t\tgl.shaderSource( vertexShader, [\r\n\r\n\t\t\t'precision ' + renderer.getPrecision() + ' float;',\r\n\r\n\t\t\t'uniform mat4 modelViewMatrix;',\r\n\t\t\t'uniform mat4 projectionMatrix;',\r\n\t\t\t'uniform float rotation;',\r\n\t\t\t'uniform vec2 scale;',\r\n\t\t\t'uniform vec2 uvOffset;',\r\n\t\t\t'uniform vec2 uvScale;',\r\n\r\n\t\t\t'attribute vec2 position;',\r\n\t\t\t'attribute vec2 uv;',\r\n\r\n\t\t\t'varying vec2 vUV;',\r\n\r\n\t\t\t'void main() {',\r\n\r\n\t\t\t\t'vUV = uvOffset + uv * uvScale;',\r\n\r\n\t\t\t\t'vec2 alignedPosition = position * scale;',\r\n\r\n\t\t\t\t'vec2 rotatedPosition;',\r\n\t\t\t\t'rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;',\r\n\t\t\t\t'rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;',\r\n\r\n\t\t\t\t'vec4 finalPosition;',\r\n\r\n\t\t\t\t'finalPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );',\r\n\t\t\t\t'finalPosition.xy += rotatedPosition;',\r\n\t\t\t\t'finalPosition = projectionMatrix * finalPosition;',\r\n\r\n\t\t\t\t'gl_Position = finalPosition;',\r\n\r\n\t\t\t'}'\r\n\r\n\t\t].join( '\\n' ) );\r\n\r\n\t\tgl.shaderSource( fragmentShader, [\r\n\r\n\t\t\t'precision ' + renderer.getPrecision() + ' float;',\r\n\r\n\t\t\t'uniform vec3 color;',\r\n\t\t\t'uniform sampler2D map;',\r\n\t\t\t'uniform float opacity;',\r\n\r\n\t\t\t'uniform int fogType;',\r\n\t\t\t'uniform vec3 fogColor;',\r\n\t\t\t'uniform float fogDensity;',\r\n\t\t\t'uniform float fogNear;',\r\n\t\t\t'uniform float fogFar;',\r\n\t\t\t'uniform float alphaTest;',\r\n\r\n\t\t\t'varying vec2 vUV;',\r\n\r\n\t\t\t'void main() {',\r\n\r\n\t\t\t\t'vec4 texture = texture2D( map, vUV );',\r\n\r\n\t\t\t\t'if ( texture.a < alphaTest ) discard;',\r\n\r\n\t\t\t\t'gl_FragColor = vec4( color * texture.xyz, texture.a * opacity );',\r\n\r\n\t\t\t\t'if ( fogType > 0 ) {',\r\n\r\n\t\t\t\t\t'float depth = gl_FragCoord.z / gl_FragCoord.w;',\r\n\t\t\t\t\t'float fogFactor = 0.0;',\r\n\r\n\t\t\t\t\t'if ( fogType == 1 ) {',\r\n\r\n\t\t\t\t\t\t'fogFactor = smoothstep( fogNear, fogFar, depth );',\r\n\r\n\t\t\t\t\t'} else {',\r\n\r\n\t\t\t\t\t\t'const float LOG2 = 1.442695;',\r\n\t\t\t\t\t\t'float fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );',\r\n\t\t\t\t\t\t'fogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );',\r\n\r\n\t\t\t\t\t'}',\r\n\r\n\t\t\t\t\t'gl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );',\r\n\r\n\t\t\t\t'}',\r\n\r\n\t\t\t'}'\r\n\r\n\t\t].join( '\\n' ) );\r\n\r\n\t\tgl.compileShader( vertexShader );\r\n\t\tgl.compileShader( fragmentShader );\r\n\r\n\t\tgl.attachShader( program, vertexShader );\r\n\t\tgl.attachShader( program, fragmentShader );\r\n\r\n\t\tgl.linkProgram( program );\r\n\r\n\t\treturn program;\r\n\r\n\t};\r\n\r\n\tfunction painterSortStable ( a, b ) {\r\n\r\n\t\tif ( a.z !== b.z ) {\r\n\r\n\t\t\treturn b.z - a.z;\r\n\r\n\t\t} else {\r\n\r\n\t\t\treturn b.id - a.id;\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n};\r\n\r\n// File:src/extras/GeometryUtils.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.GeometryUtils = {\r\n\r\n\tmerge: function ( geometry1, geometry2, materialIndexOffset ) {\r\n\r\n\t\tconsole.warn( 'THREE.GeometryUtils: .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead.' );\r\n\r\n\t\tvar matrix;\r\n\r\n\t\tif ( geometry2 instanceof THREE.Mesh ) {\r\n\r\n\t\t\tgeometry2.matrixAutoUpdate && geometry2.updateMatrix();\r\n\r\n\t\t\tmatrix = geometry2.matrix;\r\n\t\t\tgeometry2 = geometry2.geometry;\r\n\r\n\t\t}\r\n\r\n\t\tgeometry1.merge( geometry2, matrix, materialIndexOffset );\r\n\r\n\t},\r\n\r\n\tcenter: function ( geometry ) {\r\n\r\n\t\tconsole.warn( 'THREE.GeometryUtils: .center() has been moved to Geometry. Use geometry.center() instead.' );\r\n\t\treturn geometry.center();\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/extras/ImageUtils.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author Daosheng Mu / https://github.com/DaoshengMu/\r\n */\r\n\r\nTHREE.ImageUtils = {\r\n\r\n\tcrossOrigin: undefined,\r\n\r\n\tloadTexture: function ( url, mapping, onLoad, onError ) {\r\n\r\n\t\tvar loader = new THREE.ImageLoader();\r\n\t\tloader.crossOrigin = this.crossOrigin;\r\n\r\n\t\tvar texture = new THREE.Texture( undefined, mapping );\r\n\r\n\t\tloader.load( url, function ( image ) {\r\n\r\n\t\t\ttexture.image = image;\r\n\t\t\ttexture.needsUpdate = true;\r\n\r\n\t\t\tif ( onLoad ) onLoad( texture );\r\n\r\n\t\t}, undefined, function ( event ) {\r\n\r\n\t\t\tif ( onError ) onError( event );\r\n\r\n\t\t} );\r\n\r\n\t\ttexture.sourceFile = url;\r\n\r\n\t\treturn texture;\r\n\r\n\t},\r\n\r\n\tloadTextureCube: function ( array, mapping, onLoad, onError ) {\r\n\r\n\t\tvar images = [];\r\n\r\n\t\tvar loader = new THREE.ImageLoader();\r\n\t\tloader.crossOrigin = this.crossOrigin;\r\n\r\n\t\tvar texture = new THREE.CubeTexture( images, mapping );\r\n\r\n\t\t// no flipping needed for cube textures\r\n\r\n\t\ttexture.flipY = false;\r\n\r\n\t\tvar loaded = 0;\r\n\r\n\t\tvar loadTexture = function ( i ) {\r\n\r\n\t\t\tloader.load( array[ i ], function ( image ) {\r\n\r\n\t\t\t\ttexture.images[ i ] = image;\r\n\r\n\t\t\t\tloaded += 1;\r\n\r\n\t\t\t\tif ( loaded === 6 ) {\r\n\r\n\t\t\t\t\ttexture.needsUpdate = true;\r\n\r\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} );\r\n\r\n\t\t}\r\n\r\n\t\tfor ( var i = 0, il = array.length; i < il; ++ i ) {\r\n\r\n\t\t\tloadTexture( i );\r\n\r\n\t\t}\r\n\r\n\t\treturn texture;\r\n\r\n\t},\r\n\r\n\tloadCompressedTexture: function () {\r\n\r\n\t\tconsole.error( 'THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.' )\r\n\r\n\t},\r\n\r\n\tloadCompressedTextureCube: function () {\r\n\r\n\t\tconsole.error( 'THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.' )\r\n\r\n\t},\r\n\r\n\tgetNormalMap: function ( image, depth ) {\r\n\r\n\t\t// Adapted from http://www.paulbrunt.co.uk/lab/heightnormal/\r\n\r\n\t\tvar cross = function ( a, b ) {\r\n\r\n\t\t\treturn [ a[ 1 ] * b[ 2 ] - a[ 2 ] * b[ 1 ], a[ 2 ] * b[ 0 ] - a[ 0 ] * b[ 2 ], a[ 0 ] * b[ 1 ] - a[ 1 ] * b[ 0 ] ];\r\n\r\n\t\t}\r\n\r\n\t\tvar subtract = function ( a, b ) {\r\n\r\n\t\t\treturn [ a[ 0 ] - b[ 0 ], a[ 1 ] - b[ 1 ], a[ 2 ] - b[ 2 ] ];\r\n\r\n\t\t}\r\n\r\n\t\tvar normalize = function ( a ) {\r\n\r\n\t\t\tvar l = Math.sqrt( a[ 0 ] * a[ 0 ] + a[ 1 ] * a[ 1 ] + a[ 2 ] * a[ 2 ] );\r\n\t\t\treturn [ a[ 0 ] / l, a[ 1 ] / l, a[ 2 ] / l ];\r\n\r\n\t\t}\r\n\r\n\t\tdepth = depth | 1;\r\n\r\n\t\tvar width = image.width;\r\n\t\tvar height = image.height;\r\n\r\n\t\tvar canvas = document.createElement( 'canvas' );\r\n\t\tcanvas.width = width;\r\n\t\tcanvas.height = height;\r\n\r\n\t\tvar context = canvas.getContext( '2d' );\r\n\t\tcontext.drawImage( image, 0, 0 );\r\n\r\n\t\tvar data = context.getImageData( 0, 0, width, height ).data;\r\n\t\tvar imageData = context.createImageData( width, height );\r\n\t\tvar output = imageData.data;\r\n\r\n\t\tfor ( var x = 0; x < width; x ++ ) {\r\n\r\n\t\t\tfor ( var y = 0; y < height; y ++ ) {\r\n\r\n\t\t\t\tvar ly = y - 1 < 0 ? 0 : y - 1;\r\n\t\t\t\tvar uy = y + 1 > height - 1 ? height - 1 : y + 1;\r\n\t\t\t\tvar lx = x - 1 < 0 ? 0 : x - 1;\r\n\t\t\t\tvar ux = x + 1 > width - 1 ? width - 1 : x + 1;\r\n\r\n\t\t\t\tvar points = [];\r\n\t\t\t\tvar origin = [ 0, 0, data[ ( y * width + x ) * 4 ] / 255 * depth ];\r\n\t\t\t\tpoints.push( [ - 1, 0, data[ ( y * width + lx ) * 4 ] / 255 * depth ] );\r\n\t\t\t\tpoints.push( [ - 1, - 1, data[ ( ly * width + lx ) * 4 ] / 255 * depth ] );\r\n\t\t\t\tpoints.push( [ 0, - 1, data[ ( ly * width + x ) * 4 ] / 255 * depth ] );\r\n\t\t\t\tpoints.push( [ 1, - 1, data[ ( ly * width + ux ) * 4 ] / 255 * depth ] );\r\n\t\t\t\tpoints.push( [ 1, 0, data[ ( y * width + ux ) * 4 ] / 255 * depth ] );\r\n\t\t\t\tpoints.push( [ 1, 1, data[ ( uy * width + ux ) * 4 ] / 255 * depth ] );\r\n\t\t\t\tpoints.push( [ 0, 1, data[ ( uy * width + x ) * 4 ] / 255 * depth ] );\r\n\t\t\t\tpoints.push( [ - 1, 1, data[ ( uy * width + lx ) * 4 ] / 255 * depth ] );\r\n\r\n\t\t\t\tvar normals = [];\r\n\t\t\t\tvar num_points = points.length;\r\n\r\n\t\t\t\tfor ( var i = 0; i < num_points; i ++ ) {\r\n\r\n\t\t\t\t\tvar v1 = points[ i ];\r\n\t\t\t\t\tvar v2 = points[ ( i + 1 ) % num_points ];\r\n\t\t\t\t\tv1 = subtract( v1, origin );\r\n\t\t\t\t\tv2 = subtract( v2, origin );\r\n\t\t\t\t\tnormals.push( normalize( cross( v1, v2 ) ) );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar normal = [ 0, 0, 0 ];\r\n\r\n\t\t\t\tfor ( var i = 0; i < normals.length; i ++ ) {\r\n\r\n\t\t\t\t\tnormal[ 0 ] += normals[ i ][ 0 ];\r\n\t\t\t\t\tnormal[ 1 ] += normals[ i ][ 1 ];\r\n\t\t\t\t\tnormal[ 2 ] += normals[ i ][ 2 ];\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tnormal[ 0 ] /= normals.length;\r\n\t\t\t\tnormal[ 1 ] /= normals.length;\r\n\t\t\t\tnormal[ 2 ] /= normals.length;\r\n\r\n\t\t\t\tvar idx = ( y * width + x ) * 4;\r\n\r\n\t\t\t\toutput[ idx ] = ( ( normal[ 0 ] + 1.0 ) / 2.0 * 255 ) | 0;\r\n\t\t\t\toutput[ idx + 1 ] = ( ( normal[ 1 ] + 1.0 ) / 2.0 * 255 ) | 0;\r\n\t\t\t\toutput[ idx + 2 ] = ( normal[ 2 ] * 255 ) | 0;\r\n\t\t\t\toutput[ idx + 3 ] = 255;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tcontext.putImageData( imageData, 0, 0 );\r\n\r\n\t\treturn canvas;\r\n\r\n\t},\r\n\r\n\tgenerateDataTexture: function ( width, height, color ) {\r\n\r\n\t\tvar size = width * height;\r\n\t\tvar data = new Uint8Array( 3 * size );\r\n\r\n\t\tvar r = Math.floor( color.r * 255 );\r\n\t\tvar g = Math.floor( color.g * 255 );\r\n\t\tvar b = Math.floor( color.b * 255 );\r\n\r\n\t\tfor ( var i = 0; i < size; i ++ ) {\r\n\r\n\t\t\tdata[ i * 3 ] \t = r;\r\n\t\t\tdata[ i * 3 + 1 ] = g;\r\n\t\t\tdata[ i * 3 + 2 ] = b;\r\n\r\n\t\t}\r\n\r\n\t\tvar texture = new THREE.DataTexture( data, width, height, THREE.RGBFormat );\r\n\t\ttexture.needsUpdate = true;\r\n\r\n\t\treturn texture;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/extras/SceneUtils.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.SceneUtils = {\r\n\r\n\tcreateMultiMaterialObject: function ( geometry, materials ) {\r\n\r\n\t\tvar group = new THREE.Object3D();\r\n\r\n\t\tfor ( var i = 0, l = materials.length; i < l; i ++ ) {\r\n\r\n\t\t\tgroup.add( new THREE.Mesh( geometry, materials[ i ] ) );\r\n\r\n\t\t}\r\n\r\n\t\treturn group;\r\n\r\n\t},\r\n\r\n\tdetach: function ( child, parent, scene ) {\r\n\r\n\t\tchild.applyMatrix( parent.matrixWorld );\r\n\t\tparent.remove( child );\r\n\t\tscene.add( child );\r\n\r\n\t},\r\n\r\n\tattach: function ( child, scene, parent ) {\r\n\r\n\t\tvar matrixWorldInverse = new THREE.Matrix4();\r\n\t\tmatrixWorldInverse.getInverse( parent.matrixWorld );\r\n\t\tchild.applyMatrix( matrixWorldInverse );\r\n\r\n\t\tscene.remove( child );\r\n\t\tparent.add( child );\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/extras/FontUtils.js\r\n\r\n/**\r\n * @author zz85 / http://www.lab4games.net/zz85/blog\r\n * @author alteredq / http://alteredqualia.com/\r\n *\r\n * For Text operations in three.js (See TextGeometry)\r\n *\r\n * It uses techniques used in:\r\n *\r\n * \ttypeface.js and canvastext\r\n * \t\tFor converting fonts and rendering with javascript\r\n *\t\thttp://typeface.neocracy.org\r\n *\r\n *\tTriangulation ported from AS3\r\n *\t\tSimple Polygon Triangulation\r\n *\t\thttp://actionsnippet.com/?p=1462\r\n *\r\n * \tA Method to triangulate shapes with holes\r\n *\t\thttp://www.sakri.net/blog/2009/06/12/an-approach-to-triangulating-polygons-with-holes/\r\n *\r\n */\r\n\r\nTHREE.FontUtils = {\r\n\r\n\tfaces: {},\r\n\r\n\t// Just for now. face[weight][style]\r\n\r\n\tface: 'helvetiker',\r\n\tweight: 'normal',\r\n\tstyle: 'normal',\r\n\tsize: 150,\r\n\tdivisions: 10,\r\n\r\n\tgetFace: function () {\r\n\r\n\t\ttry {\r\n\r\n\t\t\treturn this.faces[ this.face ][ this.weight ][ this.style ];\r\n\r\n\t\t} catch (e) {\r\n\r\n\t\t\tthrow \"The font \" + this.face + \" with \" + this.weight + \" weight and \" + this.style + \" style is missing.\"\r\n\r\n\t\t};\r\n\r\n\t},\r\n\r\n\tloadFace: function ( data ) {\r\n\r\n\t\tvar family = data.familyName.toLowerCase();\r\n\r\n\t\tvar ThreeFont = this;\r\n\r\n\t\tThreeFont.faces[ family ] = ThreeFont.faces[ family ] || {};\r\n\r\n\t\tThreeFont.faces[ family ][ data.cssFontWeight ] = ThreeFont.faces[ family ][ data.cssFontWeight ] || {};\r\n\t\tThreeFont.faces[ family ][ data.cssFontWeight ][ data.cssFontStyle ] = data;\r\n\r\n\t\tvar face = ThreeFont.faces[ family ][ data.cssFontWeight ][ data.cssFontStyle ] = data;\r\n\r\n\t\treturn data;\r\n\r\n\t},\r\n\r\n\tdrawText: function ( text ) {\r\n\r\n\t\tvar characterPts = [], allPts = [];\r\n\r\n\t\t// RenderText\r\n\r\n\t\tvar i, p,\r\n\t\t\tface = this.getFace(),\r\n\t\t\tscale = this.size / face.resolution,\r\n\t\t\toffset = 0,\r\n\t\t\tchars = String( text ).split( '' ),\r\n\t\t\tlength = chars.length;\r\n\r\n\t\tvar fontPaths = [];\r\n\r\n\t\tfor ( i = 0; i < length; i ++ ) {\r\n\r\n\t\t\tvar path = new THREE.Path();\r\n\r\n\t\t\tvar ret = this.extractGlyphPoints( chars[ i ], face, scale, offset, path );\r\n\t\t\toffset += ret.offset;\r\n\r\n\t\t\tfontPaths.push( ret.path );\r\n\r\n\t\t}\r\n\r\n\t\t// get the width\r\n\r\n\t\tvar width = offset / 2;\r\n\t\t//\r\n\t\t// for ( p = 0; p < allPts.length; p++ ) {\r\n\t\t//\r\n\t\t// \tallPts[ p ].x -= width;\r\n\t\t//\r\n\t\t// }\r\n\r\n\t\t//var extract = this.extractPoints( allPts, characterPts );\r\n\t\t//extract.contour = allPts;\r\n\r\n\t\t//extract.paths = fontPaths;\r\n\t\t//extract.offset = width;\r\n\r\n\t\treturn { paths: fontPaths, offset: width };\r\n\r\n\t},\r\n\r\n\r\n\r\n\r\n\textractGlyphPoints: function ( c, face, scale, offset, path ) {\r\n\r\n\t\tvar pts = [];\r\n\r\n\t\tvar i, i2, divisions,\r\n\t\t\toutline, action, length,\r\n\t\t\tscaleX, scaleY,\r\n\t\t\tx, y, cpx, cpy, cpx0, cpy0, cpx1, cpy1, cpx2, cpy2,\r\n\t\t\tlaste,\r\n\t\t\tglyph = face.glyphs[ c ] || face.glyphs[ '?' ];\r\n\r\n\t\tif ( ! glyph ) return;\r\n\r\n\t\tif ( glyph.o ) {\r\n\r\n\t\t\toutline = glyph._cachedOutline || ( glyph._cachedOutline = glyph.o.split( ' ' ) );\r\n\t\t\tlength = outline.length;\r\n\r\n\t\t\tscaleX = scale;\r\n\t\t\tscaleY = scale;\r\n\r\n\t\t\tfor ( i = 0; i < length; ) {\r\n\r\n\t\t\t\taction = outline[ i ++ ];\r\n\r\n\t\t\t\t//console.log( action );\r\n\r\n\t\t\t\tswitch ( action ) {\r\n\r\n\t\t\t\tcase 'm':\r\n\r\n\t\t\t\t\t// Move To\r\n\r\n\t\t\t\t\tx = outline[ i ++ ] * scaleX + offset;\r\n\t\t\t\t\ty = outline[ i ++ ] * scaleY;\r\n\r\n\t\t\t\t\tpath.moveTo( x, y );\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'l':\r\n\r\n\t\t\t\t\t// Line To\r\n\r\n\t\t\t\t\tx = outline[ i ++ ] * scaleX + offset;\r\n\t\t\t\t\ty = outline[ i ++ ] * scaleY;\r\n\t\t\t\t\tpath.lineTo( x,y );\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'q':\r\n\r\n\t\t\t\t\t// QuadraticCurveTo\r\n\r\n\t\t\t\t\tcpx = outline[ i ++ ] * scaleX + offset;\r\n\t\t\t\t\tcpy = outline[ i ++ ] * scaleY;\r\n\t\t\t\t\tcpx1 = outline[ i ++ ] * scaleX + offset;\r\n\t\t\t\t\tcpy1 = outline[ i ++ ] * scaleY;\r\n\r\n\t\t\t\t\tpath.quadraticCurveTo( cpx1, cpy1, cpx, cpy );\r\n\r\n\t\t\t\t\tlaste = pts[ pts.length - 1 ];\r\n\r\n\t\t\t\t\tif ( laste ) {\r\n\r\n\t\t\t\t\t\tcpx0 = laste.x;\r\n\t\t\t\t\t\tcpy0 = laste.y;\r\n\r\n\t\t\t\t\t\tfor ( i2 = 1, divisions = this.divisions; i2 <= divisions; i2 ++ ) {\r\n\r\n\t\t\t\t\t\t\tvar t = i2 / divisions;\r\n\t\t\t\t\t\t\tvar tx = THREE.Shape.Utils.b2( t, cpx0, cpx1, cpx );\r\n\t\t\t\t\t\t\tvar ty = THREE.Shape.Utils.b2( t, cpy0, cpy1, cpy );\r\n\t\t\t\t\t }\r\n\r\n\t\t\t\t }\r\n\r\n\t\t\t\t break;\r\n\r\n\t\t\t\tcase 'b':\r\n\r\n\t\t\t\t\t// Cubic Bezier Curve\r\n\r\n\t\t\t\t\tcpx = outline[ i ++ ] * scaleX + offset;\r\n\t\t\t\t\tcpy = outline[ i ++ ] * scaleY;\r\n\t\t\t\t\tcpx1 = outline[ i ++ ] * scaleX + offset;\r\n\t\t\t\t\tcpy1 = outline[ i ++ ] * scaleY;\r\n\t\t\t\t\tcpx2 = outline[ i ++ ] * scaleX + offset;\r\n\t\t\t\t\tcpy2 = outline[ i ++ ] * scaleY;\r\n\r\n\t\t\t\t\tpath.bezierCurveTo( cpx1, cpy1, cpx2, cpy2, cpx, cpy );\r\n\r\n\t\t\t\t\tlaste = pts[ pts.length - 1 ];\r\n\r\n\t\t\t\t\tif ( laste ) {\r\n\r\n\t\t\t\t\t\tcpx0 = laste.x;\r\n\t\t\t\t\t\tcpy0 = laste.y;\r\n\r\n\t\t\t\t\t\tfor ( i2 = 1, divisions = this.divisions; i2 <= divisions; i2 ++ ) {\r\n\r\n\t\t\t\t\t\t\tvar t = i2 / divisions;\r\n\t\t\t\t\t\t\tvar tx = THREE.Shape.Utils.b3( t, cpx0, cpx1, cpx2, cpx );\r\n\t\t\t\t\t\t\tvar ty = THREE.Shape.Utils.b3( t, cpy0, cpy1, cpy2, cpy );\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\r\n\t\treturn { offset: glyph.ha * scale, path:path };\r\n\t}\r\n\r\n};\r\n\r\n\r\nTHREE.FontUtils.generateShapes = function ( text, parameters ) {\r\n\r\n\t// Parameters \r\n\r\n\tparameters = parameters || {};\r\n\r\n\tvar size = parameters.size !== undefined ? parameters.size : 100;\r\n\tvar curveSegments = parameters.curveSegments !== undefined ? parameters.curveSegments : 4;\r\n\r\n\tvar font = parameters.font !== undefined ? parameters.font : 'helvetiker';\r\n\tvar weight = parameters.weight !== undefined ? parameters.weight : 'normal';\r\n\tvar style = parameters.style !== undefined ? parameters.style : 'normal';\r\n\r\n\tTHREE.FontUtils.size = size;\r\n\tTHREE.FontUtils.divisions = curveSegments;\r\n\r\n\tTHREE.FontUtils.face = font;\r\n\tTHREE.FontUtils.weight = weight;\r\n\tTHREE.FontUtils.style = style;\r\n\r\n\t// Get a Font data json object\r\n\r\n\tvar data = THREE.FontUtils.drawText( text );\r\n\r\n\tvar paths = data.paths;\r\n\tvar shapes = [];\r\n\r\n\tfor ( var p = 0, pl = paths.length; p < pl; p ++ ) {\r\n\r\n\t\tArray.prototype.push.apply( shapes, paths[ p ].toShapes() );\r\n\r\n\t}\r\n\r\n\treturn shapes;\r\n\r\n};\r\n\r\n\r\n/**\r\n * This code is a quick port of code written in C++ which was submitted to\r\n * flipcode.com by John W. Ratcliff // July 22, 2000\r\n * See original code and more information here:\r\n * http://www.flipcode.com/archives/Efficient_Polygon_Triangulation.shtml\r\n *\r\n * ported to actionscript by Zevan Rosser\r\n * www.actionsnippet.com\r\n *\r\n * ported to javascript by Joshua Koo\r\n * http://www.lab4games.net/zz85/blog\r\n *\r\n */\r\n\r\n\r\n( function ( namespace ) {\r\n\r\n\tvar EPSILON = 0.0000000001;\r\n\r\n\t// takes in an contour array and returns\r\n\r\n\tvar process = function ( contour, indices ) {\r\n\r\n\t\tvar n = contour.length;\r\n\r\n\t\tif ( n < 3 ) return null;\r\n\r\n\t\tvar result = [],\r\n\t\t\tverts = [],\r\n\t\t\tvertIndices = [];\r\n\r\n\t\t/* we want a counter-clockwise polygon in verts */\r\n\r\n\t\tvar u, v, w;\r\n\r\n\t\tif ( area( contour ) > 0.0 ) {\r\n\r\n\t\t\tfor ( v = 0; v < n; v ++ ) verts[ v ] = v;\r\n\r\n\t\t} else {\r\n\r\n\t\t\tfor ( v = 0; v < n; v ++ ) verts[ v ] = ( n - 1 ) - v;\r\n\r\n\t\t}\r\n\r\n\t\tvar nv = n;\r\n\r\n\t\t/* remove nv - 2 vertices, creating 1 triangle every time */\r\n\r\n\t\tvar count = 2 * nv; /* error detection */\r\n\r\n\t\tfor ( v = nv - 1; nv > 2; ) {\r\n\r\n\t\t\t/* if we loop, it is probably a non-simple polygon */\r\n\r\n\t\t\tif ( ( count -- ) <= 0 ) {\r\n\r\n\t\t\t\t//** Triangulate: ERROR - probable bad polygon!\r\n\r\n\t\t\t\t//throw ( \"Warning, unable to triangulate polygon!\" );\r\n\t\t\t\t//return null;\r\n\t\t\t\t// Sometimes warning is fine, especially polygons are triangulated in reverse.\r\n\t\t\t\tconsole.log( 'Warning, unable to triangulate polygon!' );\r\n\r\n\t\t\t\tif ( indices ) return vertIndices;\r\n\t\t\t\treturn result;\r\n\r\n\t\t\t}\r\n\r\n\t\t\t/* three consecutive vertices in current polygon, */\r\n\r\n\t\t\tu = v; \t \tif ( nv <= u ) u = 0; /* previous */\r\n\t\t\tv = u + 1; if ( nv <= v ) v = 0; /* new v */\r\n\t\t\tw = v + 1; if ( nv <= w ) w = 0; /* next */\r\n\r\n\t\t\tif ( snip( contour, u, v, w, nv, verts ) ) {\r\n\r\n\t\t\t\tvar a, b, c, s, t;\r\n\r\n\t\t\t\t/* true names of the vertices */\r\n\r\n\t\t\t\ta = verts[ u ];\r\n\t\t\t\tb = verts[ v ];\r\n\t\t\t\tc = verts[ w ];\r\n\r\n\t\t\t\t/* output Triangle */\r\n\r\n\t\t\t\tresult.push( [ contour[ a ],\r\n\t\t\t\t\tcontour[ b ],\r\n\t\t\t\t\tcontour[ c ] ] );\r\n\r\n\r\n\t\t\t\tvertIndices.push( [ verts[ u ], verts[ v ], verts[ w ] ] );\r\n\r\n\t\t\t\t/* remove v from the remaining polygon */\r\n\r\n\t\t\t\tfor ( s = v, t = v + 1; t < nv; s++, t++ ) {\r\n\r\n\t\t\t\t\tverts[ s ] = verts[ t ];\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tnv --;\r\n\r\n\t\t\t\t/* reset error detection counter */\r\n\r\n\t\t\t\tcount = 2 * nv;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( indices ) return vertIndices;\r\n\t\treturn result;\r\n\r\n\t};\r\n\r\n\t// calculate area of the contour polygon\r\n\r\n\tvar area = function ( contour ) {\r\n\r\n\t\tvar n = contour.length;\r\n\t\tvar a = 0.0;\r\n\r\n\t\tfor ( var p = n - 1, q = 0; q < n; p = q ++ ) {\r\n\r\n\t\t\ta += contour[ p ].x * contour[ q ].y - contour[ q ].x * contour[ p ].y;\r\n\r\n\t\t}\r\n\r\n\t\treturn a * 0.5;\r\n\r\n\t};\r\n\r\n\tvar snip = function ( contour, u, v, w, n, verts ) {\r\n\r\n\t\tvar p;\r\n\t\tvar ax, ay, bx, by;\r\n\t\tvar cx, cy, px, py;\r\n\r\n\t\tax = contour[ verts[ u ] ].x;\r\n\t\tay = contour[ verts[ u ] ].y;\r\n\r\n\t\tbx = contour[ verts[ v ] ].x;\r\n\t\tby = contour[ verts[ v ] ].y;\r\n\r\n\t\tcx = contour[ verts[ w ] ].x;\r\n\t\tcy = contour[ verts[ w ] ].y;\r\n\r\n\t\tif ( EPSILON > ( ( ( bx - ax ) * ( cy - ay ) ) - ( ( by - ay ) * ( cx - ax ) ) ) ) return false;\r\n\r\n\t\tvar aX, aY, bX, bY, cX, cY;\r\n\t\tvar apx, apy, bpx, bpy, cpx, cpy;\r\n\t\tvar cCROSSap, bCROSScp, aCROSSbp;\r\n\r\n\t\taX = cx - bx; aY = cy - by;\r\n\t\tbX = ax - cx; bY = ay - cy;\r\n\t\tcX = bx - ax; cY = by - ay;\r\n\r\n\t\tfor ( p = 0; p < n; p ++ ) {\r\n\r\n\t\t\tpx = contour[ verts[ p ] ].x\r\n\t\t\tpy = contour[ verts[ p ] ].y\r\n\r\n\t\t\tif ( ( ( px === ax ) && ( py === ay ) ) ||\r\n\t\t\t\t ( ( px === bx ) && ( py === by ) ) ||\r\n\t\t\t\t ( ( px === cx ) && ( py === cy ) ) )\tcontinue;\r\n\r\n\t\t\tapx = px - ax; apy = py - ay;\r\n\t\t\tbpx = px - bx; bpy = py - by;\r\n\t\t\tcpx = px - cx; cpy = py - cy;\r\n\r\n\t\t\t// see if p is inside triangle abc\r\n\r\n\t\t\taCROSSbp = aX * bpy - aY * bpx;\r\n\t\t\tcCROSSap = cX * apy - cY * apx;\r\n\t\t\tbCROSScp = bX * cpy - bY * cpx;\r\n\r\n\t\t\tif ( ( aCROSSbp >= - EPSILON ) && ( bCROSScp >= - EPSILON ) && ( cCROSSap >= - EPSILON ) ) return false;\r\n\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\r\n\t};\r\n\r\n\r\n\tnamespace.Triangulate = process;\r\n\tnamespace.Triangulate.area = area;\r\n\r\n\treturn namespace;\r\n\r\n} )( THREE.FontUtils );\r\n\r\n// To use the typeface.js face files, hook up the API\r\nself._typeface_js = { faces: THREE.FontUtils.faces, loadFace: THREE.FontUtils.loadFace };\r\nTHREE.typeface_js = self._typeface_js;\r\n\r\n// File:src/extras/audio/Audio.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.Audio = function ( listener ) {\r\n\r\n\tTHREE.Object3D.call( this );\r\n\r\n\tthis.type = 'Audio';\r\n\r\n\tthis.context = listener.context;\r\n\tthis.source = this.context.createBufferSource();\r\n\r\n\tthis.gain = this.context.createGain();\r\n\tthis.gain.connect( this.context.destination );\r\n\r\n\tthis.panner = this.context.createPanner();\r\n\tthis.panner.connect( this.gain );\r\n\r\n};\r\n\r\nTHREE.Audio.prototype = Object.create( THREE.Object3D.prototype );\r\n\r\nTHREE.Audio.prototype.load = function ( file ) {\r\n\r\n\tvar scope = this;\r\n\r\n\tvar request = new XMLHttpRequest();\r\n\trequest.open( 'GET', file, true );\r\n\trequest.responseType = 'arraybuffer';\r\n\trequest.onload = function ( e ) {\r\n\r\n\t\tscope.context.decodeAudioData( this.response, function ( buffer ) {\r\n\r\n\t\t\tscope.source.buffer = buffer;\r\n\t\t\tscope.source.connect( scope.panner );\r\n\t\t\tscope.source.start( 0 );\r\n\r\n\t\t} );\r\n\r\n\t};\r\n\trequest.send();\r\n\r\n\treturn this;\r\n\r\n};\r\n\r\nTHREE.Audio.prototype.setLoop = function ( value ) {\r\n\r\n\tthis.source.loop = value;\r\n\r\n};\r\n\r\nTHREE.Audio.prototype.setRefDistance = function ( value ) {\r\n\r\n\tthis.panner.refDistance = value;\r\n\r\n};\r\n\r\nTHREE.Audio.prototype.setRolloffFactor = function ( value ) {\r\n\r\n\tthis.panner.rolloffFactor = value;\r\n\r\n};\r\n\r\nTHREE.Audio.prototype.updateMatrixWorld = ( function () {\r\n\r\n\tvar position = new THREE.Vector3();\r\n\r\n\treturn function ( force ) {\r\n\r\n\t\tTHREE.Object3D.prototype.updateMatrixWorld.call( this, force );\r\n\r\n\t\tposition.setFromMatrixPosition( this.matrixWorld );\r\n\r\n\t\tthis.panner.setPosition( position.x, position.y, position.z );\r\n\r\n\t};\r\n\r\n} )();\r\n\r\n// File:src/extras/audio/AudioListener.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.AudioListener = function () {\r\n\r\n\tTHREE.Object3D.call( this );\r\n\r\n\tthis.type = 'AudioListener';\r\n\r\n\tthis.context = new ( window.AudioContext || window.webkitAudioContext )();\r\n\r\n};\r\n\r\nTHREE.AudioListener.prototype = Object.create( THREE.Object3D.prototype );\r\n\r\nTHREE.AudioListener.prototype.updateMatrixWorld = ( function () {\r\n\r\n\tvar position = new THREE.Vector3();\r\n\tvar quaternion = new THREE.Quaternion();\r\n\tvar scale = new THREE.Vector3();\r\n\r\n\tvar orientation = new THREE.Vector3();\r\n\tvar velocity = new THREE.Vector3();\r\n\r\n\tvar positionPrev = new THREE.Vector3();\r\n\r\n\treturn function ( force ) {\r\n\r\n\t\tTHREE.Object3D.prototype.updateMatrixWorld.call( this, force );\r\n\r\n\t\tvar listener = this.context.listener;\r\n\r\n\t\tthis.matrixWorld.decompose( position, quaternion, scale );\r\n\r\n\t\torientation.set( 0, 0, -1 ).applyQuaternion( quaternion );\r\n\t\tvelocity.subVectors( position, positionPrev );\r\n\r\n\t\tlistener.setPosition( position.x, position.y, position.z );\r\n\t\tlistener.setOrientation( orientation.x, orientation.y, orientation.z, this.up.x, this.up.y, this.up.z );\r\n\t\tlistener.setVelocity( velocity.x, velocity.y, velocity.z );\r\n\r\n\t\tpositionPrev.copy( position );\r\n\r\n\t};\r\n\r\n} )();\r\n\r\n// File:src/extras/core/Curve.js\r\n\r\n/**\r\n * @author zz85 / http://www.lab4games.net/zz85/blog\r\n * Extensible curve object\r\n *\r\n * Some common of Curve methods\r\n * .getPoint(t), getTangent(t)\r\n * .getPointAt(u), getTagentAt(u)\r\n * .getPoints(), .getSpacedPoints()\r\n * .getLength()\r\n * .updateArcLengths()\r\n *\r\n * This following classes subclasses THREE.Curve:\r\n *\r\n * -- 2d classes --\r\n * THREE.LineCurve\r\n * THREE.QuadraticBezierCurve\r\n * THREE.CubicBezierCurve\r\n * THREE.SplineCurve\r\n * THREE.ArcCurve\r\n * THREE.EllipseCurve\r\n *\r\n * -- 3d classes --\r\n * THREE.LineCurve3\r\n * THREE.QuadraticBezierCurve3\r\n * THREE.CubicBezierCurve3\r\n * THREE.SplineCurve3\r\n * THREE.ClosedSplineCurve3\r\n *\r\n * A series of curves can be represented as a THREE.CurvePath\r\n *\r\n **/\r\n\r\n/**************************************************************\r\n *\tAbstract Curve base class\r\n **************************************************************/\r\n\r\nTHREE.Curve = function () {\r\n\r\n};\r\n\r\n// Virtual base class method to overwrite and implement in subclasses\r\n//\t- t [0 .. 1]\r\n\r\nTHREE.Curve.prototype.getPoint = function ( t ) {\r\n\r\n\tconsole.log( \"Warning, getPoint() not implemented!\" );\r\n\treturn null;\r\n\r\n};\r\n\r\n// Get point at relative position in curve according to arc length\r\n// - u [0 .. 1]\r\n\r\nTHREE.Curve.prototype.getPointAt = function ( u ) {\r\n\r\n\tvar t = this.getUtoTmapping( u );\r\n\treturn this.getPoint( t );\r\n\r\n};\r\n\r\n// Get sequence of points using getPoint( t )\r\n\r\nTHREE.Curve.prototype.getPoints = function ( divisions ) {\r\n\r\n\tif ( ! divisions ) divisions = 5;\r\n\r\n\tvar d, pts = [];\r\n\r\n\tfor ( d = 0; d <= divisions; d ++ ) {\r\n\r\n\t\tpts.push( this.getPoint( d / divisions ) );\r\n\r\n\t}\r\n\r\n\treturn pts;\r\n\r\n};\r\n\r\n// Get sequence of points using getPointAt( u )\r\n\r\nTHREE.Curve.prototype.getSpacedPoints = function ( divisions ) {\r\n\r\n\tif ( ! divisions ) divisions = 5;\r\n\r\n\tvar d, pts = [];\r\n\r\n\tfor ( d = 0; d <= divisions; d ++ ) {\r\n\r\n\t\tpts.push( this.getPointAt( d / divisions ) );\r\n\r\n\t}\r\n\r\n\treturn pts;\r\n\r\n};\r\n\r\n// Get total curve arc length\r\n\r\nTHREE.Curve.prototype.getLength = function () {\r\n\r\n\tvar lengths = this.getLengths();\r\n\treturn lengths[ lengths.length - 1 ];\r\n\r\n};\r\n\r\n// Get list of cumulative segment lengths\r\n\r\nTHREE.Curve.prototype.getLengths = function ( divisions ) {\r\n\r\n\tif ( ! divisions ) divisions = (this.__arcLengthDivisions) ? (this.__arcLengthDivisions): 200;\r\n\r\n\tif ( this.cacheArcLengths\r\n\t\t&& ( this.cacheArcLengths.length == divisions + 1 )\r\n\t\t&& ! this.needsUpdate) {\r\n\r\n\t\t//console.log( \"cached\", this.cacheArcLengths );\r\n\t\treturn this.cacheArcLengths;\r\n\r\n\t}\r\n\r\n\tthis.needsUpdate = false;\r\n\r\n\tvar cache = [];\r\n\tvar current, last = this.getPoint( 0 );\r\n\tvar p, sum = 0;\r\n\r\n\tcache.push( 0 );\r\n\r\n\tfor ( p = 1; p <= divisions; p ++ ) {\r\n\r\n\t\tcurrent = this.getPoint ( p / divisions );\r\n\t\tsum += current.distanceTo( last );\r\n\t\tcache.push( sum );\r\n\t\tlast = current;\r\n\r\n\t}\r\n\r\n\tthis.cacheArcLengths = cache;\r\n\r\n\treturn cache; // { sums: cache, sum:sum }; Sum is in the last element.\r\n\r\n};\r\n\r\n\r\nTHREE.Curve.prototype.updateArcLengths = function() {\r\n\tthis.needsUpdate = true;\r\n\tthis.getLengths();\r\n};\r\n\r\n// Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equi distance\r\n\r\nTHREE.Curve.prototype.getUtoTmapping = function ( u, distance ) {\r\n\r\n\tvar arcLengths = this.getLengths();\r\n\r\n\tvar i = 0, il = arcLengths.length;\r\n\r\n\tvar targetArcLength; // The targeted u distance value to get\r\n\r\n\tif ( distance ) {\r\n\r\n\t\ttargetArcLength = distance;\r\n\r\n\t} else {\r\n\r\n\t\ttargetArcLength = u * arcLengths[ il - 1 ];\r\n\r\n\t}\r\n\r\n\t//var time = Date.now();\r\n\r\n\t// binary search for the index with largest value smaller than target u distance\r\n\r\n\tvar low = 0, high = il - 1, comparison;\r\n\r\n\twhile ( low <= high ) {\r\n\r\n\t\ti = Math.floor( low + ( high - low ) / 2 ); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats\r\n\r\n\t\tcomparison = arcLengths[ i ] - targetArcLength;\r\n\r\n\t\tif ( comparison < 0 ) {\r\n\r\n\t\t\tlow = i + 1;\r\n\t\t\tcontinue;\r\n\r\n\t\t} else if ( comparison > 0 ) {\r\n\r\n\t\t\thigh = i - 1;\r\n\t\t\tcontinue;\r\n\r\n\t\t} else {\r\n\r\n\t\t\thigh = i;\r\n\t\t\tbreak;\r\n\r\n\t\t\t// DONE\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\ti = high;\r\n\r\n\t//console.log('b' , i, low, high, Date.now()- time);\r\n\r\n\tif ( arcLengths[ i ] == targetArcLength ) {\r\n\r\n\t\tvar t = i / ( il - 1 );\r\n\t\treturn t;\r\n\r\n\t}\r\n\r\n\t// we could get finer grain at lengths, or use simple interpolatation between two points\r\n\r\n\tvar lengthBefore = arcLengths[ i ];\r\n var lengthAfter = arcLengths[ i + 1 ];\r\n\r\n var segmentLength = lengthAfter - lengthBefore;\r\n\r\n // determine where we are between the 'before' and 'after' points\r\n\r\n var segmentFraction = ( targetArcLength - lengthBefore ) / segmentLength;\r\n\r\n // add that fractional amount to t\r\n\r\n var t = ( i + segmentFraction ) / ( il -1 );\r\n\r\n\treturn t;\r\n\r\n};\r\n\r\n// Returns a unit vector tangent at t\r\n// In case any sub curve does not implement its tangent derivation,\r\n// 2 points a small delta apart will be used to find its gradient\r\n// which seems to give a reasonable approximation\r\n\r\nTHREE.Curve.prototype.getTangent = function( t ) {\r\n\r\n\tvar delta = 0.0001;\r\n\tvar t1 = t - delta;\r\n\tvar t2 = t + delta;\r\n\r\n\t// Capping in case of danger\r\n\r\n\tif ( t1 < 0 ) t1 = 0;\r\n\tif ( t2 > 1 ) t2 = 1;\r\n\r\n\tvar pt1 = this.getPoint( t1 );\r\n\tvar pt2 = this.getPoint( t2 );\r\n\r\n\tvar vec = pt2.clone().sub(pt1);\r\n\treturn vec.normalize();\r\n\r\n};\r\n\r\n\r\nTHREE.Curve.prototype.getTangentAt = function ( u ) {\r\n\r\n\tvar t = this.getUtoTmapping( u );\r\n\treturn this.getTangent( t );\r\n\r\n};\r\n\r\n\r\n\r\n\r\n\r\n/**************************************************************\r\n *\tUtils\r\n **************************************************************/\r\n\r\nTHREE.Curve.Utils = {\r\n\r\n\ttangentQuadraticBezier: function ( t, p0, p1, p2 ) {\r\n\r\n\t\treturn 2 * ( 1 - t ) * ( p1 - p0 ) + 2 * t * ( p2 - p1 );\r\n\r\n\t},\r\n\r\n\t// Puay Bing, thanks for helping with this derivative!\r\n\r\n\ttangentCubicBezier: function (t, p0, p1, p2, p3 ) {\r\n\r\n\t\treturn - 3 * p0 * (1 - t) * (1 - t) +\r\n\t\t\t3 * p1 * (1 - t) * (1-t) - 6 *t *p1 * (1-t) +\r\n\t\t\t6 * t * p2 * (1-t) - 3 * t * t * p2 +\r\n\t\t\t3 * t * t * p3;\r\n\r\n\t},\r\n\r\n\ttangentSpline: function ( t, p0, p1, p2, p3 ) {\r\n\r\n\t\t// To check if my formulas are correct\r\n\r\n\t\tvar h00 = 6 * t * t - 6 * t; \t// derived from 2t^3 − 3t^2 + 1\r\n\t\tvar h10 = 3 * t * t - 4 * t + 1; // t^3 − 2t^2 + t\r\n\t\tvar h01 = - 6 * t * t + 6 * t; \t// − 2t3 + 3t2\r\n\t\tvar h11 = 3 * t * t - 2 * t;\t// t3 − t2\r\n\r\n\t\treturn h00 + h10 + h01 + h11;\r\n\r\n\t},\r\n\r\n\t// Catmull-Rom\r\n\r\n\tinterpolate: function( p0, p1, p2, p3, t ) {\r\n\r\n\t\tvar v0 = ( p2 - p0 ) * 0.5;\r\n\t\tvar v1 = ( p3 - p1 ) * 0.5;\r\n\t\tvar t2 = t * t;\r\n\t\tvar t3 = t * t2;\r\n\t\treturn ( 2 * p1 - 2 * p2 + v0 + v1 ) * t3 + ( - 3 * p1 + 3 * p2 - 2 * v0 - v1 ) * t2 + v0 * t + p1;\r\n\r\n\t}\r\n\r\n};\r\n\r\n\r\n// TODO: Transformation for Curves?\r\n\r\n/**************************************************************\r\n *\t3D Curves\r\n **************************************************************/\r\n\r\n// A Factory method for creating new curve subclasses\r\n\r\nTHREE.Curve.create = function ( constructor, getPointFunc ) {\r\n\r\n\tconstructor.prototype = Object.create( THREE.Curve.prototype );\r\n\tconstructor.prototype.getPoint = getPointFunc;\r\n\r\n\treturn constructor;\r\n\r\n};\r\n\r\n// File:src/extras/core/CurvePath.js\r\n\r\n/**\r\n * @author zz85 / http://www.lab4games.net/zz85/blog\r\n *\r\n **/\r\n\r\n/**************************************************************\r\n *\tCurved Path - a curve path is simply a array of connected\r\n * curves, but retains the api of a curve\r\n **************************************************************/\r\n\r\nTHREE.CurvePath = function () {\r\n\r\n\tthis.curves = [];\r\n\tthis.bends = [];\r\n\t\r\n\tthis.autoClose = false; // Automatically closes the path\r\n};\r\n\r\nTHREE.CurvePath.prototype = Object.create( THREE.Curve.prototype );\r\n\r\nTHREE.CurvePath.prototype.add = function ( curve ) {\r\n\r\n\tthis.curves.push( curve );\r\n\r\n};\r\n\r\nTHREE.CurvePath.prototype.checkConnection = function() {\r\n\t// TODO\r\n\t// If the ending of curve is not connected to the starting\r\n\t// or the next curve, then, this is not a real path\r\n};\r\n\r\nTHREE.CurvePath.prototype.closePath = function() {\r\n\t// TODO Test\r\n\t// and verify for vector3 (needs to implement equals)\r\n\t// Add a line curve if start and end of lines are not connected\r\n\tvar startPoint = this.curves[0].getPoint(0);\r\n\tvar endPoint = this.curves[this.curves.length-1].getPoint(1);\r\n\t\r\n\tif (! startPoint.equals(endPoint)) {\r\n\t\tthis.curves.push( new THREE.LineCurve(endPoint, startPoint) );\r\n\t}\r\n\t\r\n};\r\n\r\n// To get accurate point with reference to\r\n// entire path distance at time t,\r\n// following has to be done:\r\n\r\n// 1. Length of each sub path have to be known\r\n// 2. Locate and identify type of curve\r\n// 3. Get t for the curve\r\n// 4. Return curve.getPointAt(t')\r\n\r\nTHREE.CurvePath.prototype.getPoint = function( t ) {\r\n\r\n\tvar d = t * this.getLength();\r\n\tvar curveLengths = this.getCurveLengths();\r\n\tvar i = 0, diff, curve;\r\n\r\n\t// To think about boundaries points.\r\n\r\n\twhile ( i < curveLengths.length ) {\r\n\r\n\t\tif ( curveLengths[ i ] >= d ) {\r\n\r\n\t\t\tdiff = curveLengths[ i ] - d;\r\n\t\t\tcurve = this.curves[ i ];\r\n\r\n\t\t\tvar u = 1 - diff / curve.getLength();\r\n\r\n\t\t\treturn curve.getPointAt( u );\r\n\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\ti ++;\r\n\r\n\t}\r\n\r\n\treturn null;\r\n\r\n\t// loop where sum != 0, sum > d , sum+1 maxX ) maxX = p.x;\r\n\t\telse if ( p.x < minX ) minX = p.x;\r\n\r\n\t\tif ( p.y > maxY ) maxY = p.y;\r\n\t\telse if ( p.y < minY ) minY = p.y;\r\n\r\n\t\tif ( v3 ) {\r\n\r\n\t\t\tif ( p.z > maxZ ) maxZ = p.z;\r\n\t\t\telse if ( p.z < minZ ) minZ = p.z;\r\n\r\n\t\t}\r\n\r\n\t\tsum.add( p );\r\n\r\n\t}\r\n\r\n\tvar ret = {\r\n\r\n\t\tminX: minX,\r\n\t\tminY: minY,\r\n\t\tmaxX: maxX,\r\n\t\tmaxY: maxY\r\n\r\n\t};\r\n\r\n\tif ( v3 ) {\r\n\r\n\t\tret.maxZ = maxZ;\r\n\t\tret.minZ = minZ;\r\n\r\n\t}\r\n\r\n\treturn ret;\r\n\r\n};\r\n\r\n/**************************************************************\r\n *\tCreate Geometries Helpers\r\n **************************************************************/\r\n\r\n/// Generate geometry from path points (for Line or Points objects)\r\n\r\nTHREE.CurvePath.prototype.createPointsGeometry = function( divisions ) {\r\n\r\n\tvar pts = this.getPoints( divisions, true );\r\n\treturn this.createGeometry( pts );\r\n\r\n};\r\n\r\n// Generate geometry from equidistance sampling along the path\r\n\r\nTHREE.CurvePath.prototype.createSpacedPointsGeometry = function( divisions ) {\r\n\r\n\tvar pts = this.getSpacedPoints( divisions, true );\r\n\treturn this.createGeometry( pts );\r\n\r\n};\r\n\r\nTHREE.CurvePath.prototype.createGeometry = function( points ) {\r\n\r\n\tvar geometry = new THREE.Geometry();\r\n\r\n\tfor ( var i = 0; i < points.length; i ++ ) {\r\n\r\n\t\tgeometry.vertices.push( new THREE.Vector3( points[ i ].x, points[ i ].y, points[ i ].z || 0) );\r\n\r\n\t}\r\n\r\n\treturn geometry;\r\n\r\n};\r\n\r\n\r\n/**************************************************************\r\n *\tBend / Wrap Helper Methods\r\n **************************************************************/\r\n\r\n// Wrap path / Bend modifiers?\r\n\r\nTHREE.CurvePath.prototype.addWrapPath = function ( bendpath ) {\r\n\r\n\tthis.bends.push( bendpath );\r\n\r\n};\r\n\r\nTHREE.CurvePath.prototype.getTransformedPoints = function( segments, bends ) {\r\n\r\n\tvar oldPts = this.getPoints( segments ); // getPoints getSpacedPoints\r\n\tvar i, il;\r\n\r\n\tif ( ! bends ) {\r\n\r\n\t\tbends = this.bends;\r\n\r\n\t}\r\n\r\n\tfor ( i = 0, il = bends.length; i < il; i ++ ) {\r\n\r\n\t\toldPts = this.getWrapPoints( oldPts, bends[ i ] );\r\n\r\n\t}\r\n\r\n\treturn oldPts;\r\n\r\n};\r\n\r\nTHREE.CurvePath.prototype.getTransformedSpacedPoints = function( segments, bends ) {\r\n\r\n\tvar oldPts = this.getSpacedPoints( segments );\r\n\r\n\tvar i, il;\r\n\r\n\tif ( ! bends ) {\r\n\r\n\t\tbends = this.bends;\r\n\r\n\t}\r\n\r\n\tfor ( i = 0, il = bends.length; i < il; i ++ ) {\r\n\r\n\t\toldPts = this.getWrapPoints( oldPts, bends[ i ] );\r\n\r\n\t}\r\n\r\n\treturn oldPts;\r\n\r\n};\r\n\r\n// This returns getPoints() bend/wrapped around the contour of a path.\r\n// Read http://www.planetclegg.com/projects/WarpingTextToSplines.html\r\n\r\nTHREE.CurvePath.prototype.getWrapPoints = function ( oldPts, path ) {\r\n\r\n\tvar bounds = this.getBoundingBox();\r\n\r\n\tvar i, il, p, oldX, oldY, xNorm;\r\n\r\n\tfor ( i = 0, il = oldPts.length; i < il; i ++ ) {\r\n\r\n\t\tp = oldPts[ i ];\r\n\r\n\t\toldX = p.x;\r\n\t\toldY = p.y;\r\n\r\n\t\txNorm = oldX / bounds.maxX;\r\n\r\n\t\t// If using actual distance, for length > path, requires line extrusions\r\n\t\t//xNorm = path.getUtoTmapping(xNorm, oldX); // 3 styles. 1) wrap stretched. 2) wrap stretch by arc length 3) warp by actual distance\r\n\r\n\t\txNorm = path.getUtoTmapping( xNorm, oldX );\r\n\r\n\t\t// check for out of bounds?\r\n\r\n\t\tvar pathPt = path.getPoint( xNorm );\r\n\t\tvar normal = path.getTangent( xNorm );\r\n\t\tnormal.set( - normal.y, normal.x ).multiplyScalar( oldY );\r\n\r\n\t\tp.x = pathPt.x + normal.x;\r\n\t\tp.y = pathPt.y + normal.y;\r\n\r\n\t}\r\n\r\n\treturn oldPts;\r\n\r\n};\r\n\r\n\r\n// File:src/extras/core/Gyroscope.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.Gyroscope = function () {\r\n\r\n\tTHREE.Object3D.call( this );\r\n\r\n};\r\n\r\nTHREE.Gyroscope.prototype = Object.create( THREE.Object3D.prototype );\r\n\r\nTHREE.Gyroscope.prototype.updateMatrixWorld = ( function () {\r\n\r\n\tvar translationObject = new THREE.Vector3();\r\n\tvar quaternionObject = new THREE.Quaternion();\r\n\tvar scaleObject = new THREE.Vector3();\r\n\r\n\tvar translationWorld = new THREE.Vector3();\r\n\tvar quaternionWorld = new THREE.Quaternion();\r\n\tvar scaleWorld = new THREE.Vector3();\r\n\r\n\treturn function ( force ) {\r\n\r\n\t\tthis.matrixAutoUpdate && this.updateMatrix();\r\n\r\n\t\t// update matrixWorld\r\n\r\n\t\tif ( this.matrixWorldNeedsUpdate || force ) {\r\n\r\n\t\t\tif ( this.parent ) {\r\n\r\n\t\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\r\n\r\n\t\t\t\tthis.matrixWorld.decompose( translationWorld, quaternionWorld, scaleWorld );\r\n\t\t\t\tthis.matrix.decompose( translationObject, quaternionObject, scaleObject );\r\n\r\n\t\t\t\tthis.matrixWorld.compose( translationWorld, quaternionObject, scaleWorld );\r\n\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tthis.matrixWorld.copy( this.matrix );\r\n\r\n\t\t\t}\r\n\r\n\r\n\t\t\tthis.matrixWorldNeedsUpdate = false;\r\n\r\n\t\t\tforce = true;\r\n\r\n\t\t}\r\n\r\n\t\t// update children\r\n\r\n\t\tfor ( var i = 0, l = this.children.length; i < l; i ++ ) {\r\n\r\n\t\t\tthis.children[ i ].updateMatrixWorld( force );\r\n\r\n\t\t}\r\n\r\n\t};\r\n\t\r\n}() );\r\n\r\n// File:src/extras/core/Path.js\r\n\r\n/**\r\n * @author zz85 / http://www.lab4games.net/zz85/blog\r\n * Creates free form 2d path using series of points, lines or curves.\r\n *\r\n **/\r\n\r\nTHREE.Path = function ( points ) {\r\n\r\n\tTHREE.CurvePath.call(this);\r\n\r\n\tthis.actions = [];\r\n\r\n\tif ( points ) {\r\n\r\n\t\tthis.fromPoints( points );\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.Path.prototype = Object.create( THREE.CurvePath.prototype );\r\n\r\nTHREE.PathActions = {\r\n\r\n\tMOVE_TO: 'moveTo',\r\n\tLINE_TO: 'lineTo',\r\n\tQUADRATIC_CURVE_TO: 'quadraticCurveTo', // Bezier quadratic curve\r\n\tBEZIER_CURVE_TO: 'bezierCurveTo', \t\t// Bezier cubic curve\r\n\tCSPLINE_THRU: 'splineThru',\t\t\t\t// Catmull-rom spline\r\n\tARC: 'arc',\t\t\t\t\t\t\t\t// Circle\r\n\tELLIPSE: 'ellipse'\r\n};\r\n\r\n// TODO Clean up PATH API\r\n\r\n// Create path using straight lines to connect all points\r\n// - vectors: array of Vector2\r\n\r\nTHREE.Path.prototype.fromPoints = function ( vectors ) {\r\n\r\n\tthis.moveTo( vectors[ 0 ].x, vectors[ 0 ].y );\r\n\r\n\tfor ( var v = 1, vlen = vectors.length; v < vlen; v ++ ) {\r\n\r\n\t\tthis.lineTo( vectors[ v ].x, vectors[ v ].y );\r\n\r\n\t};\r\n\r\n};\r\n\r\n// startPath() endPath()?\r\n\r\nTHREE.Path.prototype.moveTo = function ( x, y ) {\r\n\r\n\tvar args = Array.prototype.slice.call( arguments );\r\n\tthis.actions.push( { action: THREE.PathActions.MOVE_TO, args: args } );\r\n\r\n};\r\n\r\nTHREE.Path.prototype.lineTo = function ( x, y ) {\r\n\r\n\tvar args = Array.prototype.slice.call( arguments );\r\n\r\n\tvar lastargs = this.actions[ this.actions.length - 1 ].args;\r\n\r\n\tvar x0 = lastargs[ lastargs.length - 2 ];\r\n\tvar y0 = lastargs[ lastargs.length - 1 ];\r\n\r\n\tvar curve = new THREE.LineCurve( new THREE.Vector2( x0, y0 ), new THREE.Vector2( x, y ) );\r\n\tthis.curves.push( curve );\r\n\r\n\tthis.actions.push( { action: THREE.PathActions.LINE_TO, args: args } );\r\n\r\n};\r\n\r\nTHREE.Path.prototype.quadraticCurveTo = function( aCPx, aCPy, aX, aY ) {\r\n\r\n\tvar args = Array.prototype.slice.call( arguments );\r\n\r\n\tvar lastargs = this.actions[ this.actions.length - 1 ].args;\r\n\r\n\tvar x0 = lastargs[ lastargs.length - 2 ];\r\n\tvar y0 = lastargs[ lastargs.length - 1 ];\r\n\r\n\tvar curve = new THREE.QuadraticBezierCurve( new THREE.Vector2( x0, y0 ),\r\n\t\t\t\t\t\t\t\t\t\t\t\tnew THREE.Vector2( aCPx, aCPy ),\r\n\t\t\t\t\t\t\t\t\t\t\t\tnew THREE.Vector2( aX, aY ) );\r\n\tthis.curves.push( curve );\r\n\r\n\tthis.actions.push( { action: THREE.PathActions.QUADRATIC_CURVE_TO, args: args } );\r\n\r\n};\r\n\r\nTHREE.Path.prototype.bezierCurveTo = function( aCP1x, aCP1y,\r\n\t\t\t\t\t\t\t\t\t\t\t aCP2x, aCP2y,\r\n\t\t\t\t\t\t\t\t\t\t\t aX, aY ) {\r\n\r\n\tvar args = Array.prototype.slice.call( arguments );\r\n\r\n\tvar lastargs = this.actions[ this.actions.length - 1 ].args;\r\n\r\n\tvar x0 = lastargs[ lastargs.length - 2 ];\r\n\tvar y0 = lastargs[ lastargs.length - 1 ];\r\n\r\n\tvar curve = new THREE.CubicBezierCurve( new THREE.Vector2( x0, y0 ),\r\n\t\t\t\t\t\t\t\t\t\t\tnew THREE.Vector2( aCP1x, aCP1y ),\r\n\t\t\t\t\t\t\t\t\t\t\tnew THREE.Vector2( aCP2x, aCP2y ),\r\n\t\t\t\t\t\t\t\t\t\t\tnew THREE.Vector2( aX, aY ) );\r\n\tthis.curves.push( curve );\r\n\r\n\tthis.actions.push( { action: THREE.PathActions.BEZIER_CURVE_TO, args: args } );\r\n\r\n};\r\n\r\nTHREE.Path.prototype.splineThru = function( pts /*Array of Vector*/ ) {\r\n\r\n\tvar args = Array.prototype.slice.call( arguments );\r\n\tvar lastargs = this.actions[ this.actions.length - 1 ].args;\r\n\r\n\tvar x0 = lastargs[ lastargs.length - 2 ];\r\n\tvar y0 = lastargs[ lastargs.length - 1 ];\r\n//---\r\n\tvar npts = [ new THREE.Vector2( x0, y0 ) ];\r\n\tArray.prototype.push.apply( npts, pts );\r\n\r\n\tvar curve = new THREE.SplineCurve( npts );\r\n\tthis.curves.push( curve );\r\n\r\n\tthis.actions.push( { action: THREE.PathActions.CSPLINE_THRU, args: args } );\r\n\r\n};\r\n\r\n// FUTURE: Change the API or follow canvas API?\r\n\r\nTHREE.Path.prototype.arc = function ( aX, aY, aRadius,\r\n\t\t\t\t\t\t\t\t\t aStartAngle, aEndAngle, aClockwise ) {\r\n\r\n\tvar lastargs = this.actions[ this.actions.length - 1].args;\r\n\tvar x0 = lastargs[ lastargs.length - 2 ];\r\n\tvar y0 = lastargs[ lastargs.length - 1 ];\r\n\r\n\tthis.absarc(aX + x0, aY + y0, aRadius,\r\n\t\taStartAngle, aEndAngle, aClockwise );\r\n\r\n };\r\n\r\n THREE.Path.prototype.absarc = function ( aX, aY, aRadius,\r\n\t\t\t\t\t\t\t\t\t aStartAngle, aEndAngle, aClockwise ) {\r\n\tthis.absellipse(aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise);\r\n };\r\n\r\nTHREE.Path.prototype.ellipse = function ( aX, aY, xRadius, yRadius,\r\n\t\t\t\t\t\t\t\t\t aStartAngle, aEndAngle, aClockwise ) {\r\n\r\n\tvar lastargs = this.actions[ this.actions.length - 1].args;\r\n\tvar x0 = lastargs[ lastargs.length - 2 ];\r\n\tvar y0 = lastargs[ lastargs.length - 1 ];\r\n\r\n\tthis.absellipse(aX + x0, aY + y0, xRadius, yRadius,\r\n\t\taStartAngle, aEndAngle, aClockwise );\r\n\r\n };\r\n\r\n\r\nTHREE.Path.prototype.absellipse = function ( aX, aY, xRadius, yRadius,\r\n\t\t\t\t\t\t\t\t\t aStartAngle, aEndAngle, aClockwise ) {\r\n\r\n\tvar args = Array.prototype.slice.call( arguments );\r\n\tvar curve = new THREE.EllipseCurve( aX, aY, xRadius, yRadius,\r\n\t\t\t\t\t\t\t\t\taStartAngle, aEndAngle, aClockwise );\r\n\tthis.curves.push( curve );\r\n\r\n\tvar lastPoint = curve.getPoint(1);\r\n\targs.push(lastPoint.x);\r\n\targs.push(lastPoint.y);\r\n\r\n\tthis.actions.push( { action: THREE.PathActions.ELLIPSE, args: args } );\r\n\r\n };\r\n\r\nTHREE.Path.prototype.getSpacedPoints = function ( divisions, closedPath ) {\r\n\r\n\tif ( ! divisions ) divisions = 40;\r\n\r\n\tvar points = [];\r\n\r\n\tfor ( var i = 0; i < divisions; i ++ ) {\r\n\r\n\t\tpoints.push( this.getPoint( i / divisions ) );\r\n\r\n\t\t//if( !this.getPoint( i / divisions ) ) throw \"DIE\";\r\n\r\n\t}\r\n\r\n\t// if ( closedPath ) {\r\n\t//\r\n\t// \tpoints.push( points[ 0 ] );\r\n\t//\r\n\t// }\r\n\r\n\treturn points;\r\n\r\n};\r\n\r\n/* Return an array of vectors based on contour of the path */\r\n\r\nTHREE.Path.prototype.getPoints = function( divisions, closedPath ) {\r\n\r\n\tif (this.useSpacedPoints) {\r\n\t\tconsole.log('tata');\r\n\t\treturn this.getSpacedPoints( divisions, closedPath );\r\n\t}\r\n\r\n\tdivisions = divisions || 12;\r\n\r\n\tvar points = [];\r\n\r\n\tvar i, il, item, action, args;\r\n\tvar cpx, cpy, cpx2, cpy2, cpx1, cpy1, cpx0, cpy0,\r\n\t\tlaste, j,\r\n\t\tt, tx, ty;\r\n\r\n\tfor ( i = 0, il = this.actions.length; i < il; i ++ ) {\r\n\r\n\t\titem = this.actions[ i ];\r\n\r\n\t\taction = item.action;\r\n\t\targs = item.args;\r\n\r\n\t\tswitch( action ) {\r\n\r\n\t\tcase THREE.PathActions.MOVE_TO:\r\n\r\n\t\t\tpoints.push( new THREE.Vector2( args[ 0 ], args[ 1 ] ) );\r\n\r\n\t\t\tbreak;\r\n\r\n\t\tcase THREE.PathActions.LINE_TO:\r\n\r\n\t\t\tpoints.push( new THREE.Vector2( args[ 0 ], args[ 1 ] ) );\r\n\r\n\t\t\tbreak;\r\n\r\n\t\tcase THREE.PathActions.QUADRATIC_CURVE_TO:\r\n\r\n\t\t\tcpx = args[ 2 ];\r\n\t\t\tcpy = args[ 3 ];\r\n\r\n\t\t\tcpx1 = args[ 0 ];\r\n\t\t\tcpy1 = args[ 1 ];\r\n\r\n\t\t\tif ( points.length > 0 ) {\r\n\r\n\t\t\t\tlaste = points[ points.length - 1 ];\r\n\r\n\t\t\t\tcpx0 = laste.x;\r\n\t\t\t\tcpy0 = laste.y;\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tlaste = this.actions[ i - 1 ].args;\r\n\r\n\t\t\t\tcpx0 = laste[ laste.length - 2 ];\r\n\t\t\t\tcpy0 = laste[ laste.length - 1 ];\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfor ( j = 1; j <= divisions; j ++ ) {\r\n\r\n\t\t\t\tt = j / divisions;\r\n\r\n\t\t\t\ttx = THREE.Shape.Utils.b2( t, cpx0, cpx1, cpx );\r\n\t\t\t\tty = THREE.Shape.Utils.b2( t, cpy0, cpy1, cpy );\r\n\r\n\t\t\t\tpoints.push( new THREE.Vector2( tx, ty ) );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tbreak;\r\n\r\n\t\tcase THREE.PathActions.BEZIER_CURVE_TO:\r\n\r\n\t\t\tcpx = args[ 4 ];\r\n\t\t\tcpy = args[ 5 ];\r\n\r\n\t\t\tcpx1 = args[ 0 ];\r\n\t\t\tcpy1 = args[ 1 ];\r\n\r\n\t\t\tcpx2 = args[ 2 ];\r\n\t\t\tcpy2 = args[ 3 ];\r\n\r\n\t\t\tif ( points.length > 0 ) {\r\n\r\n\t\t\t\tlaste = points[ points.length - 1 ];\r\n\r\n\t\t\t\tcpx0 = laste.x;\r\n\t\t\t\tcpy0 = laste.y;\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tlaste = this.actions[ i - 1 ].args;\r\n\r\n\t\t\t\tcpx0 = laste[ laste.length - 2 ];\r\n\t\t\t\tcpy0 = laste[ laste.length - 1 ];\r\n\r\n\t\t\t}\r\n\r\n\r\n\t\t\tfor ( j = 1; j <= divisions; j ++ ) {\r\n\r\n\t\t\t\tt = j / divisions;\r\n\r\n\t\t\t\ttx = THREE.Shape.Utils.b3( t, cpx0, cpx1, cpx2, cpx );\r\n\t\t\t\tty = THREE.Shape.Utils.b3( t, cpy0, cpy1, cpy2, cpy );\r\n\r\n\t\t\t\tpoints.push( new THREE.Vector2( tx, ty ) );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tbreak;\r\n\r\n\t\tcase THREE.PathActions.CSPLINE_THRU:\r\n\r\n\t\t\tlaste = this.actions[ i - 1 ].args;\r\n\r\n\t\t\tvar last = new THREE.Vector2( laste[ laste.length - 2 ], laste[ laste.length - 1 ] );\r\n\t\t\tvar spts = [ last ];\r\n\r\n\t\t\tvar n = divisions * args[ 0 ].length;\r\n\r\n\t\t\tspts = spts.concat( args[ 0 ] );\r\n\r\n\t\t\tvar spline = new THREE.SplineCurve( spts );\r\n\r\n\t\t\tfor ( j = 1; j <= n; j ++ ) {\r\n\r\n\t\t\t\tpoints.push( spline.getPointAt( j / n ) ) ;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tbreak;\r\n\r\n\t\tcase THREE.PathActions.ARC:\r\n\r\n\t\t\tvar aX = args[ 0 ], aY = args[ 1 ],\r\n\t\t\t\taRadius = args[ 2 ],\r\n\t\t\t\taStartAngle = args[ 3 ], aEndAngle = args[ 4 ],\r\n\t\t\t\taClockwise = !! args[ 5 ];\r\n\r\n\t\t\tvar deltaAngle = aEndAngle - aStartAngle;\r\n\t\t\tvar angle;\r\n\t\t\tvar tdivisions = divisions * 2;\r\n\r\n\t\t\tfor ( j = 1; j <= tdivisions; j ++ ) {\r\n\r\n\t\t\t\tt = j / tdivisions;\r\n\r\n\t\t\t\tif ( ! aClockwise ) {\r\n\r\n\t\t\t\t\tt = 1 - t;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tangle = aStartAngle + t * deltaAngle;\r\n\r\n\t\t\t\ttx = aX + aRadius * Math.cos( angle );\r\n\t\t\t\tty = aY + aRadius * Math.sin( angle );\r\n\r\n\t\t\t\t//console.log('t', t, 'angle', angle, 'tx', tx, 'ty', ty);\r\n\r\n\t\t\t\tpoints.push( new THREE.Vector2( tx, ty ) );\r\n\r\n\t\t\t}\r\n\r\n\t\t\t//console.log(points);\r\n\r\n\t\t break;\r\n\t\t \r\n\t\tcase THREE.PathActions.ELLIPSE:\r\n\r\n\t\t\tvar aX = args[ 0 ], aY = args[ 1 ],\r\n\t\t\t\txRadius = args[ 2 ],\r\n\t\t\t\tyRadius = args[ 3 ],\r\n\t\t\t\taStartAngle = args[ 4 ], aEndAngle = args[ 5 ],\r\n\t\t\t\taClockwise = !! args[ 6 ];\r\n\r\n\r\n\t\t\tvar deltaAngle = aEndAngle - aStartAngle;\r\n\t\t\tvar angle;\r\n\t\t\tvar tdivisions = divisions * 2;\r\n\r\n\t\t\tfor ( j = 1; j <= tdivisions; j ++ ) {\r\n\r\n\t\t\t\tt = j / tdivisions;\r\n\r\n\t\t\t\tif ( ! aClockwise ) {\r\n\r\n\t\t\t\t\tt = 1 - t;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tangle = aStartAngle + t * deltaAngle;\r\n\r\n\t\t\t\ttx = aX + xRadius * Math.cos( angle );\r\n\t\t\t\tty = aY + yRadius * Math.sin( angle );\r\n\r\n\t\t\t\t//console.log('t', t, 'angle', angle, 'tx', tx, 'ty', ty);\r\n\r\n\t\t\t\tpoints.push( new THREE.Vector2( tx, ty ) );\r\n\r\n\t\t\t}\r\n\r\n\t\t\t//console.log(points);\r\n\r\n\t\t break;\r\n\r\n\t\t} // end switch\r\n\r\n\t}\r\n\r\n\r\n\r\n\t// Normalize to remove the closing point by default.\r\n\tvar lastPoint = points[ points.length - 1];\r\n\tvar EPSILON = 0.0000000001;\r\n\tif ( Math.abs(lastPoint.x - points[ 0 ].x) < EPSILON &&\r\n\t\t\t Math.abs(lastPoint.y - points[ 0 ].y) < EPSILON)\r\n\t\tpoints.splice( points.length - 1, 1);\r\n\tif ( closedPath ) {\r\n\r\n\t\tpoints.push( points[ 0 ] );\r\n\r\n\t}\r\n\r\n\treturn points;\r\n\r\n};\r\n\r\n//\r\n// Breaks path into shapes\r\n//\r\n//\tAssumptions (if parameter isCCW==true the opposite holds):\r\n//\t- solid shapes are defined clockwise (CW)\r\n//\t- holes are defined counterclockwise (CCW)\r\n//\r\n//\tIf parameter noHoles==true:\r\n// - all subPaths are regarded as solid shapes\r\n// - definition order CW/CCW has no relevance\r\n//\r\n\r\nTHREE.Path.prototype.toShapes = function( isCCW, noHoles ) {\r\n\r\n\tfunction extractSubpaths( inActions ) {\r\n\r\n\t\tvar i, il, item, action, args;\r\n\r\n\t\tvar subPaths = [], lastPath = new THREE.Path();\r\n\r\n\t\tfor ( i = 0, il = inActions.length; i < il; i ++ ) {\r\n\r\n\t\t\titem = inActions[ i ];\r\n\r\n\t\t\targs = item.args;\r\n\t\t\taction = item.action;\r\n\r\n\t\t\tif ( action == THREE.PathActions.MOVE_TO ) {\r\n\r\n\t\t\t\tif ( lastPath.actions.length != 0 ) {\r\n\r\n\t\t\t\t\tsubPaths.push( lastPath );\r\n\t\t\t\t\tlastPath = new THREE.Path();\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tlastPath[ action ].apply( lastPath, args );\r\n\r\n\t\t}\r\n\r\n\t\tif ( lastPath.actions.length != 0 ) {\r\n\r\n\t\t\tsubPaths.push( lastPath );\r\n\r\n\t\t}\r\n\r\n\t\t// console.log(subPaths);\r\n\r\n\t\treturn\tsubPaths;\r\n\t}\r\n\r\n\tfunction toShapesNoHoles( inSubpaths ) {\r\n\r\n\t\tvar shapes = [];\r\n\r\n\t\tfor ( var i = 0, il = inSubpaths.length; i < il; i ++ ) {\r\n\r\n\t\t\tvar tmpPath = inSubpaths[ i ];\r\n\r\n\t\t\tvar tmpShape = new THREE.Shape();\r\n\t\t\ttmpShape.actions = tmpPath.actions;\r\n\t\t\ttmpShape.curves = tmpPath.curves;\r\n\r\n\t\t\tshapes.push( tmpShape );\r\n\t\t}\r\n\r\n\t\t//console.log(\"shape\", shapes);\r\n\r\n\t\treturn shapes;\r\n\t};\r\n\r\n\tfunction isPointInsidePolygon( inPt, inPolygon ) {\r\n\t\tvar EPSILON = 0.0000000001;\r\n\r\n\t\tvar polyLen = inPolygon.length;\r\n\r\n\t\t// inPt on polygon contour => immediate success or\r\n\t\t// toggling of inside/outside at every single! intersection point of an edge\r\n\t\t// with the horizontal line through inPt, left of inPt\r\n\t\t// not counting lowerY endpoints of edges and whole edges on that line\r\n\t\tvar inside = false;\r\n\t\tfor( var p = polyLen - 1, q = 0; q < polyLen; p = q ++ ) {\r\n\t\t\tvar edgeLowPt = inPolygon[ p ];\r\n\t\t\tvar edgeHighPt = inPolygon[ q ];\r\n\r\n\t\t\tvar edgeDx = edgeHighPt.x - edgeLowPt.x;\r\n\t\t\tvar edgeDy = edgeHighPt.y - edgeLowPt.y;\r\n\r\n\t\t\tif ( Math.abs(edgeDy) > EPSILON ) {\t\t\t// not parallel\r\n\t\t\t\tif ( edgeDy < 0 ) {\r\n\t\t\t\t\tedgeLowPt = inPolygon[ q ]; edgeDx = - edgeDx;\r\n\t\t\t\t\tedgeHighPt = inPolygon[ p ]; edgeDy = - edgeDy;\r\n\t\t\t\t}\r\n\t\t\t\tif ( ( inPt.y < edgeLowPt.y ) || ( inPt.y > edgeHighPt.y ) ) \t\tcontinue;\r\n\r\n\t\t\t\tif ( inPt.y == edgeLowPt.y ) {\r\n\t\t\t\t\tif ( inPt.x == edgeLowPt.x )\t\treturn\ttrue;\t\t// inPt is on contour ?\r\n\t\t\t\t\t// continue;\t\t\t\t// no intersection or edgeLowPt => doesn't count !!!\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar perpEdge = edgeDy * (inPt.x - edgeLowPt.x) - edgeDx * (inPt.y - edgeLowPt.y);\r\n\t\t\t\t\tif ( perpEdge == 0 )\t\t\t\treturn\ttrue;\t\t// inPt is on contour ?\r\n\t\t\t\t\tif ( perpEdge < 0 ) \t\t\t\tcontinue;\r\n\t\t\t\t\tinside = ! inside;\t\t// true intersection left of inPt\r\n\t\t\t\t}\r\n\t\t\t} else {\t\t// parallel or colinear\r\n\t\t\t\tif ( inPt.y != edgeLowPt.y ) \t\tcontinue;\t\t\t// parallel\r\n\t\t\t\t// egde lies on the same horizontal line as inPt\r\n\t\t\t\tif ( ( ( edgeHighPt.x <= inPt.x ) && ( inPt.x <= edgeLowPt.x ) ) ||\r\n\t\t\t\t\t ( ( edgeLowPt.x <= inPt.x ) && ( inPt.x <= edgeHighPt.x ) ) )\t\treturn\ttrue;\t// inPt: Point on contour !\r\n\t\t\t\t// continue;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn\tinside;\r\n\t}\r\n\r\n\r\n\tvar subPaths = extractSubpaths( this.actions );\r\n\tif ( subPaths.length == 0 ) return [];\r\n\r\n\tif ( noHoles === true )\treturn\ttoShapesNoHoles( subPaths );\r\n\r\n\r\n\tvar solid, tmpPath, tmpShape, shapes = [];\r\n\r\n\tif ( subPaths.length == 1) {\r\n\r\n\t\ttmpPath = subPaths[0];\r\n\t\ttmpShape = new THREE.Shape();\r\n\t\ttmpShape.actions = tmpPath.actions;\r\n\t\ttmpShape.curves = tmpPath.curves;\r\n\t\tshapes.push( tmpShape );\r\n\t\treturn shapes;\r\n\r\n\t}\r\n\r\n\tvar holesFirst = ! THREE.Shape.Utils.isClockWise( subPaths[ 0 ].getPoints() );\r\n\tholesFirst = isCCW ? ! holesFirst : holesFirst;\r\n\r\n\t// console.log(\"Holes first\", holesFirst);\r\n\t\r\n\tvar betterShapeHoles = [];\r\n\tvar newShapes = [];\r\n\tvar newShapeHoles = [];\r\n\tvar mainIdx = 0;\r\n\tvar tmpPoints;\r\n\r\n\tnewShapes[mainIdx] = undefined;\r\n\tnewShapeHoles[mainIdx] = [];\r\n\r\n\tvar i, il;\r\n\r\n\tfor ( i = 0, il = subPaths.length; i < il; i ++ ) {\r\n\r\n\t\ttmpPath = subPaths[ i ];\r\n\t\ttmpPoints = tmpPath.getPoints();\r\n\t\tsolid = THREE.Shape.Utils.isClockWise( tmpPoints );\r\n\t\tsolid = isCCW ? ! solid : solid;\r\n\r\n\t\tif ( solid ) {\r\n\r\n\t\t\tif ( (! holesFirst ) && ( newShapes[mainIdx] ) )\tmainIdx ++;\r\n\r\n\t\t\tnewShapes[mainIdx] = { s: new THREE.Shape(), p: tmpPoints };\r\n\t\t\tnewShapes[mainIdx].s.actions = tmpPath.actions;\r\n\t\t\tnewShapes[mainIdx].s.curves = tmpPath.curves;\r\n\t\t\t\r\n\t\t\tif ( holesFirst )\tmainIdx ++;\r\n\t\t\tnewShapeHoles[mainIdx] = [];\r\n\r\n\t\t\t//console.log('cw', i);\r\n\r\n\t\t} else {\r\n\r\n\t\t\tnewShapeHoles[mainIdx].push( { h: tmpPath, p: tmpPoints[0] } );\r\n\r\n\t\t\t//console.log('ccw', i);\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// only Holes? -> probably all Shapes with wrong orientation\r\n\tif ( ! newShapes[0] )\treturn\ttoShapesNoHoles( subPaths );\r\n\r\n\r\n\tif ( newShapes.length > 1 ) {\r\n\t\tvar ambigious = false;\r\n\t\tvar toChange = [];\r\n\r\n\t\tfor (var sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\r\n\t\t\tbetterShapeHoles[sIdx] = [];\r\n\t\t}\r\n\t\tfor (var sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\r\n\t\t\tvar sh = newShapes[sIdx];\r\n\t\t\tvar sho = newShapeHoles[sIdx];\r\n\t\t\tfor (var hIdx = 0; hIdx < sho.length; hIdx ++ ) {\r\n\t\t\t\tvar ho = sho[hIdx];\r\n\t\t\t\tvar hole_unassigned = true;\r\n\t\t\t\tfor (var s2Idx = 0; s2Idx < newShapes.length; s2Idx ++ ) {\r\n\t\t\t\t\tif ( isPointInsidePolygon( ho.p, newShapes[s2Idx].p ) ) {\r\n\t\t\t\t\t\tif ( sIdx != s2Idx )\t\ttoChange.push( { froms: sIdx, tos: s2Idx, hole: hIdx } );\r\n\t\t\t\t\t\tif ( hole_unassigned ) {\r\n\t\t\t\t\t\t\thole_unassigned = false;\r\n\t\t\t\t\t\t\tbetterShapeHoles[s2Idx].push( ho );\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tambigious = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif ( hole_unassigned ) { betterShapeHoles[sIdx].push( ho ); }\r\n\t\t\t}\r\n\t\t}\r\n\t\t// console.log(\"ambigious: \", ambigious);\r\n\t\tif ( toChange.length > 0 ) {\r\n\t\t\t// console.log(\"to change: \", toChange);\r\n\t\t\tif (! ambigious)\tnewShapeHoles = betterShapeHoles;\r\n\t\t}\r\n\t}\r\n\r\n\tvar tmpHoles, j, jl;\r\n\tfor ( i = 0, il = newShapes.length; i < il; i ++ ) {\r\n\t\ttmpShape = newShapes[i].s;\r\n\t\tshapes.push( tmpShape );\r\n\t\ttmpHoles = newShapeHoles[i];\r\n\t\tfor ( j = 0, jl = tmpHoles.length; j < jl; j ++ ) {\r\n\t\t\ttmpShape.holes.push( tmpHoles[j].h );\r\n\t\t}\r\n\t}\r\n\r\n\t//console.log(\"shape\", shapes);\r\n\r\n\treturn shapes;\r\n\r\n};\r\n\r\n// File:src/extras/core/Shape.js\r\n\r\n/**\r\n * @author zz85 / http://www.lab4games.net/zz85/blog\r\n * Defines a 2d shape plane using paths.\r\n **/\r\n\r\n// STEP 1 Create a path.\r\n// STEP 2 Turn path into shape.\r\n// STEP 3 ExtrudeGeometry takes in Shape/Shapes\r\n// STEP 3a - Extract points from each shape, turn to vertices\r\n// STEP 3b - Triangulate each shape, add faces.\r\n\r\nTHREE.Shape = function () {\r\n\r\n\tTHREE.Path.apply( this, arguments );\r\n\tthis.holes = [];\r\n\r\n};\r\n\r\nTHREE.Shape.prototype = Object.create( THREE.Path.prototype );\r\n\r\n// Convenience method to return ExtrudeGeometry\r\n\r\nTHREE.Shape.prototype.extrude = function ( options ) {\r\n\r\n\tvar extruded = new THREE.ExtrudeGeometry( this, options );\r\n\treturn extruded;\r\n\r\n};\r\n\r\n// Convenience method to return ShapeGeometry\r\n\r\nTHREE.Shape.prototype.makeGeometry = function ( options ) {\r\n\r\n\tvar geometry = new THREE.ShapeGeometry( this, options );\r\n\treturn geometry;\r\n\r\n};\r\n\r\n// Get points of holes\r\n\r\nTHREE.Shape.prototype.getPointsHoles = function ( divisions ) {\r\n\r\n\tvar i, il = this.holes.length, holesPts = [];\r\n\r\n\tfor ( i = 0; i < il; i ++ ) {\r\n\r\n\t\tholesPts[ i ] = this.holes[ i ].getTransformedPoints( divisions, this.bends );\r\n\r\n\t}\r\n\r\n\treturn holesPts;\r\n\r\n};\r\n\r\n// Get points of holes (spaced by regular distance)\r\n\r\nTHREE.Shape.prototype.getSpacedPointsHoles = function ( divisions ) {\r\n\r\n\tvar i, il = this.holes.length, holesPts = [];\r\n\r\n\tfor ( i = 0; i < il; i ++ ) {\r\n\r\n\t\tholesPts[ i ] = this.holes[ i ].getTransformedSpacedPoints( divisions, this.bends );\r\n\r\n\t}\r\n\r\n\treturn holesPts;\r\n\r\n};\r\n\r\n\r\n// Get points of shape and holes (keypoints based on segments parameter)\r\n\r\nTHREE.Shape.prototype.extractAllPoints = function ( divisions ) {\r\n\r\n\treturn {\r\n\r\n\t\tshape: this.getTransformedPoints( divisions ),\r\n\t\tholes: this.getPointsHoles( divisions )\r\n\r\n\t};\r\n\r\n};\r\n\r\nTHREE.Shape.prototype.extractPoints = function ( divisions ) {\r\n\r\n\tif (this.useSpacedPoints) {\r\n\t\treturn this.extractAllSpacedPoints(divisions);\r\n\t}\r\n\r\n\treturn this.extractAllPoints(divisions);\r\n\r\n};\r\n\r\n//\r\n// THREE.Shape.prototype.extractAllPointsWithBend = function ( divisions, bend ) {\r\n//\r\n// \treturn {\r\n//\r\n// \t\tshape: this.transform( bend, divisions ),\r\n// \t\tholes: this.getPointsHoles( divisions, bend )\r\n//\r\n// \t};\r\n//\r\n// };\r\n\r\n// Get points of shape and holes (spaced by regular distance)\r\n\r\nTHREE.Shape.prototype.extractAllSpacedPoints = function ( divisions ) {\r\n\r\n\treturn {\r\n\r\n\t\tshape: this.getTransformedSpacedPoints( divisions ),\r\n\t\tholes: this.getSpacedPointsHoles( divisions )\r\n\r\n\t};\r\n\r\n};\r\n\r\n/**************************************************************\r\n *\tUtils\r\n **************************************************************/\r\n\r\nTHREE.Shape.Utils = {\r\n\r\n\ttriangulateShape: function ( contour, holes ) {\r\n\r\n\t\tfunction point_in_segment_2D_colin( inSegPt1, inSegPt2, inOtherPt ) {\r\n\t\t\t// inOtherPt needs to be colinear to the inSegment\r\n\t\t\tif ( inSegPt1.x != inSegPt2.x ) {\r\n\t\t\t\tif ( inSegPt1.x < inSegPt2.x ) {\r\n\t\t\t\t\treturn\t( ( inSegPt1.x <= inOtherPt.x ) && ( inOtherPt.x <= inSegPt2.x ) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn\t( ( inSegPt2.x <= inOtherPt.x ) && ( inOtherPt.x <= inSegPt1.x ) );\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif ( inSegPt1.y < inSegPt2.y ) {\r\n\t\t\t\t\treturn\t( ( inSegPt1.y <= inOtherPt.y ) && ( inOtherPt.y <= inSegPt2.y ) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn\t( ( inSegPt2.y <= inOtherPt.y ) && ( inOtherPt.y <= inSegPt1.y ) );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction intersect_segments_2D( inSeg1Pt1, inSeg1Pt2, inSeg2Pt1, inSeg2Pt2, inExcludeAdjacentSegs ) {\r\n\t\t\tvar EPSILON = 0.0000000001;\r\n\r\n\t\t\tvar seg1dx = inSeg1Pt2.x - inSeg1Pt1.x, seg1dy = inSeg1Pt2.y - inSeg1Pt1.y;\r\n\t\t\tvar seg2dx = inSeg2Pt2.x - inSeg2Pt1.x, seg2dy = inSeg2Pt2.y - inSeg2Pt1.y;\r\n\r\n\t\t\tvar seg1seg2dx = inSeg1Pt1.x - inSeg2Pt1.x;\r\n\t\t\tvar seg1seg2dy = inSeg1Pt1.y - inSeg2Pt1.y;\r\n\r\n\t\t\tvar limit\t\t= seg1dy * seg2dx - seg1dx * seg2dy;\r\n\t\t\tvar perpSeg1\t= seg1dy * seg1seg2dx - seg1dx * seg1seg2dy;\r\n\r\n\t\t\tif ( Math.abs(limit) > EPSILON ) {\t\t\t// not parallel\r\n\r\n\t\t\t\tvar perpSeg2;\r\n\t\t\t\tif ( limit > 0 ) {\r\n\t\t\t\t\tif ( ( perpSeg1 < 0 ) || ( perpSeg1 > limit ) ) \t\treturn [];\r\n\t\t\t\t\tperpSeg2 = seg2dy * seg1seg2dx - seg2dx * seg1seg2dy;\r\n\t\t\t\t\tif ( ( perpSeg2 < 0 ) || ( perpSeg2 > limit ) ) \t\treturn [];\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif ( ( perpSeg1 > 0 ) || ( perpSeg1 < limit ) ) \t\treturn [];\r\n\t\t\t\t\tperpSeg2 = seg2dy * seg1seg2dx - seg2dx * seg1seg2dy;\r\n\t\t\t\t\tif ( ( perpSeg2 > 0 ) || ( perpSeg2 < limit ) ) \t\treturn [];\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// i.e. to reduce rounding errors\r\n\t\t\t\t// intersection at endpoint of segment#1?\r\n\t\t\t\tif ( perpSeg2 == 0 ) {\r\n\t\t\t\t\tif ( ( inExcludeAdjacentSegs ) &&\r\n\t\t\t\t\t\t ( ( perpSeg1 == 0 ) || ( perpSeg1 == limit ) ) )\t\treturn [];\r\n\t\t\t\t\treturn [ inSeg1Pt1 ];\r\n\t\t\t\t}\r\n\t\t\t\tif ( perpSeg2 == limit ) {\r\n\t\t\t\t\tif ( ( inExcludeAdjacentSegs ) &&\r\n\t\t\t\t\t\t ( ( perpSeg1 == 0 ) || ( perpSeg1 == limit ) ) )\t\treturn [];\r\n\t\t\t\t\treturn [ inSeg1Pt2 ];\r\n\t\t\t\t}\r\n\t\t\t\t// intersection at endpoint of segment#2?\r\n\t\t\t\tif ( perpSeg1 == 0 )\t\treturn [ inSeg2Pt1 ];\r\n\t\t\t\tif ( perpSeg1 == limit )\treturn [ inSeg2Pt2 ];\r\n\r\n\t\t\t\t// return real intersection point\r\n\t\t\t\tvar factorSeg1 = perpSeg2 / limit;\r\n\t\t\t\treturn\t[ { x: inSeg1Pt1.x + factorSeg1 * seg1dx,\r\n\t\t\t\t\t\t\ty: inSeg1Pt1.y + factorSeg1 * seg1dy } ];\r\n\r\n\t\t\t} else {\t\t// parallel or colinear\r\n\t\t\t\tif ( ( perpSeg1 != 0 ) ||\r\n\t\t\t\t\t ( seg2dy * seg1seg2dx != seg2dx * seg1seg2dy ) ) \t\t\treturn [];\r\n\r\n\t\t\t\t// they are collinear or degenerate\r\n\t\t\t\tvar seg1Pt = ( (seg1dx == 0) && (seg1dy == 0) );\t// segment1 ist just a point?\r\n\t\t\t\tvar seg2Pt = ( (seg2dx == 0) && (seg2dy == 0) );\t// segment2 ist just a point?\r\n\t\t\t\t// both segments are points\r\n\t\t\t\tif ( seg1Pt && seg2Pt ) {\r\n\t\t\t\t\tif ( (inSeg1Pt1.x != inSeg2Pt1.x) ||\r\n\t\t\t\t\t\t (inSeg1Pt1.y != inSeg2Pt1.y) )\t\treturn []; \t// they are distinct points\r\n\t\t\t\t\treturn [ inSeg1Pt1 ]; \t\t\t\t\t// they are the same point\r\n\t\t\t\t}\r\n\t\t\t\t// segment#1 is a single point\r\n\t\t\t\tif ( seg1Pt ) {\r\n\t\t\t\t\tif (! point_in_segment_2D_colin( inSeg2Pt1, inSeg2Pt2, inSeg1Pt1 ) )\t\treturn [];\t\t// but not in segment#2\r\n\t\t\t\t\treturn [ inSeg1Pt1 ];\r\n\t\t\t\t}\r\n\t\t\t\t// segment#2 is a single point\r\n\t\t\t\tif ( seg2Pt ) {\r\n\t\t\t\t\tif (! point_in_segment_2D_colin( inSeg1Pt1, inSeg1Pt2, inSeg2Pt1 ) )\t\treturn [];\t\t// but not in segment#1\r\n\t\t\t\t\treturn [ inSeg2Pt1 ];\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// they are collinear segments, which might overlap\r\n\t\t\t\tvar seg1min, seg1max, seg1minVal, seg1maxVal;\r\n\t\t\t\tvar seg2min, seg2max, seg2minVal, seg2maxVal;\r\n\t\t\t\tif (seg1dx != 0) {\t\t// the segments are NOT on a vertical line\r\n\t\t\t\t\tif ( inSeg1Pt1.x < inSeg1Pt2.x ) {\r\n\t\t\t\t\t\tseg1min = inSeg1Pt1; seg1minVal = inSeg1Pt1.x;\r\n\t\t\t\t\t\tseg1max = inSeg1Pt2; seg1maxVal = inSeg1Pt2.x;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tseg1min = inSeg1Pt2; seg1minVal = inSeg1Pt2.x;\r\n\t\t\t\t\t\tseg1max = inSeg1Pt1; seg1maxVal = inSeg1Pt1.x;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ( inSeg2Pt1.x < inSeg2Pt2.x ) {\r\n\t\t\t\t\t\tseg2min = inSeg2Pt1; seg2minVal = inSeg2Pt1.x;\r\n\t\t\t\t\t\tseg2max = inSeg2Pt2; seg2maxVal = inSeg2Pt2.x;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tseg2min = inSeg2Pt2; seg2minVal = inSeg2Pt2.x;\r\n\t\t\t\t\t\tseg2max = inSeg2Pt1; seg2maxVal = inSeg2Pt1.x;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\t\t\t\t// the segments are on a vertical line\r\n\t\t\t\t\tif ( inSeg1Pt1.y < inSeg1Pt2.y ) {\r\n\t\t\t\t\t\tseg1min = inSeg1Pt1; seg1minVal = inSeg1Pt1.y;\r\n\t\t\t\t\t\tseg1max = inSeg1Pt2; seg1maxVal = inSeg1Pt2.y;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tseg1min = inSeg1Pt2; seg1minVal = inSeg1Pt2.y;\r\n\t\t\t\t\t\tseg1max = inSeg1Pt1; seg1maxVal = inSeg1Pt1.y;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ( inSeg2Pt1.y < inSeg2Pt2.y ) {\r\n\t\t\t\t\t\tseg2min = inSeg2Pt1; seg2minVal = inSeg2Pt1.y;\r\n\t\t\t\t\t\tseg2max = inSeg2Pt2; seg2maxVal = inSeg2Pt2.y;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tseg2min = inSeg2Pt2; seg2minVal = inSeg2Pt2.y;\r\n\t\t\t\t\t\tseg2max = inSeg2Pt1; seg2maxVal = inSeg2Pt1.y;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif ( seg1minVal <= seg2minVal ) {\r\n\t\t\t\t\tif ( seg1maxVal < seg2minVal )\treturn [];\r\n\t\t\t\t\tif ( seg1maxVal == seg2minVal )\t{\r\n\t\t\t\t\t\tif ( inExcludeAdjacentSegs )\t\treturn [];\r\n\t\t\t\t\t\treturn [ seg2min ];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ( seg1maxVal <= seg2maxVal )\treturn [ seg2min, seg1max ];\r\n\t\t\t\t\treturn\t[ seg2min, seg2max ];\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif ( seg1minVal > seg2maxVal )\treturn [];\r\n\t\t\t\t\tif ( seg1minVal == seg2maxVal )\t{\r\n\t\t\t\t\t\tif ( inExcludeAdjacentSegs )\t\treturn [];\r\n\t\t\t\t\t\treturn [ seg1min ];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ( seg1maxVal <= seg2maxVal )\treturn [ seg1min, seg1max ];\r\n\t\t\t\t\treturn\t[ seg1min, seg2max ];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction isPointInsideAngle( inVertex, inLegFromPt, inLegToPt, inOtherPt ) {\r\n\t\t\t// The order of legs is important\r\n\r\n\t\t\tvar EPSILON = 0.0000000001;\r\n\r\n\t\t\t// translation of all points, so that Vertex is at (0,0)\r\n\t\t\tvar legFromPtX\t= inLegFromPt.x - inVertex.x, legFromPtY\t= inLegFromPt.y - inVertex.y;\r\n\t\t\tvar legToPtX\t= inLegToPt.x\t- inVertex.x, legToPtY\t\t= inLegToPt.y\t- inVertex.y;\r\n\t\t\tvar otherPtX\t= inOtherPt.x\t- inVertex.x, otherPtY\t\t= inOtherPt.y\t- inVertex.y;\r\n\r\n\t\t\t// main angle >0: < 180 deg.; 0: 180 deg.; <0: > 180 deg.\r\n\t\t\tvar from2toAngle\t= legFromPtX * legToPtY - legFromPtY * legToPtX;\r\n\t\t\tvar from2otherAngle\t= legFromPtX * otherPtY - legFromPtY * otherPtX;\r\n\r\n\t\t\tif ( Math.abs(from2toAngle) > EPSILON ) {\t\t\t// angle != 180 deg.\r\n\r\n\t\t\t\tvar other2toAngle\t\t= otherPtX * legToPtY - otherPtY * legToPtX;\r\n\t\t\t\t// console.log( \"from2to: \" + from2toAngle + \", from2other: \" + from2otherAngle + \", other2to: \" + other2toAngle );\r\n\r\n\t\t\t\tif ( from2toAngle > 0 ) {\t\t\t\t// main angle < 180 deg.\r\n\t\t\t\t\treturn\t( ( from2otherAngle >= 0 ) && ( other2toAngle >= 0 ) );\r\n\t\t\t\t} else {\t\t\t\t\t\t\t\t// main angle > 180 deg.\r\n\t\t\t\t\treturn\t( ( from2otherAngle >= 0 ) || ( other2toAngle >= 0 ) );\r\n\t\t\t\t}\r\n\t\t\t} else {\t\t\t\t\t\t\t\t\t\t// angle == 180 deg.\r\n\t\t\t\t// console.log( \"from2to: 180 deg., from2other: \" + from2otherAngle );\r\n\t\t\t\treturn\t( from2otherAngle > 0 );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\tfunction removeHoles( contour, holes ) {\r\n\r\n\t\t\tvar shape = contour.concat(); // work on this shape\r\n\t\t\tvar hole;\r\n\r\n\t\t\tfunction isCutLineInsideAngles( inShapeIdx, inHoleIdx ) {\r\n\t\t\t\t// Check if hole point lies within angle around shape point\r\n\t\t\t\tvar lastShapeIdx = shape.length - 1;\r\n\r\n\t\t\t\tvar prevShapeIdx = inShapeIdx - 1;\r\n\t\t\t\tif ( prevShapeIdx < 0 )\t\t\tprevShapeIdx = lastShapeIdx;\r\n\r\n\t\t\t\tvar nextShapeIdx = inShapeIdx + 1;\r\n\t\t\t\tif ( nextShapeIdx > lastShapeIdx )\tnextShapeIdx = 0;\r\n\r\n\t\t\t\tvar insideAngle = isPointInsideAngle( shape[inShapeIdx], shape[ prevShapeIdx ], shape[ nextShapeIdx ], hole[inHoleIdx] );\r\n\t\t\t\tif (! insideAngle ) {\r\n\t\t\t\t\t// console.log( \"Vertex (Shape): \" + inShapeIdx + \", Point: \" + hole[inHoleIdx].x + \"/\" + hole[inHoleIdx].y );\r\n\t\t\t\t\treturn\tfalse;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Check if shape point lies within angle around hole point\r\n\t\t\t\tvar lastHoleIdx = hole.length - 1;\r\n\r\n\t\t\t\tvar prevHoleIdx = inHoleIdx - 1;\r\n\t\t\t\tif ( prevHoleIdx < 0 )\t\t\tprevHoleIdx = lastHoleIdx;\r\n\r\n\t\t\t\tvar nextHoleIdx = inHoleIdx + 1;\r\n\t\t\t\tif ( nextHoleIdx > lastHoleIdx )\tnextHoleIdx = 0;\r\n\r\n\t\t\t\tinsideAngle = isPointInsideAngle( hole[inHoleIdx], hole[ prevHoleIdx ], hole[ nextHoleIdx ], shape[inShapeIdx] );\r\n\t\t\t\tif (! insideAngle ) {\r\n\t\t\t\t\t// console.log( \"Vertex (Hole): \" + inHoleIdx + \", Point: \" + shape[inShapeIdx].x + \"/\" + shape[inShapeIdx].y );\r\n\t\t\t\t\treturn\tfalse;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn\ttrue;\r\n\t\t\t}\r\n\r\n\t\t\tfunction intersectsShapeEdge( inShapePt, inHolePt ) {\r\n\t\t\t\t// checks for intersections with shape edges\r\n\t\t\t\tvar sIdx, nextIdx, intersection;\r\n\t\t\t\tfor ( sIdx = 0; sIdx < shape.length; sIdx ++ ) {\r\n\t\t\t\t\tnextIdx = sIdx+1; nextIdx %= shape.length;\r\n\t\t\t\t\tintersection = intersect_segments_2D( inShapePt, inHolePt, shape[sIdx], shape[nextIdx], true );\r\n\t\t\t\t\tif ( intersection.length > 0 )\t\treturn\ttrue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn\tfalse;\r\n\t\t\t}\r\n\r\n\t\t\tvar indepHoles = [];\r\n\r\n\t\t\tfunction intersectsHoleEdge( inShapePt, inHolePt ) {\r\n\t\t\t\t// checks for intersections with hole edges\r\n\t\t\t\tvar ihIdx, chkHole,\r\n\t\t\t\t\thIdx, nextIdx, intersection;\r\n\t\t\t\tfor ( ihIdx = 0; ihIdx < indepHoles.length; ihIdx ++ ) {\r\n\t\t\t\t\tchkHole = holes[indepHoles[ihIdx]];\r\n\t\t\t\t\tfor ( hIdx = 0; hIdx < chkHole.length; hIdx ++ ) {\r\n\t\t\t\t\t\tnextIdx = hIdx+1; nextIdx %= chkHole.length;\r\n\t\t\t\t\t\tintersection = intersect_segments_2D( inShapePt, inHolePt, chkHole[hIdx], chkHole[nextIdx], true );\r\n\t\t\t\t\t\tif ( intersection.length > 0 )\t\treturn\ttrue;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn\tfalse;\r\n\t\t\t}\r\n\r\n\t\t\tvar holeIndex, shapeIndex,\r\n\t\t\t\tshapePt, holePt,\r\n\t\t\t\tholeIdx, cutKey, failedCuts = [],\r\n\t\t\t\ttmpShape1, tmpShape2,\r\n\t\t\t\ttmpHole1, tmpHole2;\r\n\r\n\t\t\tfor ( var h = 0, hl = holes.length; h < hl; h ++ ) {\r\n\r\n\t\t\t\tindepHoles.push( h );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar minShapeIndex = 0;\r\n\t\t\tvar counter = indepHoles.length * 2;\r\n\t\t\twhile ( indepHoles.length > 0 ) {\r\n\t\t\t\tcounter --;\r\n\t\t\t\tif ( counter < 0 ) {\r\n\t\t\t\t\tconsole.log( \"Infinite Loop! Holes left:\" + indepHoles.length + \", Probably Hole outside Shape!\" );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// search for shape-vertex and hole-vertex,\r\n\t\t\t\t// which can be connected without intersections\r\n\t\t\t\tfor ( shapeIndex = minShapeIndex; shapeIndex < shape.length; shapeIndex ++ ) {\r\n\r\n\t\t\t\t\tshapePt = shape[ shapeIndex ];\r\n\t\t\t\t\tholeIndex\t= - 1;\r\n\r\n\t\t\t\t\t// search for hole which can be reached without intersections\r\n\t\t\t\t\tfor ( var h = 0; h < indepHoles.length; h ++ ) {\r\n\t\t\t\t\t\tholeIdx = indepHoles[h];\r\n\r\n\t\t\t\t\t\t// prevent multiple checks\r\n\t\t\t\t\t\tcutKey = shapePt.x + \":\" + shapePt.y + \":\" + holeIdx;\r\n\t\t\t\t\t\tif ( failedCuts[cutKey] !== undefined )\t\t\tcontinue;\r\n\r\n\t\t\t\t\t\thole = holes[holeIdx];\r\n\t\t\t\t\t\tfor ( var h2 = 0; h2 < hole.length; h2 ++ ) {\r\n\t\t\t\t\t\t\tholePt = hole[ h2 ];\r\n\t\t\t\t\t\t\tif (! isCutLineInsideAngles( shapeIndex, h2 ) )\t\tcontinue;\r\n\t\t\t\t\t\t\tif ( intersectsShapeEdge( shapePt, holePt ) )\t\tcontinue;\r\n\t\t\t\t\t\t\tif ( intersectsHoleEdge( shapePt, holePt ) )\t\tcontinue;\r\n\r\n\t\t\t\t\t\t\tholeIndex = h2;\r\n\t\t\t\t\t\t\tindepHoles.splice(h,1);\r\n\r\n\t\t\t\t\t\t\ttmpShape1 = shape.slice( 0, shapeIndex+1 );\r\n\t\t\t\t\t\t\ttmpShape2 = shape.slice( shapeIndex );\r\n\t\t\t\t\t\t\ttmpHole1 = hole.slice( holeIndex );\r\n\t\t\t\t\t\t\ttmpHole2 = hole.slice( 0, holeIndex+1 );\r\n\r\n\t\t\t\t\t\t\tshape = tmpShape1.concat( tmpHole1 ).concat( tmpHole2 ).concat( tmpShape2 );\r\n\r\n\t\t\t\t\t\t\tminShapeIndex = shapeIndex;\r\n\r\n\t\t\t\t\t\t\t// Debug only, to show the selected cuts\r\n\t\t\t\t\t\t\t// glob_CutLines.push( [ shapePt, holePt ] );\r\n\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif ( holeIndex >= 0 )\tbreak;\t\t// hole-vertex found\r\n\r\n\t\t\t\t\t\tfailedCuts[cutKey] = true;\t\t\t// remember failure\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ( holeIndex >= 0 )\tbreak;\t\t// hole-vertex found\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn shape; \t\t\t/* shape with no holes */\r\n\t\t}\r\n\r\n\r\n\t\tvar i, il, f, face,\r\n\t\t\tkey, index,\r\n\t\t\tallPointsMap = {};\r\n\r\n\t\t// To maintain reference to old shape, one must match coordinates, or offset the indices from original arrays. It's probably easier to do the first.\r\n\r\n\t\tvar allpoints = contour.concat();\r\n\r\n\t\tfor ( var h = 0, hl = holes.length; h < hl; h ++ ) {\r\n\r\n\t\t\tArray.prototype.push.apply( allpoints, holes[h] );\r\n\r\n\t\t}\r\n\r\n\t\t//console.log( \"allpoints\",allpoints, allpoints.length );\r\n\r\n\t\t// prepare all points map\r\n\r\n\t\tfor ( i = 0, il = allpoints.length; i < il; i ++ ) {\r\n\r\n\t\t\tkey = allpoints[ i ].x + \":\" + allpoints[ i ].y;\r\n\r\n\t\t\tif ( allPointsMap[ key ] !== undefined ) {\r\n\r\n\t\t\t\tconsole.log( \"Duplicate point\", key );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tallPointsMap[ key ] = i;\r\n\r\n\t\t}\r\n\r\n\t\t// remove holes by cutting paths to holes and adding them to the shape\r\n\t\tvar shapeWithoutHoles = removeHoles( contour, holes );\r\n\r\n\t\tvar triangles = THREE.FontUtils.Triangulate( shapeWithoutHoles, false ); // True returns indices for points of spooled shape\r\n\t\t//console.log( \"triangles\",triangles, triangles.length );\r\n\r\n\t\t// check all face vertices against all points map\r\n\r\n\t\tfor ( i = 0, il = triangles.length; i < il; i ++ ) {\r\n\r\n\t\t\tface = triangles[ i ];\r\n\r\n\t\t\tfor ( f = 0; f < 3; f ++ ) {\r\n\r\n\t\t\t\tkey = face[ f ].x + \":\" + face[ f ].y;\r\n\r\n\t\t\t\tindex = allPointsMap[ key ];\r\n\r\n\t\t\t\tif ( index !== undefined ) {\r\n\r\n\t\t\t\t\tface[ f ] = index;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn triangles.concat();\r\n\r\n\t},\r\n\r\n\tisClockWise: function ( pts ) {\r\n\r\n\t\treturn THREE.FontUtils.Triangulate.area( pts ) < 0;\r\n\r\n\t},\r\n\r\n\t// Bezier Curves formulas obtained from\r\n\t// http://en.wikipedia.org/wiki/B%C3%A9zier_curve\r\n\r\n\t// Quad Bezier Functions\r\n\r\n\tb2p0: function ( t, p ) {\r\n\r\n\t\tvar k = 1 - t;\r\n\t\treturn k * k * p;\r\n\r\n\t},\r\n\r\n\tb2p1: function ( t, p ) {\r\n\r\n\t\treturn 2 * ( 1 - t ) * t * p;\r\n\r\n\t},\r\n\r\n\tb2p2: function ( t, p ) {\r\n\r\n\t\treturn t * t * p;\r\n\r\n\t},\r\n\r\n\tb2: function ( t, p0, p1, p2 ) {\r\n\r\n\t\treturn this.b2p0( t, p0 ) + this.b2p1( t, p1 ) + this.b2p2( t, p2 );\r\n\r\n\t},\r\n\r\n\t// Cubic Bezier Functions\r\n\r\n\tb3p0: function ( t, p ) {\r\n\r\n\t\tvar k = 1 - t;\r\n\t\treturn k * k * k * p;\r\n\r\n\t},\r\n\r\n\tb3p1: function ( t, p ) {\r\n\r\n\t\tvar k = 1 - t;\r\n\t\treturn 3 * k * k * t * p;\r\n\r\n\t},\r\n\r\n\tb3p2: function ( t, p ) {\r\n\r\n\t\tvar k = 1 - t;\r\n\t\treturn 3 * k * t * t * p;\r\n\r\n\t},\r\n\r\n\tb3p3: function ( t, p ) {\r\n\r\n\t\treturn t * t * t * p;\r\n\r\n\t},\r\n\r\n\tb3: function ( t, p0, p1, p2, p3 ) {\r\n\r\n\t\treturn this.b3p0( t, p0 ) + this.b3p1( t, p1 ) + this.b3p2( t, p2 ) + this.b3p3( t, p3 );\r\n\r\n\t}\r\n\r\n};\r\n\r\n\r\n// File:src/extras/curves/LineCurve.js\r\n\r\n/**************************************************************\r\n *\tLine\r\n **************************************************************/\r\n\r\nTHREE.LineCurve = function ( v1, v2 ) {\r\n\r\n\tthis.v1 = v1;\r\n\tthis.v2 = v2;\r\n\r\n};\r\n\r\nTHREE.LineCurve.prototype = Object.create( THREE.Curve.prototype );\r\n\r\nTHREE.LineCurve.prototype.getPoint = function ( t ) {\r\n\r\n\tvar point = this.v2.clone().sub(this.v1);\r\n\tpoint.multiplyScalar( t ).add( this.v1 );\r\n\r\n\treturn point;\r\n\r\n};\r\n\r\n// Line curve is linear, so we can overwrite default getPointAt\r\n\r\nTHREE.LineCurve.prototype.getPointAt = function ( u ) {\r\n\r\n\treturn this.getPoint( u );\r\n\r\n};\r\n\r\nTHREE.LineCurve.prototype.getTangent = function( t ) {\r\n\r\n\tvar tangent = this.v2.clone().sub(this.v1);\r\n\r\n\treturn tangent.normalize();\r\n\r\n};\r\n\r\n// File:src/extras/curves/QuadraticBezierCurve.js\r\n\r\n/**************************************************************\r\n *\tQuadratic Bezier curve\r\n **************************************************************/\r\n\r\n\r\nTHREE.QuadraticBezierCurve = function ( v0, v1, v2 ) {\r\n\r\n\tthis.v0 = v0;\r\n\tthis.v1 = v1;\r\n\tthis.v2 = v2;\r\n\r\n};\r\n\r\nTHREE.QuadraticBezierCurve.prototype = Object.create( THREE.Curve.prototype );\r\n\r\n\r\nTHREE.QuadraticBezierCurve.prototype.getPoint = function ( t ) {\r\n\r\n\tvar vector = new THREE.Vector2();\r\n\r\n\tvector.x = THREE.Shape.Utils.b2( t, this.v0.x, this.v1.x, this.v2.x );\r\n\tvector.y = THREE.Shape.Utils.b2( t, this.v0.y, this.v1.y, this.v2.y );\r\n\r\n\treturn vector;\r\n\r\n};\r\n\r\n\r\nTHREE.QuadraticBezierCurve.prototype.getTangent = function( t ) {\r\n\r\n\tvar vector = new THREE.Vector2();\r\n\r\n\tvector.x = THREE.Curve.Utils.tangentQuadraticBezier( t, this.v0.x, this.v1.x, this.v2.x );\r\n\tvector.y = THREE.Curve.Utils.tangentQuadraticBezier( t, this.v0.y, this.v1.y, this.v2.y );\r\n\r\n\t// returns unit vector\r\n\r\n\treturn vector.normalize();\r\n\r\n};\r\n\r\n// File:src/extras/curves/CubicBezierCurve.js\r\n\r\n/**************************************************************\r\n *\tCubic Bezier curve\r\n **************************************************************/\r\n\r\nTHREE.CubicBezierCurve = function ( v0, v1, v2, v3 ) {\r\n\r\n\tthis.v0 = v0;\r\n\tthis.v1 = v1;\r\n\tthis.v2 = v2;\r\n\tthis.v3 = v3;\r\n\r\n};\r\n\r\nTHREE.CubicBezierCurve.prototype = Object.create( THREE.Curve.prototype );\r\n\r\nTHREE.CubicBezierCurve.prototype.getPoint = function ( t ) {\r\n\r\n\tvar tx, ty;\r\n\r\n\ttx = THREE.Shape.Utils.b3( t, this.v0.x, this.v1.x, this.v2.x, this.v3.x );\r\n\tty = THREE.Shape.Utils.b3( t, this.v0.y, this.v1.y, this.v2.y, this.v3.y );\r\n\r\n\treturn new THREE.Vector2( tx, ty );\r\n\r\n};\r\n\r\nTHREE.CubicBezierCurve.prototype.getTangent = function( t ) {\r\n\r\n\tvar tx, ty;\r\n\r\n\ttx = THREE.Curve.Utils.tangentCubicBezier( t, this.v0.x, this.v1.x, this.v2.x, this.v3.x );\r\n\tty = THREE.Curve.Utils.tangentCubicBezier( t, this.v0.y, this.v1.y, this.v2.y, this.v3.y );\r\n\r\n\tvar tangent = new THREE.Vector2( tx, ty );\r\n\ttangent.normalize();\r\n\r\n\treturn tangent;\r\n\r\n};\r\n\r\n// File:src/extras/curves/SplineCurve.js\r\n\r\n/**************************************************************\r\n *\tSpline curve\r\n **************************************************************/\r\n\r\nTHREE.SplineCurve = function ( points /* array of Vector2 */ ) {\r\n\r\n\tthis.points = ( points == undefined ) ? [] : points;\r\n\r\n};\r\n\r\nTHREE.SplineCurve.prototype = Object.create( THREE.Curve.prototype );\r\n\r\nTHREE.SplineCurve.prototype.getPoint = function ( t ) {\r\n\r\n\tvar points = this.points;\r\n\tvar point = ( points.length - 1 ) * t;\r\n\r\n\tvar intPoint = Math.floor( point );\r\n\tvar weight = point - intPoint;\r\n\r\n\tvar point0 = points[ intPoint == 0 ? intPoint : intPoint - 1 ]\r\n\tvar point1 = points[ intPoint ]\r\n\tvar point2 = points[ intPoint > points.length - 2 ? points.length -1 : intPoint + 1 ]\r\n\tvar point3 = points[ intPoint > points.length - 3 ? points.length -1 : intPoint + 2 ]\r\n\r\n\tvar vector = new THREE.Vector2();\r\n\r\n\tvector.x = THREE.Curve.Utils.interpolate( point0.x, point1.x, point2.x, point3.x, weight );\r\n\tvector.y = THREE.Curve.Utils.interpolate( point0.y, point1.y, point2.y, point3.y, weight );\r\n\r\n\treturn vector;\r\n\r\n};\r\n\r\n// File:src/extras/curves/EllipseCurve.js\r\n\r\n/**************************************************************\r\n *\tEllipse curve\r\n **************************************************************/\r\n\r\nTHREE.EllipseCurve = function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise ) {\r\n\r\n\tthis.aX = aX;\r\n\tthis.aY = aY;\r\n\r\n\tthis.xRadius = xRadius;\r\n\tthis.yRadius = yRadius;\r\n\r\n\tthis.aStartAngle = aStartAngle;\r\n\tthis.aEndAngle = aEndAngle;\r\n\r\n\tthis.aClockwise = aClockwise;\r\n\r\n};\r\n\r\nTHREE.EllipseCurve.prototype = Object.create( THREE.Curve.prototype );\r\n\r\nTHREE.EllipseCurve.prototype.getPoint = function ( t ) {\r\n\r\n\tvar deltaAngle = this.aEndAngle - this.aStartAngle;\r\n\r\n\tif ( deltaAngle < 0 ) deltaAngle += Math.PI * 2;\r\n\tif ( deltaAngle > Math.PI * 2 ) deltaAngle -= Math.PI * 2;\r\n\r\n\tvar angle;\r\n\r\n\tif ( this.aClockwise === true ) {\r\n\r\n\t\tangle = this.aEndAngle + ( 1 - t ) * ( Math.PI * 2 - deltaAngle );\r\n\r\n\t} else {\r\n\r\n\t\tangle = this.aStartAngle + t * deltaAngle;\r\n\r\n\t}\r\n\t\r\n\tvar vector = new THREE.Vector2();\r\n\r\n\tvector.x = this.aX + this.xRadius * Math.cos( angle );\r\n\tvector.y = this.aY + this.yRadius * Math.sin( angle );\r\n\r\n\treturn vector;\r\n\r\n};\r\n\r\n// File:src/extras/curves/ArcCurve.js\r\n\r\n/**************************************************************\r\n *\tArc curve\r\n **************************************************************/\r\n\r\nTHREE.ArcCurve = function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\r\n\r\n\tTHREE.EllipseCurve.call( this, aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\r\n};\r\n\r\nTHREE.ArcCurve.prototype = Object.create( THREE.EllipseCurve.prototype );\r\n\r\n// File:src/extras/curves/LineCurve3.js\r\n\r\n/**************************************************************\r\n *\tLine3D\r\n **************************************************************/\r\n\r\nTHREE.LineCurve3 = THREE.Curve.create(\r\n\r\n\tfunction ( v1, v2 ) {\r\n\r\n\t\tthis.v1 = v1;\r\n\t\tthis.v2 = v2;\r\n\r\n\t},\r\n\r\n\tfunction ( t ) {\r\n\r\n\t\tvar vector = new THREE.Vector3();\r\n\r\n\t\tvector.subVectors( this.v2, this.v1 ); // diff\r\n\t\tvector.multiplyScalar( t );\r\n\t\tvector.add( this.v1 );\r\n\r\n\t\treturn vector;\r\n\r\n\t}\r\n\r\n);\r\n\r\n// File:src/extras/curves/QuadraticBezierCurve3.js\r\n\r\n/**************************************************************\r\n *\tQuadratic Bezier 3D curve\r\n **************************************************************/\r\n\r\nTHREE.QuadraticBezierCurve3 = THREE.Curve.create(\r\n\r\n\tfunction ( v0, v1, v2 ) {\r\n\r\n\t\tthis.v0 = v0;\r\n\t\tthis.v1 = v1;\r\n\t\tthis.v2 = v2;\r\n\r\n\t},\r\n\r\n\tfunction ( t ) {\r\n\r\n\t\tvar vector = new THREE.Vector3();\r\n\r\n\t\tvector.x = THREE.Shape.Utils.b2( t, this.v0.x, this.v1.x, this.v2.x );\r\n\t\tvector.y = THREE.Shape.Utils.b2( t, this.v0.y, this.v1.y, this.v2.y );\r\n\t\tvector.z = THREE.Shape.Utils.b2( t, this.v0.z, this.v1.z, this.v2.z );\r\n\r\n\t\treturn vector;\r\n\r\n\t}\r\n\r\n);\r\n\r\n// File:src/extras/curves/CubicBezierCurve3.js\r\n\r\n/**************************************************************\r\n *\tCubic Bezier 3D curve\r\n **************************************************************/\r\n\r\nTHREE.CubicBezierCurve3 = THREE.Curve.create(\r\n\r\n\tfunction ( v0, v1, v2, v3 ) {\r\n\r\n\t\tthis.v0 = v0;\r\n\t\tthis.v1 = v1;\r\n\t\tthis.v2 = v2;\r\n\t\tthis.v3 = v3;\r\n\r\n\t},\r\n\r\n\tfunction ( t ) {\r\n\r\n\t\tvar vector = new THREE.Vector3();\r\n\r\n\t\tvector.x = THREE.Shape.Utils.b3( t, this.v0.x, this.v1.x, this.v2.x, this.v3.x );\r\n\t\tvector.y = THREE.Shape.Utils.b3( t, this.v0.y, this.v1.y, this.v2.y, this.v3.y );\r\n\t\tvector.z = THREE.Shape.Utils.b3( t, this.v0.z, this.v1.z, this.v2.z, this.v3.z );\r\n\r\n\t\treturn vector;\r\n\r\n\t}\r\n\r\n);\r\n\r\n// File:src/extras/curves/SplineCurve3.js\r\n\r\n/**************************************************************\r\n *\tSpline 3D curve\r\n **************************************************************/\r\n\r\n\r\nTHREE.SplineCurve3 = THREE.Curve.create(\r\n\r\n\tfunction ( points /* array of Vector3 */) {\r\n\r\n\t\tthis.points = ( points == undefined ) ? [] : points;\r\n\r\n\t},\r\n\r\n\tfunction ( t ) {\r\n\r\n\t\tvar points = this.points;\r\n\t\tvar point = ( points.length - 1 ) * t;\r\n\r\n\t\tvar intPoint = Math.floor( point );\r\n\t\tvar weight = point - intPoint;\r\n\r\n\t\tvar point0 = points[ intPoint == 0 ? intPoint : intPoint - 1 ];\r\n\t\tvar point1 = points[ intPoint ];\r\n\t\tvar point2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ];\r\n\t\tvar point3 = points[ intPoint > points.length - 3 ? points.length - 1 : intPoint + 2 ];\r\n\r\n\t\tvar vector = new THREE.Vector3();\r\n\r\n\t\tvector.x = THREE.Curve.Utils.interpolate( point0.x, point1.x, point2.x, point3.x, weight );\r\n\t\tvector.y = THREE.Curve.Utils.interpolate( point0.y, point1.y, point2.y, point3.y, weight );\r\n\t\tvector.z = THREE.Curve.Utils.interpolate( point0.z, point1.z, point2.z, point3.z, weight );\r\n\r\n\t\treturn vector;\r\n\r\n\t}\r\n\r\n);\r\n\r\n// File:src/extras/curves/ClosedSplineCurve3.js\r\n\r\n/**************************************************************\r\n *\tClosed Spline 3D curve\r\n **************************************************************/\r\n\r\n\r\nTHREE.ClosedSplineCurve3 = THREE.Curve.create(\r\n\r\n\tfunction ( points /* array of Vector3 */) {\r\n\r\n\t\tthis.points = ( points == undefined ) ? [] : points;\r\n\r\n\t},\r\n\r\n\tfunction ( t ) {\r\n\r\n\t\tvar points = this.points;\r\n\t\tvar point = ( points.length - 0 ) * t; // This needs to be from 0-length +1\r\n\r\n\t\tvar intPoint = Math.floor( point );\r\n\t\tvar weight = point - intPoint;\r\n\r\n\t\tintPoint += intPoint > 0 ? 0 : ( Math.floor( Math.abs( intPoint ) / points.length ) + 1 ) * points.length;\r\n\r\n\t\tvar point0 = points[ ( intPoint - 1 ) % points.length ];\r\n\t\tvar point1 = points[ ( intPoint ) % points.length ];\r\n\t\tvar point2 = points[ ( intPoint + 1 ) % points.length ];\r\n\t\tvar point3 = points[ ( intPoint + 2 ) % points.length ];\r\n\r\n\t\tvar vector = new THREE.Vector3();\r\n\r\n\t\tvector.x = THREE.Curve.Utils.interpolate( point0.x, point1.x, point2.x, point3.x, weight );\r\n\t\tvector.y = THREE.Curve.Utils.interpolate( point0.y, point1.y, point2.y, point3.y, weight );\r\n\t\tvector.z = THREE.Curve.Utils.interpolate( point0.z, point1.z, point2.z, point3.z, weight );\r\n\r\n\t\treturn vector;\r\n\r\n\t}\r\n\r\n);\r\n\r\n// File:src/extras/animation/AnimationHandler.js\r\n\r\n/**\r\n * @author mikael emtinger / http://gomo.se/\r\n */\r\n\r\nTHREE.AnimationHandler = {\r\n\r\n\tLINEAR: 0,\r\n\tCATMULLROM: 1,\r\n\tCATMULLROM_FORWARD: 2,\r\n\r\n\t//\r\n\r\n\tadd: function () { console.warn( 'THREE.AnimationHandler.add() has been deprecated.' ); },\r\n\tget: function () { console.warn( 'THREE.AnimationHandler.get() has been deprecated.' ); },\r\n\tremove: function () { console.warn( 'THREE.AnimationHandler.remove() has been deprecated.' ); },\r\n\r\n\t//\r\n\r\n\tanimations: [],\r\n\r\n\tinit: function ( data ) {\r\n\r\n\t\tif ( data.initialized === true ) return;\r\n\r\n\t\t// loop through all keys\r\n\r\n\t\tfor ( var h = 0; h < data.hierarchy.length; h ++ ) {\r\n\r\n\t\t\tfor ( var k = 0; k < data.hierarchy[ h ].keys.length; k ++ ) {\r\n\r\n\t\t\t\t// remove minus times\r\n\r\n\t\t\t\tif ( data.hierarchy[ h ].keys[ k ].time < 0 ) {\r\n\r\n\t\t\t\t\t data.hierarchy[ h ].keys[ k ].time = 0;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// create quaternions\r\n\r\n\t\t\t\tif ( data.hierarchy[ h ].keys[ k ].rot !== undefined &&\r\n\t\t\t\t ! ( data.hierarchy[ h ].keys[ k ].rot instanceof THREE.Quaternion ) ) {\r\n\r\n\t\t\t\t\tvar quat = data.hierarchy[ h ].keys[ k ].rot;\r\n\t\t\t\t\tdata.hierarchy[ h ].keys[ k ].rot = new THREE.Quaternion().fromArray( quat );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// prepare morph target keys\r\n\r\n\t\t\tif ( data.hierarchy[ h ].keys.length && data.hierarchy[ h ].keys[ 0 ].morphTargets !== undefined ) {\r\n\r\n\t\t\t\t// get all used\r\n\r\n\t\t\t\tvar usedMorphTargets = {};\r\n\r\n\t\t\t\tfor ( var k = 0; k < data.hierarchy[ h ].keys.length; k ++ ) {\r\n\r\n\t\t\t\t\tfor ( var m = 0; m < data.hierarchy[ h ].keys[ k ].morphTargets.length; m ++ ) {\r\n\r\n\t\t\t\t\t\tvar morphTargetName = data.hierarchy[ h ].keys[ k ].morphTargets[ m ];\r\n\t\t\t\t\t\tusedMorphTargets[ morphTargetName ] = - 1;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdata.hierarchy[ h ].usedMorphTargets = usedMorphTargets;\r\n\r\n\r\n\t\t\t\t// set all used on all frames\r\n\r\n\t\t\t\tfor ( var k = 0; k < data.hierarchy[ h ].keys.length; k ++ ) {\r\n\r\n\t\t\t\t\tvar influences = {};\r\n\r\n\t\t\t\t\tfor ( var morphTargetName in usedMorphTargets ) {\r\n\r\n\t\t\t\t\t\tfor ( var m = 0; m < data.hierarchy[ h ].keys[ k ].morphTargets.length; m ++ ) {\r\n\r\n\t\t\t\t\t\t\tif ( data.hierarchy[ h ].keys[ k ].morphTargets[ m ] === morphTargetName ) {\r\n\r\n\t\t\t\t\t\t\t\tinfluences[ morphTargetName ] = data.hierarchy[ h ].keys[ k ].morphTargetsInfluences[ m ];\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif ( m === data.hierarchy[ h ].keys[ k ].morphTargets.length ) {\r\n\r\n\t\t\t\t\t\t\tinfluences[ morphTargetName ] = 0;\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdata.hierarchy[ h ].keys[ k ].morphTargetsInfluences = influences;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\r\n\t\t\t// remove all keys that are on the same time\r\n\r\n\t\t\tfor ( var k = 1; k < data.hierarchy[ h ].keys.length; k ++ ) {\r\n\r\n\t\t\t\tif ( data.hierarchy[ h ].keys[ k ].time === data.hierarchy[ h ].keys[ k - 1 ].time ) {\r\n\r\n\t\t\t\t\tdata.hierarchy[ h ].keys.splice( k, 1 );\r\n\t\t\t\t\tk --;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\r\n\t\t\t// set index\r\n\r\n\t\t\tfor ( var k = 0; k < data.hierarchy[ h ].keys.length; k ++ ) {\r\n\r\n\t\t\t\tdata.hierarchy[ h ].keys[ k ].index = k;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tdata.initialized = true;\r\n\r\n\t\treturn data;\r\n\r\n\t},\r\n\r\n\tparse: function ( root ) {\r\n\r\n\t\tvar parseRecurseHierarchy = function ( root, hierarchy ) {\r\n\r\n\t\t\thierarchy.push( root );\r\n\r\n\t\t\tfor ( var c = 0; c < root.children.length; c ++ )\r\n\t\t\t\tparseRecurseHierarchy( root.children[ c ], hierarchy );\r\n\r\n\t\t};\r\n\r\n\t\t// setup hierarchy\r\n\r\n\t\tvar hierarchy = [];\r\n\r\n\t\tif ( root instanceof THREE.SkinnedMesh ) {\r\n\r\n\t\t\tfor ( var b = 0; b < root.skeleton.bones.length; b ++ ) {\r\n\r\n\t\t\t\thierarchy.push( root.skeleton.bones[ b ] );\r\n\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\r\n\t\t\tparseRecurseHierarchy( root, hierarchy );\r\n\r\n\t\t}\r\n\r\n\t\treturn hierarchy;\r\n\r\n\t},\r\n\r\n\tplay: function ( animation ) {\r\n\r\n\t\tif ( this.animations.indexOf( animation ) === - 1 ) {\r\n\r\n\t\t\tthis.animations.push( animation );\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tstop: function ( animation ) {\r\n\r\n\t\tvar index = this.animations.indexOf( animation );\r\n\r\n\t\tif ( index !== - 1 ) {\r\n\r\n\t\t\tthis.animations.splice( index, 1 );\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tupdate: function ( deltaTimeMS ) {\r\n\r\n\t\tfor ( var i = 0; i < this.animations.length; i ++ ) {\r\n\r\n\t\t\tthis.animations[ i ].resetBlendWeights( );\r\n\r\n\t\t}\r\n\r\n\t\tfor ( var i = 0; i < this.animations.length; i ++ ) {\r\n\r\n\t\t\tthis.animations[ i ].update( deltaTimeMS );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/extras/animation/Animation.js\r\n\r\n/**\r\n * @author mikael emtinger / http://gomo.se/\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.Animation = function ( root, data ) {\r\n\r\n\tthis.root = root;\r\n\tthis.data = THREE.AnimationHandler.init( data );\r\n\tthis.hierarchy = THREE.AnimationHandler.parse( root );\r\n\r\n\tthis.currentTime = 0;\r\n\tthis.timeScale = 1;\r\n\r\n\tthis.isPlaying = false;\r\n\tthis.loop = true;\r\n\tthis.weight = 0;\r\n\r\n\tthis.interpolationType = THREE.AnimationHandler.LINEAR;\r\n\r\n};\r\n\r\n\r\nTHREE.Animation.prototype.keyTypes = [ \"pos\", \"rot\", \"scl\" ];\r\n\r\n\r\nTHREE.Animation.prototype.play = function ( startTime, weight ) {\r\n\r\n\tthis.currentTime = startTime !== undefined ? startTime : 0;\r\n\tthis.weight = weight !== undefined ? weight: 1;\r\n\r\n\tthis.isPlaying = true;\r\n\r\n\tthis.reset();\r\n\r\n\tTHREE.AnimationHandler.play( this );\r\n\r\n};\r\n\r\n\r\nTHREE.Animation.prototype.stop = function() {\r\n\r\n\tthis.isPlaying = false;\r\n\r\n\tTHREE.AnimationHandler.stop( this );\r\n\r\n};\r\n\r\nTHREE.Animation.prototype.reset = function () {\r\n\r\n\tfor ( var h = 0, hl = this.hierarchy.length; h < hl; h ++ ) {\r\n\r\n\t\tvar object = this.hierarchy[ h ];\r\n\r\n\t\tobject.matrixAutoUpdate = true;\r\n\r\n\t\tif ( object.animationCache === undefined ) {\r\n\r\n\t\t\tobject.animationCache = {\r\n\t\t\t\tanimations: {},\r\n\t\t\t\tblending: {\r\n\t\t\t\t\tpositionWeight: 0.0,\r\n\t\t\t\t\tquaternionWeight: 0.0,\r\n\t\t\t\t\tscaleWeight: 0.0\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tif ( object.animationCache.animations[this.data.name] === undefined ) {\r\n\r\n\t\t\tobject.animationCache.animations[this.data.name] = {};\r\n\t\t\tobject.animationCache.animations[this.data.name].prevKey = { pos: 0, rot: 0, scl: 0 };\r\n\t\t\tobject.animationCache.animations[this.data.name].nextKey = { pos: 0, rot: 0, scl: 0 };\r\n\t\t\tobject.animationCache.animations[this.data.name].originalMatrix = object.matrix;\r\n\r\n\t\t}\r\n\r\n\t\tvar animationCache = object.animationCache.animations[this.data.name];\r\n\r\n\t\t// Get keys to match our current time\r\n\r\n\t\tfor ( var t = 0; t < 3; t ++ ) {\r\n\r\n\t\t\tvar type = this.keyTypes[ t ];\r\n\r\n\t\t\tvar prevKey = this.data.hierarchy[ h ].keys[ 0 ];\r\n\t\t\tvar nextKey = this.getNextKeyWith( type, h, 1 );\r\n\r\n\t\t\twhile ( nextKey.time < this.currentTime && nextKey.index > prevKey.index ) {\r\n\r\n\t\t\t\tprevKey = nextKey;\r\n\t\t\t\tnextKey = this.getNextKeyWith( type, h, nextKey.index + 1 );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tanimationCache.prevKey[ type ] = prevKey;\r\n\t\t\tanimationCache.nextKey[ type ] = nextKey;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.Animation.prototype.resetBlendWeights = function () {\r\n\r\n\tfor ( var h = 0, hl = this.hierarchy.length; h < hl; h ++ ) {\r\n\r\n\t\tvar object = this.hierarchy[ h ];\r\n\r\n\t\tif ( object.animationCache !== undefined ) {\r\n\r\n\t\t\tobject.animationCache.blending.positionWeight = 0.0;\r\n\t\t\tobject.animationCache.blending.quaternionWeight = 0.0;\r\n\t\t\tobject.animationCache.blending.scaleWeight = 0.0;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.Animation.prototype.update = (function(){\r\n\r\n\tvar points = [];\r\n\tvar target = new THREE.Vector3();\r\n\tvar newVector = new THREE.Vector3();\r\n\tvar newQuat = new THREE.Quaternion();\r\n\r\n\t// Catmull-Rom spline\r\n\r\n\tvar interpolateCatmullRom = function ( points, scale ) {\r\n\r\n\t\tvar c = [], v3 = [],\r\n\t\tpoint, intPoint, weight, w2, w3,\r\n\t\tpa, pb, pc, pd;\r\n\r\n\t\tpoint = ( points.length - 1 ) * scale;\r\n\t\tintPoint = Math.floor( point );\r\n\t\tweight = point - intPoint;\r\n\r\n\t\tc[ 0 ] = intPoint === 0 ? intPoint : intPoint - 1;\r\n\t\tc[ 1 ] = intPoint;\r\n\t\tc[ 2 ] = intPoint > points.length - 2 ? intPoint : intPoint + 1;\r\n\t\tc[ 3 ] = intPoint > points.length - 3 ? intPoint : intPoint + 2;\r\n\r\n\t\tpa = points[ c[ 0 ] ];\r\n\t\tpb = points[ c[ 1 ] ];\r\n\t\tpc = points[ c[ 2 ] ];\r\n\t\tpd = points[ c[ 3 ] ];\r\n\r\n\t\tw2 = weight * weight;\r\n\t\tw3 = weight * w2;\r\n\r\n\t\tv3[ 0 ] = interpolate( pa[ 0 ], pb[ 0 ], pc[ 0 ], pd[ 0 ], weight, w2, w3 );\r\n\t\tv3[ 1 ] = interpolate( pa[ 1 ], pb[ 1 ], pc[ 1 ], pd[ 1 ], weight, w2, w3 );\r\n\t\tv3[ 2 ] = interpolate( pa[ 2 ], pb[ 2 ], pc[ 2 ], pd[ 2 ], weight, w2, w3 );\r\n\r\n\t\treturn v3;\r\n\r\n\t};\r\n\r\n\tvar interpolate = function ( p0, p1, p2, p3, t, t2, t3 ) {\r\n\r\n\t\tvar v0 = ( p2 - p0 ) * 0.5,\r\n\t\t\tv1 = ( p3 - p1 ) * 0.5;\r\n\r\n\t\treturn ( 2 * ( p1 - p2 ) + v0 + v1 ) * t3 + ( - 3 * ( p1 - p2 ) - 2 * v0 - v1 ) * t2 + v0 * t + p1;\r\n\r\n\t};\r\n\r\n\treturn function ( delta ) {\r\n\r\n\t\tif ( this.isPlaying === false ) return;\r\n\r\n\t\tthis.currentTime += delta * this.timeScale;\r\n\r\n\t\tif ( this.weight === 0 )\r\n\t\t\treturn;\r\n\r\n\t\t//\r\n\r\n\t\tvar duration = this.data.length;\r\n\r\n\t\tif ( this.currentTime > duration || this.currentTime < 0 ) {\r\n\r\n\t\t\tif ( this.loop ) {\r\n\r\n\t\t\t\tthis.currentTime %= duration;\r\n\r\n\t\t\t\tif ( this.currentTime < 0 )\r\n\t\t\t\t\tthis.currentTime += duration;\r\n\r\n\t\t\t\tthis.reset();\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tthis.stop();\r\n\t\t\t\treturn;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tfor ( var h = 0, hl = this.hierarchy.length; h < hl; h ++ ) {\r\n\r\n\t\t\tvar object = this.hierarchy[ h ];\r\n\t\t\tvar animationCache = object.animationCache.animations[this.data.name];\r\n\t\t\tvar blending = object.animationCache.blending;\r\n\r\n\t\t\t// loop through pos/rot/scl\r\n\r\n\t\t\tfor ( var t = 0; t < 3; t ++ ) {\r\n\r\n\t\t\t\t// get keys\r\n\r\n\t\t\t\tvar type = this.keyTypes[ t ];\r\n\t\t\t\tvar prevKey = animationCache.prevKey[ type ];\r\n\t\t\t\tvar nextKey = animationCache.nextKey[ type ];\r\n\r\n\t\t\t\tif ( ( this.timeScale > 0 && nextKey.time <= this.currentTime ) ||\r\n\t\t\t\t\t( this.timeScale < 0 && prevKey.time >= this.currentTime ) ) {\r\n\r\n\t\t\t\t\tprevKey = this.data.hierarchy[ h ].keys[ 0 ];\r\n\t\t\t\t\tnextKey = this.getNextKeyWith( type, h, 1 );\r\n\r\n\t\t\t\t\twhile ( nextKey.time < this.currentTime && nextKey.index > prevKey.index ) {\r\n\r\n\t\t\t\t\t\tprevKey = nextKey;\r\n\t\t\t\t\t\tnextKey = this.getNextKeyWith( type, h, nextKey.index + 1 );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tanimationCache.prevKey[ type ] = prevKey;\r\n\t\t\t\t\tanimationCache.nextKey[ type ] = nextKey;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tobject.matrixAutoUpdate = true;\r\n\t\t\t\tobject.matrixWorldNeedsUpdate = true;\r\n\r\n\t\t\t\tvar scale = ( this.currentTime - prevKey.time ) / ( nextKey.time - prevKey.time );\r\n\r\n\t\t\t\tvar prevXYZ = prevKey[ type ];\r\n\t\t\t\tvar nextXYZ = nextKey[ type ];\r\n\r\n\t\t\t\tif ( scale < 0 ) scale = 0;\r\n\t\t\t\tif ( scale > 1 ) scale = 1;\r\n\r\n\t\t\t\t// interpolate\r\n\r\n\t\t\t\tif ( type === \"pos\" ) {\r\n\r\n\t\t\t\t\tif ( this.interpolationType === THREE.AnimationHandler.LINEAR ) {\r\n\r\n\t\t\t\t\t\tnewVector.x = prevXYZ[ 0 ] + ( nextXYZ[ 0 ] - prevXYZ[ 0 ] ) * scale;\r\n\t\t\t\t\t\tnewVector.y = prevXYZ[ 1 ] + ( nextXYZ[ 1 ] - prevXYZ[ 1 ] ) * scale;\r\n\t\t\t\t\t\tnewVector.z = prevXYZ[ 2 ] + ( nextXYZ[ 2 ] - prevXYZ[ 2 ] ) * scale;\r\n\r\n\t\t\t\t\t\t// blend\r\n\t\t\t\t\t\tvar proportionalWeight = this.weight / ( this.weight + blending.positionWeight );\r\n\t\t\t\t\t\tobject.position.lerp( newVector, proportionalWeight );\r\n\t\t\t\t\t\tblending.positionWeight += this.weight;\r\n\r\n\t\t\t\t\t} else if ( this.interpolationType === THREE.AnimationHandler.CATMULLROM ||\r\n\t\t\t\t\t\t\t\tthis.interpolationType === THREE.AnimationHandler.CATMULLROM_FORWARD ) {\r\n\r\n\t\t\t\t\t\tpoints[ 0 ] = this.getPrevKeyWith( \"pos\", h, prevKey.index - 1 )[ \"pos\" ];\r\n\t\t\t\t\t\tpoints[ 1 ] = prevXYZ;\r\n\t\t\t\t\t\tpoints[ 2 ] = nextXYZ;\r\n\t\t\t\t\t\tpoints[ 3 ] = this.getNextKeyWith( \"pos\", h, nextKey.index + 1 )[ \"pos\" ];\r\n\r\n\t\t\t\t\t\tscale = scale * 0.33 + 0.33;\r\n\r\n\t\t\t\t\t\tvar currentPoint = interpolateCatmullRom( points, scale );\r\n\t\t\t\t\t\tvar proportionalWeight = this.weight / ( this.weight + blending.positionWeight );\r\n\t\t\t\t\t\tblending.positionWeight += this.weight;\r\n\r\n\t\t\t\t\t\t// blend\r\n\r\n\t\t\t\t\t\tvar vector = object.position;\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tvector.x = vector.x + ( currentPoint[ 0 ] - vector.x ) * proportionalWeight;\r\n\t\t\t\t\t\tvector.y = vector.y + ( currentPoint[ 1 ] - vector.y ) * proportionalWeight;\r\n\t\t\t\t\t\tvector.z = vector.z + ( currentPoint[ 2 ] - vector.z ) * proportionalWeight;\r\n\r\n\t\t\t\t\t\tif ( this.interpolationType === THREE.AnimationHandler.CATMULLROM_FORWARD ) {\r\n\r\n\t\t\t\t\t\t\tvar forwardPoint = interpolateCatmullRom( points, scale * 1.01 );\r\n\r\n\t\t\t\t\t\t\ttarget.set( forwardPoint[ 0 ], forwardPoint[ 1 ], forwardPoint[ 2 ] );\r\n\t\t\t\t\t\t\ttarget.sub( vector );\r\n\t\t\t\t\t\t\ttarget.y = 0;\r\n\t\t\t\t\t\t\ttarget.normalize();\r\n\r\n\t\t\t\t\t\t\tvar angle = Math.atan2( target.x, target.z );\r\n\t\t\t\t\t\t\tobject.rotation.set( 0, angle, 0 );\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else if ( type === \"rot\" ) {\r\n\r\n\t\t\t\t\tTHREE.Quaternion.slerp( prevXYZ, nextXYZ, newQuat, scale );\r\n\r\n\t\t\t\t\t// Avoid paying the cost of an additional slerp if we don't have to\r\n\t\t\t\t\tif ( blending.quaternionWeight === 0 ) {\r\n\r\n\t\t\t\t\t\tobject.quaternion.copy(newQuat);\r\n\t\t\t\t\t\tblending.quaternionWeight = this.weight;\r\n\r\n\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\tvar proportionalWeight = this.weight / ( this.weight + blending.quaternionWeight );\r\n\t\t\t\t\t\tTHREE.Quaternion.slerp( object.quaternion, newQuat, object.quaternion, proportionalWeight );\r\n\t\t\t\t\t\tblending.quaternionWeight += this.weight;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else if ( type === \"scl\" ) {\r\n\r\n\t\t\t\t\tnewVector.x = prevXYZ[ 0 ] + ( nextXYZ[ 0 ] - prevXYZ[ 0 ] ) * scale;\r\n\t\t\t\t\tnewVector.y = prevXYZ[ 1 ] + ( nextXYZ[ 1 ] - prevXYZ[ 1 ] ) * scale;\r\n\t\t\t\t\tnewVector.z = prevXYZ[ 2 ] + ( nextXYZ[ 2 ] - prevXYZ[ 2 ] ) * scale;\r\n\r\n\t\t\t\t\tvar proportionalWeight = this.weight / ( this.weight + blending.scaleWeight );\r\n\t\t\t\t\tobject.scale.lerp( newVector, proportionalWeight );\r\n\t\t\t\t\tblending.scaleWeight += this.weight;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\r\n\t};\r\n\r\n})();\r\n\r\n\r\n\r\n\r\n\r\n// Get next key with\r\n\r\nTHREE.Animation.prototype.getNextKeyWith = function ( type, h, key ) {\r\n\r\n\tvar keys = this.data.hierarchy[ h ].keys;\r\n\r\n\tif ( this.interpolationType === THREE.AnimationHandler.CATMULLROM ||\r\n\t\t this.interpolationType === THREE.AnimationHandler.CATMULLROM_FORWARD ) {\r\n\r\n\t\tkey = key < keys.length - 1 ? key : keys.length - 1;\r\n\r\n\t} else {\r\n\r\n\t\tkey = key % keys.length;\r\n\r\n\t}\r\n\r\n\tfor ( ; key < keys.length; key ++ ) {\r\n\r\n\t\tif ( keys[ key ][ type ] !== undefined ) {\r\n\r\n\t\t\treturn keys[ key ];\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\treturn this.data.hierarchy[ h ].keys[ 0 ];\r\n\r\n};\r\n\r\n// Get previous key with\r\n\r\nTHREE.Animation.prototype.getPrevKeyWith = function ( type, h, key ) {\r\n\r\n\tvar keys = this.data.hierarchy[ h ].keys;\r\n\r\n\tif ( this.interpolationType === THREE.AnimationHandler.CATMULLROM ||\r\n\t\tthis.interpolationType === THREE.AnimationHandler.CATMULLROM_FORWARD ) {\r\n\r\n\t\tkey = key > 0 ? key : 0;\r\n\r\n\t} else {\r\n\r\n\t\tkey = key >= 0 ? key : key + keys.length;\r\n\r\n\t}\r\n\r\n\r\n\tfor ( ; key >= 0; key -- ) {\r\n\r\n\t\tif ( keys[ key ][ type ] !== undefined ) {\r\n\r\n\t\t\treturn keys[ key ];\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\treturn this.data.hierarchy[ h ].keys[ keys.length - 1 ];\r\n\r\n};\r\n\r\n// File:src/extras/animation/KeyFrameAnimation.js\r\n\r\n/**\r\n * @author mikael emtinger / http://gomo.se/\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author khang duong\r\n * @author erik kitson\r\n */\r\n\r\nTHREE.KeyFrameAnimation = function ( data ) {\r\n\r\n\tthis.root = data.node;\r\n\tthis.data = THREE.AnimationHandler.init( data );\r\n\tthis.hierarchy = THREE.AnimationHandler.parse( this.root );\r\n\tthis.currentTime = 0;\r\n\tthis.timeScale = 0.001;\r\n\tthis.isPlaying = false;\r\n\tthis.isPaused = true;\r\n\tthis.loop = true;\r\n\r\n\t// initialize to first keyframes\r\n\r\n\tfor ( var h = 0, hl = this.hierarchy.length; h < hl; h ++ ) {\r\n\r\n\t\tvar keys = this.data.hierarchy[h].keys,\r\n\t\t\tsids = this.data.hierarchy[h].sids,\r\n\t\t\tobj = this.hierarchy[h];\r\n\r\n\t\tif ( keys.length && sids ) {\r\n\r\n\t\t\tfor ( var s = 0; s < sids.length; s ++ ) {\r\n\r\n\t\t\t\tvar sid = sids[ s ],\r\n\t\t\t\t\tnext = this.getNextKeyWith( sid, h, 0 );\r\n\r\n\t\t\t\tif ( next ) {\r\n\r\n\t\t\t\t\tnext.apply( sid );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tobj.matrixAutoUpdate = false;\r\n\t\t\tthis.data.hierarchy[h].node.updateMatrix();\r\n\t\t\tobj.matrixWorldNeedsUpdate = true;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n};\r\n\r\n\r\nTHREE.KeyFrameAnimation.prototype.play = function ( startTime ) {\r\n\r\n\tthis.currentTime = startTime !== undefined ? startTime : 0;\r\n\r\n\tif ( this.isPlaying === false ) {\r\n\r\n\t\tthis.isPlaying = true;\r\n\r\n\t\t// reset key cache\r\n\r\n\t\tvar h, hl = this.hierarchy.length,\r\n\t\t\tobject,\r\n\t\t\tnode;\r\n\r\n\t\tfor ( h = 0; h < hl; h ++ ) {\r\n\r\n\t\t\tobject = this.hierarchy[ h ];\r\n\t\t\tnode = this.data.hierarchy[ h ];\r\n\r\n\t\t\tif ( node.animationCache === undefined ) {\r\n\r\n\t\t\t\tnode.animationCache = {};\r\n\t\t\t\tnode.animationCache.prevKey = null;\r\n\t\t\t\tnode.animationCache.nextKey = null;\r\n\t\t\t\tnode.animationCache.originalMatrix = object.matrix;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar keys = this.data.hierarchy[h].keys;\r\n\r\n\t\t\tif (keys.length) {\r\n\r\n\t\t\t\tnode.animationCache.prevKey = keys[ 0 ];\r\n\t\t\t\tnode.animationCache.nextKey = keys[ 1 ];\r\n\r\n\t\t\t\tthis.startTime = Math.min( keys[0].time, this.startTime );\r\n\t\t\t\tthis.endTime = Math.max( keys[keys.length - 1].time, this.endTime );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tthis.update( 0 );\r\n\r\n\t}\r\n\r\n\tthis.isPaused = false;\r\n\r\n\tTHREE.AnimationHandler.play( this );\r\n\r\n};\r\n\r\n\r\nTHREE.KeyFrameAnimation.prototype.stop = function() {\r\n\r\n\tthis.isPlaying = false;\r\n\tthis.isPaused = false;\r\n\r\n\tTHREE.AnimationHandler.stop( this );\r\n\r\n\t// reset JIT matrix and remove cache\r\n\r\n\tfor ( var h = 0; h < this.data.hierarchy.length; h ++ ) {\r\n\t\t\r\n\t\tvar obj = this.hierarchy[ h ];\r\n\t\tvar node = this.data.hierarchy[ h ];\r\n\r\n\t\tif ( node.animationCache !== undefined ) {\r\n\r\n\t\t\tvar original = node.animationCache.originalMatrix;\r\n\r\n\t\t\toriginal.copy( obj.matrix );\r\n\t\t\tobj.matrix = original;\r\n\r\n\t\t\tdelete node.animationCache;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n};\r\n\r\n\r\n// Update\r\n\r\nTHREE.KeyFrameAnimation.prototype.update = function ( delta ) {\r\n\r\n\tif ( this.isPlaying === false ) return;\r\n\r\n\tthis.currentTime += delta * this.timeScale;\r\n\r\n\t//\r\n\r\n\tvar duration = this.data.length;\r\n\r\n\tif ( this.loop === true && this.currentTime > duration ) {\r\n\r\n\t\tthis.currentTime %= duration;\r\n\r\n\t}\r\n\r\n\tthis.currentTime = Math.min( this.currentTime, duration );\r\n\r\n\tfor ( var h = 0, hl = this.hierarchy.length; h < hl; h ++ ) {\r\n\r\n\t\tvar object = this.hierarchy[ h ];\r\n\t\tvar node = this.data.hierarchy[ h ];\r\n\r\n\t\tvar keys = node.keys,\r\n\t\t\tanimationCache = node.animationCache;\r\n\r\n\r\n\t\tif ( keys.length ) {\r\n\r\n\t\t\tvar prevKey = animationCache.prevKey;\r\n\t\t\tvar nextKey = animationCache.nextKey;\r\n\r\n\t\t\tif ( nextKey.time <= this.currentTime ) {\r\n\r\n\t\t\t\twhile ( nextKey.time < this.currentTime && nextKey.index > prevKey.index ) {\r\n\r\n\t\t\t\t\tprevKey = nextKey;\r\n\t\t\t\t\tnextKey = keys[ prevKey.index + 1 ];\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tanimationCache.prevKey = prevKey;\r\n\t\t\t\tanimationCache.nextKey = nextKey;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( nextKey.time >= this.currentTime ) {\r\n\r\n\t\t\t\tprevKey.interpolate( nextKey, this.currentTime );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tprevKey.interpolate( nextKey, nextKey.time );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tthis.data.hierarchy[ h ].node.updateMatrix();\r\n\t\t\tobject.matrixWorldNeedsUpdate = true;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n};\r\n\r\n// Get next key with\r\n\r\nTHREE.KeyFrameAnimation.prototype.getNextKeyWith = function( sid, h, key ) {\r\n\r\n\tvar keys = this.data.hierarchy[ h ].keys;\r\n\tkey = key % keys.length;\r\n\r\n\tfor ( ; key < keys.length; key ++ ) {\r\n\r\n\t\tif ( keys[ key ].hasTarget( sid ) ) {\r\n\r\n\t\t\treturn keys[ key ];\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\treturn keys[ 0 ];\r\n\r\n};\r\n\r\n// Get previous key with\r\n\r\nTHREE.KeyFrameAnimation.prototype.getPrevKeyWith = function( sid, h, key ) {\r\n\r\n\tvar keys = this.data.hierarchy[ h ].keys;\r\n\tkey = key >= 0 ? key : key + keys.length;\r\n\r\n\tfor ( ; key >= 0; key -- ) {\r\n\r\n\t\tif ( keys[ key ].hasTarget( sid ) ) {\r\n\r\n\t\t\treturn keys[ key ];\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\treturn keys[ keys.length - 1 ];\r\n\r\n};\r\n\r\n// File:src/extras/animation/MorphAnimation.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com\r\n */\r\n\r\nTHREE.MorphAnimation = function ( mesh ) {\r\n\r\n\tthis.mesh = mesh;\r\n\tthis.frames = mesh.morphTargetInfluences.length;\r\n\tthis.currentTime = 0;\r\n\tthis.duration = 1000;\r\n\tthis.loop = true;\r\n\r\n\tthis.isPlaying = false;\r\n\r\n};\r\n\r\nTHREE.MorphAnimation.prototype = {\r\n\r\n\tplay: function () {\r\n\r\n\t\tthis.isPlaying = true;\r\n\r\n\t},\r\n\r\n\tpause: function () {\r\n\r\n\t\tthis.isPlaying = false;\r\n\r\n\t},\r\n\r\n\tupdate: ( function () {\r\n\r\n\t\tvar lastFrame = 0;\r\n\t\tvar currentFrame = 0;\r\n\r\n\t\treturn function ( delta ) {\r\n\r\n\t\t\tif ( this.isPlaying === false ) return;\r\n\r\n\t\t\tthis.currentTime += delta;\r\n\r\n\t\t\tif ( this.loop === true && this.currentTime > this.duration ) {\r\n\r\n\t\t\t\tthis.currentTime %= this.duration;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tthis.currentTime = Math.min( this.currentTime, this.duration );\r\n\r\n\t\t\tvar interpolation = this.duration / this.frames;\r\n\t\t\tvar frame = Math.floor( this.currentTime / interpolation );\r\n\r\n\t\t\tif ( frame != currentFrame ) {\r\n\r\n\t\t\t\tthis.mesh.morphTargetInfluences[ lastFrame ] = 0;\r\n\t\t\t\tthis.mesh.morphTargetInfluences[ currentFrame ] = 1;\r\n\t\t\t\tthis.mesh.morphTargetInfluences[ frame ] = 0;\r\n\r\n\t\t\t\tlastFrame = currentFrame;\r\n\t\t\t\tcurrentFrame = frame;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tthis.mesh.morphTargetInfluences[ frame ] = ( this.currentTime % interpolation ) / interpolation;\r\n\t\t\tthis.mesh.morphTargetInfluences[ lastFrame ] = 1 - this.mesh.morphTargetInfluences[ frame ];\r\n\r\n\t\t}\r\n\r\n\t} )()\r\n\r\n};\r\n\r\n// File:src/extras/geometries/BoxGeometry.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * based on http://papervision3d.googlecode.com/svn/trunk/as3/trunk/src/org/papervision3d/objects/primitives/Cube.as\r\n */\r\n\r\nTHREE.BoxGeometry = function ( width, height, depth, widthSegments, heightSegments, depthSegments ) {\r\n\r\n\tTHREE.Geometry.call( this );\r\n\r\n\tthis.type = 'BoxGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\twidth: width,\r\n\t\theight: height,\r\n\t\tdepth: depth,\r\n\t\twidthSegments: widthSegments,\r\n\t\theightSegments: heightSegments,\r\n\t\tdepthSegments: depthSegments\r\n\t};\r\n\r\n\tthis.widthSegments = widthSegments || 1;\r\n\tthis.heightSegments = heightSegments || 1;\r\n\tthis.depthSegments = depthSegments || 1;\r\n\r\n\tvar scope = this;\r\n\r\n\tvar width_half = width / 2;\r\n\tvar height_half = height / 2;\r\n\tvar depth_half = depth / 2;\r\n\r\n\tbuildPlane( 'z', 'y', - 1, - 1, depth, height, width_half, 0 ); // px\r\n\tbuildPlane( 'z', 'y', 1, - 1, depth, height, - width_half, 1 ); // nx\r\n\tbuildPlane( 'x', 'z', 1, 1, width, depth, height_half, 2 ); // py\r\n\tbuildPlane( 'x', 'z', 1, - 1, width, depth, - height_half, 3 ); // ny\r\n\tbuildPlane( 'x', 'y', 1, - 1, width, height, depth_half, 4 ); // pz\r\n\tbuildPlane( 'x', 'y', - 1, - 1, width, height, - depth_half, 5 ); // nz\r\n\r\n\tfunction buildPlane( u, v, udir, vdir, width, height, depth, materialIndex ) {\r\n\r\n\t\tvar w, ix, iy,\r\n\t\tgridX = scope.widthSegments,\r\n\t\tgridY = scope.heightSegments,\r\n\t\twidth_half = width / 2,\r\n\t\theight_half = height / 2,\r\n\t\toffset = scope.vertices.length;\r\n\r\n\t\tif ( ( u === 'x' && v === 'y' ) || ( u === 'y' && v === 'x' ) ) {\r\n\r\n\t\t\tw = 'z';\r\n\r\n\t\t} else if ( ( u === 'x' && v === 'z' ) || ( u === 'z' && v === 'x' ) ) {\r\n\r\n\t\t\tw = 'y';\r\n\t\t\tgridY = scope.depthSegments;\r\n\r\n\t\t} else if ( ( u === 'z' && v === 'y' ) || ( u === 'y' && v === 'z' ) ) {\r\n\r\n\t\t\tw = 'x';\r\n\t\t\tgridX = scope.depthSegments;\r\n\r\n\t\t}\r\n\r\n\t\tvar gridX1 = gridX + 1,\r\n\t\tgridY1 = gridY + 1,\r\n\t\tsegment_width = width / gridX,\r\n\t\tsegment_height = height / gridY,\r\n\t\tnormal = new THREE.Vector3();\r\n\r\n\t\tnormal[ w ] = depth > 0 ? 1 : - 1;\r\n\r\n\t\tfor ( iy = 0; iy < gridY1; iy ++ ) {\r\n\r\n\t\t\tfor ( ix = 0; ix < gridX1; ix ++ ) {\r\n\r\n\t\t\t\tvar vector = new THREE.Vector3();\r\n\t\t\t\tvector[ u ] = ( ix * segment_width - width_half ) * udir;\r\n\t\t\t\tvector[ v ] = ( iy * segment_height - height_half ) * vdir;\r\n\t\t\t\tvector[ w ] = depth;\r\n\r\n\t\t\t\tscope.vertices.push( vector );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tfor ( iy = 0; iy < gridY; iy ++ ) {\r\n\r\n\t\t\tfor ( ix = 0; ix < gridX; ix ++ ) {\r\n\r\n\t\t\t\tvar a = ix + gridX1 * iy;\r\n\t\t\t\tvar b = ix + gridX1 * ( iy + 1 );\r\n\t\t\t\tvar c = ( ix + 1 ) + gridX1 * ( iy + 1 );\r\n\t\t\t\tvar d = ( ix + 1 ) + gridX1 * iy;\r\n\r\n\t\t\t\tvar uva = new THREE.Vector2( ix / gridX, 1 - iy / gridY );\r\n\t\t\t\tvar uvb = new THREE.Vector2( ix / gridX, 1 - ( iy + 1 ) / gridY );\r\n\t\t\t\tvar uvc = new THREE.Vector2( ( ix + 1 ) / gridX, 1 - ( iy + 1 ) / gridY );\r\n\t\t\t\tvar uvd = new THREE.Vector2( ( ix + 1 ) / gridX, 1 - iy / gridY );\r\n\r\n\t\t\t\tvar face = new THREE.Face3( a + offset, b + offset, d + offset );\r\n\t\t\t\tface.normal.copy( normal );\r\n\t\t\t\tface.vertexNormals.push( normal.clone(), normal.clone(), normal.clone() );\r\n\t\t\t\tface.materialIndex = materialIndex;\r\n\r\n\t\t\t\tscope.faces.push( face );\r\n\t\t\t\tscope.faceVertexUvs[ 0 ].push( [ uva, uvb, uvd ] );\r\n\r\n\t\t\t\tface = new THREE.Face3( b + offset, c + offset, d + offset );\r\n\t\t\t\tface.normal.copy( normal );\r\n\t\t\t\tface.vertexNormals.push( normal.clone(), normal.clone(), normal.clone() );\r\n\t\t\t\tface.materialIndex = materialIndex;\r\n\r\n\t\t\t\tscope.faces.push( face );\r\n\t\t\t\tscope.faceVertexUvs[ 0 ].push( [ uvb.clone(), uvc, uvd.clone() ] );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tthis.mergeVertices();\r\n\r\n};\r\n\r\nTHREE.BoxGeometry.prototype = Object.create( THREE.Geometry.prototype );\r\n\r\n// File:src/extras/geometries/CircleGeometry.js\r\n\r\n/**\r\n * @author hughes\r\n */\r\n\r\nTHREE.CircleGeometry = function ( radius, segments, thetaStart, thetaLength ) {\r\n\r\n\tTHREE.Geometry.call( this );\r\n\r\n\tthis.type = 'CircleGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\tradius: radius,\r\n\t\tsegments: segments,\r\n\t\tthetaStart: thetaStart,\r\n\t\tthetaLength: thetaLength\r\n\t};\r\n\r\n\tradius = radius || 50;\r\n\tsegments = segments !== undefined ? Math.max( 3, segments ) : 8;\r\n\r\n\tthetaStart = thetaStart !== undefined ? thetaStart : 0;\r\n\tthetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2;\r\n\r\n\tvar i, uvs = [],\r\n\tcenter = new THREE.Vector3(), centerUV = new THREE.Vector2( 0.5, 0.5 );\r\n\r\n\tthis.vertices.push(center);\r\n\tuvs.push( centerUV );\r\n\r\n\tfor ( i = 0; i <= segments; i ++ ) {\r\n\r\n\t\tvar vertex = new THREE.Vector3();\r\n\t\tvar segment = thetaStart + i / segments * thetaLength;\r\n\r\n\t\tvertex.x = radius * Math.cos( segment );\r\n\t\tvertex.y = radius * Math.sin( segment );\r\n\r\n\t\tthis.vertices.push( vertex );\r\n\t\tuvs.push( new THREE.Vector2( ( vertex.x / radius + 1 ) / 2, ( vertex.y / radius + 1 ) / 2 ) );\r\n\r\n\t}\r\n\r\n\tvar n = new THREE.Vector3( 0, 0, 1 );\r\n\r\n\tfor ( i = 1; i <= segments; i ++ ) {\r\n\r\n\t\tthis.faces.push( new THREE.Face3( i, i + 1, 0, [ n.clone(), n.clone(), n.clone() ] ) );\r\n\t\tthis.faceVertexUvs[ 0 ].push( [ uvs[ i ].clone(), uvs[ i + 1 ].clone(), centerUV.clone() ] );\r\n\r\n\t}\r\n\r\n\tthis.computeFaceNormals();\r\n\r\n\tthis.boundingSphere = new THREE.Sphere( new THREE.Vector3(), radius );\r\n\r\n};\r\n\r\nTHREE.CircleGeometry.prototype = Object.create( THREE.Geometry.prototype );\r\n\r\n// File:src/extras/geometries/CubeGeometry.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\n\r\nTHREE.CubeGeometry = function ( width, height, depth, widthSegments, heightSegments, depthSegments ) {\r\n\r\n\tconsole.warn( 'THREE.CubeGeometry has been renamed to THREE.BoxGeometry.' );\r\n\treturn new THREE.BoxGeometry( width, height, depth, widthSegments, heightSegments, depthSegments );\r\n\r\n };\r\n\r\n// File:src/extras/geometries/CylinderGeometry.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.CylinderGeometry = function ( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded ) {\r\n\r\n\tTHREE.Geometry.call( this );\r\n\r\n\tthis.type = 'CylinderGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\tradiusTop: radiusTop,\r\n\t\tradiusBottom: radiusBottom,\r\n\t\theight: height,\r\n\t\tradialSegments: radialSegments,\r\n\t\theightSegments: heightSegments,\r\n\t\topenEnded: openEnded\r\n\t};\r\n\r\n\tradiusTop = radiusTop !== undefined ? radiusTop : 20;\r\n\tradiusBottom = radiusBottom !== undefined ? radiusBottom : 20;\r\n\theight = height !== undefined ? height : 100;\r\n\r\n\tradialSegments = radialSegments || 8;\r\n\theightSegments = heightSegments || 1;\r\n\r\n\topenEnded = openEnded !== undefined ? openEnded : false;\r\n\r\n\tvar heightHalf = height / 2;\r\n\r\n\tvar x, y, vertices = [], uvs = [];\r\n\r\n\tfor ( y = 0; y <= heightSegments; y ++ ) {\r\n\r\n\t\tvar verticesRow = [];\r\n\t\tvar uvsRow = [];\r\n\r\n\t\tvar v = y / heightSegments;\r\n\t\tvar radius = v * ( radiusBottom - radiusTop ) + radiusTop;\r\n\r\n\t\tfor ( x = 0; x <= radialSegments; x ++ ) {\r\n\r\n\t\t\tvar u = x / radialSegments;\r\n\r\n\t\t\tvar vertex = new THREE.Vector3();\r\n\t\t\tvertex.x = radius * Math.sin( u * Math.PI * 2 );\r\n\t\t\tvertex.y = - v * height + heightHalf;\r\n\t\t\tvertex.z = radius * Math.cos( u * Math.PI * 2 );\r\n\r\n\t\t\tthis.vertices.push( vertex );\r\n\r\n\t\t\tverticesRow.push( this.vertices.length - 1 );\r\n\t\t\tuvsRow.push( new THREE.Vector2( u, 1 - v ) );\r\n\r\n\t\t}\r\n\r\n\t\tvertices.push( verticesRow );\r\n\t\tuvs.push( uvsRow );\r\n\r\n\t}\r\n\r\n\tvar tanTheta = ( radiusBottom - radiusTop ) / height;\r\n\tvar na, nb;\r\n\r\n\tfor ( x = 0; x < radialSegments; x ++ ) {\r\n\r\n\t\tif ( radiusTop !== 0 ) {\r\n\r\n\t\t\tna = this.vertices[ vertices[ 0 ][ x ] ].clone();\r\n\t\t\tnb = this.vertices[ vertices[ 0 ][ x + 1 ] ].clone();\r\n\r\n\t\t} else {\r\n\r\n\t\t\tna = this.vertices[ vertices[ 1 ][ x ] ].clone();\r\n\t\t\tnb = this.vertices[ vertices[ 1 ][ x + 1 ] ].clone();\r\n\r\n\t\t}\r\n\r\n\t\tna.setY( Math.sqrt( na.x * na.x + na.z * na.z ) * tanTheta ).normalize();\r\n\t\tnb.setY( Math.sqrt( nb.x * nb.x + nb.z * nb.z ) * tanTheta ).normalize();\r\n\r\n\t\tfor ( y = 0; y < heightSegments; y ++ ) {\r\n\r\n\t\t\tvar v1 = vertices[ y ][ x ];\r\n\t\t\tvar v2 = vertices[ y + 1 ][ x ];\r\n\t\t\tvar v3 = vertices[ y + 1 ][ x + 1 ];\r\n\t\t\tvar v4 = vertices[ y ][ x + 1 ];\r\n\r\n\t\t\tvar n1 = na.clone();\r\n\t\t\tvar n2 = na.clone();\r\n\t\t\tvar n3 = nb.clone();\r\n\t\t\tvar n4 = nb.clone();\r\n\r\n\t\t\tvar uv1 = uvs[ y ][ x ].clone();\r\n\t\t\tvar uv2 = uvs[ y + 1 ][ x ].clone();\r\n\t\t\tvar uv3 = uvs[ y + 1 ][ x + 1 ].clone();\r\n\t\t\tvar uv4 = uvs[ y ][ x + 1 ].clone();\r\n\r\n\t\t\tthis.faces.push( new THREE.Face3( v1, v2, v4, [ n1, n2, n4 ] ) );\r\n\t\t\tthis.faceVertexUvs[ 0 ].push( [ uv1, uv2, uv4 ] );\r\n\r\n\t\t\tthis.faces.push( new THREE.Face3( v2, v3, v4, [ n2.clone(), n3, n4.clone() ] ) );\r\n\t\t\tthis.faceVertexUvs[ 0 ].push( [ uv2.clone(), uv3, uv4.clone() ] );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// top cap\r\n\r\n\tif ( openEnded === false && radiusTop > 0 ) {\r\n\r\n\t\tthis.vertices.push( new THREE.Vector3( 0, heightHalf, 0 ) );\r\n\r\n\t\tfor ( x = 0; x < radialSegments; x ++ ) {\r\n\r\n\t\t\tvar v1 = vertices[ 0 ][ x ];\r\n\t\t\tvar v2 = vertices[ 0 ][ x + 1 ];\r\n\t\t\tvar v3 = this.vertices.length - 1;\r\n\r\n\t\t\tvar n1 = new THREE.Vector3( 0, 1, 0 );\r\n\t\t\tvar n2 = new THREE.Vector3( 0, 1, 0 );\r\n\t\t\tvar n3 = new THREE.Vector3( 0, 1, 0 );\r\n\r\n\t\t\tvar uv1 = uvs[ 0 ][ x ].clone();\r\n\t\t\tvar uv2 = uvs[ 0 ][ x + 1 ].clone();\r\n\t\t\tvar uv3 = new THREE.Vector2( uv2.x, 0 );\r\n\r\n\t\t\tthis.faces.push( new THREE.Face3( v1, v2, v3, [ n1, n2, n3 ] ) );\r\n\t\t\tthis.faceVertexUvs[ 0 ].push( [ uv1, uv2, uv3 ] );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// bottom cap\r\n\r\n\tif ( openEnded === false && radiusBottom > 0 ) {\r\n\r\n\t\tthis.vertices.push( new THREE.Vector3( 0, - heightHalf, 0 ) );\r\n\r\n\t\tfor ( x = 0; x < radialSegments; x ++ ) {\r\n\r\n\t\t\tvar v1 = vertices[ y ][ x + 1 ];\r\n\t\t\tvar v2 = vertices[ y ][ x ];\r\n\t\t\tvar v3 = this.vertices.length - 1;\r\n\r\n\t\t\tvar n1 = new THREE.Vector3( 0, - 1, 0 );\r\n\t\t\tvar n2 = new THREE.Vector3( 0, - 1, 0 );\r\n\t\t\tvar n3 = new THREE.Vector3( 0, - 1, 0 );\r\n\r\n\t\t\tvar uv1 = uvs[ y ][ x + 1 ].clone();\r\n\t\t\tvar uv2 = uvs[ y ][ x ].clone();\r\n\t\t\tvar uv3 = new THREE.Vector2( uv2.x, 1 );\r\n\r\n\t\t\tthis.faces.push( new THREE.Face3( v1, v2, v3, [ n1, n2, n3 ] ) );\r\n\t\t\tthis.faceVertexUvs[ 0 ].push( [ uv1, uv2, uv3 ] );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tthis.computeFaceNormals();\r\n\r\n}\r\n\r\nTHREE.CylinderGeometry.prototype = Object.create( THREE.Geometry.prototype );\r\n\r\n// File:src/extras/geometries/ExtrudeGeometry.js\r\n\r\n/**\r\n * @author zz85 / http://www.lab4games.net/zz85/blog\r\n *\r\n * Creates extruded geometry from a path shape.\r\n *\r\n * parameters = {\r\n *\r\n * curveSegments: , // number of points on the curves\r\n * steps: , // number of points for z-side extrusions / used for subdividing segements of extrude spline too\r\n * amount: , // Depth to extrude the shape\r\n *\r\n * bevelEnabled: , // turn on bevel\r\n * bevelThickness: , // how deep into the original shape bevel goes\r\n * bevelSize: , // how far from shape outline is bevel\r\n * bevelSegments: , // number of bevel layers\r\n *\r\n * extrudePath: // 3d spline path to extrude shape along. (creates Frames if .frames aren't defined)\r\n * frames: // containing arrays of tangents, normals, binormals\r\n *\r\n * material: // material index for front and back faces\r\n * extrudeMaterial: // material index for extrusion and beveled faces\r\n * uvGenerator: // object that provides UV generator functions\r\n *\r\n * }\r\n **/\r\n\r\nTHREE.ExtrudeGeometry = function ( shapes, options ) {\r\n\r\n\tif ( typeof( shapes ) === \"undefined\" ) {\r\n\t\tshapes = [];\r\n\t\treturn;\r\n\t}\r\n\r\n\tTHREE.Geometry.call( this );\r\n\r\n\tthis.type = 'ExtrudeGeometry';\r\n\r\n\tshapes = shapes instanceof Array ? shapes : [ shapes ];\r\n\r\n\tthis.addShapeList( shapes, options );\r\n\r\n\tthis.computeFaceNormals();\r\n\r\n\t// can't really use automatic vertex normals\r\n\t// as then front and back sides get smoothed too\r\n\t// should do separate smoothing just for sides\r\n\r\n\t//this.computeVertexNormals();\r\n\r\n\t//console.log( \"took\", ( Date.now() - startTime ) );\r\n\r\n};\r\n\r\nTHREE.ExtrudeGeometry.prototype = Object.create( THREE.Geometry.prototype );\r\n\r\nTHREE.ExtrudeGeometry.prototype.addShapeList = function ( shapes, options ) {\r\n\tvar sl = shapes.length;\r\n\r\n\tfor ( var s = 0; s < sl; s ++ ) {\r\n\t\tvar shape = shapes[ s ];\r\n\t\tthis.addShape( shape, options );\r\n\t}\r\n};\r\n\r\nTHREE.ExtrudeGeometry.prototype.addShape = function ( shape, options ) {\r\n\r\n\tvar amount = options.amount !== undefined ? options.amount : 100;\r\n\r\n\tvar bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 6; // 10\r\n\tvar bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 2; // 8\r\n\tvar bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3;\r\n\r\n\tvar bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true; // false\r\n\r\n\tvar curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12;\r\n\r\n\tvar steps = options.steps !== undefined ? options.steps : 1;\r\n\r\n\tvar extrudePath = options.extrudePath;\r\n\tvar extrudePts, extrudeByPath = false;\r\n\r\n\tvar material = options.material;\r\n\tvar extrudeMaterial = options.extrudeMaterial;\r\n\r\n\t// Use default WorldUVGenerator if no UV generators are specified.\r\n\tvar uvgen = options.UVGenerator !== undefined ? options.UVGenerator : THREE.ExtrudeGeometry.WorldUVGenerator;\r\n\r\n\tvar splineTube, binormal, normal, position2;\r\n\tif ( extrudePath ) {\r\n\r\n\t\textrudePts = extrudePath.getSpacedPoints( steps );\r\n\r\n\t\textrudeByPath = true;\r\n\t\tbevelEnabled = false; // bevels not supported for path extrusion\r\n\r\n\t\t// SETUP TNB variables\r\n\r\n\t\t// Reuse TNB from TubeGeomtry for now.\r\n\t\t// TODO1 - have a .isClosed in spline?\r\n\r\n\t\tsplineTube = options.frames !== undefined ? options.frames : new THREE.TubeGeometry.FrenetFrames(extrudePath, steps, false);\r\n\r\n\t\t// console.log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length);\r\n\r\n\t\tbinormal = new THREE.Vector3();\r\n\t\tnormal = new THREE.Vector3();\r\n\t\tposition2 = new THREE.Vector3();\r\n\r\n\t}\r\n\r\n\t// Safeguards if bevels are not enabled\r\n\r\n\tif ( ! bevelEnabled ) {\r\n\r\n\t\tbevelSegments = 0;\r\n\t\tbevelThickness = 0;\r\n\t\tbevelSize = 0;\r\n\r\n\t}\r\n\r\n\t// Variables initalization\r\n\r\n\tvar ahole, h, hl; // looping of holes\r\n\tvar scope = this;\r\n\tvar bevelPoints = [];\r\n\r\n\tvar shapesOffset = this.vertices.length;\r\n\r\n\tvar shapePoints = shape.extractPoints( curveSegments );\r\n\r\n\tvar vertices = shapePoints.shape;\r\n\tvar holes = shapePoints.holes;\r\n\r\n\tvar reverse = ! THREE.Shape.Utils.isClockWise( vertices ) ;\r\n\r\n\tif ( reverse ) {\r\n\r\n\t\tvertices = vertices.reverse();\r\n\r\n\t\t// Maybe we should also check if holes are in the opposite direction, just to be safe ...\r\n\r\n\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\r\n\r\n\t\t\tahole = holes[ h ];\r\n\r\n\t\t\tif ( THREE.Shape.Utils.isClockWise( ahole ) ) {\r\n\r\n\t\t\t\tholes[ h ] = ahole.reverse();\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treverse = false; // If vertices are in order now, we shouldn't need to worry about them again (hopefully)!\r\n\r\n\t}\r\n\r\n\r\n\tvar faces = THREE.Shape.Utils.triangulateShape ( vertices, holes );\r\n\r\n\t/* Vertices */\r\n\r\n\tvar contour = vertices; // vertices has all points but contour has only points of circumference\r\n\r\n\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\r\n\r\n\t\tahole = holes[ h ];\r\n\r\n\t\tvertices = vertices.concat( ahole );\r\n\r\n\t}\r\n\r\n\r\n\tfunction scalePt2 ( pt, vec, size ) {\r\n\r\n\t\tif ( ! vec ) console.log( \"die\" );\r\n\r\n\t\treturn vec.clone().multiplyScalar( size ).add( pt );\r\n\r\n\t}\r\n\r\n\tvar b, bs, t, z,\r\n\t\tvert, vlen = vertices.length,\r\n\t\tface, flen = faces.length,\r\n\t\tcont, clen = contour.length;\r\n\r\n\r\n\t// Find directions for point movement\r\n\r\n\tvar RAD_TO_DEGREES = 180 / Math.PI;\r\n\r\n\r\n\tfunction getBevelVec( inPt, inPrev, inNext ) {\r\n\r\n\t\tvar EPSILON = 0.0000000001;\r\n\t\t\r\n\t\t// computes for inPt the corresponding point inPt' on a new contour\r\n\t\t// shiftet by 1 unit (length of normalized vector) to the left\r\n\t\t// if we walk along contour clockwise, this new contour is outside the old one\r\n\t\t//\r\n\t\t// inPt' is the intersection of the two lines parallel to the two\r\n\t\t// adjacent edges of inPt at a distance of 1 unit on the left side.\r\n\t\t\r\n\t\tvar v_trans_x, v_trans_y, shrink_by = 1;\t\t// resulting translation vector for inPt\r\n\r\n\t\t// good reading for geometry algorithms (here: line-line intersection)\r\n\t\t// http://geomalgorithms.com/a05-_intersect-1.html\r\n\r\n\t\tvar v_prev_x = inPt.x - inPrev.x, v_prev_y = inPt.y - inPrev.y;\r\n\t\tvar v_next_x = inNext.x - inPt.x, v_next_y = inNext.y - inPt.y;\r\n\t\t\r\n\t\tvar v_prev_lensq = ( v_prev_x * v_prev_x + v_prev_y * v_prev_y );\r\n\t\t\r\n\t\t// check for colinear edges\r\n\t\tvar colinear0 = ( v_prev_x * v_next_y - v_prev_y * v_next_x );\r\n\t\t\r\n\t\tif ( Math.abs( colinear0 ) > EPSILON ) {\t\t// not colinear\r\n\t\t\t\r\n\t\t\t// length of vectors for normalizing\r\n\t\r\n\t\t\tvar v_prev_len = Math.sqrt( v_prev_lensq );\r\n\t\t\tvar v_next_len = Math.sqrt( v_next_x * v_next_x + v_next_y * v_next_y );\r\n\t\t\t\r\n\t\t\t// shift adjacent points by unit vectors to the left\r\n\t\r\n\t\t\tvar ptPrevShift_x = ( inPrev.x - v_prev_y / v_prev_len );\r\n\t\t\tvar ptPrevShift_y = ( inPrev.y + v_prev_x / v_prev_len );\r\n\t\t\t\r\n\t\t\tvar ptNextShift_x = ( inNext.x - v_next_y / v_next_len );\r\n\t\t\tvar ptNextShift_y = ( inNext.y + v_next_x / v_next_len );\r\n\t\r\n\t\t\t// scaling factor for v_prev to intersection point\r\n\t\r\n\t\t\tvar sf = ( ( ptNextShift_x - ptPrevShift_x ) * v_next_y -\r\n\t\t\t\t\t\t( ptNextShift_y - ptPrevShift_y ) * v_next_x ) /\r\n\t\t\t\t\t ( v_prev_x * v_next_y - v_prev_y * v_next_x );\r\n\t\r\n\t\t\t// vector from inPt to intersection point\r\n\t\r\n\t\t\tv_trans_x = ( ptPrevShift_x + v_prev_x * sf - inPt.x );\r\n\t\t\tv_trans_y = ( ptPrevShift_y + v_prev_y * sf - inPt.y );\r\n\t\r\n\t\t\t// Don't normalize!, otherwise sharp corners become ugly\r\n\t\t\t// but prevent crazy spikes\r\n\t\t\tvar v_trans_lensq = ( v_trans_x * v_trans_x + v_trans_y * v_trans_y )\r\n\t\t\tif ( v_trans_lensq <= 2 ) {\r\n\t\t\t\treturn\tnew THREE.Vector2( v_trans_x, v_trans_y );\r\n\t\t\t} else {\r\n\t\t\t\tshrink_by = Math.sqrt( v_trans_lensq / 2 );\r\n\t\t\t}\r\n\t\t\t\r\n\t\t} else {\t\t// handle special case of colinear edges\r\n\r\n\t\t\tvar direction_eq = false;\t\t// assumes: opposite\r\n\t\t\tif ( v_prev_x > EPSILON ) {\r\n\t\t\t\tif ( v_next_x > EPSILON ) { direction_eq = true; }\r\n\t\t\t} else {\r\n\t\t\t\tif ( v_prev_x < - EPSILON ) {\r\n\t\t\t\t\tif ( v_next_x < - EPSILON ) { direction_eq = true; }\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif ( Math.sign(v_prev_y) == Math.sign(v_next_y) ) { direction_eq = true; }\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif ( direction_eq ) {\r\n\t\t\t\t// console.log(\"Warning: lines are a straight sequence\");\r\n\t\t\t\tv_trans_x = - v_prev_y;\r\n\t\t\t\tv_trans_y = v_prev_x;\r\n\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq );\r\n\t\t\t} else {\r\n\t\t\t\t// console.log(\"Warning: lines are a straight spike\");\r\n\t\t\t\tv_trans_x = v_prev_x;\r\n\t\t\t\tv_trans_y = v_prev_y;\r\n\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq / 2 );\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn\tnew THREE.Vector2( v_trans_x / shrink_by, v_trans_y / shrink_by );\r\n\r\n\t}\r\n\r\n\r\n\tvar contourMovements = [];\r\n\r\n\tfor ( var i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\r\n\r\n\t\tif ( j === il ) j = 0;\r\n\t\tif ( k === il ) k = 0;\r\n\r\n\t\t// (j)---(i)---(k)\r\n\t\t// console.log('i,j,k', i, j , k)\r\n\r\n\t\tvar pt_i = contour[ i ];\r\n\t\tvar pt_j = contour[ j ];\r\n\t\tvar pt_k = contour[ k ];\r\n\r\n\t\tcontourMovements[ i ]= getBevelVec( contour[ i ], contour[ j ], contour[ k ] );\r\n\r\n\t}\r\n\r\n\tvar holesMovements = [], oneHoleMovements, verticesMovements = contourMovements.concat();\r\n\r\n\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\r\n\r\n\t\tahole = holes[ h ];\r\n\r\n\t\toneHoleMovements = [];\r\n\r\n\t\tfor ( i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\r\n\r\n\t\t\tif ( j === il ) j = 0;\r\n\t\t\tif ( k === il ) k = 0;\r\n\r\n\t\t\t// (j)---(i)---(k)\r\n\t\t\toneHoleMovements[ i ]= getBevelVec( ahole[ i ], ahole[ j ], ahole[ k ] );\r\n\r\n\t\t}\r\n\r\n\t\tholesMovements.push( oneHoleMovements );\r\n\t\tverticesMovements = verticesMovements.concat( oneHoleMovements );\r\n\r\n\t}\r\n\r\n\r\n\t// Loop bevelSegments, 1 for the front, 1 for the back\r\n\r\n\tfor ( b = 0; b < bevelSegments; b ++ ) {\r\n\t//for ( b = bevelSegments; b > 0; b -- ) {\r\n\r\n\t\tt = b / bevelSegments;\r\n\t\tz = bevelThickness * ( 1 - t );\r\n\r\n\t\t//z = bevelThickness * t;\r\n\t\tbs = bevelSize * ( Math.sin ( t * Math.PI/2 ) ) ; // curved\r\n\t\t//bs = bevelSize * t ; // linear\r\n\r\n\t\t// contract shape\r\n\r\n\t\tfor ( i = 0, il = contour.length; i < il; i ++ ) {\r\n\r\n\t\t\tvert = scalePt2( contour[ i ], contourMovements[ i ], bs );\r\n\r\n\t\t\tv( vert.x, vert.y, - z );\r\n\r\n\t\t}\r\n\r\n\t\t// expand holes\r\n\r\n\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\r\n\r\n\t\t\tahole = holes[ h ];\r\n\t\t\toneHoleMovements = holesMovements[ h ];\r\n\r\n\t\t\tfor ( i = 0, il = ahole.length; i < il; i ++ ) {\r\n\r\n\t\t\t\tvert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\r\n\r\n\t\t\t\tv( vert.x, vert.y, - z );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tbs = bevelSize;\r\n\r\n\t// Back facing vertices\r\n\r\n\tfor ( i = 0; i < vlen; i ++ ) {\r\n\r\n\t\tvert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\r\n\r\n\t\tif ( ! extrudeByPath ) {\r\n\r\n\t\t\tv( vert.x, vert.y, 0 );\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x );\r\n\r\n\t\t\tnormal.copy( splineTube.normals[0] ).multiplyScalar(vert.x);\r\n\t\t\tbinormal.copy( splineTube.binormals[0] ).multiplyScalar(vert.y);\r\n\r\n\t\t\tposition2.copy( extrudePts[0] ).add(normal).add(binormal);\r\n\r\n\t\t\tv( position2.x, position2.y, position2.z );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// Add stepped vertices...\r\n\t// Including front facing vertices\r\n\r\n\tvar s;\r\n\r\n\tfor ( s = 1; s <= steps; s ++ ) {\r\n\r\n\t\tfor ( i = 0; i < vlen; i ++ ) {\r\n\r\n\t\t\tvert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\r\n\r\n\t\t\tif ( ! extrudeByPath ) {\r\n\r\n\t\t\t\tv( vert.x, vert.y, amount / steps * s );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t// v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x );\r\n\r\n\t\t\t\tnormal.copy( splineTube.normals[s] ).multiplyScalar( vert.x );\r\n\t\t\t\tbinormal.copy( splineTube.binormals[s] ).multiplyScalar( vert.y );\r\n\r\n\t\t\t\tposition2.copy( extrudePts[s] ).add( normal ).add( binormal );\r\n\r\n\t\t\t\tv( position2.x, position2.y, position2.z );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\r\n\t// Add bevel segments planes\r\n\r\n\t//for ( b = 1; b <= bevelSegments; b ++ ) {\r\n\tfor ( b = bevelSegments - 1; b >= 0; b -- ) {\r\n\r\n\t\tt = b / bevelSegments;\r\n\t\tz = bevelThickness * ( 1 - t );\r\n\t\t//bs = bevelSize * ( 1-Math.sin ( ( 1 - t ) * Math.PI/2 ) );\r\n\t\tbs = bevelSize * Math.sin ( t * Math.PI/2 ) ;\r\n\r\n\t\t// contract shape\r\n\r\n\t\tfor ( i = 0, il = contour.length; i < il; i ++ ) {\r\n\r\n\t\t\tvert = scalePt2( contour[ i ], contourMovements[ i ], bs );\r\n\t\t\tv( vert.x, vert.y, amount + z );\r\n\r\n\t\t}\r\n\r\n\t\t// expand holes\r\n\r\n\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\r\n\r\n\t\t\tahole = holes[ h ];\r\n\t\t\toneHoleMovements = holesMovements[ h ];\r\n\r\n\t\t\tfor ( i = 0, il = ahole.length; i < il; i ++ ) {\r\n\r\n\t\t\t\tvert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\r\n\r\n\t\t\t\tif ( ! extrudeByPath ) {\r\n\r\n\t\t\t\t\tv( vert.x, vert.y, amount + z );\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tv( vert.x, vert.y + extrudePts[ steps - 1 ].y, extrudePts[ steps - 1 ].x + z );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/* Faces */\r\n\r\n\t// Top and bottom faces\r\n\r\n\tbuildLidFaces();\r\n\r\n\t// Sides faces\r\n\r\n\tbuildSideFaces();\r\n\r\n\r\n\t///// Internal functions\r\n\r\n\tfunction buildLidFaces() {\r\n\r\n\t\tif ( bevelEnabled ) {\r\n\r\n\t\t\tvar layer = 0 ; // steps + 1\r\n\t\t\tvar offset = vlen * layer;\r\n\r\n\t\t\t// Bottom faces\r\n\r\n\t\t\tfor ( i = 0; i < flen; i ++ ) {\r\n\r\n\t\t\t\tface = faces[ i ];\r\n\t\t\t\tf3( face[ 2 ]+ offset, face[ 1 ]+ offset, face[ 0 ] + offset );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tlayer = steps + bevelSegments * 2;\r\n\t\t\toffset = vlen * layer;\r\n\r\n\t\t\t// Top faces\r\n\r\n\t\t\tfor ( i = 0; i < flen; i ++ ) {\r\n\r\n\t\t\t\tface = faces[ i ];\r\n\t\t\t\tf3( face[ 0 ] + offset, face[ 1 ] + offset, face[ 2 ] + offset );\r\n\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// Bottom faces\r\n\r\n\t\t\tfor ( i = 0; i < flen; i ++ ) {\r\n\r\n\t\t\t\tface = faces[ i ];\r\n\t\t\t\tf3( face[ 2 ], face[ 1 ], face[ 0 ] );\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// Top faces\r\n\r\n\t\t\tfor ( i = 0; i < flen; i ++ ) {\r\n\r\n\t\t\t\tface = faces[ i ];\r\n\t\t\t\tf3( face[ 0 ] + vlen * steps, face[ 1 ] + vlen * steps, face[ 2 ] + vlen * steps );\r\n\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// Create faces for the z-sides of the shape\r\n\r\n\tfunction buildSideFaces() {\r\n\r\n\t\tvar layeroffset = 0;\r\n\t\tsidewalls( contour, layeroffset );\r\n\t\tlayeroffset += contour.length;\r\n\r\n\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\r\n\r\n\t\t\tahole = holes[ h ];\r\n\t\t\tsidewalls( ahole, layeroffset );\r\n\r\n\t\t\t//, true\r\n\t\t\tlayeroffset += ahole.length;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction sidewalls( contour, layeroffset ) {\r\n\r\n\t\tvar j, k;\r\n\t\ti = contour.length;\r\n\r\n\t\twhile ( --i >= 0 ) {\r\n\r\n\t\t\tj = i;\r\n\t\t\tk = i - 1;\r\n\t\t\tif ( k < 0 ) k = contour.length - 1;\r\n\r\n\t\t\t//console.log('b', i,j, i-1, k,vertices.length);\r\n\r\n\t\t\tvar s = 0, sl = steps + bevelSegments * 2;\r\n\r\n\t\t\tfor ( s = 0; s < sl; s ++ ) {\r\n\r\n\t\t\t\tvar slen1 = vlen * s;\r\n\t\t\t\tvar slen2 = vlen * ( s + 1 );\r\n\r\n\t\t\t\tvar a = layeroffset + j + slen1,\r\n\t\t\t\t\tb = layeroffset + k + slen1,\r\n\t\t\t\t\tc = layeroffset + k + slen2,\r\n\t\t\t\t\td = layeroffset + j + slen2;\r\n\r\n\t\t\t\tf4( a, b, c, d, contour, s, sl, j, k );\r\n\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\r\n\r\n\tfunction v( x, y, z ) {\r\n\r\n\t\tscope.vertices.push( new THREE.Vector3( x, y, z ) );\r\n\r\n\t}\r\n\r\n\tfunction f3( a, b, c ) {\r\n\r\n\t\ta += shapesOffset;\r\n\t\tb += shapesOffset;\r\n\t\tc += shapesOffset;\r\n\r\n\t\t// normal, color, material\r\n\t\tscope.faces.push( new THREE.Face3( a, b, c, null, null, material ) );\r\n\r\n\t\tvar uvs = uvgen.generateTopUV( scope, a, b, c );\r\n\r\n \t\tscope.faceVertexUvs[ 0 ].push( uvs );\r\n\r\n\t}\r\n\r\n\tfunction f4( a, b, c, d, wallContour, stepIndex, stepsLength, contourIndex1, contourIndex2 ) {\r\n\r\n\t\ta += shapesOffset;\r\n\t\tb += shapesOffset;\r\n\t\tc += shapesOffset;\r\n\t\td += shapesOffset;\r\n\r\n \t\tscope.faces.push( new THREE.Face3( a, b, d, null, null, extrudeMaterial ) );\r\n \t\tscope.faces.push( new THREE.Face3( b, c, d, null, null, extrudeMaterial ) );\r\n\r\n \t\tvar uvs = uvgen.generateSideWallUV( scope, a, b, c, d );\r\n\r\n \t\tscope.faceVertexUvs[ 0 ].push( [ uvs[ 0 ], uvs[ 1 ], uvs[ 3 ] ] );\r\n \t\tscope.faceVertexUvs[ 0 ].push( [ uvs[ 1 ], uvs[ 2 ], uvs[ 3 ] ] );\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.ExtrudeGeometry.WorldUVGenerator = {\r\n\r\n\tgenerateTopUV: function ( geometry, indexA, indexB, indexC ) {\r\n\r\n\t\tvar vertices = geometry.vertices;\r\n\r\n\t\tvar a = vertices[ indexA ];\r\n\t\tvar b = vertices[ indexB ];\r\n\t\tvar c = vertices[ indexC ];\r\n\r\n\t\treturn [\r\n\t\t\tnew THREE.Vector2( a.x, a.y ),\r\n\t\t\tnew THREE.Vector2( b.x, b.y ),\r\n\t\t\tnew THREE.Vector2( c.x, c.y )\r\n\t\t];\r\n\r\n\t},\r\n\r\n\tgenerateSideWallUV: function ( geometry, indexA, indexB, indexC, indexD ) {\r\n\r\n\t\tvar vertices = geometry.vertices;\r\n\r\n\t\tvar a = vertices[ indexA ];\r\n\t\tvar b = vertices[ indexB ];\r\n\t\tvar c = vertices[ indexC ];\r\n\t\tvar d = vertices[ indexD ];\r\n\r\n\t\tif ( Math.abs( a.y - b.y ) < 0.01 ) {\r\n\t\t\treturn [\r\n\t\t\t\tnew THREE.Vector2( a.x, 1 - a.z ),\r\n\t\t\t\tnew THREE.Vector2( b.x, 1 - b.z ),\r\n\t\t\t\tnew THREE.Vector2( c.x, 1 - c.z ),\r\n\t\t\t\tnew THREE.Vector2( d.x, 1 - d.z )\r\n\t\t\t];\r\n\t\t} else {\r\n\t\t\treturn [\r\n\t\t\t\tnew THREE.Vector2( a.y, 1 - a.z ),\r\n\t\t\t\tnew THREE.Vector2( b.y, 1 - b.z ),\r\n\t\t\t\tnew THREE.Vector2( c.y, 1 - c.z ),\r\n\t\t\t\tnew THREE.Vector2( d.y, 1 - d.z )\r\n\t\t\t];\r\n\t\t}\r\n\t}\r\n};\r\n\r\n// File:src/extras/geometries/ShapeGeometry.js\r\n\r\n/**\r\n * @author jonobr1 / http://jonobr1.com\r\n *\r\n * Creates a one-sided polygonal geometry from a path shape. Similar to\r\n * ExtrudeGeometry.\r\n *\r\n * parameters = {\r\n *\r\n *\tcurveSegments: , // number of points on the curves. NOT USED AT THE MOMENT.\r\n *\r\n *\tmaterial: // material index for front and back faces\r\n *\tuvGenerator: // object that provides UV generator functions\r\n *\r\n * }\r\n **/\r\n\r\nTHREE.ShapeGeometry = function ( shapes, options ) {\r\n\r\n\tTHREE.Geometry.call( this );\r\n\r\n\tthis.type = 'ShapeGeometry';\r\n\r\n\tif ( shapes instanceof Array === false ) shapes = [ shapes ];\r\n\r\n\tthis.addShapeList( shapes, options );\r\n\r\n\tthis.computeFaceNormals();\r\n\r\n};\r\n\r\nTHREE.ShapeGeometry.prototype = Object.create( THREE.Geometry.prototype );\r\n\r\n/**\r\n * Add an array of shapes to THREE.ShapeGeometry.\r\n */\r\nTHREE.ShapeGeometry.prototype.addShapeList = function ( shapes, options ) {\r\n\r\n\tfor ( var i = 0, l = shapes.length; i < l; i ++ ) {\r\n\r\n\t\tthis.addShape( shapes[ i ], options );\r\n\r\n\t}\r\n\r\n\treturn this;\r\n\r\n};\r\n\r\n/**\r\n * Adds a shape to THREE.ShapeGeometry, based on THREE.ExtrudeGeometry.\r\n */\r\nTHREE.ShapeGeometry.prototype.addShape = function ( shape, options ) {\r\n\r\n\tif ( options === undefined ) options = {};\r\n\tvar curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12;\r\n\r\n\tvar material = options.material;\r\n\tvar uvgen = options.UVGenerator === undefined ? THREE.ExtrudeGeometry.WorldUVGenerator : options.UVGenerator;\r\n\r\n\t//\r\n\r\n\tvar i, l, hole, s;\r\n\r\n\tvar shapesOffset = this.vertices.length;\r\n\tvar shapePoints = shape.extractPoints( curveSegments );\r\n\r\n\tvar vertices = shapePoints.shape;\r\n\tvar holes = shapePoints.holes;\r\n\r\n\tvar reverse = ! THREE.Shape.Utils.isClockWise( vertices );\r\n\r\n\tif ( reverse ) {\r\n\r\n\t\tvertices = vertices.reverse();\r\n\r\n\t\t// Maybe we should also check if holes are in the opposite direction, just to be safe...\r\n\r\n\t\tfor ( i = 0, l = holes.length; i < l; i ++ ) {\r\n\r\n\t\t\thole = holes[ i ];\r\n\r\n\t\t\tif ( THREE.Shape.Utils.isClockWise( hole ) ) {\r\n\r\n\t\t\t\tholes[ i ] = hole.reverse();\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treverse = false;\r\n\r\n\t}\r\n\r\n\tvar faces = THREE.Shape.Utils.triangulateShape( vertices, holes );\r\n\r\n\t// Vertices\r\n\r\n\tvar contour = vertices;\r\n\r\n\tfor ( i = 0, l = holes.length; i < l; i ++ ) {\r\n\r\n\t\thole = holes[ i ];\r\n\t\tvertices = vertices.concat( hole );\r\n\r\n\t}\r\n\r\n\t//\r\n\r\n\tvar vert, vlen = vertices.length;\r\n\tvar face, flen = faces.length;\r\n\tvar cont, clen = contour.length;\r\n\r\n\tfor ( i = 0; i < vlen; i ++ ) {\r\n\r\n\t\tvert = vertices[ i ];\r\n\r\n\t\tthis.vertices.push( new THREE.Vector3( vert.x, vert.y, 0 ) );\r\n\r\n\t}\r\n\r\n\tfor ( i = 0; i < flen; i ++ ) {\r\n\r\n\t\tface = faces[ i ];\r\n\r\n\t\tvar a = face[ 0 ] + shapesOffset;\r\n\t\tvar b = face[ 1 ] + shapesOffset;\r\n\t\tvar c = face[ 2 ] + shapesOffset;\r\n\r\n\t\tthis.faces.push( new THREE.Face3( a, b, c, null, null, material ) );\r\n\t\tthis.faceVertexUvs[ 0 ].push( uvgen.generateTopUV( this, a, b, c ) );\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/extras/geometries/LatheGeometry.js\r\n\r\n/**\r\n * @author astrodud / http://astrodud.isgreat.org/\r\n * @author zz85 / https://github.com/zz85\r\n * @author bhouston / http://exocortex.com\r\n */\r\n\r\n// points - to create a closed torus, one must use a set of points \r\n// like so: [ a, b, c, d, a ], see first is the same as last.\r\n// segments - the number of circumference segments to create\r\n// phiStart - the starting radian\r\n// phiLength - the radian (0 to 2*PI) range of the lathed section\r\n// 2*pi is a closed lathe, less than 2PI is a portion.\r\n\r\nTHREE.LatheGeometry = function ( points, segments, phiStart, phiLength ) {\r\n\r\n\tTHREE.Geometry.call( this );\r\n\r\n\tthis.type = 'LatheGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\tpoints: points,\r\n\t\tsegments: segments,\r\n\t\tphiStart: phiStart,\r\n\t\tphiLength: phiLength\r\n\t};\r\n\r\n\tsegments = segments || 12;\r\n\tphiStart = phiStart || 0;\r\n\tphiLength = phiLength || 2 * Math.PI;\r\n\r\n\tvar inversePointLength = 1.0 / ( points.length - 1 );\r\n\tvar inverseSegments = 1.0 / segments;\r\n\r\n\tfor ( var i = 0, il = segments; i <= il; i ++ ) {\r\n\r\n\t\tvar phi = phiStart + i * inverseSegments * phiLength;\r\n\r\n\t\tvar c = Math.cos( phi ),\r\n\t\t\ts = Math.sin( phi );\r\n\r\n\t\tfor ( var j = 0, jl = points.length; j < jl; j ++ ) {\r\n\r\n\t\t\tvar pt = points[ j ];\r\n\r\n\t\t\tvar vertex = new THREE.Vector3();\r\n\r\n\t\t\tvertex.x = c * pt.x - s * pt.y;\r\n\t\t\tvertex.y = s * pt.x + c * pt.y;\r\n\t\t\tvertex.z = pt.z;\r\n\r\n\t\t\tthis.vertices.push( vertex );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tvar np = points.length;\r\n\r\n\tfor ( var i = 0, il = segments; i < il; i ++ ) {\r\n\r\n\t\tfor ( var j = 0, jl = points.length - 1; j < jl; j ++ ) {\r\n\r\n\t\t\tvar base = j + np * i;\r\n\t\t\tvar a = base;\r\n\t\t\tvar b = base + np;\r\n\t\t\tvar c = base + 1 + np;\r\n\t\t\tvar d = base + 1;\r\n\r\n\t\t\tvar u0 = i * inverseSegments;\r\n\t\t\tvar v0 = j * inversePointLength;\r\n\t\t\tvar u1 = u0 + inverseSegments;\r\n\t\t\tvar v1 = v0 + inversePointLength;\r\n\r\n\t\t\tthis.faces.push( new THREE.Face3( a, b, d ) );\r\n\r\n\t\t\tthis.faceVertexUvs[ 0 ].push( [\r\n\r\n\t\t\t\tnew THREE.Vector2( u0, v0 ),\r\n\t\t\t\tnew THREE.Vector2( u1, v0 ),\r\n\t\t\t\tnew THREE.Vector2( u0, v1 )\r\n\r\n\t\t\t] );\r\n\r\n\t\t\tthis.faces.push( new THREE.Face3( b, c, d ) );\r\n\r\n\t\t\tthis.faceVertexUvs[ 0 ].push( [\r\n\r\n\t\t\t\tnew THREE.Vector2( u1, v0 ),\r\n\t\t\t\tnew THREE.Vector2( u1, v1 ),\r\n\t\t\t\tnew THREE.Vector2( u0, v1 )\r\n\r\n\t\t\t] );\r\n\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tthis.mergeVertices();\r\n\tthis.computeFaceNormals();\r\n\tthis.computeVertexNormals();\r\n\r\n};\r\n\r\nTHREE.LatheGeometry.prototype = Object.create( THREE.Geometry.prototype );\r\n\r\n// File:src/extras/geometries/PlaneGeometry.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * based on http://papervision3d.googlecode.com/svn/trunk/as3/trunk/src/org/papervision3d/objects/primitives/Plane.as\r\n */\r\n\r\nTHREE.PlaneGeometry = function ( width, height, widthSegments, heightSegments ) {\r\n\r\n\tconsole.info( 'THREE.PlaneGeometry: Consider using THREE.PlaneBufferGeometry for lower memory footprint.' );\r\n\r\n\tTHREE.Geometry.call( this );\r\n\r\n\tthis.type = 'PlaneGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\twidth: width,\r\n\t\theight: height,\r\n\t\twidthSegments: widthSegments,\r\n\t\theightSegments: heightSegments\r\n\t};\r\n\r\n\tthis.fromBufferGeometry( new THREE.PlaneBufferGeometry( width, height, widthSegments, heightSegments ) );\r\n\r\n};\r\n\r\nTHREE.PlaneGeometry.prototype = Object.create( THREE.Geometry.prototype );\r\n\r\n// File:src/extras/geometries/PlaneBufferGeometry.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * based on http://papervision3d.googlecode.com/svn/trunk/as3/trunk/src/org/papervision3d/objects/primitives/Plane.as\r\n */\r\n\r\nTHREE.PlaneBufferGeometry = function ( width, height, widthSegments, heightSegments ) {\r\n\r\n\tTHREE.BufferGeometry.call( this );\r\n\r\n\tthis.type = 'PlaneBufferGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\twidth: width,\r\n\t\theight: height,\r\n\t\twidthSegments: widthSegments,\r\n\t\theightSegments: heightSegments\r\n\t};\r\n\r\n\tvar width_half = width / 2;\r\n\tvar height_half = height / 2;\r\n\r\n\tvar gridX = widthSegments || 1;\r\n\tvar gridY = heightSegments || 1;\r\n\r\n\tvar gridX1 = gridX + 1;\r\n\tvar gridY1 = gridY + 1;\r\n\r\n\tvar segment_width = width / gridX;\r\n\tvar segment_height = height / gridY;\r\n\r\n\tvar vertices = new Float32Array( gridX1 * gridY1 * 3 );\r\n\tvar normals = new Float32Array( gridX1 * gridY1 * 3 );\r\n\tvar uvs = new Float32Array( gridX1 * gridY1 * 2 );\r\n\r\n\tvar offset = 0;\r\n\tvar offset2 = 0;\r\n\r\n\tfor ( var iy = 0; iy < gridY1; iy ++ ) {\r\n\r\n\t\tvar y = iy * segment_height - height_half;\r\n\r\n\t\tfor ( var ix = 0; ix < gridX1; ix ++ ) {\r\n\r\n\t\t\tvar x = ix * segment_width - width_half;\r\n\r\n\t\t\tvertices[ offset ] = x;\r\n\t\t\tvertices[ offset + 1 ] = - y;\r\n\r\n\t\t\tnormals[ offset + 2 ] = 1;\r\n\r\n\t\t\tuvs[ offset2 ] = ix / gridX;\r\n\t\t\tuvs[ offset2 + 1 ] = 1 - ( iy / gridY );\r\n\r\n\t\t\toffset += 3;\r\n\t\t\toffset2 += 2;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\toffset = 0;\r\n\r\n\tvar indices = new ( ( vertices.length / 3 ) > 65535 ? Uint32Array : Uint16Array )( gridX * gridY * 6 );\r\n\r\n\tfor ( var iy = 0; iy < gridY; iy ++ ) {\r\n\r\n\t\tfor ( var ix = 0; ix < gridX; ix ++ ) {\r\n\r\n\t\t\tvar a = ix + gridX1 * iy;\r\n\t\t\tvar b = ix + gridX1 * ( iy + 1 );\r\n\t\t\tvar c = ( ix + 1 ) + gridX1 * ( iy + 1 );\r\n\t\t\tvar d = ( ix + 1 ) + gridX1 * iy;\r\n\r\n\t\t\tindices[ offset ] = a;\r\n\t\t\tindices[ offset + 1 ] = b;\r\n\t\t\tindices[ offset + 2 ] = d;\r\n\r\n\t\t\tindices[ offset + 3 ] = b;\r\n\t\t\tindices[ offset + 4 ] = c;\r\n\t\t\tindices[ offset + 5 ] = d;\r\n\r\n\t\t\toffset += 6;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tthis.addAttribute( 'index', new THREE.BufferAttribute( indices, 1 ) );\r\n\tthis.addAttribute( 'position', new THREE.BufferAttribute( vertices, 3 ) );\r\n\tthis.addAttribute( 'normal', new THREE.BufferAttribute( normals, 3 ) );\r\n\tthis.addAttribute( 'uv', new THREE.BufferAttribute( uvs, 2 ) );\r\n\r\n};\r\n\r\nTHREE.PlaneBufferGeometry.prototype = Object.create( THREE.BufferGeometry.prototype );\r\n\r\n// File:src/extras/geometries/RingGeometry.js\r\n\r\n/**\r\n * @author Kaleb Murphy\r\n */\r\n\r\nTHREE.RingGeometry = function ( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) {\r\n\r\n\tTHREE.Geometry.call( this );\r\n\r\n\tthis.type = 'RingGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\tinnerRadius: innerRadius,\r\n\t\touterRadius: outerRadius,\r\n\t\tthetaSegments: thetaSegments,\r\n\t\tphiSegments: phiSegments,\r\n\t\tthetaStart: thetaStart,\r\n\t\tthetaLength: thetaLength\r\n\t};\r\n\r\n\tinnerRadius = innerRadius || 0;\r\n\touterRadius = outerRadius || 50;\r\n\r\n\tthetaStart = thetaStart !== undefined ? thetaStart : 0;\r\n\tthetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2;\r\n\r\n\tthetaSegments = thetaSegments !== undefined ? Math.max( 3, thetaSegments ) : 8;\r\n\tphiSegments = phiSegments !== undefined ? Math.max( 1, phiSegments ) : 8;\r\n\r\n\tvar i, o, uvs = [], radius = innerRadius, radiusStep = ( ( outerRadius - innerRadius ) / phiSegments );\r\n\r\n\tfor ( i = 0; i < phiSegments + 1; i ++ ) { // concentric circles inside ring\r\n\r\n\t\tfor ( o = 0; o < thetaSegments + 1; o ++ ) { // number of segments per circle\r\n\r\n\t\t\tvar vertex = new THREE.Vector3();\r\n\t\t\tvar segment = thetaStart + o / thetaSegments * thetaLength;\r\n\t\t\tvertex.x = radius * Math.cos( segment );\r\n\t\t\tvertex.y = radius * Math.sin( segment );\r\n\r\n\t\t\tthis.vertices.push( vertex );\r\n\t\t\tuvs.push( new THREE.Vector2( ( vertex.x / outerRadius + 1 ) / 2, ( vertex.y / outerRadius + 1 ) / 2 ) );\r\n\t\t}\r\n\r\n\t\tradius += radiusStep;\r\n\r\n\t}\r\n\r\n\tvar n = new THREE.Vector3( 0, 0, 1 );\r\n\r\n\tfor ( i = 0; i < phiSegments; i ++ ) { // concentric circles inside ring\r\n\r\n\t\tvar thetaSegment = i * (thetaSegments + 1);\r\n\r\n\t\tfor ( o = 0; o < thetaSegments ; o ++ ) { // number of segments per circle\r\n\r\n\t\t\tvar segment = o + thetaSegment;\r\n\r\n\t\t\tvar v1 = segment;\r\n\t\t\tvar v2 = segment + thetaSegments + 1;\r\n\t\t\tvar v3 = segment + thetaSegments + 2;\r\n\r\n\t\t\tthis.faces.push( new THREE.Face3( v1, v2, v3, [ n.clone(), n.clone(), n.clone() ] ) );\r\n\t\t\tthis.faceVertexUvs[ 0 ].push( [ uvs[ v1 ].clone(), uvs[ v2 ].clone(), uvs[ v3 ].clone() ]);\r\n\r\n\t\t\tv1 = segment;\r\n\t\t\tv2 = segment + thetaSegments + 2;\r\n\t\t\tv3 = segment + 1;\r\n\r\n\t\t\tthis.faces.push( new THREE.Face3( v1, v2, v3, [ n.clone(), n.clone(), n.clone() ] ) );\r\n\t\t\tthis.faceVertexUvs[ 0 ].push( [ uvs[ v1 ].clone(), uvs[ v2 ].clone(), uvs[ v3 ].clone() ]);\r\n\r\n\t\t}\r\n\t}\r\n\r\n\tthis.computeFaceNormals();\r\n\r\n\tthis.boundingSphere = new THREE.Sphere( new THREE.Vector3(), radius );\r\n\r\n};\r\n\r\nTHREE.RingGeometry.prototype = Object.create( THREE.Geometry.prototype );\r\n\r\n\r\n// File:src/extras/geometries/SphereGeometry.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.SphereGeometry = function ( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) {\r\n\r\n\tTHREE.Geometry.call( this );\r\n\r\n\tthis.type = 'SphereGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\tradius: radius,\r\n\t\twidthSegments: widthSegments,\r\n\t\theightSegments: heightSegments,\r\n\t\tphiStart: phiStart,\r\n\t\tphiLength: phiLength,\r\n\t\tthetaStart: thetaStart,\r\n\t\tthetaLength: thetaLength \r\n\t};\r\n\r\n\tradius = radius || 50;\r\n\r\n\twidthSegments = Math.max( 3, Math.floor( widthSegments ) || 8 );\r\n\theightSegments = Math.max( 2, Math.floor( heightSegments ) || 6 );\r\n\r\n\tphiStart = phiStart !== undefined ? phiStart : 0;\r\n\tphiLength = phiLength !== undefined ? phiLength : Math.PI * 2;\r\n\r\n\tthetaStart = thetaStart !== undefined ? thetaStart : 0;\r\n\tthetaLength = thetaLength !== undefined ? thetaLength : Math.PI;\r\n\r\n\tvar x, y, vertices = [], uvs = [];\r\n\r\n\tfor ( y = 0; y <= heightSegments; y ++ ) {\r\n\r\n\t\tvar verticesRow = [];\r\n\t\tvar uvsRow = [];\r\n\r\n\t\tfor ( x = 0; x <= widthSegments; x ++ ) {\r\n\r\n\t\t\tvar u = x / widthSegments;\r\n\t\t\tvar v = y / heightSegments;\r\n\r\n\t\t\tvar vertex = new THREE.Vector3();\r\n\t\t\tvertex.x = - radius * Math.cos( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\r\n\t\t\tvertex.y = radius * Math.cos( thetaStart + v * thetaLength );\r\n\t\t\tvertex.z = radius * Math.sin( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\r\n\r\n\t\t\tthis.vertices.push( vertex );\r\n\r\n\t\t\tverticesRow.push( this.vertices.length - 1 );\r\n\t\t\tuvsRow.push( new THREE.Vector2( u, 1 - v ) );\r\n\r\n\t\t}\r\n\r\n\t\tvertices.push( verticesRow );\r\n\t\tuvs.push( uvsRow );\r\n\r\n\t}\r\n\r\n\tfor ( y = 0; y < heightSegments; y ++ ) {\r\n\r\n\t\tfor ( x = 0; x < widthSegments; x ++ ) {\r\n\r\n\t\t\tvar v1 = vertices[ y ][ x + 1 ];\r\n\t\t\tvar v2 = vertices[ y ][ x ];\r\n\t\t\tvar v3 = vertices[ y + 1 ][ x ];\r\n\t\t\tvar v4 = vertices[ y + 1 ][ x + 1 ];\r\n\r\n\t\t\tvar n1 = this.vertices[ v1 ].clone().normalize();\r\n\t\t\tvar n2 = this.vertices[ v2 ].clone().normalize();\r\n\t\t\tvar n3 = this.vertices[ v3 ].clone().normalize();\r\n\t\t\tvar n4 = this.vertices[ v4 ].clone().normalize();\r\n\r\n\t\t\tvar uv1 = uvs[ y ][ x + 1 ].clone();\r\n\t\t\tvar uv2 = uvs[ y ][ x ].clone();\r\n\t\t\tvar uv3 = uvs[ y + 1 ][ x ].clone();\r\n\t\t\tvar uv4 = uvs[ y + 1 ][ x + 1 ].clone();\r\n\r\n\t\t\tif ( Math.abs( this.vertices[ v1 ].y ) === radius ) {\r\n\r\n\t\t\t\tuv1.x = ( uv1.x + uv2.x ) / 2;\r\n\t\t\t\tthis.faces.push( new THREE.Face3( v1, v3, v4, [ n1, n3, n4 ] ) );\r\n\t\t\t\tthis.faceVertexUvs[ 0 ].push( [ uv1, uv3, uv4 ] );\r\n\r\n\t\t\t} else if ( Math.abs( this.vertices[ v3 ].y ) === radius ) {\r\n\r\n\t\t\t\tuv3.x = ( uv3.x + uv4.x ) / 2;\r\n\t\t\t\tthis.faces.push( new THREE.Face3( v1, v2, v3, [ n1, n2, n3 ] ) );\r\n\t\t\t\tthis.faceVertexUvs[ 0 ].push( [ uv1, uv2, uv3 ] );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tthis.faces.push( new THREE.Face3( v1, v2, v4, [ n1, n2, n4 ] ) );\r\n\t\t\t\tthis.faceVertexUvs[ 0 ].push( [ uv1, uv2, uv4 ] );\r\n\r\n\t\t\t\tthis.faces.push( new THREE.Face3( v2, v3, v4, [ n2.clone(), n3, n4.clone() ] ) );\r\n\t\t\t\tthis.faceVertexUvs[ 0 ].push( [ uv2.clone(), uv3, uv4.clone() ] );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tthis.computeFaceNormals();\r\n\r\n\tthis.boundingSphere = new THREE.Sphere( new THREE.Vector3(), radius );\r\n\r\n};\r\n\r\nTHREE.SphereGeometry.prototype = Object.create( THREE.Geometry.prototype );\r\n\r\n// File:src/extras/geometries/TextGeometry.js\r\n\r\n/**\r\n * @author zz85 / http://www.lab4games.net/zz85/blog\r\n * @author alteredq / http://alteredqualia.com/\r\n *\r\n * For creating 3D text geometry in three.js\r\n *\r\n * Text = 3D Text\r\n *\r\n * parameters = {\r\n * size: \t\t\t, \t// size of the text\r\n * height: \t\t, \t// thickness to extrude text\r\n * curveSegments: \t,\t\t// number of points on the curves\r\n *\r\n * font: \t\t\t,\t\t// font name\r\n * weight: \t\t,\t\t// font weight (normal, bold)\r\n * style: \t\t\t,\t\t// font style (normal, italics)\r\n *\r\n * bevelEnabled:\t,\t\t\t// turn on bevel\r\n * bevelThickness: , \t\t// how deep into text bevel goes\r\n * bevelSize:\t\t, \t\t// how far from text outline is bevel\r\n * }\r\n *\r\n */\r\n\r\n/*\tUsage Examples\r\n\r\n\t// TextGeometry wrapper\r\n\r\n\tvar text3d = new TextGeometry( text, options );\r\n\r\n\t// Complete manner\r\n\r\n\tvar textShapes = THREE.FontUtils.generateShapes( text, options );\r\n\tvar text3d = new ExtrudeGeometry( textShapes, options );\r\n\r\n*/\r\n\r\n\r\nTHREE.TextGeometry = function ( text, parameters ) {\r\n\r\n\tparameters = parameters || {};\r\n\r\n\tvar textShapes = THREE.FontUtils.generateShapes( text, parameters );\r\n\r\n\t// translate parameters to ExtrudeGeometry API\r\n\r\n\tparameters.amount = parameters.height !== undefined ? parameters.height : 50;\r\n\r\n\t// defaults\r\n\r\n\tif ( parameters.bevelThickness === undefined ) parameters.bevelThickness = 10;\r\n\tif ( parameters.bevelSize === undefined ) parameters.bevelSize = 8;\r\n\tif ( parameters.bevelEnabled === undefined ) parameters.bevelEnabled = false;\r\n\r\n\tTHREE.ExtrudeGeometry.call( this, textShapes, parameters );\r\n\r\n\tthis.type = 'TextGeometry';\r\n\r\n};\r\n\r\nTHREE.TextGeometry.prototype = Object.create( THREE.ExtrudeGeometry.prototype );\r\n\r\n// File:src/extras/geometries/TorusGeometry.js\r\n\r\n/**\r\n * @author oosmoxiecode\r\n * @author mrdoob / http://mrdoob.com/\r\n * based on http://code.google.com/p/away3d/source/browse/trunk/fp10/Away3DLite/src/away3dlite/primitives/Torus.as?r=2888\r\n */\r\n\r\nTHREE.TorusGeometry = function ( radius, tube, radialSegments, tubularSegments, arc ) {\r\n\r\n\tTHREE.Geometry.call( this );\r\n\r\n\tthis.type = 'TorusGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\tradius: radius,\r\n\t\ttube: tube,\r\n\t\tradialSegments: radialSegments,\r\n\t\ttubularSegments: tubularSegments,\r\n\t\tarc: arc\r\n\t};\r\n\r\n\tradius = radius || 100;\r\n\ttube = tube || 40;\r\n\tradialSegments = radialSegments || 8;\r\n\ttubularSegments = tubularSegments || 6;\r\n\tarc = arc || Math.PI * 2;\r\n\r\n\tvar center = new THREE.Vector3(), uvs = [], normals = [];\r\n\r\n\tfor ( var j = 0; j <= radialSegments; j ++ ) {\r\n\r\n\t\tfor ( var i = 0; i <= tubularSegments; i ++ ) {\r\n\r\n\t\t\tvar u = i / tubularSegments * arc;\r\n\t\t\tvar v = j / radialSegments * Math.PI * 2;\r\n\r\n\t\t\tcenter.x = radius * Math.cos( u );\r\n\t\t\tcenter.y = radius * Math.sin( u );\r\n\r\n\t\t\tvar vertex = new THREE.Vector3();\r\n\t\t\tvertex.x = ( radius + tube * Math.cos( v ) ) * Math.cos( u );\r\n\t\t\tvertex.y = ( radius + tube * Math.cos( v ) ) * Math.sin( u );\r\n\t\t\tvertex.z = tube * Math.sin( v );\r\n\r\n\t\t\tthis.vertices.push( vertex );\r\n\r\n\t\t\tuvs.push( new THREE.Vector2( i / tubularSegments, j / radialSegments ) );\r\n\t\t\tnormals.push( vertex.clone().sub( center ).normalize() );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfor ( var j = 1; j <= radialSegments; j ++ ) {\r\n\r\n\t\tfor ( var i = 1; i <= tubularSegments; i ++ ) {\r\n\r\n\t\t\tvar a = ( tubularSegments + 1 ) * j + i - 1;\r\n\t\t\tvar b = ( tubularSegments + 1 ) * ( j - 1 ) + i - 1;\r\n\t\t\tvar c = ( tubularSegments + 1 ) * ( j - 1 ) + i;\r\n\t\t\tvar d = ( tubularSegments + 1 ) * j + i;\r\n\r\n\t\t\tvar face = new THREE.Face3( a, b, d, [ normals[ a ].clone(), normals[ b ].clone(), normals[ d ].clone() ] );\r\n\t\t\tthis.faces.push( face );\r\n\t\t\tthis.faceVertexUvs[ 0 ].push( [ uvs[ a ].clone(), uvs[ b ].clone(), uvs[ d ].clone() ] );\r\n\r\n\t\t\tface = new THREE.Face3( b, c, d, [ normals[ b ].clone(), normals[ c ].clone(), normals[ d ].clone() ] );\r\n\t\t\tthis.faces.push( face );\r\n\t\t\tthis.faceVertexUvs[ 0 ].push( [ uvs[ b ].clone(), uvs[ c ].clone(), uvs[ d ].clone() ] );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tthis.computeFaceNormals();\r\n\r\n};\r\n\r\nTHREE.TorusGeometry.prototype = Object.create( THREE.Geometry.prototype );\r\n\r\n// File:src/extras/geometries/TorusKnotGeometry.js\r\n\r\n/**\r\n * @author oosmoxiecode\r\n * based on http://code.google.com/p/away3d/source/browse/trunk/fp10/Away3D/src/away3d/primitives/TorusKnot.as?spec=svn2473&r=2473\r\n */\r\n\r\nTHREE.TorusKnotGeometry = function ( radius, tube, radialSegments, tubularSegments, p, q, heightScale ) {\r\n\r\n\tTHREE.Geometry.call( this );\r\n\r\n\tthis.type = 'TorusKnotGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\tradius: radius,\r\n\t\ttube: tube,\r\n\t\tradialSegments: radialSegments,\r\n\t\ttubularSegments: tubularSegments,\r\n\t\tp: p,\r\n\t\tq: q,\r\n\t\theightScale: heightScale\r\n\t};\r\n\r\n\tradius = radius || 100;\r\n\ttube = tube || 40;\r\n\tradialSegments = radialSegments || 64;\r\n\ttubularSegments = tubularSegments || 8;\r\n\tp = p || 2;\r\n\tq = q || 3;\r\n\theightScale = heightScale || 1;\r\n\t\r\n\tvar grid = new Array( radialSegments );\r\n\tvar tang = new THREE.Vector3();\r\n\tvar n = new THREE.Vector3();\r\n\tvar bitan = new THREE.Vector3();\r\n\r\n\tfor ( var i = 0; i < radialSegments; ++ i ) {\r\n\r\n\t\tgrid[ i ] = new Array( tubularSegments );\r\n\t\tvar u = i / radialSegments * 2 * p * Math.PI;\r\n\t\tvar p1 = getPos( u, q, p, radius, heightScale );\r\n\t\tvar p2 = getPos( u + 0.01, q, p, radius, heightScale );\r\n\t\ttang.subVectors( p2, p1 );\r\n\t\tn.addVectors( p2, p1 );\r\n\r\n\t\tbitan.crossVectors( tang, n );\r\n\t\tn.crossVectors( bitan, tang );\r\n\t\tbitan.normalize();\r\n\t\tn.normalize();\r\n\r\n\t\tfor ( var j = 0; j < tubularSegments; ++ j ) {\r\n\r\n\t\t\tvar v = j / tubularSegments * 2 * Math.PI;\r\n\t\t\tvar cx = - tube * Math.cos( v ); // TODO: Hack: Negating it so it faces outside.\r\n\t\t\tvar cy = tube * Math.sin( v );\r\n\r\n\t\t\tvar pos = new THREE.Vector3();\r\n\t\t\tpos.x = p1.x + cx * n.x + cy * bitan.x;\r\n\t\t\tpos.y = p1.y + cx * n.y + cy * bitan.y;\r\n\t\t\tpos.z = p1.z + cx * n.z + cy * bitan.z;\r\n\r\n\t\t\tgrid[ i ][ j ] = this.vertices.push( pos ) - 1;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfor ( var i = 0; i < radialSegments; ++ i ) {\r\n\r\n\t\tfor ( var j = 0; j < tubularSegments; ++ j ) {\r\n\r\n\t\t\tvar ip = ( i + 1 ) % radialSegments;\r\n\t\t\tvar jp = ( j + 1 ) % tubularSegments;\r\n\r\n\t\t\tvar a = grid[ i ][ j ];\r\n\t\t\tvar b = grid[ ip ][ j ];\r\n\t\t\tvar c = grid[ ip ][ jp ];\r\n\t\t\tvar d = grid[ i ][ jp ];\r\n\r\n\t\t\tvar uva = new THREE.Vector2( i / radialSegments, j / tubularSegments );\r\n\t\t\tvar uvb = new THREE.Vector2( ( i + 1 ) / radialSegments, j / tubularSegments );\r\n\t\t\tvar uvc = new THREE.Vector2( ( i + 1 ) / radialSegments, ( j + 1 ) / tubularSegments );\r\n\t\t\tvar uvd = new THREE.Vector2( i / radialSegments, ( j + 1 ) / tubularSegments );\r\n\r\n\t\t\tthis.faces.push( new THREE.Face3( a, b, d ) );\r\n\t\t\tthis.faceVertexUvs[ 0 ].push( [ uva, uvb, uvd ] );\r\n\r\n\t\t\tthis.faces.push( new THREE.Face3( b, c, d ) );\r\n\t\t\tthis.faceVertexUvs[ 0 ].push( [ uvb.clone(), uvc, uvd.clone() ] );\r\n\r\n\t\t}\r\n\t}\r\n\r\n\tthis.computeFaceNormals();\r\n\tthis.computeVertexNormals();\r\n\r\n\tfunction getPos( u, in_q, in_p, radius, heightScale ) {\r\n\r\n\t\tvar cu = Math.cos( u );\r\n\t\tvar su = Math.sin( u );\r\n\t\tvar quOverP = in_q / in_p * u;\r\n\t\tvar cs = Math.cos( quOverP );\r\n\r\n\t\tvar tx = radius * ( 2 + cs ) * 0.5 * cu;\r\n\t\tvar ty = radius * ( 2 + cs ) * su * 0.5;\r\n\t\tvar tz = heightScale * radius * Math.sin( quOverP ) * 0.5;\r\n\r\n\t\treturn new THREE.Vector3( tx, ty, tz );\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.TorusKnotGeometry.prototype = Object.create( THREE.Geometry.prototype );\r\n\r\n// File:src/extras/geometries/TubeGeometry.js\r\n\r\n/**\r\n * @author WestLangley / https://github.com/WestLangley\r\n * @author zz85 / https://github.com/zz85\r\n * @author miningold / https://github.com/miningold\r\n *\r\n * Modified from the TorusKnotGeometry by @oosmoxiecode\r\n *\r\n * Creates a tube which extrudes along a 3d spline\r\n *\r\n * Uses parallel transport frames as described in\r\n * http://www.cs.indiana.edu/pub/techreports/TR425.pdf\r\n */\r\n\r\nTHREE.TubeGeometry = function ( path, segments, radius, radialSegments, closed ) {\r\n\r\n\tTHREE.Geometry.call( this );\r\n\r\n\tthis.type = 'TubeGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\tpath: path,\r\n\t\tsegments: segments,\r\n\t\tradius: radius,\r\n\t\tradialSegments: radialSegments,\r\n\t\tclosed: closed\r\n\t};\r\n\r\n\tsegments = segments || 64;\r\n\tradius = radius || 1;\r\n\tradialSegments = radialSegments || 8;\r\n\tclosed = closed || false;\r\n\r\n\tvar grid = [];\r\n\r\n\tvar scope = this,\r\n\r\n\t\ttangent,\r\n\t\tnormal,\r\n\t\tbinormal,\r\n\r\n\t\tnumpoints = segments + 1,\r\n\r\n\t\tx, y, z,\r\n\t\ttx, ty, tz,\r\n\t\tu, v,\r\n\r\n\t\tcx, cy,\r\n\t\tpos, pos2 = new THREE.Vector3(),\r\n\t\ti, j,\r\n\t\tip, jp,\r\n\t\ta, b, c, d,\r\n\t\tuva, uvb, uvc, uvd;\r\n\r\n\tvar frames = new THREE.TubeGeometry.FrenetFrames( path, segments, closed ),\r\n\t\ttangents = frames.tangents,\r\n\t\tnormals = frames.normals,\r\n\t\tbinormals = frames.binormals;\r\n\r\n\t// proxy internals\r\n\tthis.tangents = tangents;\r\n\tthis.normals = normals;\r\n\tthis.binormals = binormals;\r\n\r\n\tfunction vert( x, y, z ) {\r\n\r\n\t\treturn scope.vertices.push( new THREE.Vector3( x, y, z ) ) - 1;\r\n\r\n\t}\r\n\r\n\t// consruct the grid\r\n\r\n\tfor ( i = 0; i < numpoints; i ++ ) {\r\n\r\n\t\tgrid[ i ] = [];\r\n\r\n\t\tu = i / ( numpoints - 1 );\r\n\r\n\t\tpos = path.getPointAt( u );\r\n\r\n\t\ttangent = tangents[ i ];\r\n\t\tnormal = normals[ i ];\r\n\t\tbinormal = binormals[ i ];\r\n\r\n\t\tfor ( j = 0; j < radialSegments; j ++ ) {\r\n\r\n\t\t\tv = j / radialSegments * 2 * Math.PI;\r\n\r\n\t\t\tcx = - radius * Math.cos( v ); // TODO: Hack: Negating it so it faces outside.\r\n\t\t\tcy = radius * Math.sin( v );\r\n\r\n\t\t\tpos2.copy( pos );\r\n\t\t\tpos2.x += cx * normal.x + cy * binormal.x;\r\n\t\t\tpos2.y += cx * normal.y + cy * binormal.y;\r\n\t\t\tpos2.z += cx * normal.z + cy * binormal.z;\r\n\r\n\t\t\tgrid[ i ][ j ] = vert( pos2.x, pos2.y, pos2.z );\r\n\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t// construct the mesh\r\n\r\n\tfor ( i = 0; i < segments; i ++ ) {\r\n\r\n\t\tfor ( j = 0; j < radialSegments; j ++ ) {\r\n\r\n\t\t\tip = ( closed ) ? (i + 1) % segments : i + 1;\r\n\t\t\tjp = (j + 1) % radialSegments;\r\n\r\n\t\t\ta = grid[ i ][ j ];\t\t// *** NOT NECESSARILY PLANAR ! ***\r\n\t\t\tb = grid[ ip ][ j ];\r\n\t\t\tc = grid[ ip ][ jp ];\r\n\t\t\td = grid[ i ][ jp ];\r\n\r\n\t\t\tuva = new THREE.Vector2( i / segments, j / radialSegments );\r\n\t\t\tuvb = new THREE.Vector2( ( i + 1 ) / segments, j / radialSegments );\r\n\t\t\tuvc = new THREE.Vector2( ( i + 1 ) / segments, ( j + 1 ) / radialSegments );\r\n\t\t\tuvd = new THREE.Vector2( i / segments, ( j + 1 ) / radialSegments );\r\n\r\n\t\t\tthis.faces.push( new THREE.Face3( a, b, d ) );\r\n\t\t\tthis.faceVertexUvs[ 0 ].push( [ uva, uvb, uvd ] );\r\n\r\n\t\t\tthis.faces.push( new THREE.Face3( b, c, d ) );\r\n\t\t\tthis.faceVertexUvs[ 0 ].push( [ uvb.clone(), uvc, uvd.clone() ] );\r\n\r\n\t\t}\r\n\t}\r\n\r\n\tthis.computeFaceNormals();\r\n\tthis.computeVertexNormals();\r\n\r\n};\r\n\r\nTHREE.TubeGeometry.prototype = Object.create( THREE.Geometry.prototype );\r\n\r\n\r\n// For computing of Frenet frames, exposing the tangents, normals and binormals the spline\r\nTHREE.TubeGeometry.FrenetFrames = function ( path, segments, closed ) {\r\n\r\n\tvar\ttangent = new THREE.Vector3(),\r\n\t\tnormal = new THREE.Vector3(),\r\n\t\tbinormal = new THREE.Vector3(),\r\n\r\n\t\ttangents = [],\r\n\t\tnormals = [],\r\n\t\tbinormals = [],\r\n\r\n\t\tvec = new THREE.Vector3(),\r\n\t\tmat = new THREE.Matrix4(),\r\n\r\n\t\tnumpoints = segments + 1,\r\n\t\ttheta,\r\n\t\tepsilon = 0.0001,\r\n\t\tsmallest,\r\n\r\n\t\ttx, ty, tz,\r\n\t\ti, u, v;\r\n\r\n\r\n\t// expose internals\r\n\tthis.tangents = tangents;\r\n\tthis.normals = normals;\r\n\tthis.binormals = binormals;\r\n\r\n\t// compute the tangent vectors for each segment on the path\r\n\r\n\tfor ( i = 0; i < numpoints; i ++ ) {\r\n\r\n\t\tu = i / ( numpoints - 1 );\r\n\r\n\t\ttangents[ i ] = path.getTangentAt( u );\r\n\t\ttangents[ i ].normalize();\r\n\r\n\t}\r\n\r\n\tinitialNormal3();\r\n\r\n\t/*\r\n\tfunction initialNormal1(lastBinormal) {\r\n\t\t// fixed start binormal. Has dangers of 0 vectors\r\n\t\tnormals[ 0 ] = new THREE.Vector3();\r\n\t\tbinormals[ 0 ] = new THREE.Vector3();\r\n\t\tif (lastBinormal===undefined) lastBinormal = new THREE.Vector3( 0, 0, 1 );\r\n\t\tnormals[ 0 ].crossVectors( lastBinormal, tangents[ 0 ] ).normalize();\r\n\t\tbinormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] ).normalize();\r\n\t}\r\n\r\n\tfunction initialNormal2() {\r\n\r\n\t\t// This uses the Frenet-Serret formula for deriving binormal\r\n\t\tvar t2 = path.getTangentAt( epsilon );\r\n\r\n\t\tnormals[ 0 ] = new THREE.Vector3().subVectors( t2, tangents[ 0 ] ).normalize();\r\n\t\tbinormals[ 0 ] = new THREE.Vector3().crossVectors( tangents[ 0 ], normals[ 0 ] );\r\n\r\n\t\tnormals[ 0 ].crossVectors( binormals[ 0 ], tangents[ 0 ] ).normalize(); // last binormal x tangent\r\n\t\tbinormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] ).normalize();\r\n\r\n\t}\r\n\t*/\r\n\r\n\tfunction initialNormal3() {\r\n\t\t// select an initial normal vector perpenicular to the first tangent vector,\r\n\t\t// and in the direction of the smallest tangent xyz component\r\n\r\n\t\tnormals[ 0 ] = new THREE.Vector3();\r\n\t\tbinormals[ 0 ] = new THREE.Vector3();\r\n\t\tsmallest = Number.MAX_VALUE;\r\n\t\ttx = Math.abs( tangents[ 0 ].x );\r\n\t\tty = Math.abs( tangents[ 0 ].y );\r\n\t\ttz = Math.abs( tangents[ 0 ].z );\r\n\r\n\t\tif ( tx <= smallest ) {\r\n\t\t\tsmallest = tx;\r\n\t\t\tnormal.set( 1, 0, 0 );\r\n\t\t}\r\n\r\n\t\tif ( ty <= smallest ) {\r\n\t\t\tsmallest = ty;\r\n\t\t\tnormal.set( 0, 1, 0 );\r\n\t\t}\r\n\r\n\t\tif ( tz <= smallest ) {\r\n\t\t\tnormal.set( 0, 0, 1 );\r\n\t\t}\r\n\r\n\t\tvec.crossVectors( tangents[ 0 ], normal ).normalize();\r\n\r\n\t\tnormals[ 0 ].crossVectors( tangents[ 0 ], vec );\r\n\t\tbinormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] );\r\n\t}\r\n\r\n\r\n\t// compute the slowly-varying normal and binormal vectors for each segment on the path\r\n\r\n\tfor ( i = 1; i < numpoints; i ++ ) {\r\n\r\n\t\tnormals[ i ] = normals[ i-1 ].clone();\r\n\r\n\t\tbinormals[ i ] = binormals[ i-1 ].clone();\r\n\r\n\t\tvec.crossVectors( tangents[ i-1 ], tangents[ i ] );\r\n\r\n\t\tif ( vec.length() > epsilon ) {\r\n\r\n\t\t\tvec.normalize();\r\n\r\n\t\t\ttheta = Math.acos( THREE.Math.clamp( tangents[ i-1 ].dot( tangents[ i ] ), - 1, 1 ) ); // clamp for floating pt errors\r\n\r\n\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( vec, theta ) );\r\n\r\n\t\t}\r\n\r\n\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\r\n\r\n\t}\r\n\r\n\r\n\t// if the curve is closed, postprocess the vectors so the first and last normal vectors are the same\r\n\r\n\tif ( closed ) {\r\n\r\n\t\ttheta = Math.acos( THREE.Math.clamp( normals[ 0 ].dot( normals[ numpoints-1 ] ), - 1, 1 ) );\r\n\t\ttheta /= ( numpoints - 1 );\r\n\r\n\t\tif ( tangents[ 0 ].dot( vec.crossVectors( normals[ 0 ], normals[ numpoints-1 ] ) ) > 0 ) {\r\n\r\n\t\t\ttheta = - theta;\r\n\r\n\t\t}\r\n\r\n\t\tfor ( i = 1; i < numpoints; i ++ ) {\r\n\r\n\t\t\t// twist a little...\r\n\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( tangents[ i ], theta * i ) );\r\n\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\r\n\r\n\t\t}\r\n\r\n\t}\r\n};\r\n\r\n// File:src/extras/geometries/PolyhedronGeometry.js\r\n\r\n/**\r\n * @author clockworkgeek / https://github.com/clockworkgeek\r\n * @author timothypratley / https://github.com/timothypratley\r\n * @author WestLangley / http://github.com/WestLangley\r\n*/\r\n\r\nTHREE.PolyhedronGeometry = function ( vertices, indices, radius, detail ) {\r\n\r\n\tTHREE.Geometry.call( this );\r\n\r\n\tthis.type = 'PolyhedronGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\tvertices: vertices,\r\n\t\tindices: indices,\r\n\t\tradius: radius,\r\n\t\tdetail: detail\r\n\t};\r\n\r\n\tradius = radius || 1;\r\n\tdetail = detail || 0;\r\n\r\n\tvar that = this;\r\n\r\n\tfor ( var i = 0, l = vertices.length; i < l; i += 3 ) {\r\n\r\n\t\tprepare( new THREE.Vector3( vertices[ i ], vertices[ i + 1 ], vertices[ i + 2 ] ) );\r\n\r\n\t}\r\n\r\n\tvar midpoints = [], p = this.vertices;\r\n\r\n\tvar faces = [];\r\n\r\n\tfor ( var i = 0, j = 0, l = indices.length; i < l; i += 3, j ++ ) {\r\n\r\n\t\tvar v1 = p[ indices[ i ] ];\r\n\t\tvar v2 = p[ indices[ i + 1 ] ];\r\n\t\tvar v3 = p[ indices[ i + 2 ] ];\r\n\r\n\t\tfaces[ j ] = new THREE.Face3( v1.index, v2.index, v3.index, [ v1.clone(), v2.clone(), v3.clone() ] );\r\n\r\n\t}\r\n\r\n\tvar centroid = new THREE.Vector3();\r\n\r\n\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\r\n\r\n\t\tsubdivide( faces[ i ], detail );\r\n\r\n\t}\r\n\r\n\r\n\t// Handle case when face straddles the seam\r\n\r\n\tfor ( var i = 0, l = this.faceVertexUvs[ 0 ].length; i < l; i ++ ) {\r\n\r\n\t\tvar uvs = this.faceVertexUvs[ 0 ][ i ];\r\n\r\n\t\tvar x0 = uvs[ 0 ].x;\r\n\t\tvar x1 = uvs[ 1 ].x;\r\n\t\tvar x2 = uvs[ 2 ].x;\r\n\r\n\t\tvar max = Math.max( x0, Math.max( x1, x2 ) );\r\n\t\tvar min = Math.min( x0, Math.min( x1, x2 ) );\r\n\r\n\t\tif ( max > 0.9 && min < 0.1 ) { // 0.9 is somewhat arbitrary\r\n\r\n\t\t\tif ( x0 < 0.2 ) uvs[ 0 ].x += 1;\r\n\t\t\tif ( x1 < 0.2 ) uvs[ 1 ].x += 1;\r\n\t\t\tif ( x2 < 0.2 ) uvs[ 2 ].x += 1;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\r\n\t// Apply radius\r\n\r\n\tfor ( var i = 0, l = this.vertices.length; i < l; i ++ ) {\r\n\r\n\t\tthis.vertices[ i ].multiplyScalar( radius );\r\n\r\n\t}\r\n\r\n\r\n\t// Merge vertices\r\n\r\n\tthis.mergeVertices();\r\n\r\n\tthis.computeFaceNormals();\r\n\r\n\tthis.boundingSphere = new THREE.Sphere( new THREE.Vector3(), radius );\r\n\r\n\r\n\t// Project vector onto sphere's surface\r\n\r\n\tfunction prepare( vector ) {\r\n\r\n\t\tvar vertex = vector.normalize().clone();\r\n\t\tvertex.index = that.vertices.push( vertex ) - 1;\r\n\r\n\t\t// Texture coords are equivalent to map coords, calculate angle and convert to fraction of a circle.\r\n\r\n\t\tvar u = azimuth( vector ) / 2 / Math.PI + 0.5;\r\n\t\tvar v = inclination( vector ) / Math.PI + 0.5;\r\n\t\tvertex.uv = new THREE.Vector2( u, 1 - v );\r\n\r\n\t\treturn vertex;\r\n\r\n\t}\r\n\r\n\r\n\t// Approximate a curved face with recursively sub-divided triangles.\r\n\r\n\tfunction make( v1, v2, v3 ) {\r\n\r\n\t\tvar face = new THREE.Face3( v1.index, v2.index, v3.index, [ v1.clone(), v2.clone(), v3.clone() ] );\r\n\t\tthat.faces.push( face );\r\n\r\n\t\tcentroid.copy( v1 ).add( v2 ).add( v3 ).divideScalar( 3 );\r\n\r\n\t\tvar azi = azimuth( centroid );\r\n\r\n\t\tthat.faceVertexUvs[ 0 ].push( [\r\n\t\t\tcorrectUV( v1.uv, v1, azi ),\r\n\t\t\tcorrectUV( v2.uv, v2, azi ),\r\n\t\t\tcorrectUV( v3.uv, v3, azi )\r\n\t\t] );\r\n\r\n\t}\r\n\r\n\r\n\t// Analytically subdivide a face to the required detail level.\r\n\r\n\tfunction subdivide( face, detail ) {\r\n\r\n\t\tvar cols = Math.pow(2, detail);\r\n\t\tvar cells = Math.pow(4, detail);\r\n\t\tvar a = prepare( that.vertices[ face.a ] );\r\n\t\tvar b = prepare( that.vertices[ face.b ] );\r\n\t\tvar c = prepare( that.vertices[ face.c ] );\r\n\t\tvar v = [];\r\n\r\n\t\t// Construct all of the vertices for this subdivision.\r\n\r\n\t\tfor ( var i = 0 ; i <= cols; i ++ ) {\r\n\r\n\t\t\tv[ i ] = [];\r\n\r\n\t\t\tvar aj = prepare( a.clone().lerp( c, i / cols ) );\r\n\t\t\tvar bj = prepare( b.clone().lerp( c, i / cols ) );\r\n\t\t\tvar rows = cols - i;\r\n\r\n\t\t\tfor ( var j = 0; j <= rows; j ++) {\r\n\r\n\t\t\t\tif ( j == 0 && i == cols ) {\r\n\r\n\t\t\t\t\tv[ i ][ j ] = aj;\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tv[ i ][ j ] = prepare( aj.clone().lerp( bj, j / rows ) );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t// Construct all of the faces.\r\n\r\n\t\tfor ( var i = 0; i < cols ; i ++ ) {\r\n\r\n\t\t\tfor ( var j = 0; j < 2 * (cols - i) - 1; j ++ ) {\r\n\r\n\t\t\t\tvar k = Math.floor( j / 2 );\r\n\r\n\t\t\t\tif ( j % 2 == 0 ) {\r\n\r\n\t\t\t\t\tmake(\r\n\t\t\t\t\t\tv[ i ][ k + 1],\r\n\t\t\t\t\t\tv[ i + 1 ][ k ],\r\n\t\t\t\t\t\tv[ i ][ k ]\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tmake(\r\n\t\t\t\t\t\tv[ i ][ k + 1 ],\r\n\t\t\t\t\t\tv[ i + 1][ k + 1],\r\n\t\t\t\t\t\tv[ i + 1 ][ k ]\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\r\n\t// Angle around the Y axis, counter-clockwise when looking from above.\r\n\r\n\tfunction azimuth( vector ) {\r\n\r\n\t\treturn Math.atan2( vector.z, - vector.x );\r\n\r\n\t}\r\n\r\n\r\n\t// Angle above the XZ plane.\r\n\r\n\tfunction inclination( vector ) {\r\n\r\n\t\treturn Math.atan2( - vector.y, Math.sqrt( ( vector.x * vector.x ) + ( vector.z * vector.z ) ) );\r\n\r\n\t}\r\n\r\n\r\n\t// Texture fixing helper. Spheres have some odd behaviours.\r\n\r\n\tfunction correctUV( uv, vector, azimuth ) {\r\n\r\n\t\tif ( ( azimuth < 0 ) && ( uv.x === 1 ) ) uv = new THREE.Vector2( uv.x - 1, uv.y );\r\n\t\tif ( ( vector.x === 0 ) && ( vector.z === 0 ) ) uv = new THREE.Vector2( azimuth / 2 / Math.PI + 0.5, uv.y );\r\n\t\treturn uv.clone();\r\n\r\n\t}\r\n\r\n\r\n};\r\n\r\nTHREE.PolyhedronGeometry.prototype = Object.create( THREE.Geometry.prototype );\r\n\r\n// File:src/extras/geometries/DodecahedronGeometry.js\r\n\r\n/**\r\n * @author Abe Pazos / https://hamoid.com\r\n */\r\n\r\nTHREE.DodecahedronGeometry = function ( radius, detail ) {\r\n\r\n\tthis.parameters = {\r\n\t\tradius: radius,\r\n\t\tdetail: detail\r\n\t};\r\n\r\n\tvar t = ( 1 + Math.sqrt( 5 ) ) / 2;\r\n\tvar r = 1 / t;\r\n\r\n\tvar vertices = [\r\n\r\n\t\t// (±1, ±1, ±1)\r\n\t\t-1, -1, -1, -1, -1, 1,\r\n\t\t-1, 1, -1, -1, 1, 1,\r\n\t\t 1, -1, -1, 1, -1, 1,\r\n\t\t 1, 1, -1, 1, 1, 1,\r\n\r\n\t\t// (0, ±1/φ, ±φ)\r\n\t\t 0, -r, -t, 0, -r, t,\r\n\t\t 0, r, -t, 0, r, t,\r\n\r\n\t\t// (±1/φ, ±φ, 0)\r\n\t\t-r, -t, 0, -r, t, 0,\r\n\t\t r, -t, 0, r, t, 0,\r\n\r\n\t\t// (±φ, 0, ±1/φ)\r\n\t\t-t, 0, -r, t, 0, -r,\r\n\t\t-t, 0, r, t, 0, r\r\n\t];\r\n\r\n\tvar indices = [\r\n\t\t 3, 11, 7, 3, 7, 15, 3, 15, 13,\r\n\t\t 7, 19, 17, 7, 17, 6, 7, 6, 15,\r\n\t\t17, 4, 8, 17, 8, 10, 17, 10, 6,\r\n\t\t 8, 0, 16, 8, 16, 2, 8, 2, 10,\r\n\t\t 0, 12, 1, 0, 1, 18, 0, 18, 16,\r\n\t\t 6, 10, 2, 6, 2, 13, 6, 13, 15,\r\n\t\t 2, 16, 18, 2, 18, 3, 2, 3, 13,\r\n\t\t18, 1, 9, 18, 9, 11, 18, 11, 3,\r\n\t\t 4, 14, 12, 4, 12, 0, 4, 0, 8,\r\n\t\t11, 9, 5, 11, 5, 19, 11, 19, 7,\r\n\t\t19, 5, 14, 19, 14, 4, 19, 4, 17,\r\n\t\t 1, 12, 14, 1, 14, 5, 1, 5, 9\r\n\t];\r\n\r\n\tTHREE.PolyhedronGeometry.call( this, vertices, indices, radius, detail );\r\n\r\n};\r\n\r\nTHREE.DodecahedronGeometry.prototype = Object.create( THREE.Geometry.prototype );\r\n\r\n// File:src/extras/geometries/IcosahedronGeometry.js\r\n\r\n/**\r\n * @author timothypratley / https://github.com/timothypratley\r\n */\r\n\r\nTHREE.IcosahedronGeometry = function ( radius, detail ) {\r\n\r\n\tvar t = ( 1 + Math.sqrt( 5 ) ) / 2;\r\n\r\n\tvar vertices = [\r\n\t\t- 1, t, 0, 1, t, 0, - 1, - t, 0, 1, - t, 0,\r\n\t\t 0, - 1, t, 0, 1, t, 0, - 1, - t, 0, 1, - t,\r\n\t\t t, 0, - 1, t, 0, 1, - t, 0, - 1, - t, 0, 1\r\n\t];\r\n\r\n\tvar indices = [\r\n\t\t 0, 11, 5, 0, 5, 1, 0, 1, 7, 0, 7, 10, 0, 10, 11,\r\n\t\t 1, 5, 9, 5, 11, 4, 11, 10, 2, 10, 7, 6, 7, 1, 8,\r\n\t\t 3, 9, 4, 3, 4, 2, 3, 2, 6, 3, 6, 8, 3, 8, 9,\r\n\t\t 4, 9, 5, 2, 4, 11, 6, 2, 10, 8, 6, 7, 9, 8, 1\r\n\t];\r\n\r\n\tTHREE.PolyhedronGeometry.call( this, vertices, indices, radius, detail );\r\n\r\n\tthis.type = 'IcosahedronGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\tradius: radius,\r\n\t\tdetail: detail\r\n\t};\r\n};\r\n\r\nTHREE.IcosahedronGeometry.prototype = Object.create( THREE.Geometry.prototype );\r\n\r\n// File:src/extras/geometries/OctahedronGeometry.js\r\n\r\n/**\r\n * @author timothypratley / https://github.com/timothypratley\r\n */\r\n\r\nTHREE.OctahedronGeometry = function ( radius, detail ) {\r\n\r\n\tthis.parameters = {\r\n\t\tradius: radius,\r\n\t\tdetail: detail\r\n\t};\r\n\r\n\tvar vertices = [\r\n\t\t1, 0, 0, - 1, 0, 0, 0, 1, 0, 0,- 1, 0, 0, 0, 1, 0, 0,- 1\r\n\t];\r\n\r\n\tvar indices = [\r\n\t\t0, 2, 4, 0, 4, 3, 0, 3, 5, 0, 5, 2, 1, 2, 5, 1, 5, 3, 1, 3, 4, 1, 4, 2\r\n\t];\r\n\r\n\tTHREE.PolyhedronGeometry.call( this, vertices, indices, radius, detail );\r\n\r\n\tthis.type = 'OctahedronGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\tradius: radius,\r\n\t\tdetail: detail\r\n\t};\r\n};\r\n\r\nTHREE.OctahedronGeometry.prototype = Object.create( THREE.Geometry.prototype );\r\n\r\n// File:src/extras/geometries/TetrahedronGeometry.js\r\n\r\n/**\r\n * @author timothypratley / https://github.com/timothypratley\r\n */\r\n\r\nTHREE.TetrahedronGeometry = function ( radius, detail ) {\r\n\r\n\tvar vertices = [\r\n\t\t 1, 1, 1, - 1, - 1, 1, - 1, 1, - 1, 1, - 1, - 1\r\n\t];\r\n\r\n\tvar indices = [\r\n\t\t 2, 1, 0, 0, 3, 2, 1, 3, 0, 2, 3, 1\r\n\t];\r\n\r\n\tTHREE.PolyhedronGeometry.call( this, vertices, indices, radius, detail );\r\n\r\n\tthis.type = 'TetrahedronGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\tradius: radius,\r\n\t\tdetail: detail\r\n\t};\r\n\r\n};\r\n\r\nTHREE.TetrahedronGeometry.prototype = Object.create( THREE.Geometry.prototype );\r\n\r\n// File:src/extras/geometries/ParametricGeometry.js\r\n\r\n/**\r\n * @author zz85 / https://github.com/zz85\r\n * Parametric Surfaces Geometry\r\n * based on the brilliant article by @prideout http://prideout.net/blog/?p=44\r\n *\r\n * new THREE.ParametricGeometry( parametricFunction, uSegments, ySegements );\r\n *\r\n */\r\n\r\nTHREE.ParametricGeometry = function ( func, slices, stacks ) {\r\n\r\n\tTHREE.Geometry.call( this );\r\n\r\n\tthis.type = 'ParametricGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\tfunc: func,\r\n\t\tslices: slices,\r\n\t\tstacks: stacks\r\n\t};\r\n\r\n\tvar verts = this.vertices;\r\n\tvar faces = this.faces;\r\n\tvar uvs = this.faceVertexUvs[ 0 ];\r\n\r\n\tvar i, il, j, p;\r\n\tvar u, v;\r\n\r\n\tvar stackCount = stacks + 1;\r\n\tvar sliceCount = slices + 1;\r\n\r\n\tfor ( i = 0; i <= stacks; i ++ ) {\r\n\r\n\t\tv = i / stacks;\r\n\r\n\t\tfor ( j = 0; j <= slices; j ++ ) {\r\n\r\n\t\t\tu = j / slices;\r\n\r\n\t\t\tp = func( u, v );\r\n\t\t\tverts.push( p );\r\n\r\n\t\t}\r\n\t}\r\n\r\n\tvar a, b, c, d;\r\n\tvar uva, uvb, uvc, uvd;\r\n\r\n\tfor ( i = 0; i < stacks; i ++ ) {\r\n\r\n\t\tfor ( j = 0; j < slices; j ++ ) {\r\n\r\n\t\t\ta = i * sliceCount + j;\r\n\t\t\tb = i * sliceCount + j + 1;\r\n\t\t\tc = (i + 1) * sliceCount + j + 1;\r\n\t\t\td = (i + 1) * sliceCount + j;\r\n\r\n\t\t\tuva = new THREE.Vector2( j / slices, i / stacks );\r\n\t\t\tuvb = new THREE.Vector2( ( j + 1 ) / slices, i / stacks );\r\n\t\t\tuvc = new THREE.Vector2( ( j + 1 ) / slices, ( i + 1 ) / stacks );\r\n\t\t\tuvd = new THREE.Vector2( j / slices, ( i + 1 ) / stacks );\r\n\r\n\t\t\tfaces.push( new THREE.Face3( a, b, d ) );\r\n\t\t\tuvs.push( [ uva, uvb, uvd ] );\r\n\r\n\t\t\tfaces.push( new THREE.Face3( b, c, d ) );\r\n\t\t\tuvs.push( [ uvb.clone(), uvc, uvd.clone() ] );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// console.log(this);\r\n\r\n\t// magic bullet\r\n\t// var diff = this.mergeVertices();\r\n\t// console.log('removed ', diff, ' vertices by merging');\r\n\r\n\tthis.computeFaceNormals();\r\n\tthis.computeVertexNormals();\r\n\r\n};\r\n\r\nTHREE.ParametricGeometry.prototype = Object.create( THREE.Geometry.prototype );\r\n\r\n// File:src/extras/helpers/AxisHelper.js\r\n\r\n/**\r\n * @author sroucheray / http://sroucheray.org/\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.AxisHelper = function ( size ) {\r\n\r\n\tsize = size || 1;\r\n\r\n\tvar vertices = new Float32Array( [\r\n\t\t0, 0, 0, size, 0, 0,\r\n\t\t0, 0, 0, 0, size, 0,\r\n\t\t0, 0, 0, 0, 0, size\r\n\t] );\r\n\r\n\tvar colors = new Float32Array( [\r\n\t\t1, 0, 0, 1, 0.6, 0,\r\n\t\t0, 1, 0, 0.6, 1, 0,\r\n\t\t0, 0, 1, 0, 0.6, 1\r\n\t] );\r\n\r\n\tvar geometry = new THREE.BufferGeometry();\r\n\tgeometry.addAttribute( 'position', new THREE.BufferAttribute( vertices, 3 ) );\r\n\tgeometry.addAttribute( 'color', new THREE.BufferAttribute( colors, 3 ) );\r\n\r\n\tvar material = new THREE.LineBasicMaterial( { vertexColors: THREE.VertexColors } );\r\n\r\n\tTHREE.Line.call( this, geometry, material, THREE.LinePieces );\r\n\r\n};\r\n\r\nTHREE.AxisHelper.prototype = Object.create( THREE.Line.prototype );\r\n\r\n// File:src/extras/helpers/ArrowHelper.js\r\n\r\n/**\r\n * @author WestLangley / http://github.com/WestLangley\r\n * @author zz85 / http://github.com/zz85\r\n * @author bhouston / http://exocortex.com\r\n *\r\n * Creates an arrow for visualizing directions\r\n *\r\n * Parameters:\r\n * dir - Vector3\r\n * origin - Vector3\r\n * length - Number\r\n * color - color in hex value\r\n * headLength - Number\r\n * headWidth - Number\r\n */\r\n\r\nTHREE.ArrowHelper = ( function () {\r\n\r\n\tvar lineGeometry = new THREE.Geometry();\r\n\tlineGeometry.vertices.push( new THREE.Vector3( 0, 0, 0 ), new THREE.Vector3( 0, 1, 0 ) );\r\n\r\n\tvar coneGeometry = new THREE.CylinderGeometry( 0, 0.5, 1, 5, 1 );\r\n\tconeGeometry.applyMatrix( new THREE.Matrix4().makeTranslation( 0, - 0.5, 0 ) );\r\n\r\n\treturn function ( dir, origin, length, color, headLength, headWidth ) {\r\n\r\n\t\t// dir is assumed to be normalized\r\n\r\n\t\tTHREE.Object3D.call( this );\r\n\r\n\t\tif ( color === undefined ) color = 0xffff00;\r\n\t\tif ( length === undefined ) length = 1;\r\n\t\tif ( headLength === undefined ) headLength = 0.2 * length;\r\n\t\tif ( headWidth === undefined ) headWidth = 0.2 * headLength;\r\n\r\n\t\tthis.position.copy( origin );\r\n\r\n\t\tthis.line = new THREE.Line( lineGeometry, new THREE.LineBasicMaterial( { color: color } ) );\r\n\t\tthis.line.matrixAutoUpdate = false;\r\n\t\tthis.add( this.line );\r\n\r\n\t\tthis.cone = new THREE.Mesh( coneGeometry, new THREE.MeshBasicMaterial( { color: color } ) );\r\n\t\tthis.cone.matrixAutoUpdate = false;\r\n\t\tthis.add( this.cone );\r\n\r\n\t\tthis.setDirection( dir );\r\n\t\tthis.setLength( length, headLength, headWidth );\r\n\r\n\t}\r\n\r\n}() );\r\n\r\nTHREE.ArrowHelper.prototype = Object.create( THREE.Object3D.prototype );\r\n\r\nTHREE.ArrowHelper.prototype.setDirection = ( function () {\r\n\r\n\tvar axis = new THREE.Vector3();\r\n\tvar radians;\r\n\r\n\treturn function ( dir ) {\r\n\r\n\t\t// dir is assumed to be normalized\r\n\r\n\t\tif ( dir.y > 0.99999 ) {\r\n\r\n\t\t\tthis.quaternion.set( 0, 0, 0, 1 );\r\n\r\n\t\t} else if ( dir.y < - 0.99999 ) {\r\n\r\n\t\t\tthis.quaternion.set( 1, 0, 0, 0 );\r\n\r\n\t\t} else {\r\n\r\n\t\t\taxis.set( dir.z, 0, - dir.x ).normalize();\r\n\r\n\t\t\tradians = Math.acos( dir.y );\r\n\r\n\t\t\tthis.quaternion.setFromAxisAngle( axis, radians );\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n}() );\r\n\r\nTHREE.ArrowHelper.prototype.setLength = function ( length, headLength, headWidth ) {\r\n\r\n\tif ( headLength === undefined ) headLength = 0.2 * length;\r\n\tif ( headWidth === undefined ) headWidth = 0.2 * headLength;\r\n\r\n\tthis.line.scale.set( 1, length, 1 );\r\n\tthis.line.updateMatrix();\r\n\r\n\tthis.cone.scale.set( headWidth, headLength, headWidth );\r\n\tthis.cone.position.y = length;\r\n\tthis.cone.updateMatrix();\r\n\r\n};\r\n\r\nTHREE.ArrowHelper.prototype.setColor = function ( color ) {\r\n\r\n\tthis.line.material.color.set( color );\r\n\tthis.cone.material.color.set( color );\r\n\r\n};\r\n\r\n// File:src/extras/helpers/BoxHelper.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.BoxHelper = function ( object ) {\r\n\r\n\tvar geometry = new THREE.BufferGeometry();\r\n\tgeometry.addAttribute( 'position', new THREE.BufferAttribute( new Float32Array( 72 ), 3 ) );\r\n\r\n\tTHREE.Line.call( this, geometry, new THREE.LineBasicMaterial( { color: 0xffff00 } ), THREE.LinePieces );\r\n\r\n\tif ( object !== undefined ) {\r\n\r\n\t\tthis.update( object );\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.BoxHelper.prototype = Object.create( THREE.Line.prototype );\r\n\r\nTHREE.BoxHelper.prototype.update = function ( object ) {\r\n\r\n\tvar geometry = object.geometry;\r\n\r\n\tif ( geometry.boundingBox === null ) {\r\n\r\n\t\tgeometry.computeBoundingBox();\r\n\r\n\t}\r\n\r\n\tvar min = geometry.boundingBox.min;\r\n\tvar max = geometry.boundingBox.max;\r\n\r\n\t/*\r\n\t 5____4\r\n\t1/___0/|\r\n\t| 6__|_7\r\n\t2/___3/\r\n\r\n\t0: max.x, max.y, max.z\r\n\t1: min.x, max.y, max.z\r\n\t2: min.x, min.y, max.z\r\n\t3: max.x, min.y, max.z\r\n\t4: max.x, max.y, min.z\r\n\t5: min.x, max.y, min.z\r\n\t6: min.x, min.y, min.z\r\n\t7: max.x, min.y, min.z\r\n\t*/\r\n\r\n\tvar vertices = this.geometry.attributes.position.array;\r\n\r\n\tvertices[ 0 ] = max.x; vertices[ 1 ] = max.y; vertices[ 2 ] = max.z;\r\n\tvertices[ 3 ] = min.x; vertices[ 4 ] = max.y; vertices[ 5 ] = max.z;\r\n\r\n\tvertices[ 6 ] = min.x; vertices[ 7 ] = max.y; vertices[ 8 ] = max.z;\r\n\tvertices[ 9 ] = min.x; vertices[ 10 ] = min.y; vertices[ 11 ] = max.z;\r\n\r\n\tvertices[ 12 ] = min.x; vertices[ 13 ] = min.y; vertices[ 14 ] = max.z;\r\n\tvertices[ 15 ] = max.x; vertices[ 16 ] = min.y; vertices[ 17 ] = max.z;\r\n\r\n\tvertices[ 18 ] = max.x; vertices[ 19 ] = min.y; vertices[ 20 ] = max.z;\r\n\tvertices[ 21 ] = max.x; vertices[ 22 ] = max.y; vertices[ 23 ] = max.z;\r\n\r\n\t//\r\n\r\n\tvertices[ 24 ] = max.x; vertices[ 25 ] = max.y; vertices[ 26 ] = min.z;\r\n\tvertices[ 27 ] = min.x; vertices[ 28 ] = max.y; vertices[ 29 ] = min.z;\r\n\r\n\tvertices[ 30 ] = min.x; vertices[ 31 ] = max.y; vertices[ 32 ] = min.z;\r\n\tvertices[ 33 ] = min.x; vertices[ 34 ] = min.y; vertices[ 35 ] = min.z;\r\n\r\n\tvertices[ 36 ] = min.x; vertices[ 37 ] = min.y; vertices[ 38 ] = min.z;\r\n\tvertices[ 39 ] = max.x; vertices[ 40 ] = min.y; vertices[ 41 ] = min.z;\r\n\r\n\tvertices[ 42 ] = max.x; vertices[ 43 ] = min.y; vertices[ 44 ] = min.z;\r\n\tvertices[ 45 ] = max.x; vertices[ 46 ] = max.y; vertices[ 47 ] = min.z;\r\n\r\n\t//\r\n\r\n\tvertices[ 48 ] = max.x; vertices[ 49 ] = max.y; vertices[ 50 ] = max.z;\r\n\tvertices[ 51 ] = max.x; vertices[ 52 ] = max.y; vertices[ 53 ] = min.z;\r\n\r\n\tvertices[ 54 ] = min.x; vertices[ 55 ] = max.y; vertices[ 56 ] = max.z;\r\n\tvertices[ 57 ] = min.x; vertices[ 58 ] = max.y; vertices[ 59 ] = min.z;\r\n\r\n\tvertices[ 60 ] = min.x; vertices[ 61 ] = min.y; vertices[ 62 ] = max.z;\r\n\tvertices[ 63 ] = min.x; vertices[ 64 ] = min.y; vertices[ 65 ] = min.z;\r\n\r\n\tvertices[ 66 ] = max.x; vertices[ 67 ] = min.y; vertices[ 68 ] = max.z;\r\n\tvertices[ 69 ] = max.x; vertices[ 70 ] = min.y; vertices[ 71 ] = min.z;\r\n\r\n\tthis.geometry.attributes.position.needsUpdate = true;\r\n\r\n\tthis.geometry.computeBoundingSphere();\r\n\r\n\tthis.matrix = object.matrixWorld;\r\n\tthis.matrixAutoUpdate = false;\r\n\r\n};\r\n\r\n// File:src/extras/helpers/BoundingBoxHelper.js\r\n\r\n/**\r\n * @author WestLangley / http://github.com/WestLangley\r\n */\r\n\r\n// a helper to show the world-axis-aligned bounding box for an object\r\n\r\nTHREE.BoundingBoxHelper = function ( object, hex ) {\r\n\r\n\tvar color = ( hex !== undefined ) ? hex : 0x888888;\r\n\r\n\tthis.object = object;\r\n\r\n\tthis.box = new THREE.Box3();\r\n\r\n\tTHREE.Mesh.call( this, new THREE.BoxGeometry( 1, 1, 1 ), new THREE.MeshBasicMaterial( { color: color, wireframe: true } ) );\r\n\r\n};\r\n\r\nTHREE.BoundingBoxHelper.prototype = Object.create( THREE.Mesh.prototype );\r\n\r\nTHREE.BoundingBoxHelper.prototype.update = function () {\r\n\r\n\tthis.box.setFromObject( this.object );\r\n\r\n\tthis.box.size( this.scale );\r\n\r\n\tthis.box.center( this.position );\r\n\r\n};\r\n\r\n// File:src/extras/helpers/CameraHelper.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n *\r\n *\t- shows frustum, line of sight and up of the camera\r\n *\t- suitable for fast updates\r\n * \t- based on frustum visualization in lightgl.js shadowmap example\r\n *\t\thttp://evanw.github.com/lightgl.js/tests/shadowmap.html\r\n */\r\n\r\nTHREE.CameraHelper = function ( camera ) {\r\n\r\n\tvar geometry = new THREE.Geometry();\r\n\tvar material = new THREE.LineBasicMaterial( { color: 0xffffff, vertexColors: THREE.FaceColors } );\r\n\r\n\tvar pointMap = {};\r\n\r\n\t// colors\r\n\r\n\tvar hexFrustum = 0xffaa00;\r\n\tvar hexCone = 0xff0000;\r\n\tvar hexUp = 0x00aaff;\r\n\tvar hexTarget = 0xffffff;\r\n\tvar hexCross = 0x333333;\r\n\r\n\t// near\r\n\r\n\taddLine( \"n1\", \"n2\", hexFrustum );\r\n\taddLine( \"n2\", \"n4\", hexFrustum );\r\n\taddLine( \"n4\", \"n3\", hexFrustum );\r\n\taddLine( \"n3\", \"n1\", hexFrustum );\r\n\r\n\t// far\r\n\r\n\taddLine( \"f1\", \"f2\", hexFrustum );\r\n\taddLine( \"f2\", \"f4\", hexFrustum );\r\n\taddLine( \"f4\", \"f3\", hexFrustum );\r\n\taddLine( \"f3\", \"f1\", hexFrustum );\r\n\r\n\t// sides\r\n\r\n\taddLine( \"n1\", \"f1\", hexFrustum );\r\n\taddLine( \"n2\", \"f2\", hexFrustum );\r\n\taddLine( \"n3\", \"f3\", hexFrustum );\r\n\taddLine( \"n4\", \"f4\", hexFrustum );\r\n\r\n\t// cone\r\n\r\n\taddLine( \"p\", \"n1\", hexCone );\r\n\taddLine( \"p\", \"n2\", hexCone );\r\n\taddLine( \"p\", \"n3\", hexCone );\r\n\taddLine( \"p\", \"n4\", hexCone );\r\n\r\n\t// up\r\n\r\n\taddLine( \"u1\", \"u2\", hexUp );\r\n\taddLine( \"u2\", \"u3\", hexUp );\r\n\taddLine( \"u3\", \"u1\", hexUp );\r\n\r\n\t// target\r\n\r\n\taddLine( \"c\", \"t\", hexTarget );\r\n\taddLine( \"p\", \"c\", hexCross );\r\n\r\n\t// cross\r\n\r\n\taddLine( \"cn1\", \"cn2\", hexCross );\r\n\taddLine( \"cn3\", \"cn4\", hexCross );\r\n\r\n\taddLine( \"cf1\", \"cf2\", hexCross );\r\n\taddLine( \"cf3\", \"cf4\", hexCross );\r\n\r\n\tfunction addLine( a, b, hex ) {\r\n\r\n\t\taddPoint( a, hex );\r\n\t\taddPoint( b, hex );\r\n\r\n\t}\r\n\r\n\tfunction addPoint( id, hex ) {\r\n\r\n\t\tgeometry.vertices.push( new THREE.Vector3() );\r\n\t\tgeometry.colors.push( new THREE.Color( hex ) );\r\n\r\n\t\tif ( pointMap[ id ] === undefined ) {\r\n\r\n\t\t\tpointMap[ id ] = [];\r\n\r\n\t\t}\r\n\r\n\t\tpointMap[ id ].push( geometry.vertices.length - 1 );\r\n\r\n\t}\r\n\r\n\tTHREE.Line.call( this, geometry, material, THREE.LinePieces );\r\n\r\n\tthis.camera = camera;\r\n\tthis.matrix = camera.matrixWorld;\r\n\tthis.matrixAutoUpdate = false;\r\n\r\n\tthis.pointMap = pointMap;\r\n\r\n\tthis.update();\r\n\r\n};\r\n\r\nTHREE.CameraHelper.prototype = Object.create( THREE.Line.prototype );\r\n\r\nTHREE.CameraHelper.prototype.update = function () {\r\n\r\n\tvar geometry, pointMap;\r\n\t\r\n\tvar vector = new THREE.Vector3();\r\n\tvar camera = new THREE.Camera();\r\n\r\n\tvar setPoint = function ( point, x, y, z ) {\r\n\r\n\t\tvector.set( x, y, z ).unproject( camera );\r\n\r\n\t\tvar points = pointMap[ point ];\r\n\r\n\t\tif ( points !== undefined ) {\r\n\r\n\t\t\tfor ( var i = 0, il = points.length; i < il; i ++ ) {\r\n\r\n\t\t\t\tgeometry.vertices[ points[ i ] ].copy( vector );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\treturn function () {\r\n\r\n\t\tgeometry = this.geometry;\r\n\t\tpointMap = this.pointMap;\r\n\r\n\t\tvar w = 1, h = 1;\r\n\r\n\t\t// we need just camera projection matrix\r\n\t\t// world matrix must be identity\r\n\r\n\t\tcamera.projectionMatrix.copy( this.camera.projectionMatrix );\r\n\r\n\t\t// center / target\r\n\r\n\t\tsetPoint( \"c\", 0, 0, - 1 );\r\n\t\tsetPoint( \"t\", 0, 0, 1 );\r\n\r\n\t\t// near\r\n\r\n\t\tsetPoint( \"n1\", - w, - h, - 1 );\r\n\t\tsetPoint( \"n2\", w, - h, - 1 );\r\n\t\tsetPoint( \"n3\", - w, h, - 1 );\r\n\t\tsetPoint( \"n4\", w, h, - 1 );\r\n\r\n\t\t// far\r\n\r\n\t\tsetPoint( \"f1\", - w, - h, 1 );\r\n\t\tsetPoint( \"f2\", w, - h, 1 );\r\n\t\tsetPoint( \"f3\", - w, h, 1 );\r\n\t\tsetPoint( \"f4\", w, h, 1 );\r\n\r\n\t\t// up\r\n\r\n\t\tsetPoint( \"u1\", w * 0.7, h * 1.1, - 1 );\r\n\t\tsetPoint( \"u2\", - w * 0.7, h * 1.1, - 1 );\r\n\t\tsetPoint( \"u3\", 0, h * 2, - 1 );\r\n\r\n\t\t// cross\r\n\r\n\t\tsetPoint( \"cf1\", - w, 0, 1 );\r\n\t\tsetPoint( \"cf2\", w, 0, 1 );\r\n\t\tsetPoint( \"cf3\", 0, - h, 1 );\r\n\t\tsetPoint( \"cf4\", 0, h, 1 );\r\n\r\n\t\tsetPoint( \"cn1\", - w, 0, - 1 );\r\n\t\tsetPoint( \"cn2\", w, 0, - 1 );\r\n\t\tsetPoint( \"cn3\", 0, - h, - 1 );\r\n\t\tsetPoint( \"cn4\", 0, h, - 1 );\r\n\r\n\t\tgeometry.verticesNeedUpdate = true;\r\n\r\n\t};\r\n\r\n}();\r\n\r\n// File:src/extras/helpers/DirectionalLightHelper.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author WestLangley / http://github.com/WestLangley\r\n */\r\n\r\nTHREE.DirectionalLightHelper = function ( light, size ) {\r\n\r\n\tTHREE.Object3D.call( this );\r\n\r\n\tthis.light = light;\r\n\tthis.light.updateMatrixWorld();\r\n\r\n\tthis.matrix = light.matrixWorld;\r\n\tthis.matrixAutoUpdate = false;\r\n\r\n\tsize = size || 1;\r\n\r\n\tvar geometry = new THREE.Geometry();\r\n\tgeometry.vertices.push(\r\n\t\tnew THREE.Vector3( - size, size, 0 ),\r\n\t\tnew THREE.Vector3( size, size, 0 ),\r\n\t\tnew THREE.Vector3( size, - size, 0 ),\r\n\t\tnew THREE.Vector3( - size, - size, 0 ),\r\n\t\tnew THREE.Vector3( - size, size, 0 )\r\n\t);\r\n\r\n\tvar material = new THREE.LineBasicMaterial( { fog: false } );\r\n\tmaterial.color.copy( this.light.color ).multiplyScalar( this.light.intensity );\r\n\r\n\tthis.lightPlane = new THREE.Line( geometry, material );\r\n\tthis.add( this.lightPlane );\r\n\r\n\tgeometry = new THREE.Geometry();\r\n\tgeometry.vertices.push(\r\n\t\tnew THREE.Vector3(),\r\n\t\tnew THREE.Vector3()\r\n\t);\r\n\r\n\tmaterial = new THREE.LineBasicMaterial( { fog: false } );\r\n\tmaterial.color.copy( this.light.color ).multiplyScalar( this.light.intensity );\r\n\r\n\tthis.targetLine = new THREE.Line( geometry, material );\r\n\tthis.add( this.targetLine );\r\n\r\n\tthis.update();\r\n\r\n};\r\n\r\nTHREE.DirectionalLightHelper.prototype = Object.create( THREE.Object3D.prototype );\r\n\r\nTHREE.DirectionalLightHelper.prototype.dispose = function () {\r\n\r\n\tthis.lightPlane.geometry.dispose();\r\n\tthis.lightPlane.material.dispose();\r\n\tthis.targetLine.geometry.dispose();\r\n\tthis.targetLine.material.dispose();\r\n};\r\n\r\nTHREE.DirectionalLightHelper.prototype.update = function () {\r\n\r\n\tvar v1 = new THREE.Vector3();\r\n\tvar v2 = new THREE.Vector3();\r\n\tvar v3 = new THREE.Vector3();\r\n\r\n\treturn function () {\r\n\r\n\t\tv1.setFromMatrixPosition( this.light.matrixWorld );\r\n\t\tv2.setFromMatrixPosition( this.light.target.matrixWorld );\r\n\t\tv3.subVectors( v2, v1 );\r\n\r\n\t\tthis.lightPlane.lookAt( v3 );\r\n\t\tthis.lightPlane.material.color.copy( this.light.color ).multiplyScalar( this.light.intensity );\r\n\r\n\t\tthis.targetLine.geometry.vertices[ 1 ].copy( v3 );\r\n\t\tthis.targetLine.geometry.verticesNeedUpdate = true;\r\n\t\tthis.targetLine.material.color.copy( this.lightPlane.material.color );\r\n\r\n\t};\r\n\r\n}();\r\n\r\n// File:src/extras/helpers/EdgesHelper.js\r\n\r\n/**\r\n * @author WestLangley / http://github.com/WestLangley\r\n */\r\n\r\nTHREE.EdgesHelper = function ( object, hex ) {\r\n\r\n\tvar color = ( hex !== undefined ) ? hex : 0xffffff;\r\n\r\n\tvar edge = [ 0, 0 ], hash = {};\r\n\tvar sortFunction = function ( a, b ) { return a - b };\r\n\r\n\tvar keys = [ 'a', 'b', 'c' ];\r\n\tvar geometry = new THREE.BufferGeometry();\r\n\r\n\tvar geometry2 = object.geometry.clone();\r\n\r\n\tgeometry2.mergeVertices();\r\n\tgeometry2.computeFaceNormals();\r\n\r\n\tvar vertices = geometry2.vertices;\r\n\tvar faces = geometry2.faces;\r\n\tvar numEdges = 0;\r\n\r\n\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\r\n\r\n\t\tvar face = faces[ i ];\r\n\r\n\t\tfor ( var j = 0; j < 3; j ++ ) {\r\n\r\n\t\t\tedge[ 0 ] = face[ keys[ j ] ];\r\n\t\t\tedge[ 1 ] = face[ keys[ ( j + 1 ) % 3 ] ];\r\n\t\t\tedge.sort( sortFunction );\r\n\r\n\t\t\tvar key = edge.toString();\r\n\r\n\t\t\tif ( hash[ key ] === undefined ) {\r\n\r\n\t\t\t\thash[ key ] = { vert1: edge[ 0 ], vert2: edge[ 1 ], face1: i, face2: undefined };\r\n\t\t\t\tnumEdges ++;\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\thash[ key ].face2 = i;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tvar coords = new Float32Array( numEdges * 2 * 3 );\r\n\r\n\tvar index = 0;\r\n\r\n\tfor ( var key in hash ) {\r\n\r\n\t\tvar h = hash[ key ];\r\n\r\n\t\tif ( h.face2 === undefined || faces[ h.face1 ].normal.dot( faces[ h.face2 ].normal ) < 0.9999 ) { // hardwired const OK\r\n\r\n\t\t\tvar vertex = vertices[ h.vert1 ];\r\n\t\t\tcoords[ index ++ ] = vertex.x;\r\n\t\t\tcoords[ index ++ ] = vertex.y;\r\n\t\t\tcoords[ index ++ ] = vertex.z;\r\n\r\n\t\t\tvertex = vertices[ h.vert2 ];\r\n\t\t\tcoords[ index ++ ] = vertex.x;\r\n\t\t\tcoords[ index ++ ] = vertex.y;\r\n\t\t\tcoords[ index ++ ] = vertex.z;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tgeometry.addAttribute( 'position', new THREE.BufferAttribute( coords, 3 ) );\r\n\r\n\tTHREE.Line.call( this, geometry, new THREE.LineBasicMaterial( { color: color } ), THREE.LinePieces );\r\n\r\n\tthis.matrix = object.matrixWorld;\r\n\tthis.matrixAutoUpdate = false;\r\n\r\n};\r\n\r\nTHREE.EdgesHelper.prototype = Object.create( THREE.Line.prototype );\r\n\r\n// File:src/extras/helpers/FaceNormalsHelper.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author WestLangley / http://github.com/WestLangley\r\n*/\r\n\r\nTHREE.FaceNormalsHelper = function ( object, size, hex, linewidth ) {\r\n\r\n\tthis.object = object;\r\n\r\n\tthis.size = ( size !== undefined ) ? size : 1;\r\n\r\n\tvar color = ( hex !== undefined ) ? hex : 0xffff00;\r\n\r\n\tvar width = ( linewidth !== undefined ) ? linewidth : 1;\r\n\r\n\tvar geometry = new THREE.Geometry();\r\n\r\n\tvar faces = this.object.geometry.faces;\r\n\r\n\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\r\n\r\n\t\tgeometry.vertices.push( new THREE.Vector3(), new THREE.Vector3() );\r\n\r\n\t}\r\n\r\n\tTHREE.Line.call( this, geometry, new THREE.LineBasicMaterial( { color: color, linewidth: width } ), THREE.LinePieces );\r\n\r\n\tthis.matrixAutoUpdate = false;\r\n\r\n\tthis.normalMatrix = new THREE.Matrix3();\r\n\r\n\tthis.update();\r\n\r\n};\r\n\r\nTHREE.FaceNormalsHelper.prototype = Object.create( THREE.Line.prototype );\r\n\r\nTHREE.FaceNormalsHelper.prototype.update = function () {\r\n\r\n\tvar vertices = this.geometry.vertices;\r\n\r\n\tvar object = this.object;\r\n\tvar objectVertices = object.geometry.vertices;\r\n\tvar objectFaces = object.geometry.faces;\r\n\tvar objectWorldMatrix = object.matrixWorld;\r\n\r\n\tobject.updateMatrixWorld( true );\r\n\r\n\tthis.normalMatrix.getNormalMatrix( objectWorldMatrix );\r\n\r\n\tfor ( var i = 0, i2 = 0, l = objectFaces.length; i < l; i ++, i2 += 2 ) {\r\n\r\n\t\tvar face = objectFaces[ i ];\r\n\r\n\t\tvertices[ i2 ].copy( objectVertices[ face.a ] )\r\n\t\t\t.add( objectVertices[ face.b ] )\r\n\t\t\t.add( objectVertices[ face.c ] )\r\n\t\t\t.divideScalar( 3 )\r\n\t\t\t.applyMatrix4( objectWorldMatrix );\r\n\r\n\t\tvertices[ i2 + 1 ].copy( face.normal )\r\n\t\t\t.applyMatrix3( this.normalMatrix )\r\n\t\t\t.normalize()\r\n\t\t\t.multiplyScalar( this.size )\r\n\t\t\t.add( vertices[ i2 ] );\r\n\r\n\t}\r\n\r\n\tthis.geometry.verticesNeedUpdate = true;\r\n\r\n\treturn this;\r\n\r\n};\r\n\r\n\r\n// File:src/extras/helpers/GridHelper.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.GridHelper = function ( size, step ) {\r\n\r\n\tvar geometry = new THREE.Geometry();\r\n\tvar material = new THREE.LineBasicMaterial( { vertexColors: THREE.VertexColors } );\r\n\r\n\tthis.color1 = new THREE.Color( 0x444444 );\r\n\tthis.color2 = new THREE.Color( 0x888888 );\r\n\r\n\tfor ( var i = - size; i <= size; i += step ) {\r\n\r\n\t\tgeometry.vertices.push(\r\n\t\t\tnew THREE.Vector3( - size, 0, i ), new THREE.Vector3( size, 0, i ),\r\n\t\t\tnew THREE.Vector3( i, 0, - size ), new THREE.Vector3( i, 0, size )\r\n\t\t);\r\n\r\n\t\tvar color = i === 0 ? this.color1 : this.color2;\r\n\r\n\t\tgeometry.colors.push( color, color, color, color );\r\n\r\n\t}\r\n\r\n\tTHREE.Line.call( this, geometry, material, THREE.LinePieces );\r\n\r\n};\r\n\r\nTHREE.GridHelper.prototype = Object.create( THREE.Line.prototype );\r\n\r\nTHREE.GridHelper.prototype.setColors = function( colorCenterLine, colorGrid ) {\r\n\r\n\tthis.color1.set( colorCenterLine );\r\n\tthis.color2.set( colorGrid );\r\n\r\n\tthis.geometry.colorsNeedUpdate = true;\r\n\r\n}\r\n\r\n// File:src/extras/helpers/HemisphereLightHelper.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.HemisphereLightHelper = function ( light, sphereSize, arrowLength, domeSize ) {\r\n\r\n\tTHREE.Object3D.call( this );\r\n\r\n\tthis.light = light;\r\n\tthis.light.updateMatrixWorld();\r\n\r\n\tthis.matrix = light.matrixWorld;\r\n\tthis.matrixAutoUpdate = false;\r\n\r\n\tthis.colors = [ new THREE.Color(), new THREE.Color() ];\r\n\r\n\tvar geometry = new THREE.SphereGeometry( sphereSize, 4, 2 );\r\n\tgeometry.applyMatrix( new THREE.Matrix4().makeRotationX( - Math.PI / 2 ) );\r\n\r\n\tfor ( var i = 0, il = 8; i < il; i ++ ) {\r\n\r\n\t\tgeometry.faces[ i ].color = this.colors[ i < 4 ? 0 : 1 ];\r\n\r\n\t}\r\n\r\n\tvar material = new THREE.MeshBasicMaterial( { vertexColors: THREE.FaceColors, wireframe: true } );\r\n\r\n\tthis.lightSphere = new THREE.Mesh( geometry, material );\r\n\tthis.add( this.lightSphere );\r\n\r\n\tthis.update();\r\n\r\n};\r\n\r\nTHREE.HemisphereLightHelper.prototype = Object.create( THREE.Object3D.prototype );\r\n\r\nTHREE.HemisphereLightHelper.prototype.dispose = function () {\r\n\tthis.lightSphere.geometry.dispose();\r\n\tthis.lightSphere.material.dispose();\r\n};\r\n\r\nTHREE.HemisphereLightHelper.prototype.update = function () {\r\n\r\n\tvar vector = new THREE.Vector3();\r\n\r\n\treturn function () {\r\n\r\n\t\tthis.colors[ 0 ].copy( this.light.color ).multiplyScalar( this.light.intensity );\r\n\t\tthis.colors[ 1 ].copy( this.light.groundColor ).multiplyScalar( this.light.intensity );\r\n\r\n\t\tthis.lightSphere.lookAt( vector.setFromMatrixPosition( this.light.matrixWorld ).negate() );\r\n\t\tthis.lightSphere.geometry.colorsNeedUpdate = true;\r\n\r\n\t}\r\n\r\n}();\r\n\r\n// File:src/extras/helpers/PointLightHelper.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.PointLightHelper = function ( light, sphereSize ) {\r\n\r\n\tthis.light = light;\r\n\tthis.light.updateMatrixWorld();\r\n\r\n\tvar geometry = new THREE.SphereGeometry( sphereSize, 4, 2 );\r\n\tvar material = new THREE.MeshBasicMaterial( { wireframe: true, fog: false } );\r\n\tmaterial.color.copy( this.light.color ).multiplyScalar( this.light.intensity );\r\n\r\n\tTHREE.Mesh.call( this, geometry, material );\r\n\r\n\tthis.matrix = this.light.matrixWorld;\r\n\tthis.matrixAutoUpdate = false;\r\n\r\n\t/*\r\n\tvar distanceGeometry = new THREE.IcosahedronGeometry( 1, 2 );\r\n\tvar distanceMaterial = new THREE.MeshBasicMaterial( { color: hexColor, fog: false, wireframe: true, opacity: 0.1, transparent: true } );\r\n\r\n\tthis.lightSphere = new THREE.Mesh( bulbGeometry, bulbMaterial );\r\n\tthis.lightDistance = new THREE.Mesh( distanceGeometry, distanceMaterial );\r\n\r\n\tvar d = light.distance;\r\n\r\n\tif ( d === 0.0 ) {\r\n\r\n\t\tthis.lightDistance.visible = false;\r\n\r\n\t} else {\r\n\r\n\t\tthis.lightDistance.scale.set( d, d, d );\r\n\r\n\t}\r\n\r\n\tthis.add( this.lightDistance );\r\n\t*/\r\n\r\n};\r\n\r\nTHREE.PointLightHelper.prototype = Object.create( THREE.Mesh.prototype );\r\n\r\nTHREE.PointLightHelper.prototype.dispose = function () {\r\n\r\n\tthis.geometry.dispose();\r\n\tthis.material.dispose();\r\n};\r\n\r\nTHREE.PointLightHelper.prototype.update = function () {\r\n\r\n\tthis.material.color.copy( this.light.color ).multiplyScalar( this.light.intensity );\r\n\r\n\t/*\r\n\tvar d = this.light.distance;\r\n\r\n\tif ( d === 0.0 ) {\r\n\r\n\t\tthis.lightDistance.visible = false;\r\n\r\n\t} else {\r\n\r\n\t\tthis.lightDistance.visible = true;\r\n\t\tthis.lightDistance.scale.set( d, d, d );\r\n\r\n\t}\r\n\t*/\r\n\r\n};\r\n\r\n// File:src/extras/helpers/SkeletonHelper.js\r\n\r\n/**\r\n * @author Sean Griffin / http://twitter.com/sgrif\r\n * @author Michael Guerrero / http://realitymeltdown.com\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author ikerr / http://verold.com\r\n */\r\n\r\nTHREE.SkeletonHelper = function ( object ) {\r\n\r\n\tthis.bones = this.getBoneList( object );\r\n\r\n\tvar geometry = new THREE.Geometry();\r\n\r\n\tfor ( var i = 0; i < this.bones.length; i ++ ) {\r\n\r\n\t\tvar bone = this.bones[ i ];\r\n\r\n\t\tif ( bone.parent instanceof THREE.Bone ) {\r\n\r\n\t\t\tgeometry.vertices.push( new THREE.Vector3() );\r\n\t\t\tgeometry.vertices.push( new THREE.Vector3() );\r\n\t\t\tgeometry.colors.push( new THREE.Color( 0, 0, 1 ) );\r\n\t\t\tgeometry.colors.push( new THREE.Color( 0, 1, 0 ) );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tvar material = new THREE.LineBasicMaterial( { vertexColors: THREE.VertexColors, depthTest: false, depthWrite: false, transparent: true } );\r\n\r\n\tTHREE.Line.call( this, geometry, material, THREE.LinePieces );\r\n\r\n\tthis.root = object;\r\n\r\n\tthis.matrix = object.matrixWorld;\r\n\tthis.matrixAutoUpdate = false;\r\n\r\n\tthis.update();\r\n\r\n};\r\n\r\n\r\nTHREE.SkeletonHelper.prototype = Object.create( THREE.Line.prototype );\r\n\r\nTHREE.SkeletonHelper.prototype.getBoneList = function( object ) {\r\n\r\n\tvar boneList = [];\r\n\r\n\tif ( object instanceof THREE.Bone ) {\r\n\r\n\t\tboneList.push( object );\r\n\r\n\t}\r\n\r\n\tfor ( var i = 0; i < object.children.length; i ++ ) {\r\n\r\n\t\tboneList.push.apply( boneList, this.getBoneList( object.children[ i ] ) );\r\n\r\n\t}\r\n\r\n\treturn boneList;\r\n\r\n};\r\n\r\nTHREE.SkeletonHelper.prototype.update = function () {\r\n\r\n\tvar geometry = this.geometry;\r\n\r\n\tvar matrixWorldInv = new THREE.Matrix4().getInverse( this.root.matrixWorld );\r\n\r\n\tvar boneMatrix = new THREE.Matrix4();\r\n\r\n\tvar j = 0;\r\n\r\n\tfor ( var i = 0; i < this.bones.length; i ++ ) {\r\n\r\n\t\tvar bone = this.bones[ i ];\r\n\r\n\t\tif ( bone.parent instanceof THREE.Bone ) {\r\n\r\n\t\t\tboneMatrix.multiplyMatrices( matrixWorldInv, bone.matrixWorld );\r\n\t\t\tgeometry.vertices[ j ].setFromMatrixPosition( boneMatrix );\r\n\r\n\t\t\tboneMatrix.multiplyMatrices( matrixWorldInv, bone.parent.matrixWorld );\r\n\t\t\tgeometry.vertices[ j + 1 ].setFromMatrixPosition( boneMatrix );\r\n\r\n\t\t\tj += 2;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tgeometry.verticesNeedUpdate = true;\r\n\r\n\tgeometry.computeBoundingSphere();\r\n\r\n};\r\n\r\n// File:src/extras/helpers/SpotLightHelper.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author WestLangley / http://github.com/WestLangley\r\n*/\r\n\r\nTHREE.SpotLightHelper = function ( light ) {\r\n\r\n\tTHREE.Object3D.call( this );\r\n\r\n\tthis.light = light;\r\n\tthis.light.updateMatrixWorld();\r\n\r\n\tthis.matrix = light.matrixWorld;\r\n\tthis.matrixAutoUpdate = false;\r\n\r\n\tvar geometry = new THREE.CylinderGeometry( 0, 1, 1, 8, 1, true );\r\n\r\n\tgeometry.applyMatrix( new THREE.Matrix4().makeTranslation( 0, - 0.5, 0 ) );\r\n\tgeometry.applyMatrix( new THREE.Matrix4().makeRotationX( - Math.PI / 2 ) );\r\n\r\n\tvar material = new THREE.MeshBasicMaterial( { wireframe: true, fog: false } );\r\n\r\n\tthis.cone = new THREE.Mesh( geometry, material );\r\n\tthis.add( this.cone );\r\n\r\n\tthis.update();\r\n\r\n};\r\n\r\nTHREE.SpotLightHelper.prototype = Object.create( THREE.Object3D.prototype );\r\n\r\nTHREE.SpotLightHelper.prototype.dispose = function () {\r\n\tthis.cone.geometry.dispose();\r\n\tthis.cone.material.dispose();\r\n};\r\n\r\nTHREE.SpotLightHelper.prototype.update = function () {\r\n\r\n\tvar vector = new THREE.Vector3();\r\n\tvar vector2 = new THREE.Vector3();\r\n\r\n\treturn function () {\r\n\r\n\t\tvar coneLength = this.light.distance ? this.light.distance : 10000;\r\n\t\tvar coneWidth = coneLength * Math.tan( this.light.angle );\r\n\r\n\t\tthis.cone.scale.set( coneWidth, coneWidth, coneLength );\r\n\r\n\t\tvector.setFromMatrixPosition( this.light.matrixWorld );\r\n\t\tvector2.setFromMatrixPosition( this.light.target.matrixWorld );\r\n\r\n\t\tthis.cone.lookAt( vector2.sub( vector ) );\r\n\r\n\t\tthis.cone.material.color.copy( this.light.color ).multiplyScalar( this.light.intensity );\r\n\r\n\t};\r\n\r\n}();\r\n\r\n// File:src/extras/helpers/VertexNormalsHelper.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author WestLangley / http://github.com/WestLangley\r\n*/\r\n\r\nTHREE.VertexNormalsHelper = function ( object, size, hex, linewidth ) {\r\n\r\n\tthis.object = object;\r\n\r\n\tthis.size = ( size !== undefined ) ? size : 1;\r\n\r\n\tvar color = ( hex !== undefined ) ? hex : 0xff0000;\r\n\r\n\tvar width = ( linewidth !== undefined ) ? linewidth : 1;\r\n\r\n\tvar geometry = new THREE.Geometry();\r\n\r\n\tvar vertices = object.geometry.vertices;\r\n\r\n\tvar faces = object.geometry.faces;\r\n\r\n\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\r\n\r\n\t\tvar face = faces[ i ];\r\n\r\n\t\tfor ( var j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) {\r\n\r\n\t\t\tgeometry.vertices.push( new THREE.Vector3(), new THREE.Vector3() );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tTHREE.Line.call( this, geometry, new THREE.LineBasicMaterial( { color: color, linewidth: width } ), THREE.LinePieces );\r\n\r\n\tthis.matrixAutoUpdate = false;\r\n\r\n\tthis.normalMatrix = new THREE.Matrix3();\r\n\r\n\tthis.update();\r\n\r\n};\r\n\r\nTHREE.VertexNormalsHelper.prototype = Object.create( THREE.Line.prototype );\r\n\r\nTHREE.VertexNormalsHelper.prototype.update = ( function ( object ) {\r\n\r\n\tvar v1 = new THREE.Vector3();\r\n\r\n\treturn function( object ) {\r\n\r\n\t\tvar keys = [ 'a', 'b', 'c', 'd' ];\r\n\r\n\t\tthis.object.updateMatrixWorld( true );\r\n\r\n\t\tthis.normalMatrix.getNormalMatrix( this.object.matrixWorld );\r\n\r\n\t\tvar vertices = this.geometry.vertices;\r\n\r\n\t\tvar verts = this.object.geometry.vertices;\r\n\r\n\t\tvar faces = this.object.geometry.faces;\r\n\r\n\t\tvar worldMatrix = this.object.matrixWorld;\r\n\r\n\t\tvar idx = 0;\r\n\r\n\t\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\r\n\r\n\t\t\tvar face = faces[ i ];\r\n\r\n\t\t\tfor ( var j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) {\r\n\r\n\t\t\t\tvar vertexId = face[ keys[ j ] ];\r\n\t\t\t\tvar vertex = verts[ vertexId ];\r\n\r\n\t\t\t\tvar normal = face.vertexNormals[ j ];\r\n\r\n\t\t\t\tvertices[ idx ].copy( vertex ).applyMatrix4( worldMatrix );\r\n\r\n\t\t\t\tv1.copy( normal ).applyMatrix3( this.normalMatrix ).normalize().multiplyScalar( this.size );\r\n\r\n\t\t\t\tv1.add( vertices[ idx ] );\r\n\t\t\t\tidx = idx + 1;\r\n\r\n\t\t\t\tvertices[ idx ].copy( v1 );\r\n\t\t\t\tidx = idx + 1;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tthis.geometry.verticesNeedUpdate = true;\r\n\r\n\t\treturn this;\r\n\r\n\t}\r\n\r\n}());\r\n\r\n// File:src/extras/helpers/VertexTangentsHelper.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author WestLangley / http://github.com/WestLangley\r\n*/\r\n\r\nTHREE.VertexTangentsHelper = function ( object, size, hex, linewidth ) {\r\n\r\n\tthis.object = object;\r\n\r\n\tthis.size = ( size !== undefined ) ? size : 1;\r\n\r\n\tvar color = ( hex !== undefined ) ? hex : 0x0000ff;\r\n\r\n\tvar width = ( linewidth !== undefined ) ? linewidth : 1;\r\n\r\n\tvar geometry = new THREE.Geometry();\r\n\r\n\tvar vertices = object.geometry.vertices;\r\n\r\n\tvar faces = object.geometry.faces;\r\n\r\n\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\r\n\r\n\t\tvar face = faces[ i ];\r\n\r\n\t\tfor ( var j = 0, jl = face.vertexTangents.length; j < jl; j ++ ) {\r\n\r\n\t\t\tgeometry.vertices.push( new THREE.Vector3() );\r\n\t\t\tgeometry.vertices.push( new THREE.Vector3() );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tTHREE.Line.call( this, geometry, new THREE.LineBasicMaterial( { color: color, linewidth: width } ), THREE.LinePieces );\r\n\r\n\tthis.matrixAutoUpdate = false;\r\n\r\n\tthis.update();\r\n\r\n};\r\n\r\nTHREE.VertexTangentsHelper.prototype = Object.create( THREE.Line.prototype );\r\n\r\nTHREE.VertexTangentsHelper.prototype.update = ( function ( object ) {\r\n\r\n\tvar v1 = new THREE.Vector3();\r\n\r\n\treturn function( object ) {\r\n\r\n\t\tvar keys = [ 'a', 'b', 'c', 'd' ];\r\n\r\n\t\tthis.object.updateMatrixWorld( true );\r\n\r\n\t\tvar vertices = this.geometry.vertices;\r\n\r\n\t\tvar verts = this.object.geometry.vertices;\r\n\r\n\t\tvar faces = this.object.geometry.faces;\r\n\r\n\t\tvar worldMatrix = this.object.matrixWorld;\r\n\r\n\t\tvar idx = 0;\r\n\r\n\t\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\r\n\r\n\t\t\tvar face = faces[ i ];\r\n\r\n\t\t\tfor ( var j = 0, jl = face.vertexTangents.length; j < jl; j ++ ) {\r\n\r\n\t\t\t\tvar vertexId = face[ keys[ j ] ];\r\n\t\t\t\tvar vertex = verts[ vertexId ];\r\n\r\n\t\t\t\tvar tangent = face.vertexTangents[ j ];\r\n\r\n\t\t\t\tvertices[ idx ].copy( vertex ).applyMatrix4( worldMatrix );\r\n\r\n\t\t\t\tv1.copy( tangent ).transformDirection( worldMatrix ).multiplyScalar( this.size );\r\n\r\n\t\t\t\tv1.add( vertices[ idx ] );\r\n\t\t\t\tidx = idx + 1;\r\n\r\n\t\t\t\tvertices[ idx ].copy( v1 );\r\n\t\t\t\tidx = idx + 1;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tthis.geometry.verticesNeedUpdate = true;\r\n\r\n\t\treturn this;\r\n\r\n\t}\r\n\r\n}());\r\n\r\n// File:src/extras/helpers/WireframeHelper.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.WireframeHelper = function ( object, hex ) {\r\n\r\n\tvar color = ( hex !== undefined ) ? hex : 0xffffff;\r\n\r\n\tvar edge = [ 0, 0 ], hash = {};\r\n\tvar sortFunction = function ( a, b ) { return a - b };\r\n\r\n\tvar keys = [ 'a', 'b', 'c' ];\r\n\tvar geometry = new THREE.BufferGeometry();\r\n\r\n\tif ( object.geometry instanceof THREE.Geometry ) {\r\n\r\n\t\tvar vertices = object.geometry.vertices;\r\n\t\tvar faces = object.geometry.faces;\r\n\t\tvar numEdges = 0;\r\n\r\n\t\t// allocate maximal size\r\n\t\tvar edges = new Uint32Array( 6 * faces.length );\r\n\r\n\t\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\r\n\r\n\t\t\tvar face = faces[ i ];\r\n\r\n\t\t\tfor ( var j = 0; j < 3; j ++ ) {\r\n\r\n\t\t\t\tedge[ 0 ] = face[ keys[ j ] ];\r\n\t\t\t\tedge[ 1 ] = face[ keys[ ( j + 1 ) % 3 ] ];\r\n\t\t\t\tedge.sort( sortFunction );\r\n\r\n\t\t\t\tvar key = edge.toString();\r\n\r\n\t\t\t\tif ( hash[ key ] === undefined ) {\r\n\r\n\t\t\t\t\tedges[ 2 * numEdges ] = edge[ 0 ];\r\n\t\t\t\t\tedges[ 2 * numEdges + 1 ] = edge[ 1 ];\r\n\t\t\t\t\thash[ key ] = true;\r\n\t\t\t\t\tnumEdges ++;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tvar coords = new Float32Array( numEdges * 2 * 3 );\r\n\r\n\t\tfor ( var i = 0, l = numEdges; i < l; i ++ ) {\r\n\r\n\t\t\tfor ( var j = 0; j < 2; j ++ ) {\r\n\r\n\t\t\t\tvar vertex = vertices[ edges [ 2 * i + j] ];\r\n\r\n\t\t\t\tvar index = 6 * i + 3 * j;\r\n\t\t\t\tcoords[ index + 0 ] = vertex.x;\r\n\t\t\t\tcoords[ index + 1 ] = vertex.y;\r\n\t\t\t\tcoords[ index + 2 ] = vertex.z;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tgeometry.addAttribute( 'position', new THREE.BufferAttribute( coords, 3 ) );\r\n\r\n\t} else if ( object.geometry instanceof THREE.BufferGeometry ) {\r\n\r\n\t\tif ( object.geometry.attributes.index !== undefined ) { // Indexed BufferGeometry\r\n\r\n\t\t\tvar vertices = object.geometry.attributes.position.array;\r\n\t\t\tvar indices = object.geometry.attributes.index.array;\r\n\t\t\tvar drawcalls = object.geometry.drawcalls;\r\n\t\t\tvar numEdges = 0;\r\n\r\n\t\t\tif ( drawcalls.length === 0 ) {\r\n\r\n\t\t\t\tdrawcalls = [ { count : indices.length, index : 0, start : 0 } ];\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// allocate maximal size\r\n\t\t\tvar edges = new Uint32Array( 2 * indices.length );\r\n\r\n\t\t\tfor ( var o = 0, ol = drawcalls.length; o < ol; ++ o ) {\r\n\r\n\t\t\t\tvar start = drawcalls[ o ].start;\r\n\t\t\t\tvar count = drawcalls[ o ].count;\r\n\t\t\t\tvar index = drawcalls[ o ].index;\r\n\r\n\t\t\t\tfor ( var i = start, il = start + count; i < il; i += 3 ) {\r\n\r\n\t\t\t\t\tfor ( var j = 0; j < 3; j ++ ) {\r\n\r\n\t\t\t\t\t\tedge[ 0 ] = index + indices[ i + j ];\r\n\t\t\t\t\t\tedge[ 1 ] = index + indices[ i + ( j + 1 ) % 3 ];\r\n\t\t\t\t\t\tedge.sort( sortFunction );\r\n\r\n\t\t\t\t\t\tvar key = edge.toString();\r\n\r\n\t\t\t\t\t\tif ( hash[ key ] === undefined ) {\r\n\r\n\t\t\t\t\t\t\tedges[ 2 * numEdges ] = edge[ 0 ];\r\n\t\t\t\t\t\t\tedges[ 2 * numEdges + 1 ] = edge[ 1 ];\r\n\t\t\t\t\t\t\thash[ key ] = true;\r\n\t\t\t\t\t\t\tnumEdges ++;\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar coords = new Float32Array( numEdges * 2 * 3 );\r\n\r\n\t\t\tfor ( var i = 0, l = numEdges; i < l; i ++ ) {\r\n\r\n\t\t\t\tfor ( var j = 0; j < 2; j ++ ) {\r\n\r\n\t\t\t\t\tvar index = 6 * i + 3 * j;\r\n\t\t\t\t\tvar index2 = 3 * edges[ 2 * i + j];\r\n\t\t\t\t\tcoords[ index + 0 ] = vertices[ index2 ];\r\n\t\t\t\t\tcoords[ index + 1 ] = vertices[ index2 + 1 ];\r\n\t\t\t\t\tcoords[ index + 2 ] = vertices[ index2 + 2 ];\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tgeometry.addAttribute( 'position', new THREE.BufferAttribute( coords, 3 ) );\r\n\r\n\t\t} else { // non-indexed BufferGeometry\r\n\r\n\t\t\tvar vertices = object.geometry.attributes.position.array;\r\n\t\t\tvar numEdges = vertices.length / 3;\r\n\t\t\tvar numTris = numEdges / 3;\r\n\r\n\t\t\tvar coords = new Float32Array( numEdges * 2 * 3 );\r\n\r\n\t\t\tfor ( var i = 0, l = numTris; i < l; i ++ ) {\r\n\r\n\t\t\t\tfor ( var j = 0; j < 3; j ++ ) {\r\n\r\n\t\t\t\t\tvar index = 18 * i + 6 * j;\r\n\r\n\t\t\t\t\tvar index1 = 9 * i + 3 * j;\r\n\t\t\t\t\tcoords[ index + 0 ] = vertices[ index1 ];\r\n\t\t\t\t\tcoords[ index + 1 ] = vertices[ index1 + 1 ];\r\n\t\t\t\t\tcoords[ index + 2 ] = vertices[ index1 + 2 ];\r\n\r\n\t\t\t\t\tvar index2 = 9 * i + 3 * ( ( j + 1 ) % 3 );\r\n\t\t\t\t\tcoords[ index + 3 ] = vertices[ index2 ];\r\n\t\t\t\t\tcoords[ index + 4 ] = vertices[ index2 + 1 ];\r\n\t\t\t\t\tcoords[ index + 5 ] = vertices[ index2 + 2 ];\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tgeometry.addAttribute( 'position', new THREE.BufferAttribute( coords, 3 ) );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tTHREE.Line.call( this, geometry, new THREE.LineBasicMaterial( { color: color } ), THREE.LinePieces );\r\n\r\n\tthis.matrix = object.matrixWorld;\r\n\tthis.matrixAutoUpdate = false;\r\n\r\n};\r\n\r\nTHREE.WireframeHelper.prototype = Object.create( THREE.Line.prototype );\r\n\r\n// File:src/extras/objects/ImmediateRenderObject.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.ImmediateRenderObject = function () {\r\n\r\n\tTHREE.Object3D.call( this );\r\n\r\n\tthis.render = function ( renderCallback ) {};\r\n\r\n};\r\n\r\nTHREE.ImmediateRenderObject.prototype = Object.create( THREE.Object3D.prototype );\r\n\r\n// File:src/extras/objects/MorphBlendMesh.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.MorphBlendMesh = function( geometry, material ) {\r\n\r\n\tTHREE.Mesh.call( this, geometry, material );\r\n\r\n\tthis.animationsMap = {};\r\n\tthis.animationsList = [];\r\n\r\n\t// prepare default animation\r\n\t// (all frames played together in 1 second)\r\n\r\n\tvar numFrames = this.geometry.morphTargets.length;\r\n\r\n\tvar name = \"__default\";\r\n\r\n\tvar startFrame = 0;\r\n\tvar endFrame = numFrames - 1;\r\n\r\n\tvar fps = numFrames / 1;\r\n\r\n\tthis.createAnimation( name, startFrame, endFrame, fps );\r\n\tthis.setAnimationWeight( name, 1 );\r\n\r\n};\r\n\r\nTHREE.MorphBlendMesh.prototype = Object.create( THREE.Mesh.prototype );\r\n\r\nTHREE.MorphBlendMesh.prototype.createAnimation = function ( name, start, end, fps ) {\r\n\r\n\tvar animation = {\r\n\r\n\t\tstartFrame: start,\r\n\t\tendFrame: end,\r\n\r\n\t\tlength: end - start + 1,\r\n\r\n\t\tfps: fps,\r\n\t\tduration: ( end - start ) / fps,\r\n\r\n\t\tlastFrame: 0,\r\n\t\tcurrentFrame: 0,\r\n\r\n\t\tactive: false,\r\n\r\n\t\ttime: 0,\r\n\t\tdirection: 1,\r\n\t\tweight: 1,\r\n\r\n\t\tdirectionBackwards: false,\r\n\t\tmirroredLoop: false\r\n\r\n\t};\r\n\r\n\tthis.animationsMap[ name ] = animation;\r\n\tthis.animationsList.push( animation );\r\n\r\n};\r\n\r\nTHREE.MorphBlendMesh.prototype.autoCreateAnimations = function ( fps ) {\r\n\r\n\tvar pattern = /([a-z]+)_?(\\d+)/;\r\n\r\n\tvar firstAnimation, frameRanges = {};\r\n\r\n\tvar geometry = this.geometry;\r\n\r\n\tfor ( var i = 0, il = geometry.morphTargets.length; i < il; i ++ ) {\r\n\r\n\t\tvar morph = geometry.morphTargets[ i ];\r\n\t\tvar chunks = morph.name.match( pattern );\r\n\r\n\t\tif ( chunks && chunks.length > 1 ) {\r\n\r\n\t\t\tvar name = chunks[ 1 ];\r\n\t\t\tvar num = chunks[ 2 ];\r\n\r\n\t\t\tif ( ! frameRanges[ name ] ) frameRanges[ name ] = { start: Infinity, end: - Infinity };\r\n\r\n\t\t\tvar range = frameRanges[ name ];\r\n\r\n\t\t\tif ( i < range.start ) range.start = i;\r\n\t\t\tif ( i > range.end ) range.end = i;\r\n\r\n\t\t\tif ( ! firstAnimation ) firstAnimation = name;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfor ( var name in frameRanges ) {\r\n\r\n\t\tvar range = frameRanges[ name ];\r\n\t\tthis.createAnimation( name, range.start, range.end, fps );\r\n\r\n\t}\r\n\r\n\tthis.firstAnimation = firstAnimation;\r\n\r\n};\r\n\r\nTHREE.MorphBlendMesh.prototype.setAnimationDirectionForward = function ( name ) {\r\n\r\n\tvar animation = this.animationsMap[ name ];\r\n\r\n\tif ( animation ) {\r\n\r\n\t\tanimation.direction = 1;\r\n\t\tanimation.directionBackwards = false;\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.MorphBlendMesh.prototype.setAnimationDirectionBackward = function ( name ) {\r\n\r\n\tvar animation = this.animationsMap[ name ];\r\n\r\n\tif ( animation ) {\r\n\r\n\t\tanimation.direction = - 1;\r\n\t\tanimation.directionBackwards = true;\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.MorphBlendMesh.prototype.setAnimationFPS = function ( name, fps ) {\r\n\r\n\tvar animation = this.animationsMap[ name ];\r\n\r\n\tif ( animation ) {\r\n\r\n\t\tanimation.fps = fps;\r\n\t\tanimation.duration = ( animation.end - animation.start ) / animation.fps;\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.MorphBlendMesh.prototype.setAnimationDuration = function ( name, duration ) {\r\n\r\n\tvar animation = this.animationsMap[ name ];\r\n\r\n\tif ( animation ) {\r\n\r\n\t\tanimation.duration = duration;\r\n\t\tanimation.fps = ( animation.end - animation.start ) / animation.duration;\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.MorphBlendMesh.prototype.setAnimationWeight = function ( name, weight ) {\r\n\r\n\tvar animation = this.animationsMap[ name ];\r\n\r\n\tif ( animation ) {\r\n\r\n\t\tanimation.weight = weight;\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.MorphBlendMesh.prototype.setAnimationTime = function ( name, time ) {\r\n\r\n\tvar animation = this.animationsMap[ name ];\r\n\r\n\tif ( animation ) {\r\n\r\n\t\tanimation.time = time;\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.MorphBlendMesh.prototype.getAnimationTime = function ( name ) {\r\n\r\n\tvar time = 0;\r\n\r\n\tvar animation = this.animationsMap[ name ];\r\n\r\n\tif ( animation ) {\r\n\r\n\t\ttime = animation.time;\r\n\r\n\t}\r\n\r\n\treturn time;\r\n\r\n};\r\n\r\nTHREE.MorphBlendMesh.prototype.getAnimationDuration = function ( name ) {\r\n\r\n\tvar duration = - 1;\r\n\r\n\tvar animation = this.animationsMap[ name ];\r\n\r\n\tif ( animation ) {\r\n\r\n\t\tduration = animation.duration;\r\n\r\n\t}\r\n\r\n\treturn duration;\r\n\r\n};\r\n\r\nTHREE.MorphBlendMesh.prototype.playAnimation = function ( name ) {\r\n\r\n\tvar animation = this.animationsMap[ name ];\r\n\r\n\tif ( animation ) {\r\n\r\n\t\tanimation.time = 0;\r\n\t\tanimation.active = true;\r\n\r\n\t} else {\r\n\r\n\t\tconsole.warn( \"animation[\" + name + \"] undefined\" );\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.MorphBlendMesh.prototype.stopAnimation = function ( name ) {\r\n\r\n\tvar animation = this.animationsMap[ name ];\r\n\r\n\tif ( animation ) {\r\n\r\n\t\tanimation.active = false;\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.MorphBlendMesh.prototype.update = function ( delta ) {\r\n\r\n\tfor ( var i = 0, il = this.animationsList.length; i < il; i ++ ) {\r\n\r\n\t\tvar animation = this.animationsList[ i ];\r\n\r\n\t\tif ( ! animation.active ) continue;\r\n\r\n\t\tvar frameTime = animation.duration / animation.length;\r\n\r\n\t\tanimation.time += animation.direction * delta;\r\n\r\n\t\tif ( animation.mirroredLoop ) {\r\n\r\n\t\t\tif ( animation.time > animation.duration || animation.time < 0 ) {\r\n\r\n\t\t\t\tanimation.direction *= - 1;\r\n\r\n\t\t\t\tif ( animation.time > animation.duration ) {\r\n\r\n\t\t\t\t\tanimation.time = animation.duration;\r\n\t\t\t\t\tanimation.directionBackwards = true;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( animation.time < 0 ) {\r\n\r\n\t\t\t\t\tanimation.time = 0;\r\n\t\t\t\t\tanimation.directionBackwards = false;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\r\n\t\t\tanimation.time = animation.time % animation.duration;\r\n\r\n\t\t\tif ( animation.time < 0 ) animation.time += animation.duration;\r\n\r\n\t\t}\r\n\r\n\t\tvar keyframe = animation.startFrame + THREE.Math.clamp( Math.floor( animation.time / frameTime ), 0, animation.length - 1 );\r\n\t\tvar weight = animation.weight;\r\n\r\n\t\tif ( keyframe !== animation.currentFrame ) {\r\n\r\n\t\t\tthis.morphTargetInfluences[ animation.lastFrame ] = 0;\r\n\t\t\tthis.morphTargetInfluences[ animation.currentFrame ] = 1 * weight;\r\n\r\n\t\t\tthis.morphTargetInfluences[ keyframe ] = 0;\r\n\r\n\t\t\tanimation.lastFrame = animation.currentFrame;\r\n\t\t\tanimation.currentFrame = keyframe;\r\n\r\n\t\t}\r\n\r\n\t\tvar mix = ( animation.time % frameTime ) / frameTime;\r\n\r\n\t\tif ( animation.directionBackwards ) mix = 1 - mix;\r\n\r\n\t\tthis.morphTargetInfluences[ animation.currentFrame ] = mix * weight;\r\n\t\tthis.morphTargetInfluences[ animation.lastFrame ] = ( 1 - mix ) * weight;\r\n\r\n\t}\r\n\r\n};\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/assets/libs/three.js","import babelpolyfill from 'babel-polyfill'\r\nimport Vue from 'vue'\r\nimport App from './App'\r\nimport 'normalize.css'\r\nimport ElementUI from 'element-ui'\r\n// import 'element-ui/lib/theme-default/index.css'\r\nimport 'element-ui/lib/theme-chalk/index.css'\r\n//import './assets/theme/theme-green/index.css'\r\nimport VueRouter from 'vue-router'\r\nimport store from './vuex/store'\r\nimport Vuex from 'vuex'\r\nimport NProgress from 'nprogress'\r\nimport 'nprogress/nprogress.css'\r\nimport routes from './routes'\r\nimport Mock from './mock'\r\nMock.bootstrap();\r\nimport 'font-awesome/css/font-awesome.min.css'\r\nimport './assets/scss/main.scss';\r\n\r\nVue.use(ElementUI)\r\nVue.use(VueRouter)\r\nVue.use(Vuex)\r\n\r\nNProgress.configure({ showSpinner: false });\r\n\r\nconst router = new VueRouter({\r\n routes\r\n})\r\n\r\nrouter.beforeEach((to, from, next) => {\r\n NProgress.start();\r\n if (to.path == '/login') {\r\n sessionStorage.removeItem('user');\r\n }\r\n let user = JSON.parse(sessionStorage.getItem('user'));\r\n if (!user && to.path != '/login') {\r\n next({ path: '/login' })\r\n } else {\r\n next()\r\n }\r\n})\r\n\r\nrouter.afterEach(transition => {\r\nNProgress.done();\r\n});\r\n\r\nnew Vue({\r\n //el: '#app',\r\n //template: '',\r\n router,\r\n store,\r\n //components: { App }\r\n render: h => h(App)\r\n}).$mount('#app')\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/main.js","import Mock from 'mockjs';\r\nconst LoginUsers = [\r\n {\r\n id: 1,\r\n username: 'admin',\r\n password: '123456',\r\n avatar: 'https://avatars1.githubusercontent.com/u/16631463?v=4&s=460',\r\n name: 'Admin'\r\n }\r\n];\r\n\r\nconst Users = [];\r\nconst Categories = [];\r\nconst Maintains = [];\r\nconst Plans = [];\r\n\r\nfor (let i = 0; i < 86; i++) {\r\n Users.push(Mock.mock({\r\n id: Mock.Random.guid(),\r\n siteName: Mock.Random.cname(),\r\n deviceNo: Mock.Random.integer(0, 50),\r\n startTime: Mock.Random.date(),\r\n repeat: ['一次', '每天', '每周', '每季', '每年'],\r\n type: ['充电', '放电', '内阻'],\r\n state: Mock.Random.integer(0, 1)\r\n }));\r\n}\r\n\r\nfor (let i = 0; i < 5; i++) {\r\n Categories.push(Mock.mock({\r\n id: Mock.Random.guid(),\r\n name: Mock.Random.cname(),\r\n option: [],\r\n }));\r\n}\r\n\r\nfor (let i = 0; i < 20; i++) {\r\n Maintains.push(Mock.mock({\r\n strMaintainId: Mock.Random.id(),\r\n 'strTitle|1': ['空调新风设备维护', 'ups设备维护', '油机维护', '配电设备维护', '机架设备维护', '消防设备维护'],\r\n 'strContent|1': ['定期对设备进行维护', '定期对设备进行维护', '定期对设备进行维护', '定期对设备进行维护', '定期对设备进行维护', '定期对设备进行维护'],\r\n createTime: Mock.Random.date(),\r\n updateTime: Mock.Random.date(),\r\n cStartTime: Mock.Random.date(),\r\n cEndTime: Mock.Random.date(),\r\n uStartTime: Mock.Random.date(),\r\n uEndTime: Mock.Random.date()\r\n }));\r\n}\r\n\r\nfor (let i = 0; i < 21; i++) {\r\n Plans.push(Mock.mock({\r\n strPlanId: Mock.Random.guid(),\r\n strMaintainId: Mock.Random.guid(),\r\n executeTime: Mock.Random.datetime(),\r\n isCycle: Mock.Random.integer(0, 1),\r\n 'cycleDay|1': ['1', '2', '3', '4', '5'],\r\n 'executeHour|1': ['2', '4', '6', '8', '10'],\r\n 'executeMinute|1': ['5', '10', '15', '20', '30'],\r\n 'description|1': ['定期对设备进行维护,1个月一次', '定期对设备进行维护,1周一次', '定期对设备进行维护,1天一次', '定期对设备进行维护,两周一次', '定期对设备进行维护,12小时一次', '定期对设备进行维护,1季度一次'],\r\n equipmentCategory: Mock.Random.guid(),\r\n equipmentId: Mock.Random.guid(),\r\n 'strTitle|1': ['空调新风设备维护', 'ups设备维护', '油机维护', '配电设备维护', '机架设备维护', '消防设备维护'],\r\n 'strContent|1': ['定期对设备进行维护', '定期对设备进行维护', '定期对设备进行维护', '定期对设备进行维护', '定期对设备进行维护', '定期对设备进行维护'],\r\n cStartTime: Mock.Random.date(),\r\n cEndTime: Mock.Random.date(),\r\n uStartTime: Mock.Random.date(),\r\n uEndTime: Mock.Random.date()\r\n }));\r\n}\r\n\r\nexport { LoginUsers, Users, Categories, Maintains, Plans };\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/mock/data/db.js","import axios from 'axios';\r\nimport MockAdapter from 'axios-mock-adapter';\r\nimport { LoginUsers, Users, Categories, Maintains, Plans } from './data/db';\r\nlet _Users = Users;\r\nlet _Categories = Categories;\r\nlet _Maintains = Maintains;\r\nlet _Plans = Plans;\r\n\r\nexport default {\r\n /**\r\n * mock bootstrap\r\n */\r\n bootstrap() {\r\n let mock = new MockAdapter(axios);\r\n\r\n // mock success request\r\n mock.onGet('/success').reply(200, {\r\n msg: 'success'\r\n });\r\n\r\n // mock error request\r\n mock.onGet('/error').reply(500, {\r\n msg: 'failure'\r\n });\r\n\r\n //登录\r\n mock.onPost('/login').reply(config => {\r\n let {username, password} = JSON.parse(config.data);\r\n return new Promise((resolve, reject) => {\r\n let user = null;\r\n setTimeout(() => {\r\n let hasUser = LoginUsers.some(u => {\r\n if (u.username === username && u.password === password) {\r\n user = JSON.parse(JSON.stringify(u));\r\n user.password = undefined;\r\n return true;\r\n }\r\n });\r\n\r\n if (hasUser) {\r\n resolve([200, {code: 200, msg: '请求成功', user}]);\r\n } else {\r\n resolve([200, {code: 500, msg: '账号或密码错误'}]);\r\n }\r\n }, 1000);\r\n });\r\n });\r\n\r\n //获取用户列表\r\n mock.onGet('/user/list').reply(config => {\r\n let {curPage, pageSize, siteName} = config.params;\r\n let users = _Users.filter(user => {\r\n if (siteName && user.siteName.indexOf(siteName) == -1) return false;\r\n return true;\r\n });\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n resolve([200, {\r\n users: users\r\n }]);\r\n }, 1000);\r\n });\r\n });\r\n\r\n //获取用户列表(分页)\r\n mock.onGet('/user/listpage').reply(config => {\r\n let {curPage, pageSize, siteName} = config.params;\r\n let users = _Users.filter(user => {\r\n if (siteName && user.siteName.indexOf(siteName) == -1) return false;\r\n return true;\r\n });\r\n let total = users.length;\r\n users = users.filter((u, index) => index < pageSize * curPage && index >= pageSize * (curPage - 1));\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n resolve([200, {\r\n total: total,\r\n users: users\r\n }]);\r\n }, 1000);\r\n });\r\n });\r\n\r\n //删除用户\r\n mock.onGet('/user/remove').reply(config => {\r\n let {id} = config.params;\r\n _Users = _Users.filter(u => u.id !== id);\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n resolve([200, {\r\n code: 200,\r\n msg: '删除成功'\r\n }]);\r\n }, 500);\r\n });\r\n });\r\n\r\n //批量删除用户\r\n mock.onGet('/user/batchremove').reply(config => {\r\n let {ids} = config.params;\r\n ids = ids.split(',');\r\n _Users = _Users.filter(u => !ids.includes(u.id));\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n resolve([200, {\r\n code: 200,\r\n msg: '删除成功'\r\n }]);\r\n }, 500);\r\n });\r\n });\r\n\r\n //编辑用户\r\n mock.onGet('/user/edit').reply(config => {\r\n let {id, siteName, deviceNo, startTime, repeat, state, type} = config.params;\r\n _Users.some(u => {\r\n if (u.id === id) {\r\n u.siteName = siteName;\r\n u.deviceNo = deviceNo;\r\n u.startTime = startTime;\r\n u.repeat = repeat;\r\n u.state = state;\r\n u.type = type;\r\n return true;\r\n }\r\n });\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n resolve([200, {\r\n code: 200,\r\n msg: '编辑成功'\r\n }]);\r\n }, 500);\r\n });\r\n });\r\n\r\n //新增用户\r\n mock.onGet('/user/add').reply(config => {\r\n let {siteName, deviceNo, startTime, repeat, state, type} = config.params;\r\n _Users.push({\r\n siteName: siteName,\r\n deviceNo: deviceNo,\r\n startTime: startTime,\r\n repeat: repeat,\r\n state: state,\r\n type: type\r\n });\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n resolve([200, {\r\n code: 200,\r\n msg: '新增成功'\r\n }]);\r\n }, 500);\r\n });\r\n });\r\n\r\n //================= 类别 ===================\r\n\r\n //获取类别列表\r\n mock.onGet('/category/list').reply(config => {\r\n let {name} = config.params;\r\n let categories = _Categories.filter(category => {\r\n if (name && category.name.indexOf(name) == -1) return false;\r\n return true;\r\n });\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n resolve([200, {\r\n categories: categories\r\n }]);\r\n }, 1000);\r\n });\r\n });\r\n\r\n //获取类别列表(分页)\r\n mock.onGet('/category/listpage').reply(config => {\r\n let {page, name} = config.params;\r\n let categories = _Categories.filter(category => {\r\n if (name && category.name.indexOf(name) == -1) return false;\r\n return true;\r\n });\r\n let total = categories.length;\r\n categories = categories.filter((u, index) => index < 20 * page && index >= 20 * (page - 1));\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n resolve([200, {\r\n total: total,\r\n categories: categories\r\n }]);\r\n }, 1000);\r\n });\r\n });\r\n\r\n //删除类别\r\n mock.onGet('/category/remove').reply(config => {\r\n let {id} = config.params;\r\n _Categories = _Categories.filter(ca => ca.id !== id);\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n resolve([200, {\r\n code: 200,\r\n msg: '删除成功'\r\n }]);\r\n }, 500);\r\n });\r\n });\r\n\r\n //批量删除类别\r\n mock.onGet('/category/batchremove').reply(config => {\r\n let {ids} = config.params;\r\n ids = ids.split(',');\r\n _Categories = _Categories.filter(ca => !ids.includes(ca.id));\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n resolve([200, {\r\n code: 200,\r\n msg: '删除成功'\r\n }]);\r\n }, 500);\r\n });\r\n });\r\n\r\n //编辑类别\r\n mock.onGet('/category/edit').reply(config => {\r\n let {id, name, option} = config.params;\r\n _Categories.some(ca => {\r\n if (ca.id === id) {\r\n ca.name = name;\r\n ca.option = option;\r\n return true;\r\n }\r\n });\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n resolve([200, {\r\n code: 200,\r\n msg: '编辑成功'\r\n }]);\r\n }, 500);\r\n });\r\n });\r\n\r\n //新增类别\r\n mock.onGet('/category/add').reply(config => {\r\n let {name, option} = config.params;\r\n _Categories.push({\r\n name: name,\r\n option: option\r\n });\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n resolve([200, {\r\n code: 200,\r\n msg: '新增成功'\r\n }]);\r\n }, 500);\r\n });\r\n });\r\n\r\n //================= 维护项 ===================\r\n\r\n //获取维护项列表\r\n mock.onGet('/maintain/list').reply(config => {\r\n let {strTitle, strContent} = config.params;\r\n let maintains = _Maintains.filter(maintain => {\r\n if (strTitle && maintain.strTitle.indexOf(strTitle) == -1 && strContent && maintain.strContent.indexOf(strContent) == -1) return false;\r\n return true;\r\n });\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n resolve([200, {\r\n maintains: maintains\r\n }]);\r\n }, 1000);\r\n });\r\n });\r\n\r\n //获取维护项列表(分页)\r\n mock.onGet('/maintain/listpage').reply(config => {\r\n let {curPage, pageSize, strTitle, strContent} = config.params;\r\n let maintains = _Maintains.filter(maintain => {\r\n if ((strTitle && maintain.strTitle.indexOf(strTitle) == -1) || (strContent && maintain.strContent.indexOf(strContent) == -1)) return false;\r\n return true;\r\n });\r\n let total = maintains.length;\r\n maintains = maintains.filter((ma, index) => index < pageSize * curPage && index >= pageSize * (curPage - 1));\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n resolve([200, {\r\n total: total,\r\n maintains: maintains\r\n }]);\r\n }, 1000);\r\n });\r\n });\r\n\r\n //删除维护项\r\n mock.onGet('/maintain/remove').reply(config => {\r\n let { strMaintainId } = config.params;\r\n _Maintains = _Maintains.filter(maintain => maintain.strMaintainId !== strMaintainId);\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n resolve([200, {\r\n code: 200,\r\n msg: '删除成功'\r\n }]);\r\n }, 500);\r\n });\r\n });\r\n\r\n //批量删除维护项\r\n mock.onGet('/maintain/batchremove').reply(config => {\r\n let {ids} = config.params;\r\n ids = ids.split(',');\r\n _Maintains = _Maintains.filter(maintain => !ids.includes(maintain.strMaintainId));\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n resolve([200, {\r\n code: 200,\r\n msg: '删除成功'\r\n }]);\r\n }, 500);\r\n });\r\n });\r\n\r\n //编辑维护项\r\n mock.onGet('/maintain/edit').reply(config => {\r\n let { strMaintainId, strTitle, strContent, cStartTime, cEndTime, uStartTime, uEndTime } = config.params;\r\n _Maintains.some(maintain => {\r\n if (maintain.strMaintainId === strMaintainId) {\r\n maintain.strTitle = strTitle;\r\n maintain.strContent = strContent;\r\n maintain.cStartTime = cStartTime;\r\n maintain.cEndTime = cEndTime;\r\n maintain.uStartTime = uStartTime;\r\n maintain.uEndTime = uEndTime;\r\n return true;\r\n }\r\n });\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n resolve([200, {\r\n code: 200,\r\n msg: '编辑成功'\r\n }]);\r\n }, 500);\r\n });\r\n });\r\n\r\n //新增维护项\r\n mock.onGet('/maintain/add').reply(config => {\r\n let {strTitle, strContent, cStartTime, cEndTime, uStartTime, uEndTime} = config.params;\r\n _Maintains.push({\r\n strTitle: strTitle,\r\n strContent: strContent,\r\n cStartTime: cStartTime,\r\n cEndTime: cEndTime,\r\n uStartTime: uStartTime,\r\n uEndTime: uEndTime\r\n });\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n resolve([200, {\r\n code: 200,\r\n msg: '新增成功'\r\n }]);\r\n }, 500);\r\n });\r\n });\r\n\r\n //================= 维护计划 ===================\r\n\r\n //获取维护计划列表\r\n mock.onGet('/plan/list').reply(config => {\r\n let {curPage, pageSize, executeTime, isCycle} = config.params;\r\n let plans = _Plans.filter(plan => {\r\n // if (executeTime && plan.executeTime.indexOf(executeTime) == -1) return false;\r\n return true;\r\n });\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n resolve([200, {\r\n plans: plans\r\n }]);\r\n }, 1000);\r\n });\r\n });\r\n\r\n //获取维护计划列表(分页)\r\n mock.onGet('/plan/listpage').reply(config => {\r\n let {curPage, pageSize} = config.params;\r\n let plans = _Plans.filter(plan => {\r\n // if (executeTime && plan.executeTime != executeTime) return false;\r\n return true;\r\n });\r\n let total = plans.length;\r\n plans = plans.filter((ma, index) => index < pageSize * curPage && index >= pageSize * (curPage - 1));\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n resolve([200, {\r\n total: total,\r\n plans: plans\r\n }]);\r\n }, 1000);\r\n });\r\n });\r\n\r\n //删除维护计划\r\n mock.onGet('/plan/remove').reply(config => {\r\n let { strPlanId } = config.params;\r\n _Plans = _Plans.filter(plan => plan.strPlanId !== strPlanId);\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n resolve([200, {\r\n code: 200,\r\n msg: '删除成功'\r\n }]);\r\n }, 500);\r\n });\r\n });\r\n\r\n //批量删除维护计划\r\n mock.onGet('/plan/batchremove').reply(config => {\r\n let {ids} = config.params;\r\n ids = ids.split(',');\r\n _Plans = _Plans.filter(plan => !ids.includes(plan.strPlanId));\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n resolve([200, {\r\n code: 200,\r\n msg: '删除成功'\r\n }]);\r\n }, 500);\r\n });\r\n });\r\n\r\n //编辑维护计划\r\n mock.onGet('/plan/edit').reply(config => {\r\n let { strPlanId, strMaintainId, executeTime, isCycle, cycleDay, executeHour, executeMinute, description, equipmentCategory, equipmentId } = config.params;\r\n _Plans.some(plan => {\r\n if (plan.strPlanId === strPlanId) {\r\n plan.strMaintainId = strMaintainId;\r\n plan.executeTime = executeTime;\r\n plan.isCycle = isCycle;\r\n plan.cycleDay = cycleDay;\r\n plan.executeHour = executeHour;\r\n plan.executeMinute = executeMinute;\r\n plan.description = description;\r\n plan.equipmentCategory = equipmentCategory;\r\n plan.equipmentId = equipmentId;\r\n // plan.strTitle = strTitle;\r\n // plan.strContent = strContent;\r\n // plan.cStartTime = cStartTime;\r\n // plan.cEndTime = cEndTime;\r\n // plan.uStartTime = uStartTime;\r\n // plan.uEndTime = uEndTime;\r\n return true;\r\n }\r\n });\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n resolve([200, {\r\n code: 200,\r\n msg: '编辑成功'\r\n }]);\r\n }, 500);\r\n });\r\n });\r\n\r\n //新增维护计划\r\n mock.onGet('/plan/add').reply(config => {\r\n let { strPlanId, strMaintainId, executeTime, isCycle, cycleDay, executeHour, executeMinute, description, equipmentCategory, equipmentId } = config.params;\r\n _Plans.push({\r\n strMaintainId: strMaintainId,\r\n executeTime: executeTime,\r\n isCycle: isCycle,\r\n cycleDay: cycleDay,\r\n executeHour: executeHour,\r\n executeMinute: executeMinute,\r\n description: description,\r\n equipmentCategory: equipmentCategory,\r\n equipmentId: equipmentId\r\n // strTitle: strTitle,\r\n // strContent: strContent,\r\n // cStartTime: cStartTime,\r\n // cEndTime: cEndTime,\r\n // uStartTime: uStartTime,\r\n // uEndTime: uEndTime\r\n });\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n resolve([200, {\r\n code: 200,\r\n msg: '新增成功'\r\n }]);\r\n }, 500);\r\n });\r\n });\r\n\r\n }\r\n};\n\n\n// WEBPACK FOOTER //\n// ./src/mock/mock.js","//test\r\nexport const increment = ({commit}) => {\r\n commit('INCREMENT')\r\n}\r\nexport const decrement = ({commit}) => {\r\n commit('DECREMENT')\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/vuex/actions.js","//test\r\nexport const getCount = state => {\r\n return state.count\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/vuex/getters.js","import axios from 'axios';\r\nimport * as url from './urlConfig'\r\n\r\nexport const requestLogin = params => { return axios.post(url.login, params).then(res => res.data); };\r\n\r\nexport const getUserList = params => { return axios.get(url.userList, { params: params }); };\r\n\r\nexport const getUserListPage = params => { return axios.get(url.userListpage, { params: params }); };\r\n\r\nexport const removeUser = params => { return axios.get(url.userRemove, { params: params }); };\r\n\r\nexport const batchRemoveUser = params => { return axios.get(url.userBatchremove, { params: params }); };\r\n\r\nexport const editUser = params => { return axios.get(url.userEdit, { params: params }); };\r\n\r\nexport const addUser = params => { return axios.get(url.userAdd, { params: params }); };\r\n\r\n\r\n//category\r\nexport const getCategoryList = params => { return axios.get(url.categoryList, { params: params }); };\r\n\r\nexport const getCategoryListPage = params => { return axios.get(url.categoryListpage, { params: params }); };\r\n\r\nexport const removeCategory = params => { return axios.get(url.categoryRemove, { params: params }); };\r\n\r\nexport const batchRemoveCategory = params => { return axios.get(url.categoryBatchremove, { params: params }); };\r\n\r\nexport const editCategory = params => { return axios.get(url.categoryEdit, { params: params }); };\r\n\r\nexport const addCategory = params => { return axios.get(url.categoryAdd, { params: params }); };\r\n\r\n//maintain\r\nexport const getMaintainList = params => { return axios.get(url.maintainList, { params: params }); };\r\n\r\nexport const getMaintainListPage = params => { return axios.get(url.maintainListpage, { params: params }); };\r\n\r\nexport const removeMaintain = params => { return axios.get(url.maintainRemove, { params: params }); };\r\n\r\nexport const batchRemoveMaintain = params => { return axios.get(url.maintainBatchremove, { params: params }); };\r\n\r\nexport const editMaintain = params => { return axios.get(url.maintainEdit, { params: params }); };\r\n\r\nexport const addMaintain = params => { return axios.get(url.maintainAdd, { params: params }); };\r\n\r\n//plan\r\nexport const getPlanList = params => { return axios.get(url.planList, { params: params }); };\r\n\r\nexport const getPlanListPage = params => { return axios.get(url.planListpage, { params: params }); };\r\n\r\nexport const removePlan = params => { return axios.get(url.planRemove, { params: params }); };\r\n\r\nexport const batchRemovePlan = params => { return axios.get(url.planBatchremove, { params: params }); };\r\n\r\nexport const editPlan = params => { return axios.get(url.planEdit, { params: params }); };\r\n\r\nexport const addPlan = params => { return axios.get(url.planAdd, { params: params }); };\n\n\n// WEBPACK FOOTER //\n// ./src/api/api.js"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/static/js/manifest.e7be8419dc1737cfadd9.js b/dist/static/js/manifest.e7be8419dc1737cfadd9.js deleted file mode 100644 index 1490299c58cf074d4b633a7c184c7ce3253ee9ac..0000000000000000000000000000000000000000 --- a/dist/static/js/manifest.e7be8419dc1737cfadd9.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}var r=window.webpackJsonp;window.webpackJsonp=function(t,c,i){for(var u,a,f,s=0,l=[];st.get("hoverLayerThreshold")&&!q.node&&i.traverse(function(e){e.isGroup||(e.useHoverLayer=!0)})}function y(e,t){var i=0;t.group.traverse(function(e){"group"===e.type||e.ignore||i++});var n=+e.get("progressive"),r=i>e.get("progressiveThreshold")&&n&&!q.node;r&&t.group.traverse(function(e){e.isGroup||(e.progressive=r?Math.floor(i++/n):-1,r&&e.stopAnimation(!0))});var o=e.get("blendMode")||null;t.group.traverse(function(e){e.isGroup||e.setStyle("blend",o)})}function b(e,t){var i=e.get("z"),n=e.get("zlevel");t.group.traverse(function(e){"group"!==e.type&&(null!=i&&(e.z=i),null!=n&&(e.zlevel=n))})}function x(e){var t=e._coordSysMgr;return K.extend(new ee(e),{getCoordinateSystems:K.bind(t.getCoordinateSystems,t),getComponentByElement:function(t){for(;t;){var i=t.__ecComponentInfo;if(null!=i)return e._model.getComponent(i.mainType,i.index);t=t.parent}}})}function T(e){function t(e,t){for(var n=0;n=0&&K.each(e,function(e){var r=e.coordinateSystem;if(r&&r.containPoint)i|=!!r.containPoint(t);else if("seriesModels"===n){var o=this._chartsMap[e.__viewId];o&&o.containPoint&&(i|=o.containPoint(t,e))}},this)},this),!!i},Se.getVisual=function(e,t){var i=this._model;e=ce.parseFinder(i,e,{defaultMainType:"series"});var n=e.seriesModel,r=n.getData(),o=e.hasOwnProperty("dataIndexInside")?e.dataIndexInside:e.hasOwnProperty("dataIndex")?r.indexOfRawIndex(e.dataIndex):null;return null!=o?r.getItemVisual(o,t):r.getVisual(t)},Se.getViewOfComponentModel=function(e){return this._componentsMap[e.__viewId]},Se.getViewOfSeriesModel=function(e){return this._chartsMap[e.__viewId]};var Ce={update:function(e){var t=this._model,i=this._api,n=this._coordSysMgr,r=this._zr;if(t){t.restoreData(),n.create(this._model,this._api),f.call(this,t,i),p.call(this,t),n.update(t,i),g.call(this,t,e),v.call(this,t,e);var o=t.get("backgroundColor")||"transparent",a=r.painter;if(a.isSingleCanvas&&a.isSingleCanvas())r.configLayer(0,{clearColor:o});else{if(!q.canvasSupported){var s=$.parse(o);o=$.stringify(s,"rgb"),0===s[3]&&(o="transparent")}o.colorStops||o.image?(r.configLayer(0,{clearColor:o}),this.__hasGradientOrPatternBg=!0,this._dom.style.background="transparent"):(this.__hasGradientOrPatternBg&&r.configLayer(0,{clearColor:null}),this.__hasGradientOrPatternBg=!1,this._dom.style.background=o)}pe(Oe,function(e){e(t,i)})}},updateView:function(e){var t=this._model;t&&(t.eachSeries(function(e){e.getData().clearAllVisual()}),g.call(this,t,e),h.call(this,"updateView",t,e))},updateVisual:function(e){var t=this._model;t&&(t.eachSeries(function(e){e.getData().clearAllVisual()}),g.call(this,t,e,!0),h.call(this,"updateVisual",t,e))},updateLayout:function(e){var t=this._model;t&&(m.call(this,t,e),h.call(this,"updateLayout",t,e))},prepareAndUpdate:function(e){var t=this._model;d.call(this,"component",t),d.call(this,"chart",t),Ce.update.call(this,e)}};Se.resize=function(e){this[xe]=!0,this._zr.resize(e);var t=this._model&&this._model.resetOption("media");Ce[t?"prepareAndUpdate":"update"].call(this),this._loadingFX&&this._loadingFX.resize(),this[xe]=!1;var i=e&&e.silent;c.call(this,i),u.call(this,i)},Se.showLoading=function(e,t){if(K.isObject(e)&&(t=e,e=""),e=e||"default",this.hideLoading(),Le[e]){var i=Le[e](this._api,t),n=this._zr;this._loadingFX=i,n.add(i)}},Se.hideLoading=function(){this._loadingFX&&this._zr.remove(this._loadingFX),this._loadingFX=null},Se.makeActionFromEvent=function(e){var t=K.extend({},e);return t.type=we[e.type],t},Se.dispatchAction=function(e,t){if(K.isObject(t)||(t={silent:!!t}),Pe[e.type]&&this._model){if(this[xe])return void this._pendingActions.push(e);l.call(this,e,t.silent),t.flush?this._zr.flush(!0):!1!==t.flush&&q.browser.weChat&&this._throttledZrFlush(),c.call(this,t.silent),u.call(this,t.silent)}},Se.on=n("on"),Se.off=n("off"),Se.one=n("one");var Ae=["click","dblclick","mouseover","mouseout","mousemove","mousedown","mouseup","globalout","contextmenu"];Se._initEvents=function(){pe(Ae,function(e){this._zr.on(e,function(t){var i,n=this.getModel(),r=t.target;if("globalout"===e)i={};else if(r&&null!=r.dataIndex){var o=r.dataModel||n.getSeriesByIndex(r.seriesIndex);i=o&&o.getDataParams(r.dataIndex,r.dataType)||{}}else r&&r.eventData&&(i=K.extend({},r.eventData));i&&(i.event=t,i.type=e,this.trigger(e,i))},this)},this),pe(we,function(e,t){this._messageCenter.on(t,function(e){this.trigger(t,e)},this)},this)},Se.isDisposed=function(){return this._disposed},Se.clear=function(){this.setOption({series:[]},!0)},Se.dispose=function(){if(!this._disposed){this._disposed=!0;var e=this._api,t=this._model;pe(this._componentsViews,function(i){i.dispose(t,e)}),pe(this._chartsViews,function(i){i.dispose(t,e)}),this._zr.dispose(),delete Be[this.id]}},K.mixin(o,Z);var Pe={},we={},Me=[],Re=[],Oe=[],De=[],Ie={},Le={},Be={},ke={},Fe=new Date-0,Ne=new Date-0,Ve="_echarts_instance_",ze={},Ue=C;F(2e3,de),R(ne),N("default",fe),I({type:"highlight",event:"highlight",update:"highlight"},K.noop),I({type:"downplay",event:"downplay",update:"downplay"},K.noop);var Ge={};t.version="3.8.5",t.dependencies=ge,t.PRIORITY=be,t.init=E,t.connect=S,t.disConnect=C,t.disconnect=Ue,t.dispose=A,t.getInstanceByDom=P,t.getInstanceById=w,t.registerTheme=M,t.registerPreprocessor=R,t.registerProcessor=O,t.registerPostUpdate=D,t.registerAction=I,t.registerCoordinateSystem=L,t.getCoordinateSystemDimensions=B,t.registerLayout=k,t.registerVisual=F,t.registerLoading=N,t.extendComponentModel=V,t.extendComponentView=z,t.extendSeriesModel=U,t.extendChartView=G,t.setCanvasCreator=H,t.registerMap=j,t.getMap=W,t.dataTool=Ge;var He=i(365);!function(){for(var e in He)He.hasOwnProperty(e)&&(t[e]=He[e])}()},function(e,t,i){function n(e){return q.extend(e)}function r(e,t){return X.extendFromString(e,t)}function o(e,t,i,n){var r=X.createFromString(e,t),o=r.getBoundingRect();return i&&("center"===n&&(i=s(i,o)),l(r,i)),r}function a(e,t,i){var n=new Z({style:{image:e,x:t.x,y:t.y,width:t.width,height:t.height},onload:function(e){if("center"===i){var r={width:e.width,height:e.height};n.setStyle(s(t,r))}}});return n}function s(e,t){var i,n=t.width/t.height,r=e.height*n;return r<=e.width?i=e.height:(r=e.width,i=r/n),{x:e.x+e.width/2-r/2,y:e.y+e.height/2-i/2,width:r,height:i}}function l(e,t){if(e.applyTransform){var i=e.getBoundingRect(),n=i.calculateTransform(t);e.applyTransform(n)}}function c(e){var t=e.shape,i=e.style.lineWidth;return pe(2*t.x1)===pe(2*t.x2)&&(t.x1=t.x2=h(t.x1,i,!0)),pe(2*t.y1)===pe(2*t.y2)&&(t.y1=t.y2=h(t.y1,i,!0)),e}function u(e){var t=e.shape,i=e.style.lineWidth,n=t.x,r=t.y,o=t.width,a=t.height;return t.x=h(t.x,i,!0),t.y=h(t.y,i,!0),t.width=Math.max(h(n+o,i,!1)-t.x,0===o?0:1),t.height=Math.max(h(r+a,i,!1)-t.y,0===a?0:1),e}function h(e,t,i){var n=pe(2*e);return(n+pe(t))%2==0?n/2:(n+(i?1:-1))/2}function d(e){return null!=e&&"none"!=e}function f(e){return"string"==typeof e?Y.lift(e,-.1):e}function p(e){if(e.__hoverStlDirty){var t=e.style.stroke,i=e.style.fill,n=e.__hoverStl;n.fill=n.fill||(d(i)?f(i):null),n.stroke=n.stroke||(d(t)?f(t):null);var r={};for(var o in n)null!=n[o]&&(r[o]=e.style[o]);e.__normalStl=r,e.__hoverStlDirty=!1}}function m(e){if(!e.__isHover){if(p(e),e.useHoverLayer)e.__zr&&e.__zr.addHover(e,e.__hoverStl);else{var t=e.style,i=t.insideRollbackOpt;i&&I(t),t.extendFrom(e.__hoverStl),i&&(D(t,t.insideOriginalTextPosition,i),null==t.textFill&&(t.textFill=i.autoColor)),e.dirty(!1),e.z2+=1}e.__isHover=!0}}function g(e){if(e.__isHover){var t=e.__normalStl;e.useHoverLayer?e.__zr&&e.__zr.removeHover(e):(t&&e.setStyle(t),e.z2-=1),e.__isHover=!1}}function v(e){"group"===e.type?e.traverse(function(e){"group"!==e.type&&m(e)}):m(e)}function _(e){"group"===e.type?e.traverse(function(e){"group"!==e.type&&g(e)}):g(e)}function y(e,t){e.__hoverStl=e.hoverStyle||t||{},e.__hoverStlDirty=!0,e.__isHover&&p(e)}function b(e){this.__hoverSilentOnTouch&&e.zrByTouch||!this.__isEmphasis&&v(this)}function x(e){this.__hoverSilentOnTouch&&e.zrByTouch||!this.__isEmphasis&&_(this)}function T(){this.__isEmphasis=!0,v(this)}function E(){this.__isEmphasis=!1,_(this)}function S(e,t,i){e.__hoverSilentOnTouch=i&&i.hoverSilentOnTouch,"group"===e.type?e.traverse(function(e){"group"!==e.type&&y(e,t)}):y(e,t),e.on("mouseover",b).on("mouseout",x),e.on("emphasis",T).on("normal",E)}function C(e,t,i,n,r,o,a){r=r||ve;var s=r.labelFetcher,l=r.labelDataIndex,c=r.labelDimIndex,u=i.getShallow("show"),h=n.getShallow("show"),d=u||h?W.retrieve2(s?s.getFormattedLabel(l,"normal",null,c):null,r.defaultText):null,f=u?d:null,p=h?W.retrieve2(s?s.getFormattedLabel(l,"emphasis",null,c):null,d):null;null==f&&null==p||(A(e,i,o,r),A(t,n,a,r,!0)),e.text=f,t.text=p}function A(e,t,i,n,r){return w(e,t,n,r),i&&W.extend(e,i),e.host&&e.host.dirty&&e.host.dirty(!1),e}function P(e,t,i){var n,r={isRectText:!0};!1===i?n=!0:r.autoColor=i,w(e,t,r,n),e.host&&e.host.dirty&&e.host.dirty(!1)}function w(e,t,i,n){if(i=i||ve,i.isRectText){var r=t.getShallow("position")||(n?null:"inside");"outside"===r&&(r="top"),e.textPosition=r,e.textOffset=t.getShallow("offset");var o=t.getShallow("rotate");null!=o&&(o*=Math.PI/180),e.textRotation=o,e.textDistance=W.retrieve2(t.getShallow("distance"),n?null:5)}var a,s=t.ecModel,l=s&&s.option.textStyle,c=M(t);if(c){a={};for(var u in c)if(c.hasOwnProperty(u)){var h=t.getModel(["rich",u]);R(a[u]={},h,l,i,n)}}return e.rich=a,R(e,t,l,i,n,!0),i.forceRich&&!i.textStyle&&(i.textStyle={}),e}function M(e){for(var t;e&&e!==e.ecModel;){var i=(e.option||ve).rich;if(i){t=t||{};for(var n in i)i.hasOwnProperty(n)&&(t[n]=1)}e=e.parentModel}return t}function R(e,t,i,n,r,o){if(i=!r&&i||ve,e.textFill=O(t.getShallow("color"),n)||i.color,e.textStroke=O(t.getShallow("textBorderColor"),n)||i.textBorderColor,e.textStrokeWidth=W.retrieve2(t.getShallow("textBorderWidth"),i.textBorderWidth),!r){if(o){var a=e.textPosition;e.insideRollback=D(e,a,n),e.insideOriginalTextPosition=a,e.insideRollbackOpt=n}null==e.textFill&&(e.textFill=n.autoColor)}e.fontStyle=t.getShallow("fontStyle")||i.fontStyle,e.fontWeight=t.getShallow("fontWeight")||i.fontWeight,e.fontSize=t.getShallow("fontSize")||i.fontSize,e.fontFamily=t.getShallow("fontFamily")||i.fontFamily,e.textAlign=t.getShallow("align"),e.textVerticalAlign=t.getShallow("verticalAlign")||t.getShallow("baseline"),e.textLineHeight=t.getShallow("lineHeight"),e.textWidth=t.getShallow("width"),e.textHeight=t.getShallow("height"),e.textTag=t.getShallow("tag"),o&&n.disableBox||(e.textBackgroundColor=O(t.getShallow("backgroundColor"),n),e.textPadding=t.getShallow("padding"),e.textBorderColor=O(t.getShallow("borderColor"),n),e.textBorderWidth=t.getShallow("borderWidth"),e.textBorderRadius=t.getShallow("borderRadius"),e.textBoxShadowColor=t.getShallow("shadowColor"),e.textBoxShadowBlur=t.getShallow("shadowBlur"),e.textBoxShadowOffsetX=t.getShallow("shadowOffsetX"),e.textBoxShadowOffsetY=t.getShallow("shadowOffsetY")),e.textShadowColor=t.getShallow("textShadowColor")||i.textShadowColor,e.textShadowBlur=t.getShallow("textShadowBlur")||i.textShadowBlur,e.textShadowOffsetX=t.getShallow("textShadowOffsetX")||i.textShadowOffsetX,e.textShadowOffsetY=t.getShallow("textShadowOffsetY")||i.textShadowOffsetY}function O(e,t){return"auto"!==e?e:t&&t.autoColor?t.autoColor:null}function D(e,t,i){var n,r=i.useInsideStyle;return null==e.textFill&&!1!==r&&(!0===r||i.isRectText&&t&&"string"==typeof t&&t.indexOf("inside")>=0)&&(n={textFill:null,textStroke:e.textStroke,textStrokeWidth:e.textStrokeWidth},e.textFill="#fff",null==e.textStroke&&(e.textStroke=i.autoColor,null==e.textStrokeWidth&&(e.textStrokeWidth=2))),n}function I(e){var t=e.insideRollback;t&&(e.textFill=t.textFill,e.textStroke=t.textStroke,e.textStrokeWidth=t.textStrokeWidth)}function L(e,t){var i=t||t.getModel("textStyle");return[e.fontStyle||i&&i.getShallow("fontStyle")||"",e.fontWeight||i&&i.getShallow("fontWeight")||"",(e.fontSize||i&&i.getShallow("fontSize")||12)+"px",e.fontFamily||i&&i.getShallow("fontFamily")||"sans-serif"].join(" ")}function B(e,t,i,n,r,o){if("function"==typeof r&&(o=r,r=null),n&&n.isAnimationEnabled()){var a=e?"Update":"",s=n.getShallow("animationDuration"+a),l=n.getShallow("animationEasing"+a),c=n.getShallow("animationDelay"+a);"function"==typeof c&&(c=c(r,n.getAnimationDelayParams?n.getAnimationDelayParams(t,r):null)),"function"==typeof s&&(s=s(r)),s>0?t.animateTo(i,s,c||0,l,o,!!o):(t.stopAnimation(),t.attr(i),o&&o())}else t.stopAnimation(),t.attr(i),o&&o()}function k(e,t,i,n,r){B(!0,e,t,i,n,r)}function F(e,t,i,n,r){B(!1,e,t,i,n,r)}function N(e,t){for(var i=K.identity([]);e&&e!==t;)K.mul(i,e.getLocalTransform(),i),e=e.parent;return i}function V(e,t,i){return t&&!W.isArrayLike(t)&&(t=Q.getLocalTransform(t)),i&&(t=K.invert([],t)),$.applyTransform([],e,t)}function z(e,t,i){var n=0===t[4]||0===t[5]||0===t[0]?1:Math.abs(2*t[4]/t[0]),r=0===t[4]||0===t[5]||0===t[2]?1:Math.abs(2*t[4]/t[2]),o=["left"===e?-n:"right"===e?n:0,"top"===e?-r:"bottom"===e?r:0];return o=V(o,t,i),Math.abs(o[0])>Math.abs(o[1])?o[0]>0?"right":"left":o[1]>0?"bottom":"top"}function U(e,t,i,n){function r(e){var t={position:$.clone(e.position),rotation:e.rotation};return e.shape&&(t.shape=W.extend({},e.shape)),t}if(e&&t){var o=function(e){var t={};return e.traverse(function(e){!e.isGroup&&e.anid&&(t[e.anid]=e)}),t}(e);t.traverse(function(e){if(!e.isGroup&&e.anid){var t=o[e.anid];if(t){var n=r(e);e.attr(r(t)),k(e,n,i,e.dataIndex)}}})}}function G(e,t){return W.map(e,function(e){var i=e[0];i=me(i,t.x),i=ge(i,t.x+t.width);var n=e[1];return n=me(n,t.y),n=ge(n,t.y+t.height),[i,n]})}function H(e,t){var i=me(e.x,t.x),n=ge(e.x+e.width,t.x+t.width),r=me(e.y,t.y),o=ge(e.y+e.height,t.y+t.height);if(n>=i&&o>=r)return{x:i,y:r,width:n-i,height:o-r}}function j(e,t,i){t=W.extend({rectHover:!0},t);var n=t.style={strokeNoScale:!0};if(i=i||{x:-1,y:-1,width:2,height:2},e)return 0===e.indexOf("image://")?(n.image=e.slice(8),W.defaults(n,i),new Z(t)):o(e.replace("path://",""),t,i,"center")}var W=i(0),X=i(1111),Y=i(66),K=i(45),$=i(12),q=i(25),Q=i(248),Z=i(130);t.Image=Z;var J=i(170);t.Group=J;var ee=i(131);t.Text=ee;var te=i(1098);t.Circle=te;var ie=i(1104);t.Sector=ie;var ne=i(1103);t.Ring=ne;var re=i(1100);t.Polygon=re;var oe=i(1101);t.Polyline=oe;var ae=i(1102);t.Rect=ae;var se=i(1099);t.Line=se;var le=i(1097);t.BezierCurve=le;var ce=i(1096);t.Arc=ce;var ue=i(1092);t.CompoundPath=ue;var he=i(389);t.LinearGradient=he;var de=i(1093);t.RadialGradient=de;var fe=i(18);t.BoundingRect=fe;var pe=Math.round,me=Math.max,ge=Math.min,ve={},_e=X.mergePath;t.extendShape=n,t.extendPath=r,t.makePath=o,t.makeImage=a,t.mergePath=_e,t.resizePath=l,t.subPixelOptimizeLine=c,t.subPixelOptimizeRect=u,t.subPixelOptimize=h,t.setHoverStyle=S,t.setLabelStyle=C,t.setTextStyle=A,t.setText=P,t.getFont=L,t.updateProps=k,t.initProps=F,t.getTransform=N,t.applyTransform=V,t.transformDirection=z,t.groupTransition=U,t.clipPointsByRect=G,t.clipRectByRect=H,t.createIcon=j},function(e,t,i){function n(e){return e.replace(/^\s+/,"").replace(/\s+$/,"")}function r(e,t,i,n){var r=t[1]-t[0],o=i[1]-i[0];if(0===r)return 0===o?i[0]:(i[0]+i[1])/2;if(n)if(r>0){if(e<=t[0])return i[0];if(e>=t[1])return i[1]}else{if(e>=t[0])return i[0];if(e<=t[1])return i[1]}else{if(e===t[0])return i[0];if(e===t[1])return i[1]}return(e-t[0])/r*o+i[0]}function o(e,t){switch(e){case"center":case"middle":e="50%";break;case"left":case"top":e="0%";break;case"right":case"bottom":e="100%"}return"string"==typeof e?n(e).match(/%$/)?parseFloat(e)/100*t:parseFloat(e):null==e?NaN:+e}function a(e,t,i){return null==t&&(t=10),t=Math.min(Math.max(0,t),20),e=(+e).toFixed(t),i?e:+e}function s(e){return e.sort(function(e,t){return e-t}),e}function l(e){if(e=+e,isNaN(e))return 0;for(var t=1,i=0;Math.round(e*t)/t!==e;)t*=10,i++;return i}function c(e){var t=e.toString(),i=t.indexOf("e");if(i>0){var n=+t.slice(i+1);return n<0?-n:0}var r=t.indexOf(".");return r<0?0:t.length-1-r}function u(e,t){var i=Math.log,n=Math.LN10,r=Math.floor(i(e[1]-e[0])/n),o=Math.round(i(Math.abs(t[1]-t[0]))/n),a=Math.min(Math.max(-r+o,0),20);return isFinite(a)?a:20}function h(e,t,i){if(!e[t])return 0;var n=b.reduce(e,function(e,t){return e+(isNaN(t)?0:t)},0);if(0===n)return 0;for(var r=Math.pow(10,i),o=b.map(e,function(e){return(isNaN(e)?0:e)/n*r*100}),a=100*r,s=b.map(o,function(e){return Math.floor(e)}),l=b.reduce(s,function(e,t){return e+t},0),c=b.map(o,function(e,t){return e-s[t]});lu&&(u=c[d],h=d);++s[h],c[h]=0,++l}return s[t]/r}function d(e){var t=2*Math.PI;return(e%t+t)%t}function f(e){return e>-x&&e=-20?+e.toFixed(n<0?-n:0):e}function _(e){function t(e,i,n){return e.interval[n]=0}var b=i(0),x=1e-4,T=/^(?:(\d{4})(?:[-\/](\d{1,2})(?:[-\/](\d{1,2})(?:[T ](\d{1,2})(?::(\d\d)(?::(\d\d)(?:[.,](\d+))?)?)?(Z|[\+\-]\d\d:?\d\d)?)?)?)?)?$/;t.linearMap=r,t.parsePercent=o,t.round=a,t.asc=s,t.getPrecision=l,t.getPrecisionSafe=c,t.getPixelPrecision=u,t.getPercentWithPrecision=h,t.MAX_SAFE_INTEGER=9007199254740991,t.remRadian=d,t.isRadianAroundZero=f,t.parseDate=p,t.quantity=m,t.nice=v,t.reformIntervals=_,t.isNumeric=y},function(e,t,i){var n=i(8);e.exports=function(e){if(!n(e))throw TypeError(e+" is not an object!");return e}},function(e,t){var i=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=i)},function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,t,i){(function(e){var i;"undefined"!=typeof window?i=window.__DEV__:void 0!==e&&(i=e.__DEV__),void 0===i&&(i=!0);var n=i;t.__DEV__=n}).call(t,i(37))},function(e,t,i){function n(e){return e instanceof Array?e:null==e?[]:[e]}function r(e,t){if(e)for(var i=e.emphasis=e.emphasis||{},n=e.normal=e.normal||{},r=0,o=t.length;r=i.length&&i.push({option:e})}}),i}function u(e){var t=y.createHashMap();E(e,function(e,i){var n=e.exist;n&&t.set(n.id,e)}),E(e,function(e,i){var n=e.option;y.assert(!n||null==n.id||!t.get(n.id)||t.get(n.id)===e,"id duplicates: "+(n&&n.id)),n&&null!=n.id&&t.set(n.id,e),!e.keyInfo&&(e.keyInfo={})}),E(e,function(e,i){var n=e.exist,r=e.option,o=e.keyInfo;if(S(r)){if(o.name=null!=r.name?r.name+"":n?n.name:"\0-",n)o.id=n.id;else if(null!=r.id)o.id=r.id+"";else{var a=0;do{o.id="\0"+o.name+"\0"+a++}while(t.get(o.id))}t.set(o.id,e)}})}function h(e){return S(e)&&e.id&&0===(e.id+"").indexOf("\0_ec_\0")}function d(e,t){function i(e,t,i){for(var r=0,o=e.length;rn||l.newline?(o=0,u=g,a+=s+i,s=f.height):s=Math.max(s,f.height)}else{var v=f.height+(m?-m.y+f.y:0);h=a+v,h>r||l.newline?(o+=s+i,a=0,h=v,s=f.width):s=Math.max(s,f.width)}l.newline||(d[0]=o,d[1]=a,"horizontal"===e?o=u+i:a=h+i)})}function r(e,t,i){var n=t.width,r=t.height,o=p(e.x,n),a=p(e.y,r),s=p(e.x2,n),l=p(e.y2,r);return(isNaN(o)||isNaN(parseFloat(e.x)))&&(o=0),(isNaN(s)||isNaN(parseFloat(e.x2)))&&(s=n),(isNaN(a)||isNaN(parseFloat(e.y)))&&(a=0),(isNaN(l)||isNaN(parseFloat(e.y2)))&&(l=r),i=m.normalizeCssArray(i||0),{width:Math.max(s-o-i[1]-i[3],0),height:Math.max(l-a-i[0]-i[2],0)}}function o(e,t,i){i=m.normalizeCssArray(i||0);var n=t.width,r=t.height,o=p(e.left,n),a=p(e.top,r),s=p(e.right,n),l=p(e.bottom,r),c=p(e.width,n),u=p(e.height,r),h=i[2]+i[0],f=i[1]+i[3],g=e.aspect;switch(isNaN(c)&&(c=n-s-f-o),isNaN(u)&&(u=r-l-h-a),null!=g&&(isNaN(c)&&isNaN(u)&&(g>n/r?c=.8*n:u=.8*r),isNaN(c)&&(c=g*u),isNaN(u)&&(u=c/g)),isNaN(o)&&(o=n-s-c-f),isNaN(a)&&(a=r-l-u-h),e.left||e.right){case"center":o=n/2-c/2-i[3];break;case"right":o=n-c-f}switch(e.top||e.bottom){case"middle":case"center":a=r/2-u/2-i[0];break;case"bottom":a=r-u-h}o=o||0,a=a||0,isNaN(c)&&(c=n-f-o-(s||0)),isNaN(u)&&(u=r-h-a-(l||0));var v=new d(o+i[3],a+i[0],c,u);return v.margin=i,v}function a(e,t,i,n,r){var a=!r||!r.hv||r.hv[0],s=!r||!r.hv||r.hv[1],l=r&&r.boundingMode||"all";if(a||s){var c;if("raw"===l)c="group"===e.type?new d(0,0,+t.width||0,+t.height||0):e.getBoundingRect();else if(c=e.getBoundingRect(),e.needLocalTransform()){var u=e.getLocalTransform();c=c.clone(),c.applyTransform(u)}t=o(h.defaults({width:c.width,height:c.height},t),i,n);var f=e.position,p=a?t.x-c.x:0,m=s?t.y-c.y:0;e.attr("position","raw"===l?[p,m]:[f[0]+p,f[1]+m])}}function s(e,t){return null!=e[_[t][0]]||null!=e[_[t][1]]&&null!=e[_[t][2]]}function l(e,t,i){function n(i,n){var a={},l=0,c={},u=0;if(g(i,function(t){c[t]=e[t]}),g(i,function(e){r(t,e)&&(a[e]=c[e]=t[e]),o(a,e)&&l++,o(c,e)&&u++}),s[n])return o(t,i[1])?c[i[2]]=null:o(t,i[2])&&(c[i[1]]=null),c;if(2!==u&&l){if(l>=2)return a;for(var h=0;h1?"."+e[1]:""))}function r(e,t){return e=(e||"").toLowerCase().replace(/-(.)/g,function(e,t){return t.toUpperCase()}),t&&e&&(e=e.charAt(0).toUpperCase()+e.slice(1)),e}function o(e){return String(e).replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function a(e,t,i){h.isArray(t)||(t=[t]);var n=t.length;if(!n)return"";for(var r=t[0].$vars||[],a=0;a':""}function c(e,t,i){"week"!==e&&"month"!==e&&"quarter"!==e&&"half-year"!==e&&"year"!==e||(e="MM-dd\nyyyy");var n=f.parseDate(t),r=i?"UTC":"",o=n["get"+r+"FullYear"](),a=n["get"+r+"Month"]()+1,s=n["get"+r+"Date"](),l=n["get"+r+"Hours"](),c=n["get"+r+"Minutes"](),u=n["get"+r+"Seconds"]();return e=e.replace("MM",v(a)).replace("M",a).replace("yyyy",o).replace("yy",o%100).replace("dd",v(s)).replace("d",s).replace("hh",v(l)).replace("h",l).replace("mm",v(c)).replace("m",c).replace("ss",v(u)).replace("s",u)}function u(e){return e?e.charAt(0).toUpperCase()+e.substr(1):e}var h=i(0),d=i(60),f=i(4),p=h.normalizeCssArray,m=["a","b","c","d","e","f","g"],g=function(e,t){return"{"+e+(null==t?"":t)+"}"},v=function(e){return e<10?"0"+e:e},_=d.truncateText,y=d.getBoundingRect;t.addCommas=n,t.toCamelCase=r,t.normalizeCssArray=p,t.encodeHTML=o,t.formatTpl=a,t.formatTplSimple=s,t.getTooltipMarker=l,t.formatTime=c,t.capitalFirst=u,t.truncateText=_,t.getTextRect=y},function(e,t,i){var n=i(51),r=Math.min;e.exports=function(e){return e>0?r(n(e),9007199254740991):0}},function(e,t,i){e.exports=!i(7)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(e,t,i){var n=i(5),r=i(289),o=i(57),a=Object.defineProperty;t.f=i(16)?Object.defineProperty:function(e,t,i){if(n(e),t=o(t,!0),n(i),r)try{return a(e,t,i)}catch(e){}if("get"in i||"set"in i)throw TypeError("Accessors not supported!");return"value"in i&&(e[t]=i.value),e}},function(e,t,i){function n(e,t,i,n){i<0&&(e+=i,i=-i),n<0&&(t+=n,n=-n),this.x=e,this.y=t,this.width=i,this.height=n}var r=i(12),o=i(45),a=r.applyTransform,s=Math.min,l=Math.max;n.prototype={constructor:n,union:function(e){var t=s(e.x,this.x),i=s(e.y,this.y);this.width=l(e.x+e.width,this.x+this.width)-t,this.height=l(e.y+e.height,this.y+this.height)-i,this.x=t,this.y=i},applyTransform:function(){var e=[],t=[],i=[],n=[];return function(r){if(r){e[0]=i[0]=this.x,e[1]=n[1]=this.y,t[0]=n[0]=this.x+this.width,t[1]=i[1]=this.y+this.height,a(e,e,r),a(t,t,r),a(i,i,r),a(n,n,r),this.x=s(e[0],t[0],i[0],n[0]),this.y=s(e[1],t[1],i[1],n[1]);var o=l(e[0],t[0],i[0],n[0]),c=l(e[1],t[1],i[1],n[1]);this.width=o-this.x,this.height=c-this.y}}}(),calculateTransform:function(e){var t=this,i=e.width/t.width,n=e.height/t.height,r=o.create();return o.translate(r,r,[-t.x,-t.y]),o.scale(r,r,[i,n]),o.translate(r,r,[e.x,e.y]),r},intersect:function(e){if(!e)return!1;e instanceof n||(e=n.create(e));var t=this,i=t.x,r=t.x+t.width,o=t.y,a=t.y+t.height,s=e.x,l=e.x+e.width,c=e.y,u=e.y+e.height;return!(r=i.x&&e<=i.x+i.width&&t>=i.y&&t<=i.y+i.height},clone:function(){return new n(this.x,this.y,this.width,this.height)},copy:function(e){this.x=e.x,this.y=e.y,this.width=e.width,this.height=e.height},plain:function(){return{x:this.x,y:this.y,width:this.width,height:this.height}}},n.create=function(e){return new n(e.x,e.y,e.width,e.height)};var c=n;e.exports=c},function(e,t,i){"use strict";function n(){for(var e=arguments.length,t=Array(e),i=0;i=o)return e;switch(e){case"%s":return String(t[n++]);case"%d":return Number(t[n++]);case"%j":try{return JSON.stringify(t[n++])}catch(e){return"[Circular]"}break;default:return e}}),s=t[n];n=0?o[c]=new u.constructor(a[c].length):o[c]=a[c]}return r}var s=i(9),l=(s.__DEV__,i(0)),c=i(21),u=i(107),h=i(10),d=l.isObject,f="undefined"==typeof window?t:window,p={float:void 0===f.Float64Array?Array:f.Float64Array,int:void 0===f.Int32Array?Array:f.Int32Array,ordinal:Array,number:Array,time:Array},m=["stackedOn","hasItemOption","_nameList","_idList","_rawData"];r.prototype.pure=!1,r.prototype.count=function(){return this._array.length},r.prototype.getItem=function(e){return this._array[e]};var g=function(e,t){e=e||["x","y"];for(var i={},n=[],r=0;r0&&(E+="__ec__"+f[T]),f[T]++),E&&(d[m]=E)}this._nameList=t,this._idList=d},v.count=function(){return this.indices.length},v.get=function(e,t,i){var n=this._storage,r=this.indices[t];if(null==r||!n[e])return NaN;var o=n[e][r];if(i){var a=this._dimensionInfos[e];if(a&&a.stackable)for(var s=this.stackedOn;s;){var l=s.get(e,t);(o>=0&&l>0||o<=0&&l<0)&&(o+=l),s=s.stackedOn}}return o},v.getValues=function(e,t,i){var n=[];l.isArray(e)||(i=t,t=e,e=this.dimensions);for(var r=0,o=e.length;rl&&(l=o));return this._extent[e+!!t]=[s,l]}return[1/0,-1/0]},v.getSum=function(e,t){var i=this._storage[e],n=0;if(i)for(var r=0,o=this.count();re))return o;r=o-1}}return-1},v.indicesOfNearest=function(e,t,i,n){var r=this._storage,o=r[e],a=[];if(!o)return a;null==n&&(n=1/0);for(var s=Number.MAX_VALUE,l=-1,c=0,u=this.count();c=0&&l<0)&&(s=d,l=h,a.length=0),a.push(c))}return a},v.getRawIndex=function(e){var t=this.indices[e];return null==t?-1:t},v.getRawDataItem=function(e){return this._rawData.getItem(this.getRawIndex(e))},v.getName=function(e){return this._nameList[this.indices[e]]||""},v.getId=function(e){return this._idList[this.indices[e]]||this.getRawIndex(e)+""},v.each=function(e,t,i,n){"function"==typeof e&&(n=i,i=t,t=e,e=[]),e=l.map(o(e),this.getDimension,this);var r=[],a=e.length,s=this.indices;n=n||this;for(var c=0;cp-m&&(d=p-m,u.length=d);for(var g=0;g=0;o--)n=r.merge(n,e[o],!0);s.set(this,"__defaultOption",n)}return s.get(this,"__defaultOption")},getReferringComponents:function(e){return this.ecModel.queryComponents({mainType:e,index:this.get(e+"Index",!0),id:this.get(e+"Id",!0)})}});s.enableClassManagement(h,{registerWhenExtend:!0}),a.enableSubTypeDefaulter(h),a.enableTopologicalTravel(h,n),r.mixin(h,c);var d=h;e.exports=d},function(e,t){var i={};i="undefined"==typeof navigator?{browser:{},os:{},node:!0,canvasSupported:!0,svgSupported:!0}:function(e){var t={},i={},n=e.match(/Firefox\/([\d.]+)/),r=e.match(/MSIE\s([\d.]+)/)||e.match(/Trident\/.+?rv:(([\d.]+))/),o=e.match(/Edge\/([\d.]+)/),a=/micromessenger/i.test(e);return n&&(i.firefox=!0,i.version=n[1]),r&&(i.ie=!0,i.version=r[1]),o&&(i.edge=!0,i.version=o[1]),a&&(i.weChat=!0),{browser:i,os:t,node:!1,canvasSupported:!!document.createElement("canvas").getContext,svgSupported:"undefined"!=typeof SVGRect,touchEventsSupported:"ontouchstart"in window&&!i.ie&&!i.edge,pointerEventsSupported:"onpointerdown"in window&&(i.edge||i.ie&&i.version>=11)}}(navigator.userAgent);var n=i;e.exports=n},function(e,t,i){function n(e){r.call(this,e),this.path=null}var r=i(171),o=i(0),a=i(110),s=i(1088),l=i(390),c=l.prototype.getCanvasPattern,u=Math.abs,h=new a(!0);n.prototype={constructor:n,type:"path",__dirtyPath:!0,strokeContainThreshold:5,brush:function(e,t){var i=this.style,n=this.path||h,r=i.hasStroke(),o=i.hasFill(),a=i.fill,s=i.stroke,l=o&&!!a.colorStops,u=r&&!!s.colorStops,d=o&&!!a.image,f=r&&!!s.image;if(i.bind(e,this,t),this.setTransform(e),this.__dirty){var p;l&&(p=p||this.getBoundingRect(),this._fillGradient=i.getGradient(e,a,p)),u&&(p=p||this.getBoundingRect(),this._strokeGradient=i.getGradient(e,s,p))}l?e.fillStyle=this._fillGradient:d&&(e.fillStyle=c.call(a,e)),u?e.strokeStyle=this._strokeGradient:f&&(e.strokeStyle=c.call(s,e));var m=i.lineDash,g=i.lineDashOffset,v=!!e.setLineDash,_=this.getGlobalScale();n.setScale(_[0],_[1]),this.__dirtyPath||m&&!v&&r?(n.beginPath(e),m&&!v&&(n.setLineDash(m),n.setLineDashOffset(g)),this.buildPath(n,this.shape,!1),this.path&&(this.__dirtyPath=!1)):(e.beginPath(),this.path.rebuildPath(e)),o&&n.fill(e),m&&v&&(e.setLineDash(m),e.lineDashOffset=g),r&&n.stroke(e),m&&v&&e.setLineDash([]),this.restoreTransform(e),null!=i.text&&this.drawRectText(e,this.getBoundingRect())},buildPath:function(e,t,i){},createPathProxy:function(){this.path=new a},getBoundingRect:function(){var e=this._rect,t=this.style,i=!e;if(i){var n=this.path;n||(n=this.path=new a),this.__dirtyPath&&(n.beginPath(),this.buildPath(n,this.shape,!1)),e=n.getBoundingRect()}if(this._rect=e,t.hasStroke()){var r=this._rectWithStroke||(this._rectWithStroke=e.clone());if(this.__dirty||i){r.copy(e);var o=t.lineWidth,s=t.strokeNoScale?this.getLineScale():1;t.hasFill()||(o=Math.max(o,this.strokeContainThreshold||4)),s>1e-10&&(r.width+=o/s,r.height+=o/s,r.x-=o/s/2,r.y-=o/s/2)}return r}return e},contain:function(e,t){var i=this.transformCoordToLocal(e,t),n=this.getBoundingRect(),r=this.style;if(e=i[0],t=i[1],n.contain(e,t)){var o=this.path.data;if(r.hasStroke()){var a=r.lineWidth,l=r.strokeNoScale?this.getLineScale():1;if(l>1e-10&&(r.hasFill()||(a=Math.max(a,this.strokeContainThreshold)),s.containStroke(o,a/l,e,t)))return!0}if(r.hasFill())return s.contain(o,e,t)}return!1},dirty:function(e){null==e&&(e=!0),e&&(this.__dirtyPath=e,this._rect=null),this.__dirty=!0,this.__zr&&this.__zr.refresh(),this.__clipTarget&&this.__clipTarget.dirty()},animateShape:function(e){return this.animate("shape",e)},attrKV:function(e,t){"shape"===e?(this.setShape(t),this.__dirtyPath=!0,this._rect=null):r.prototype.attrKV.call(this,e,t)},setShape:function(e,t){var i=this.shape;if(i){if(o.isObject(e))for(var n in e)e.hasOwnProperty(n)&&(i[n]=e[n]);else i[e]=t;this.dirty(!0)}return this},getLineScale:function(){var e=this.transform;return e&&u(e[0]-1)>1e-10&&u(e[3]-1)>1e-10?Math.sqrt(u(e[0]*e[3]-e[2]*e[1])):1}},n.extend=function(e){var t=function(t){n.call(this,t),e.style&&this.style.extendFrom(e.style,!1);var i=e.shape;if(i){this.shape=this.shape||{};var r=this.shape;for(var o in i)!r.hasOwnProperty(o)&&i.hasOwnProperty(o)&&(r[o]=i[o])}e.init&&e.init.call(this,t)};o.inherits(t,n);for(var i in e)"style"!==i&&"shape"!==i&&(t.prototype[i]=e[i]);return t},o.inherits(n,r);var d=n;e.exports=d},function(e,t){var i=e.exports={version:"2.6.9"};"number"==typeof __e&&(__e=i)},function(e,t,i){var n=i(9),r=(n.__DEV__,i(0)),o=i(24),a=i(14),s=a.formatTime,l=a.encodeHTML,c=a.addCommas,u=a.getTooltipMarker,h=i(63),d=h.set,f=h.get,p=i(10),m=i(23),g=i(366),v=i(11),_=v.getLayoutParams,y=v.mergeLayoutParam,b=m.extend({type:"series.__base__",seriesIndex:0,coordinateSystem:null,defaultOption:null,legendDataProvider:null,visualColorAccessPath:"itemStyle.normal.color",layoutMode:null,init:function(e,t,i,n){this.seriesIndex=this.componentIndex,this.mergeDefaultAndTheme(e,i);var r=this.getInitialData(e,i);d(this,"dataBeforeProcessed",r),this.restoreData()},mergeDefaultAndTheme:function(e,t){var i=this.layoutMode,n=i?_(e):{},o=this.subType;m.hasClass(o)&&(o+="Series"),r.merge(e,t.getTheme().get(this.subType)),r.merge(e,this.getDefaultOption()),p.defaultEmphasis(e.label,["show"]),this.fillDataTextStyle(e.data),i&&y(e,n,i)},mergeOption:function(e,t){e=r.merge(this.option,e,!0),this.fillDataTextStyle(e.data);var i=this.layoutMode;i&&y(this.option,e,i);var n=this.getInitialData(e,t);n&&(d(this,"data",n),d(this,"dataBeforeProcessed",n.cloneShallow()))},fillDataTextStyle:function(e){if(e)for(var t=["show"],i=0;i":"")+u.join(a?"
":", ")}(o):l(c(o)),h=n.getName(e),d=n.getItemVisual(e,"color");r.isObject(d)&&d.colorStops&&(d=(d.colorStops[0]||{}).color),d=d||"transparent";var m=u(d),g=this.name;return"\0-"===g&&(g=""),g=g?l(g)+(t?": ":"
"):"",t?m+g+a:g+m+(h?l(h)+": "+a:a)},isAnimationEnabled:function(){if(o.node)return!1;var e=this.getShallow("animation");return e&&this.getData().count()>this.getShallow("animationThreshold")&&(e=!1),e},restoreData:function(){d(this,"data",f(this,"dataBeforeProcessed").cloneShallow())},getColorFromPalette:function(e,t){var i=this.ecModel,n=g.getColorFromPalette.call(this,e,t);return n||(n=i.getColorFromPalette(e,t)),n},getAxisTooltipData:null,getTooltipPosition:null});r.mixin(b,p.dataFormatMixin),r.mixin(b,g);var x=b;e.exports=x},function(e,t){e.exports=function(e,t,i,n){var r,o=e=e||{},a=typeof e.default;"object"!==a&&"function"!==a||(r=e,o=e.default);var s="function"==typeof o?o.options:o;if(t&&(s.render=t.render,s.staticRenderFns=t.staticRenderFns),i&&(s._scopeId=i),n){var l=Object.create(s.computed||null);Object.keys(n).forEach(function(e){var t=n[e];l[e]=function(){return t}}),s.computed=l}return{esModule:r,exports:o,options:s}}},function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,i){function n(e){return void 0===e||null===e}function r(e){return void 0!==e&&null!==e}function o(e){return!0===e}function a(e){return!1===e}function s(e){return"string"==typeof e||"number"==typeof e||"symbol"==typeof e||"boolean"==typeof e}function l(e){return null!==e&&"object"==typeof e}function c(e){return"[object Object]"===Co.call(e)}function u(e){return"[object RegExp]"===Co.call(e)}function h(e){var t=parseFloat(String(e));return t>=0&&Math.floor(t)===t&&isFinite(e)}function d(e){return r(e)&&"function"==typeof e.then&&"function"==typeof e.catch}function f(e){return null==e?"":Array.isArray(e)||c(e)&&e.toString===Co?JSON.stringify(e,null,2):String(e)}function p(e){var t=parseFloat(e);return isNaN(t)?e:t}function m(e,t){for(var i=Object.create(null),n=e.split(","),r=0;r-1)return e.splice(i,1)}}function v(e,t){return wo.call(e,t)}function _(e){var t=Object.create(null);return function(i){return t[i]||(t[i]=e(i))}}function y(e,t){function i(i){var n=arguments.length;return n?n>1?e.apply(t,arguments):e.call(t,i):e.call(t)}return i._length=e.length,i}function b(e,t){return e.bind(t)}function x(e,t){t=t||0;for(var i=e.length-t,n=new Array(i);i--;)n[i]=e[i+t];return n}function T(e,t){for(var i in t)e[i]=t[i];return e}function E(e){for(var t={},i=0;i-1)if(o&&!v(r,"default"))a=!1;else if(""===a||a===Io(e)){var l=re(String,r.type);(l<0||s0&&(a=xe(a,(t||"")+"_"+i),be(a[0])&&be(c)&&(u[l]=L(c.text+a[0].text),a.shift()),u.push.apply(u,a)):s(a)?be(c)?u[l]=L(c.text+a):""!==a&&u.push(L(a)):be(a)&&be(c)?u[l]=L(c.text+a.text):(o(e._isVList)&&r(a.tag)&&n(a.key)&&r(t)&&(a.key="__vlist"+t+"_"+i+"__"),u.push(a)));return u}function Te(e){var t=e.$options.provide;t&&(e._provided="function"==typeof t?t.call(e):t)}function Ee(e){var t=Se(e.$options.inject,e);t&&(k(!1),Object.keys(t).forEach(function(i){z(e,i,t[i])}),k(!0))}function Se(e,t){if(e){for(var i=Object.create(null),n=aa?Reflect.ownKeys(e):Object.keys(e),r=0;r0,o=e?!!e.$stable:!r,a=e&&e.$key;if(e){if(e._normalized)return e._normalized;if(o&&i&&i!==So&&a===i.$key&&!r&&!i.$hasNormal)return i;n={};for(var s in e)e[s]&&"$"!==s[0]&&(n[s]=we(t,s,e[s]))}else n={};for(var l in t)l in n||(n[l]=Me(t,l));return e&&Object.isExtensible(e)&&(e._normalized=n),M(n,"$stable",o),M(n,"$key",a),M(n,"$hasNormal",r),n}function we(e,t,i){var n=function(){var e=arguments.length?i.apply(null,arguments):i({});return e=e&&"object"==typeof e&&!Array.isArray(e)?[e]:ye(e),e&&(0===e.length||1===e.length&&e[0].isComment)?void 0:e};return i.proxy&&Object.defineProperty(e,t,{get:n,enumerable:!0,configurable:!0}),n}function Me(e,t){return function(){return e[t]}}function Re(e,t){var i,n,o,a,s;if(Array.isArray(e)||"string"==typeof e)for(i=new Array(e.length),n=0,o=e.length;nHa&&Na[i].id>e.id;)i--;Na.splice(i+1,0,e)}else Na.push(e);Ua||(Ua=!0,ue(St))}}function Mt(e,t,i){$a.get=function(){return this[t][i]},$a.set=function(e){this[t][i]=e},Object.defineProperty(e,i,$a)}function Rt(e){e._watchers=[];var t=e.$options;t.props&&Ot(e,t.props),t.methods&&Nt(e,t.methods),t.data?Dt(e):V(e._data={},!0),t.computed&&Lt(e,t.computed),t.watch&&t.watch!==Jo&&Vt(e,t.watch)}function Ot(e,t){var i=e.$options.propsData||{},n=e._props={},r=e.$options._propKeys=[],o=!e.$parent;o||k(!1);for(var a in t)!function(o){r.push(o);var a=ee(o,t,i,e);z(n,o,a),o in e||Mt(e,"_props",o)}(a);k(!0)}function Dt(e){var t=e.$options.data;t=e._data="function"==typeof t?It(t,e):t||{},c(t)||(t={});for(var i=Object.keys(t),n=e.$options.props,r=(e.$options.methods,i.length);r--;){var o=i[r];n&&v(n,o)||w(o)||Mt(e,"_data",o)}V(t,!0)}function It(e,t){D();try{return e.call(t,t)}catch(e){return oe(e,t,"data()"),{}}finally{I()}}function Lt(e,t){var i=e._computedWatchers=Object.create(null),n=ra();for(var r in t){var o=t[r],a="function"==typeof o?o:o.get;n||(i[r]=new Ka(e,a||S,S,qa)),r in e||Bt(e,r,o)}}function Bt(e,t,i){var n=!ra();"function"==typeof i?($a.get=n?kt(t):Ft(i),$a.set=S):($a.get=i.get?n&&!1!==i.cache?kt(t):Ft(i.get):S,$a.set=i.set||S),Object.defineProperty(e,t,$a)}function kt(e){return function(){var t=this._computedWatchers&&this._computedWatchers[e];if(t)return t.dirty&&t.evaluate(),ca.target&&t.depend(),t.value}}function Ft(e){return function(){return e.call(this,this)}}function Nt(e,t){e.$options.props;for(var i in t)e[i]="function"!=typeof t[i]?S:Lo(t[i],e)}function Vt(e,t){for(var i in t){var n=t[i];if(Array.isArray(n))for(var r=0;r-1)return this;var i=x(arguments,1);return i.unshift(this),"function"==typeof e.install?e.install.apply(e,i):"function"==typeof e&&e.apply(null,i),t.push(e),this}}function Xt(e){e.mixin=function(e){return this.options=Z(this.options,e),this}}function Yt(e){e.cid=0;var t=1;e.extend=function(e){e=e||{};var i=this,n=i.cid,r=e._Ctor||(e._Ctor={});if(r[n])return r[n];var o=e.name||i.options.name,a=function(e){this._init(e)};return a.prototype=Object.create(i.prototype),a.prototype.constructor=a,a.cid=t++,a.options=Z(i.options,e),a.super=i,a.options.props&&Kt(a),a.options.computed&&$t(a),a.extend=i.extend,a.mixin=i.mixin,a.use=i.use,No.forEach(function(e){a[e]=i[e]}),o&&(a.options.components[o]=a),a.superOptions=i.options,a.extendOptions=e,a.sealedOptions=T({},a.options),r[n]=a,a}}function Kt(e){var t=e.options.props;for(var i in t)Mt(e.prototype,"_props",i)}function $t(e){var t=e.options.computed;for(var i in t)Bt(e.prototype,i,t[i])}function qt(e){No.forEach(function(t){e[t]=function(e,i){return i?("component"===t&&c(i)&&(i.name=i.name||e,i=this.options._base.extend(i)),"directive"===t&&"function"==typeof i&&(i={bind:i,update:i}),this.options[t+"s"][e]=i,i):this.options[t+"s"][e]}})}function Qt(e){return e&&(e.Ctor.options.name||e.tag)}function Zt(e,t){return Array.isArray(e)?e.indexOf(t)>-1:"string"==typeof e?e.split(",").indexOf(t)>-1:!!u(e)&&e.test(t)}function Jt(e,t){var i=e.cache,n=e.keys,r=e._vnode;for(var o in i){var a=i[o];if(a){var s=Qt(a.componentOptions);s&&!t(s)&&ei(i,o,n,r)}}}function ei(e,t,i,n){var r=e[t];!r||n&&r.tag===n.tag||r.componentInstance.$destroy(),e[t]=null,g(i,t)}function ti(e){for(var t=e.data,i=e,n=e;r(n.componentInstance);)(n=n.componentInstance._vnode)&&n.data&&(t=ii(n.data,t));for(;r(i=i.parent);)i&&i.data&&(t=ii(t,i.data));return ni(t.staticClass,t.class)}function ii(e,t){return{staticClass:ri(e.staticClass,t.staticClass),class:r(e.class)?[e.class,t.class]:t.class}}function ni(e,t){return r(e)||r(t)?ri(e,oi(t)):""}function ri(e,t){return e?t?e+" "+t:e:t||""}function oi(e){return Array.isArray(e)?ai(e):l(e)?si(e):"string"==typeof e?e:""}function ai(e){for(var t,i="",n=0,o=e.length;n-1?Ps[e]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:Ps[e]=/HTMLUnknownElement/.test(t.toString())}function ui(e){if("string"==typeof e){var t=document.querySelector(e);return t||document.createElement("div")}return e}function hi(e,t){var i=document.createElement(e);return"select"!==e?i:(t.data&&t.data.attrs&&void 0!==t.data.attrs.multiple&&i.setAttribute("multiple","multiple"),i)}function di(e,t){return document.createElementNS(Ts[e],t)}function fi(e){return document.createTextNode(e)}function pi(e){return document.createComment(e)}function mi(e,t,i){e.insertBefore(t,i)}function gi(e,t){e.removeChild(t)}function vi(e,t){e.appendChild(t)}function _i(e){return e.parentNode}function yi(e){return e.nextSibling}function bi(e){return e.tagName}function xi(e,t){e.textContent=t}function Ti(e,t){e.setAttribute(t,"")}function Ei(e,t){var i=e.data.ref;if(r(i)){var n=e.context,o=e.componentInstance||e.elm,a=n.$refs;t?Array.isArray(a[i])?g(a[i],o):a[i]===o&&(a[i]=void 0):e.data.refInFor?Array.isArray(a[i])?a[i].indexOf(o)<0&&a[i].push(o):a[i]=[o]:a[i]=o}}function Si(e,t){return e.key===t.key&&(e.tag===t.tag&&e.isComment===t.isComment&&r(e.data)===r(t.data)&&Ci(e,t)||o(e.isAsyncPlaceholder)&&e.asyncFactory===t.asyncFactory&&n(t.asyncFactory.error))}function Ci(e,t){if("input"!==e.tag)return!0;var i,n=r(i=e.data)&&r(i=i.attrs)&&i.type,o=r(i=t.data)&&r(i=i.attrs)&&i.type;return n===o||ws(n)&&ws(o)}function Ai(e,t,i){var n,o,a={};for(n=t;n<=i;++n)o=e[n].key,r(o)&&(a[o]=n);return a}function Pi(e,t){(e.data.directives||t.data.directives)&&wi(e,t)}function wi(e,t){var i,n,r,o=e===Os,a=t===Os,s=Mi(e.data.directives,e.context),l=Mi(t.data.directives,t.context),c=[],u=[];for(i in l)n=s[i],r=l[i],n?(r.oldValue=n.value,r.oldArg=n.arg,Oi(r,"update",t,e),r.def&&r.def.componentUpdated&&u.push(r)):(Oi(r,"bind",t,e),r.def&&r.def.inserted&&c.push(r));if(c.length){var h=function(){for(var i=0;i-1?Li(e,t,i):vs(t)?xs(i)?e.removeAttribute(t):(i="allowfullscreen"===t&&"EMBED"===e.tagName?"true":t,e.setAttribute(t,i)):ps(t)?e.setAttribute(t,gs(t,i)):ys(t)?xs(i)?e.removeAttributeNS(_s,bs(t)):e.setAttributeNS(_s,t,i):Li(e,t,i)}function Li(e,t,i){if(xs(i))e.removeAttribute(t);else{if(Ko&&!$o&&"TEXTAREA"===e.tagName&&"placeholder"===t&&""!==i&&!e.__ieph){var n=function(t){t.stopImmediatePropagation(),e.removeEventListener("input",n)};e.addEventListener("input",n),e.__ieph=!0}e.setAttribute(t,i)}}function Bi(e,t){var i=t.elm,o=t.data,a=e.data;if(!(n(o.staticClass)&&n(o.class)&&(n(a)||n(a.staticClass)&&n(a.class)))){var s=ti(t),l=i._transitionClasses;r(l)&&(s=ri(s,oi(l))),s!==i._prevClass&&(i.setAttribute("class",s),i._prevClass=s)}}function ki(e){function t(){(a||(a=[])).push(e.slice(p,r).trim()),p=r+1}var i,n,r,o,a,s=!1,l=!1,c=!1,u=!1,h=0,d=0,f=0,p=0;for(r=0;r=0&&" "===(g=e.charAt(m));m--);g&&Ns.test(g)||(u=!0)}}else void 0===o?(p=r+1,o=e.slice(0,r).trim()):t();if(void 0===o?o=e.slice(0,r).trim():0!==p&&t(),a)for(r=0;r-1?{exp:e.slice(0,rs),key:'"'+e.slice(rs+1)+'"'}:{exp:e,key:null};for(is=e,rs=os=as=0;!tn();)ns=en(),nn(ns)?on(ns):91===ns&&rn(ns);return{exp:e.slice(0,os),key:e.slice(os+1,as)}}function en(){return is.charCodeAt(++rs)}function tn(){return rs>=ts}function nn(e){return 34===e||39===e}function rn(e){var t=1;for(os=rs;!tn();)if(e=en(),nn(e))on(e);else if(91===e&&t++,93===e&&t--,0===t){as=rs;break}}function on(e){for(var t=e;!tn()&&(e=en())!==t;);}function an(e,t,i){ss=i;var n=t.value,r=t.modifiers,o=e.tag,a=e.attrsMap.type;if(e.component)return Qi(e,n,r),!1;if("select"===o)cn(e,n,r);else if("input"===o&&"checkbox"===a)sn(e,n,r);else if("input"===o&&"radio"===a)ln(e,n,r);else if("input"===o||"textarea"===o)un(e,n,r);else if(!zo.isReservedTag(o))return Qi(e,n,r),!1;return!0}function sn(e,t,i){var n=i&&i.number,r=Yi(e,"value")||"null",o=Yi(e,"true-value")||"true",a=Yi(e,"false-value")||"false";zi(e,"checked","Array.isArray("+t+")?_i("+t+","+r+")>-1"+("true"===o?":("+t+")":":_q("+t+","+o+")")),Wi(e,"change","var $$a="+t+",$$el=$event.target,$$c=$$el.checked?("+o+"):("+a+");if(Array.isArray($$a)){var $$v="+(n?"_n("+r+")":r)+",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&("+Zi(t,"$$a.concat([$$v])")+")}else{$$i>-1&&("+Zi(t,"$$a.slice(0,$$i).concat($$a.slice($$i+1))")+")}}else{"+Zi(t,"$$c")+"}",null,!0)}function ln(e,t,i){var n=i&&i.number,r=Yi(e,"value")||"null";r=n?"_n("+r+")":r,zi(e,"checked","_q("+t+","+r+")"),Wi(e,"change",Zi(t,r),null,!0)}function cn(e,t,i){var n=i&&i.number,r='Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = "_value" in o ? o._value : o.value;return '+(n?"_n(val)":"val")+"})",o="var $$selectedVal = "+r+";";o=o+" "+Zi(t,"$event.target.multiple ? $$selectedVal : $$selectedVal[0]"),Wi(e,"change",o,null,!0)}function un(e,t,i){var n=e.attrsMap.type,r=i||{},o=r.lazy,a=r.number,s=r.trim,l=!o&&"range"!==n,c=o?"change":"range"===n?Vs:"input",u="$event.target.value";s&&(u="$event.target.value.trim()"),a&&(u="_n("+u+")");var h=Zi(t,u);l&&(h="if($event.target.composing)return;"+h),zi(e,"value","("+t+")"),Wi(e,c,h,null,!0),(s||a)&&Wi(e,"blur","$forceUpdate()")}function hn(e){if(r(e[Vs])){var t=Ko?"change":"input";e[t]=[].concat(e[Vs],e[t]||[]),delete e[Vs]}r(e[zs])&&(e.change=[].concat(e[zs],e.change||[]),delete e[zs])}function dn(e,t,i){var n=ls;return function r(){null!==t.apply(null,arguments)&&pn(e,r,i,n)}}function fn(e,t,i,n){if(Us){var r=ja,o=t;t=o._wrapper=function(e){if(e.target===e.currentTarget||e.timeStamp>=r||e.timeStamp<=0||e.target.ownerDocument!==document)return o.apply(this,arguments)}}ls.addEventListener(e,t,ea?{capture:i,passive:n}:i)}function pn(e,t,i,n){(n||ls).removeEventListener(e,t._wrapper||t,i)}function mn(e,t){if(!n(e.data.on)||!n(t.data.on)){var i=t.data.on||{},r=e.data.on||{};ls=t.elm,hn(i),pe(i,r,fn,pn,dn,t.context),ls=void 0}}function gn(e,t){if(!n(e.data.domProps)||!n(t.data.domProps)){var i,o,a=t.elm,s=e.data.domProps||{},l=t.data.domProps||{};r(l.__ob__)&&(l=t.data.domProps=T({},l));for(i in s)i in l||(a[i]="");for(i in l){if(o=l[i],"textContent"===i||"innerHTML"===i){if(t.children&&(t.children.length=0),o===s[i])continue;1===a.childNodes.length&&a.removeChild(a.childNodes[0])}if("value"===i&&"PROGRESS"!==a.tagName){a._value=o;var c=n(o)?"":String(o);vn(a,c)&&(a.value=c)}else if("innerHTML"===i&&Ss(a.tagName)&&n(a.innerHTML)){cs=cs||document.createElement("div"),cs.innerHTML=""+o+"";for(var u=cs.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;u.firstChild;)a.appendChild(u.firstChild)}else if(o!==s[i])try{a[i]=o}catch(e){}}}}function vn(e,t){return!e.composing&&("OPTION"===e.tagName||_n(e,t)||yn(e,t))}function _n(e,t){var i=!0;try{i=document.activeElement!==e}catch(e){}return i&&e.value!==t}function yn(e,t){var i=e.value,n=e._vModifiers;if(r(n)){if(n.number)return p(i)!==p(t);if(n.trim)return i.trim()!==t.trim()}return i!==t}function bn(e){var t=xn(e.style);return e.staticStyle?T(e.staticStyle,t):t}function xn(e){return Array.isArray(e)?E(e):"string"==typeof e?js(e):e}function Tn(e,t){var i,n={};if(t)for(var r=e;r.componentInstance;)(r=r.componentInstance._vnode)&&r.data&&(i=bn(r.data))&&T(n,i);(i=bn(e.data))&&T(n,i);for(var o=e;o=o.parent;)o.data&&(i=bn(o.data))&&T(n,i);return n}function En(e,t){var i=t.data,o=e.data;if(!(n(i.staticStyle)&&n(i.style)&&n(o.staticStyle)&&n(o.style))){var a,s,l=t.elm,c=o.staticStyle,u=o.normalizedStyle||o.style||{},h=c||u,d=xn(t.data.style)||{};t.data.normalizedStyle=r(d.__ob__)?T({},d):d;var f=Tn(t,!0);for(s in h)n(f[s])&&Ys(l,s,"");for(s in f)(a=f[s])!==h[s]&&Ys(l,s,null==a?"":a)}}function Sn(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(Qs).forEach(function(t){return e.classList.add(t)}):e.classList.add(t);else{var i=" "+(e.getAttribute("class")||"")+" ";i.indexOf(" "+t+" ")<0&&e.setAttribute("class",(i+t).trim())}}function Cn(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(Qs).forEach(function(t){return e.classList.remove(t)}):e.classList.remove(t),e.classList.length||e.removeAttribute("class");else{for(var i=" "+(e.getAttribute("class")||"")+" ",n=" "+t+" ";i.indexOf(n)>=0;)i=i.replace(n," ");i=i.trim(),i?e.setAttribute("class",i):e.removeAttribute("class")}}function An(e){if(e){if("object"==typeof e){var t={};return!1!==e.css&&T(t,Zs(e.name||"v")),T(t,e),t}return"string"==typeof e?Zs(e):void 0}}function Pn(e){al(function(){al(e)})}function wn(e,t){var i=e._transitionClasses||(e._transitionClasses=[]);i.indexOf(t)<0&&(i.push(t),Sn(e,t))}function Mn(e,t){e._transitionClasses&&g(e._transitionClasses,t),Cn(e,t)}function Rn(e,t,i){var n=On(e,t),r=n.type,o=n.timeout,a=n.propCount;if(!r)return i();var s=r===el?nl:ol,l=0,c=function(){e.removeEventListener(s,u),i()},u=function(t){t.target===e&&++l>=a&&c()};setTimeout(function(){l0&&(i=el,u=a,h=o.length):t===tl?c>0&&(i=tl,u=c,h=l.length):(u=Math.max(a,c),i=u>0?a>c?el:tl:null,h=i?i===el?o.length:l.length:0),{type:i,timeout:u,propCount:h,hasTransform:i===el&&sl.test(n[il+"Property"])}}function Dn(e,t){for(;e.length1}function Nn(e,t){!0!==t.data.show&&Ln(t)}function Vn(e,t,i){zn(e,t,i),(Ko||qo)&&setTimeout(function(){zn(e,t,i)},0)}function zn(e,t,i){var n=t.value,r=e.multiple;if(!r||Array.isArray(n)){for(var o,a,s=0,l=e.options.length;s-1,a.selected!==o&&(a.selected=o);else if(C(Gn(a),n))return void(e.selectedIndex!==s&&(e.selectedIndex=s));r||(e.selectedIndex=-1)}}function Un(e,t){return t.every(function(t){return!C(t,e)})}function Gn(e){return"_value"in e?e._value:e.value}function Hn(e){e.target.composing=!0}function jn(e){e.target.composing&&(e.target.composing=!1,Wn(e.target,"input"))}function Wn(e,t){var i=document.createEvent("HTMLEvents");i.initEvent(t,!0,!0),e.dispatchEvent(i)}function Xn(e){return!e.componentInstance||e.data&&e.data.transition?e:Xn(e.componentInstance._vnode)}function Yn(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?Yn(ct(t.children)):e}function Kn(e){var t={},i=e.$options;for(var n in i.propsData)t[n]=e[n];var r=i._parentListeners;for(var o in r)t[Ro(o)]=r[o];return t}function $n(e,t){if(/\d-keep-alive$/.test(t.tag))return e("keep-alive",{props:t.componentOptions.propsData})}function qn(e){for(;e=e.parent;)if(e.data.transition)return!0}function Qn(e,t){return t.key===e.key&&t.tag===e.tag}function Zn(e){e.elm._moveCb&&e.elm._moveCb(),e.elm._enterCb&&e.elm._enterCb()}function Jn(e){e.data.newPos=e.elm.getBoundingClientRect()}function er(e){var t=e.data.pos,i=e.data.newPos,n=t.left-i.left,r=t.top-i.top;if(n||r){e.data.moved=!0;var o=e.elm.style;o.transform=o.WebkitTransform="translate("+n+"px,"+r+"px)",o.transitionDuration="0s"}}function tr(e,t){var i=t?Fl(t):Bl;if(i.test(e)){for(var n,r,o,a=[],s=[],l=i.lastIndex=0;n=i.exec(e);){r=n.index,r>l&&(s.push(o=e.slice(l,r)),a.push(JSON.stringify(o)));var c=ki(n[1].trim());a.push("_s("+c+")"),s.push({"@binding":c}),l=r+n[0].length}return l=0&&a[r].lowerCasedTag!==s;r--);else r=0;if(r>=0){for(var l=a.length-1;l>=r;l--)t.end&&t.end(a[l].tag,i,n);a.length=r,o=r&&a[r-1].tag}else"br"===s?t.start&&t.start(e,[],!0,i,n):"p"===s&&(t.start&&t.start(e,[],!1,i,n),t.end&&t.end(e,i,n))}for(var r,o,a=[],s=t.expectHTML,l=t.isUnaryTag||Bo,c=t.canBeLeftOpenTag||Bo,u=0;e;){if(r=e,o&&ec(o)){var h=0,d=o.toLowerCase(),f=tc[d]||(tc[d]=new RegExp("([\\s\\S]*?)(]*>)","i")),p=e.replace(f,function(e,i,n){return h=n.length,ec(d)||"noscript"===d||(i=i.replace(//g,"$1").replace(//g,"$1")),ac(d,i)&&(i=i.slice(1)),t.chars&&t.chars(i),""});u+=e.length-p.length,e=p,n(d,u-h,u)}else{var m=e.indexOf("<");if(0===m){if(Zl.test(e)){var g=e.indexOf("--\x3e");if(g>=0){t.shouldKeepComment&&t.comment(e.substring(4,g),u,u+g+3),i(g+3);continue}}if(Jl.test(e)){var v=e.indexOf("]>");if(v>=0){i(v+2);continue}}var _=e.match(Ql);if(_){i(_[0].length);continue}var y=e.match(ql);if(y){var b=u;i(y[0].length),n(y[1],b,u);continue}var x=function(){var t=e.match(Kl);if(t){var n={tagName:t[1],attrs:[],start:u};i(t[0].length);for(var r,o;!(r=e.match($l))&&(o=e.match(Wl)||e.match(jl));)o.start=u,i(o[0].length),o.end=u,n.attrs.push(o);if(r)return n.unarySlash=r[1],i(r[0].length),n.end=u,n}}();if(x){!function(e){var i=e.tagName,r=e.unarySlash;s&&("p"===o&&Hl(i)&&n(o),c(i)&&o===i&&n(i));for(var u=l(i)||!!r,h=e.attrs.length,d=new Array(h),f=0;f=0){for(E=e.slice(m);!(ql.test(E)||Kl.test(E)||Zl.test(E)||Jl.test(E)||(S=E.indexOf("<",1))<0);)m+=S,E=e.slice(m);T=e.substring(0,m)}m<0&&(T=e),T&&i(T.length),t.chars&&T&&t.chars(T,u-T.length,u)}if(e===r){t.chars&&t.chars(e);break}}n()}function lr(e,t,i){return{type:1,tag:e,attrsList:t,attrsMap:Mr(t),rawAttrsMap:{},parent:i,children:[]}}function cr(e,t){function i(e){if(n(e),u||e.processed||(e=dr(e,t)),s.length||e===o||o.if&&(e.elseif||e.else)&&br(o,{exp:e.elseif,block:e}),a&&!e.forbidden)if(e.elseif||e.else)_r(e,a);else{if(e.slotScope){var i=e.slotTarget||'"default"';(a.scopedSlots||(a.scopedSlots={}))[i]=e}a.children.push(e),e.parent=a}e.children=e.children.filter(function(e){return!e.slotScope}),n(e),e.pre&&(u=!1),wl(e.tag)&&(h=!1);for(var r=0;r>>0}function so(e){return 1===e.type&&("slot"===e.tag||e.children.some(so))}function lo(e,t){var i=e.attrsMap["slot-scope"];if(e.if&&!e.ifProcessed&&!i)return Jr(e,t,lo,"null");if(e.for&&!e.forProcessed)return to(e,t,lo);var n=e.slotScope===bc?"":String(e.slotScope),r="function("+n+"){return "+("template"===e.tag?e.if&&i?"("+e.if+")?"+(co(e,t)||"undefined")+":undefined":co(e,t)||"undefined":qr(e,t))+"}",o=n?"":",proxy:true";return"{key:"+(e.slotTarget||'"default"')+",fn:"+r+o+"}"}function co(e,t,i,n,r){var o=e.children;if(o.length){var a=o[0];if(1===o.length&&a.for&&"template"!==a.tag&&"slot"!==a.tag){var s=i?t.maybeComponent(a)?",1":",0":"";return""+(n||qr)(a,t)+s}var l=i?uo(o,t.maybeComponent):0,c=r||fo;return"["+o.map(function(e){return c(e,t)}).join(",")+"]"+(l?","+l:"")}}function uo(e,t){for(var i=0,n=0;n':'
',Ll.innerHTML.indexOf(" ")>0}function Eo(e){if(e.outerHTML)return e.outerHTML;var t=document.createElement("div");return t.appendChild(e.cloneNode(!0)),t.innerHTML}/*! - * Vue.js v2.6.10 - * (c) 2014-2019 Evan You - * Released under the MIT License. - */ -var So=Object.freeze({}),Co=Object.prototype.toString,Ao=m("slot,component",!0),Po=m("key,ref,slot,slot-scope,is"),wo=Object.prototype.hasOwnProperty,Mo=/-(\w)/g,Ro=_(function(e){return e.replace(Mo,function(e,t){return t?t.toUpperCase():""})}),Oo=_(function(e){return e.charAt(0).toUpperCase()+e.slice(1)}),Do=/\B([A-Z])/g,Io=_(function(e){return e.replace(Do,"-$1").toLowerCase()}),Lo=Function.prototype.bind?b:y,Bo=function(e,t,i){return!1},ko=function(e){return e},Fo="data-server-rendered",No=["component","directive","filter"],Vo=["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeDestroy","destroyed","activated","deactivated","errorCaptured","serverPrefetch"],zo={optionMergeStrategies:Object.create(null),silent:!1,productionTip:!1,devtools:!1,performance:!1,errorHandler:null,warnHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:Bo,isReservedAttr:Bo,isUnknownElement:Bo,getTagNamespace:S,parsePlatformTagName:ko,mustUseProp:Bo,async:!0,_lifecycleHooks:Vo},Uo=/a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/,Go=new RegExp("[^"+Uo.source+".$_\\d]"),Ho="__proto__"in{},jo="undefined"!=typeof window,Wo="undefined"!=typeof WXEnvironment&&!!WXEnvironment.platform,Xo=Wo&&WXEnvironment.platform.toLowerCase(),Yo=jo&&window.navigator.userAgent.toLowerCase(),Ko=Yo&&/msie|trident/.test(Yo),$o=Yo&&Yo.indexOf("msie 9.0")>0,qo=Yo&&Yo.indexOf("edge/")>0,Qo=(Yo&&Yo.indexOf("android"),Yo&&/iphone|ipad|ipod|ios/.test(Yo)||"ios"===Xo),Zo=(Yo&&/chrome\/\d+/.test(Yo),Yo&&/phantomjs/.test(Yo),Yo&&Yo.match(/firefox\/(\d+)/)),Jo={}.watch,ea=!1;if(jo)try{var ta={};Object.defineProperty(ta,"passive",{get:function(){ea=!0}}),window.addEventListener("test-passive",null,ta)}catch(e){}var ia,na,ra=function(){return void 0===ia&&(ia=!jo&&!Wo&&void 0!==e&&(e.process&&"server"===e.process.env.VUE_ENV)),ia},oa=jo&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__,aa="undefined"!=typeof Symbol&&O(Symbol)&&"undefined"!=typeof Reflect&&O(Reflect.ownKeys);na="undefined"!=typeof Set&&O(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var sa=S,la=0,ca=function(){this.id=la++,this.subs=[]};ca.prototype.addSub=function(e){this.subs.push(e)},ca.prototype.removeSub=function(e){g(this.subs,e)},ca.prototype.depend=function(){ca.target&&ca.target.addDep(this)},ca.prototype.notify=function(){for(var e=this.subs.slice(),t=0,i=e.length;tdocument.createEvent("Event").timeStamp&&(Wa=function(){return Xa.now()})}var Ya=0,Ka=function(e,t,i,n,r){this.vm=e,r&&(e._watcher=this),e._watchers.push(this),n?(this.deep=!!n.deep,this.user=!!n.user,this.lazy=!!n.lazy,this.sync=!!n.sync,this.before=n.before):this.deep=this.user=this.lazy=this.sync=!1,this.cb=i,this.id=++Ya,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new na,this.newDepIds=new na,this.expression="","function"==typeof t?this.getter=t:(this.getter=R(t),this.getter||(this.getter=S)),this.value=this.lazy?void 0:this.get()};Ka.prototype.get=function(){D(this);var e,t=this.vm;try{e=this.getter.call(t,t)}catch(e){if(!this.user)throw e;oe(e,t,'getter for watcher "'+this.expression+'"')}finally{this.deep&&he(e),I(),this.cleanupDeps()}return e},Ka.prototype.addDep=function(e){var t=e.id;this.newDepIds.has(t)||(this.newDepIds.add(t),this.newDeps.push(e),this.depIds.has(t)||e.addSub(this))},Ka.prototype.cleanupDeps=function(){for(var e=this.deps.length;e--;){var t=this.deps[e];this.newDepIds.has(t.id)||t.removeSub(this)}var i=this.depIds;this.depIds=this.newDepIds,this.newDepIds=i,this.newDepIds.clear(),i=this.deps,this.deps=this.newDeps,this.newDeps=i,this.newDeps.length=0},Ka.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():wt(this)},Ka.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||l(e)||this.deep){var t=this.value;if(this.value=e,this.user)try{this.cb.call(this.vm,e,t)}catch(e){oe(e,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,e,t)}}},Ka.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},Ka.prototype.depend=function(){for(var e=this.deps.length;e--;)this.deps[e].depend()},Ka.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||g(this.vm._watchers,this);for(var e=this.deps.length;e--;)this.deps[e].removeSub(this);this.active=!1}};var $a={enumerable:!0,configurable:!0,get:S,set:S},qa={lazy:!0},Qa=0;!function(e){e.prototype._init=function(e){var t=this;t._uid=Qa++,t._isVue=!0,e&&e._isComponent?Ut(t,e):t.$options=Z(Gt(t.constructor),e||{},t),t._renderProxy=t,t._self=t,gt(t),ut(t),rt(t),Tt(t,"beforeCreate"),Ee(t),Rt(t),Te(t),Tt(t,"created"),t.$options.el&&t.$mount(t.$options.el)}}(jt),function(e){var t={};t.get=function(){return this._data};var i={};i.get=function(){return this._props},Object.defineProperty(e.prototype,"$data",t),Object.defineProperty(e.prototype,"$props",i),e.prototype.$set=U,e.prototype.$delete=G,e.prototype.$watch=function(e,t,i){var n=this;if(c(t))return zt(n,e,t,i);i=i||{},i.user=!0;var r=new Ka(n,e,t,i);if(i.immediate)try{t.call(n,r.value)}catch(e){oe(e,n,'callback for immediate watcher "'+r.expression+'"')}return function(){r.teardown()}}}(jt),function(e){var t=/^hook:/;e.prototype.$on=function(e,i){var n=this;if(Array.isArray(e))for(var r=0,o=e.length;r1?x(i):i;for(var n=x(arguments,1),r='event handler for "'+e+'"',o=0,a=i.length;oparseInt(this.max)&&ei(l,c[0],c,this._vnode)),t.data.keepAlive=!0}return t||e&&e[0]}},es={KeepAlive:Ja};!function(e){var t={};t.get=function(){return zo},Object.defineProperty(e,"config",t),e.util={warn:sa,extend:T,mergeOptions:Z,defineReactive:z},e.set=U,e.delete=G,e.nextTick=ue,e.observable=function(e){return V(e),e},e.options=Object.create(null),No.forEach(function(t){e.options[t+"s"]=Object.create(null)}),e.options._base=e,T(e.options.components,es),Wt(e),Xt(e),Yt(e),qt(e)}(jt),Object.defineProperty(jt.prototype,"$isServer",{get:ra}),Object.defineProperty(jt.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(jt,"FunctionalRenderContext",{value:We}),jt.version="2.6.10";var ts,is,ns,rs,os,as,ss,ls,cs,us,hs=m("style,class"),ds=m("input,textarea,option,select,progress"),fs=function(e,t,i){return"value"===i&&ds(e)&&"button"!==t||"selected"===i&&"option"===e||"checked"===i&&"input"===e||"muted"===i&&"video"===e},ps=m("contenteditable,draggable,spellcheck"),ms=m("events,caret,typing,plaintext-only"),gs=function(e,t){return xs(t)||"false"===t?"false":"contenteditable"===e&&ms(t)?t:"true"},vs=m("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible"),_s="http://www.w3.org/1999/xlink",ys=function(e){return":"===e.charAt(5)&&"xlink"===e.slice(0,5)},bs=function(e){return ys(e)?e.slice(6,e.length):""},xs=function(e){return null==e||!1===e},Ts={svg:"http://www.w3.org/2000/svg",math:"http://www.w3.org/1998/Math/MathML"},Es=m("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot"),Ss=m("svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view",!0),Cs=function(e){return"pre"===e},As=function(e){return Es(e)||Ss(e)},Ps=Object.create(null),ws=m("text,number,password,search,email,tel,url"),Ms=Object.freeze({createElement:hi,createElementNS:di,createTextNode:fi,createComment:pi,insertBefore:mi,removeChild:gi,appendChild:vi,parentNode:_i,nextSibling:yi,tagName:bi,setTextContent:xi,setStyleScope:Ti}),Rs={create:function(e,t){Ei(t)},update:function(e,t){e.data.ref!==t.data.ref&&(Ei(e,!0),Ei(t))},destroy:function(e){Ei(e,!0)}},Os=new ha("",{},[]),Ds=["create","activate","update","remove","destroy"],Is={create:Pi,update:Pi,destroy:function(e){Pi(e,Os)}},Ls=Object.create(null),Bs=[Rs,Is],ks={create:Di,update:Di},Fs={create:Bi,update:Bi},Ns=/[\w).+\-_$\]]/,Vs="__r",zs="__c",Us=Ta&&!(Zo&&Number(Zo[1])<=53),Gs={create:mn,update:mn},Hs={create:gn,update:gn},js=_(function(e){var t={},i=/;(?![^(]*\))/g,n=/:(.+)/;return e.split(i).forEach(function(e){if(e){var i=e.split(n);i.length>1&&(t[i[0].trim()]=i[1].trim())}}),t}),Ws=/^--/,Xs=/\s*!important$/,Ys=function(e,t,i){if(Ws.test(t))e.style.setProperty(t,i);else if(Xs.test(i))e.style.setProperty(Io(t),i.replace(Xs,""),"important");else{var n=$s(t);if(Array.isArray(i))for(var r=0,o=i.length;rp?(h=n(i[v+1])?null:i[v+1].elm,_(e,h,i,f,v,o)):f>v&&b(e,t,d,p)}function E(e,t,i,n){for(var o=i;o\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,Wl=/^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,Xl="[a-zA-Z_][\\-\\.0-9_a-zA-Z"+Uo.source+"]*",Yl="((?:"+Xl+"\\:)?"+Xl+")",Kl=new RegExp("^<"+Yl),$l=/^\s*(\/?)>/,ql=new RegExp("^<\\/"+Yl+"[^>]*>"),Ql=/^]+>/i,Zl=/^",""":'"',"&":"&"," ":"\n"," ":"\t","'":"'"},nc=/&(?:lt|gt|quot|amp|#39);/g,rc=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,oc=m("pre,textarea",!0),ac=function(e,t){return e&&oc(e)&&"\n"===t[0]},sc=/^@|^v-on:/,lc=/^v-|^@|^:/,cc=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,uc=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,hc=/^\(|\)$/g,dc=/^\[.*\]$/,fc=/:(.*)$/,pc=/^:|^\.|^v-bind:/,mc=/\.[^.\]]+(?=[^\]]*$)/g,gc=/^v-slot(:|$)|^#/,vc=/[\r\n]/,_c=/\s+/g,yc=_(zl.decode),bc="_empty_",xc=/^xmlns:NS\d+/,Tc=/^NS\d+:/,Ec={preTransformNode:Ir},Sc=[Nl,Vl,Ec],Cc={model:an,text:Br,html:kr},Ac={expectHTML:!0,modules:Sc,directives:Cc,isPreTag:Cs,isUnaryTag:Ul,mustUseProp:fs,canBeLeftOpenTag:Gl,isReservedTag:As,getTagNamespace:li,staticKeys:function(e){return e.reduce(function(e,t){return e.concat(t.staticKeys||[])},[]).join(",")}(Sc)},Pc=_(Nr),wc=/^([\w$_]+|\([^)]*?\))\s*=>|^function\s*(?:[\w$]+)?\s*\(/,Mc=/\([^)]*?\);*$/,Rc=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,Oc={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},Dc={esc:["Esc","Escape"],tab:"Tab",enter:"Enter",space:[" ","Spacebar"],up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete","Del"]},Ic=function(e){return"if("+e+")return null;"},Lc={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:Ic("$event.target !== $event.currentTarget"),ctrl:Ic("!$event.ctrlKey"),shift:Ic("!$event.shiftKey"),alt:Ic("!$event.altKey"),meta:Ic("!$event.metaKey"),left:Ic("'button' in $event && $event.button !== 0"),middle:Ic("'button' in $event && $event.button !== 1"),right:Ic("'button' in $event && $event.button !== 2")},Bc={on:Yr,bind:Kr,cloak:S},kc=function(e){this.options=e,this.warn=e.warn||Ni,this.transforms=Vi(e.modules,"transformCode"),this.dataGenFns=Vi(e.modules,"genData"),this.directives=T(T({},Bc),e.directives);var t=e.isReservedTag||Bo;this.maybeComponent=function(e){return!!e.component||!t(e.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1},Fc=(new RegExp("\\b"+"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments".split(",").join("\\b|\\b")+"\\b"),new RegExp("\\b"+"delete,typeof,void".split(",").join("\\s*\\([^\\)]*\\)|\\b")+"\\s*\\([^\\)]*\\)"),function(e){return function(t){function i(i,n){var r=Object.create(t),o=[],a=[],s=function(e,t,i){(i?a:o).push(e)};if(n){n.modules&&(r.modules=(t.modules||[]).concat(n.modules)),n.directives&&(r.directives=T(Object.create(t.directives||null),n.directives));for(var l in n)"modules"!==l&&"directives"!==l&&(r[l]=n[l])}r.warn=s;var c=e(i.trim(),r);return c.errors=o,c.tips=a,c}return{compile:i,compileToFunctions:xo(i)}}}(function(e,t){var i=cr(e.trim(),t);!1!==t.optimize&&Fr(i,t);var n=$r(i,t);return{ast:i,render:n.render,staticRenderFns:n.staticRenderFns}})),Nc=Fc(Ac),Vc=(Nc.compile,Nc.compileToFunctions),zc=!!jo&&To(!1),Uc=!!jo&&To(!0),Gc=_(function(e){var t=ui(e);return t&&t.innerHTML}),Hc=jt.prototype.$mount;jt.prototype.$mount=function(e,t){if((e=e&&ui(e))===document.body||e===document.documentElement)return this;var i=this.$options;if(!i.render){var n=i.template;if(n)if("string"==typeof n)"#"===n.charAt(0)&&(n=Gc(n));else{if(!n.nodeType)return this;n=n.innerHTML}else e&&(n=Eo(e));if(n){var r=Vc(n,{outputSourceRange:!1,shouldDecodeNewlines:zc,shouldDecodeNewlinesForHref:Uc,delimiters:i.delimiters,comments:i.comments},this),o=r.render,a=r.staticRenderFns;i.render=o,i.staticRenderFns=a}}return Hc.call(this,e,t)},jt.compile=Vc,t.default=jt}.call(t,i(37),i(1043).setImmediate)},function(e,t,i){"use strict";var n=i(256),r=i(427),o=i(426),a=i(425),s=i(423),l=i(424);t.a={required:n.a,whitespace:r.a,type:o.a,range:a.a,enum:s.a,pattern:l.a}},function(e,t){var i=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=i)},function(e,t,i){var n=i(186)("wks"),r=i(138),o=i(32).Symbol,a="function"==typeof o;(e.exports=function(e){return n[e]||(n[e]=a&&o[e]||(a?o:r)("Symbol."+e))}).store=n},function(e,t,i){var n=i(17),r=i(86);e.exports=i(16)?function(e,t,i){return n.f(e,t,r(1,i))}:function(e,t,i){return e[t]=i,e}},function(e,t,i){var n=i(6),r=i(34),o=i(39),a=i(90)("src"),s=i(546),l=(""+s).split("toString");i(48).inspectSource=function(e){return s.call(e)},(e.exports=function(e,t,i,s){var c="function"==typeof i;c&&(o(i,"name")||r(i,"name",t)),e[t]!==i&&(c&&(o(i,a)||r(i,a,e[t]?""+e[t]:l.join(String(t)))),e===n?e[t]=i:s?e[t]?e[t]=i:r(e,t,i):(delete e[t],r(e,t,i)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[a]||s.call(this)})},function(e,t,i){var n=i(1),r=i(7),o=i(55),a=/"/g,s=function(e,t,i,n){var r=String(o(e)),s="<"+t;return""!==i&&(s+=" "+i+'="'+String(n).replace(a,""")+'"'),s+">"+r+""};e.exports=function(e,t){var i={};i[e]=t(s),n(n.P+n.F*r(function(){var t=""[e]('"');return t!==t.toLowerCase()||t.split('"').length>3}),"String",i)}},function(e,t){var i;i=function(){return this}();try{i=i||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(i=window)}e.exports=i},function(e,t,i){"use strict";function n(e){return"[object Array]"===E.call(e)}function r(e){return"[object ArrayBuffer]"===E.call(e)}function o(e){return"undefined"!=typeof FormData&&e instanceof FormData}function a(e){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function s(e){return"string"==typeof e}function l(e){return"number"==typeof e}function c(e){return void 0===e}function u(e){return null!==e&&"object"==typeof e}function h(e){return"[object Date]"===E.call(e)}function d(e){return"[object File]"===E.call(e)}function f(e){return"[object Blob]"===E.call(e)}function p(e){return"[object Function]"===E.call(e)}function m(e){return u(e)&&p(e.pipe)}function g(e){return"undefined"!=typeof URLSearchParams&&e instanceof URLSearchParams}function v(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function _(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function y(e,t){if(null!==e&&void 0!==e)if("object"==typeof e||n(e)||(e=[e]),n(e))for(var i=0,r=e.length;i0&&s>0&&!l&&(a=0),a<0&&s<0&&!c&&(s=0)),[a,s]}function r(e,t){var i=n(e,t),r=null!=t.getMin(),o=null!=t.getMax(),a=t.get("splitNumber");"log"===e.type&&(e.base=t.get("logBase"));var s=e.type;e.setExtent(i[0],i[1]),e.niceExtent({splitNumber:a,fixMin:r,fixMax:o,minInterval:"interval"===s||"time"===s?t.get("minInterval"):null,maxInterval:"interval"===s||"time"===s?t.get("maxInterval"):null});var l=t.get("interval");null!=l&&e.setInterval&&e.setInterval(l)}function o(e,t){if(t=t||e.get("type"))switch(t){case"category":return new f(e.getCategories(),[1/0,-1/0]);case"value":return new p;default:return(m.getClass(t)||p).create(e)}}function a(e){var t=e.scale.getExtent(),i=t[0],n=t[1];return!(i>0&&n>0||i<0&&n<0)}function s(e,t,i,n,r){var o,a=0,s=0,l=(n-r)/180*Math.PI,c=1;t.length>40&&(c=Math.floor(t.length/40));for(var u=0;u1?c:(a+1)*c-1}function l(e,t){var i=e.scale,n=i.getTicksLabels(),r=i.getTicks();return"string"==typeof t?(t=function(e){return function(t){return e.replace("{value}",null!=t?t:"")}}(t),h.map(n,t)):"function"==typeof t?h.map(r,function(i,n){return t(c(e,i),n)},this):n}function c(e,t){return"category"===e.type?e.scale.getLabel(t):t}var u=i(9),h=(u.__DEV__,i(0)),d=i(60),f=i(993),p=i(161),m=i(162),g=i(4);i(994),i(992),t.getScaleExtent=n,t.niceScaleExtent=r,t.createScaleByModel=o,t.ifAxisCrossZero=a,t.getAxisLabelInterval=s,t.getFormattedLabels=l,t.getAxisRawValue=c},function(e,t,i){function n(e,t){if("image"!==this.type){var i=this.style,n=this.shape;n&&"line"===n.symbolType?i.stroke=e:this.__isEmptyBrush?(i.stroke=e,i.fill=t||"#fff"):(i.fill&&(i.fill=e),i.stroke&&(i.stroke=e)),this.dirty(!1)}}function r(e,t,i,r,o,l,c){var u=0===e.indexOf("empty");u&&(e=e.substr(5,1).toLowerCase()+e.substr(6));var h;return h=0===e.indexOf("image://")?a.makeImage(e.slice(8),new s(t,i,r,o),c?"center":"cover"):0===e.indexOf("path://")?a.makePath(e.slice(7),{},new s(t,i,r,o),c?"center":"cover"):new m({shape:{symbolType:e,x:t,y:i,width:r,height:o}}),h.__isEmptyBrush=u,h.setColor=n,h.setColor(l),h}var o=i(0),a=i(3),s=i(18),l=a.extendShape({type:"triangle",shape:{cx:0,cy:0,width:0,height:0},buildPath:function(e,t){var i=t.cx,n=t.cy,r=t.width/2,o=t.height/2;e.moveTo(i,n-o),e.lineTo(i+r,n+o),e.lineTo(i-r,n+o),e.closePath()}}),c=a.extendShape({type:"diamond",shape:{cx:0,cy:0,width:0,height:0},buildPath:function(e,t){var i=t.cx,n=t.cy,r=t.width/2,o=t.height/2;e.moveTo(i,n-o),e.lineTo(i+r,n),e.lineTo(i,n+o),e.lineTo(i-r,n),e.closePath()}}),u=a.extendShape({type:"pin",shape:{x:0,y:0,width:0,height:0},buildPath:function(e,t){var i=t.x,n=t.y,r=t.width/5*3,o=Math.max(r,t.height),a=r/2,s=a*a/(o-a),l=n-o+a+s,c=Math.asin(s/a),u=Math.cos(c)*a,h=Math.sin(c),d=Math.cos(c),f=.6*a,p=.7*a;e.moveTo(i-u,l+s),e.arc(i,l,a,Math.PI-c,2*Math.PI+c),e.bezierCurveTo(i+u-h*f,l+s+d*f,i,n-p,i,n),e.bezierCurveTo(i,n-p,i-u+h*f,l+s+d*f,i-u,l+s),e.closePath()}}),h=a.extendShape({type:"arrow",shape:{x:0,y:0,width:0,height:0},buildPath:function(e,t){var i=t.height,n=t.width,r=t.x,o=t.y,a=n/3*2;e.moveTo(r,o),e.lineTo(r+a,o+i),e.lineTo(r,o+i/4*3),e.lineTo(r-a,o+i),e.lineTo(r,o),e.closePath()}}),d={line:a.Line,rect:a.Rect,roundRect:a.Rect,square:a.Rect,circle:a.Circle,diamond:c,pin:u,arrow:h,triangle:l},f={line:function(e,t,i,n,r){r.x1=e,r.y1=t+n/2,r.x2=e+i,r.y2=t+n/2},rect:function(e,t,i,n,r){r.x=e,r.y=t,r.width=i,r.height=n},roundRect:function(e,t,i,n,r){r.x=e,r.y=t,r.width=i,r.height=n,r.r=Math.min(i,n)/4},square:function(e,t,i,n,r){var o=Math.min(i,n);r.x=e,r.y=t,r.width=o,r.height=o},circle:function(e,t,i,n,r){r.cx=e+i/2,r.cy=t+n/2,r.r=Math.min(i,n)/2},diamond:function(e,t,i,n,r){r.cx=e+i/2,r.cy=t+n/2,r.width=i,r.height=n},pin:function(e,t,i,n,r){r.x=e+i/2,r.y=t+n/2,r.width=i,r.height=n},arrow:function(e,t,i,n,r){r.x=e+i/2,r.y=t+n/2,r.width=i,r.height=n},triangle:function(e,t,i,n,r){r.cx=e+i/2,r.cy=t+n/2,r.width=i,r.height=n}},p={};o.each(d,function(e,t){p[t]=new e});var m=a.extendShape({type:"symbol",shape:{symbolType:"",x:0,y:0,width:0,height:0},beforeBrush:function(){var e=this.style;"pin"===this.shape.symbolType&&"inside"===e.textPosition&&(e.textPosition=["50%","40%"],e.textAlign="center",e.textVerticalAlign="middle")},buildPath:function(e,t,i){var n=t.symbolType,r=p[n];"none"!==t.symbolType&&(r||(n="rect",r=p[n]),f[n](t.x,t.y,t.width,t.height,r.shape),r.buildPath(e,r.shape,i))}});t.createSymbol=r},function(e,t){function i(){var e=new u(6);return n(e),e}function n(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=1,e[4]=0,e[5]=0,e}function r(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e}function o(e,t,i){var n=t[0]*i[0]+t[2]*i[1],r=t[1]*i[0]+t[3]*i[1],o=t[0]*i[2]+t[2]*i[3],a=t[1]*i[2]+t[3]*i[3],s=t[0]*i[4]+t[2]*i[5]+t[4],l=t[1]*i[4]+t[3]*i[5]+t[5];return e[0]=n,e[1]=r,e[2]=o,e[3]=a,e[4]=s,e[5]=l,e}function a(e,t,i){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4]+i[0],e[5]=t[5]+i[1],e}function s(e,t,i){var n=t[0],r=t[2],o=t[4],a=t[1],s=t[3],l=t[5],c=Math.sin(i),u=Math.cos(i);return e[0]=n*u+a*c,e[1]=-n*c+a*u,e[2]=r*u+s*c,e[3]=-r*c+u*s,e[4]=u*o+c*l,e[5]=u*l-c*o,e}function l(e,t,i){var n=i[0],r=i[1];return e[0]=t[0]*n,e[1]=t[1]*r,e[2]=t[2]*n,e[3]=t[3]*r,e[4]=t[4]*n,e[5]=t[5]*r,e}function c(e,t){var i=t[0],n=t[2],r=t[4],o=t[1],a=t[3],s=t[5],l=i*a-o*n;return l?(l=1/l,e[0]=a*l,e[1]=-o*l,e[2]=-n*l,e[3]=i*l,e[4]=(n*s-a*r)*l,e[5]=(o*r-i*s)*l,e):null}var u="undefined"==typeof Float32Array?Array:Float32Array;t.create=i,t.identity=n,t.copy=r,t.mul=o,t.translate=a,t.rotate=s,t.scale=l,t.invert=c},function(e,t,i){var n=i(32),r=i(26),o=i(132),a=i(79),s=i(78),l=function(e,t,i){var c,u,h,d=e&l.F,f=e&l.G,p=e&l.S,m=e&l.P,g=e&l.B,v=e&l.W,_=f?r:r[t]||(r[t]={}),y=_.prototype,b=f?n:p?n[t]:(n[t]||{}).prototype;f&&(i=t);for(c in i)(u=!d&&b&&void 0!==b[c])&&s(_,c)||(h=u?b[c]:i[c],_[c]=f&&"function"!=typeof b[c]?i[c]:g&&u?o(h,n):v&&b[c]==h?function(e){var t=function(t,i,n){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,i)}return new e(t,i,n)}return e.apply(this,arguments)};return t.prototype=e.prototype,t}(h):m&&"function"==typeof h?o(Function.call,h):h,m&&((_.virtual||(_.virtual={}))[c]=h,e&l.R&&y&&!y[c]&&a(y,c,h)))};l.F=1,l.G=2,l.S=4,l.P=8,l.B=16,l.W=32,l.U=64,l.R=128,e.exports=l},function(e,t){var i={}.toString;e.exports=function(e){return i.call(e).slice(8,-1)}},function(e,t){var i=e.exports={version:"2.6.9"};"number"==typeof __e&&(__e=i)},function(e,t,i){var n=i(29);e.exports=function(e,t,i){if(n(e),void 0===t)return e;switch(i){case 1:return function(i){return e.call(t,i)};case 2:return function(i,n){return e.call(t,i,n)};case 3:return function(i,n,r){return e.call(t,i,n,r)}}return function(){return e.apply(t,arguments)}}},function(e,t,i){"use strict";var n=i(7);e.exports=function(e,t){return!!e&&n(function(){t?e.call(null,function(){},1):e.call(null)})}},function(e,t){var i=Math.ceil,n=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?n:i)(e)}},function(e,t,i){function n(e,t,i){function n(e,t,i){h[t]?e.otherDims[t]=i:(e.coordDim=t,e.coordDimIndex=i,g.set(t,!0))}function a(e,t,i){if(i||null!=t.get(e)){for(var n=0;null!=t.get(e+n);)n++;e+=n}return t.set(e,!0),e}t=t||[],i=i||{},e=(e||[]).slice();var f=(i.dimsDef||[]).slice(),p=o.createHashMap(i.encodeDef),m=o.createHashMap(),g=o.createHashMap(),v=[],_=i.dimCount;if(null==_){var y=r(t[0]);_=Math.max(o.isArray(y)&&y.length||1,e.length,f.length),l(e,function(e){var t=e.dimsDef;t&&(_=Math.max(_,t.length))})}for(var b=0;b<_;b++){var x=c(f[b])?{name:f[b]}:f[b]||{},T=x.name,E=v[b]={otherDims:{}};null!=T&&null==m.get(T)&&(E.name=E.tooltipName=T,m.set(T,b)),null!=x.type&&(E.type=x.type)}p.each(function(e,t){e=p.set(t,s(e).slice()),l(e,function(i,r){c(i)&&(i=m.get(i)),null!=i&&i<_&&(e[r]=i,n(v[i],t,r))})});var S=0;l(e,function(e,t){var i,e,r,a;c(e)?(i=e,e={}):(i=e.name,e=o.clone(e),r=e.dimsDef,a=e.otherDims,e.name=e.coordDim=e.coordDimIndex=e.dimsDef=e.otherDims=null);var h=s(p.get(i));if(!h.length)for(var d=0;d<(r&&r.length||1);d++){for(;Sx;x++)if((d||x in _)&&(m=_[x],g=y(m,x,v),e))if(i)T[x]=g;else if(g)switch(e){case 3:return!0;case 5:return m;case 6:return x;case 2:T.push(m)}else if(u)return!1;return h?-1:c||u?u:T}}},function(e,t){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},function(e,t,i){var n=i(1),r=i(48),o=i(7);e.exports=function(e,t){var i=(r.Object||{})[e]||Object[e],a={};a[e]=t(i),n(n.S+n.F*o(function(){i(1)}),"Object",a)}},function(e,t,i){var n=i(8);e.exports=function(e,t){if(!n(e))return e;var i,r;if(t&&"function"==typeof(i=e.toString)&&!n(r=i.call(e)))return r;if("function"==typeof(i=e.valueOf)&&!n(r=i.call(e)))return r;if(!t&&"function"==typeof(i=e.toString)&&!n(r=i.call(e)))return r;throw TypeError("Can't convert object to primitive value")}},function(e,t,i){function n(){this._coordinateSystems=[]}var r=i(0),o={};n.prototype={constructor:n,create:function(e,t){var i=[];r.each(o,function(n,r){var o=n.create(e,t);i=i.concat(o||[])}),this._coordinateSystems=i},update:function(e,t){r.each(this._coordinateSystems,function(i){i.update&&i.update(e,t)})},getCoordinateSystems:function(){return this._coordinateSystems.slice()}},n.register=function(e,t){o[e]=t},n.get=function(e){return o[e]};var a=n;e.exports=a},function(e,t,i){"use strict";function n(){}function r(e,t){return p.call(e,t)}function o(e,t){for(var i in t)e[i]=t[i];return e}function a(e){for(var t={},i=0;i0&&void 0!==arguments[0]?arguments[0]:"";return String(e).replace(/[|\\{}()[\]^$+*?.]/g,"\\$&")},t.arrayFindIndex=function(e,t){for(var i=0;i!==e.length;++i)if(t(e[i]))return i;return-1}),g=(t.arrayFind=function(e,t){var i=m(e,t);return-1!==i?e[i]:void 0},t.coerceTruthyValueToArray=function(e){return Array.isArray(e)?e:e?[e]:[]},t.isIE=function(){return!d.default.prototype.$isServer&&!isNaN(Number(document.documentMode))},t.isEdge=function(){return!d.default.prototype.$isServer&&navigator.userAgent.indexOf("Edge")>-1},t.isFirefox=function(){return!d.default.prototype.$isServer&&!!window.navigator.userAgent.match(/firefox/i)},t.autoprefixer=function(e){if("object"!==(void 0===e?"undefined":u(e)))return e;var t=["ms-","webkit-"];return["transform","transition","animation"].forEach(function(i){var n=e[i];i&&n&&t.forEach(function(t){e[t+i]=n})}),e},t.kebabCase=function(e){var t=/([^-])([A-Z])/g;return e.replace(t,"$1-$2").replace(t,"$1-$2").toLowerCase()},t.capitalize=function(e){return(0,f.isString)(e)?e.charAt(0).toUpperCase()+e.slice(1):e},t.looseEqual=function(e,t){var i=(0,f.isObject)(e),n=(0,f.isObject)(t);return i&&n?JSON.stringify(e)===JSON.stringify(t):!i&&!n&&String(e)===String(t)}),v=t.arrayEquals=function(e,t){if(e=e||[],t=t||[],e.length!==t.length)return!1;for(var i=0;iR&&(M=0,w={}),M++,w[i]=r,r}function o(e,t,i,n,r,o,l){return o?s(e,t,i,n,r,o,l):a(e,t,i,n,r,l)}function a(e,t,i,n,o,a){var s=v(e,t,o,a),u=r(e,t);o&&(u+=o[1]+o[3]);var h=s.outerHeight,d=l(0,u,i),f=c(0,h,n),p=new x(d,f,u,h);return p.lineHeight=s.lineHeight,p}function s(e,t,i,n,r,o,a){var s=_(e,{rich:o,truncate:a,font:t,textAlign:i,textPadding:r}),u=s.outerWidth,h=s.outerHeight,d=l(0,u,i),f=c(0,h,n);return new x(d,f,u,h)}function l(e,t,i){return"right"===i?e-=t:"center"===i&&(e-=t/2),e}function c(e,t,i){return"middle"===i?e-=t/2:"bottom"===i&&(e-=t),e}function u(e,t,i){var n=t.x,r=t.y,o=t.height,a=t.width,s=o/2,l="left",c="top";switch(e){case"left":n-=i,r+=s,l="right",c="middle";break;case"right":n+=i+a,r+=s,c="middle";break;case"top":n+=a/2,r-=i,l="center",c="bottom";break;case"bottom":n+=a/2,r+=o+i,l="center";break;case"inside":n+=a/2,r+=s,l="center",c="middle";break;case"insideLeft":n+=i,r+=s,c="middle";break;case"insideRight":n+=a-i,r+=s,l="right",c="middle";break;case"insideTop":n+=a/2,r+=i,l="center";break;case"insideBottom":n+=a/2,r+=o-i,l="center",c="bottom";break;case"insideTopLeft":n+=i,r+=i;break;case"insideTopRight":n+=a-i,r+=i,l="right";break;case"insideBottomLeft":n+=i,r+=o-i,c="bottom";break;case"insideBottomRight":n+=a-i,r+=o-i,l="right",c="bottom"}return{x:n,y:r,textAlign:l,textVerticalAlign:c}}function h(e,t,i,n,r){if(!t)return"";var o=(e+"").split("\n");r=d(t,i,n,r);for(var a=0,s=o.length;a=a;l++)s-=a;var c=r(i);return c>s&&(i="",c=0),s=e-c,n.ellipsis=i,n.ellipsisWidth=c,n.contentWidth=s,n.containerWidth=e,n}function f(e,t){var i=t.containerWidth,n=t.font,o=t.contentWidth;if(!i)return"";var a=r(e,n);if(a<=i)return e;for(var s=0;;s++){if(a<=o||s>=t.maxIterations){e+=t.ellipsis;break}var l=0===s?p(e,o,t.ascCharWidth,t.cnCharWidth):a>0?Math.floor(e.length*o/a):0;e=e.substr(0,l),a=r(e,n)}return""===e&&(e=t.placeholder),e}function p(e,t,i,n){for(var r=0,o=0,a=e.length;ol)e="",o=[];else if(null!=c)for(var u=d(c-(i?i[1]+i[3]:0),t,n.ellipsis,{minChar:n.minChar,placeholder:n.placeholder}),h=0,p=o.length;ho&&y(i,e.substring(o,a)),y(i,n[2],n[1]),o=O.lastIndex}og)return{lines:[],width:0,height:0};S.textWidth=r(S.text,M);var D=C.textWidth,I=null==D||"auto"===D;if("string"==typeof D&&"%"===D.charAt(D.length-1))S.percentWidth=D,u.push(S),D=0;else{if(I){D=S.textWidth;var L=C.textBackgroundColor,B=L&&L.image;B&&(B=T.findExistImage(B),T.isImageReady(B)&&(D=Math.max(D,B.width*R/B.height)))}var k=w?w[1]+w[3]:0;D+=k;var F=null!=p?p-x:null;null!=F&&Fi;)r[i]=t[i++];return r},Me=function(e,t,i){U(e,t,{get:function(){return this._d[i]}})},Re=function(e){var t,i,n,r,o,a,s=T(e),l=arguments.length,u=l>1?arguments[1]:void 0,h=void 0!==u,d=P(s);if(void 0!=d&&!E(d)){for(a=d.call(s),n=[],t=0;!(o=a.next()).done;t++)n.push(o.value);s=n}for(h&&l>2&&(u=c(u,arguments[2],2)),t=0,i=m(s.length),r=Ae(this,i);i>t;t++)r[t]=h?u(s[t],t):s[t];return r},Oe=function(){for(var e=0,t=arguments.length,i=Ae(this,t);t>e;)i[e]=arguments[e++];return i},De=!!W&&o(function(){fe.call(new W(1))}),Ie=function(){return fe.apply(De?he.call(Ce(this)):Ce(this),arguments)},Le={copyWithin:function(e,t){return N.call(Ce(this),e,t,arguments.length>2?arguments[2]:void 0)},every:function(e){return Z(Ce(this),e,arguments.length>1?arguments[1]:void 0)},fill:function(e){return F.apply(Ce(this),arguments)},filter:function(e){return Pe(this,q(Ce(this),e,arguments.length>1?arguments[1]:void 0))},find:function(e){return J(Ce(this),e,arguments.length>1?arguments[1]:void 0)},findIndex:function(e){return ee(Ce(this),e,arguments.length>1?arguments[1]:void 0)},forEach:function(e){$(Ce(this),e,arguments.length>1?arguments[1]:void 0)},indexOf:function(e){return ie(Ce(this),e,arguments.length>1?arguments[1]:void 0)},includes:function(e){return te(Ce(this),e,arguments.length>1?arguments[1]:void 0)},join:function(e){return ce.apply(Ce(this),arguments)},lastIndexOf:function(e){return ae.apply(Ce(this),arguments)},map:function(e){return xe(Ce(this),e,arguments.length>1?arguments[1]:void 0)},reduce:function(e){return se.apply(Ce(this),arguments)},reduceRight:function(e){return le.apply(Ce(this),arguments)},reverse:function(){for(var e,t=this,i=Ce(t).length,n=Math.floor(i/2),r=0;r1?arguments[1]:void 0)},sort:function(e){return ue.call(Ce(this),e)},subarray:function(e,t){var i=Ce(this),n=i.length,r=v(e,n);return new(D(i,i[ve]))(i.buffer,i.byteOffset+r*i.BYTES_PER_ELEMENT,m((void 0===t?n:v(t,n))-r))}},Be=function(e,t){return Pe(this,he.call(Ce(this),e,t))},ke=function(e){Ce(this);var t=Se(arguments[1],1),i=this.length,n=T(e),r=m(n.length),o=0;if(r+t>i)throw H("Wrong length!");for(;o255?255:255&n),r.v[f](i*t+r.o,n,Te)},M=function(e,t){U(e,t,{get:function(){return P(this,t)},set:function(e){return w(this,t,e)},enumerable:!0})};y?(p=i(function(e,i,n,r){u(e,p,c,"_d");var o,a,s,l,h=0,f=0;if(x(i)){if(!(i instanceof Y||"ArrayBuffer"==(l=b(i))||"SharedArrayBuffer"==l))return ye in i?we(p,i):Re.call(p,i);o=i,f=Se(n,t);var v=i.byteLength;if(void 0===r){if(v%t)throw H("Wrong length!");if((a=v-f)<0)throw H("Wrong length!")}else if((a=m(r)*t)+f>v)throw H("Wrong length!");s=a/t}else s=g(i),a=s*t,o=new Y(a);for(d(e,"_d",{b:o,o:f,l:a,e:s,v:new K(o)});h-1}function r(e,t){if(e){for(var i=e.className,r=(t||"").split(" "),o=0,a=r.length;on.top&&i.right>n.left&&i.left=0){var o="touchend"!=n?t.targetTouches[0]:t.changedTouches[0];o&&r(e,o,t,i)}else r(e,t,t,i),t.zrDelta=t.wheelDelta?t.wheelDelta/120:-(t.detail||0)/3;var a=t.button;return null==t.which&&void 0!==a&&f.test(t.type)&&(t.which=1&a?1:2&a?3:4&a?2:0),t}function s(e,t,i){d?e.addEventListener(t,i):e.attachEvent("on"+t,i)}function l(e,t,i){d?e.removeEventListener(t,i):e.detachEvent("on"+t,i)}function c(e){return e.which>1}var u=i(98);t.Dispatcher=u;var h=i(24),d="undefined"!=typeof window&&!!window.addEventListener,f=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,p=d?function(e){e.preventDefault(),e.stopPropagation(),e.cancelBubble=!0}:function(e){e.returnValue=!1,e.cancelBubble=!0};t.clientToLocal=r,t.normalizeEvent=a,t.addEventListener=s,t.removeEventListener=l,t.stop=p,t.notLeftMouse=c},function(e,t,i){function n(e){return e=Math.round(e),e<0?0:e>255?255:e}function r(e){return e=Math.round(e),e<0?0:e>360?360:e}function o(e){return e<0?0:e>1?1:e}function a(e){return n(e.length&&"%"===e.charAt(e.length-1)?parseFloat(e)/100*255:parseInt(e,10))}function s(e){return o(e.length&&"%"===e.charAt(e.length-1)?parseFloat(e)/100:parseFloat(e))}function l(e,t,i){return i<0?i+=1:i>1&&(i-=1),6*i<1?e+(t-e)*i*6:2*i<1?t:3*i<2?e+(t-e)*(2/3-i)*6:e}function c(e,t,i){return e+(t-e)*i}function u(e,t,i,n,r){return e[0]=t,e[1]=i,e[2]=n,e[3]=r,e}function h(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e}function d(e,t){A&&h(A,t),A=C.put(e,A||t.slice())}function f(e,t){if(e){t=t||[];var i=C.get(e);if(i)return h(t,i);e+="";var n=e.replace(/ /g,"").toLowerCase();if(n in S)return h(t,S[n]),d(e,t),t;if("#"!==n.charAt(0)){var r=n.indexOf("("),o=n.indexOf(")");if(-1!==r&&o+1===n.length){var l=n.substr(0,r),c=n.substr(r+1,o-(r+1)).split(","),f=1;switch(l){case"rgba":if(4!==c.length)return void u(t,0,0,0,1);f=s(c.pop());case"rgb":return 3!==c.length?void u(t,0,0,0,1):(u(t,a(c[0]),a(c[1]),a(c[2]),f),d(e,t),t);case"hsla":return 4!==c.length?void u(t,0,0,0,1):(c[3]=s(c[3]),p(c,t),d(e,t),t);case"hsl":return 3!==c.length?void u(t,0,0,0,1):(p(c,t),d(e,t),t);default:return}}u(t,0,0,0,1)}else{if(4===n.length){var m=parseInt(n.substr(1),16);return m>=0&&m<=4095?(u(t,(3840&m)>>4|(3840&m)>>8,240&m|(240&m)>>4,15&m|(15&m)<<4,1),d(e,t),t):void u(t,0,0,0,1)}if(7===n.length){var m=parseInt(n.substr(1),16);return m>=0&&m<=16777215?(u(t,(16711680&m)>>16,(65280&m)>>8,255&m,1),d(e,t),t):void u(t,0,0,0,1)}}}}function p(e,t){var i=(parseFloat(e[0])%360+360)%360/360,r=s(e[1]),o=s(e[2]),a=o<=.5?o*(r+1):o+r-o*r,c=2*o-a;return t=t||[],u(t,n(255*l(c,a,i+1/3)),n(255*l(c,a,i)),n(255*l(c,a,i-1/3)),1),4===e.length&&(t[3]=e[3]),t}function m(e){if(e){var t,i,n=e[0]/255,r=e[1]/255,o=e[2]/255,a=Math.min(n,r,o),s=Math.max(n,r,o),l=s-a,c=(s+a)/2;if(0===l)t=0,i=0;else{i=c<.5?l/(s+a):l/(2-s-a);var u=((s-n)/6+l/2)/l,h=((s-r)/6+l/2)/l,d=((s-o)/6+l/2)/l;n===s?t=d-h:r===s?t=1/3+u-d:o===s&&(t=2/3+h-u),t<0&&(t+=1),t>1&&(t-=1)}var f=[360*t,i,c];return null!=e[3]&&f.push(e[3]),f}}function g(e,t){var i=f(e);if(i){for(var n=0;n<3;n++)i[n]=t<0?i[n]*(1-t)|0:(255-i[n])*t+i[n]|0;return T(i,4===i.length?"rgba":"rgb")}}function v(e){var t=f(e);if(t)return((1<<24)+(t[0]<<16)+(t[1]<<8)+ +t[2]).toString(16).slice(1)}function _(e,t,i){if(t&&t.length&&e>=0&&e<=1){i=i||[];var r=e*(t.length-1),a=Math.floor(r),s=Math.ceil(r),l=t[a],u=t[s],h=r-a;return i[0]=n(c(l[0],u[0],h)),i[1]=n(c(l[1],u[1],h)),i[2]=n(c(l[2],u[2],h)),i[3]=o(c(l[3],u[3],h)),i}}function y(e,t,i){if(t&&t.length&&e>=0&&e<=1){var r=e*(t.length-1),a=Math.floor(r),s=Math.ceil(r),l=f(t[a]),u=f(t[s]),h=r-a,d=T([n(c(l[0],u[0],h)),n(c(l[1],u[1],h)),n(c(l[2],u[2],h)),o(c(l[3],u[3],h))],"rgba");return i?{color:d,leftIndex:a,rightIndex:s,value:r}:d}}function b(e,t,i,n){if(e=f(e))return e=m(e),null!=t&&(e[0]=r(t)),null!=i&&(e[1]=s(i)),null!=n&&(e[2]=s(n)),T(p(e),"rgba")}function x(e,t){if((e=f(e))&&null!=t)return e[3]=o(t),T(e,"rgba")}function T(e,t){if(e&&e.length){var i=e[0]+","+e[1]+","+e[2];return"rgba"!==t&&"hsva"!==t&&"hsla"!==t||(i+=","+e[3]),t+"("+i+")"}}var E=i(387),S={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]},C=new E(20),A=null,P=_,w=y;t.parse=f,t.lift=g,t.toHex=v,t.fastLerp=_,t.fastMapToColor=P,t.lerp=y,t.mapToColor=w,t.modifyHSL=b,t.modifyAlpha=x,t.stringify=T},function(e,t,i){var n=i(68),r=i(267),o=i(188),a=Object.defineProperty;t.f=i(53)?Object.defineProperty:function(e,t,i){if(n(e),t=o(t,!0),n(i),r)try{return a(e,t,i)}catch(e){}if("get"in i||"set"in i)throw TypeError("Accessors not supported!");return"value"in i&&(e[t]=i.value),e}},function(e,t,i){var n=i(80);e.exports=function(e){if(!n(e))throw TypeError(e+" is not an object!");return e}},function(e,t,i){var n=i(13)("unscopables"),r=Array.prototype;void 0==r[n]&&i(34)(r,n,{}),e.exports=function(e){r[n][e]=!0}},function(e,t){e.exports=!1},function(e,t,i){var n=i(90)("meta"),r=i(8),o=i(39),a=i(17).f,s=0,l=Object.isExtensible||function(){return!0},c=!i(7)(function(){return l(Object.preventExtensions({}))}),u=function(e){a(e,n,{value:{i:"O"+ ++s,w:{}}})},h=function(e,t){if(!r(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!o(e,n)){if(!l(e))return"F";if(!t)return"E";u(e)}return e[n].i},d=function(e,t){if(!o(e,n)){if(!l(e))return!0;if(!t)return!1;u(e)}return e[n].w},f=function(e){return c&&p.NEED&&l(e)&&!o(e,n)&&u(e),e},p=e.exports={KEY:n,NEED:!1,fastKey:h,getWeak:d,onFreeze:f}},function(e,t,i){function n(e){for(var t=0;t=0&&r(e)?function(e,t,i,n){return g(e)&&(b.hasItemOption=!0),n===y?i:m(p(e),f[n])}:function(e,t,i,n){var r=p(e),o=m(r&&r[n],f[n]);g(e)&&(b.hasItemOption=!0);var a=c&&c.categoryAxesModels;return a&&a[t]&&"string"==typeof o&&(T[t]=T[t]||a[t].getCategories(),(o=u.indexOf(T[t],o))<0&&!isNaN(o)&&(o=+o)),o};return b.hasItemOption=!1,b.initData(e,x,E),b}function a(e){return"category"!==e&&"time"!==e}function s(e){return"category"===e?"ordinal":"time"===e?"time":"float"}function l(e,t){var i,n=[],r=e&&e.dimensions[e.categoryIndex];if(r&&(i=e.categoryAxesModels[r.name]),i){var o=i.getCategories();if(o){var a=t.length;if(u.isArray(t[0])&&t[0].length>1){n=[];for(var s=0;s=i&&e<=n},containData:function(e){return this.contain(this.dataToCoord(e))},getExtent:function(){return this._extent.slice()},getPixelPrecision:function(e){return o.getPixelPrecision(e||this.scale.getExtent(),this._extent)},setExtent:function(e,t){var i=this._extent;i[0]=e,i[1]=t},dataToCoord:function(e,t){var i=this._extent,r=this.scale;return e=r.normalize(e),this.onBand&&"ordinal"===r.type&&(i=i.slice(),n(i,r.count())),s(e,l,i,t)},coordToData:function(e,t){var i=this._extent,r=this.scale;this.onBand&&"ordinal"===r.type&&(i=i.slice(),n(i,r.count()));var o=s(e,i,l,t);return this.scale.scale(o)},pointToData:function(e,t){},getTicksCoords:function(e){if(this.onBand&&!e){for(var t=this.getBands(),i=[],n=0;n-T&&eT||e<-T}function o(e,t,i,n,r){var o=1-r;return o*o*(o*e+3*r*t)+r*r*(r*n+3*o*i)}function a(e,t,i,n,r){var o=1-r;return 3*(((t-e)*o+2*(i-t)*r)*o+(n-i)*r*r)}function s(e,t,i,r,o,a){var s=r+3*(t-i)-e,l=3*(i-2*t+e),c=3*(t-e),u=e-o,h=l*l-3*s*c,d=l*c-9*s*u,f=c*c-3*l*u,p=0;if(n(h)&&n(d))if(n(l))a[0]=0;else{var m=-c/l;m>=0&&m<=1&&(a[p++]=m)}else{var g=d*d-4*h*f;if(n(g)){var v=d/h,m=-l/s+v,_=-v/2;m>=0&&m<=1&&(a[p++]=m),_>=0&&_<=1&&(a[p++]=_)}else if(g>0){var y=x(g),T=h*l+1.5*s*(-d+y),E=h*l+1.5*s*(-d-y);T=T<0?-b(-T,C):b(T,C),E=E<0?-b(-E,C):b(E,C);var m=(-l-(T+E))/(3*s);m>=0&&m<=1&&(a[p++]=m)}else{var A=(2*h*l-3*s*d)/(2*x(h*h*h)),P=Math.acos(A)/3,w=x(h),M=Math.cos(P),m=(-l-2*w*M)/(3*s),_=(-l+w*(M+S*Math.sin(P)))/(3*s),R=(-l+w*(M-S*Math.sin(P)))/(3*s);m>=0&&m<=1&&(a[p++]=m),_>=0&&_<=1&&(a[p++]=_),R>=0&&R<=1&&(a[p++]=R)}}return p}function l(e,t,i,o,a){var s=6*i-12*t+6*e,l=9*t+3*o-3*e-9*i,c=3*t-3*e,u=0;if(n(l)){if(r(s)){var h=-c/s;h>=0&&h<=1&&(a[u++]=h)}}else{var d=s*s-4*l*c;if(n(d))a[0]=-s/(2*l);else if(d>0){var f=x(d),h=(-s+f)/(2*l),p=(-s-f)/(2*l);h>=0&&h<=1&&(a[u++]=h),p>=0&&p<=1&&(a[u++]=p)}}return u}function c(e,t,i,n,r,o){var a=(t-e)*r+e,s=(i-t)*r+t,l=(n-i)*r+i,c=(s-a)*r+a,u=(l-s)*r+s,h=(u-c)*r+c;o[0]=e,o[1]=a,o[2]=c,o[3]=h,o[4]=h,o[5]=u,o[6]=l,o[7]=n}function u(e,t,i,n,r,a,s,l,c,u,h){var d,f,p,m,g,v=.005,_=1/0;A[0]=c,A[1]=u;for(var b=0;b<1;b+=.05)P[0]=o(e,i,r,s,b),P[1]=o(t,n,a,l,b),(m=y(A,P))<_&&(d=b,_=m);_=1/0;for(var T=0;T<32&&!(v=0&&m<_?(d=f,_=m):(w[0]=o(e,i,r,s,p),w[1]=o(t,n,a,l,p),g=y(w,A),p<=1&&g<_?(d=p,_=g):v*=.5);return h&&(h[0]=o(e,i,r,s,d),h[1]=o(t,n,a,l,d)),x(_)}function h(e,t,i,n){var r=1-n;return r*(r*e+2*n*t)+n*n*i}function d(e,t,i,n){return 2*((1-n)*(t-e)+n*(i-t))}function f(e,t,i,o,a){var s=e-2*t+i,l=2*(t-e),c=e-o,u=0;if(n(s)){if(r(l)){var h=-c/l;h>=0&&h<=1&&(a[u++]=h)}}else{var d=l*l-4*s*c;if(n(d)){var h=-l/(2*s);h>=0&&h<=1&&(a[u++]=h)}else if(d>0){var f=x(d),h=(-l+f)/(2*s),p=(-l-f)/(2*s);h>=0&&h<=1&&(a[u++]=h),p>=0&&p<=1&&(a[u++]=p)}}return u}function p(e,t,i){var n=e+i-2*t;return 0===n?.5:(e-t)/n}function m(e,t,i,n,r){var o=(t-e)*n+e,a=(i-t)*n+t,s=(a-o)*n+o;r[0]=e,r[1]=o,r[2]=s,r[3]=s,r[4]=a,r[5]=i}function g(e,t,i,n,r,o,a,s,l){var c,u=.005,d=1/0;A[0]=a,A[1]=s;for(var f=0;f<1;f+=.05){P[0]=h(e,i,r,f),P[1]=h(t,n,o,f);var p=y(A,P);p=0&&py;y++)if((g=t?_(a(p=e[y])[0],p[1]):_(e[y]))===c||g===u)return g}else for(m=v.call(e);!(p=m.next()).done;)if((g=r(m,_,p.value,t))===c||g===u)return g};t.BREAK=c,t.RETURN=u},function(e,t,i){var n=i(5),r=i(298),o=i(196),a=i(209)("IE_PROTO"),s=function(){},l=function(){var e,t=i(195)("iframe"),n=o.length;for(t.style.display="none",i(198).appendChild(t),t.src="javascript:",e=t.contentWindow.document,e.open(),e.write("