@albi_scando/as-design-system-threejs-lib 1.1.4 → 1.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/as-design-system-threejs-lib.es.js +5577 -6118
- package/dist/as-design-system-threejs-lib.umd.js +192 -190
- package/dist/types/web-components/language-picker/component.d.ts +43 -23
- package/dist/types/web-components/language-picker/main.d.ts +1 -1
- package/dist/types/web-components/language-picker/observed-attributes.const.d.ts +7 -0
- package/dist/types/web-components/theme-picker/component.d.ts +32 -28
- package/dist/types/web-components/theme-picker/default-values.const.d.ts +5 -0
- package/dist/types/web-components/theme-picker/main.d.ts +1 -1
- package/dist/types/web-components/theme-picker/observed-attributes.const.d.ts +7 -0
- package/package.json +5 -5
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
(function(ti,ws){typeof exports=="object"&&typeof module<"u"?ws(exports):typeof define=="function"&&define.amd?define(["exports"],ws):(ti=typeof globalThis<"u"?globalThis:ti||self,ws(ti["as-design-system-threejs-lib"]={}))})(this,(function(ti){"use strict";const ws="as-design-system-threejs-lib";class dc{constructor(t=new Map){this.registerAllComponents(t)}registerAllComponents(t){Array.from(t.entries()).forEach(([e,i])=>{this.registerComponent(e,i)})}registerComponent(t,e){customElements.get(t)===void 0?(customElements.define(t,e),console.log(`Registered Web Component: ${t}`)):console.warn(`Web Component "${t}" is already registered.`)}}const la={LANGUAGE_CHANGE_CONFIRMED:"language-change-confirmed",THEME_CHANGE_CONFIRMED:"theme-change-confirmed"},De={ENGLISH_UNITED_KINGDOM:"English",ENGLISH_UNITED_STATES:"English",ENGLISH_AUSTRALIA:"English",FRENCH:"French",GERMAN_GERMANY:"German",GERMAN_SWITZERLAND:"German",HINDI_INDIA:"Hindi",ITALIAN:"Italian",JAPANESE_JAPAN:"Japanese",PORTUGUESE_BRAZILIAN:"Portuguese",PORTUGUESE_PORTUGAL:"Portuguese",RUSSIAN:"Russian",SPANISH_SPAIN:"Spanish",CHINESE_CHINA:"Chinese"},Le={ENGLISH_UNITED_KINGDOM:"English",ENGLISH_UNITED_STATES:"English",ENGLISH_AUSTRALIA:"English",FRENCH:"Français",GERMAN_GERMANY:"Deutsch",GERMAN_SWITZERLAND:"Deutsch",HINDI_INDIA:"हिन्दी",ITALIAN:"Italiano",JAPANESE_JAPAN:"日本語",PORTUGUESE_BRAZILIAN:"Português",PORTUGUESE_PORTUGAL:"Português",RUSSIAN:"Русский",SPANISH_SPAIN:"Español",CHINESE_CHINA:"中文"},_t={ENGLISH_UNITED_KINGDOM:"en-UK",ENGLISH_UNITED_STATES:"en-US",ENGLISH_AUSTRALIA:"en-AU",FRENCH:"fr-FR",GERMAN_GERMANY:"de-DE",GERMAN_SWITZERLAND:"de-CH",HINDI_INDIA:"hi-IN",ITALIAN:"it-IT",JAPANESE_JAPAN:"ja-JP",PORTUGUESE_BRAZILIAN:"br-BR",PORTUGUESE_PORTUGAL:"pt-PT",RUSSIAN:"ru-RU",SPANISH_SPAIN:"es-ES",CHINESE_CHINA:"zh-CN"},Ne={ENGLISH_UNITED_KINGDOM:"English (United Kingdom)",ENGLISH_UNITED_STATES:"English (United States)",ENGLISH_AUSTRALIA:"English (Australia)",FRENCH:"French",GERMAN_GERMANY:"German (Germany)",GERMAN_SWITZERLAND:"German (Switzerland)",HINDI_INDIA:"Hindi (India)",ITALIAN:"Italian",JAPANESE_JAPAN:"Japanese (Japan)",PORTUGUESE_BRAZILIAN:"Portuguese (Brazil)",PORTUGUESE_PORTUGAL:"Portuguese (Portugal)",RUSSIAN:"Russian",SPANISH_SPAIN:"Spanish (Spain)",CHINESE_CHINA:"Chinese (China)"},jt={ENGLISH_UNITED_KINGDOM:"ENGLISH_UNITED_KINGDOM",ENGLISH_UNITED_STATES:"ENGLISH_UNITED_STATES",ENGLISH_AUSTRALIA:"ENGLISH_AUSTRALIA",FRENCH:"FRENCH",GERMAN_GERMANY:"GERMAN_GERMANY",GERMAN_SWITZERLAND:"GERMAN_SWITZERLAND",HINDI_INDIA:"HINDI_INDIA",ITALIAN:"ITALIAN",JAPANESE_JAPAN:"JAPANESE_JAPAN",PORTUGUESE_BRAZILIAN:"PORTUGUESE_BRAZILIAN",PORTUGUESE_PORTUGAL:"PORTUGUESE_PORTUGAL",RUSSIAN:"RUSSIAN",SPANISH_SPAIN:"SPANISH_SPAIN",CHINESE_CHINA:"CHINESE_CHINA"},ha=new Map([[jt.ENGLISH_UNITED_KINGDOM,{autonyms:Le.ENGLISH_UNITED_KINGDOM,id:jt.ENGLISH_UNITED_KINGDOM,isoCode:_t.ENGLISH_UNITED_KINGDOM,language:De.ENGLISH_UNITED_KINGDOM,name:Ne.ENGLISH_UNITED_KINGDOM,value:_t.ENGLISH_UNITED_KINGDOM}],[jt.ENGLISH_UNITED_STATES,{autonyms:Le.ENGLISH_UNITED_STATES,id:jt.ENGLISH_UNITED_STATES,isoCode:_t.ENGLISH_UNITED_STATES,language:De.ENGLISH_UNITED_STATES,name:Ne.ENGLISH_UNITED_STATES,value:_t.ENGLISH_UNITED_STATES}],[jt.ENGLISH_AUSTRALIA,{autonyms:Le.ENGLISH_AUSTRALIA,id:jt.ENGLISH_AUSTRALIA,isoCode:_t.ENGLISH_AUSTRALIA,language:De.ENGLISH_AUSTRALIA,name:Ne.ENGLISH_AUSTRALIA,value:_t.ENGLISH_AUSTRALIA}],[jt.FRENCH,{autonyms:Le.FRENCH,id:jt.FRENCH,isoCode:_t.FRENCH,language:De.FRENCH,name:Ne.FRENCH,value:_t.FRENCH}],[jt.GERMAN_GERMANY,{autonyms:Le.GERMAN_GERMANY,id:jt.GERMAN_GERMANY,isoCode:_t.GERMAN_GERMANY,language:De.GERMAN_GERMANY,name:Ne.GERMAN_GERMANY,value:_t.GERMAN_GERMANY}],[jt.GERMAN_SWITZERLAND,{autonyms:Le.GERMAN_SWITZERLAND,id:jt.GERMAN_SWITZERLAND,isoCode:_t.GERMAN_SWITZERLAND,language:De.GERMAN_SWITZERLAND,name:Ne.GERMAN_SWITZERLAND,value:_t.GERMAN_SWITZERLAND}],[jt.HINDI_INDIA,{autonyms:Le.HINDI_INDIA,id:jt.HINDI_INDIA,isoCode:_t.HINDI_INDIA,language:De.HINDI_INDIA,name:Ne.HINDI_INDIA,value:_t.HINDI_INDIA}],[jt.ITALIAN,{autonyms:Le.ITALIAN,id:jt.ITALIAN,isoCode:_t.ITALIAN,language:De.ITALIAN,name:Ne.ITALIAN,value:_t.ITALIAN}],[jt.JAPANESE_JAPAN,{autonyms:Le.JAPANESE_JAPAN,id:jt.JAPANESE_JAPAN,isoCode:_t.JAPANESE_JAPAN,language:De.JAPANESE_JAPAN,name:Ne.JAPANESE_JAPAN,value:_t.JAPANESE_JAPAN}],[jt.PORTUGUESE_BRAZILIAN,{autonyms:Le.PORTUGUESE_BRAZILIAN,id:jt.PORTUGUESE_BRAZILIAN,isoCode:_t.PORTUGUESE_BRAZILIAN,language:De.PORTUGUESE_BRAZILIAN,name:Ne.PORTUGUESE_BRAZILIAN,value:_t.PORTUGUESE_BRAZILIAN}],[jt.PORTUGUESE_PORTUGAL,{autonyms:Le.PORTUGUESE_PORTUGAL,id:jt.PORTUGUESE_PORTUGAL,isoCode:_t.PORTUGUESE_PORTUGAL,language:De.PORTUGUESE_PORTUGAL,name:Ne.PORTUGUESE_PORTUGAL,value:_t.PORTUGUESE_PORTUGAL}],[jt.RUSSIAN,{autonyms:Le.RUSSIAN,id:jt.RUSSIAN,isoCode:_t.RUSSIAN,language:De.RUSSIAN,name:Ne.RUSSIAN,value:_t.RUSSIAN}],[jt.SPANISH_SPAIN,{autonyms:Le.SPANISH_SPAIN,id:jt.SPANISH_SPAIN,isoCode:_t.SPANISH_SPAIN,language:De.SPANISH_SPAIN,name:Ne.SPANISH_SPAIN,value:_t.SPANISH_SPAIN}],[jt.CHINESE_CHINA,{autonyms:Le.CHINESE_CHINA,id:jt.CHINESE_CHINA,isoCode:_t.CHINESE_CHINA,language:De.CHINESE_CHINA,name:Ne.CHINESE_CHINA,value:_t.CHINESE_CHINA}]]);`${btoa({CUSTOM_CROSSHAIR:`<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
|
|
2
2
|
<!-- White border (underneath) -->
|
|
3
3
|
<line x1="16" y1="2" x2="16" y2="30" stroke="white" stroke-width="5"/>
|
|
4
4
|
<line x1="2" y1="16" x2="30" y2="16" stroke="white" stroke-width="5"/>
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
<!-- Black crosshair lines (on top) -->
|
|
7
7
|
<line x1="16" y1="2" x2="16" y2="30" stroke="black" stroke-width="2"/>
|
|
8
8
|
<line x1="2" y1="16" x2="30" y2="16" stroke="black" stroke-width="2"/>
|
|
9
|
-
</svg>`}.CUSTOM_CROSSHAIR)}`;const Dl={CANVAS:"canvas"},ma={CLICK:"click"},Yi={POINTER_DOWN:"pointerdown",POINTER_MOVE:"pointermove",POINTER_UP:"pointerup",POINTER_CANCEL:"pointercancel"},Xi={FERRARI:"ferrari",LIGHT:"light",LIGHT_BLUE:"light-blue",DARK:"dark",DARK_PURPLE:"dark-purple"},bc="data:image/png;base64,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",_c="data:image/png;base64,UklGRoYAAABXRUJQVlA4THkAAAAv+UA+AC+gkG0EOHUEr9Ap3PwrZBsBTh3BK3QKN/+BSFR1N3MHRpEkKVowQA7ojw7Wwd6dfzvM0BH9V9y2bUQtkHd6DEC+U8F/woyNbkMYxsZ/FcF/MU+ojlamjKrn1oZ15b8TAL2Nr9ov0vHKLxBo7gA/SPuGBP8RAA==",Tc="data:image/png;base64,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S/BFH/+Jz7iIL3KczPmjwohf4ppnS5VXXdexnpnNRVke8mNsyvMsW6afVJxZG0i7VL7P4P8Otpv5/+3t7fCOiH14pvfHTCN9QZsgvNLinPZH/J5WHcs3vJeRXvd9PpNp0p66si3nHPjo/p9p5v/sO32eTEr4sOxY7SbHVMpQ9zP9VN4jr/TfqB1n/67wSh8f1vlsDiAeZeT9J+89itb4P4XNmG/p5/lugO2xYfbr7Jv0vXw3GI0V+T6a/T/HkPRVliXLO6vvEo+irfyPL/Ft9rWeTn8v6ONJjrXZ92bzUdaD/Hp7yPE802TM6TbpZJlu+Tvor9rK/6WyUb4Dlm37e3v3Ne0k/cD7BGnRpnjmFP9nPMYk8iLNXr4lPer8r5RSSimlnlOX2ufNdO9lL/nWlOsgl7BhfRvNvmv699RftfZ5tT+sOdSayWzNeo3S/31tI7/zR9/8S2shrJv082soyznqR/zjMbu/lN7oepbXLK1RvybubM1pVua/iv2y3PsjX9Y88pz2wjO5zp5tJPdeOWcNl3s5JrB3sya82zrLmeuJdY/1Ztaa+rpShfc61r1MK21Xx/QZkFdeox6nxHol90mXve6lMp+j7pdsb6P+z1obtmY/vms09le83Mct6COs860JP1Yv7JdjXv+3IfchEHsZdcy1yrRVptnzGtm3/xNBnNH9kf9HZT5Hff4/xf8Zf/b+kHbinL0Zjvgz/8lYE35qvfqcl3sC+HpUp/RBt09ez/LKsNE+E/ezP3OdeY/KfK628H/fRymfUKY8LzHWMX4yltGe14afUi/CGDf4jwAb074Qc233fx9zco/ymP/5fyLzKPX73f+zMp+rY/7PuR079H6SdS318Sl9g7+Iyzy2Vfgxu2cYtuT9OudhxnDiYue0NXud+DP3KI+Vg39r8SFtJ23KntnI/6Myn/MuyH5b1il9R9/OumKP0VhF3Eyv59f92fvBmnDCluqVYdSDuaT7N+fy0TcYz/fnRnn1MNpA34tMGxM/856Vufe1S2hpvUA9vvS/UkoppZRSSimllFJKXU07EREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREZE75B+Hl45q2TuOnAAAAVNta0JU+s7K/gB/pYUA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a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjMtYzAxMSA2Ni4xNDU2NjEsIDIwMTIvMDIvMDYtMTQ6NTY6MjcgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+QWRvYmUgRmlyZXdvcmtzIENTNiAoV2luZG93cyk8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTQtMTAtMTdUMTY6MzI6NTFaPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdGVEYXRlPjIwMTQtMTAtMTdUMTU6NTU6MzBaPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyI+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvcG5nPC9kYzpmb3JtYXQ+CiAgICAgICAgIDxkYzp0aXRsZT4KICAgICAgICAgICAgPHJkZjpBbHQ+CiAgICAgICAgICAgICAgIDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+RmxhZyBvZiBHZXJtYW55IGljb248L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QWx0PgogICAgICAgICA8L2RjOnRpdGxlPgogICAgICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGk+UGhpbDIwMDc8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L2RjOmNyZWF0b3I+CiAgICAgICAgIDxkYzpkZXNjcmlwdGlvbj4KICAgICAgICAgICAgPHJkZjpBbHQ+CiAgICAgICAgICAgICAgIDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+T3JpZ2luYWwgYXV0aG9yIGh0dHA6Ly9jb21tb25zLndpa2ltZWRpYS5vcmcvd2lraS9Vc2VyOlNrb3BwIE1vZGlmaWNhdGlvbnMgLSBjb252ZXJ0ZWQgdG8gUE5HPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOkFsdD4KICAgICAgICAgPC9kYzpkZXNjcmlwdGlvbj4KICAgICAgICAgPGRjOnJpZ2h0cz4KICAgICAgICAgICAgPHJkZjpBbHQ+CiAgICAgICAgICAgICAgIDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+aHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvMy4wLzwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpBbHQ+CiAgICAgICAgIDwvZGM6cmlnaHRzPgogICAgICAgICA8ZGM6c3ViamVjdD4KICAgICAgICAgICAgPHJkZjpCYWc+CiAgICAgICAgICAgICAgIDxyZGY6bGk+R2VybWFueTwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpPkdlcm1hbjwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpPmZsYWc8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaT5pY29uPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGk+c21hbGw8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaT5zaGFkb3c8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaT5ib3JkZXI8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaT5wbmc8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QmFnPgogICAgICAgICA8L2RjOnN1YmplY3Q+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iPgogICAgICAgICA8cGhvdG9zaG9wOkNhcHRpb25Xcml0ZXI+RmxhZyBvZiBHZXJtYW55PC9waG90b3Nob3A6Q2FwdGlvbldyaXRlcj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcFJpZ2h0cz0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3JpZ2h0cy8iPgogICAgICAgICA8eG1wUmlnaHRzOk1hcmtlZD5UcnVlPC94bXBSaWdodHM6TWFya2VkPgogICAgICAgICA8eG1wUmlnaHRzOldlYlN0YXRlbWVudD5odHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS8zLjAvPC94bXBSaWdodHM6V2ViU3RhdGVtZW50PgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pvf+FJgAAAoDSURBVHic7dlBEYAwEATBg8K/NBygJbiYPNKtYL9Te83MGgAAgMC9ewAAAHAOAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkHm+3QsAAIBjeEAAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyFzrnbV7BAAAcAYPCAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAACZH4UyCGm17iMbAAAAAElFTkSuQmCC",wc="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUoAAAClCAMAAAANkkTUAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAC6FBMVEX/Ozv/u7v////s7PaAgMUPD5IAAItAQKj/Pz//AAALC5Bvb73o6PX/+vr/oaH/JCT/wMD/+fn/mZn/Hx95ecINDZEHB46BgcYWFpX6+v0YGJZmZrllZbm4uN+3t95FRapjY7gQEJL5+fwEBI3Ly+f39/uqqthERKoBAYtdXbVcXLUzM6KZmdHz8/rPz+kFBY0uLqDd3fB+fsS7u+B9fcR8fMNLS61ISKzx8fju7vj7+/0yMqIoKJ3b2++Fhcj09Pr//f3/0ND/kpL/gID/nZ3/3d329vvAwOKHh8n4+PyRkc0ODpFNTa7h4fHm5vReXra6uuDCwuMmJpw/P6hXV7Ntbb2CgsawsNvk5POystyxsdzV1ezu7ve9veECAowdHZjIyOYKCpAcHJjR0eoSEpPMzOhkZLjZ2e4VFZVpabseHpkbG5f/f38wMKGEhMfU1OsqKp4GBo57e8OLi8o8PKZ6esLNzei0tN3/w8P/RET/Hh7/kJD/9/d3d8EiIpoDA4xJSayzs9z+/v/p6fWdndKgoNSTk87l5fMREZPi4vIZGZaiotXY2O1GRqvx8fkfH5lubr3r6/ZBQan19fq/v+IICI+QkM38/P4lJZw7O6ZQUK9nZ7qXl9BZWbMrK58TE5TT0+u2tt42NqRbW7S1td3j4/JaWrQ1NaPBweOurtqHh8jv7/g+PqcUFJQ3N6RVVbLc3O9DQ6kkJJvq6vUpKZ40NKMvL6A5OaVOTq6kpNYtLZ8hIZrDw+RoaLoJCY++vuFYWLMMDJCtrdqqYY/HP162VHyLhcSIiMlwcL4gIJqwUHvAQGKlZpfOzuk6OqXGxuUsLJ/f3/AxMaFxcb68vOHt7fevr9tTU7FPT6+fn9OWls89PadKSq2Ojsze3vDExOSFhcfy8vnX1+1gYLe5ud8jI5tqartra7wnJ53FxeU4OKSentPJyeajo9Xw8PjHx+bS0uva2u7W1uxUVLF4eMKcnNKbm9JCQqks/jJiAAAAAWJLR0QCZgt8ZAAAAAd0SU1FB+gGFBMgJ0gWiscAAAmvSURBVHja7d15eJRHHQfw9JfdoQ1R28KGhCUk2SRkgU2zkCjKIfWKQgg0CSShgRCOJEBUrGDxIjQ0MVBaYhswVSpV8MAgxqIUWjnEC6gK9lLQ1lprK7bU+/jX99rNbnb3fWfemd2dhd/3ecgeT993Zz6d2Z15931n09JugBFJdzgJW0Zp2914U3hu1J4dxbivjNGZylZveevbhneUdgNJhaSpJeXFFEcZFRIgVSj5MUVRxoBMJUpeTDGUMSFTi1Kp+M32MUVQ6pC33DomZAfBIqUWJU/L5Kc0aZGpQxm9GbBh8lKatsjUoYzdFAzMsa44U7rGppu1yBSiBEtMy5bJQ2nRtVOJ0rpJWLdM+5QuupdPDUq6ZmHeMu1SCnhpqSgF1Mge5bUFqVNy18oO5bUGGaDkrBk75bUHOUzJVTtWymsRMpSSo4ZslFJAZsWX0nYtWSglaZHj4k1ps6b0lLJ07eyc8XGntFVbWkp53iPdMCEBlDZqTEcp04dNLkxMCCVzrWko5YDMy9emwAUe8BRoE9f8vDhTMtbcmlKWFllYVDypxEsmK682hZCpvtLbyuJOyVR7K0qJurbfAzBternyeuXTpwF4/CQBlAwC5pRyDcgrwl727SQxlNSY7zChnCHZzKawKOR1BXZvK0pKzHeaUL5Ltimi2sWNzJxFEkhJiRmbUrq59uw5wZeeM1sopcM67544V3nd29/z3vcF8/4P0FJabFb5wQ9RlEBcfTMc80JePWd+ldjvdgQlVqsUEGHVXVA9Ys8LF3mR0k7fviPKvmv8SMme2rrFS+p9DY3GXhsbfPVLFtfVIqXtLDX2eqfgOfh1SNmk7HGZ8q9JMOVNqRChVfZWAix35gIUNyMlX1YAtLjIyhqAVUjJl1Gweo1y42yFOqTkS1u7/mXE2qZ8pOTLuvXGnY42pOT82IlyDymlClIiJVIiJVIiJVIiJVIiJVLKRflhYRkzov5jxO06STgr8Ci6oHzko0gpKPXtSCkoG+BjSMmXu4yvegE+Hv4MUrJmo2+TevMJgLvV2zXuzQVUlNb/iX7+VVg++alhsU9/5rP0lJEbSnilU1U1NG3JJurZg51bSyblwD1ECCUtJG2rTAXMGUqpPF3b1LNg7lX+dBMRlFSQ6T0mlJ/LTEHM7tDy9m4XQEkH6XCankBNuxOZKJ07Qkp7D+GmpDewOK0/BTHztgWL2k14KVnqb3mxScIwV4iRvG/nMOX9D/BRstWd4hKoxGB2+ERAlo3eFVbQrj77lKz1prowLxGYn3+wkF/yoQ0jy9nvyLJHyV5nystF44+5m/80oD1fKI4cwQ3UPGyD0k59qS9ijhemMbFbOwDzWaZ6MeJ6+Itf2jvTKN8jX35oX7bXRge3V1eGS+vjgzl2Z4la2wkAjeqt0725g7NxPhoo3V76wxki6sm04EM8MLO+Au2OPvJVZcv9zSU7++EAbz/frxaiRvmz0Q6l/ToyLkMSB8z9Sn8c+Jp6nVjL15U/S7k/e74BsOubKw8CfIudkqd+zIvjiMccDN3XoQ5uygro/zYhVUWwmpWSr242lmwSjZkVOoKZzD8i6vFo88XDG/q9TJS89bK1kJhgzO8MBHezWcAw/eCQfpt9/30MlPx1srm8nUjM7fOHKb87xE/5WOBO3xFqShH1sb3ooijM5kXfC9tJ+feTcAgkLZ2iLlYLq3IsBaovYGlVAItKHG0ZuY+c+a7EU4poFFwL1NK0TNMdFI6bGznV21b0eHIpbbRIbkqalmn5v6Pz2PG2Q8a2Txx47MnxW0lSW+XNIRhjbr2F/j2fezHvKC0zrDA0+9jqicPSIvYoOUYiApaYN+/mNHv4gbJJqbrqTU+SKbnGx0J++MAMk2b7EgDPjLIugBNJpeSctQn6OY7YmDRbn4ScBYScOg0Lk0jJfWBG2I/ExMKk2XbjwA/Vm5Un4EyyKAUcLhT400XRMWm2/JGxjKKz1Z8kyh//ZDg//dlZJeeYR7fntRVsnvp5eJ7Snj3PfAz73NmR+QXTVC/7STtHzvmH9GkEo2bdSaQUlF+uRkoxuQBwDClFJOMJZb6ZgZSc6bzYayzTNq/3YidS8uRXTweGXY2zsFXy5fAJXbJlPHZw7rfKHO1wMeebJVIqmaW3ymeQkjvPAjz3HMCzSMmdhufdXjKU+Wuk5I13UDtxf/ugFynlCFIiJVIiJUt+g5SCsqf3FFKKySU4jpRi0gOXkVJIyp6HQ3chpYg8AAB5SCkijyiUv0VKAWleqFBmbkVK/vxOO/K3CSnZ88K+8McvapQvhj+57wWktE7HoaYth0Me/16jfDrkcJXT/dKu9UhJkb0A8yYtCFyGfdT47m5q4K1zk68fwI0dnCbeXG3Vk7P6BdN/MCj1heHWb9Ea6XIvUlKl72Vdr9XtIuSPBmU7IaeGyvUFKOZ2EqSky8nAN/KlPa8ET4p8pac0cPckQUraLv4n0/XUrpPuLWZcGejiUTP3VRxXMuQ1E8p1OERn6uJ3xJQ87UVKppx/+brv3sLm4H+OQfkazsEFdfHdXqRkzZnuqJTdZ5CSMRE/cBxcRnMRfuyw5IrZGP2gHylpU3DWYzrbmel7FCmpPm8WZVouxZ0+ulm6emdJR/nMX6jWNW99XTbKcZJRhi7uY55tO7OlkszOGS8T5cjFfcyzbLRMX0O6YYJMlH0Hzg2+0XW1utICsbL6atcbg+cO9ElEmQsTpRwMnTly4ZK74nKE4eUK96ULR6Qapefla9d9F3jAo/0uhCs/TypKPRciKI8R6VJYVDypxEsmK6WbQshUX+ltZRJSTo6gnCLh4M+vDIKnTVfX0CmfPg3A4ycSUjoiKB0yDqQrwooocnkncZRvBor318CdN2WkLCwKkRTYvUVS/s0o3kuHdxv3Lko5v/MPz3NnziJSUhqDzKsukmFcFHyvlJSz5wQp58yWkrJKL93f1yj3nXfrD6rkg8xwzAtb5rJKQkr9QuB/6POxtf8UcVVwHBJxYHWhuAOqwiiH1ILtCMxoVmknC/1Ltr4d7WuTGr9slGPVs32vBB++2qs8/rdklLV1i5fU+xoaA0tlNPjqlyyuq5WN8j8AD4aetlqbCfBfKT93yFKD8k755uBadsOuo2FPPL4MTstJ2aQeqFL+NUlKuUP9oYCwvF5aLaWktxJguTMXoLhZSso9xTMinvtf/x4ZKVcAtLjIyhqAVVJSXon2aX38iIyUo2C1Nvht5f/JqDjNdlImbe3G4LcpHyn5si5wvUZHG1JyfuxEuYeUUgUpkRIpkRKDlEiJlEiJQUqkREoMUiIlUiIlhjP/B6vg7olze5V6AAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDI0LTA2LTIwVDE5OjMyOjM5KzAwOjAwhUdxtAAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyNC0wNi0yMFQxOTozMjozOSswMDowMPQayQgAAAAASUVORK5CYII=",Rc="data:image/png;base64,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",Pc="data:image/png;base64,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",Dc="data:image/png;base64,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nc9oNkhFaJTlte1c//E+gkcuEC0W4ZFNFWxoP5d0IsmD33x/LuQYisGLW6pIpWeTNWdhWrMpr2hkdk09odCxN+pv2bmDZ5q3cueam4/78wYGBujtbqGQ24/f24PP3U1tTTcXNuXe08jvnfz0tzVs61nA+bM7WX1lFzPecn5xwythHmteyKGRagzD5Jyqfq5ZuosPn5ufWGZ/j5uHNtWza6COqxq3sfpq3T4hcjpRCOVds2042GPR3lHKaDJKwYyAEaFghnC53GRzbgIBP5lsikiJm3wujduVxOdN4TIS1NbEmT+vQGnk5Iz4RETeC4VQREQcTXONioiIoymEIiLiaAqhiIg4mkIoIiKOphCKiIijKYQiIuJoCqGIiDiaQigiIo6mEIqIiKMphCIi4mgKoYiIOJpCKCIijqYQioiIoymEIiLiaAqhiIg4mkIoIiKOphCKiIijGR1E9IR6ERFxLI0IRUTE0RRCERFxNIVQREQcTSEUERFHUwhFRMTRFEIREXE0hVBERBxNIRQREUdTCEVExNEUQhERcTSFUEREHE0hFBERR1MIRUTE0RRCERFxNIVQREQcTSEUERFHUwhFRMTRFEIREXE0hVBERBxNIRQREUdTCEVExNEUQhERcTSFUEREHE0hFBERR1MIRUTE0RRCERFxNIVQREQcTSEUERFHUwhFRMTRFEIREXE0hVBERBxNIRQREUdTCEVExNEUQhERcTSFUEREHE0hFBERR1MIRUTE0RRCERFxNIVQREQcTSEUERFHUwhFRMTRFEIREXE0hVBERBxNIRQREUdTCEVExNEUQhERcTSFUEREHE0hFBERR1MIRUTE0RRCERFxNIVQREQcTSEUERFHUwhFRMTRFEIREXE0hVBERBxNIRQREUdTCEVExNEUQhERcTSFUEREHE0hFBERR1MIRUTE0RRCERFxNIVQREQcTSEUERFHUwhFRMTRFEIREXE0hVBERBxNIRQREUdTCEVExNEUQhERcTSFUEREHE0hFBERR1MIRUTE0RRCERFxtP8HOHUqzzr9sygAAAAASUVORK5CYII=",Lc="data:image/png;base64,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",Nc="data:image/png;base64,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",Oc="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA8AAAAKAAgMAAAAul/nQAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACVBMVEUAkkb////OKzdsRJOSAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+kECAABIgHQHmAAAAJ0SURBVHja7c8xAQAACAOglbSkKS2xT2hAUjZlWxZhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh4R/hAzW+Q6qmKxk5AAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDI1LTA0LTA4VDAwOjAxOjM0KzAwOjAwSGxLUQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyNS0wNC0wOFQwMDowMTozNCswMDowMDkx8+0AAAAASUVORK5CYII=",Fc="data:image/png;base64,UklGRlwEAABXRUJQVlA4TE8EAAAvScE2AH/FuG3bQPvPeu/7NSYK524GBG3bxvwhb/vjuG0jSXL+wc53zxLnn0DSJsHdY0gQDIAAYATANmzC+14Sm/PMYwpAIlJNGQmAFAZSADRQVgKmwOnvgurURFIYmA4kphOUoRlHBJAS0URuymZVcDp1pwQp4yzj5VUfmdIBRkS+/acjGDj9fU74/2MbABRt2zYlSSeUdqBs27Zt27Zt25WsF0jrnd+syrj77tuMiP5PgOT8n/N/zv//SzU8eOKKvZfvv6vxmlWbvJp39y/tXT5hUNixBAYtOP6iTX9z2/Nj8wcGHEl85rl6/eN1Z2bEnUfV7Kud2kO7Hy7r5TCCw853aI/uujkl7CbK13zXLPy2qsw99N6d0SxN70q4hdjOZs3ipm1RdxBZltIsT67NdwQjP6sBPw53AZWH1JDnY/RNqFNj1o7jrnCvGvV0MXEDP6hh3/ajbVxKjZuZzFlgo68G9tczFj6khj4Roavouhr7WiFZxbfU4PfKqCp9rEZ/VEJU4R01/MNimvKuq/GvRUgKnFCAR0napBDXUTTex+BPIqh/WkFmBtJT/EFhvilk54gC3U/OeEXqj6UmVgdFa6qYOatgjxMzUtH6Q2nJ+wRH30dYWa2Al5ISSyH6VcnJToW8hZLezZiaEozsVtA7CClLo0qX87FGYa+kI/Qd19cgG6MU+Ag2LiO7SEa8E1lHlIvFCn0hF3ew3aQi3oWtM8rELAU/jYlz6E4REahHVx3gYZDC78vDQnzzeDiG7wgPL/E9oyHchq8lxMJgtcABLEy0gbEsrLSBpSzss4HdLFyygYssPLCBuyy8t4E3LFTbwA8WUjbgsdBiA80sdNlA198PWmygmYWUDXgsVNvADxbe2cBrFu7ZwG0WLtnARRb22sBuFlbYwFIWJtrAWBYG2UB/FsKt+FpCLMhzfE+ExmP4jvCwAN8cHgbg68NDoA7dTyHyLLoTTMxEN5WJeBe2ziom5Ba2G0LlImzzuYh1IGuv4kIuITsvZI5ENpyN4DdcX4JsyCpcy4TO0hQqr4QP2YVqqxAay2BqjDMi2zBtFkqjHqKGCk5kOaIlQmr4LZ53YVZkOBx/iPB6Cs0RITZai6W6khkZ6SPxxwi3B5HsFXKL3uJ4VcCO9E2h8PoIv+N8DN2jheENGNYIxwcQHBGSI9fMdyXMkhTeNt2tAuG55JHZHhYL08U3TXa3VLguvGauKwXCduiAqY5GhPB1vom61wjnoz3zpCcK633fmOZVH+G9YK9vEv9QkVA/psYc1aOE/YpDvhn801FxgEPfm+DNEHGD4UV12fZrWVicYenaVDY1bq8UpxjfkcqW5NaoOMfSlV+z4cvyEnGSwWHn23tW+9UpIXGXlbOvdvSUrofLEuI6o9NP1fy56pNTq8SR9pt75Fnr72p5enhOX3Gsof7jlu25ePfNTy+jmvF+vrl7Yc/Ssf1DkvN/zv85//8vVQA=",Bc="data:image/png;base64,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",Uc="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAIVBAMAAADbnobxAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAG1BMVEX///+qveEANKMAOaYAOamOL0vaKhrVKx4AAACnHtw1AAAAAWJLR0QIht6VegAAAAlwSFlzAAAN1wAADdcBQiibeAAAAAd0SU1FB+gHCBEgFNPt/igAAAI2SURBVHja7dFBEYAwAAOwWsACFmYBC1jAwuxPwd7rHYmFJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwN5FldxUyaCKECEIEYIQIQgRghAhCEGIEIQIQYgQhAhBCEKEIEQIQoQgRAhCECIEIUIQIgQhQhCCECEIEYIQIQgRghCECEGIEIQIQYgQhCBECEKEIEQIQoQgBCFCECIEIUIQIgQhCBGCECEIEYIQIQhBiBCECEGIEIQIQYgQhCBECEKEIEQIQoQgBCFCECIEIUIQIgQhCBGCECEIEYIQIQhBiBCECEGIEIQIQQhChCBECEKEIEQIQhAiBCFCECIEIUIQghAhCBGCECEIEYIQhAhBiBCECEGIEIQgRAhChCBECEKEcCDkoUpequSjSiZVhAhBiBCECEGIEIQIQQhChCBECEKEIEQIQhAiBCFCECIEIUIQghAhCBGCECEIEYIQhAhBiBCECEGIEIQgRAhChCBECEKEIAQhQhAiBCFCECIEIQgRghAhCBGCECEIQYgQhAhBiBCECEEIQoQgRAhChCBECEKEIAQhQhAiBCFCECIEIQgRghAhCBGCECEIQYgQhAhBiBCECEEIQoQgRAhChCBECEIQIgQhQhAiBCFCEIIQIQgRghAhCBGCEIQIQYgQhAhBiBCEIEQIQoQgRAhChCAEIUIQIgQhQhAiBCG/twAF+zc5lLr9EAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyNC0wNy0wOFQxNzozMjoxOSswMDowME1J9akAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjQtMDctMDhUMTc6MzI6MTkrMDA6MDA8FE0VAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAABJRU5ErkJggg==",zc="data:image/png;base64,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",Wn={[Rt.ENGLISH_UNITED_KINGDOM]:Rc,[Rt.ENGLISH_UNITED_STATES]:Pc,[Rt.ENGLISH_AUSTRALIA]:wc,[Rt.FRENCH]:Lc,[Rt.GERMAN_GERMANY]:Tc,[Rt.GERMAN_SWITZERLAND]:_c,[Rt.HINDI_INDIA]:Nc,[Rt.ITALIAN]:Oc,[Rt.JAPANESE_JAPAN]:Fc,[Rt.PORTUGUESE_BRAZILIAN]:bc,[Rt.PORTUGUESE_PORTUGAL]:Bc,[Rt.RUSSIAN]:Uc,[Rt.SPANISH_SPAIN]:Dc,[Rt.CHINESE_CHINA]:zc},kc={[Xi.FERRARI]:Wn[Rt.ITALIAN],[Xi.LIGHT]:Wn[Rt.ENGLISH_UNITED_KINGDOM],[Xi.LIGHT_BLUE]:Wn[Rt.FRENCH],[Xi.DARK]:Wn[Rt.ENGLISH_UNITED_STATES],[Xi.DARK_PURPLE]:Wn[Rt.JAPANESE_JAPAN]},Ar={CONFIRMATION_DIALOG_CONFIRM:"confirmation-dialog-confirm",CONFIRMATION_DIALOG_UNDO:"confirmation-dialog-undo"},he="",Ll={SHOW_MODAL:"show-modal",CLOSE:"close"};`${btoa({CUSTOM_CROSSHAIR:`<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
|
|
9
|
+
</svg>`}.CUSTOM_CROSSHAIR)}`;const bA={CANVAS:"canvas"},rr={CLICK:"click"},Hi={POINTER_DOWN:"pointerdown",POINTER_MOVE:"pointermove",POINTER_UP:"pointerup",POINTER_CANCEL:"pointercancel"},gi={FERRARI:"ferrari",LIGHT:"light",LIGHT_BLUE:"light-blue",DARK:"dark",DARK_PURPLE:"dark-purple"},fc="data:image/png;base64,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",gc="data:image/png;base64,UklGRoYAAABXRUJQVlA4THkAAAAv+UA+AC+gkG0EOHUEr9Ap3PwrZBsBTh3BK3QKN/+BSFR1N3MHRpEkKVowQA7ojw7Wwd6dfzvM0BH9V9y2bUQtkHd6DEC+U8F/woyNbkMYxsZ/FcF/MU+ojlamjKrn1oZ15b8TAL2Nr9ov0vHKLxBo7gA/SPuGBP8RAA==",pc="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAHgCAYAAABdBwn1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABZ0RVh0Q3JlYXRpb24gVGltZQAxMC8xNy8xNGy2A68AAAAcdEVYdFNvZnR3YXJlAEFkb2JlIEZpcmV3b3JrcyBDUzbovLKMAAAA+3ByVld4nO2UwQnCUBAF18SDYBGxBUvw5DUteBCv6UDswmosQFKCPdiBMShBhJ9NFPYJMkMOgXwcx0c8305Xq6xqWmprzGoDAAAAAAAACGQqBD9+/Pjx48ePHz/+X/vzLJddSf/jWXcm9j7lz56nXkcD7/t+f019nvQL6of2j6539xfVO/2q+vT+gvqh/aPr3f0zTX1/v6y+9/2Prh+zf2S9u7+o3t9fUi/9/x+/f/cwrt7d/00fV+/vL6l33//Ien//+Hp3/4kQ/Pjx48ePHz9+/PgBAAAAAAAAAADgXyltYzvb2sKWv/4q8AGr9mrmFzvuD8WsXBfffs4dJqpYuFnU5g8AAABIbWtCRvreyv4AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmkM6EAADslbWtUU3ic7X3bd9tGkj43E8eRfE/2zD7si87Z/Z19SgZ3go+iKEqa6MIhKUfOiw8IArE2tuyRbGW8Ovzff1XV3UCj2QABkqIoG/GMGkDj0viq+qvq6mrw6Jf29c3L/uD8Jpi87B+d35iTbn9HKvr/OD6/scyx1XRG8eTscCe+MSavWPHrQSe+8Q1jsn8wjG8c35j0dwfxTdOa9Aen53BCew/uEfP/Jr3Dw+ubdg/+7GwPr24aG41RI2y8bvQaUeMCts4bbycHx0dQswk1F1BjNn6C2vPGv+CMt5N+52SEN90+pntvQ6PtyJ+0OwfY0PYRtD6Ggt6lPdilkwZdqhvsU9E+pIPtX6jYOeY32O3Sfn9IJ3XbtNftU3HMDg565zctb9Iessohu/twwB5yxO7HioNtbOUxtsqYdE7M8xsfCgtv0zmxqejCQQsKixU2FpNSyPyHDpnGVmMbjn6E/Z9g6y2UQeMKasarxMxcEDPztjB7xDHba1wCLh8ab6DuYyMqxMZh2EQF2BhabMIwg41RgE3oM2xsqzI6psPgCRg8AYPHZ/D4DB5/Muj9Bk8ZTQYDXvZOADU3gAN8oxyALziAO433oFzvAUZQLVA6+UwZTLgxoWm5RWgGJdBUNK0ITUXTguX2ToLQ8zQQDnptVjNgpQzp9xzSNvXH80bIAX3GAR0AmDHo4lajD1uf4Nh4Zq/VYmnGznL7rR3O2W+Dqv02D6PHHKN9OH5J6nYItRe31W8r2IEK2Bi3g82zKWwW1J8lW8q7R+jxVA+bW3vUvlVFf+64bwlK7xA6b0g3shok1WRQLELJWlMGMpeO0lMtSrzXVcfoznmoCCGXIeQyhNyF9GgfyqBx3fh8Ly2ZmfWxXAaTy2AKGEwBg0nvQU3DtJHA9B7I6OMKjXyhyxQ6czKRwaAxGDQGg8Zg0BgMGqMkNM+1GtQhezYCd7OYsdeVi6ylc5EepyEw0TmMae4rTvacOD3mOG3D21+CdW/D30+IC0fre45WOYuG7Zbg8RyGD9XPxMd3Cjocje0khMYLekYWQ8hiCDkMIYch5LABH0o1M+LD16DhChyogqEYNw9B1/4FpPWJDfyKkdQqWjGQZotDaY2KBs8qlJWGz3ODabXKgfmUg7kDCveWQjC/J+GGz4oVQKV8B9vvG++LAzTcDJh2aWfdNJzqdsA1GJLEB4hkXDR6zloCyy+Npe3zcbRtjitjV9yhm2MGnR8y5KIluV9GkftlzWk8y0E2L0D/gH56jmdlAHJcBpA5UnRLRP8MhlFY1FFRLWbrFhGihJPHnQxSqlsAalq3ko46bwftQ+2IOuhFoZqZreXq2XKHi7ejZ99xjH4FW/BRi05TUTHF6SgaTeOlGXysO8eH4nsURG1Pkf6jBK83NCYMQWOCJGwqtGmH7CZSfvF4SMHLtEItYgrhN8PqKuXwWGnAMbPHTmnbOX+nbIvIKTc11ZHsEfl/nD0bpCAZOyUsZywsJ/oTJYFMuI0DST7J8nFE+AbCG0FyY26J2EBkmV8iNvqVIZ7H2dN3cIr658McWtX1NXH1XIvhTH2jJNBmVLqbJyBacQXoHmZjjVUgI3M7cyRGb1tZNSPu1BFUu3yCZKm62QeVtKKIqZtqbzcSzNCCfCZbOs/YLDs0oyHCnBHrMh3Z8rmXQoOSknDZlg4uj8HlMbg81pUZAeLGKFa6MtqY/v6U7s3GcUgzmmHjjyqaVwrIcg6fHknqs2hbRkvXO+JE6qoCyL5Mjowu50H0YeL/BY0/ZkRUfAZni8FJTq8Ep7GoXjoMTdZ7tYqJs6wIqFUAqMsDdeCosshKi+smx9TjoHpOnnomc50CzDjQUmOXEhFwomWIASlNAP0SIN1qHPGtqHFZBt4q2mq6UZmQjN4VWpL36E1NwbdFRCbffSzGbp/c8DfcHX9D7s+ldr6dbCv1dSOjnMwiTymndmRClqhs3CC4VezKQyVmIQ4TiPIVTR2lhNqAlVUwSEnN8Rwu963pmdxXU38buzH5235UAc+HGctysdz55JLhPmM5eUQVumkClpoZ8x0H60STE4NBU3QGcRJ+QIH4gM/wFPNboPUDS3g16HAVBF/CgOFmcfsRWoobOOaeM3M5ZxhkgJ2h53P4fIZfyFONQo5g6Kv2Azf6YmM6aaafbAi3u9fnJrzfF4OYwbRXqRPFpiSKcxofzpoNCarqrLDc6MvM0lhbsdzCERJjQ+KWKbttlhiz4NEul0aXSYMwJtO8TaaZoMZsJDTVjsdANOOZGP6oH/7xWYFyqDbnRLUUD3B/KA6UUDVnAmeUAdXRgeo5emV2+cSly2cuoczG/pln2SdHcjDoc8D5PgJtxqWBfpQMFlfAFfa4FFcoo+yEKgqnAXIcTYc7mg7D1g4ZtlTaVJLKsi6vpQXylhBtUuM+U+uqXDAAWNG7x4yoqzKOpphjEXN/ZhAtOvfHNddV+CBrwtCwDSjvOh9cobhlwRXAmXEy/iEAlXHQE47fr6SGEY9rUIKnMsIsl8+hzP0lXme5aWYM7VR0BhJFJT1fKBykTZ1N4m7pYJ08ebHRP5GwNhjWSgZoeYzLjeItXxtyo+HREhEWg3hbxNvc8gDrPS5bN4intNm8xNpqMFZxWWPe5eNsl4+DJXkAiw6P9Cpq6RBkPqvsZyXRD3WWVYQ9+pwW3zfeKTYJ87svGjFO7OBiAh2GpuswDL0shkEFCD2tHho6CFmwY558CaGF2Qx5i6shlTaVrPd6vPuWBy21NP8Ebykgf6nY0rjzThZW6LjML5K8zgpRX/ChtMEiPN7lx7vsOLmbIiXCbHJObDK7Lbwjstv7zH0qh+nDhpwmV4ymrUNTmb7Ww2mUdzfJhk3r38iZHXpLjLaCJhotBqfFzTZuMIcTBunM4cSNntDLgcCyL+wO8+3LYSrma7vo0+sQHTkZL1P06CpuZuGiF8JQF9LUO0IcU1uHaejrPfgWH8+3eLC95aUa2hexy3aqmSKWqcTjZivmK+roxdYla6FLzT2WwjGrmSNt6qYyDNJalzxvMi8mnJ3F5bCRP5mTT3YKUF2Qof5EPrjwzf/KQXxJ48mQMjyvaO0ahjZxKdEWzfBinn7xLJo2Zsfmy8vOCdmzR/Bhtu+TLzQ9fncqDYe4Ebd5UiOUhDGfy+Djedb9ud5mvE2iXGkg6mfHoRUF8jix+28oPQFDgdFU0osKvjdv8MQsH1lOPHzbqz4dJ9ynWYvj9oXDuT/tcM6C7gGHzm505pgib5bJKy0TXLaz7nqWDMAez62olq8JNe0zf7MKTpspTtC798hl/7MYMa1hL5eKKyAzZ/NnqDXsZqQzQuZKIXuRGOy3lMpXNbKsn9BYHD9KEpJCy4F2eCMQLBPPUM24FkHBh/0kPjzt/ZSFNLEutw/p1NS51uDYLT8bro+1PVkfMlaSEEK9Wup8I3VdcBqo586RHORk6MMLNl1m9r1q4AsKOIHjH8nUz1qGtwwKcMvHkhUFbs12oUTChzK4XBIBPElCGe9pHPQGNJXnvRXDtrxFHkXGxtfmPWNgSoLNqhLHzAOOOZyD6VH5LASfSgj+i6JqWxQ6qowhJVxVWMGQ4OjMjm3M/TkJDF6U8G8oKhQ2NVlGlJNAB8SGcCJ73LvHV2RzcJK7T/H3Sfewc33TlVfgxiSLAQXkzqUlbzHJ4Jg+GPCOpHOaW8Nl0mWAdJkqdplCdXcJtG6/Q6f0+6xunxVnWEy68iiONYgv+MURm9IkueY0t2a+JlmsSVDsJS16Ae0Jkw9QjPlg56P0PYWrpOuHfCoTTVPY+APUVnyuorv3EoA/3mE3P4DtvR5+haXLPrJi0H8TqcoUVfz7K1j3CuuMxe9jznkLUQX7BN0kI7pHXHQ7tCIphF79ViO+PgdxWqPkmvnEZzPx2bX45hDfUy6+PgAUwktjFOV3RYhPE1Hpzjktcc58gg2YYINasHMIdjPplzhBgPZUdu9iafJA1J0W1M0nQIcJ0KkFuEDPZIL4SKG3SwGb0jP155yWOGchyjXNWrJzSDZ1vwL6AFiaHB7z6Slx/DTn+HxSc5nU3FpoCwitR+5mKK1aj3mcQhw/zTk+n9CaTGjNWmgLCK1LwIwTWIRw0uOnOcfnE5rPhObXQptDaE+40Hb5etYPRHqy//KEi0l3xunMM+YTaYuJtFWLdA6RPuQibdNc7FUyQxsni8oukz6oHp1PXCETV1iLaw5xbSSDQuw57Es16ng+rVHH82nNfKIbM9GNa9EtYPF+peTPaMripcdPc47PJ7SICS2qhbbAWL2Xzm0lg4LNxI+U604L6uYTYMwEGGca9jjRpqgxanRIIm9o6k1kIwjtUetPZ9TP10iTR4+x7JgSsN2OldmzM3tOZm/IBLBHQfF5tPW5pK2f4Kw+Lbt4RbkYbLI81VlbqygtwxhZsqIYP7upthUpYsi1KKPQt/WQ5Wn7XDi/UHCWEBbH8pD+OW3LyLCCIA+GcQzV2cqWemUh2kt+0B0jLjR7lzKLaHqOchn2KFUWrpLw9nRNtAw7zDbR+NnyRa05ajXNUbbWSTAyIyeGvUytJyq9IAoNM1vZdPNvbKotUqV4/5p/x7qxwXUDa9DBQxZPtcHRNarVdDxT6RJ20iVGYz9U8PKTWi+0ItPTvk8Uj0fheFqid9OEO5bKJpeK9JkdqJvRS+HdPM/LU3Pf8A10d/Rq7nnMGdKqOV7YjPPUnD04x+g04X8le+laN39N9IH5JNNWUtusAm9AeBGqYBa4z5rw2IA+uXet8JhW4Vp2C9qfp3COhf/yFG7kjuyRmaNwnjetyanCjSP8p8UCldwva9XWuvl3rA2PEm34wGeu8YOq72YzqNowgFSunGKgtN1WkEtAeJ16W38i8U+uz56AUYY+17Xtd6wLX2EUYi6cnkqe4IjGCB/powOqrdFqn2HYvqpDKRmBhrWCZh4ZgQnxCvRv+tJmwaWm2qJSnWetm3/HevEs43skY8ZZY/UiXpIAyCUQvEonv9t6yJqgjEuy3tPqn4+NE/7hhN9nM5XVMgK3lefFaofKC9xnTRg94fGU22fhJOi2uHFlfOIy91liXHm327m+2e1K06kRoXVAidcY1WnD32v6ICtD6QfCD32gd0n6OjufvGP+2xe7vcH1TWdnF//8Qnq424hp5Tl6TQcw+mSLBM/5T0B0dl7CWd9yjwr8QOnaJ2kbkrykSzaC5dd902g2XOWaXZA1aDh9L4CWbkNJ8/T8mn9rGMoV29QnsI+IHxW6oOuukivszBWP6RNkV2D5885Xn5B+vqzDP7kTULqHeP+/NMyGoVz1DO7+lqIoETzvE9lP9oMQ5zQaEc8ylavYaoyMBFOd51c9bPwXoBTjM6ee+5QWaf/JGRllPp66fgOuN6R/diNW3nifelLxHWLpn3qHZxRdxA91A66NLvXGaGY71Hd5IRam0WdjAtJSvQRUmT3K6O0RfQnsoNHhZ/+/xg1oHtZ6IDmUndX4CbaxjbiFx8b0U44+HGtCDWudS2c24a8JNbg3yTx1Q5LZsPEZZZ/Tvk3pzF9pLRn0x6RXmFNnpxqYaLuke7bSizYk3VPbYSk47dMImfGmTs8kKStXDmh16pjko7syT6qbdCVedQIa8r9MRvy6B/Ac9DWvFC55BHh9oukv5BGmDR9z0d1I9EbFVj3zf0BL/4BWdAmFiKzIJUfjBJ70FtBjH996Byi+J/66hGOydp3C+cdsnS5/yiOJh7ckJibirsDZG5yz+/Du+DyUes3QNUPXDP0lM7RXM/S9Y2jJq64ZumbomqG/aIY2a4a+Nwy9yRn6N5L+b/CM32EMVHN0zdE1R3/JHO3UHH1vOFp40RJH1wxdM3TN0F80Q9s1Q98bhn7IGRq/fQfvW7Nzzc41O3/R7KziVLPz+rMzLsu9qH3nmp1rdv7C2dmt2XnN2FnT4+vMu5qza86+c84214Sz68y7VXB22osX4ew6865m6JqhvzaGrjPv7h9D15l3NUPXDP21MHSdeXd/GLrOvKs5uubor4+j68y7+8PRdeZdzdA1Q39tDF1n3t0fhq4z72p2rtn5a2LnOvPu/rFznXlXs3PNzl8DO9eZd+vGzh04C2Ul4Zl8RZGxc/qt19eZs5bJ1rN7TACa32o48G8M9/OX0mOKtUjlh0DJQdrMXD0r11U+l33tM2VhNeYnnzvd42x4G1dhXfmKPI5qrkT3hD5tZXSlqu4Jz4DbyK9O1zwlm2J5uuavQNfQhlhro21PubbJPoHqiX7P9Q3zioH960gBP99SnlD7oqvxRU1Fg74kX9RW2CrfF1X1r44T3C9P9HHKp8DQUj9YgKH78IRzwqVm6Jqh62jBbTC0yro1Q3+pDP0k5dPGuJCjn2VQ3CKdZr97+FYatz3OrPq7u2iBy/tBTD0A+0kT/jlwvugxNmzhL7Ng+4T0fepjMY37sN8sFi1wNbpURwum/QOdtsyje8/IRr6lfpS5W+Nn/DelgQ8agYLWNyD5LFYPoOXF1kTljP8EfWwDFjEhxazja8DkkjgU7emfsP8xwRE1/v+SFjwg/dzCvxU1ftRoQVtC+ItcH5GNcMjyCo3HOAbqewz9Qegonu3DPvaTMZyf1fjvG+M7Hd/Pkug8WrKZ0TlRt2pf0lP0bLaf58zpe92Fv2IRs/qgU6AnxLSoY6h187NvkaV0VqCLer3JauBj4N8x+AmfCMUtSR5M9/4KsrpM/CMu4cbfVC3J4avbYZYXgNR0m17Tu7+HN7lItLa6HtggSxs4ZkTSZba3BXpgZvQA68dwF4N4C611i/zcMXGT6rc+I0aW0SrT1tvRiWryrKYr38nfOFiRLsyW6Bik44JUTS6ln8i/GkPPVUcifmJjUKLoeY3h/wbpw2QFssniVw37FzDWwF9T/xtwI3rvn+iZiCbKdbW980rTgjIa/5zs5u336nHSq60FevVjaOdbamHibyn46Edbm3DdJ8LzrjigjK5U074NGEMLi361Um17Due9pzcI6Spmb1+DFonfttcj+0K57g3XvOkr/0L84RY+Nb161GC/iph/bRnGMkBfIzgHWYmNBE24s6thLKskYz3NwekS2j3KwehZ7lvKV+ne8TH1I2bpyjzpiXR++afkv1OUG88seqf0qvLvlP+kvHcqfspTzVNm6fIz7ZPK6LGKhnhiVouL3qzcFU+1LZzdVzbgTGSud/BX1SCz8ExZLqrHIJ85ja2adySfrb6luQK21nFrNXZ+BPWfKLq3Jd+rZuglMbSZMLRTM3TN0DVDf2UMncevVX3oHZLzNclhlT501fFTlIyf7IXGT4lk6R3eN84pAnE12esBaHu94fXN2eEO/mLyK1ZM0mOW67KjuDFR9IG0cOn3xNmmZd7zkdDVpd71tnyQad2spt2b6RGoZa17q5nfyJsl1cWDH8IbfaC5b3y/zwlL6bIFbnPmbkwa7lBkOKSIcUDz2C0ldow9JsjMddPMPmVsRpq5bpEdgFGCcS5z31bsWCevrMwfwP3x26ZRIuXnPI4ovnO6xVlxG67+gDMda8NoyE02/EXJBTTGDqF0aMZJ9uBcivCXy0+4HUnMxnSWVDapRRd8tpzl/6zK+58tiZhyQAySR0yoxzTHl857GyQJ7CNlfenb6hM6HLPof5vMfTPs0/31wduEupj8SScZuwirPt/Y5XbwTrErxvgpZYTgvC/GW7dE7Up9qB/onUQbhB96qY3yfgMIZjn8x9yr/wll0HibsXDfoFwq2yiUuk25FQ7xnUVPRL5zaH7LJbuFskXdcKGuRX4f6kFMcg9XIvViaRZrwvPGHlz1iWYOzmlO+G604d9pTCK3Q5apkPWnZK78B8D5Z+LA/H/qtyqrxSiMJEZhr10/ny21YqlvJGdvERKXmkzb9WBba43ZVofiLN7F88S80d30tBfErukso8y7aqZUqzJruoC+T/6eB3f2yDeJ+dyxQ3KMiTVNYkeX8pkw6xVHtT6dEUx59rfFmkWyyHJTHmL5mVPGDE143Pitgd9kfXdHWvAczmHPr2p5X2ivXJbVbfH1eKgxXhIjsaj341q9EekPaphH48cR6U5MI0qLxo043liF/uRLMCv5hzxj7ZLyny+StY/Zo+vCviFxKo4mML+LjS1Yxvn02KJ5p+yrIlgG9cfZo2to/UzK3Iwpbsxyb1rUH5pT1k9k1d0V/vlYlpHEM7jjBa2lYTVbSW7kKlnwR+K6tBWvKSZ+Ravgl+FzFt1fx7VuZb7MekvOGntLsyQut+CvBbh9LFqHpcR1jilKjPlEov9vk6XYSmtWrG8BPf81vJ14/mvy47FUs9Dz8qGea++yHH2KSDMMytAdUUQpJJ2xyf6GfDSEf11a6SNyftHqRmS7cTS8Gv7Jk6XKP2zdYTZDXHzV85ieh9o1HVtfdX54mbWGpnLFrLWG6INVy0Kfzvuv1xvW6w0XX2+Yzd+vvx13VysO3RVw87c5ayf0XCy+A7NPb/7+DnhYzQVZBx5WJVWz8H1gYfXLOzUL1yx8V6vZ8lj4O8DpLY0VxsA2YjUMajS72yX1NtTCrcyZ6xIjGVM8sEk9okVjFI/m3dLsEZ/GKBhZbjXkVbD4/5jOXU2MuQyq2XcPk5rp8SBqs4gz2Mo3RDbIknwuuCqmLIFWCV34bi2lHtO8nMOjXiGPB7ekDGK29tkAvSi79vm2VqWtj3x/oMyLz1zr2Grpz7DtcIQw/3KXy132lTCmzazmeuVVopRN6tk+X2Ma05riUSY+7VEWkk3zSfiX7TvEF6vq+0Vozi+jZ8qs1ZBag+3+suTE8gNXE5csRnR+WW2Qh3/JRilfnHzw2Gpm2adRzMrkR8rsO2+wWYgBtOGcb+E4Bz00WSrfp5lo91ImTZBEk3KSmpSbhH898oVcsoirkMk0hlmJPCLsI8ozRj9aZMOKLyT0yPP+SJz4psG+7Ylji2vqV/Kzp/2Pb8mnCqXxuzpOKRcvyPfxZ8kJZ1ciGnPENPrCObqIrhByCsgTaVJPMfgqeYv7LS2owbntVcipGtL439EAhDj5jf72tofXN+2dw/ObODbov0mX7Vku/pt0e4nEv6c5qNfpt1y4rB9IR06njvQ7J6MbuOuwfY7FbpeKwdH5jQV7w/Mbc9Ltd+iUfp/V7bPiDIvJ8Kx9fSMetMeJ+wJe4pfrm197cI5vTPZ5ORz8BveDdxgeQKuHB53zm2Y8dmKaNRqedZdzo8nuWe/6pns0xFfYOaRG9w5hzwM44XQO4DiymmYC53hsudLeyPRNS6pzpLrQjE1T7EWGbRuxtOeke3CdlZ4Jz/Olu0RWK/O8QDrTN3zTTu5p2oF0T98I0jrYc6Uzg6ZnBNKeme7BmY50XWhGmZYFaVsi142MUOzFzXBsOFLd2Bgn17WMsYRSbBtpO2MDXq8pIeFlEAzTp8dWEBhesoeXGlJdK60DlFpSq0emJ+2NLVt6B9OOjEh6P/npzQy6vjc2RsnzzMBJWw11YVoH13lmgsQ4MJ303aOwGRktqS2m1DLPMKTrULNMCTNT0h7LsdJWR01ZDuPQMqTrAtOSnt7yorSdsDeS3oj+m0AHOD6/saEHYH/AntMbHrOOAd3fnGz3DlkxoGJ7hxUdKgbQdyI4s4MX7GFPMiZ/7/3j/MbFcsB2T1jRQ6bY6x5g8fcBnhNAuct2h3i7vw/axCaHPaKRY6S5vcEhHjscnGLRYcXhgGhnZ3CEl+3uDJCLjl9RCw8HtLc/PMKb7A+ZxeuQf4Ds+yeVtPpgctalc8+OqP3DPt0OrsTirLNNN++ewQ0ak+Mj5/oG/iBXUBGzwmSFoRRQdvF84Ex3QgX4G8cDg91rYPLS4qVN5e7xDp433D6k5vR+xeIMX8Sc7LRP6ZydNrHWTnubjna2aa9zdH1z2B3GN8bP7mR40mMb/QN+pH3CNyY7ZwTx5OgYmnd03KF7Tg6OSDi9g0NW4OH/pvW/ZoNlT5uU44LbHm1hdpebWFKPx3k8ylsYU4QUYyk43xyBRKB1k4NDJshXINXD7Vdgu37ZwwOnfdKvQ+6U/wqXjcgMBuTIX04ODwmOowGdd7RDt+kckLB3DtHG7eItd37B47uH+KzJ5OUBvN9LdtJkMvU8gz/vYfoceKaZeZbBnmUWP+vgaC85cHbSpQVurMgudyM7ZVvcUJkRt1S+MFRHO5IhX9IeM35x6LfYtg82yDMX327Go1EY8e3Ijr1lbMex6wd8exwHyf0X2Y7BOqP/ONwmpVDVYrLX71zf7J2coYD2Tl5RMYA9YMO9wStWCg+LkeVeB/zdvQ7pxV7nF6lqr7OPdNV5iY86GZDPdDKg7jnpdXbgsX0gm2Dysn/EPKcdqej/AyjXMsdW0xnFquYcdGKAHzQHu7MDGtPfHcQ3TWvSH5zi7dt7OxKf91BN26nvt0GZIq/B12QRznPp961HNLOHY5keHP8XRkOE19feJiPQ3oZG25E/aXcOsKHtoyOkvvYRvUt7sEsnDYjf2uj+QdGmPtRu/0LFzjG/AfMf231yHNtdAqjdJTZrH7ODAyD+ljdpM4+zPWR3Hw7YQ47Y/VhxsI2tPMZWARucmKChUFh4m86JTUXXRDev07VYYWMxKYXMf+iQoTVqFzSy/ImPaQPKaxmvEjNzQczM28LsEceM+ecfaNU9zr4UYeMwbKICbAwtNmGYwcYowCb0GTbIvRXRAd+M4AkYPAGDx2fw+AwefzLoAY+Ho8lgwEt0eCxwbgYDvlEOwBccwHShKvsgsHymDCbcmNC03CI0gxJoKppWhKaiacFyeydB6HkaCAe9NqsZsFKG9HsOaZv643kjTKKxDFAxg7/V6PMcvPHMXqvF0oyd5fZbO5yz3wZV+20eRo85RvsUsRjz+MPFbfXbCnagAjbG7WDzbAqbBfVnyZby7hF6PNXD5tYetW9V0Z877luC0juEzhvSjawGSTUZFItQstaUgcylo/RUixLvddUxunMeKkLIZQi5DCF3IT3a55GMz/fSkplZH8tlMLkMpoDBFDCY9B7UNEwbCUzvKQ1odUa+0GUKnTmZyGDQGAwag0FjMGgMBo1REprnWg3qkD1j8y73kYuspXORHqchzfZ8uLc42XPi9JjjtA1vz37J9JLWw7xJZmsZWuUsGrZbgsdzGD5UPxMf3ynocDS2kxAaL+gZWQwhiyHkMIQchpDDBnwo1cyID1+DhitwoAqGYtyMs4f/arCvF88iLluraMVAmi0OpTUqGjyrUFYaPs8NptUqB+ZTDuYOTQ6zz2uLcMNnxQq0KdyP6cXviwM03AyYdmln3TSc6nbANRiSxAeIZFw0es5aAssvjaXt83G0bY4rY1fcoZtjBp0fMuSiJblfRpH7Zc1pPMtBNi9A/4B+yrImZIAclwFkjhTdEtE/g2EUFnVUVIvZukWEKOHkcSeDlOoWgJrWraSjzttB+5TzgR30olDNzNZy9Wy5w8Xb0bPvOEY4HfZRi05TUTHF6SgaTeOlGXysO8eH4nsURG1Pkf6jBC+24jikrJ+3ijbtJDO8xeMhBS/TCrWIKYTfDKurlMNjpQHHzB47pW3n/J2yLSKn3NRUR7LHVmDNng1SkIydEpYzFpYT/YmSQCbcxoEkn2T5OCJ8A+GNILkxt0RsILLMLxEb/coQz+Ps6Ts4Rf3zYQ6t6vqauHquxXCmvlESaDMq3c0TEK24AnQPs7HGKpCRuZ05EqO3rayaEXfqCKpdPkGyVN3sg0paUcTUTbW3Gwlml5TI8D75hke1sVl2aEZDhDkj1mU6suVzL4UGJSXhsi0dXB6Dy2NweawrMwLEjVGsdGW0Mf39Kd2bjeOQZjTDxh9VNK8UkOUcPj2S1GfRtoyWrnfEidRVBZB9mRwZXc6D6MPE/wsaf8yIqPgMzhaDk5xeCU5jUb10GJqs92oVE2dZWcprPqAuD9SBo8oiKy2umxxTj4PqOXnqmcx1CjDjQEuNXUpE+EgLIc4bHzQB9EuAdIsn5f9B+VMl4K2iraYblQnJ6F2hJXmP3tQUfFtEZPLdx2Ls9vni2fQnu1TsxHw72Vbq60ZGOZlFnlJO7ciELFHZuEFwq9iVh0rMQqTrjPMVTR2lhNqAlVUwSEnN8Rwu963pmdxXU38buzH5235UAc+HGctysdz55JLhPmM5eUQVumkClpoZ8x0H60STE4NB0/e0qENeODTdR1XYAq0fWMKrQYerIPgSBgw3i9uP0FLcwDH3nJnLOcMgA+wMPZ/D5zP8Qp5qFHIEQ1+1H7jRFxvTSTP9ZEO43b0+N+G4YoMNYgbTXqVOFJuSKNjXFWbNhgRVdVZYbvRlZmmsrVhu4QiJsSFxy5TdNkuMWfBol0ujy6RBGJNp3ibTTFBjNhKaasdjIJrxTAx/1A//+KxAOVSbc6Jaige4PxQHSqiaM4EzyoDq6ED1HL0yu3zi0uUzl1BmY//Ms+yTIzkY9DngfB+BNuPSQD9KBosr4Ap7XIorlFF2QhWF0wA5jqbDHU2HYWuHDFsqbSpJZVmX19ICeUuINqlxn6l1VS4Y8O/1XNBa+hKOpphjEXN/ZhAtOvfHNddV+CBrwtCwDSjvOh9cobhlwRXAmXEy/iEAlXHQE47fr+xrJDyuIf+WzPeJC1omn0OZ+0u8znLTzBjaqegMJIpKer5QOEibOpvE3dLBOnnyYqN/ImFtMKyVDNDyGJcbxVu+NuRGw6MlIiwG8baIt7nlAdZ7XLZuEE9ps3mJtdVgrOKyxrzLx9kuHwdL8gAWHR7pVdTSIch8VtnPSqIf6iyrCHv0OS2+b7xTbBL70Bku7EWrdK7D0HQdhqGXxTCoAKGn1UNDByELdsyTLyG0MJshb3E1pNKmkvVej3ff8qClloZ9w5y+91aodu68k4UVOi7ziySvs0LUF3wobbAIj3f58S47Tu6mSIkwm5wTm8xuC++I7PY+c5/KYfqwIafJFaNp69BUpq/1cBrl3U2yYdP6N3Jmh94So62giUaLwWlxs40bzOGEQTpzOHGjJ/RyILDsC7vDfPtymIr52i79ioAG0ZGT8TJFj67iZhYueiEMdSFNvSPEMbV1mIa+3oNv8fF8iwfbW16qoX0Ru2ynmilimUo8brZivqKOXmxdsha61NxjKRyzmjnSpm4qwyCtdcnzJvNiwtlZXA4b+ZM5+WT4ve6LRvp79+n3OxiI7KsaIWV4XvHfVxNfYemxLyjMmEXTxuzYfHnZOSF79gg+zPZ98oWmx+9OpeEQN+I2T2qEkjDmcxl8PM+6P9fbjLdJlCsNRP3sOLSiQB4ndv8N+/wHfUJETXpRwffmDZ6Y5SPLiYdve9Wn44T7NGtx3L5wOPenHc5Z0D3g0NmNzhxT5M0yeaVlgst21l3PkgHY47kV1fI1oaZ95m9WwWkzxQl6t/iuZCFiWsNeLhVXQGbO5s9Qa9jNSGeEzJVC9iIx2G8pla9qZFk/obE4fpQkJIWWA+3wRiBYJp6hmnEtgoIP+0l8eNr7KQtpYl1uH9KpqXOtwbFbfjZcH2t7sj5krCQhhHq11PlG6rrgNFDPnSM5yMnQhxdsuszse9XAFxTAPg39tsQyvGVQgFs+lqwocGu2CyUSPpTB5ZII4EkSynhP46A39NvLVzPXrJvLW+RRZGx8bd4zBqYk2Kwqccw84JjDOZgelc9C8KmE4L8oqrZFoaPKGFLCVYUVDAmOzuzYxtyfk8DgRQn/hqJCYVOTZUQ5CXRAbAgnsse9e3xFNgcnufsUf590DzvXNyW+4LYBx9VfSjnNrVn0i25deRTHGsQX/OKITWmSXHOaWzNfkyzWJCj2kha9gPaEyQcoxnyw81H6nsJV0vVDPpWJpils/AFqKz5X0d17CcDjh5jw5gewvYdfU4Jt+dM6UpUpqsT3tGD/FdYZi9/HnPMWogr2CbpJRnSPuOh2aEVSSL87MC0+6VdrFfHJNfOJz2bis2vxzSG+p1x8ff5pSPbDoFkhPk1EpTvntMQ58wk2YIINasHOIdjNpF/iBAHaU9m9i6XJA1F3WlA3nwAdJkCnFuACPVP8lM17cpg4bErP1J9zWuKchSgXPxRZS7ayZFP3K6APgKXJ4TGfnhLHT3OOzyc1l0nNrYW2gNB65G6G0qr1mMcpxPHTnOPzCa3JhNashbaA0LoETPqzJ0I46fHTnOPzCc1nQvNroc0htCdcaLt8PesHIj3Zf3nCxaQ743TmGfOJtMVE2qpFOodIH3KRtmku9iqZoY2TRWWXSR9Uj84nrpCJK6zFNYe4NpJBIfYc9qUadTyf1qjj+bRmPtGNmejGtegWsHi/NthnyVWLlx4/zTk+n9AiJrSoFtoCY/VeOreVDAo2Ez9SrjstqJtPgDETYJxp2ONEm/A76h2SyBuaehPZCEJ71PrTGfXzNdLk0WMsO6YEbLdjZfbszJ6T2RsyAexRUHwebX0uaesnOKtPyy5eUS4GmyxPddbWKkrLMEaWrCj4Of1E24oUMeRalFHo23rI8rR9LpxfKDhLCItjeUj/nLZlZFhBkAfDOIbqbGVLvbIQ7SU/6I4RF5q9S5lFND1HuQx7lCoLV0l4e7omWoYdZpto/Gz5otYctZrmKFvrJBiZkRPDXqbWE5VeEIWGma1suvk3NtUWqVK8f82/Y93Y4LqxQz8t9YFYPNUGR9eoVtPxTKVL2EmXGI39UMHLT2q90IpMT/s+UTweheNpid5NE+5YKptcKtJndqBuRi+Fd/M8L0/NfcM30N3Rq7nnMWdIq+Z4YTPOU3P24Byj04T/leyla938NdEH5pNMW0ltswq8AeFFqIJZ4D5rwmMD+uTetcJjWoVr2S1of57CORb+y1O4kTuyR2aOwnnetCanCjeO8J8WC1Ryv6xVW+vm37E2PEq04QOfucYPqr6bzaBqwwBSuXKKgdJ2W0EuAeF16m39icQ/uT57AkYZ+lzXtt+xLnyFUYi5cHoqeYIjGiN8pI8OqLZGq32GYfuqDqVkBBrWCpp5ZAQmxCvQv+lLmwWXmmqLSnWetW7+HevFs4zvkYwZZ43Vi3hJAiCXQPAqnfxu6yFrgjIuyXpPq38+Nk74hxN+n81UVssI3FaeF6sdKi9wnzVh9ITHU26fhZOg2+LGlfGJy9xniXHl3W7n+kb6ge4n5Ne8bhxQ4jVGddqNiPxeMZ36A+GHPtC7JH2dnU/eMf/tC/XHucv99Pa33KPK/vD2k7QNSV7SJRvBJj/13Wy4yjXih8jxewG0dJt+5vottI1d82/Kj4M/oZ/Y+536iPhRoQu67iq5ws5c8Zg+QXYFlj/vfPUJ6efLOvyTOwGle4j3/wv9zLuh/Gj5gPQUPc4jypH8yH8Q4pxGI+JZpnIVW42RkWCq8/yqh43/oh8rN9i/zB2e0iLtPzkjo8zHU9dvwPWG9M9uxMob71NPKr5DLP1T7/CMoosj+pnyq0aXemM0sx3qu7wQC9PoszEBaaleAqrMZv/oe5NqPfqBd/wx95/op2gj2mI/+o4/5ejDsSb96Dv+c+nMJvw1oQb3JpmnbkgyGzY+o+xz2rcpnfkrrSWD/pj0CnPq7FQDE22XdM9WetGGpHtqOywFp30aITPe1OmZJGXlygGtTh2TfHRX5kl1k67Eq05AQ/6XyYhf9wCeg77mlcIljwCvTzT9hTzCtOFjLrobid6o2Kpn/g9o6R/Qii6hEJEVueRonMCT3gJ67ONb7wDF98Rfl3BM1q5TOP+YrdPlT3kk8fCWxMRE3BU4e4Nzdh/eHZ+HUq8ZumbomqG/ZIb2aoa+dwwtedU1Q9cMXTP0F83QZs3Q94ahNzlD/0bS/w2e8TuMgWqOrjm65ugvmaOdmqPvDUcLL1ri6Jqha4auGfqLZmi7Zuh7w9APOUPjt+/gfWt2rtm5Zucvmp1VnGp2Xn92xmW5F7XvXLNzzc5fODu7NTuvGTtrenydeVdzds3Zd87Z5ppwdp15twrOTnvxIpxdZ97VDF0z9NfG0HXm3f1j6DrzrmbomqG/FoauM+/uD0PXmXc1R9cc/fVxdJ15d384us68qxm6ZuivjaHrzLv7w9B15l3NzjU7f03sXGfe3T92rjPvanau2flrYOc6827d2LkDZ6GsJDyTrygydk6/9fo6c9Yy2Xp2jwlA81sNB/6N4X7+UnpMsRap/BAoOUibmatn5brK57KvfaYsrMb85HOne5wNb+MqrCtfkcdRzZXontCnrYyuVNU94RlwG/nV6ZqnZFMsT9f8Fega2hBrbbTtKdc22SdQPdHvub5hXjGwfx0p4OdbyhNqX3Q1vqipaNCX5IvaClvl+6Kq/tVxgvvliT5O+RQYWuoHCzB0H55wTrjUDF0zdB0tuA2GVlm3ZugvlaGfpHzaGBdy9LMMiluk0+x3D99K47bHmVV/dxctcHk/iKkHYD9pwj8Hzhc9xoYt/GUWbJ+Qvk99LKZxH/abxaIFrkaX6mjBtH+g05Z5dO8Z2ci31I8yd2v8jP+mNPBBI1DQ+gYkn8XqAbS82JqonPGfoI9twCImpJh1fA2YXBKHoj39E/Y/Jjiixv9f0oIHpJ9b+Leixo8aLWhLCH+R6yOyEQ5ZXqHxGMdAfY+hPwgdxbN92Md+Mobzsxr/fWN8p+P7WRKdR0s2Mzon6lbtS3qKns3285w5fa+78FcsYlYfdAr0hJgWdQy1bn72LbKUzgp0Ua83WQ18DPw7Bj/hE6G4JcmD6d5fQVaXiX/EJdz4m6olOXx1O8zyApCabtNrevf38CYXidZW1wMbZGkDx4xIusz2tkAPzIweYP0Y7mIQb6G1bpGfOyZuUv3WZ8TIMlpl2no7OlFNntV05Tv5Gwcr0oXZEh2DdFyQqsml9BP5V2PouepIxE9sDEoUPa8x/N8gfZisQDZZ/Kph/wLGGvhr6n8DbkTv/RM9E9FEua62d15pWlBG45+T3bz9Xj1OerW1QK9+DO18Sy1M/C0FH/1oaxOu+0R43hUHlNGVatq3AWNoYdGvVqptz+G89/QGIV3F7O1r0CLx2/Z6ZF8o173hmjd95V+IP9zCp6ZXjxrsVxHzry3DWAboawTnICuxkaAJd3Y1jGWVZKynOThdQrtHORg9y31L+SrdOz6mfsQsXZknPZHOL/+U/HeKcuOZRe+UXlX+nfKflPdOxU95qnnKLF1+pn1SGT1W0RBPzGpx0ZuVu+KptoWz+8oGnInM9Q7+qhpkFp4py0X1GOQzp7FV847ks9W3NFfA1jpurcbOj6D+E0X3tuR71Qy9JIY2E4Z2aoauGbpm6K+MofP4taoPvUNyviY5rNKHrjp+ipLxk73Q+CmRLL3D+8Y5RSCuJns9AG2vN7y+OTvcwV9MfsWKSXrMcl12FDcmij6QFi79njjbtMx7PhK6utS73pYPMq2b1bR7Mz0Ctax1bzXzG3mzpLp48EN4ow80943v9zlhKV22wG3O3I1Jwx2KDIcUMQ5oHrulxI6xxwSZuW6a2aeMzUgz1y2yAzBKMM5l7tuKHevklZX5A7g/fts0SqT8nMcRxXdOtzgrbsPVH3CmY20YDbnJhr8ouYDG2CGUDs04yR6cSxH+cvkJtyOJ2ZjOksomteiCz5az/J9Vef+zJRFTDohB8ogJ9Zjm+NJ5b4MkgX2krC99W31Ch2MW/W+TuW+Gfbq/PnibUBeTP+kkYxdh1ecbu9wO3il2xRg/pYwQnPfFeOuWqF2pD/UDvZNog/BDL7VR3m8AwSyH/5h79T+hDBpvMxbuG5RLZRuFUrcpt8IhvrPoich3Ds1vuWS3ULaoGy7UtcjvQz2ISe7hSqReLM1iTXje2IOrPtHMwTnNCd+NNvw7jUnkdsgyFbL+lMyV/wA4/0wcmP9P/VZltRiFkcQo7LXr57OlViz1jeTsLULiUpNpux5sa60x2+pQnMW7eJ6YN7qbnvaC2DWdZZR5V82UalVmTRfQ98nf8+DOHvkmMZ87dkiOMbGmSezoUj4TZr3iqNanM4Ipz/62WLNIFlluykMsP3PKmKEJjxu/NfCbrO/uSAuewzns+VUt7wvtlcuyui2+Hg81xktiJBb1flyrNyL9QQ3zaPw4It2JaURp0bgRxxur0J98CWYl/5BnrF1S/vNFsvYxe3Rd2DckTsXRBOZ3sbEFyzifHls075R9VQTLoP44e3QNrZ9JmZsxxY1Z7k2L+kNzyvqJrLq7wj8fyzKSeAZ3vKC1NKxmK8mNXCUL/khcl7biNcXEr2gV/DJ8zqL767jWrcyXWW/JWWNvaZbE5Rb8tQC3j0XrsJS4zjFFiTGfSPT/bbIUW2nNivUtoOe/hrcTz39NfjyWahZ6Xj7Uc+1dlqNPEWmGQRm6I4oohaQzNtnfkI+G8K9LK31Ezi9a3YhsN46GV8M/ebLMasF3jR1C9ROce5Xk/mEWNLv7JbEX9p+tzJnrYhHG5P00yQa3SCIeRRnSWLlPEkE/upXJ+cf/x3TuajzqMqhm3z1Maqa1H+cxBKvayorJDeKCzwVXxRQTbZXQhe/WUuoxRSEcbuND7v22pHwJttLDAL0ou9LjtnJw10e+P1Cc+TPXOrY25DNsOxwhnG3e5XKXV3CgB89Whq7XLDJK2aSe7fOM+phWUIwy3rhHcy42jZ7xL9t3iC9W1feL0JxfRs+UMfqQWoPt/rLkxGZDV+OFFSM6v6w2yJ+7ZPPDX5x8nKm1SrcVU5xGMSuTH2ke85yPuQbQhnO+hWv5A5rvTKXyfTrvdi9l0gRJNGkGpkkzMfjXI1/IJYu4CplMY5iVyCPCPqKsCvTXxdy/WA/Wo5HKR+JE3PpAEjonttzKPHva//iWfKpQ8unVL/eVy9TIX8k+S044loxoxBHTDD5GJCK6QsgpIE+kST3F4GuCLO63tKAGI3mrkFM1pNUoBfs6SXYdqfj2/zG1Aceg0xk4q15FWuaLJKZyxawvkmCkttpa1enVwfVXSeqvkiz+VZLsKt/6C9N39V0SdwV8/W3OCms9F4uvRe7Tm7+/Ax5WM8bXgYdVSdUsfB9YWP0+Z83CNQvf1TcvMiw86W0Pr2/aO4fnN3Fs0H+TLtuzXPw36fYSnv6e5p1ep99v4Uz9QDpyOnWk3zkZ3cBdh+1zLHa7VAyOzm8s2Bue35iTbr9Dp/T7rG6fFWdYTIZn7esb8aA9Hr64mBwNfrm++bUH5/jGZJ+Xw8FvcD94h+EBtHp40Dm/acZjJ6aZouFZdzk3muye9a5vukdDfIWdQ2p07xD2PIATTucAjiOraSZwjseWK+2NTN+0pDpHqgvN2DTFXmTYthFLe066B9dZ6ZnwPF+6S2S1Ms8LpDN9wzft5J6mHUj39I0grYM9VzozaHpGIO2Z6R6c6UjXhWaUaVmQtiVy3cgIxV7cDMeGI9WNjXFyXcsYSyjFtpG2Mzbg9ZoSEl4GwTB9emwFgeEle3ipIdW10jpAqSW1emR60t7YsqV3MO3IiKT3k5/ezKDre2NjlDzPDJy01VAXpnVwnWcmSIwD00nfPQqbkdGS2mJKLfMMQ7oONcuUMDMl7bEcK2111JTlMA4tQ7ouMC3p6S0vStsJeyPpjeg/IJLD4/MbG3oA9gfsOb3hMesY0P3NyXbvkBUDKrZ3WNGhYgB9J4IzO3jBHvYkY/L33j/Ob1wsB2z3hBU9ZIq97gEWfx/gOQGUu2x3iLf7+6BNbHLYIxo5hh452Rsc4rHDwSkWHVYcDoh2dgZHeNnuzgC56PgVtfBwQHv7wyO8yf6QxX065Pchm/5JJa04mJx16dyzI2r/sE+3gyuxOOts0827Z3CDxuT4yLm+gT/IFVTErDBZYSgFlF08HzjTnVABHtnxwGD3Gpi8tHhpU7l7vIPnDbcPqTm9X7E4wxcxJzvtUzpnp02stdPepqOdbdrrHF3fHHaH8Y3xszsZnvTYRv+AH2mf8I3JzhlBPDk6huYdHXfonpPe3vEVzg/1GgH5yVvgPx4ckcB6B4eswFP/G/MmKBJo0QxnTPOZDkX4cN4r5jEmtsaBHWtRvGlM+YQGn+sYgZSgxZPDVyDiw+1XYMh+2cPHnPaZtPk44hDu9rnBvvEEkj0kXI6YRhztkF52DkjqO4do7Hbxdju/YPXuITzg4GgvOXB20qUVZ6zIrj8jI2Jb3IqYETcjvrAiRzuSlV3SHrNMcei32LYPBsIzF99uxqNRGPHtyI69ZWzHsesHfHscB8n9F9mOwXSiOzbcBk3A/14egE6+ZPKcTKbUwuRqsQHOVARqt5WqR0Y1TKYaRrFqTD1vsteBYepeZx9Jp/MSzzgZkOdzMqBONvn/3SdMN5s/C5wAAAC+bWtCU3icXU7LDoIwEOzN3/ATAIPgEcrDhq0aqBG8gbEJV02amM3+uy0gB+cyk5mdzcgqNVjUfESfWuAaPepmuolMYxDu6SiURj8KqM4bjY6b62gP0tK29AKCDgxC0hlMq3Kw8bUGR3CSb2QbBqxnH/ZkL7ZlPslmCjnYEs9dk1fOyEEaFLJcjfZcTJtm+lt4ae1sz6OjE/2DVHMfMfZICftRiWzESB+C2KdFh9HQ/3Qf7ParDuOQKFOJQVrwBaemX1kg7QRYAAAAqW1rQlT6zsr+AH36zgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeJztxDEBAAAIAyD7h7PStMUeDkh2AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZV8AAAAAAAAAAAAAAAAAAACArgMFexqrk0pThwAAAKlta0JU+s7K/gB+P24AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHic7cMBDQAACAOg9w9nA7PcIMJGN6mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqft9RVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV1fcPRecIvN7nJ6oAAAFWbWtCVPrOyv4AfyQeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4nO3RMQGAABDEMPyLw9KDixuaITXQu/e5oT/HzvK9/3v+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/kPAAAAAAAAAAAAAAAAAAAAsPUB7pD/Bbef1ZAAAAq1bWtCVPrOyv4Af1e6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4nO2djZHbOAxGU0gaSSEpJI2kkBSSRlJIbpCbd/PuC0jJWa8d23gzntXqh6QIEqIAkPr5cxiGYRiGYRiGYRiGYXhJvn///tvvx48f/x27J1WOe5fh2fnw4cNvv69fv/6q99q+Z/1XOaoMw/uBvM/i9vCW/rm7to7Vbyd/rkdXDXs+fvzY1tVK/u7/bH/69OnX32/fvv388uXLf/qi9he1r/IpKi/O5RjnkU79XK7az7Hab/mTdp1baVpf1bFhz0rOnf4vOvl//vz51zb1T/8tuZQMkDkyYj/nVP7IFJnX/mwX9GvOJT+3E9oC5Rv27ORfMvL4r+jkzzHkQn+1DJFztRX3WeTHNeA+vjqGPgDKYz0x7NnJ/6z+T/l37wzoeeRef6stINfatiz9zFjJ33oA6PuVnnXD0HNN+SPXklVd6z5IX/eYwHn4WZLHdroh24n1jOVfbcRpDP9SdeL+c7QfXc1YnG0fp19n+ylZWd4pD/pt5l3XeSyXsqxt2iB6hjHJ6pphGIZhGIZheEUYx9+TR7DXp//zby/vWfLd+h5c6mu6NvWueITL6O1qB8/mZ0id8Jb2vruW9/Od/M/Y8Y98hnme93W+xC69lfz/hv7zFlz+9LNhz8Omjk0m/Xfp28MX5GvpI53PkPokP85d+QNN52+kjFyP/ci+LNsv7d/apZfytx/iUdtAyt9+Nh9zPyl9ic4suSAbbL7s55z0C9hnWCAj7HYF51HntA+T9me3HdoM90KemRby7uzZmV7K33X0qOOBrv8DdWi94L5tP459e12M0C5+yH3Qdl/3/0o763jnb8xnSvbr9Fldkt6z639AtukDLuyrKZnhb3F/Q5b8v5M/fd8+QMf7WJ/Azt+Y8ict/ADk08n/KL1XkT/P9vqbsrG8i/TF2xfn+t7pBvSJ2wm6xboYdv7GlL/P6+RPnMqZ9FL+nNf5w/527FtLP1tBfaU/Lf139u3ltdRt0dWR/X08R8hj5UuElb8xfYi8p3Xl8XjmTHreph4eVf7DMAzDMAzDUGNb7Jv8PD6/Z1w99oAZY78ftn3xs02+iwu9FX/D/MNnZ2fT6vzg1gnoDseE59zA9C1CXuvza19nP8zyoK9GP5yjs6sg/5Xd13YwfHzYjtAb2H89x6dIv1DG7ttn53Pst+Mvx2gf2JHxSQ3HdP3cfhfXe5Hy5/puXqd9gbbvWub4D7p5RJ7rl/PP7LfzNeiI6f/nWMl/pf9XdvD0padPHRsp7SL7sWMwzhzLdlngk9jFCwz/51ry73x+4LlfJS/PBSzO9H9wXIDLybl5zrDnWvIv0MnpOy94hhfW4c5z9fxf6Qa3OT//HatQzNyvNd27XO1bveN5fN7ZAhjD5/XEjTid1M/d+J9nAOT7v8vKsUx75D8MwzAMwzAM5xhf4GszvsDnhj60kuP4Ap8b29zGF/h65BqryfgCX4Od/McX+PxcU/7jC3w8rin/YnyBj8XK5ze+wGEYhmEYhmF4bi61lXTrhhxhfxI/bMT3XkPjld8RdmutrNi9I67g/dx+ZfuQ7in/tDM8M17XB9sbtrnCa/CsZGz5Y3/BJrdqSyubnOVvfyJl8vo8LuPKnmCbwepeKDN6zPLP9uh1Cp/BpmzbKza7+t92tO6bPJmG1xDDr4cNvms3Xf8vbNNjG1tg/U/a9vnQbn291+fymoSr7wuRR8rf646xBprXxHp0kBG4Xnbf5DIpfz87V23GcvU1nfwdb+Rj9h+zn/5Jeuw/+r6Yj5FP7vd6ePeMe7km2Mch+4VluXou/qn8u/2d/NMX1MUi0a/R7aR/9A253TH8FNbz5MHxR2fX/+17K9KPA7eSf9cebPt3PAH9PX1H3b3s2kbGqJBe+ikf9Z2Btux6SR1w5Ee/lfwLr+NL7ACs1pzOe8172cnfZcjvC/uaR5V/kTEy6cfbra/Pca+nmWl1bWYXl5M+vy6/1f7dfayuzevynK5+nmHsPwzDMAzDMAywmlt1tL+bK/A3+FN2cazD7+zm1q32ec6F5wodvT/egpF/j30YtqHlnBpY+ed37cW2kdp2zD/f5bDfqfD3RPD/gY/5WtuT8C1xL5Y/37PxPb/qPBHLzH62jJuHI/3f2eat/9nmuz6209lGa/+M2yJx/vh6sAFyrb9R6G8JOcbEcqYs+IjuraduzVlbOxztp2/mOgEpf0APuC1g16ct2DeL/Ch7zhux36+bU9Ltp936u0CvwrXl3/WfS+TvOR/o7vzWoL/JuJN/Pg86n27BM+kV5wpfW/9fKn/rbXSwY23sw0M+5HGk/1P+tI1Mk/gQxwg8sj/nEjxuoo/Rr24h/8I+Pffn3TzyvDbHfzv548er9HP89+j+3GEYhmEYhmEYhnvgeMuMmVzFf96K3fvqcB1457Y/MNeLvBcj/zWe3+D4eubH0Y+Zg2O/XaazsqF4Dl766myH8ryglQ/QxygT12b5sf86fh+fpsvT2aNeAWygaQ/Fbuc1Gjmvs6kXnlfHz363XDsU2z92/m6Ol+279ueSNmXMcqXf0f2/81ViU352+af+o16591UMTzdPKOl8Oyv5U8/pR/T8NHw/2GbtH7T/0Pe2Kj/Hco6X91d+zzLPb8VO/pbZn8p/pf9T/jn/135kjmGr55jn8u7Wh9zJ320USIs29uxtwFj/W//dSv6F/ZB+znMu4xLaA3mc0f+QbYM02bZP3O3vFXxCHv+tZPye8vf4L+f42QeY/sFiNf7byb/Ief7d+O9V5D8MwzAMwzAMwzAMwzAMwzAMwzAMwzC8LsRQFpd+DwQf/irWzjFAR1zin7/k3EvK8N4Q33JLWP+YtXMyf+KxKN+l8ue6jkrr7LcWujiUjownPuKSWEDilrwOzlGs+1H9GmKj4Npx9I6d8nd4iQvsYvcpk7/r7rhfykt8lY+Rds4XIN7cMeeO1U28NhBrCGWfZS0yx5vv+jX5nzmX8x0/S16ORbqkfok58s+xUe+xrlmu10a5OJbrfxEPTj/lfjs6PUo8l+/b3/6hLex0APG6xJJ5TkHeG8fpZ7v+Q/6OCVzh+0794ljKS+qXcykn6V5L/2dcfuLnMn2bNu191LO/t+HvKbke3G5dT7v7ct4dXhvM97Nqh36GIrfuex9w5rni+TI5d4A2lBzVL9AuHJ96LXbtOvsr/cf/o/OyTXveV5ce/Y/7Slm5r1r3rcrqtaJgJbeMDe3SpGw5j4W8EueV7Z62mRzVr88jT89VeivowVX/Pzvu/RP5c47n3GSafh528eBOt5uHRJ3nNyouWeerGyt2OtN5ZTv0+DjLfaZ+6f/dfIW3sivDkd6FTv45f6Pg3cB9lXtCxp4jdAav6ZjXeO6Q49Wtc49Yyb9rr4xTrB9W7Zv8L9Xnu3VKPW/qDEf9v/A8i9W7TCf/o7LzTKzyOg/kRF2yNtxqrGadmfJnTJjrBHqdL68r2L1be46Z3x26cvDdQ/RNrlnXcaZ+4ehbuxx7j3mLvKOu8s15GgljBch6Qb+n3vS79JHeO9Pud++Eq7GAxzmXrBN6yXN6V7+U+0iunPPs81aHYXgz/wCggvog4L8lowAADtdta0JU+s7K/gB/koEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHic7Z2NkRwpDIUdiBNxIA7EiTgQB+JEHMhe6eo+17tnSUDPz/5Yr2pqZ7tpEBII0IOel5fBYDAYDAaDwWAwGAwGg8HgP/z69evl58+ff3ziOveq5+JzpawAZfj3wf9R6fmK/jN8//795dOnT3984jr3Mnz58uXfzy6+ffv2O++wN2UE9PtHRtT7tJ6Vnk/1vwI20f6u9l/1Ufp2laaT1+3f+Z1dVPKs5ARdGr1epcuuZ+28ez5wauereuvsH+Vr33W5tG97HpoPeQWq/q95ZfWO+58/f/73e+gt0v348eP3vXiGuqgvC0Q6vR7pM0T+nibyiLy5F2WrXkgX1/V56qBpIy9PRx30evyNz6r/x9+vX7/+fu4KOvtzTWXR8iNNlM8zWZ8jPfcy+7sMUZ7bCJvH39CZponvjFtccz1FGp3zOLR9RT6kRxfIqelU7vigC9qyyh3XVB+qZy2f8X3X/vrMFaz8f1Zm1v/pf528gcz+6m+oU1Z37Bx6Vn3RLuKDL9A+qH6BPFZydrpAPsohP/cVVZ39+ZDPy98Z/+8xF7jF/ug8+iP17uSl/pX9fR3iwLbYPf5GWyB//vd+hqz0UdqLQvOhTpku8LcuK+2RuV5lf2TU5738TG8rW1zFLfanHWu77+QNZPZXf4fvzfoofd39j+o27nHd/SS+I7M/etA2lulC06nNaRfI7/bHP/JM/OUZzTeuIeMz7E9fUX3QnwF19e/qbxnfHJoemelb+j2epQ90a6XIi/v4TcD/kcbvISd9LwP1xodkutByMvnJX8dD+of/77Ko/DqXqfTpuh0MBoPBYDAYDDo495fdf83yb8E9uIQrOC3zNH3F257CY+XEpVjPZHGBe2JV/urZFZ/WcZiPwqnOrui44m3vIavGtqtnKs6q8h9VXHq3/Fv5tEdB5dY9E16nK3J18fx7tetMVuXV/P4J51WlPyn/Vj6t0pPzhs4p+h4F53iQhXycA1nprNKBxhW7Zx5pf/TjnFzFeWncXmPmVfrT8m/h0yo9EaMLwLPC8yHzyv7E7VQWlbPTWaUDtT9yZvJn/v/KHpoT+1ecl3PWyr1WHNlu+dT1Kp9W2R/uWPkj5RQ9/8xGyNz9f6oDz6uSf5crW6Eaq+BG9H7FeQVIq1xMl363/Fv5tM5P0oejjGgP9DWe3bW/jhme9lQHp/a/Fepv4BqUd698U2YXrvvcwdOflH8rn9bpKbO3zjsZF7TszEYB5RaztDs6eA3769jJx/fiKS+IT1POC3my61X6k/Jv4dMy3s5lA8opVmUzJ3eulOeRZ0dnmY4970r+rl6DwWAwGAwGg8EKxL6I+ZyCdSBrmFUsqksTc9sd/uce2JE1gG4eWeauLPcG52JYd3sMfwXiH6y/d9Ym3fr1mfsZM65R15SB+E6s8FFldtcfCY9dB6ivxre69q9nY0iv+sue5xnuab2d94p77pf0zEGmM57p9El/8ziGx2iz8nfyymTM0nXXd8vI9LiDVRxJ9+RX53GUg/A4re7V1+dJoz4HnSuXo/FA5eyUD3CZ9BxRxZ/h88hHY/5al6r8nfJcxqrM6vqOvMQbVcYTrOzfnbcEXczS+S/4Ou3/6MrPM2TnO8mrOmdCOchSnY3I9O98R1d+lZfu13cZqzKr6zvyZno8QcePkd+KZ+zsX+l/52wR+fqnyxd50P2Oz9L+nsXis/I9r52zhFWZ1fUdeTM9niAb/5Vb9DZf7fu52v8zXVX9X8vu7O8c9Kr/a95d/6/mf13/17KrMqvrO/Leav+Aji0+huGfdHzp+CuXaTX+q9xu/4Ce4avOn2e6Ws1ZfDz1MU55xax8RTf+a/qqzOr6jrz3sD/1rtb/ei9rm9zXPuQ8ms//PY3OkX1On83luxiBzoX5ngEZ/D7ldeVXea1krMqsrq/SZHocDAaDwWAwGAwq6NxcP1c4wEejksvXHx8Bz+ICWbv7HszVOoL90s9EFWer9mO+ZzyLC8z2MiuyuIDu2dX9/yfrV7UVsTa9nnFu2J97ngdy6HXnIne4PNJUa/TOLpke9FygcqSVvm7lG0/g++/VPlXsj5gTfmOHI1Q/o/Erruueefbve7xR+cIsjyxenXFGHS9Yxft2OLou1qlnE+HXM33tyLjiAk9Q+X/sjwx+biXjaFUH3kc0Dqfn+Chf+4VzbnxXfVRnJnheY+v0kyxG7f2Ftsf5FbDD0a24DvKr9LUr44oLPMHK/yMrfS/jVXc4Qs5SaF/Pyu/k0Xy7MzMhD22Wclw3VTmMberfKHvF0Z1wnZm+dmXc5QJ30Olb+6z6eK/rDkeo77XM+r+O313/37E/Zzv1LOdu39K9A9pvdzi6Xa6z0teV/q/P32J/9//I7uM/+sdPVum8Pfm4Wtlf887G/x37oyO/dmX8P+HodrnOTl9Xxv+ds44VqvW/ct5ZTIDr2m87jhD5sJ/OMbNnsjlwVl6VR7V+PplbX+HodrhOT7dT9x0ZnxUzGAwGg8FgMBi8f8Dn6NrvUbiSt75b4x7vvtfYwAl2ZX9PXBRrXjgA1pSPqAN2PAHrWmJ6uq+y2wdcAY7hFBpP7HCljq8FYha+biR+FvB9rL4Ox2/oepUzGPHRmA1tS+ML6KvjdlXGzv5dXrtptE66D97luFcdQfa7I7T3eI7rlKvpApHmat/KdMT17BwLcQuNszoHo7/PRT3QDXol1oXfcfkpQ2Px1VkBtUXF0e2kcZm0rsp5Ukf9LaErdQwoD0tcD/torFDTESel3Cpe2KGyv16v7K/xcdo9bRI9eXxL8/L4dsWrZfyJ21z9mHLIip00AbWfxx89jpvxe1fquPrdMdL7+wSdOz3dt+XyeBza6xNw+ztvQD76m5TImOkGVFzUjv0rHkOxkwY9Ku+Zyat8mL9H8EodT7hDyuUDV135lhV4jjEus5nvtaAPOV9Fn9CxqeINvf1W/XHH/gH1f8rjKXbSKOeo46DKkX3P7L9bR+UE8fkdd6icn+7HugId2/Tjey3ig2/0vRzcUx1k15Vfy57vzteDyv74MuXUHTtpVCafdyrfznf6h7eZkzoG1Aa6p8fHZ9ettpNT/k+h4wdzzOzeao/d6rrvJVqNW35fy69k6daut6TxsiudnNbx9LnMd13Z/zcYDAaDwWAw+Lug6xhdz9xrHtntSYx1kL4rZadMXasS787Wgu8Bb0Fej+ew7js9R1Khsz+cAOl27K+xFtY7PPcW9HmCtyBvFo8kTu4xG+e0iD0636VQ7lbjFQGedZ+jPLTHIDwmq/y/6jNLq3kTQ6m4GC8X+TSWoxxyxylpPbX+Ki98zo5ekF3LUblO0J0xcY5HuQiNpXc+w7l75ZXhCzxGqvXz843OwVb+n3KyMr1u2d5sb//Yjdinx3yxbbZvm7YCJ+JxYuyt7aLTi8vucp1gZX/s6mVmsf8Vj+g2CjAHqGx6kp9zQd5fsryrGLDuD9J4N7HW7LejKu5VfY3urVKuJfMZK724v0OuE6z8v9tf5wm32p9+SVz9UfbXfrFrf/wGeanPI1+3/2pvB35EeVXlD8CuXqr6nmA1/6OecIy6B+UW+2u57odvtT86pBzVy679yUPHDrW57nfZyQd/rvyfy+s+P9NLds/lOkG2/vN9RTq3yM5fq24cK3vR/nX/wz3sr/O/6txyoLOb93HNk77Ms10+Pv/LZNF9GCu9+PzP5Rp8TLyF9eLg9TD2/7sx/P5gMBgM7oVs/beKZYC39K75jmc6ha7XuvG2ip2eYFfX9ywzy0/jP6u9kQFdl74FXDn7UIH41+5+zVuwo2tP/wj7V/lp7EdjFX7GKeMIHcQtPJ4Od6a8Lv2PM3HMfZUP455/J3aqdfB3JFaxkqxuGpPRduHyKLJysrrC/7iuNY7vMqm9iFM7V7iLyv9rjF/PS9HPlPOtOEIvB93BnWj56EXP1aAflyeLOep3P39LO9J4OvJ4G/C6BTyW7HxAtg/bY7PEz72uFYen+Vb64HnixhUHu2N/9/9A25aOUx53zThCBxyV8nGuw+7/XfujFz2P6TIH9GyPQtNlNlZ9Zfb3uYieravyUv0ot9jpw8vh3glW/t9lyvZaVByh64Q03fsf72F/ZKKtZTIH3pL9K27xWfbP5n/4QvWXuo8Cn1RxhK5T/H/X/wO7/g7flOk8m8Pv+H+tWybPPfx/Zv+OW3yG//cP9fdzsHruUOcpGUfo5ejZwap9e1rXhc4zq7OZbjfFav4XcPtX87/Od2bldPbvuEW/d8/531vHvdc7g/eFsf9gbD8YDAaDwWAwGAwGg8FgMBgMBoPBYPD34RF70dn79JHBfhP/rPa9s8fS32kRYG9M9nmEPnVvqcPfaVxxiexL83x9/wjvANIP+zeeyVN2dTnNR/ft8ansr79jwr4j9tnpPrcsz2pv8K3yd3v11Yb6HhCH1hvdsodM+wT5PattV+jq8sgydV+k9o2s/zjYr5bl6Z9qb54/u9obsmt/3stE+vjf37Gh9n9tvIb9/XcH1D70ww7sI66gfanbyxbX9bdFOqzsT9uhTzs8/6z/c538eZeb7qHUfZsB2pu+a4l9fvqM7rHVfLVNkobvJzgZQ1QX/q6hrG8rqFtXnvqCzPaMvfiGVZnkqe/vUZn1/XIn9ve97lznf60n55J0nFRZuM939IrMei5E86U9qNxXfNPJfnE9X6G+AHmqvk273PHn2dkBzcf3lq/kx49r/gF0p+9iUz0y5vt8pdKxz3m0TtpffU+v7mXX+ZTmkb3bj/bg/fB0TOCcUzafcWBD/+3Mahxm/bQzliPL6dywsz961TEL/+ntSO2v/l33mpPnif31XCLtV8vM3l3l86zK/vxPO74yJ0C+7ONAfnRHG878Orqr/Krne+XddYHK/uo3AW0xixXomVFd31BXnR9W5xsy+1OujuV6Xc+lep/Scx+d/ZHJ29cz0MVdducWke6q3N14d9Ke9N062pc+2nmKwWDwofEPiCRqout3vRYAAAR5bWtCVPrOyv4Af6I2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4nO2aiW3rMBAFXUgaSSEpJI2kkBSSRlKIPzb4YzxsSNmxZPiaBwx0kOKxy0Mitd8rpZRSSimllFJK/df39/f+6+trSoXfg7Iel0z7EulfU1Wf3W435fPzc//6+vpzfst1px5V1i1Vvn95eTnYY+v0r630//v7+y9Kdax6P6P/afvP4P+ZPj4+ftoAcwFto64rjHbBdYXVkfgVzr1ZmnXMOLO0+rN1ThnSP6RXUD7KMUpzpIpXaVb/5/yR/V91S/BFH/+Jz7iIL3KczPmjwohf4ppnS5VXXdexnpnNRVke8mNsyvMsW6afVJxZG0i7VL7P4P8Otpv5/+3t7fCOiH14pvfHTCN9QZsgvNLinPZH/J5WHcs3vJeRXvd9PpNp0p66si3nHPjo/p9p5v/sO32eTEr4sOxY7SbHVMpQ9zP9VN4jr/TfqB1n/67wSh8f1vlsDiAeZeT9J+89itb4P4XNmG/p5/lugO2xYfbr7Jv0vXw3GI0V+T6a/T/HkPRVliXLO6vvEo+irfyPL/Ft9rWeTn8v6ONJjrXZ92bzUdaD/Hp7yPE802TM6TbpZJlu+Tvor9rK/6WyUb4Dlm37e3v3Ne0k/cD7BGnRpnjmFP9nPMYk8iLNXr4lPer8r5RSSimlnlOX2ufNdO9lL/nWlOsgl7BhfRvNvmv699RftfZ5tT+sOdSayWzNeo3S/31tI7/zR9/8S2shrJv082soyznqR/zjMbu/lN7oepbXLK1RvybubM1pVua/iv2y3PsjX9Y88pz2wjO5zp5tJPdeOWcNl3s5JrB3sya82zrLmeuJdY/1Ztaa+rpShfc61r1MK21Xx/QZkFdeox6nxHol90mXve6lMp+j7pdsb6P+z1obtmY/vms09le83Mct6COs860JP1Yv7JdjXv+3IfchEHsZdcy1yrRVptnzGtm3/xNBnNH9kf9HZT5Hff4/xf8Zf/b+kHbinL0Zjvgz/8lYE35qvfqcl3sC+HpUp/RBt09ez/LKsNE+E/ezP3OdeY/KfK628H/fRymfUKY8LzHWMX4yltGe14afUi/CGDf4jwAb074Qc233fx9zco/ymP/5fyLzKPX73f+zMp+rY/7PuR079H6SdS318Sl9g7+Iyzy2Vfgxu2cYtuT9OudhxnDiYue0NXud+DP3KI+Vg39r8SFtJ23KntnI/6Myn/MuyH5b1il9R9/OumKP0VhF3Eyv59f92fvBmnDCluqVYdSDuaT7N+fy0TcYz/fnRnn1MNpA34tMGxM/856Vufe1S2hpvUA9vvS/UkoppZRSSimllFJKXU07EREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREZE75B+Hl45q2TuOnAAAAVNta0JU+s7K/gB/pYUA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a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjMtYzAxMSA2Ni4xNDU2NjEsIDIwMTIvMDIvMDYtMTQ6NTY6MjcgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+QWRvYmUgRmlyZXdvcmtzIENTNiAoV2luZG93cyk8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTQtMTAtMTdUMTY6MzI6NTFaPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdGVEYXRlPjIwMTQtMTAtMTdUMTU6NTU6MzBaPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyI+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvcG5nPC9kYzpmb3JtYXQ+CiAgICAgICAgIDxkYzp0aXRsZT4KICAgICAgICAgICAgPHJkZjpBbHQ+CiAgICAgICAgICAgICAgIDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+RmxhZyBvZiBHZXJtYW55IGljb248L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QWx0PgogICAgICAgICA8L2RjOnRpdGxlPgogICAgICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGk+UGhpbDIwMDc8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L2RjOmNyZWF0b3I+CiAgICAgICAgIDxkYzpkZXNjcmlwdGlvbj4KICAgICAgICAgICAgPHJkZjpBbHQ+CiAgICAgICAgICAgICAgIDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+T3JpZ2luYWwgYXV0aG9yIGh0dHA6Ly9jb21tb25zLndpa2ltZWRpYS5vcmcvd2lraS9Vc2VyOlNrb3BwIE1vZGlmaWNhdGlvbnMgLSBjb252ZXJ0ZWQgdG8gUE5HPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOkFsdD4KICAgICAgICAgPC9kYzpkZXNjcmlwdGlvbj4KICAgICAgICAgPGRjOnJpZ2h0cz4KICAgICAgICAgICAgPHJkZjpBbHQ+CiAgICAgICAgICAgICAgIDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+aHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvMy4wLzwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpBbHQ+CiAgICAgICAgIDwvZGM6cmlnaHRzPgogICAgICAgICA8ZGM6c3ViamVjdD4KICAgICAgICAgICAgPHJkZjpCYWc+CiAgICAgICAgICAgICAgIDxyZGY6bGk+R2VybWFueTwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpPkdlcm1hbjwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpPmZsYWc8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaT5pY29uPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGk+c21hbGw8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaT5zaGFkb3c8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaT5ib3JkZXI8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaT5wbmc8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QmFnPgogICAgICAgICA8L2RjOnN1YmplY3Q+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iPgogICAgICAgICA8cGhvdG9zaG9wOkNhcHRpb25Xcml0ZXI+RmxhZyBvZiBHZXJtYW55PC9waG90b3Nob3A6Q2FwdGlvbldyaXRlcj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcFJpZ2h0cz0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3JpZ2h0cy8iPgogICAgICAgICA8eG1wUmlnaHRzOk1hcmtlZD5UcnVlPC94bXBSaWdodHM6TWFya2VkPgogICAgICAgICA8eG1wUmlnaHRzOldlYlN0YXRlbWVudD5odHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS8zLjAvPC94bXBSaWdodHM6V2ViU3RhdGVtZW50PgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pvf+FJgAAAoDSURBVHic7dlBEYAwEATBg8K/NBygJbiYPNKtYL9Te83MGgAAgMC9ewAAAHAOAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkHm+3QsAAIBjeEAAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyFzrnbV7BAAAcAYPCAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAACZH4UyCGm17iMbAAAAAElFTkSuQmCC",mc="data:image/png;base64,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",Ic="data:image/png;base64,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",Cc="data:image/png;base64,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",vc="data:image/png;base64,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nc9oNkhFaJTlte1c//E+gkcuEC0W4ZFNFWxoP5d0IsmD33x/LuQYisGLW6pIpWeTNWdhWrMpr2hkdk09odCxN+pv2bmDZ5q3cueam4/78wYGBujtbqGQ24/f24PP3U1tTTcXNuXe08jvnfz0tzVs61nA+bM7WX1lFzPecn5xwythHmteyKGRagzD5Jyqfq5ZuosPn5ufWGZ/j5uHNtWza6COqxq3sfpq3T4hcjpRCOVds2042GPR3lHKaDJKwYyAEaFghnC53GRzbgIBP5lsikiJm3wujduVxOdN4TIS1NbEmT+vQGnk5Iz4RETeC4VQREQcTXONioiIoymEIiLiaAqhiIg4mkIoIiKOphCKiIijKYQiIuJoCqGIiDiaQigiIo6mEIqIiKMphCIi4mgKoYiIOJpCKCIijqYQioiIoymEIiLiaAqhiIg4mkIoIiKOphCKiIijGR1E9IR6ERFxLI0IRUTE0RRCERFxNIVQREQcTSEUERFHUwhFRMTRFEIREXE0hVBERBxNIRQREUdTCEVExNEUQhERcTSFUEREHE0hFBERR1MIRUTE0RRCERFxNIVQREQcTSEUERFHUwhFRMTRFEIREXE0hVBERBxNIRQREUdTCEVExNEUQhERcTSFUEREHE0hFBERR1MIRUTE0RRCERFxNIVQREQcTSEUERFHUwhFRMTRFEIREXE0hVBERBxNIRQREUdTCEVExNEUQhERcTSFUEREHE0hFBERR1MIRUTE0RRCERFxNIVQREQcTSEUERFHUwhFRMTRFEIREXE0hVBERBxNIRQREUdTCEVExNEUQhERcTSFUEREHE0hFBERR1MIRUTE0RRCERFxNIVQREQcTSEUERFHUwhFRMTRFEIREXE0hVBERBxNIRQREUdTCEVExNEUQhERcTSFUEREHE0hFBERR1MIRUTE0RRCERFxNIVQREQcTSEUERFHUwhFRMTRFEIREXE0hVBERBxNIRQREUdTCEVExNEUQhERcTSFUEREHE0hFBERR1MIRUTE0RRCERFxtP8HOHUqzzr9sygAAAAASUVORK5CYII=",xc="data:image/png;base64,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",Ec="data:image/png;base64,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",Sc="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA8AAAAKAAgMAAAAul/nQAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACVBMVEUAkkb////OKzdsRJOSAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+kECAABIgHQHmAAAAJ0SURBVHja7c8xAQAACAOglbSkKS2xT2hAUjZlWxZhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh4R/hAzW+Q6qmKxk5AAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDI1LTA0LTA4VDAwOjAxOjM0KzAwOjAwSGxLUQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyNS0wNC0wOFQwMDowMTozNCswMDowMDkx8+0AAAAASUVORK5CYII=",Mc="data:image/png;base64,UklGRlwEAABXRUJQVlA4TE8EAAAvScE2AH/FuG3bQPvPeu/7NSYK524GBG3bxvwhb/vjuG0jSXL+wc53zxLnn0DSJsHdY0gQDIAAYATANmzC+14Sm/PMYwpAIlJNGQmAFAZSADRQVgKmwOnvgurURFIYmA4kphOUoRlHBJAS0URuymZVcDp1pwQp4yzj5VUfmdIBRkS+/acjGDj9fU74/2MbABRt2zYlSSeUdqBs27Zt27Zt25WsF0jrnd+syrj77tuMiP5PgOT8n/N/zv//SzU8eOKKvZfvv6vxmlWbvJp39y/tXT5hUNixBAYtOP6iTX9z2/Nj8wcGHEl85rl6/eN1Z2bEnUfV7Kud2kO7Hy7r5TCCw853aI/uujkl7CbK13zXLPy2qsw99N6d0SxN70q4hdjOZs3ipm1RdxBZltIsT67NdwQjP6sBPw53AZWH1JDnY/RNqFNj1o7jrnCvGvV0MXEDP6hh3/ajbVxKjZuZzFlgo68G9tczFj6khj4Roavouhr7WiFZxbfU4PfKqCp9rEZ/VEJU4R01/MNimvKuq/GvRUgKnFCAR0napBDXUTTex+BPIqh/WkFmBtJT/EFhvilk54gC3U/OeEXqj6UmVgdFa6qYOatgjxMzUtH6Q2nJ+wRH30dYWa2Al5ISSyH6VcnJToW8hZLezZiaEozsVtA7CClLo0qX87FGYa+kI/Qd19cgG6MU+Ag2LiO7SEa8E1lHlIvFCn0hF3ew3aQi3oWtM8rELAU/jYlz6E4REahHVx3gYZDC78vDQnzzeDiG7wgPL/E9oyHchq8lxMJgtcABLEy0gbEsrLSBpSzss4HdLFyygYssPLCBuyy8t4E3LFTbwA8WUjbgsdBiA80sdNlA198PWmygmYWUDXgsVNvADxbe2cBrFu7ZwG0WLtnARRb22sBuFlbYwFIWJtrAWBYG2UB/FsKt+FpCLMhzfE+ExmP4jvCwAN8cHgbg68NDoA7dTyHyLLoTTMxEN5WJeBe2ziom5Ba2G0LlImzzuYh1IGuv4kIuITsvZI5ENpyN4DdcX4JsyCpcy4TO0hQqr4QP2YVqqxAay2BqjDMi2zBtFkqjHqKGCk5kOaIlQmr4LZ53YVZkOBx/iPB6Cs0RITZai6W6khkZ6SPxxwi3B5HsFXKL3uJ4VcCO9E2h8PoIv+N8DN2jheENGNYIxwcQHBGSI9fMdyXMkhTeNt2tAuG55JHZHhYL08U3TXa3VLguvGauKwXCduiAqY5GhPB1vom61wjnoz3zpCcK633fmOZVH+G9YK9vEv9QkVA/psYc1aOE/YpDvhn801FxgEPfm+DNEHGD4UV12fZrWVicYenaVDY1bq8UpxjfkcqW5NaoOMfSlV+z4cvyEnGSwWHn23tW+9UpIXGXlbOvdvSUrofLEuI6o9NP1fy56pNTq8SR9pt75Fnr72p5enhOX3Gsof7jlu25ePfNTy+jmvF+vrl7Yc/Ssf1DkvN/zv85//8vVQA=",yc="data:image/png;base64,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",bc="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAIVBAMAAADbnobxAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAG1BMVEX///+qveEANKMAOaYAOamOL0vaKhrVKx4AAACnHtw1AAAAAWJLR0QIht6VegAAAAlwSFlzAAAN1wAADdcBQiibeAAAAAd0SU1FB+gHCBEgFNPt/igAAAI2SURBVHja7dFBEYAwAAOwWsACFmYBC1jAwuxPwd7rHYmFJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwN5FldxUyaCKECEIEYIQIQgRghAhCEGIEIQIQYgQhAhBCEKEIEQIQoQgRAhCECIEIUIQIgQhQhCCECEIEYIQIQgRghCECEGIEIQIQYgQhCBECEKEIEQIQoQgBCFCECIEIUIQIgQhCBGCECEIEYIQIQhBiBCECEGIEIQIQYgQhCBECEKEIEQIQoQgBCFCECIEIUIQIgQhCBGCECEIEYIQIQhBiBCECEGIEIQIQQhChCBECEKEIEQIQhAiBCFCECIEIUIQghAhCBGCECEIEYIQhAhBiBCECEGIEIQgRAhChCBECEKEcCDkoUpequSjSiZVhAhBiBCECEGIEIQIQQhChCBECEKEIEQIQhAiBCFCECIEIUIQghAhCBGCECEIEYIQhAhBiBCECEGIEIQgRAhChCBECEKEIAQhQhAiBCFCECIEIQgRghAhCBGCECEIQYgQhAhBiBCECEEIQoQgRAhChCBECEKEIAQhQhAiBCFCECIEIQgRghAhCBGCECEIQYgQhAhBiBCECEEIQoQgRAhChCBECEIQIgQhQhAiBCFCEIIQIQgRghAhCBGCEIQIQYgQhAhBiBCEIEQIQoQgRAhChCAEIUIQIgQhQhAiBCG/twAF+zc5lLr9EAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyNC0wNy0wOFQxNzozMjoxOSswMDowME1J9akAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjQtMDctMDhUMTc6MzI6MTkrMDA6MDA8FE0VAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAABJRU5ErkJggg==",Tc="data:image/png;base64,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",zn={[_t.ENGLISH_UNITED_KINGDOM]:Ic,[_t.ENGLISH_UNITED_STATES]:Cc,[_t.ENGLISH_AUSTRALIA]:mc,[_t.FRENCH]:xc,[_t.GERMAN_GERMANY]:pc,[_t.GERMAN_SWITZERLAND]:gc,[_t.HINDI_INDIA]:Ec,[_t.ITALIAN]:Sc,[_t.JAPANESE_JAPAN]:Mc,[_t.PORTUGUESE_BRAZILIAN]:fc,[_t.PORTUGUESE_PORTUGAL]:yc,[_t.RUSSIAN]:bc,[_t.SPANISH_SPAIN]:vc,[_t.CHINESE_CHINA]:Tc},wc={[gi.FERRARI]:zn[_t.ITALIAN],[gi.LIGHT]:zn[_t.ENGLISH_UNITED_KINGDOM],[gi.LIGHT_BLUE]:zn[_t.FRENCH],[gi.DARK]:zn[_t.ENGLISH_UNITED_STATES],[gi.DARK_PURPLE]:zn[_t.JAPANESE_JAPAN]},ar={CONFIRMATION_DIALOG_CONFIRM:"confirmation-dialog-confirm",CONFIRMATION_DIALOG_UNDO:"confirmation-dialog-undo"},Ae="",TA={SHOW_MODAL:"show-modal",CLOSE:"close"};`${btoa({CUSTOM_CROSSHAIR:`<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
|
|
10
10
|
<!-- White border (underneath) -->
|
|
11
11
|
<line x1="16" y1="2" x2="16" y2="30" stroke="white" stroke-width="5"/>
|
|
12
12
|
<line x1="2" y1="16" x2="30" y2="16" stroke="white" stroke-width="5"/>
|
|
@@ -14,13 +14,13 @@
|
|
|
14
14
|
<!-- Black crosshair lines (on top) -->
|
|
15
15
|
<line x1="16" y1="2" x2="16" y2="30" stroke="black" stroke-width="2"/>
|
|
16
16
|
<line x1="2" y1="16" x2="30" y2="16" stroke="black" stroke-width="2"/>
|
|
17
|
-
</svg>`}.CUSTOM_CROSSHAIR)}`;const
|
|
17
|
+
</svg>`}.CUSTOM_CROSSHAIR)}`;const ca={ANY:"any",NONE:"none"},wA={KEY_DOWN:"keydown"},Vi={CLICK:"click"},Rc={FERRARI:"ferrari",LIGHT:"light",LIGHT_BLUE:"light-blue",DARK:"dark",DARK_PURPLE:"dark-purple"},ua=r=>{RA(),document.body.classList.add(r)},RA=()=>{document.body.classList.remove(...Object.values(Rc))},_c="base-button",Pc=`<button part="button">
|
|
18
18
|
<slot></slot>
|
|
19
19
|
</button>
|
|
20
|
-
`,
|
|
20
|
+
`,Dc=":where(button,input[type=button],input[type=submit],input[type=reset]),:where(input[type=file])::file-selector-button{cursor:pointer;-webkit-user-select:none;user-select:none;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);font-family:var(--font-family-base);letter-spacing:var(--letter-spacing-normal);line-height:var(--line-height-normal);padding-block:var(--button-padding-block-md);padding-inline:var(--button-padding-inline-md);display:inline-flex;justify-content:center;align-items:center;text-align:center;gap:var(--gap-sm);background:var(--color-bg-secondary);color:var(--color-text-primary);border:var(--border-width-1) solid var(--color-border-primary);border-radius:var(--border-radius-lg);transition:all var(--transition-base)}:where(button,input[type=button],input[type=submit],input[type=reset])>.material-symbols-outlined{font-size:var(--font-size-xl);font-family:Material Symbols Outlined;line-height:1}:where(button,input[type=button],input[type=submit],input[type=reset])[disabled]{opacity:.3;cursor:not-allowed}:where(button,input[type=button],input[type=submit],input[type=reset]):where(:not(:disabled):hover),:where(button,input[type=button],input[type=submit],input[type=reset]):where(:not(:disabled):active){background:var(--color-hover-bg-secondary);border-color:var(--color-hover-border-secondary)}:where(input[type=file]){inline-size:100%;max-inline-size:max-content;background-color:var(--color-bg-secondary)}",_A=new CSSStyleSheet;_A.replaceSync(Dc);class Ht extends HTMLElement{static autofocusAttribute="autofocus";static commandAttribute="command";static commandforAttribute="commandfor";static disabledAttribute="disabled";static nameAttribute="name";static titleAttribute="title";static typeAttribute="type";static valueAttribute="value";constructor(){super(),this.attachShadow({mode:"open"}),this.shadowRoot?.adoptedStyleSheets.push(_A)}static get observedAttributes(){return[Ht.autofocusAttribute,Ht.commandAttribute,Ht.commandforAttribute,Ht.disabledAttribute,Ht.nameAttribute,Ht.titleAttribute,Ht.typeAttribute,Ht.valueAttribute]}get buttonElement(){return this.shadowRoot?.querySelector("button")}get autofocus(){return this.hasAttribute(Ht.autofocusAttribute)}set autofocus(t){t?this.setAttribute(Ht.autofocusAttribute,Ae):this.removeAttribute(Ht.autofocusAttribute)}get command(){return this.getAttribute(Ht.commandAttribute)??Ae}set command(t){this.setAttribute(Ht.commandAttribute,t)}get commandfor(){return this.getAttribute(Ht.commandforAttribute)??Ae}set commandfor(t){t!==Ae?this.setAttribute(Ht.commandforAttribute,t):this.removeAttribute(Ht.commandforAttribute)}get disabled(){return this.hasAttribute(Ht.disabledAttribute)}set disabled(t){t?this.setAttribute(Ht.disabledAttribute,Ae):this.removeAttribute(Ht.disabledAttribute)}get name(){return this.getAttribute(Ht.nameAttribute)??Ae}set name(t){t!==Ae?this.setAttribute(Ht.nameAttribute,t):this.removeAttribute(Ht.nameAttribute)}get headline(){return this.getAttribute(Ht.titleAttribute)??Ae}set headline(t){t!==Ae?this.setAttribute(Ht.titleAttribute,t):this.removeAttribute(Ht.titleAttribute)}get type(){return this.getAttribute(Ht.typeAttribute)??"button"}set type(t){t!==Ae?this.setAttribute(Ht.typeAttribute,t):this.removeAttribute(Ht.typeAttribute)}get value(){return this.getAttribute(Ht.valueAttribute)??"button"}set value(t){t!==Ae?this.setAttribute(Ht.valueAttribute,t):this.removeAttribute(Ht.valueAttribute)}connectedCallback(){this._render(),this._addEventListeners()}disconnectedCallback(){this._removeEventListeners()}attributeChangedCallback(t,e,i){i!==e&&this._syncAttribute(t)}_render(){this.shadowRoot!==null&&(this.shadowRoot.innerHTML=Pc,this._syncAttributes())}_addEventListeners(){this.buttonElement.addEventListener(Vi.CLICK,this._handleClick)}_removeEventListeners(){this.buttonElement.addEventListener(Vi.CLICK,this._handleClick)}_handleClick=()=>{if(this.command===Ae||this.commandfor===Ae)return;let t=document.getElementById(this.commandfor);if(t??=this._findElementInShadowDOM(this.commandfor),t===null)return;const e=t;switch(this.command){case TA.SHOW_MODAL:e.showModal?.();break;case TA.CLOSE:e.close?.();break}};_findElementInShadowDOM(t){const e=`#${CSS.escape(t)}`;let i=this.querySelector(e);if(i!==null||(i=this._searchInShadowRootsOfChildren(this,e),i!==null))return i;let n=this.parentElement;for(;n!==null;){if(i=n.querySelector(e),i!==null||(i=this._searchInShadowRootsOfChildren(n,e),i!==null))return i;const s=n.parentElement;if(s!==null)n=s;else{const a=n.getRootNode();if(a instanceof ShadowRoot&&a.host!==null)n=a.host;else break}}return null}_searchInShadowRootsOfChildren(t,e){const i=t.children;for(const n of i){if(n.shadowRoot!==null){const a=n.shadowRoot.querySelector(e);if(a!==null)return a;const o=this._searchInShadowRootsOfChildren(n.shadowRoot,e);if(o!==null)return o}const s=this._searchInShadowRootsOfChildren(n,e);if(s!==null)return s}return null}_syncAttribute(t){const e=this.buttonElement;e!==null&&(this.hasAttribute(t)?e.setAttribute(t,this.getAttribute(t)??Ae):e.removeAttribute(t))}_syncAttributes(){Ht.observedAttributes.forEach(t=>{this._syncAttribute(t)})}}const PA=Object.freeze(Object.defineProperty({__proto__:null,BaseButtonComponent:Ht,selector:_c},Symbol.toStringTag,{value:"Module"}));new CSSStyleSheet().replaceSync("button[part=button]{background:var(--color-warning);font-weight:var(--font-weight-medium);padding-block:var(--button-padding-block-md);padding-inline:var(--button-padding-inline-md);border-radius:var(--border-radius-lg);border:none;box-shadow:var(--shadow-md);transition:all var(--transition-base);cursor:pointer;display:flex;align-items:center;justify-content:center;gap:var(--gap-sm)}button[part=button]:hover{filter:brightness(1.2)}");const DA="undo-button";new CSSStyleSheet().replaceSync("button[part=button]{background:var(--color-success);font-weight:var(--font-weight-medium);padding-block:var(--button-padding-block-md);padding-inline:var(--button-padding-inline-md);border-radius:var(--border-radius-lg);border:none;box-shadow:var(--shadow-md);transition:all var(--transition-base);cursor:pointer;display:flex;align-items:center;justify-content:center;gap:var(--gap-sm)}button[part=button]:hover{filter:brightness(1.2)}");const LA="confirm-button";new CSSStyleSheet().replaceSync("button[part=button]{border:none;background:transparent}button[part=button]:not(:disabled):hover{transform:scale(1.2)}"),new CSSStyleSheet().replaceSync("button[part=button]{border:none;background:transparent}button[part=button]:not(:disabled):hover{transform:scale(1.2)}");const Lc=`<dialog part="dialog">
|
|
21
21
|
<slot></slot>
|
|
22
22
|
</dialog>
|
|
23
|
-
`,
|
|
23
|
+
`,Nc="dialog{background-color:var(--color-bg-primary);color:var(--color-text-primary);border:var(--border-width-1) solid var(--color-border-secondary);border-radius:var(--border-radius-xl);padding:var(--spacing-4);max-width:90vw;max-height:90vh;font-family:var(--font-family-base);line-height:var(--line-height-normal);font-size:var(--font-size-sm);box-shadow:var(--shadow-2xl);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);animation:slideIn var(--transition-base) cubic-bezier(.34,1.56,.64,1) forwards}dialog.closing{animation:slideOut var(--transition-base) cubic-bezier(.34,1.56,.64,1) forwards}dialog::backdrop{background:var(--window-backdrop);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);animation:fadeIn var(--transition-base) ease-out forwards}dialog.closing::backdrop{animation:fadeOut var(--transition-base) ease-out forwards}@keyframes slideIn{0%{opacity:0;transform:scale(.95) translateY(-20px)}to{opacity:1;transform:scale(1) translateY(0)}}@keyframes slideOut{0%{opacity:1;transform:scale(1) translateY(0)}to{opacity:0;transform:scale(.95) translateY(-20px)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}",NA=new CSSStyleSheet;NA.replaceSync(Nc);class hn extends HTMLElement{static closedByAttribute="closedby";_closedBy=ca.ANY;constructor(){super(),this.attachShadow({mode:"open"}),this.shadowRoot?.adoptedStyleSheets.push(NA)}static get observedAttributes(){return[hn.closedByAttribute]}get dialogElement(){return this.shadowRoot?.querySelector("dialog")}get command(){return this.getAttribute(hn.closedByAttribute)??ca.ANY}get closedBy(){return this._closedBy}set closedBy(t){this._closedBy=t,this.setAttribute(hn.closedByAttribute,t)}connectedCallback(){this._render(),this._addEventListeners()}disconnectedCallback(){this._removeEventListeners()}attributeChangedCallback(t,e,i){this.dialogElement!=null&&i!==e&&this._syncAttribute(t)}_addEventListeners(){}_removeEventListeners(){}_render(){this.shadowRoot!==null&&(this.shadowRoot.innerHTML=Lc,this._syncAttributes())}_syncAttribute(t){const e=this.dialogElement;e!=null&&(this.hasAttribute(t)===!0?e.setAttribute(t,this.getAttribute(t)??Ae):e.removeAttribute(t))}_syncAttributes(){hn.observedAttributes.forEach(t=>{this._syncAttribute(t)})}show(){this.dialogElement.show()}showModal(){this.dialogElement.showModal()}close(t){const e=this.dialogElement;e.classList.add("closing"),setTimeout(()=>{e.close(t),e.classList.remove("closing")},300)}}const Bc=`<dialog part="dialog">
|
|
24
24
|
<header part="header">
|
|
25
25
|
<h2></h2>
|
|
26
26
|
</header>
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
<undo-button></undo-button>
|
|
33
33
|
</footer>
|
|
34
34
|
</dialog>
|
|
35
|
-
`,
|
|
35
|
+
`,Fc="dialog header[part=header] h2{margin:0;padding:0}dialog div[part=body] p{margin:0;padding:0}dialog footer[part=footer]{display:flex;gap:var(--gap-md);justify-content:flex-end}",Oc=`<dialog part="dialog">
|
|
36
36
|
<header part="header">
|
|
37
37
|
<slot name="header"></slot>
|
|
38
38
|
</header>
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
<slot name="footer"></slot>
|
|
44
44
|
</footer>
|
|
45
45
|
</dialog>
|
|
46
|
-
`,
|
|
46
|
+
`,Uc='dialog[open]{display:flex;flex-direction:column;gap:var(--spacing-4)}dialog>[part]{position:relative}dialog>[part][hidden]{display:none}dialog>[part][data-divider=true]:after{content:"";position:absolute;left:0;right:0;bottom:0;border-bottom:var(--border-width-1) solid var(--color-neutral-600)}dialog>[part][data-divider=true]{padding-bottom:var(--spacing-4)}dialog div[part=body]{flex:1;min-height:0}',BA=new CSSStyleSheet;BA.replaceSync(Uc);let FA=class extends hn{_sectionNames=["header","body","footer"];_handleSlotChange=()=>{this._updateSectionState()};constructor(){super(),this.shadowRoot?.adoptedStyleSheets.push(BA)}static get observedAttributes(){return hn.observedAttributes}_render(){this.shadowRoot!==null&&(this.shadowRoot.innerHTML=Oc,this._syncAttributes())}_addEventListeners(){super._addEventListeners(),this.shadowRoot!==null&&(this.shadowRoot.querySelectorAll("slot").forEach(t=>{t.addEventListener("slotchange",this._handleSlotChange)}),this._updateSectionState())}_removeEventListeners(){super._removeEventListeners(),this.shadowRoot!==null&&this.shadowRoot.querySelectorAll("slot").forEach(t=>{t.removeEventListener("slotchange",this._handleSlotChange)})}_updateSectionState(){if(this.shadowRoot===null)return;const t=[];this._sectionNames.forEach(e=>{const i=this.shadowRoot?.querySelector(`[part='${e}']`),n=this.shadowRoot?.querySelector(`slot[name='${e}']`);if(i===null||n===null)return;const s=n.assignedNodes({flatten:!0}).some(a=>a.nodeType===Node.TEXT_NODE?a.textContent?.trim().length!==0:a.nodeType===Node.ELEMENT_NODE);i.toggleAttribute("hidden",s===!1),i.dataset.filled=String(s),i.removeAttribute("data-divider"),s===!0&&t.push(i)}),t.slice(0,-1).forEach(e=>{e.dataset.divider="true"})}};const OA=new CSSStyleSheet;OA.replaceSync(Fc);class Je extends FA{_headline=Ae;_text=Ae;_value=void 0;static textAttribute="text";static headlineAttribute="headline";static valueAttribute="value";constructor(){super(),this.shadowRoot?.adoptedStyleSheets.push(OA)}static get observedAttributes(){return[...FA.observedAttributes,Je.textAttribute,Je.headlineAttribute,Je.valueAttribute]}get headline(){return this._headline}set headline(t){this._headline=t,this.setAttribute(Je.headlineAttribute,t)}get text(){return this._text}set text(t){this._text=t,this.setAttribute(Je.textAttribute,t)}get value(){return this._value}set value(t){this._value=t}connectedCallback(){this._render(),this._addEventListeners(),this.closedBy=ca.NONE}_render(){this.shadowRoot!==null&&(this.shadowRoot.innerHTML=Bc,this._syncAttributes())}_syncAttribute(t){if(Je.observedAttributes.includes(t))switch(t){case Je.headlineAttribute:{this._headline=this.getAttribute(t)??Ae;const e=this.shadowRoot?.querySelector("h2");e!=null&&(e.textContent=this._headline);break}case Je.textAttribute:{this._text=this.getAttribute(t)??Ae;const e=this.shadowRoot?.querySelector("p");e!=null&&(e.textContent=this._text);break}case Je.valueAttribute:{this._value=this.getAttribute(t);break}default:super._syncAttribute(t)}else super._syncAttribute(t)}_syncAttributes(){super._syncAttributes(),Je.observedAttributes.forEach(t=>{this._syncAttribute(t)})}_addEventListeners(){super._addEventListeners(),this.shadowRoot?.querySelector(LA)?.addEventListener(Vi.CLICK,this._handleConfirm),this.shadowRoot?.querySelector(DA)?.addEventListener(Vi.CLICK,this._handleUndo)}_removeEventListeners(){super._removeEventListeners(),this.shadowRoot?.querySelector(LA)?.removeEventListener(Vi.CLICK,this._handleConfirm),this.shadowRoot?.querySelector(DA)?.removeEventListener(Vi.CLICK,this._handleUndo)}_handleConfirm=()=>{const t=new CustomEvent(ar.CONFIRMATION_DIALOG_CONFIRM,{bubbles:!0,composed:!0,detail:{value:this._value}});this.dispatchEvent(t)};_handleUndo=()=>{const t=new CustomEvent(ar.CONFIRMATION_DIALOG_UNDO,{bubbles:!0,composed:!0,detail:{value:this._value}});this.dispatchEvent(t),this._value=void 0}}const zc="confirmation-dialog",Gc={CONFIRMATION_DIALOG_CONFIRM:ar.CONFIRMATION_DIALOG_CONFIRM,CONFIRMATION_DIALOG_UNDO:ar.CONFIRMATION_DIALOG_UNDO},Wi=Object.freeze(Object.defineProperty({__proto__:null,COMPONENT_CUSTOM_MESSAGES:Gc,ConfirmationDialogComponent:Je,selector:zc},Symbol.toStringTag,{value:"Module"})),kc=`<div class="bar-menu-container">
|
|
47
47
|
<previous-button class="nav-prev" part="nav-prev-button"></previous-button>
|
|
48
48
|
|
|
49
49
|
<div class="buttons-wrapper" part="buttons-wrapper">
|
|
@@ -52,11 +52,11 @@
|
|
|
52
52
|
|
|
53
53
|
<next-button class="nav-next" part="nav-next-button"></next-button>
|
|
54
54
|
</div>
|
|
55
|
-
`,tu=":host{display:block;width:100%}.bar-menu-container{display:flex;align-items:center;justify-content:space-between;height:100%;gap:var(--gap-sm);padding:var(--spacing-1);background:var(--color-bg-primary);border-radius:var(--border-radius-full);border:var(--border-width-2) solid var(--color-border-secondary);box-shadow:var(--shadow-sm);margin:0 auto}.bar-menu-container .nav-prev,.bar-menu-container .nav-next{flex-shrink:0;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .2s ease-in-out,visibility .2s ease-in-out}.bar-menu-container .nav-prev.visible,.bar-menu-container .nav-next.visible{opacity:1;visibility:visible;pointer-events:auto}.bar-menu-container .nav-prev::part(button),.bar-menu-container .nav-next::part(button){background-color:transparent;box-shadow:none}.bar-menu-container .buttons-wrapper{display:grid;grid-template-columns:repeat(var(--bar-menu-visible-count, 3),1fr);grid-auto-rows:max-content;align-items:center;justify-items:center;gap:var(--gap-sm);overflow:hidden;position:relative;width:auto}::slotted(*){display:none;flex-shrink:0;will-change:opacity,transform;contain:layout style paint;opacity:0;transform:scale(.8)}::slotted(.animating){transition:opacity .4s cubic-bezier(.34,1.56,.64,1),transform .4s cubic-bezier(.34,1.56,.64,1)}::slotted(.visible-button){display:inline-flex!important;pointer-events:auto;opacity:1;transform:scale(1)}",Wl=new CSSStyleSheet;Wl.replaceSync(tu);class ri extends HTMLElement{static _visibleCountAttribute="visible-count";static _cyclicalNavigationAttribute="cyclical-navigation";_currentIndex=0;_visibleCount=3;_cyclicalNavigation=!1;_MIN_VISIBLE=1;_MAX_VISIBLE=5;_slotElement=null;_navPrevButton=null;_navNextButton=null;_buttonsWrapper=null;_slotChangeListener=null;_keyDownListener=null;constructor(){super(),this.attachShadow({mode:"open"}),this.shadowRoot?.adoptedStyleSheets.push(Wl)}static get observedAttributes(){return[ri._visibleCountAttribute,ri._cyclicalNavigationAttribute]}get visibleButtons(){const t=this.getAttribute(ri._visibleCountAttribute);if(t!==null&&t!==he){const e=parseInt(t,10);return Math.max(this._MIN_VISIBLE,Math.min(this._MAX_VISIBLE,e))}return this._visibleCount}set visibleButtons(t){const e=Math.max(this._MIN_VISIBLE,Math.min(this._MAX_VISIBLE,t));this.setAttribute(ri._visibleCountAttribute,String(e))}get cyclicalNavigation(){return this.hasAttribute(ri._cyclicalNavigationAttribute)}set cyclicalNavigation(t){t?this.setAttribute(ri._cyclicalNavigationAttribute,he):this.removeAttribute(ri._cyclicalNavigationAttribute)}connectedCallback(){this._render(),this._cacheElements(),this._setupSlotListener(),this._setupKeyboardListener(),this._updateButtonVisibility()}disconnectedCallback(){this._removeSlotListener(),this._removeKeyboardListener()}attributeChangedCallback(t,e,i){t===ri._visibleCountAttribute?(this._visibleCount=this.visibleButtons,this._buttonsWrapper!==null&&this._buttonsWrapper.style.setProperty("--bar-menu-visible-count",String(this.visibleButtons)),this._updateButtonVisibility()):t===ri._cyclicalNavigationAttribute&&(this._cyclicalNavigation=this.cyclicalNavigation,this._updateButtonVisibility())}_render(){this.shadowRoot!==null&&(this.shadowRoot.innerHTML=$c)}_cacheElements(){this._slotElement=this.shadowRoot?.querySelector("slot")??null,this._navPrevButton=this.shadowRoot?.querySelector(".nav-prev")??null,this._navNextButton=this.shadowRoot?.querySelector(".nav-next")??null,this._buttonsWrapper=this.shadowRoot?.querySelector(".buttons-wrapper")??null,this._buttonsWrapper!==null&&this._buttonsWrapper.style.setProperty("--bar-menu-visible-count",String(this.visibleButtons)),this._navPrevButton!==null&&(this._navPrevButton.setAttribute("aria-label","Previous"),this._navPrevButton.addEventListener(Zi.CLICK,()=>{this._scrollPrevious()})),this._navNextButton!==null&&(this._navNextButton.setAttribute("aria-label","Next"),this._navNextButton.addEventListener(Zi.CLICK,()=>{this._scrollNext()}))}_setupSlotListener(){this._slotElement!==null&&(this._slotChangeListener=()=>{this._currentIndex=0,this._updateButtonVisibility()},this._slotElement.addEventListener("slotchange",this._slotChangeListener))}_removeSlotListener(){this._slotElement!==null&&this._slotChangeListener!==null&&this._slotElement.removeEventListener("slotchange",this._slotChangeListener)}_setupKeyboardListener(){this._keyDownListener=t=>{t.key==="ArrowLeft"?(t.preventDefault(),this._scrollPrevious()):t.key==="ArrowRight"&&(t.preventDefault(),this._scrollNext())},this.addEventListener(Nl.KEY_DOWN,this._keyDownListener)}_removeKeyboardListener(){this._keyDownListener!==null&&this.removeEventListener(Nl.KEY_DOWN,this._keyDownListener)}_getSlottedButtons(){return this._slotElement===null?[]:this._slotElement.assignedElements()}_updateButtonVisibility(t){const e=this._getSlottedButtons(),i=e.length,n=this.visibleButtons,r=this._currentIndex,a=Math.min(r+n,i);e.forEach((o,h)=>{const l=h>=r&&h<a,A=o;l||(o.classList.remove("visible-button"),o.classList.remove("animating"),A.style.display="none")}),t!==void 0?(e[0]?.offsetHeight,e.forEach((o,h)=>{if(h>=r&&h<a){const l=o;l.style.display="inline-flex",o.classList.add("animating");const A=h%this.visibleButtons*50;l.style.transitionDelay=`${A}ms`}}),e[0]?.offsetHeight,e.forEach((o,h)=>{h>=r&&h<a&&o.classList.add("visible-button")}),setTimeout(()=>{e.forEach(o=>{o.classList.remove("animating"),o.style.transitionDelay=he})},400)):e.forEach((o,h)=>{const l=h>=r&&h<a,A=o;l&&(A.style.display="inline-flex",o.classList.add("visible-button"))}),this._updateNavigationButtons(i,n)}_updateNavigationButtons(t,e){const i=t>e,n=this._currentIndex+e<t,r=this._currentIndex===0,a=!n;this._navPrevButton!==null&&(i?(this._navPrevButton.classList.add("visible"),this._navPrevButton.disabled=!this._cyclicalNavigation&&r):this._navPrevButton.classList.remove("visible")),this._navNextButton!==null&&(i?(this._navNextButton.classList.add("visible"),this._navNextButton.disabled=!this._cyclicalNavigation&&a):this._navNextButton.classList.remove("visible"))}_scrollPrevious(){const t=this._getSlottedButtons().length,e=this.visibleButtons;this._currentIndex>0?(this._currentIndex=Math.max(0,this._currentIndex-e),this._updateButtonVisibility("previous")):this._cyclicalNavigation&&t>e&&(this._currentIndex=Math.max(0,t-e),this._updateButtonVisibility("previous"))}_scrollNext(){const t=this._getSlottedButtons().length,e=this.visibleButtons,i=this._currentIndex+e;i<t?(this._currentIndex=i,this._updateButtonVisibility("next")):this._cyclicalNavigation&&t>e&&(this._currentIndex=0,this._updateButtonVisibility("next"))}scrollToButton(t){const e=this._getSlottedButtons().length,i=this.visibleButtons;t>=0&&t<e&&(this._currentIndex=Math.max(0,Math.min(t,e-i)),this._updateButtonVisibility())}getVisibleButtons(){return this._getSlottedButtons().filter(t=>t.classList.contains("visible-button"))}getAllButtons(){return this._getSlottedButtons()}getCurrentIndex(){return this._currentIndex}}const eu="bar-menu",iu=Object.freeze(Object.defineProperty({__proto__:null,BarMenuComponent:ri,selector:eu},Symbol.toStringTag,{value:"Module"})),Ve="srgb",Yl="srgb-linear",Xl="linear",va="srgb";function nu(s){for(let t=s.length-1;t>=0;--t)if(s[t]>=65535)return!0;return!1}function Zl(s){return document.createElementNS("http://www.w3.org/1999/xhtml",s)}const jl={};function Jl(s){const t=s[0];if(typeof t=="string"&&t.startsWith("TSL:")){const e=s[1];e&&e.isStackTrace?s[0]+=" "+e.getLocation():s[1]='Stack trace not available. Enable "THREE.Node.captureStackTrace" to capture stack traces.'}return s}function Me(...s){s=Jl(s);const t="THREE."+s.shift();{const e=s[0];e&&e.isStackTrace?console.warn(e.getError(t)):console.warn(t,...s)}}function pn(...s){s=Jl(s);const t="THREE."+s.shift();{const e=s[0];e&&e.isStackTrace?console.error(e.getError(t)):console.error(t,...s)}}function Ql(...s){const t=s.join(" ");t in jl||(jl[t]=!0,Me(...s))}class cr{addEventListener(t,e){this._listeners===void 0&&(this._listeners={});const i=this._listeners;i[t]===void 0&&(i[t]=[]),i[t].indexOf(e)===-1&&i[t].push(e)}hasEventListener(t,e){const i=this._listeners;return i===void 0?!1:i[t]!==void 0&&i[t].indexOf(e)!==-1}removeEventListener(t,e){const i=this._listeners;if(i===void 0)return;const n=i[t];if(n!==void 0){const r=n.indexOf(e);r!==-1&&n.splice(r,1)}}dispatchEvent(t){const e=this._listeners;if(e===void 0)return;const i=e[t.type];if(i!==void 0){t.target=this;const n=i.slice(0);for(let r=0,a=n.length;r<a;r++)n[r].call(this,t);t.target=null}}}const be=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"];function Os(){const s=Math.random()*4294967295|0,t=Math.random()*4294967295|0,e=Math.random()*4294967295|0,i=Math.random()*4294967295|0;return(be[s&255]+be[s>>8&255]+be[s>>16&255]+be[s>>24&255]+"-"+be[t&255]+be[t>>8&255]+"-"+be[t>>16&15|64]+be[t>>24&255]+"-"+be[e&63|128]+be[e>>8&255]+"-"+be[e>>16&255]+be[e>>24&255]+be[i&255]+be[i>>8&255]+be[i>>16&255]+be[i>>24&255]).toLowerCase()}function Ht(s,t,e){return Math.max(t,Math.min(e,s))}function su(s,t){return(s%t+t)%t}function xa(s,t,e){return(1-e)*s+e*t}function Fs(s,t){switch(t.constructor){case Float32Array:return s;case Uint32Array:return s/4294967295;case Uint16Array:return s/65535;case Uint8Array:return s/255;case Int32Array:return Math.max(s/2147483647,-1);case Int16Array:return Math.max(s/32767,-1);case Int8Array:return Math.max(s/127,-1);default:throw new Error("Invalid component type.")}}function Be(s,t){switch(t.constructor){case Float32Array:return s;case Uint32Array:return Math.round(s*4294967295);case Uint16Array:return Math.round(s*65535);case Uint8Array:return Math.round(s*255);case Int32Array:return Math.round(s*2147483647);case Int16Array:return Math.round(s*32767);case Int8Array:return Math.round(s*127);default:throw new Error("Invalid component type.")}}class We{constructor(t=0,e=0){We.prototype.isVector2=!0,this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(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)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t){return this.x+=t.x,this.y+=t.y,this}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const e=this.x,i=this.y,n=t.elements;return this.x=n[0]*e+n[3]*i+n[6],this.y=n[1]*e+n[4]*i+n[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=Ht(this.x,t.x,e.x),this.y=Ht(this.y,t.y,e.y),this}clampScalar(t,e){return this.x=Ht(this.x,t,e),this.y=Ht(this.y,t,e),this}clampLength(t,e){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Ht(i,t,e))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(e===0)return Math.PI/2;const i=this.dot(t)/e;return Math.acos(Ht(i,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,i=this.y-t.y;return e*e+i*i}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,i){return this.x=t.x+(e.x-t.x)*i,this.y=t.y+(e.y-t.y)*i,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){const i=Math.cos(e),n=Math.sin(e),r=this.x-t.x,a=this.y-t.y;return this.x=r*i-a*n+t.x,this.y=r*n+a*i+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}class Bs{constructor(t=0,e=0,i=0,n=1){this.isQuaternion=!0,this._x=t,this._y=e,this._z=i,this._w=n}static slerpFlat(t,e,i,n,r,a,o){let h=i[n+0],l=i[n+1],A=i[n+2],c=i[n+3],u=r[a+0],d=r[a+1],p=r[a+2],m=r[a+3];if(c!==m||h!==u||l!==d||A!==p){let g=h*u+l*d+A*p+c*m;g<0&&(u=-u,d=-d,p=-p,m=-m,g=-g);let f=1-o;if(g<.9995){const M=Math.acos(g),S=Math.sin(M);f=Math.sin(f*M)/S,o=Math.sin(o*M)/S,h=h*f+u*o,l=l*f+d*o,A=A*f+p*o,c=c*f+m*o}else{h=h*f+u*o,l=l*f+d*o,A=A*f+p*o,c=c*f+m*o;const M=1/Math.sqrt(h*h+l*l+A*A+c*c);h*=M,l*=M,A*=M,c*=M}}t[e]=h,t[e+1]=l,t[e+2]=A,t[e+3]=c}static multiplyQuaternionsFlat(t,e,i,n,r,a){const o=i[n],h=i[n+1],l=i[n+2],A=i[n+3],c=r[a],u=r[a+1],d=r[a+2],p=r[a+3];return t[e]=o*p+A*c+h*d-l*u,t[e+1]=h*p+A*u+l*c-o*d,t[e+2]=l*p+A*d+o*u-h*c,t[e+3]=A*p-o*c-h*u-l*d,t}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 w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,i,n){return this._x=t,this._y=e,this._z=i,this._w=n,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e=!0){const i=t._x,n=t._y,r=t._z,a=t._order,o=Math.cos,h=Math.sin,l=o(i/2),A=o(n/2),c=o(r/2),u=h(i/2),d=h(n/2),p=h(r/2);switch(a){case"XYZ":this._x=u*A*c+l*d*p,this._y=l*d*c-u*A*p,this._z=l*A*p+u*d*c,this._w=l*A*c-u*d*p;break;case"YXZ":this._x=u*A*c+l*d*p,this._y=l*d*c-u*A*p,this._z=l*A*p-u*d*c,this._w=l*A*c+u*d*p;break;case"ZXY":this._x=u*A*c-l*d*p,this._y=l*d*c+u*A*p,this._z=l*A*p+u*d*c,this._w=l*A*c-u*d*p;break;case"ZYX":this._x=u*A*c-l*d*p,this._y=l*d*c+u*A*p,this._z=l*A*p-u*d*c,this._w=l*A*c+u*d*p;break;case"YZX":this._x=u*A*c+l*d*p,this._y=l*d*c+u*A*p,this._z=l*A*p-u*d*c,this._w=l*A*c-u*d*p;break;case"XZY":this._x=u*A*c-l*d*p,this._y=l*d*c-u*A*p,this._z=l*A*p+u*d*c,this._w=l*A*c+u*d*p;break;default:Me("Quaternion: .setFromEuler() encountered an unknown order: "+a)}return e===!0&&this._onChangeCallback(),this}setFromAxisAngle(t,e){const i=e/2,n=Math.sin(i);return this._x=t.x*n,this._y=t.y*n,this._z=t.z*n,this._w=Math.cos(i),this._onChangeCallback(),this}setFromRotationMatrix(t){const e=t.elements,i=e[0],n=e[4],r=e[8],a=e[1],o=e[5],h=e[9],l=e[2],A=e[6],c=e[10],u=i+o+c;if(u>0){const d=.5/Math.sqrt(u+1);this._w=.25/d,this._x=(A-h)*d,this._y=(r-l)*d,this._z=(a-n)*d}else if(i>o&&i>c){const d=2*Math.sqrt(1+i-o-c);this._w=(A-h)/d,this._x=.25*d,this._y=(n+a)/d,this._z=(r+l)/d}else if(o>c){const d=2*Math.sqrt(1+o-i-c);this._w=(r-l)/d,this._x=(n+a)/d,this._y=.25*d,this._z=(h+A)/d}else{const d=2*Math.sqrt(1+c-i-o);this._w=(a-n)/d,this._x=(r+l)/d,this._y=(h+A)/d,this._z=.25*d}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let i=t.dot(e)+1;return i<1e-8?(i=0,Math.abs(t.x)>Math.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=i):(this._x=0,this._y=-t.z,this._z=t.y,this._w=i)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=i),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(Ht(this.dot(t),-1,1)))}rotateTowards(t,e){const i=this.angleTo(t);if(i===0)return this;const n=Math.min(1,e/i);return this.slerp(t,n),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let t=this.length();return t===0?(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(t){return this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){const i=t._x,n=t._y,r=t._z,a=t._w,o=e._x,h=e._y,l=e._z,A=e._w;return this._x=i*A+a*o+n*l-r*h,this._y=n*A+a*h+r*o-i*l,this._z=r*A+a*l+i*h-n*o,this._w=a*A-i*o-n*h-r*l,this._onChangeCallback(),this}slerp(t,e){let i=t._x,n=t._y,r=t._z,a=t._w,o=this.dot(t);o<0&&(i=-i,n=-n,r=-r,a=-a,o=-o);let h=1-e;if(o<.9995){const l=Math.acos(o),A=Math.sin(l);h=Math.sin(h*l)/A,e=Math.sin(e*l)/A,this._x=this._x*h+i*e,this._y=this._y*h+n*e,this._z=this._z*h+r*e,this._w=this._w*h+a*e,this._onChangeCallback()}else this._x=this._x*h+i*e,this._y=this._y*h+n*e,this._z=this._z*h+r*e,this._w=this._w*h+a*e,this.normalize();return this}slerpQuaternions(t,e,i){return this.copy(t).slerp(e,i)}random(){const t=2*Math.PI*Math.random(),e=2*Math.PI*Math.random(),i=Math.random(),n=Math.sqrt(1-i),r=Math.sqrt(i);return this.set(n*Math.sin(t),n*Math.cos(t),r*Math.sin(e),r*Math.cos(e))}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}class V{constructor(t=0,e=0,i=0){V.prototype.isVector3=!0,this.x=t,this.y=e,this.z=i}set(t,e,i){return i===void 0&&(i=this.z),this.x=t,this.y=e,this.z=i,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(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)}return this}getComponent(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)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return this.applyQuaternion(ql.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(ql.setFromAxisAngle(t,e))}applyMatrix3(t){const e=this.x,i=this.y,n=this.z,r=t.elements;return this.x=r[0]*e+r[3]*i+r[6]*n,this.y=r[1]*e+r[4]*i+r[7]*n,this.z=r[2]*e+r[5]*i+r[8]*n,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const e=this.x,i=this.y,n=this.z,r=t.elements,a=1/(r[3]*e+r[7]*i+r[11]*n+r[15]);return this.x=(r[0]*e+r[4]*i+r[8]*n+r[12])*a,this.y=(r[1]*e+r[5]*i+r[9]*n+r[13])*a,this.z=(r[2]*e+r[6]*i+r[10]*n+r[14])*a,this}applyQuaternion(t){const e=this.x,i=this.y,n=this.z,r=t.x,a=t.y,o=t.z,h=t.w,l=2*(a*n-o*i),A=2*(o*e-r*n),c=2*(r*i-a*e);return this.x=e+h*l+a*c-o*A,this.y=i+h*A+o*l-r*c,this.z=n+h*c+r*A-a*l,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const e=this.x,i=this.y,n=this.z,r=t.elements;return this.x=r[0]*e+r[4]*i+r[8]*n,this.y=r[1]*e+r[5]*i+r[9]*n,this.z=r[2]*e+r[6]*i+r[10]*n,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=Ht(this.x,t.x,e.x),this.y=Ht(this.y,t.y,e.y),this.z=Ht(this.z,t.z,e.z),this}clampScalar(t,e){return this.x=Ht(this.x,t,e),this.y=Ht(this.y,t,e),this.z=Ht(this.z,t,e),this}clampLength(t,e){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Ht(i,t,e))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(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}lerpVectors(t,e,i){return this.x=t.x+(e.x-t.x)*i,this.y=t.y+(e.y-t.y)*i,this.z=t.z+(e.z-t.z)*i,this}cross(t){return this.crossVectors(this,t)}crossVectors(t,e){const i=t.x,n=t.y,r=t.z,a=e.x,o=e.y,h=e.z;return this.x=n*h-r*o,this.y=r*a-i*h,this.z=i*o-n*a,this}projectOnVector(t){const e=t.lengthSq();if(e===0)return this.set(0,0,0);const i=t.dot(this)/e;return this.copy(t).multiplyScalar(i)}projectOnPlane(t){return Ea.copy(this).projectOnVector(t),this.sub(Ea)}reflect(t){return this.sub(Ea.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(e===0)return Math.PI/2;const i=this.dot(t)/e;return Math.acos(Ht(i,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,i=this.y-t.y,n=this.z-t.z;return e*e+i*i+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,i){const n=Math.sin(e)*t;return this.x=n*Math.sin(i),this.y=Math.cos(e)*t,this.z=n*Math.cos(i),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,i){return this.x=t*Math.sin(e),this.y=i,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){const e=this.setFromMatrixColumn(t,0).length(),i=this.setFromMatrixColumn(t,1).length(),n=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=i,this.z=n,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,e*4)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,e*3)}setFromEuler(t){return this.x=t._x,this.y=t._y,this.z=t._z,this}setFromColor(t){return this.x=t.r,this.y=t.g,this.z=t.b,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const t=Math.random()*Math.PI*2,e=Math.random()*2-1,i=Math.sqrt(1-e*e);return this.x=i*Math.cos(t),this.y=e,this.z=i*Math.sin(t),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}const Ea=new V,ql=new Bs;class ji{constructor(t,e,i,n,r,a,o,h,l){ji.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],t!==void 0&&this.set(t,e,i,n,r,a,o,h,l)}set(t,e,i,n,r,a,o,h,l){const A=this.elements;return A[0]=t,A[1]=n,A[2]=o,A[3]=e,A[4]=r,A[5]=h,A[6]=i,A[7]=a,A[8]=l,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){const e=this.elements,i=t.elements;return e[0]=i[0],e[1]=i[1],e[2]=i[2],e[3]=i[3],e[4]=i[4],e[5]=i[5],e[6]=i[6],e[7]=i[7],e[8]=i[8],this}extractBasis(t,e,i){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),i.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const i=t.elements,n=e.elements,r=this.elements,a=i[0],o=i[3],h=i[6],l=i[1],A=i[4],c=i[7],u=i[2],d=i[5],p=i[8],m=n[0],g=n[3],f=n[6],M=n[1],S=n[4],v=n[7],T=n[2],_=n[5],w=n[8];return r[0]=a*m+o*M+h*T,r[3]=a*g+o*S+h*_,r[6]=a*f+o*v+h*w,r[1]=l*m+A*M+c*T,r[4]=l*g+A*S+c*_,r[7]=l*f+A*v+c*w,r[2]=u*m+d*M+p*T,r[5]=u*g+d*S+p*_,r[8]=u*f+d*v+p*w,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){const t=this.elements,e=t[0],i=t[1],n=t[2],r=t[3],a=t[4],o=t[5],h=t[6],l=t[7],A=t[8];return e*a*A-e*o*l-i*r*A+i*o*h+n*r*l-n*a*h}invert(){const t=this.elements,e=t[0],i=t[1],n=t[2],r=t[3],a=t[4],o=t[5],h=t[6],l=t[7],A=t[8],c=A*a-o*l,u=o*h-A*r,d=l*r-a*h,p=e*c+i*u+n*d;if(p===0)return this.set(0,0,0,0,0,0,0,0,0);const m=1/p;return t[0]=c*m,t[1]=(n*l-A*i)*m,t[2]=(o*i-n*a)*m,t[3]=u*m,t[4]=(A*e-n*h)*m,t[5]=(n*r-o*e)*m,t[6]=d*m,t[7]=(i*h-l*e)*m,t[8]=(a*e-i*r)*m,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){const e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,i,n,r,a,o){const h=Math.cos(r),l=Math.sin(r);return this.set(i*h,i*l,-i*(h*a+l*o)+a+t,-n*l,n*h,-n*(-l*a+h*o)+o+e,0,0,1),this}scale(t,e){return this.premultiply(Sa.makeScale(t,e)),this}rotate(t){return this.premultiply(Sa.makeRotation(-t)),this}translate(t,e){return this.premultiply(Sa.makeTranslation(t,e)),this}makeTranslation(t,e){return t.isVector2?this.set(1,0,t.x,0,1,t.y,0,0,1):this.set(1,0,t,0,1,e,0,0,1),this}makeRotation(t){const e=Math.cos(t),i=Math.sin(t);return this.set(e,-i,0,i,e,0,0,0,1),this}makeScale(t,e){return this.set(t,0,0,0,e,0,0,0,1),this}equals(t){const e=this.elements,i=t.elements;for(let n=0;n<9;n++)if(e[n]!==i[n])return!1;return!0}fromArray(t,e=0){for(let i=0;i<9;i++)this.elements[i]=t[i+e];return this}toArray(t=[],e=0){const i=this.elements;return t[e]=i[0],t[e+1]=i[1],t[e+2]=i[2],t[e+3]=i[3],t[e+4]=i[4],t[e+5]=i[5],t[e+6]=i[6],t[e+7]=i[7],t[e+8]=i[8],t}clone(){return new this.constructor().fromArray(this.elements)}}const Sa=new ji,Kl=new ji().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),$l=new ji().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function ru(){const s={enabled:!0,workingColorSpace:Yl,spaces:{},convert:function(n,r,a){return this.enabled===!1||r===a||!r||!a||(this.spaces[r].transfer===va&&(n.r=_i(n.r),n.g=_i(n.g),n.b=_i(n.b)),this.spaces[r].primaries!==this.spaces[a].primaries&&(n.applyMatrix3(this.spaces[r].toXYZ),n.applyMatrix3(this.spaces[a].fromXYZ)),this.spaces[a].transfer===va&&(n.r=Yn(n.r),n.g=Yn(n.g),n.b=Yn(n.b))),n},workingToColorSpace:function(n,r){return this.convert(n,this.workingColorSpace,r)},colorSpaceToWorking:function(n,r){return this.convert(n,r,this.workingColorSpace)},getPrimaries:function(n){return this.spaces[n].primaries},getTransfer:function(n){return n===""?Xl:this.spaces[n].transfer},getToneMappingMode:function(n){return this.spaces[n].outputColorSpaceConfig.toneMappingMode||"standard"},getLuminanceCoefficients:function(n,r=this.workingColorSpace){return n.fromArray(this.spaces[r].luminanceCoefficients)},define:function(n){Object.assign(this.spaces,n)},_getMatrix:function(n,r,a){return n.copy(this.spaces[r].toXYZ).multiply(this.spaces[a].fromXYZ)},_getDrawingBufferColorSpace:function(n){return this.spaces[n].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(n=this.workingColorSpace){return this.spaces[n].workingColorSpaceConfig.unpackColorSpace},fromWorkingColorSpace:function(n,r){return Ql("ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace()."),s.workingToColorSpace(n,r)},toWorkingColorSpace:function(n,r){return Ql("ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking()."),s.colorSpaceToWorking(n,r)}},t=[.64,.33,.3,.6,.15,.06],e=[.2126,.7152,.0722],i=[.3127,.329];return s.define({[Yl]:{primaries:t,whitePoint:i,transfer:Xl,toXYZ:Kl,fromXYZ:$l,luminanceCoefficients:e,workingColorSpaceConfig:{unpackColorSpace:Ve},outputColorSpaceConfig:{drawingBufferColorSpace:Ve}},[Ve]:{primaries:t,whitePoint:i,transfer:va,toXYZ:Kl,fromXYZ:$l,luminanceCoefficients:e,outputColorSpaceConfig:{drawingBufferColorSpace:Ve}}}),s}const ai=ru();function _i(s){return s<.04045?s*.0773993808:Math.pow(s*.9478672986+.0521327014,2.4)}function Yn(s){return s<.0031308?s*12.92:1.055*Math.pow(s,.41666)-.055}let Xn;class au{static getDataURL(t,e="image/png"){if(/^data:/i.test(t.src)||typeof HTMLCanvasElement>"u")return t.src;let i;if(t instanceof HTMLCanvasElement)i=t;else{Xn===void 0&&(Xn=Zl("canvas")),Xn.width=t.width,Xn.height=t.height;const n=Xn.getContext("2d");t instanceof ImageData?n.putImageData(t,0,0):n.drawImage(t,0,0,t.width,t.height),i=Xn}return i.toDataURL(e)}static sRGBToLinear(t){if(typeof HTMLImageElement<"u"&&t instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&t instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&t instanceof ImageBitmap){const e=Zl("canvas");e.width=t.width,e.height=t.height;const i=e.getContext("2d");i.drawImage(t,0,0,t.width,t.height);const n=i.getImageData(0,0,t.width,t.height),r=n.data;for(let a=0;a<r.length;a++)r[a]=_i(r[a]/255)*255;return i.putImageData(n,0,0),e}else if(t.data){const e=t.data.slice(0);for(let i=0;i<e.length;i++)e instanceof Uint8Array||e instanceof Uint8ClampedArray?e[i]=Math.floor(_i(e[i]/255)*255):e[i]=_i(e[i]);return{data:e,width:t.width,height:t.height}}else return Me("ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied."),t}}let ou=0;class lu{constructor(t=null){this.isSource=!0,Object.defineProperty(this,"id",{value:ou++}),this.uuid=Os(),this.data=t,this.dataReady=!0,this.version=0}getSize(t){const e=this.data;return typeof HTMLVideoElement<"u"&&e instanceof HTMLVideoElement?t.set(e.videoWidth,e.videoHeight,0):typeof VideoFrame<"u"&&e instanceof VideoFrame?t.set(e.displayHeight,e.displayWidth,0):e!==null?t.set(e.width,e.height,e.depth||0):t.set(0,0,0),t}set needsUpdate(t){t===!0&&this.version++}toJSON(t){const e=t===void 0||typeof t=="string";if(!e&&t.images[this.uuid]!==void 0)return t.images[this.uuid];const i={uuid:this.uuid,url:""},n=this.data;if(n!==null){let r;if(Array.isArray(n)){r=[];for(let a=0,o=n.length;a<o;a++)n[a].isDataTexture?r.push(ya(n[a].image)):r.push(ya(n[a]))}else r=ya(n);i.url=r}return e||(t.images[this.uuid]=i),i}}function ya(s){return typeof HTMLImageElement<"u"&&s instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&s instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&s instanceof ImageBitmap?au.getDataURL(s):s.data?{data:Array.from(s.data),width:s.width,height:s.height,type:s.data.constructor.name}:(Me("Texture: Unable to serialize Texture."),{})}let hu=0;const Ma=new V;class Ii extends cr{constructor(t=Ii.DEFAULT_IMAGE,e=Ii.DEFAULT_MAPPING,i=1001,n=1001,r=1006,a=1008,o=1023,h=1009,l=Ii.DEFAULT_ANISOTROPY,A=""){super(),this.isTexture=!0,Object.defineProperty(this,"id",{value:hu++}),this.uuid=Os(),this.name="",this.source=new lu(t),this.mipmaps=[],this.mapping=e,this.channel=0,this.wrapS=i,this.wrapT=n,this.magFilter=r,this.minFilter=a,this.anisotropy=l,this.format=o,this.internalFormat=null,this.type=h,this.offset=new We(0,0),this.repeat=new We(1,1),this.center=new We(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new ji,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.colorSpace=A,this.userData={},this.updateRanges=[],this.version=0,this.onUpdate=null,this.renderTarget=null,this.isRenderTargetTexture=!1,this.isArrayTexture=!!(t&&t.depth&&t.depth>1),this.pmremVersion=0}get width(){return this.source.getSize(Ma).x}get height(){return this.source.getSize(Ma).y}get depth(){return this.source.getSize(Ma).z}get image(){return this.source.data}set image(t=null){this.source.data=t}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}addUpdateRange(t,e){this.updateRanges.push({start:t,count:e})}clearUpdateRanges(){this.updateRanges.length=0}clone(){return new this.constructor().copy(this)}copy(t){return this.name=t.name,this.source=t.source,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.channel=t.channel,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.internalFormat=t.internalFormat,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.colorSpace=t.colorSpace,this.renderTarget=t.renderTarget,this.isRenderTargetTexture=t.isRenderTargetTexture,this.isArrayTexture=t.isArrayTexture,this.userData=JSON.parse(JSON.stringify(t.userData)),this.needsUpdate=!0,this}setValues(t){for(const e in t){const i=t[e];if(i===void 0){Me(`Texture.setValues(): parameter '${e}' has value of undefined.`);continue}const n=this[e];if(n===void 0){Me(`Texture.setValues(): property '${e}' does not exist.`);continue}n&&i&&n.isVector2&&i.isVector2||n&&i&&n.isVector3&&i.isVector3||n&&i&&n.isMatrix3&&i.isMatrix3?n.copy(i):this[e]=i}}toJSON(t){const e=t===void 0||typeof t=="string";if(!e&&t.textures[this.uuid]!==void 0)return t.textures[this.uuid];const i={metadata:{version:4.7,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,image:this.source.toJSON(t).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(i.userData=this.userData),e||(t.textures[this.uuid]=i),i}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(t){if(this.mapping!==300)return t;if(t.applyMatrix3(this.matrix),t.x<0||t.x>1)switch(this.wrapS){case 1e3:t.x=t.x-Math.floor(t.x);break;case 1001:t.x=t.x<0?0:1;break;case 1002:Math.abs(Math.floor(t.x)%2)===1?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x);break}if(t.y<0||t.y>1)switch(this.wrapT){case 1e3:t.y=t.y-Math.floor(t.y);break;case 1001:t.y=t.y<0?0:1;break;case 1002:Math.abs(Math.floor(t.y)%2)===1?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y);break}return this.flipY&&(t.y=1-t.y),t}set needsUpdate(t){t===!0&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(t){t===!0&&this.pmremVersion++}}Ii.DEFAULT_IMAGE=null,Ii.DEFAULT_MAPPING=300,Ii.DEFAULT_ANISOTROPY=1;class Us{constructor(t=0,e=0,i=0,n=1){Us.prototype.isVector4=!0,this.x=t,this.y=e,this.z=i,this.w=n}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,i,n){return this.x=t,this.y=e,this.z=i,this.w=n,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(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)}return this}getComponent(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)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=t.w!==void 0?t.w:1,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(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}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(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}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const e=this.x,i=this.y,n=this.z,r=this.w,a=t.elements;return this.x=a[0]*e+a[4]*i+a[8]*n+a[12]*r,this.y=a[1]*e+a[5]*i+a[9]*n+a[13]*r,this.z=a[2]*e+a[6]*i+a[10]*n+a[14]*r,this.w=a[3]*e+a[7]*i+a[11]*n+a[15]*r,this}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this.w/=t.w,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const 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(t){let e,i,n,r;const a=t.elements,o=a[0],h=a[4],l=a[8],A=a[1],c=a[5],u=a[9],d=a[2],p=a[6],m=a[10];if(Math.abs(h-A)<.01&&Math.abs(l-d)<.01&&Math.abs(u-p)<.01){if(Math.abs(h+A)<.1&&Math.abs(l+d)<.1&&Math.abs(u+p)<.1&&Math.abs(o+c+m-3)<.1)return this.set(1,0,0,0),this;e=Math.PI;const f=(o+1)/2,M=(c+1)/2,S=(m+1)/2,v=(h+A)/4,T=(l+d)/4,_=(u+p)/4;return f>M&&f>S?f<.01?(i=0,n=.707106781,r=.707106781):(i=Math.sqrt(f),n=v/i,r=T/i):M>S?M<.01?(i=.707106781,n=0,r=.707106781):(n=Math.sqrt(M),i=v/n,r=_/n):S<.01?(i=.707106781,n=.707106781,r=0):(r=Math.sqrt(S),i=T/r,n=_/r),this.set(i,n,r,e),this}let g=Math.sqrt((p-u)*(p-u)+(l-d)*(l-d)+(A-h)*(A-h));return Math.abs(g)<.001&&(g=1),this.x=(p-u)/g,this.y=(l-d)/g,this.z=(A-h)/g,this.w=Math.acos((o+c+m-1)/2),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this.w=e[15],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this.w=Math.min(this.w,t.w),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this.w=Math.max(this.w,t.w),this}clamp(t,e){return this.x=Ht(this.x,t.x,e.x),this.y=Ht(this.y,t.y,e.y),this.z=Ht(this.z,t.z,e.z),this.w=Ht(this.w,t.w,e.w),this}clampScalar(t,e){return this.x=Ht(this.x,t,e),this.y=Ht(this.y,t,e),this.z=Ht(this.z,t,e),this.w=Ht(this.w,t,e),this}clampLength(t,e){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Ht(i,t,e))}floor(){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(){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(){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(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this.w=Math.trunc(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(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}lerpVectors(t,e,i){return this.x=t.x+(e.x-t.x)*i,this.y=t.y+(e.y-t.y)*i,this.z=t.z+(e.z-t.z)*i,this.w=t.w+(e.w-t.w)*i,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z&&t.w===this.w}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this.w=t[e+3],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t[e+3]=this.w,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this.w=t.getW(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}}class oi{constructor(t,e,i,n,r,a,o,h,l,A,c,u,d,p,m,g){oi.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],t!==void 0&&this.set(t,e,i,n,r,a,o,h,l,A,c,u,d,p,m,g)}set(t,e,i,n,r,a,o,h,l,A,c,u,d,p,m,g){const f=this.elements;return f[0]=t,f[4]=e,f[8]=i,f[12]=n,f[1]=r,f[5]=a,f[9]=o,f[13]=h,f[2]=l,f[6]=A,f[10]=c,f[14]=u,f[3]=d,f[7]=p,f[11]=m,f[15]=g,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new oi().fromArray(this.elements)}copy(t){const e=this.elements,i=t.elements;return e[0]=i[0],e[1]=i[1],e[2]=i[2],e[3]=i[3],e[4]=i[4],e[5]=i[5],e[6]=i[6],e[7]=i[7],e[8]=i[8],e[9]=i[9],e[10]=i[10],e[11]=i[11],e[12]=i[12],e[13]=i[13],e[14]=i[14],e[15]=i[15],this}copyPosition(t){const e=this.elements,i=t.elements;return e[12]=i[12],e[13]=i[13],e[14]=i[14],this}setFromMatrix3(t){const e=t.elements;return this.set(e[0],e[3],e[6],0,e[1],e[4],e[7],0,e[2],e[5],e[8],0,0,0,0,1),this}extractBasis(t,e,i){return this.determinant()===0?(t.set(1,0,0),e.set(0,1,0),i.set(0,0,1),this):(t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),i.setFromMatrixColumn(this,2),this)}makeBasis(t,e,i){return this.set(t.x,e.x,i.x,0,t.y,e.y,i.y,0,t.z,e.z,i.z,0,0,0,0,1),this}extractRotation(t){if(t.determinant()===0)return this.identity();const e=this.elements,i=t.elements,n=1/Zn.setFromMatrixColumn(t,0).length(),r=1/Zn.setFromMatrixColumn(t,1).length(),a=1/Zn.setFromMatrixColumn(t,2).length();return e[0]=i[0]*n,e[1]=i[1]*n,e[2]=i[2]*n,e[3]=0,e[4]=i[4]*r,e[5]=i[5]*r,e[6]=i[6]*r,e[7]=0,e[8]=i[8]*a,e[9]=i[9]*a,e[10]=i[10]*a,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){const e=this.elements,i=t.x,n=t.y,r=t.z,a=Math.cos(i),o=Math.sin(i),h=Math.cos(n),l=Math.sin(n),A=Math.cos(r),c=Math.sin(r);if(t.order==="XYZ"){const u=a*A,d=a*c,p=o*A,m=o*c;e[0]=h*A,e[4]=-h*c,e[8]=l,e[1]=d+p*l,e[5]=u-m*l,e[9]=-o*h,e[2]=m-u*l,e[6]=p+d*l,e[10]=a*h}else if(t.order==="YXZ"){const u=h*A,d=h*c,p=l*A,m=l*c;e[0]=u+m*o,e[4]=p*o-d,e[8]=a*l,e[1]=a*c,e[5]=a*A,e[9]=-o,e[2]=d*o-p,e[6]=m+u*o,e[10]=a*h}else if(t.order==="ZXY"){const u=h*A,d=h*c,p=l*A,m=l*c;e[0]=u-m*o,e[4]=-a*c,e[8]=p+d*o,e[1]=d+p*o,e[5]=a*A,e[9]=m-u*o,e[2]=-a*l,e[6]=o,e[10]=a*h}else if(t.order==="ZYX"){const u=a*A,d=a*c,p=o*A,m=o*c;e[0]=h*A,e[4]=p*l-d,e[8]=u*l+m,e[1]=h*c,e[5]=m*l+u,e[9]=d*l-p,e[2]=-l,e[6]=o*h,e[10]=a*h}else if(t.order==="YZX"){const u=a*h,d=a*l,p=o*h,m=o*l;e[0]=h*A,e[4]=m-u*c,e[8]=p*c+d,e[1]=c,e[5]=a*A,e[9]=-o*A,e[2]=-l*A,e[6]=d*c+p,e[10]=u-m*c}else if(t.order==="XZY"){const u=a*h,d=a*l,p=o*h,m=o*l;e[0]=h*A,e[4]=-c,e[8]=l*A,e[1]=u*c+m,e[5]=a*A,e[9]=d*c-p,e[2]=p*c-d,e[6]=o*A,e[10]=m*c+u}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(Au,t,cu)}lookAt(t,e,i){const n=this.elements;return Ye.subVectors(t,e),Ye.lengthSq()===0&&(Ye.z=1),Ye.normalize(),Ji.crossVectors(i,Ye),Ji.lengthSq()===0&&(Math.abs(i.z)===1?Ye.x+=1e-4:Ye.z+=1e-4,Ye.normalize(),Ji.crossVectors(i,Ye)),Ji.normalize(),ur.crossVectors(Ye,Ji),n[0]=Ji.x,n[4]=ur.x,n[8]=Ye.x,n[1]=Ji.y,n[5]=ur.y,n[9]=Ye.y,n[2]=Ji.z,n[6]=ur.z,n[10]=Ye.z,this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const i=t.elements,n=e.elements,r=this.elements,a=i[0],o=i[4],h=i[8],l=i[12],A=i[1],c=i[5],u=i[9],d=i[13],p=i[2],m=i[6],g=i[10],f=i[14],M=i[3],S=i[7],v=i[11],T=i[15],_=n[0],w=n[4],P=n[8],E=n[12],x=n[1],b=n[5],z=n[9],F=n[13],U=n[2],W=n[6],Y=n[10],$=n[14],H=n[3],rt=n[7],ht=n[11],mt=n[15];return r[0]=a*_+o*x+h*U+l*H,r[4]=a*w+o*b+h*W+l*rt,r[8]=a*P+o*z+h*Y+l*ht,r[12]=a*E+o*F+h*$+l*mt,r[1]=A*_+c*x+u*U+d*H,r[5]=A*w+c*b+u*W+d*rt,r[9]=A*P+c*z+u*Y+d*ht,r[13]=A*E+c*F+u*$+d*mt,r[2]=p*_+m*x+g*U+f*H,r[6]=p*w+m*b+g*W+f*rt,r[10]=p*P+m*z+g*Y+f*ht,r[14]=p*E+m*F+g*$+f*mt,r[3]=M*_+S*x+v*U+T*H,r[7]=M*w+S*b+v*W+T*rt,r[11]=M*P+S*z+v*Y+T*ht,r[15]=M*E+S*F+v*$+T*mt,this}multiplyScalar(t){const 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}determinant(){const t=this.elements,e=t[0],i=t[4],n=t[8],r=t[12],a=t[1],o=t[5],h=t[9],l=t[13],A=t[2],c=t[6],u=t[10],d=t[14],p=t[3],m=t[7],g=t[11],f=t[15],M=h*d-l*u,S=o*d-l*c,v=o*u-h*c,T=a*d-l*A,_=a*u-h*A,w=a*c-o*A;return e*(m*M-g*S+f*v)-i*(p*M-g*T+f*_)+n*(p*S-m*T+f*w)-r*(p*v-m*_+g*w)}transpose(){const t=this.elements;let e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,i){const n=this.elements;return t.isVector3?(n[12]=t.x,n[13]=t.y,n[14]=t.z):(n[12]=t,n[13]=e,n[14]=i),this}invert(){const t=this.elements,e=t[0],i=t[1],n=t[2],r=t[3],a=t[4],o=t[5],h=t[6],l=t[7],A=t[8],c=t[9],u=t[10],d=t[11],p=t[12],m=t[13],g=t[14],f=t[15],M=e*o-i*a,S=e*h-n*a,v=e*l-r*a,T=i*h-n*o,_=i*l-r*o,w=n*l-r*h,P=A*m-c*p,E=A*g-u*p,x=A*f-d*p,b=c*g-u*m,z=c*f-d*m,F=u*f-d*g,U=M*F-S*z+v*b+T*x-_*E+w*P;if(U===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const W=1/U;return t[0]=(o*F-h*z+l*b)*W,t[1]=(n*z-i*F-r*b)*W,t[2]=(m*w-g*_+f*T)*W,t[3]=(u*_-c*w-d*T)*W,t[4]=(h*x-a*F-l*E)*W,t[5]=(e*F-n*x+r*E)*W,t[6]=(g*v-p*w-f*S)*W,t[7]=(A*w-u*v+d*S)*W,t[8]=(a*z-o*x+l*P)*W,t[9]=(i*x-e*z-r*P)*W,t[10]=(p*_-m*v+f*M)*W,t[11]=(c*v-A*_-d*M)*W,t[12]=(o*E-a*b-h*P)*W,t[13]=(e*b-i*E+n*P)*W,t[14]=(m*S-p*T-g*M)*W,t[15]=(A*T-c*S+u*M)*W,this}scale(t){const e=this.elements,i=t.x,n=t.y,r=t.z;return e[0]*=i,e[4]*=n,e[8]*=r,e[1]*=i,e[5]*=n,e[9]*=r,e[2]*=i,e[6]*=n,e[10]*=r,e[3]*=i,e[7]*=n,e[11]*=r,this}getMaxScaleOnAxis(){const t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],i=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],n=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,i,n))}makeTranslation(t,e,i){return t.isVector3?this.set(1,0,0,t.x,0,1,0,t.y,0,0,1,t.z,0,0,0,1):this.set(1,0,0,t,0,1,0,e,0,0,1,i,0,0,0,1),this}makeRotationX(t){const e=Math.cos(t),i=Math.sin(t);return this.set(1,0,0,0,0,e,-i,0,0,i,e,0,0,0,0,1),this}makeRotationY(t){const e=Math.cos(t),i=Math.sin(t);return this.set(e,0,i,0,0,1,0,0,-i,0,e,0,0,0,0,1),this}makeRotationZ(t){const e=Math.cos(t),i=Math.sin(t);return this.set(e,-i,0,0,i,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){const i=Math.cos(e),n=Math.sin(e),r=1-i,a=t.x,o=t.y,h=t.z,l=r*a,A=r*o;return this.set(l*a+i,l*o-n*h,l*h+n*o,0,l*o+n*h,A*o+i,A*h-n*a,0,l*h-n*o,A*h+n*a,r*h*h+i,0,0,0,0,1),this}makeScale(t,e,i){return this.set(t,0,0,0,0,e,0,0,0,0,i,0,0,0,0,1),this}makeShear(t,e,i,n,r,a){return this.set(1,i,r,0,t,1,a,0,e,n,1,0,0,0,0,1),this}compose(t,e,i){const n=this.elements,r=e._x,a=e._y,o=e._z,h=e._w,l=r+r,A=a+a,c=o+o,u=r*l,d=r*A,p=r*c,m=a*A,g=a*c,f=o*c,M=h*l,S=h*A,v=h*c,T=i.x,_=i.y,w=i.z;return n[0]=(1-(m+f))*T,n[1]=(d+v)*T,n[2]=(p-S)*T,n[3]=0,n[4]=(d-v)*_,n[5]=(1-(u+f))*_,n[6]=(g+M)*_,n[7]=0,n[8]=(p+S)*w,n[9]=(g-M)*w,n[10]=(1-(u+m))*w,n[11]=0,n[12]=t.x,n[13]=t.y,n[14]=t.z,n[15]=1,this}decompose(t,e,i){const n=this.elements;t.x=n[12],t.y=n[13],t.z=n[14];const r=this.determinant();if(r===0)return i.set(1,1,1),e.identity(),this;let a=Zn.set(n[0],n[1],n[2]).length();const o=Zn.set(n[4],n[5],n[6]).length(),h=Zn.set(n[8],n[9],n[10]).length();r<0&&(a=-a),li.copy(this);const l=1/a,A=1/o,c=1/h;return li.elements[0]*=l,li.elements[1]*=l,li.elements[2]*=l,li.elements[4]*=A,li.elements[5]*=A,li.elements[6]*=A,li.elements[8]*=c,li.elements[9]*=c,li.elements[10]*=c,e.setFromRotationMatrix(li),i.x=a,i.y=o,i.z=h,this}makePerspective(t,e,i,n,r,a,o=2e3,h=!1){const l=this.elements,A=2*r/(e-t),c=2*r/(i-n),u=(e+t)/(e-t),d=(i+n)/(i-n);let p,m;if(h)p=r/(a-r),m=a*r/(a-r);else if(o===2e3)p=-(a+r)/(a-r),m=-2*a*r/(a-r);else if(o===2001)p=-a/(a-r),m=-a*r/(a-r);else throw new Error("THREE.Matrix4.makePerspective(): Invalid coordinate system: "+o);return l[0]=A,l[4]=0,l[8]=u,l[12]=0,l[1]=0,l[5]=c,l[9]=d,l[13]=0,l[2]=0,l[6]=0,l[10]=p,l[14]=m,l[3]=0,l[7]=0,l[11]=-1,l[15]=0,this}makeOrthographic(t,e,i,n,r,a,o=2e3,h=!1){const l=this.elements,A=2/(e-t),c=2/(i-n),u=-(e+t)/(e-t),d=-(i+n)/(i-n);let p,m;if(h)p=1/(a-r),m=a/(a-r);else if(o===2e3)p=-2/(a-r),m=-(a+r)/(a-r);else if(o===2001)p=-1/(a-r),m=-r/(a-r);else throw new Error("THREE.Matrix4.makeOrthographic(): Invalid coordinate system: "+o);return l[0]=A,l[4]=0,l[8]=0,l[12]=u,l[1]=0,l[5]=c,l[9]=0,l[13]=d,l[2]=0,l[6]=0,l[10]=p,l[14]=m,l[3]=0,l[7]=0,l[11]=0,l[15]=1,this}equals(t){const e=this.elements,i=t.elements;for(let n=0;n<16;n++)if(e[n]!==i[n])return!1;return!0}fromArray(t,e=0){for(let i=0;i<16;i++)this.elements[i]=t[i+e];return this}toArray(t=[],e=0){const i=this.elements;return t[e]=i[0],t[e+1]=i[1],t[e+2]=i[2],t[e+3]=i[3],t[e+4]=i[4],t[e+5]=i[5],t[e+6]=i[6],t[e+7]=i[7],t[e+8]=i[8],t[e+9]=i[9],t[e+10]=i[10],t[e+11]=i[11],t[e+12]=i[12],t[e+13]=i[13],t[e+14]=i[14],t[e+15]=i[15],t}}const Zn=new V,li=new oi,Au=new V(0,0,0),cu=new V(1,1,1),Ji=new V,ur=new V,Ye=new V,th=new oi,eh=new Bs;class jn{constructor(t=0,e=0,i=0,n=jn.DEFAULT_ORDER){this.isEuler=!0,this._x=t,this._y=e,this._z=i,this._order=n}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(t,e,i,n=this._order){return this._x=t,this._y=e,this._z=i,this._order=n,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e=this._order,i=!0){const n=t.elements,r=n[0],a=n[4],o=n[8],h=n[1],l=n[5],A=n[9],c=n[2],u=n[6],d=n[10];switch(e){case"XYZ":this._y=Math.asin(Ht(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-A,d),this._z=Math.atan2(-a,r)):(this._x=Math.atan2(u,l),this._z=0);break;case"YXZ":this._x=Math.asin(-Ht(A,-1,1)),Math.abs(A)<.9999999?(this._y=Math.atan2(o,d),this._z=Math.atan2(h,l)):(this._y=Math.atan2(-c,r),this._z=0);break;case"ZXY":this._x=Math.asin(Ht(u,-1,1)),Math.abs(u)<.9999999?(this._y=Math.atan2(-c,d),this._z=Math.atan2(-a,l)):(this._y=0,this._z=Math.atan2(h,r));break;case"ZYX":this._y=Math.asin(-Ht(c,-1,1)),Math.abs(c)<.9999999?(this._x=Math.atan2(u,d),this._z=Math.atan2(h,r)):(this._x=0,this._z=Math.atan2(-a,l));break;case"YZX":this._z=Math.asin(Ht(h,-1,1)),Math.abs(h)<.9999999?(this._x=Math.atan2(-A,l),this._y=Math.atan2(-c,r)):(this._x=0,this._y=Math.atan2(o,d));break;case"XZY":this._z=Math.asin(-Ht(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(u,l),this._y=Math.atan2(o,r)):(this._x=Math.atan2(-A,d),this._y=0);break;default:Me("Euler: .setFromRotationMatrix() encountered an unknown order: "+e)}return this._order=e,i===!0&&this._onChangeCallback(),this}setFromQuaternion(t,e,i){return th.makeRotationFromQuaternion(t),this.setFromRotationMatrix(th,e,i)}setFromVector3(t,e=this._order){return this.set(t.x,t.y,t.z,e)}reorder(t){return eh.setFromEuler(this),this.setFromQuaternion(eh,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],t[3]!==void 0&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}}jn.DEFAULT_ORDER="XYZ";class uu{constructor(){this.mask=1}set(t){this.mask=(1<<t|0)>>>0}enable(t){this.mask|=1<<t|0}enableAll(){this.mask=-1}toggle(t){this.mask^=1<<t|0}disable(t){this.mask&=~(1<<t|0)}disableAll(){this.mask=0}test(t){return(this.mask&t.mask)!==0}isEnabled(t){return(this.mask&(1<<t|0))!==0}}let du=0;const ih=new V,Jn=new Bs,Ti=new oi,dr=new V,zs=new V,fu=new V,gu=new Bs,nh=new V(1,0,0),sh=new V(0,1,0),rh=new V(0,0,1),ah={type:"added"},pu={type:"removed"},Qn={type:"childadded",child:null},ba={type:"childremoved",child:null};class Ke extends cr{constructor(){super(),this.isObject3D=!0,Object.defineProperty(this,"id",{value:du++}),this.uuid=Os(),this.name="",this.type="Object3D",this.parent=null,this.children=[],this.up=Ke.DEFAULT_UP.clone();const t=new V,e=new jn,i=new Bs,n=new V(1,1,1);function r(){i.setFromEuler(e,!1)}function a(){e.setFromQuaternion(i,void 0,!1)}e._onChange(r),i._onChange(a),Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:t},rotation:{configurable:!0,enumerable:!0,value:e},quaternion:{configurable:!0,enumerable:!0,value:i},scale:{configurable:!0,enumerable:!0,value:n},modelViewMatrix:{value:new oi},normalMatrix:{value:new ji}}),this.matrix=new oi,this.matrixWorld=new oi,this.matrixAutoUpdate=Ke.DEFAULT_MATRIX_AUTO_UPDATE,this.matrixWorldAutoUpdate=Ke.DEFAULT_MATRIX_WORLD_AUTO_UPDATE,this.matrixWorldNeedsUpdate=!1,this.layers=new uu,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.animations=[],this.customDepthMaterial=void 0,this.customDistanceMaterial=void 0,this.static=!1,this.userData={},this.pivot=null}onBeforeShadow(){}onAfterShadow(){}onBeforeRender(){}onAfterRender(){}applyMatrix4(t){this.matrixAutoUpdate&&this.updateMatrix(),this.matrix.premultiply(t),this.matrix.decompose(this.position,this.quaternion,this.scale)}applyQuaternion(t){return this.quaternion.premultiply(t),this}setRotationFromAxisAngle(t,e){this.quaternion.setFromAxisAngle(t,e)}setRotationFromEuler(t){this.quaternion.setFromEuler(t,!0)}setRotationFromMatrix(t){this.quaternion.setFromRotationMatrix(t)}setRotationFromQuaternion(t){this.quaternion.copy(t)}rotateOnAxis(t,e){return Jn.setFromAxisAngle(t,e),this.quaternion.multiply(Jn),this}rotateOnWorldAxis(t,e){return Jn.setFromAxisAngle(t,e),this.quaternion.premultiply(Jn),this}rotateX(t){return this.rotateOnAxis(nh,t)}rotateY(t){return this.rotateOnAxis(sh,t)}rotateZ(t){return this.rotateOnAxis(rh,t)}translateOnAxis(t,e){return ih.copy(t).applyQuaternion(this.quaternion),this.position.add(ih.multiplyScalar(e)),this}translateX(t){return this.translateOnAxis(nh,t)}translateY(t){return this.translateOnAxis(sh,t)}translateZ(t){return this.translateOnAxis(rh,t)}localToWorld(t){return this.updateWorldMatrix(!0,!1),t.applyMatrix4(this.matrixWorld)}worldToLocal(t){return this.updateWorldMatrix(!0,!1),t.applyMatrix4(Ti.copy(this.matrixWorld).invert())}lookAt(t,e,i){t.isVector3?dr.copy(t):dr.set(t,e,i);const n=this.parent;this.updateWorldMatrix(!0,!1),zs.setFromMatrixPosition(this.matrixWorld),this.isCamera||this.isLight?Ti.lookAt(zs,dr,this.up):Ti.lookAt(dr,zs,this.up),this.quaternion.setFromRotationMatrix(Ti),n&&(Ti.extractRotation(n.matrixWorld),Jn.setFromRotationMatrix(Ti),this.quaternion.premultiply(Jn.invert()))}add(t){if(arguments.length>1){for(let e=0;e<arguments.length;e++)this.add(arguments[e]);return this}return t===this?(pn("Object3D.add: object can't be added as a child of itself.",t),this):(t&&t.isObject3D?(t.removeFromParent(),t.parent=this,this.children.push(t),t.dispatchEvent(ah),Qn.child=t,this.dispatchEvent(Qn),Qn.child=null):pn("Object3D.add: object not an instance of THREE.Object3D.",t),this)}remove(t){if(arguments.length>1){for(let i=0;i<arguments.length;i++)this.remove(arguments[i]);return this}const e=this.children.indexOf(t);return e!==-1&&(t.parent=null,this.children.splice(e,1),t.dispatchEvent(pu),ba.child=t,this.dispatchEvent(ba),ba.child=null),this}removeFromParent(){const t=this.parent;return t!==null&&t.remove(this),this}clear(){return this.remove(...this.children)}attach(t){return this.updateWorldMatrix(!0,!1),Ti.copy(this.matrixWorld).invert(),t.parent!==null&&(t.parent.updateWorldMatrix(!0,!1),Ti.multiply(t.parent.matrixWorld)),t.applyMatrix4(Ti),t.removeFromParent(),t.parent=this,this.children.push(t),t.updateWorldMatrix(!1,!0),t.dispatchEvent(ah),Qn.child=t,this.dispatchEvent(Qn),Qn.child=null,this}getObjectById(t){return this.getObjectByProperty("id",t)}getObjectByName(t){return this.getObjectByProperty("name",t)}getObjectByProperty(t,e){if(this[t]===e)return this;for(let i=0,n=this.children.length;i<n;i++){const r=this.children[i].getObjectByProperty(t,e);if(r!==void 0)return r}}getObjectsByProperty(t,e,i=[]){this[t]===e&&i.push(this);const n=this.children;for(let r=0,a=n.length;r<a;r++)n[r].getObjectsByProperty(t,e,i);return i}getWorldPosition(t){return this.updateWorldMatrix(!0,!1),t.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(zs,t,fu),t}getWorldScale(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(zs,gu,t),t}getWorldDirection(t){this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(e[8],e[9],e[10]).normalize()}raycast(){}traverse(t){t(this);const e=this.children;for(let i=0,n=e.length;i<n;i++)e[i].traverse(t)}traverseVisible(t){if(this.visible===!1)return;t(this);const e=this.children;for(let i=0,n=e.length;i<n;i++)e[i].traverseVisible(t)}traverseAncestors(t){const e=this.parent;e!==null&&(t(e),e.traverseAncestors(t))}updateMatrix(){this.matrix.compose(this.position,this.quaternion,this.scale);const t=this.pivot;if(t!==null){const e=t.x,i=t.y,n=t.z,r=this.matrix.elements;r[12]+=e-r[0]*e-r[4]*i-r[8]*n,r[13]+=i-r[1]*e-r[5]*i-r[9]*n,r[14]+=n-r[2]*e-r[6]*i-r[10]*n}this.matrixWorldNeedsUpdate=!0}updateMatrixWorld(t){this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||t)&&(this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),this.matrixWorldNeedsUpdate=!1,t=!0);const e=this.children;for(let i=0,n=e.length;i<n;i++)e[i].updateMatrixWorld(t)}updateWorldMatrix(t,e){const i=this.parent;if(t===!0&&i!==null&&i.updateWorldMatrix(!0,!1),this.matrixAutoUpdate&&this.updateMatrix(),this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),e===!0){const n=this.children;for(let r=0,a=n.length;r<a;r++)n[r].updateWorldMatrix(!1,!0)}}toJSON(t){const e=t===void 0||typeof t=="string",i={};e&&(t={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{},nodes:{}},i.metadata={version:4.7,type:"Object",generator:"Object3D.toJSON"});const n={};n.uuid=this.uuid,n.type=this.type,this.name!==""&&(n.name=this.name),this.castShadow===!0&&(n.castShadow=!0),this.receiveShadow===!0&&(n.receiveShadow=!0),this.visible===!1&&(n.visible=!1),this.frustumCulled===!1&&(n.frustumCulled=!1),this.renderOrder!==0&&(n.renderOrder=this.renderOrder),this.static!==!1&&(n.static=this.static),Object.keys(this.userData).length>0&&(n.userData=this.userData),n.layers=this.layers.mask,n.matrix=this.matrix.toArray(),n.up=this.up.toArray(),this.pivot!==null&&(n.pivot=this.pivot.toArray()),this.matrixAutoUpdate===!1&&(n.matrixAutoUpdate=!1),this.morphTargetDictionary!==void 0&&(n.morphTargetDictionary=Object.assign({},this.morphTargetDictionary)),this.morphTargetInfluences!==void 0&&(n.morphTargetInfluences=this.morphTargetInfluences.slice()),this.isInstancedMesh&&(n.type="InstancedMesh",n.count=this.count,n.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(n.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(n.type="BatchedMesh",n.perObjectFrustumCulled=this.perObjectFrustumCulled,n.sortObjects=this.sortObjects,n.drawRanges=this._drawRanges,n.reservedRanges=this._reservedRanges,n.geometryInfo=this._geometryInfo.map(o=>({...o,boundingBox:o.boundingBox?o.boundingBox.toJSON():void 0,boundingSphere:o.boundingSphere?o.boundingSphere.toJSON():void 0})),n.instanceInfo=this._instanceInfo.map(o=>({...o})),n.availableInstanceIds=this._availableInstanceIds.slice(),n.availableGeometryIds=this._availableGeometryIds.slice(),n.nextIndexStart=this._nextIndexStart,n.nextVertexStart=this._nextVertexStart,n.geometryCount=this._geometryCount,n.maxInstanceCount=this._maxInstanceCount,n.maxVertexCount=this._maxVertexCount,n.maxIndexCount=this._maxIndexCount,n.geometryInitialized=this._geometryInitialized,n.matricesTexture=this._matricesTexture.toJSON(t),n.indirectTexture=this._indirectTexture.toJSON(t),this._colorsTexture!==null&&(n.colorsTexture=this._colorsTexture.toJSON(t)),this.boundingSphere!==null&&(n.boundingSphere=this.boundingSphere.toJSON()),this.boundingBox!==null&&(n.boundingBox=this.boundingBox.toJSON()));function r(o,h){return o[h.uuid]===void 0&&(o[h.uuid]=h.toJSON(t)),h.uuid}if(this.isScene)this.background&&(this.background.isColor?n.background=this.background.toJSON():this.background.isTexture&&(n.background=this.background.toJSON(t).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(n.environment=this.environment.toJSON(t).uuid);else if(this.isMesh||this.isLine||this.isPoints){n.geometry=r(t.geometries,this.geometry);const o=this.geometry.parameters;if(o!==void 0&&o.shapes!==void 0){const h=o.shapes;if(Array.isArray(h))for(let l=0,A=h.length;l<A;l++){const c=h[l];r(t.shapes,c)}else r(t.shapes,h)}}if(this.isSkinnedMesh&&(n.bindMode=this.bindMode,n.bindMatrix=this.bindMatrix.toArray(),this.skeleton!==void 0&&(r(t.skeletons,this.skeleton),n.skeleton=this.skeleton.uuid)),this.material!==void 0)if(Array.isArray(this.material)){const o=[];for(let h=0,l=this.material.length;h<l;h++)o.push(r(t.materials,this.material[h]));n.material=o}else n.material=r(t.materials,this.material);if(this.children.length>0){n.children=[];for(let o=0;o<this.children.length;o++)n.children.push(this.children[o].toJSON(t).object)}if(this.animations.length>0){n.animations=[];for(let o=0;o<this.animations.length;o++){const h=this.animations[o];n.animations.push(r(t.animations,h))}}if(e){const o=a(t.geometries),h=a(t.materials),l=a(t.textures),A=a(t.images),c=a(t.shapes),u=a(t.skeletons),d=a(t.animations),p=a(t.nodes);o.length>0&&(i.geometries=o),h.length>0&&(i.materials=h),l.length>0&&(i.textures=l),A.length>0&&(i.images=A),c.length>0&&(i.shapes=c),u.length>0&&(i.skeletons=u),d.length>0&&(i.animations=d),p.length>0&&(i.nodes=p)}return i.object=n,i;function a(o){const h=[];for(const l in o){const A=o[l];delete A.metadata,h.push(A)}return h}}clone(t){return new this.constructor().copy(this,t)}copy(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),t.pivot!==null&&(this.pivot=t.pivot.clone()),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldAutoUpdate=t.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.static=t.static,this.animations=t.animations.slice(),this.userData=JSON.parse(JSON.stringify(t.userData)),e===!0)for(let i=0;i<t.children.length;i++){const n=t.children[i];this.add(n.clone())}return this}}Ke.DEFAULT_UP=new V(0,1,0),Ke.DEFAULT_MATRIX_AUTO_UPDATE=!0,Ke.DEFAULT_MATRIX_WORLD_AUTO_UPDATE=!0;const oh={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},Qi={h:0,s:0,l:0},fr={h:0,s:0,l:0};function _a(s,t,e){return e<0&&(e+=1),e>1&&(e-=1),e<1/6?s+(t-s)*6*e:e<1/2?t:e<2/3?s+(t-s)*6*(2/3-e):s}class qi{constructor(t,e,i){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(t,e,i)}set(t,e,i){if(e===void 0&&i===void 0){const n=t;n&&n.isColor?this.copy(n):typeof n=="number"?this.setHex(n):typeof n=="string"&&this.setStyle(n)}else this.setRGB(t,e,i);return this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t,e=Ve){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(t&255)/255,ai.colorSpaceToWorking(this,e),this}setRGB(t,e,i,n=ai.workingColorSpace){return this.r=t,this.g=e,this.b=i,ai.colorSpaceToWorking(this,n),this}setHSL(t,e,i,n=ai.workingColorSpace){if(t=su(t,1),e=Ht(e,0,1),i=Ht(i,0,1),e===0)this.r=this.g=this.b=i;else{const r=i<=.5?i*(1+e):i+e-i*e,a=2*i-r;this.r=_a(a,r,t+1/3),this.g=_a(a,r,t),this.b=_a(a,r,t-1/3)}return ai.colorSpaceToWorking(this,n),this}setStyle(t,e=Ve){function i(r){r!==void 0&&parseFloat(r)<1&&Me("Color: Alpha component of "+t+" will be ignored.")}let n;if(n=/^(\w+)\(([^\)]*)\)/.exec(t)){let r;const a=n[1],o=n[2];switch(a){case"rgb":case"rgba":if(r=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(r[4]),this.setRGB(Math.min(255,parseInt(r[1],10))/255,Math.min(255,parseInt(r[2],10))/255,Math.min(255,parseInt(r[3],10))/255,e);if(r=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(r[4]),this.setRGB(Math.min(100,parseInt(r[1],10))/100,Math.min(100,parseInt(r[2],10))/100,Math.min(100,parseInt(r[3],10))/100,e);break;case"hsl":case"hsla":if(r=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(r[4]),this.setHSL(parseFloat(r[1])/360,parseFloat(r[2])/100,parseFloat(r[3])/100,e);break;default:Me("Color: Unknown color model "+t)}}else if(n=/^\#([A-Fa-f\d]+)$/.exec(t)){const r=n[1],a=r.length;if(a===3)return this.setRGB(parseInt(r.charAt(0),16)/15,parseInt(r.charAt(1),16)/15,parseInt(r.charAt(2),16)/15,e);if(a===6)return this.setHex(parseInt(r,16),e);Me("Color: Invalid hex color "+t)}else if(t&&t.length>0)return this.setColorName(t,e);return this}setColorName(t,e=Ve){const i=oh[t.toLowerCase()];return i!==void 0?this.setHex(i,e):Me("Color: Unknown color "+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copySRGBToLinear(t){return this.r=_i(t.r),this.g=_i(t.g),this.b=_i(t.b),this}copyLinearToSRGB(t){return this.r=Yn(t.r),this.g=Yn(t.g),this.b=Yn(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(t=Ve){return ai.workingToColorSpace(_e.copy(this),t),Math.round(Ht(_e.r*255,0,255))*65536+Math.round(Ht(_e.g*255,0,255))*256+Math.round(Ht(_e.b*255,0,255))}getHexString(t=Ve){return("000000"+this.getHex(t).toString(16)).slice(-6)}getHSL(t,e=ai.workingColorSpace){ai.workingToColorSpace(_e.copy(this),e);const i=_e.r,n=_e.g,r=_e.b,a=Math.max(i,n,r),o=Math.min(i,n,r);let h,l;const A=(o+a)/2;if(o===a)h=0,l=0;else{const c=a-o;switch(l=A<=.5?c/(a+o):c/(2-a-o),a){case i:h=(n-r)/c+(n<r?6:0);break;case n:h=(r-i)/c+2;break;case r:h=(i-n)/c+4;break}h/=6}return t.h=h,t.s=l,t.l=A,t}getRGB(t,e=ai.workingColorSpace){return ai.workingToColorSpace(_e.copy(this),e),t.r=_e.r,t.g=_e.g,t.b=_e.b,t}getStyle(t=Ve){ai.workingToColorSpace(_e.copy(this),t);const e=_e.r,i=_e.g,n=_e.b;return t!==Ve?`color(${t} ${e.toFixed(3)} ${i.toFixed(3)} ${n.toFixed(3)})`:`rgb(${Math.round(e*255)},${Math.round(i*255)},${Math.round(n*255)})`}offsetHSL(t,e,i){return this.getHSL(Qi),this.setHSL(Qi.h+t,Qi.s+e,Qi.l+i)}add(t){return this.r+=t.r,this.g+=t.g,this.b+=t.b,this}addColors(t,e){return this.r=t.r+e.r,this.g=t.g+e.g,this.b=t.b+e.b,this}addScalar(t){return this.r+=t,this.g+=t,this.b+=t,this}sub(t){return this.r=Math.max(0,this.r-t.r),this.g=Math.max(0,this.g-t.g),this.b=Math.max(0,this.b-t.b),this}multiply(t){return this.r*=t.r,this.g*=t.g,this.b*=t.b,this}multiplyScalar(t){return this.r*=t,this.g*=t,this.b*=t,this}lerp(t,e){return this.r+=(t.r-this.r)*e,this.g+=(t.g-this.g)*e,this.b+=(t.b-this.b)*e,this}lerpColors(t,e,i){return this.r=t.r+(e.r-t.r)*i,this.g=t.g+(e.g-t.g)*i,this.b=t.b+(e.b-t.b)*i,this}lerpHSL(t,e){this.getHSL(Qi),t.getHSL(fr);const i=xa(Qi.h,fr.h,e),n=xa(Qi.s,fr.s,e),r=xa(Qi.l,fr.l,e);return this.setHSL(i,n,r),this}setFromVector3(t){return this.r=t.x,this.g=t.y,this.b=t.z,this}applyMatrix3(t){const e=this.r,i=this.g,n=this.b,r=t.elements;return this.r=r[0]*e+r[3]*i+r[6]*n,this.g=r[1]*e+r[4]*i+r[7]*n,this.b=r[2]*e+r[5]*i+r[8]*n,this}equals(t){return t.r===this.r&&t.g===this.g&&t.b===this.b}fromArray(t,e=0){return this.r=t[e],this.g=t[e+1],this.b=t[e+2],this}toArray(t=[],e=0){return t[e]=this.r,t[e+1]=this.g,t[e+2]=this.b,t}fromBufferAttribute(t,e){return this.r=t.getX(e),this.g=t.getY(e),this.b=t.getZ(e),this}toJSON(){return this.getHex()}*[Symbol.iterator](){yield this.r,yield this.g,yield this.b}}const _e=new qi;qi.NAMES=oh;const hi=new V,wi=new V,Ta=new V,Ri=new V,qn=new V,Kn=new V,lh=new V,wa=new V,Ra=new V,Pa=new V,Da=new Us,La=new Us,Na=new Us;class Ai{constructor(t=new V,e=new V,i=new V){this.a=t,this.b=e,this.c=i}static getNormal(t,e,i,n){n.subVectors(i,e),hi.subVectors(t,e),n.cross(hi);const r=n.lengthSq();return r>0?n.multiplyScalar(1/Math.sqrt(r)):n.set(0,0,0)}static getBarycoord(t,e,i,n,r){hi.subVectors(n,e),wi.subVectors(i,e),Ta.subVectors(t,e);const a=hi.dot(hi),o=hi.dot(wi),h=hi.dot(Ta),l=wi.dot(wi),A=wi.dot(Ta),c=a*l-o*o;if(c===0)return r.set(0,0,0),null;const u=1/c,d=(l*h-o*A)*u,p=(a*A-o*h)*u;return r.set(1-d-p,p,d)}static containsPoint(t,e,i,n){return this.getBarycoord(t,e,i,n,Ri)===null?!1:Ri.x>=0&&Ri.y>=0&&Ri.x+Ri.y<=1}static getInterpolation(t,e,i,n,r,a,o,h){return this.getBarycoord(t,e,i,n,Ri)===null?(h.x=0,h.y=0,"z"in h&&(h.z=0),"w"in h&&(h.w=0),null):(h.setScalar(0),h.addScaledVector(r,Ri.x),h.addScaledVector(a,Ri.y),h.addScaledVector(o,Ri.z),h)}static getInterpolatedAttribute(t,e,i,n,r,a){return Da.setScalar(0),La.setScalar(0),Na.setScalar(0),Da.fromBufferAttribute(t,e),La.fromBufferAttribute(t,i),Na.fromBufferAttribute(t,n),a.setScalar(0),a.addScaledVector(Da,r.x),a.addScaledVector(La,r.y),a.addScaledVector(Na,r.z),a}static isFrontFacing(t,e,i,n){return hi.subVectors(i,e),wi.subVectors(t,e),hi.cross(wi).dot(n)<0}set(t,e,i){return this.a.copy(t),this.b.copy(e),this.c.copy(i),this}setFromPointsAndIndices(t,e,i,n){return this.a.copy(t[e]),this.b.copy(t[i]),this.c.copy(t[n]),this}setFromAttributeAndIndices(t,e,i,n){return this.a.fromBufferAttribute(t,e),this.b.fromBufferAttribute(t,i),this.c.fromBufferAttribute(t,n),this}clone(){return new this.constructor().copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return hi.subVectors(this.c,this.b),wi.subVectors(this.a,this.b),hi.cross(wi).length()*.5}getMidpoint(t){return t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return Ai.getNormal(this.a,this.b,this.c,t)}getPlane(t){return t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return Ai.getBarycoord(t,this.a,this.b,this.c,e)}getInterpolation(t,e,i,n,r){return Ai.getInterpolation(t,this.a,this.b,this.c,e,i,n,r)}containsPoint(t){return Ai.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return Ai.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){const i=this.a,n=this.b,r=this.c;let a,o;qn.subVectors(n,i),Kn.subVectors(r,i),wa.subVectors(t,i);const h=qn.dot(wa),l=Kn.dot(wa);if(h<=0&&l<=0)return e.copy(i);Ra.subVectors(t,n);const A=qn.dot(Ra),c=Kn.dot(Ra);if(A>=0&&c<=A)return e.copy(n);const u=h*c-A*l;if(u<=0&&h>=0&&A<=0)return a=h/(h-A),e.copy(i).addScaledVector(qn,a);Pa.subVectors(t,r);const d=qn.dot(Pa),p=Kn.dot(Pa);if(p>=0&&d<=p)return e.copy(r);const m=d*l-h*p;if(m<=0&&l>=0&&p<=0)return o=l/(l-p),e.copy(i).addScaledVector(Kn,o);const g=A*p-d*c;if(g<=0&&c-A>=0&&d-p>=0)return lh.subVectors(r,n),o=(c-A)/(c-A+(d-p)),e.copy(n).addScaledVector(lh,o);const f=1/(g+m+u);return a=m*f,o=u*f,e.copy(i).addScaledVector(qn,a).addScaledVector(Kn,o)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}class ks{constructor(t=new V(1/0,1/0,1/0),e=new V(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=t,this.max=e}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){this.makeEmpty();for(let e=0,i=t.length;e<i;e+=3)this.expandByPoint(ci.fromArray(t,e));return this}setFromBufferAttribute(t){this.makeEmpty();for(let e=0,i=t.count;e<i;e++)this.expandByPoint(ci.fromBufferAttribute(t,e));return this}setFromPoints(t){this.makeEmpty();for(let e=0,i=t.length;e<i;e++)this.expandByPoint(t[e]);return this}setFromCenterAndSize(t,e){const i=ci.copy(e).multiplyScalar(.5);return this.min.copy(t).sub(i),this.max.copy(t).add(i),this}setFromObject(t,e=!1){return this.makeEmpty(),this.expandByObject(t,e)}clone(){return new this.constructor().copy(this)}copy(t){return this.min.copy(t.min),this.max.copy(t.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z}getCenter(t){return this.isEmpty()?t.set(0,0,0):t.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(t){return this.isEmpty()?t.set(0,0,0):t.subVectors(this.max,this.min)}expandByPoint(t){return this.min.min(t),this.max.max(t),this}expandByVector(t){return this.min.sub(t),this.max.add(t),this}expandByScalar(t){return this.min.addScalar(-t),this.max.addScalar(t),this}expandByObject(t,e=!1){t.updateWorldMatrix(!1,!1);const i=t.geometry;if(i!==void 0){const r=i.getAttribute("position");if(e===!0&&r!==void 0&&t.isInstancedMesh!==!0)for(let a=0,o=r.count;a<o;a++)t.isMesh===!0?t.getVertexPosition(a,ci):ci.fromBufferAttribute(r,a),ci.applyMatrix4(t.matrixWorld),this.expandByPoint(ci);else t.boundingBox!==void 0?(t.boundingBox===null&&t.computeBoundingBox(),gr.copy(t.boundingBox)):(i.boundingBox===null&&i.computeBoundingBox(),gr.copy(i.boundingBox)),gr.applyMatrix4(t.matrixWorld),this.union(gr)}const n=t.children;for(let r=0,a=n.length;r<a;r++)this.expandByObject(n[r],e);return this}containsPoint(t){return t.x>=this.min.x&&t.x<=this.max.x&&t.y>=this.min.y&&t.y<=this.max.y&&t.z>=this.min.z&&t.z<=this.max.z}containsBox(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(t,e){return e.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))}intersectsBox(t){return t.max.x>=this.min.x&&t.min.x<=this.max.x&&t.max.y>=this.min.y&&t.min.y<=this.max.y&&t.max.z>=this.min.z&&t.min.z<=this.max.z}intersectsSphere(t){return this.clampPoint(t.center,ci),ci.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,i;return t.normal.x>0?(e=t.normal.x*this.min.x,i=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,i=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,i+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,i+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,i+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,i+=t.normal.z*this.min.z),e<=-t.constant&&i>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(Gs),pr.subVectors(this.max,Gs),$n.subVectors(t.a,Gs),ts.subVectors(t.b,Gs),es.subVectors(t.c,Gs),Ki.subVectors(ts,$n),$i.subVectors(es,ts),mn.subVectors($n,es);let e=[0,-Ki.z,Ki.y,0,-$i.z,$i.y,0,-mn.z,mn.y,Ki.z,0,-Ki.x,$i.z,0,-$i.x,mn.z,0,-mn.x,-Ki.y,Ki.x,0,-$i.y,$i.x,0,-mn.y,mn.x,0];return!Oa(e,$n,ts,es,pr)||(e=[1,0,0,0,1,0,0,0,1],!Oa(e,$n,ts,es,pr))?!1:(mr.crossVectors(Ki,$i),e=[mr.x,mr.y,mr.z],Oa(e,$n,ts,es,pr))}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return this.clampPoint(t,ci).distanceTo(t)}getBoundingSphere(t){return this.isEmpty()?t.makeEmpty():(this.getCenter(t.center),t.radius=this.getSize(ci).length()*.5),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()?this:(Pi[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),Pi[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),Pi[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),Pi[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),Pi[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),Pi[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),Pi[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),Pi[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(Pi),this)}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}toJSON(){return{min:this.min.toArray(),max:this.max.toArray()}}fromJSON(t){return this.min.fromArray(t.min),this.max.fromArray(t.max),this}}const Pi=[new V,new V,new V,new V,new V,new V,new V,new V],ci=new V,gr=new ks,$n=new V,ts=new V,es=new V,Ki=new V,$i=new V,mn=new V,Gs=new V,pr=new V,mr=new V,Cn=new V;function Oa(s,t,e,i,n){for(let r=0,a=s.length-3;r<=a;r+=3){Cn.fromArray(s,r);const o=n.x*Math.abs(Cn.x)+n.y*Math.abs(Cn.y)+n.z*Math.abs(Cn.z),h=t.dot(Cn),l=e.dot(Cn),A=i.dot(Cn);if(Math.max(-Math.max(h,l,A),Math.min(h,l,A))>o)return!1}return!0}const pe=new V,Cr=new We;let mu=0;class In{constructor(t,e,i=!1){if(Array.isArray(t))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,Object.defineProperty(this,"id",{value:mu++}),this.name="",this.array=t,this.itemSize=e,this.count=t!==void 0?t.length/e:0,this.normalized=i,this.usage=35044,this.updateRanges=[],this.gpuType=1015,this.version=0}onUploadCallback(){}set needsUpdate(t){t===!0&&this.version++}setUsage(t){return this.usage=t,this}addUpdateRange(t,e){this.updateRanges.push({start:t,count:e})}clearUpdateRanges(){this.updateRanges.length=0}copy(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.usage=t.usage,this.gpuType=t.gpuType,this}copyAt(t,e,i){t*=this.itemSize,i*=e.itemSize;for(let n=0,r=this.itemSize;n<r;n++)this.array[t+n]=e.array[i+n];return this}copyArray(t){return this.array.set(t),this}applyMatrix3(t){if(this.itemSize===2)for(let e=0,i=this.count;e<i;e++)Cr.fromBufferAttribute(this,e),Cr.applyMatrix3(t),this.setXY(e,Cr.x,Cr.y);else if(this.itemSize===3)for(let e=0,i=this.count;e<i;e++)pe.fromBufferAttribute(this,e),pe.applyMatrix3(t),this.setXYZ(e,pe.x,pe.y,pe.z);return this}applyMatrix4(t){for(let e=0,i=this.count;e<i;e++)pe.fromBufferAttribute(this,e),pe.applyMatrix4(t),this.setXYZ(e,pe.x,pe.y,pe.z);return this}applyNormalMatrix(t){for(let e=0,i=this.count;e<i;e++)pe.fromBufferAttribute(this,e),pe.applyNormalMatrix(t),this.setXYZ(e,pe.x,pe.y,pe.z);return this}transformDirection(t){for(let e=0,i=this.count;e<i;e++)pe.fromBufferAttribute(this,e),pe.transformDirection(t),this.setXYZ(e,pe.x,pe.y,pe.z);return this}set(t,e=0){return this.array.set(t,e),this}getComponent(t,e){let i=this.array[t*this.itemSize+e];return this.normalized&&(i=Fs(i,this.array)),i}setComponent(t,e,i){return this.normalized&&(i=Be(i,this.array)),this.array[t*this.itemSize+e]=i,this}getX(t){let e=this.array[t*this.itemSize];return this.normalized&&(e=Fs(e,this.array)),e}setX(t,e){return this.normalized&&(e=Be(e,this.array)),this.array[t*this.itemSize]=e,this}getY(t){let e=this.array[t*this.itemSize+1];return this.normalized&&(e=Fs(e,this.array)),e}setY(t,e){return this.normalized&&(e=Be(e,this.array)),this.array[t*this.itemSize+1]=e,this}getZ(t){let e=this.array[t*this.itemSize+2];return this.normalized&&(e=Fs(e,this.array)),e}setZ(t,e){return this.normalized&&(e=Be(e,this.array)),this.array[t*this.itemSize+2]=e,this}getW(t){let e=this.array[t*this.itemSize+3];return this.normalized&&(e=Fs(e,this.array)),e}setW(t,e){return this.normalized&&(e=Be(e,this.array)),this.array[t*this.itemSize+3]=e,this}setXY(t,e,i){return t*=this.itemSize,this.normalized&&(e=Be(e,this.array),i=Be(i,this.array)),this.array[t+0]=e,this.array[t+1]=i,this}setXYZ(t,e,i,n){return t*=this.itemSize,this.normalized&&(e=Be(e,this.array),i=Be(i,this.array),n=Be(n,this.array)),this.array[t+0]=e,this.array[t+1]=i,this.array[t+2]=n,this}setXYZW(t,e,i,n,r){return t*=this.itemSize,this.normalized&&(e=Be(e,this.array),i=Be(i,this.array),n=Be(n,this.array),r=Be(r,this.array)),this.array[t+0]=e,this.array[t+1]=i,this.array[t+2]=n,this.array[t+3]=r,this}onUpload(t){return this.onUploadCallback=t,this}clone(){return new this.constructor(this.array,this.itemSize).copy(this)}toJSON(){const t={itemSize:this.itemSize,type:this.array.constructor.name,array:Array.from(this.array),normalized:this.normalized};return this.name!==""&&(t.name=this.name),this.usage!==35044&&(t.usage=this.usage),t}}class Cu extends In{constructor(t,e,i){super(new Uint16Array(t),e,i)}}class Iu extends In{constructor(t,e,i){super(new Uint32Array(t),e,i)}}class vn extends In{constructor(t,e,i){super(new Float32Array(t),e,i)}}const vu=new ks,Hs=new V,Fa=new V;class hh{constructor(t=new V,e=-1){this.isSphere=!0,this.center=t,this.radius=e}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){const i=this.center;e!==void 0?i.copy(e):vu.setFromPoints(t).getCenter(i);let n=0;for(let r=0,a=t.length;r<a;r++)n=Math.max(n,i.distanceToSquared(t[r]));return this.radius=Math.sqrt(n),this}copy(t){return this.center.copy(t.center),this.radius=t.radius,this}isEmpty(){return this.radius<0}makeEmpty(){return this.center.set(0,0,0),this.radius=-1,this}containsPoint(t){return t.distanceToSquared(this.center)<=this.radius*this.radius}distanceToPoint(t){return t.distanceTo(this.center)-this.radius}intersectsSphere(t){const e=this.radius+t.radius;return t.center.distanceToSquared(this.center)<=e*e}intersectsBox(t){return t.intersectsSphere(this)}intersectsPlane(t){return Math.abs(t.distanceToPoint(this.center))<=this.radius}clampPoint(t,e){const i=this.center.distanceToSquared(t);return e.copy(t),i>this.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}expandByPoint(t){if(this.isEmpty())return this.center.copy(t),this.radius=0,this;Hs.subVectors(t,this.center);const e=Hs.lengthSq();if(e>this.radius*this.radius){const i=Math.sqrt(e),n=(i-this.radius)*.5;this.center.addScaledVector(Hs,n/i),this.radius+=n}return this}union(t){return t.isEmpty()?this:this.isEmpty()?(this.copy(t),this):(this.center.equals(t.center)===!0?this.radius=Math.max(this.radius,t.radius):(Fa.subVectors(t.center,this.center).setLength(t.radius),this.expandByPoint(Hs.copy(t.center).add(Fa)),this.expandByPoint(Hs.copy(t.center).sub(Fa))),this)}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}clone(){return new this.constructor().copy(this)}toJSON(){return{radius:this.radius,center:this.center.toArray()}}fromJSON(t){return this.radius=t.radius,this.center.fromArray(t.center),this}}let xu=0;const $e=new oi,Ba=new Ke,is=new V,Xe=new ks,Vs=new ks,xe=new V;class ns extends cr{constructor(){super(),this.isBufferGeometry=!0,Object.defineProperty(this,"id",{value:xu++}),this.uuid=Os(),this.name="",this.type="BufferGeometry",this.index=null,this.indirect=null,this.indirectOffset=0,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}getIndex(){return this.index}setIndex(t){return Array.isArray(t)?this.index=new(nu(t)?Iu:Cu)(t,1):this.index=t,this}setIndirect(t,e=0){return this.indirect=t,this.indirectOffset=e,this}getIndirect(){return this.indirect}getAttribute(t){return this.attributes[t]}setAttribute(t,e){return this.attributes[t]=e,this}deleteAttribute(t){return delete this.attributes[t],this}hasAttribute(t){return this.attributes[t]!==void 0}addGroup(t,e,i=0){this.groups.push({start:t,count:e,materialIndex:i})}clearGroups(){this.groups=[]}setDrawRange(t,e){this.drawRange.start=t,this.drawRange.count=e}applyMatrix4(t){const e=this.attributes.position;e!==void 0&&(e.applyMatrix4(t),e.needsUpdate=!0);const i=this.attributes.normal;if(i!==void 0){const r=new ji().getNormalMatrix(t);i.applyNormalMatrix(r),i.needsUpdate=!0}const n=this.attributes.tangent;return n!==void 0&&(n.transformDirection(t),n.needsUpdate=!0),this.boundingBox!==null&&this.computeBoundingBox(),this.boundingSphere!==null&&this.computeBoundingSphere(),this}applyQuaternion(t){return $e.makeRotationFromQuaternion(t),this.applyMatrix4($e),this}rotateX(t){return $e.makeRotationX(t),this.applyMatrix4($e),this}rotateY(t){return $e.makeRotationY(t),this.applyMatrix4($e),this}rotateZ(t){return $e.makeRotationZ(t),this.applyMatrix4($e),this}translate(t,e,i){return $e.makeTranslation(t,e,i),this.applyMatrix4($e),this}scale(t,e,i){return $e.makeScale(t,e,i),this.applyMatrix4($e),this}lookAt(t){return Ba.lookAt(t),Ba.updateMatrix(),this.applyMatrix4(Ba.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(is).negate(),this.translate(is.x,is.y,is.z),this}setFromPoints(t){const e=this.getAttribute("position");if(e===void 0){const i=[];for(let n=0,r=t.length;n<r;n++){const a=t[n];i.push(a.x,a.y,a.z||0)}this.setAttribute("position",new vn(i,3))}else{const i=Math.min(t.length,e.count);for(let n=0;n<i;n++){const r=t[n];e.setXYZ(n,r.x,r.y,r.z||0)}t.length>e.count&&Me("BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry."),e.needsUpdate=!0}return this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new ks);const t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute){pn("BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.",this),this.boundingBox.set(new V(-1/0,-1/0,-1/0),new V(1/0,1/0,1/0));return}if(t!==void 0){if(this.boundingBox.setFromBufferAttribute(t),e)for(let i=0,n=e.length;i<n;i++){const r=e[i];Xe.setFromBufferAttribute(r),this.morphTargetsRelative?(xe.addVectors(this.boundingBox.min,Xe.min),this.boundingBox.expandByPoint(xe),xe.addVectors(this.boundingBox.max,Xe.max),this.boundingBox.expandByPoint(xe)):(this.boundingBox.expandByPoint(Xe.min),this.boundingBox.expandByPoint(Xe.max))}}else this.boundingBox.makeEmpty();(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))&&pn('BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The "position" attribute is likely to have NaN values.',this)}computeBoundingSphere(){this.boundingSphere===null&&(this.boundingSphere=new hh);const t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute){pn("BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere.",this),this.boundingSphere.set(new V,1/0);return}if(t){const i=this.boundingSphere.center;if(Xe.setFromBufferAttribute(t),e)for(let r=0,a=e.length;r<a;r++){const o=e[r];Vs.setFromBufferAttribute(o),this.morphTargetsRelative?(xe.addVectors(Xe.min,Vs.min),Xe.expandByPoint(xe),xe.addVectors(Xe.max,Vs.max),Xe.expandByPoint(xe)):(Xe.expandByPoint(Vs.min),Xe.expandByPoint(Vs.max))}Xe.getCenter(i);let n=0;for(let r=0,a=t.count;r<a;r++)xe.fromBufferAttribute(t,r),n=Math.max(n,i.distanceToSquared(xe));if(e)for(let r=0,a=e.length;r<a;r++){const o=e[r],h=this.morphTargetsRelative;for(let l=0,A=o.count;l<A;l++)xe.fromBufferAttribute(o,l),h&&(is.fromBufferAttribute(t,l),xe.add(is)),n=Math.max(n,i.distanceToSquared(xe))}this.boundingSphere.radius=Math.sqrt(n),isNaN(this.boundingSphere.radius)&&pn('BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.',this)}}computeTangents(){const t=this.index,e=this.attributes;if(t===null||e.position===void 0||e.normal===void 0||e.uv===void 0){pn("BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)");return}const i=e.position,n=e.normal,r=e.uv;this.hasAttribute("tangent")===!1&&this.setAttribute("tangent",new In(new Float32Array(4*i.count),4));const a=this.getAttribute("tangent"),o=[],h=[];for(let P=0;P<i.count;P++)o[P]=new V,h[P]=new V;const l=new V,A=new V,c=new V,u=new We,d=new We,p=new We,m=new V,g=new V;function f(P,E,x){l.fromBufferAttribute(i,P),A.fromBufferAttribute(i,E),c.fromBufferAttribute(i,x),u.fromBufferAttribute(r,P),d.fromBufferAttribute(r,E),p.fromBufferAttribute(r,x),A.sub(l),c.sub(l),d.sub(u),p.sub(u);const b=1/(d.x*p.y-p.x*d.y);isFinite(b)&&(m.copy(A).multiplyScalar(p.y).addScaledVector(c,-d.y).multiplyScalar(b),g.copy(c).multiplyScalar(d.x).addScaledVector(A,-p.x).multiplyScalar(b),o[P].add(m),o[E].add(m),o[x].add(m),h[P].add(g),h[E].add(g),h[x].add(g))}let M=this.groups;M.length===0&&(M=[{start:0,count:t.count}]);for(let P=0,E=M.length;P<E;++P){const x=M[P],b=x.start,z=x.count;for(let F=b,U=b+z;F<U;F+=3)f(t.getX(F+0),t.getX(F+1),t.getX(F+2))}const S=new V,v=new V,T=new V,_=new V;function w(P){T.fromBufferAttribute(n,P),_.copy(T);const E=o[P];S.copy(E),S.sub(T.multiplyScalar(T.dot(E))).normalize(),v.crossVectors(_,E);const x=v.dot(h[P])<0?-1:1;a.setXYZW(P,S.x,S.y,S.z,x)}for(let P=0,E=M.length;P<E;++P){const x=M[P],b=x.start,z=x.count;for(let F=b,U=b+z;F<U;F+=3)w(t.getX(F+0)),w(t.getX(F+1)),w(t.getX(F+2))}}computeVertexNormals(){const t=this.index,e=this.getAttribute("position");if(e!==void 0){let i=this.getAttribute("normal");if(i===void 0)i=new In(new Float32Array(e.count*3),3),this.setAttribute("normal",i);else for(let u=0,d=i.count;u<d;u++)i.setXYZ(u,0,0,0);const n=new V,r=new V,a=new V,o=new V,h=new V,l=new V,A=new V,c=new V;if(t)for(let u=0,d=t.count;u<d;u+=3){const p=t.getX(u+0),m=t.getX(u+1),g=t.getX(u+2);n.fromBufferAttribute(e,p),r.fromBufferAttribute(e,m),a.fromBufferAttribute(e,g),A.subVectors(a,r),c.subVectors(n,r),A.cross(c),o.fromBufferAttribute(i,p),h.fromBufferAttribute(i,m),l.fromBufferAttribute(i,g),o.add(A),h.add(A),l.add(A),i.setXYZ(p,o.x,o.y,o.z),i.setXYZ(m,h.x,h.y,h.z),i.setXYZ(g,l.x,l.y,l.z)}else for(let u=0,d=e.count;u<d;u+=3)n.fromBufferAttribute(e,u+0),r.fromBufferAttribute(e,u+1),a.fromBufferAttribute(e,u+2),A.subVectors(a,r),c.subVectors(n,r),A.cross(c),i.setXYZ(u+0,A.x,A.y,A.z),i.setXYZ(u+1,A.x,A.y,A.z),i.setXYZ(u+2,A.x,A.y,A.z);this.normalizeNormals(),i.needsUpdate=!0}}normalizeNormals(){const t=this.attributes.normal;for(let e=0,i=t.count;e<i;e++)xe.fromBufferAttribute(t,e),xe.normalize(),t.setXYZ(e,xe.x,xe.y,xe.z)}toNonIndexed(){function t(o,h){const l=o.array,A=o.itemSize,c=o.normalized,u=new l.constructor(h.length*A);let d=0,p=0;for(let m=0,g=h.length;m<g;m++){o.isInterleavedBufferAttribute?d=h[m]*o.data.stride+o.offset:d=h[m]*A;for(let f=0;f<A;f++)u[p++]=l[d++]}return new In(u,A,c)}if(this.index===null)return Me("BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed."),this;const e=new ns,i=this.index.array,n=this.attributes;for(const o in n){const h=n[o],l=t(h,i);e.setAttribute(o,l)}const r=this.morphAttributes;for(const o in r){const h=[],l=r[o];for(let A=0,c=l.length;A<c;A++){const u=l[A],d=t(u,i);h.push(d)}e.morphAttributes[o]=h}e.morphTargetsRelative=this.morphTargetsRelative;const a=this.groups;for(let o=0,h=a.length;o<h;o++){const l=a[o];e.addGroup(l.start,l.count,l.materialIndex)}return e}toJSON(){const t={metadata:{version:4.7,type:"BufferGeometry",generator:"BufferGeometry.toJSON"}};if(t.uuid=this.uuid,t.type=this.type,this.name!==""&&(t.name=this.name),Object.keys(this.userData).length>0&&(t.userData=this.userData),this.parameters!==void 0){const h=this.parameters;for(const l in h)h[l]!==void 0&&(t[l]=h[l]);return t}t.data={attributes:{}};const e=this.index;e!==null&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});const i=this.attributes;for(const h in i){const l=i[h];t.data.attributes[h]=l.toJSON(t.data)}const n={};let r=!1;for(const h in this.morphAttributes){const l=this.morphAttributes[h],A=[];for(let c=0,u=l.length;c<u;c++){const d=l[c];A.push(d.toJSON(t.data))}A.length>0&&(n[h]=A,r=!0)}r&&(t.data.morphAttributes=n,t.data.morphTargetsRelative=this.morphTargetsRelative);const a=this.groups;a.length>0&&(t.data.groups=JSON.parse(JSON.stringify(a)));const o=this.boundingSphere;return o!==null&&(t.data.boundingSphere=o.toJSON()),t}clone(){return new this.constructor().copy(this)}copy(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const e={};this.name=t.name;const i=t.index;i!==null&&this.setIndex(i.clone());const n=t.attributes;for(const l in n){const A=n[l];this.setAttribute(l,A.clone(e))}const r=t.morphAttributes;for(const l in r){const A=[],c=r[l];for(let u=0,d=c.length;u<d;u++)A.push(c[u].clone(e));this.morphAttributes[l]=A}this.morphTargetsRelative=t.morphTargetsRelative;const a=t.groups;for(let l=0,A=a.length;l<A;l++){const c=a[l];this.addGroup(c.start,c.count,c.materialIndex)}const o=t.boundingBox;o!==null&&(this.boundingBox=o.clone());const h=t.boundingSphere;return h!==null&&(this.boundingSphere=h.clone()),this.drawRange.start=t.drawRange.start,this.drawRange.count=t.drawRange.count,this.userData=t.userData,this}dispose(){this.dispatchEvent({type:"dispose"})}}let Eu=0;class Ua extends cr{constructor(){super(),this.isMaterial=!0,Object.defineProperty(this,"id",{value:Eu++}),this.uuid=Os(),this.name="",this.type="Material",this.blending=1,this.side=0,this.vertexColors=!1,this.opacity=1,this.transparent=!1,this.alphaHash=!1,this.blendSrc=204,this.blendDst=205,this.blendEquation=100,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.blendColor=new qi(0,0,0),this.blendAlpha=0,this.depthFunc=3,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=519,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=7680,this.stencilZFail=7680,this.stencilZPass=7680,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.forceSinglePass=!1,this.allowOverride=!0,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0,this._alphaTest=0}get alphaTest(){return this._alphaTest}set alphaTest(t){this._alphaTest>0!=t>0&&this.version++,this._alphaTest=t}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(t){if(t!==void 0)for(const e in t){const i=t[e];if(i===void 0){Me(`Material: parameter '${e}' has value of undefined.`);continue}const n=this[e];if(n===void 0){Me(`Material: '${e}' is not a property of THREE.${this.type}.`);continue}n&&n.isColor?n.set(i):n&&n.isVector3&&i&&i.isVector3?n.copy(i):this[e]=i}}toJSON(t){const e=t===void 0||typeof t=="string";e&&(t={textures:{},images:{}});const i={metadata:{version:4.7,type:"Material",generator:"Material.toJSON"}};i.uuid=this.uuid,i.type=this.type,this.name!==""&&(i.name=this.name),this.color&&this.color.isColor&&(i.color=this.color.getHex()),this.roughness!==void 0&&(i.roughness=this.roughness),this.metalness!==void 0&&(i.metalness=this.metalness),this.sheen!==void 0&&(i.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(i.sheenColor=this.sheenColor.getHex()),this.sheenRoughness!==void 0&&(i.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(i.emissive=this.emissive.getHex()),this.emissiveIntensity!==void 0&&this.emissiveIntensity!==1&&(i.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(i.specular=this.specular.getHex()),this.specularIntensity!==void 0&&(i.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(i.specularColor=this.specularColor.getHex()),this.shininess!==void 0&&(i.shininess=this.shininess),this.clearcoat!==void 0&&(i.clearcoat=this.clearcoat),this.clearcoatRoughness!==void 0&&(i.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(i.clearcoatMap=this.clearcoatMap.toJSON(t).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(i.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(t).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(i.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(t).uuid,i.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.sheenColorMap&&this.sheenColorMap.isTexture&&(i.sheenColorMap=this.sheenColorMap.toJSON(t).uuid),this.sheenRoughnessMap&&this.sheenRoughnessMap.isTexture&&(i.sheenRoughnessMap=this.sheenRoughnessMap.toJSON(t).uuid),this.dispersion!==void 0&&(i.dispersion=this.dispersion),this.iridescence!==void 0&&(i.iridescence=this.iridescence),this.iridescenceIOR!==void 0&&(i.iridescenceIOR=this.iridescenceIOR),this.iridescenceThicknessRange!==void 0&&(i.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(i.iridescenceMap=this.iridescenceMap.toJSON(t).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(i.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(t).uuid),this.anisotropy!==void 0&&(i.anisotropy=this.anisotropy),this.anisotropyRotation!==void 0&&(i.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(i.anisotropyMap=this.anisotropyMap.toJSON(t).uuid),this.map&&this.map.isTexture&&(i.map=this.map.toJSON(t).uuid),this.matcap&&this.matcap.isTexture&&(i.matcap=this.matcap.toJSON(t).uuid),this.alphaMap&&this.alphaMap.isTexture&&(i.alphaMap=this.alphaMap.toJSON(t).uuid),this.lightMap&&this.lightMap.isTexture&&(i.lightMap=this.lightMap.toJSON(t).uuid,i.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(i.aoMap=this.aoMap.toJSON(t).uuid,i.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(i.bumpMap=this.bumpMap.toJSON(t).uuid,i.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(i.normalMap=this.normalMap.toJSON(t).uuid,i.normalMapType=this.normalMapType,i.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(i.displacementMap=this.displacementMap.toJSON(t).uuid,i.displacementScale=this.displacementScale,i.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(i.roughnessMap=this.roughnessMap.toJSON(t).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(i.metalnessMap=this.metalnessMap.toJSON(t).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(i.emissiveMap=this.emissiveMap.toJSON(t).uuid),this.specularMap&&this.specularMap.isTexture&&(i.specularMap=this.specularMap.toJSON(t).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(i.specularIntensityMap=this.specularIntensityMap.toJSON(t).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(i.specularColorMap=this.specularColorMap.toJSON(t).uuid),this.envMap&&this.envMap.isTexture&&(i.envMap=this.envMap.toJSON(t).uuid,this.combine!==void 0&&(i.combine=this.combine)),this.envMapRotation!==void 0&&(i.envMapRotation=this.envMapRotation.toArray()),this.envMapIntensity!==void 0&&(i.envMapIntensity=this.envMapIntensity),this.reflectivity!==void 0&&(i.reflectivity=this.reflectivity),this.refractionRatio!==void 0&&(i.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(i.gradientMap=this.gradientMap.toJSON(t).uuid),this.transmission!==void 0&&(i.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(i.transmissionMap=this.transmissionMap.toJSON(t).uuid),this.thickness!==void 0&&(i.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(i.thicknessMap=this.thicknessMap.toJSON(t).uuid),this.attenuationDistance!==void 0&&this.attenuationDistance!==1/0&&(i.attenuationDistance=this.attenuationDistance),this.attenuationColor!==void 0&&(i.attenuationColor=this.attenuationColor.getHex()),this.size!==void 0&&(i.size=this.size),this.shadowSide!==null&&(i.shadowSide=this.shadowSide),this.sizeAttenuation!==void 0&&(i.sizeAttenuation=this.sizeAttenuation),this.blending!==1&&(i.blending=this.blending),this.side!==0&&(i.side=this.side),this.vertexColors===!0&&(i.vertexColors=!0),this.opacity<1&&(i.opacity=this.opacity),this.transparent===!0&&(i.transparent=!0),this.blendSrc!==204&&(i.blendSrc=this.blendSrc),this.blendDst!==205&&(i.blendDst=this.blendDst),this.blendEquation!==100&&(i.blendEquation=this.blendEquation),this.blendSrcAlpha!==null&&(i.blendSrcAlpha=this.blendSrcAlpha),this.blendDstAlpha!==null&&(i.blendDstAlpha=this.blendDstAlpha),this.blendEquationAlpha!==null&&(i.blendEquationAlpha=this.blendEquationAlpha),this.blendColor&&this.blendColor.isColor&&(i.blendColor=this.blendColor.getHex()),this.blendAlpha!==0&&(i.blendAlpha=this.blendAlpha),this.depthFunc!==3&&(i.depthFunc=this.depthFunc),this.depthTest===!1&&(i.depthTest=this.depthTest),this.depthWrite===!1&&(i.depthWrite=this.depthWrite),this.colorWrite===!1&&(i.colorWrite=this.colorWrite),this.stencilWriteMask!==255&&(i.stencilWriteMask=this.stencilWriteMask),this.stencilFunc!==519&&(i.stencilFunc=this.stencilFunc),this.stencilRef!==0&&(i.stencilRef=this.stencilRef),this.stencilFuncMask!==255&&(i.stencilFuncMask=this.stencilFuncMask),this.stencilFail!==7680&&(i.stencilFail=this.stencilFail),this.stencilZFail!==7680&&(i.stencilZFail=this.stencilZFail),this.stencilZPass!==7680&&(i.stencilZPass=this.stencilZPass),this.stencilWrite===!0&&(i.stencilWrite=this.stencilWrite),this.rotation!==void 0&&this.rotation!==0&&(i.rotation=this.rotation),this.polygonOffset===!0&&(i.polygonOffset=!0),this.polygonOffsetFactor!==0&&(i.polygonOffsetFactor=this.polygonOffsetFactor),this.polygonOffsetUnits!==0&&(i.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth!==void 0&&this.linewidth!==1&&(i.linewidth=this.linewidth),this.dashSize!==void 0&&(i.dashSize=this.dashSize),this.gapSize!==void 0&&(i.gapSize=this.gapSize),this.scale!==void 0&&(i.scale=this.scale),this.dithering===!0&&(i.dithering=!0),this.alphaTest>0&&(i.alphaTest=this.alphaTest),this.alphaHash===!0&&(i.alphaHash=!0),this.alphaToCoverage===!0&&(i.alphaToCoverage=!0),this.premultipliedAlpha===!0&&(i.premultipliedAlpha=!0),this.forceSinglePass===!0&&(i.forceSinglePass=!0),this.allowOverride===!1&&(i.allowOverride=!1),this.wireframe===!0&&(i.wireframe=!0),this.wireframeLinewidth>1&&(i.wireframeLinewidth=this.wireframeLinewidth),this.wireframeLinecap!=="round"&&(i.wireframeLinecap=this.wireframeLinecap),this.wireframeLinejoin!=="round"&&(i.wireframeLinejoin=this.wireframeLinejoin),this.flatShading===!0&&(i.flatShading=!0),this.visible===!1&&(i.visible=!1),this.toneMapped===!1&&(i.toneMapped=!1),this.fog===!1&&(i.fog=!1),Object.keys(this.userData).length>0&&(i.userData=this.userData);function n(r){const a=[];for(const o in r){const h=r[o];delete h.metadata,a.push(h)}return a}if(e){const r=n(t.textures),a=n(t.images);r.length>0&&(i.textures=r),a.length>0&&(i.images=a)}return i}clone(){return new this.constructor().copy(this)}copy(t){this.name=t.name,this.blending=t.blending,this.side=t.side,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.blendColor.copy(t.blendColor),this.blendAlpha=t.blendAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;const e=t.clippingPlanes;let i=null;if(e!==null){const n=e.length;i=new Array(n);for(let r=0;r!==n;++r)i[r]=e[r].clone()}return this.clippingPlanes=i,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.alphaHash=t.alphaHash,this.alphaToCoverage=t.alphaToCoverage,this.premultipliedAlpha=t.premultipliedAlpha,this.forceSinglePass=t.forceSinglePass,this.allowOverride=t.allowOverride,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(t){t===!0&&this.version++}}const Di=new V,za=new V,Ir=new V,tn=new V,ka=new V,vr=new V,Ga=new V;class Su{constructor(t=new V,e=new V(0,0,-1)){this.origin=t,this.direction=e}set(t,e){return this.origin.copy(t),this.direction.copy(e),this}copy(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this}at(t,e){return e.copy(this.origin).addScaledVector(this.direction,t)}lookAt(t){return this.direction.copy(t).sub(this.origin).normalize(),this}recast(t){return this.origin.copy(this.at(t,Di)),this}closestPointToPoint(t,e){e.subVectors(t,this.origin);const i=e.dot(this.direction);return i<0?e.copy(this.origin):e.copy(this.origin).addScaledVector(this.direction,i)}distanceToPoint(t){return Math.sqrt(this.distanceSqToPoint(t))}distanceSqToPoint(t){const e=Di.subVectors(t,this.origin).dot(this.direction);return e<0?this.origin.distanceToSquared(t):(Di.copy(this.origin).addScaledVector(this.direction,e),Di.distanceToSquared(t))}distanceSqToSegment(t,e,i,n){za.copy(t).add(e).multiplyScalar(.5),Ir.copy(e).sub(t).normalize(),tn.copy(this.origin).sub(za);const r=t.distanceTo(e)*.5,a=-this.direction.dot(Ir),o=tn.dot(this.direction),h=-tn.dot(Ir),l=tn.lengthSq(),A=Math.abs(1-a*a);let c,u,d,p;if(A>0)if(c=a*h-o,u=a*o-h,p=r*A,c>=0)if(u>=-p)if(u<=p){const m=1/A;c*=m,u*=m,d=c*(c+a*u+2*o)+u*(a*c+u+2*h)+l}else u=r,c=Math.max(0,-(a*u+o)),d=-c*c+u*(u+2*h)+l;else u=-r,c=Math.max(0,-(a*u+o)),d=-c*c+u*(u+2*h)+l;else u<=-p?(c=Math.max(0,-(-a*r+o)),u=c>0?-r:Math.min(Math.max(-r,-h),r),d=-c*c+u*(u+2*h)+l):u<=p?(c=0,u=Math.min(Math.max(-r,-h),r),d=u*(u+2*h)+l):(c=Math.max(0,-(a*r+o)),u=c>0?r:Math.min(Math.max(-r,-h),r),d=-c*c+u*(u+2*h)+l);else u=a>0?-r:r,c=Math.max(0,-(a*u+o)),d=-c*c+u*(u+2*h)+l;return i&&i.copy(this.origin).addScaledVector(this.direction,c),n&&n.copy(za).addScaledVector(Ir,u),d}intersectSphere(t,e){Di.subVectors(t.center,this.origin);const i=Di.dot(this.direction),n=Di.dot(Di)-i*i,r=t.radius*t.radius;if(n>r)return null;const a=Math.sqrt(r-n),o=i-a,h=i+a;return h<0?null:o<0?this.at(h,e):this.at(o,e)}intersectsSphere(t){return t.radius<0?!1:this.distanceSqToPoint(t.center)<=t.radius*t.radius}distanceToPlane(t){const e=t.normal.dot(this.direction);if(e===0)return t.distanceToPoint(this.origin)===0?0:null;const i=-(this.origin.dot(t.normal)+t.constant)/e;return i>=0?i:null}intersectPlane(t,e){const i=this.distanceToPlane(t);return i===null?null:this.at(i,e)}intersectsPlane(t){const e=t.distanceToPoint(this.origin);return e===0||t.normal.dot(this.direction)*e<0}intersectBox(t,e){let i,n,r,a,o,h;const l=1/this.direction.x,A=1/this.direction.y,c=1/this.direction.z,u=this.origin;return l>=0?(i=(t.min.x-u.x)*l,n=(t.max.x-u.x)*l):(i=(t.max.x-u.x)*l,n=(t.min.x-u.x)*l),A>=0?(r=(t.min.y-u.y)*A,a=(t.max.y-u.y)*A):(r=(t.max.y-u.y)*A,a=(t.min.y-u.y)*A),i>a||r>n||((r>i||isNaN(i))&&(i=r),(a<n||isNaN(n))&&(n=a),c>=0?(o=(t.min.z-u.z)*c,h=(t.max.z-u.z)*c):(o=(t.max.z-u.z)*c,h=(t.min.z-u.z)*c),i>h||o>n)||((o>i||i!==i)&&(i=o),(h<n||n!==n)&&(n=h),n<0)?null:this.at(i>=0?i:n,e)}intersectsBox(t){return this.intersectBox(t,Di)!==null}intersectTriangle(t,e,i,n,r){ka.subVectors(e,t),vr.subVectors(i,t),Ga.crossVectors(ka,vr);let a=this.direction.dot(Ga),o;if(a>0){if(n)return null;o=1}else if(a<0)o=-1,a=-a;else return null;tn.subVectors(this.origin,t);const h=o*this.direction.dot(vr.crossVectors(tn,vr));if(h<0)return null;const l=o*this.direction.dot(ka.cross(tn));if(l<0||h+l>a)return null;const A=-o*tn.dot(Ga);return A<0?null:this.at(A/a,r)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}}class yu extends Ua{constructor(t){super(),this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new qi(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new jn,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapRotation.copy(t.envMapRotation),this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.fog=t.fog,this}}const Ah=new oi,xn=new Su,xr=new hh,ch=new V,Er=new V,Sr=new V,yr=new V,Ha=new V,Mr=new V,uh=new V,br=new V;class dh extends Ke{constructor(t=new ns,e=new yu){super(),this.isMesh=!0,this.type="Mesh",this.geometry=t,this.material=e,this.morphTargetDictionary=void 0,this.morphTargetInfluences=void 0,this.count=1,this.updateMorphTargets()}copy(t,e){return super.copy(t,e),t.morphTargetInfluences!==void 0&&(this.morphTargetInfluences=t.morphTargetInfluences.slice()),t.morphTargetDictionary!==void 0&&(this.morphTargetDictionary=Object.assign({},t.morphTargetDictionary)),this.material=Array.isArray(t.material)?t.material.slice():t.material,this.geometry=t.geometry,this}updateMorphTargets(){const t=this.geometry.morphAttributes,e=Object.keys(t);if(e.length>0){const i=t[e[0]];if(i!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let n=0,r=i.length;n<r;n++){const a=i[n].name||String(n);this.morphTargetInfluences.push(0),this.morphTargetDictionary[a]=n}}}}getVertexPosition(t,e){const i=this.geometry,n=i.attributes.position,r=i.morphAttributes.position,a=i.morphTargetsRelative;e.fromBufferAttribute(n,t);const o=this.morphTargetInfluences;if(r&&o){Mr.set(0,0,0);for(let h=0,l=r.length;h<l;h++){const A=o[h],c=r[h];A!==0&&(Ha.fromBufferAttribute(c,t),a?Mr.addScaledVector(Ha,A):Mr.addScaledVector(Ha.sub(e),A))}e.add(Mr)}return e}raycast(t,e){const i=this.geometry,n=this.material,r=this.matrixWorld;n!==void 0&&(i.boundingSphere===null&&i.computeBoundingSphere(),xr.copy(i.boundingSphere),xr.applyMatrix4(r),xn.copy(t.ray).recast(t.near),!(xr.containsPoint(xn.origin)===!1&&(xn.intersectSphere(xr,ch)===null||xn.origin.distanceToSquared(ch)>(t.far-t.near)**2))&&(Ah.copy(r).invert(),xn.copy(t.ray).applyMatrix4(Ah),!(i.boundingBox!==null&&xn.intersectsBox(i.boundingBox)===!1)&&this._computeIntersections(t,e,xn)))}_computeIntersections(t,e,i){let n;const r=this.geometry,a=this.material,o=r.index,h=r.attributes.position,l=r.attributes.uv,A=r.attributes.uv1,c=r.attributes.normal,u=r.groups,d=r.drawRange;if(o!==null)if(Array.isArray(a))for(let p=0,m=u.length;p<m;p++){const g=u[p],f=a[g.materialIndex],M=Math.max(g.start,d.start),S=Math.min(o.count,Math.min(g.start+g.count,d.start+d.count));for(let v=M,T=S;v<T;v+=3){const _=o.getX(v),w=o.getX(v+1),P=o.getX(v+2);n=_r(this,f,t,i,l,A,c,_,w,P),n&&(n.faceIndex=Math.floor(v/3),n.face.materialIndex=g.materialIndex,e.push(n))}}else{const p=Math.max(0,d.start),m=Math.min(o.count,d.start+d.count);for(let g=p,f=m;g<f;g+=3){const M=o.getX(g),S=o.getX(g+1),v=o.getX(g+2);n=_r(this,a,t,i,l,A,c,M,S,v),n&&(n.faceIndex=Math.floor(g/3),e.push(n))}}else if(h!==void 0)if(Array.isArray(a))for(let p=0,m=u.length;p<m;p++){const g=u[p],f=a[g.materialIndex],M=Math.max(g.start,d.start),S=Math.min(h.count,Math.min(g.start+g.count,d.start+d.count));for(let v=M,T=S;v<T;v+=3){const _=v,w=v+1,P=v+2;n=_r(this,f,t,i,l,A,c,_,w,P),n&&(n.faceIndex=Math.floor(v/3),n.face.materialIndex=g.materialIndex,e.push(n))}}else{const p=Math.max(0,d.start),m=Math.min(h.count,d.start+d.count);for(let g=p,f=m;g<f;g+=3){const M=g,S=g+1,v=g+2;n=_r(this,a,t,i,l,A,c,M,S,v),n&&(n.faceIndex=Math.floor(g/3),e.push(n))}}}}function Mu(s,t,e,i,n,r,a,o){let h;if(t.side===1?h=i.intersectTriangle(a,r,n,!0,o):h=i.intersectTriangle(n,r,a,t.side===0,o),h===null)return null;br.copy(o),br.applyMatrix4(s.matrixWorld);const l=e.ray.origin.distanceTo(br);return l<e.near||l>e.far?null:{distance:l,point:br.clone(),object:s}}function _r(s,t,e,i,n,r,a,o,h,l){s.getVertexPosition(o,Er),s.getVertexPosition(h,Sr),s.getVertexPosition(l,yr);const A=Mu(s,t,e,i,Er,Sr,yr,uh);if(A){const c=new V;Ai.getBarycoord(uh,Er,Sr,yr,c),n&&(A.uv=Ai.getInterpolatedAttribute(n,o,h,l,c,new We)),r&&(A.uv1=Ai.getInterpolatedAttribute(r,o,h,l,c,new We)),a&&(A.normal=Ai.getInterpolatedAttribute(a,o,h,l,c,new V),A.normal.dot(i.direction)>0&&A.normal.multiplyScalar(-1));const u={a:o,b:h,c:l,normal:new V,materialIndex:0};Ai.getNormal(Er,Sr,yr,u.normal),A.face=u,A.barycoord=c}return A}class bu extends Ii{constructor(t=null,e=1,i=1,n,r,a,o,h,l=1003,A=1003,c,u){super(null,a,o,h,l,A,n,r,c,u),this.isDataTexture=!0,this.image={data:t,width:e,height:i},this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}}class En extends ns{constructor(t=1,e=1,i=1,n=32,r=1,a=!1,o=0,h=Math.PI*2){super(),this.type="CylinderGeometry",this.parameters={radiusTop:t,radiusBottom:e,height:i,radialSegments:n,heightSegments:r,openEnded:a,thetaStart:o,thetaLength:h};const l=this;n=Math.floor(n),r=Math.floor(r);const A=[],c=[],u=[],d=[];let p=0;const m=[],g=i/2;let f=0;M(),a===!1&&(t>0&&S(!0),e>0&&S(!1)),this.setIndex(A),this.setAttribute("position",new vn(c,3)),this.setAttribute("normal",new vn(u,3)),this.setAttribute("uv",new vn(d,2));function M(){const v=new V,T=new V;let _=0;const w=(e-t)/i;for(let P=0;P<=r;P++){const E=[],x=P/r,b=x*(e-t)+t;for(let z=0;z<=n;z++){const F=z/n,U=F*h+o,W=Math.sin(U),Y=Math.cos(U);T.x=b*W,T.y=-x*i+g,T.z=b*Y,c.push(T.x,T.y,T.z),v.set(W,w,Y).normalize(),u.push(v.x,v.y,v.z),d.push(F,1-x),E.push(p++)}m.push(E)}for(let P=0;P<n;P++)for(let E=0;E<r;E++){const x=m[E][P],b=m[E+1][P],z=m[E+1][P+1],F=m[E][P+1];(t>0||E!==0)&&(A.push(x,b,F),_+=3),(e>0||E!==r-1)&&(A.push(b,z,F),_+=3)}l.addGroup(f,_,0),f+=_}function S(v){const T=p,_=new We,w=new V;let P=0;const E=v===!0?t:e,x=v===!0?1:-1;for(let z=1;z<=n;z++)c.push(0,g*x,0),u.push(0,x,0),d.push(.5,.5),p++;const b=p;for(let z=0;z<=n;z++){const F=z/n*h+o,U=Math.cos(F),W=Math.sin(F);w.x=E*W,w.y=g*x,w.z=E*U,c.push(w.x,w.y,w.z),u.push(0,x,0),_.x=U*.5+.5,_.y=W*.5*x+.5,d.push(_.x,_.y),p++}for(let z=0;z<n;z++){const F=T+z,U=b+z;v===!0?A.push(U,U+1,F):A.push(U+1,U,F),P+=3}l.addGroup(f,P,v===!0?1:2),f+=P}}copy(t){return super.copy(t),this.parameters=Object.assign({},t.parameters),this}static fromJSON(t){return new En(t.radiusTop,t.radiusBottom,t.height,t.radialSegments,t.heightSegments,t.openEnded,t.thetaStart,t.thetaLength)}}function _u(s){const t={};for(const e in s){t[e]={};for(const i in s[e]){const n=s[e][i];n&&(n.isColor||n.isMatrix3||n.isMatrix4||n.isVector2||n.isVector3||n.isVector4||n.isTexture||n.isQuaternion)?n.isRenderTargetTexture?(Me("UniformsUtils: Textures of render targets cannot be cloned via cloneUniforms() or mergeUniforms()."),t[e][i]=null):t[e][i]=n.clone():Array.isArray(n)?t[e][i]=n.slice():t[e][i]=n}}return t}function Tu(s){const t=[];for(let e=0;e<s.length;e++)t.push(s[e].clone());return t}var wu=`void main() {
|
|
55
|
+
`,Hc=":host{display:block;width:100%}.bar-menu-container{display:flex;align-items:center;justify-content:space-between;height:100%;gap:var(--gap-sm);padding:var(--spacing-1);background:var(--color-bg-primary);border-radius:var(--border-radius-full);border:var(--border-width-2) solid var(--color-border-secondary);box-shadow:var(--shadow-sm);margin:0 auto}.bar-menu-container .nav-prev,.bar-menu-container .nav-next{flex-shrink:0;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .2s ease-in-out,visibility .2s ease-in-out}.bar-menu-container .nav-prev.visible,.bar-menu-container .nav-next.visible{opacity:1;visibility:visible;pointer-events:auto}.bar-menu-container .nav-prev::part(button),.bar-menu-container .nav-next::part(button){background-color:transparent;box-shadow:none}.bar-menu-container .buttons-wrapper{display:grid;grid-template-columns:repeat(var(--bar-menu-visible-count, 3),1fr);grid-auto-rows:max-content;align-items:center;justify-items:center;gap:var(--gap-sm);overflow:hidden;position:relative;width:auto}::slotted(*){display:none;flex-shrink:0;will-change:opacity,transform;contain:layout style paint;opacity:0;transform:scale(.8)}::slotted(.animating){transition:opacity .4s cubic-bezier(.34,1.56,.64,1),transform .4s cubic-bezier(.34,1.56,.64,1)}::slotted(.visible-button){display:inline-flex!important;pointer-events:auto;opacity:1;transform:scale(1)}",UA=new CSSStyleSheet;UA.replaceSync(Hc);class ei extends HTMLElement{static _visibleCountAttribute="visible-count";static _cyclicalNavigationAttribute="cyclical-navigation";_currentIndex=0;_visibleCount=3;_cyclicalNavigation=!1;_MIN_VISIBLE=1;_MAX_VISIBLE=5;_slotElement=null;_navPrevButton=null;_navNextButton=null;_buttonsWrapper=null;_slotChangeListener=null;_keyDownListener=null;constructor(){super(),this.attachShadow({mode:"open"}),this.shadowRoot?.adoptedStyleSheets.push(UA)}static get observedAttributes(){return[ei._visibleCountAttribute,ei._cyclicalNavigationAttribute]}get visibleButtons(){const t=this.getAttribute(ei._visibleCountAttribute);if(t!==null&&t!==Ae){const e=parseInt(t,10);return Math.max(this._MIN_VISIBLE,Math.min(this._MAX_VISIBLE,e))}return this._visibleCount}set visibleButtons(t){const e=Math.max(this._MIN_VISIBLE,Math.min(this._MAX_VISIBLE,t));this.setAttribute(ei._visibleCountAttribute,String(e))}get cyclicalNavigation(){return this.hasAttribute(ei._cyclicalNavigationAttribute)}set cyclicalNavigation(t){t?this.setAttribute(ei._cyclicalNavigationAttribute,Ae):this.removeAttribute(ei._cyclicalNavigationAttribute)}connectedCallback(){this._render(),this._cacheElements(),this._setupSlotListener(),this._setupKeyboardListener(),this._updateButtonVisibility()}disconnectedCallback(){this._removeSlotListener(),this._removeKeyboardListener()}attributeChangedCallback(t,e,i){t===ei._visibleCountAttribute?(this._visibleCount=this.visibleButtons,this._buttonsWrapper!==null&&this._buttonsWrapper.style.setProperty("--bar-menu-visible-count",String(this.visibleButtons)),this._updateButtonVisibility()):t===ei._cyclicalNavigationAttribute&&(this._cyclicalNavigation=this.cyclicalNavigation,this._updateButtonVisibility())}_render(){this.shadowRoot!==null&&(this.shadowRoot.innerHTML=kc)}_cacheElements(){this._slotElement=this.shadowRoot?.querySelector("slot")??null,this._navPrevButton=this.shadowRoot?.querySelector(".nav-prev")??null,this._navNextButton=this.shadowRoot?.querySelector(".nav-next")??null,this._buttonsWrapper=this.shadowRoot?.querySelector(".buttons-wrapper")??null,this._buttonsWrapper!==null&&this._buttonsWrapper.style.setProperty("--bar-menu-visible-count",String(this.visibleButtons)),this._navPrevButton!==null&&(this._navPrevButton.setAttribute("aria-label","Previous"),this._navPrevButton.addEventListener(Vi.CLICK,()=>{this._scrollPrevious()})),this._navNextButton!==null&&(this._navNextButton.setAttribute("aria-label","Next"),this._navNextButton.addEventListener(Vi.CLICK,()=>{this._scrollNext()}))}_setupSlotListener(){this._slotElement!==null&&(this._slotChangeListener=()=>{this._currentIndex=0,this._updateButtonVisibility()},this._slotElement.addEventListener("slotchange",this._slotChangeListener))}_removeSlotListener(){this._slotElement!==null&&this._slotChangeListener!==null&&this._slotElement.removeEventListener("slotchange",this._slotChangeListener)}_setupKeyboardListener(){this._keyDownListener=t=>{t.key==="ArrowLeft"?(t.preventDefault(),this._scrollPrevious()):t.key==="ArrowRight"&&(t.preventDefault(),this._scrollNext())},this.addEventListener(wA.KEY_DOWN,this._keyDownListener)}_removeKeyboardListener(){this._keyDownListener!==null&&this.removeEventListener(wA.KEY_DOWN,this._keyDownListener)}_getSlottedButtons(){return this._slotElement===null?[]:this._slotElement.assignedElements()}_updateButtonVisibility(t){const e=this._getSlottedButtons(),i=e.length,n=this.visibleButtons,s=this._currentIndex,a=Math.min(s+n,i);e.forEach((o,l)=>{const A=l>=s&&l<a,h=o;A||(o.classList.remove("visible-button"),o.classList.remove("animating"),h.style.display="none")}),t!==void 0?(e[0]?.offsetHeight,e.forEach((o,l)=>{if(l>=s&&l<a){const A=o;A.style.display="inline-flex",o.classList.add("animating");const h=l%this.visibleButtons*50;A.style.transitionDelay=`${h}ms`}}),e[0]?.offsetHeight,e.forEach((o,l)=>{l>=s&&l<a&&o.classList.add("visible-button")}),setTimeout(()=>{e.forEach(o=>{o.classList.remove("animating"),o.style.transitionDelay=Ae})},400)):e.forEach((o,l)=>{const A=l>=s&&l<a,h=o;A&&(h.style.display="inline-flex",o.classList.add("visible-button"))}),this._updateNavigationButtons(i,n)}_updateNavigationButtons(t,e){const i=t>e,n=this._currentIndex+e<t,s=this._currentIndex===0,a=!n;this._navPrevButton!==null&&(i?(this._navPrevButton.classList.add("visible"),this._navPrevButton.disabled=!this._cyclicalNavigation&&s):this._navPrevButton.classList.remove("visible")),this._navNextButton!==null&&(i?(this._navNextButton.classList.add("visible"),this._navNextButton.disabled=!this._cyclicalNavigation&&a):this._navNextButton.classList.remove("visible"))}_scrollPrevious(){const t=this._getSlottedButtons().length,e=this.visibleButtons;this._currentIndex>0?(this._currentIndex=Math.max(0,this._currentIndex-e),this._updateButtonVisibility("previous")):this._cyclicalNavigation&&t>e&&(this._currentIndex=Math.max(0,t-e),this._updateButtonVisibility("previous"))}_scrollNext(){const t=this._getSlottedButtons().length,e=this.visibleButtons,i=this._currentIndex+e;i<t?(this._currentIndex=i,this._updateButtonVisibility("next")):this._cyclicalNavigation&&t>e&&(this._currentIndex=0,this._updateButtonVisibility("next"))}scrollToButton(t){const e=this._getSlottedButtons().length,i=this.visibleButtons;t>=0&&t<e&&(this._currentIndex=Math.max(0,Math.min(t,e-i)),this._updateButtonVisibility())}getVisibleButtons(){return this._getSlottedButtons().filter(t=>t.classList.contains("visible-button"))}getAllButtons(){return this._getSlottedButtons()}getCurrentIndex(){return this._currentIndex}}const Vc="bar-menu",Wc=Object.freeze(Object.defineProperty({__proto__:null,BarMenuComponent:ei,selector:Vc},Symbol.toStringTag,{value:"Module"})),Ge="srgb",zA="srgb-linear",GA="linear",da="srgb";function Yc(r){for(let t=r.length-1;t>=0;--t)if(r[t]>=65535)return!0;return!1}function kA(r){return document.createElementNS("http://www.w3.org/1999/xhtml",r)}const HA={};function VA(r){const t=r[0];if(typeof t=="string"&&t.startsWith("TSL:")){const e=r[1];e&&e.isStackTrace?r[0]+=" "+e.getLocation():r[1]='Stack trace not available. Enable "THREE.Node.captureStackTrace" to capture stack traces.'}return r}function Se(...r){r=VA(r);const t="THREE."+r.shift();{const e=r[0];e&&e.isStackTrace?console.warn(e.getError(t)):console.warn(t,...r)}}function cn(...r){r=VA(r);const t="THREE."+r.shift();{const e=r[0];e&&e.isStackTrace?console.error(e.getError(t)):console.error(t,...r)}}function WA(...r){const t=r.join(" ");t in HA||(HA[t]=!0,Se(...r))}class or{addEventListener(t,e){this._listeners===void 0&&(this._listeners={});const i=this._listeners;i[t]===void 0&&(i[t]=[]),i[t].indexOf(e)===-1&&i[t].push(e)}hasEventListener(t,e){const i=this._listeners;return i===void 0?!1:i[t]!==void 0&&i[t].indexOf(e)!==-1}removeEventListener(t,e){const i=this._listeners;if(i===void 0)return;const n=i[t];if(n!==void 0){const s=n.indexOf(e);s!==-1&&n.splice(s,1)}}dispatchEvent(t){const e=this._listeners;if(e===void 0)return;const i=e[t.type];if(i!==void 0){t.target=this;const n=i.slice(0);for(let s=0,a=n.length;s<a;s++)n[s].call(this,t);t.target=null}}}const Me=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"];function Rs(){const r=Math.random()*4294967295|0,t=Math.random()*4294967295|0,e=Math.random()*4294967295|0,i=Math.random()*4294967295|0;return(Me[r&255]+Me[r>>8&255]+Me[r>>16&255]+Me[r>>24&255]+"-"+Me[t&255]+Me[t>>8&255]+"-"+Me[t>>16&15|64]+Me[t>>24&255]+"-"+Me[e&63|128]+Me[e>>8&255]+"-"+Me[e>>16&255]+Me[e>>24&255]+Me[i&255]+Me[i>>8&255]+Me[i>>16&255]+Me[i>>24&255]).toLowerCase()}function Gt(r,t,e){return Math.max(t,Math.min(e,r))}function Xc(r,t){return(r%t+t)%t}function fa(r,t,e){return(1-e)*r+e*t}function _s(r,t){switch(t.constructor){case Float32Array:return r;case Uint32Array:return r/4294967295;case Uint16Array:return r/65535;case Uint8Array:return r/255;case Int32Array:return Math.max(r/2147483647,-1);case Int16Array:return Math.max(r/32767,-1);case Int8Array:return Math.max(r/127,-1);default:throw new Error("Invalid component type.")}}function Be(r,t){switch(t.constructor){case Float32Array:return r;case Uint32Array:return Math.round(r*4294967295);case Uint16Array:return Math.round(r*65535);case Uint8Array:return Math.round(r*255);case Int32Array:return Math.round(r*2147483647);case Int16Array:return Math.round(r*32767);case Int8Array:return Math.round(r*127);default:throw new Error("Invalid component type.")}}class ke{constructor(t=0,e=0){ke.prototype.isVector2=!0,this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(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)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t){return this.x+=t.x,this.y+=t.y,this}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const e=this.x,i=this.y,n=t.elements;return this.x=n[0]*e+n[3]*i+n[6],this.y=n[1]*e+n[4]*i+n[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=Gt(this.x,t.x,e.x),this.y=Gt(this.y,t.y,e.y),this}clampScalar(t,e){return this.x=Gt(this.x,t,e),this.y=Gt(this.y,t,e),this}clampLength(t,e){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Gt(i,t,e))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(e===0)return Math.PI/2;const i=this.dot(t)/e;return Math.acos(Gt(i,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,i=this.y-t.y;return e*e+i*i}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,i){return this.x=t.x+(e.x-t.x)*i,this.y=t.y+(e.y-t.y)*i,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){const i=Math.cos(e),n=Math.sin(e),s=this.x-t.x,a=this.y-t.y;return this.x=s*i-a*n+t.x,this.y=s*n+a*i+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}class Ps{constructor(t=0,e=0,i=0,n=1){this.isQuaternion=!0,this._x=t,this._y=e,this._z=i,this._w=n}static slerpFlat(t,e,i,n,s,a,o){let l=i[n+0],A=i[n+1],h=i[n+2],c=i[n+3],u=s[a+0],d=s[a+1],p=s[a+2],m=s[a+3];if(c!==m||l!==u||A!==d||h!==p){let g=l*u+A*d+h*p+c*m;g<0&&(u=-u,d=-d,p=-p,m=-m,g=-g);let f=1-o;if(g<.9995){const y=Math.acos(g),S=Math.sin(y);f=Math.sin(f*y)/S,o=Math.sin(o*y)/S,l=l*f+u*o,A=A*f+d*o,h=h*f+p*o,c=c*f+m*o}else{l=l*f+u*o,A=A*f+d*o,h=h*f+p*o,c=c*f+m*o;const y=1/Math.sqrt(l*l+A*A+h*h+c*c);l*=y,A*=y,h*=y,c*=y}}t[e]=l,t[e+1]=A,t[e+2]=h,t[e+3]=c}static multiplyQuaternionsFlat(t,e,i,n,s,a){const o=i[n],l=i[n+1],A=i[n+2],h=i[n+3],c=s[a],u=s[a+1],d=s[a+2],p=s[a+3];return t[e]=o*p+h*c+l*d-A*u,t[e+1]=l*p+h*u+A*c-o*d,t[e+2]=A*p+h*d+o*u-l*c,t[e+3]=h*p-o*c-l*u-A*d,t}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 w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,i,n){return this._x=t,this._y=e,this._z=i,this._w=n,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e=!0){const i=t._x,n=t._y,s=t._z,a=t._order,o=Math.cos,l=Math.sin,A=o(i/2),h=o(n/2),c=o(s/2),u=l(i/2),d=l(n/2),p=l(s/2);switch(a){case"XYZ":this._x=u*h*c+A*d*p,this._y=A*d*c-u*h*p,this._z=A*h*p+u*d*c,this._w=A*h*c-u*d*p;break;case"YXZ":this._x=u*h*c+A*d*p,this._y=A*d*c-u*h*p,this._z=A*h*p-u*d*c,this._w=A*h*c+u*d*p;break;case"ZXY":this._x=u*h*c-A*d*p,this._y=A*d*c+u*h*p,this._z=A*h*p+u*d*c,this._w=A*h*c-u*d*p;break;case"ZYX":this._x=u*h*c-A*d*p,this._y=A*d*c+u*h*p,this._z=A*h*p-u*d*c,this._w=A*h*c+u*d*p;break;case"YZX":this._x=u*h*c+A*d*p,this._y=A*d*c+u*h*p,this._z=A*h*p-u*d*c,this._w=A*h*c-u*d*p;break;case"XZY":this._x=u*h*c-A*d*p,this._y=A*d*c-u*h*p,this._z=A*h*p+u*d*c,this._w=A*h*c+u*d*p;break;default:Se("Quaternion: .setFromEuler() encountered an unknown order: "+a)}return e===!0&&this._onChangeCallback(),this}setFromAxisAngle(t,e){const i=e/2,n=Math.sin(i);return this._x=t.x*n,this._y=t.y*n,this._z=t.z*n,this._w=Math.cos(i),this._onChangeCallback(),this}setFromRotationMatrix(t){const e=t.elements,i=e[0],n=e[4],s=e[8],a=e[1],o=e[5],l=e[9],A=e[2],h=e[6],c=e[10],u=i+o+c;if(u>0){const d=.5/Math.sqrt(u+1);this._w=.25/d,this._x=(h-l)*d,this._y=(s-A)*d,this._z=(a-n)*d}else if(i>o&&i>c){const d=2*Math.sqrt(1+i-o-c);this._w=(h-l)/d,this._x=.25*d,this._y=(n+a)/d,this._z=(s+A)/d}else if(o>c){const d=2*Math.sqrt(1+o-i-c);this._w=(s-A)/d,this._x=(n+a)/d,this._y=.25*d,this._z=(l+h)/d}else{const d=2*Math.sqrt(1+c-i-o);this._w=(a-n)/d,this._x=(s+A)/d,this._y=(l+h)/d,this._z=.25*d}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let i=t.dot(e)+1;return i<1e-8?(i=0,Math.abs(t.x)>Math.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=i):(this._x=0,this._y=-t.z,this._z=t.y,this._w=i)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=i),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(Gt(this.dot(t),-1,1)))}rotateTowards(t,e){const i=this.angleTo(t);if(i===0)return this;const n=Math.min(1,e/i);return this.slerp(t,n),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let t=this.length();return t===0?(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(t){return this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){const i=t._x,n=t._y,s=t._z,a=t._w,o=e._x,l=e._y,A=e._z,h=e._w;return this._x=i*h+a*o+n*A-s*l,this._y=n*h+a*l+s*o-i*A,this._z=s*h+a*A+i*l-n*o,this._w=a*h-i*o-n*l-s*A,this._onChangeCallback(),this}slerp(t,e){let i=t._x,n=t._y,s=t._z,a=t._w,o=this.dot(t);o<0&&(i=-i,n=-n,s=-s,a=-a,o=-o);let l=1-e;if(o<.9995){const A=Math.acos(o),h=Math.sin(A);l=Math.sin(l*A)/h,e=Math.sin(e*A)/h,this._x=this._x*l+i*e,this._y=this._y*l+n*e,this._z=this._z*l+s*e,this._w=this._w*l+a*e,this._onChangeCallback()}else this._x=this._x*l+i*e,this._y=this._y*l+n*e,this._z=this._z*l+s*e,this._w=this._w*l+a*e,this.normalize();return this}slerpQuaternions(t,e,i){return this.copy(t).slerp(e,i)}random(){const t=2*Math.PI*Math.random(),e=2*Math.PI*Math.random(),i=Math.random(),n=Math.sqrt(1-i),s=Math.sqrt(i);return this.set(n*Math.sin(t),n*Math.cos(t),s*Math.sin(e),s*Math.cos(e))}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}class V{constructor(t=0,e=0,i=0){V.prototype.isVector3=!0,this.x=t,this.y=e,this.z=i}set(t,e,i){return i===void 0&&(i=this.z),this.x=t,this.y=e,this.z=i,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(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)}return this}getComponent(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)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return this.applyQuaternion(YA.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(YA.setFromAxisAngle(t,e))}applyMatrix3(t){const e=this.x,i=this.y,n=this.z,s=t.elements;return this.x=s[0]*e+s[3]*i+s[6]*n,this.y=s[1]*e+s[4]*i+s[7]*n,this.z=s[2]*e+s[5]*i+s[8]*n,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const e=this.x,i=this.y,n=this.z,s=t.elements,a=1/(s[3]*e+s[7]*i+s[11]*n+s[15]);return this.x=(s[0]*e+s[4]*i+s[8]*n+s[12])*a,this.y=(s[1]*e+s[5]*i+s[9]*n+s[13])*a,this.z=(s[2]*e+s[6]*i+s[10]*n+s[14])*a,this}applyQuaternion(t){const e=this.x,i=this.y,n=this.z,s=t.x,a=t.y,o=t.z,l=t.w,A=2*(a*n-o*i),h=2*(o*e-s*n),c=2*(s*i-a*e);return this.x=e+l*A+a*c-o*h,this.y=i+l*h+o*A-s*c,this.z=n+l*c+s*h-a*A,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const e=this.x,i=this.y,n=this.z,s=t.elements;return this.x=s[0]*e+s[4]*i+s[8]*n,this.y=s[1]*e+s[5]*i+s[9]*n,this.z=s[2]*e+s[6]*i+s[10]*n,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=Gt(this.x,t.x,e.x),this.y=Gt(this.y,t.y,e.y),this.z=Gt(this.z,t.z,e.z),this}clampScalar(t,e){return this.x=Gt(this.x,t,e),this.y=Gt(this.y,t,e),this.z=Gt(this.z,t,e),this}clampLength(t,e){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Gt(i,t,e))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(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}lerpVectors(t,e,i){return this.x=t.x+(e.x-t.x)*i,this.y=t.y+(e.y-t.y)*i,this.z=t.z+(e.z-t.z)*i,this}cross(t){return this.crossVectors(this,t)}crossVectors(t,e){const i=t.x,n=t.y,s=t.z,a=e.x,o=e.y,l=e.z;return this.x=n*l-s*o,this.y=s*a-i*l,this.z=i*o-n*a,this}projectOnVector(t){const e=t.lengthSq();if(e===0)return this.set(0,0,0);const i=t.dot(this)/e;return this.copy(t).multiplyScalar(i)}projectOnPlane(t){return ga.copy(this).projectOnVector(t),this.sub(ga)}reflect(t){return this.sub(ga.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(e===0)return Math.PI/2;const i=this.dot(t)/e;return Math.acos(Gt(i,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,i=this.y-t.y,n=this.z-t.z;return e*e+i*i+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,i){const n=Math.sin(e)*t;return this.x=n*Math.sin(i),this.y=Math.cos(e)*t,this.z=n*Math.cos(i),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,i){return this.x=t*Math.sin(e),this.y=i,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){const e=this.setFromMatrixColumn(t,0).length(),i=this.setFromMatrixColumn(t,1).length(),n=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=i,this.z=n,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,e*4)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,e*3)}setFromEuler(t){return this.x=t._x,this.y=t._y,this.z=t._z,this}setFromColor(t){return this.x=t.r,this.y=t.g,this.z=t.b,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const t=Math.random()*Math.PI*2,e=Math.random()*2-1,i=Math.sqrt(1-e*e);return this.x=i*Math.cos(t),this.y=e,this.z=i*Math.sin(t),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}const ga=new V,YA=new Ps;class Yi{constructor(t,e,i,n,s,a,o,l,A){Yi.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],t!==void 0&&this.set(t,e,i,n,s,a,o,l,A)}set(t,e,i,n,s,a,o,l,A){const h=this.elements;return h[0]=t,h[1]=n,h[2]=o,h[3]=e,h[4]=s,h[5]=l,h[6]=i,h[7]=a,h[8]=A,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){const e=this.elements,i=t.elements;return e[0]=i[0],e[1]=i[1],e[2]=i[2],e[3]=i[3],e[4]=i[4],e[5]=i[5],e[6]=i[6],e[7]=i[7],e[8]=i[8],this}extractBasis(t,e,i){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),i.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const i=t.elements,n=e.elements,s=this.elements,a=i[0],o=i[3],l=i[6],A=i[1],h=i[4],c=i[7],u=i[2],d=i[5],p=i[8],m=n[0],g=n[3],f=n[6],y=n[1],S=n[4],v=n[7],w=n[2],T=n[5],R=n[8];return s[0]=a*m+o*y+l*w,s[3]=a*g+o*S+l*T,s[6]=a*f+o*v+l*R,s[1]=A*m+h*y+c*w,s[4]=A*g+h*S+c*T,s[7]=A*f+h*v+c*R,s[2]=u*m+d*y+p*w,s[5]=u*g+d*S+p*T,s[8]=u*f+d*v+p*R,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){const t=this.elements,e=t[0],i=t[1],n=t[2],s=t[3],a=t[4],o=t[5],l=t[6],A=t[7],h=t[8];return e*a*h-e*o*A-i*s*h+i*o*l+n*s*A-n*a*l}invert(){const t=this.elements,e=t[0],i=t[1],n=t[2],s=t[3],a=t[4],o=t[5],l=t[6],A=t[7],h=t[8],c=h*a-o*A,u=o*l-h*s,d=A*s-a*l,p=e*c+i*u+n*d;if(p===0)return this.set(0,0,0,0,0,0,0,0,0);const m=1/p;return t[0]=c*m,t[1]=(n*A-h*i)*m,t[2]=(o*i-n*a)*m,t[3]=u*m,t[4]=(h*e-n*l)*m,t[5]=(n*s-o*e)*m,t[6]=d*m,t[7]=(i*l-A*e)*m,t[8]=(a*e-i*s)*m,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){const e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,i,n,s,a,o){const l=Math.cos(s),A=Math.sin(s);return this.set(i*l,i*A,-i*(l*a+A*o)+a+t,-n*A,n*l,-n*(-A*a+l*o)+o+e,0,0,1),this}scale(t,e){return this.premultiply(pa.makeScale(t,e)),this}rotate(t){return this.premultiply(pa.makeRotation(-t)),this}translate(t,e){return this.premultiply(pa.makeTranslation(t,e)),this}makeTranslation(t,e){return t.isVector2?this.set(1,0,t.x,0,1,t.y,0,0,1):this.set(1,0,t,0,1,e,0,0,1),this}makeRotation(t){const e=Math.cos(t),i=Math.sin(t);return this.set(e,-i,0,i,e,0,0,0,1),this}makeScale(t,e){return this.set(t,0,0,0,e,0,0,0,1),this}equals(t){const e=this.elements,i=t.elements;for(let n=0;n<9;n++)if(e[n]!==i[n])return!1;return!0}fromArray(t,e=0){for(let i=0;i<9;i++)this.elements[i]=t[i+e];return this}toArray(t=[],e=0){const i=this.elements;return t[e]=i[0],t[e+1]=i[1],t[e+2]=i[2],t[e+3]=i[3],t[e+4]=i[4],t[e+5]=i[5],t[e+6]=i[6],t[e+7]=i[7],t[e+8]=i[8],t}clone(){return new this.constructor().fromArray(this.elements)}}const pa=new Yi,XA=new Yi().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),ZA=new Yi().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function Zc(){const r={enabled:!0,workingColorSpace:zA,spaces:{},convert:function(n,s,a){return this.enabled===!1||s===a||!s||!a||(this.spaces[s].transfer===da&&(n.r=Mi(n.r),n.g=Mi(n.g),n.b=Mi(n.b)),this.spaces[s].primaries!==this.spaces[a].primaries&&(n.applyMatrix3(this.spaces[s].toXYZ),n.applyMatrix3(this.spaces[a].fromXYZ)),this.spaces[a].transfer===da&&(n.r=Gn(n.r),n.g=Gn(n.g),n.b=Gn(n.b))),n},workingToColorSpace:function(n,s){return this.convert(n,this.workingColorSpace,s)},colorSpaceToWorking:function(n,s){return this.convert(n,s,this.workingColorSpace)},getPrimaries:function(n){return this.spaces[n].primaries},getTransfer:function(n){return n===""?GA:this.spaces[n].transfer},getToneMappingMode:function(n){return this.spaces[n].outputColorSpaceConfig.toneMappingMode||"standard"},getLuminanceCoefficients:function(n,s=this.workingColorSpace){return n.fromArray(this.spaces[s].luminanceCoefficients)},define:function(n){Object.assign(this.spaces,n)},_getMatrix:function(n,s,a){return n.copy(this.spaces[s].toXYZ).multiply(this.spaces[a].fromXYZ)},_getDrawingBufferColorSpace:function(n){return this.spaces[n].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(n=this.workingColorSpace){return this.spaces[n].workingColorSpaceConfig.unpackColorSpace},fromWorkingColorSpace:function(n,s){return WA("ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace()."),r.workingToColorSpace(n,s)},toWorkingColorSpace:function(n,s){return WA("ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking()."),r.colorSpaceToWorking(n,s)}},t=[.64,.33,.3,.6,.15,.06],e=[.2126,.7152,.0722],i=[.3127,.329];return r.define({[zA]:{primaries:t,whitePoint:i,transfer:GA,toXYZ:XA,fromXYZ:ZA,luminanceCoefficients:e,workingColorSpaceConfig:{unpackColorSpace:Ge},outputColorSpaceConfig:{drawingBufferColorSpace:Ge}},[Ge]:{primaries:t,whitePoint:i,transfer:da,toXYZ:XA,fromXYZ:ZA,luminanceCoefficients:e,outputColorSpaceConfig:{drawingBufferColorSpace:Ge}}}),r}const ii=Zc();function Mi(r){return r<.04045?r*.0773993808:Math.pow(r*.9478672986+.0521327014,2.4)}function Gn(r){return r<.0031308?r*12.92:1.055*Math.pow(r,.41666)-.055}let kn;class Jc{static getDataURL(t,e="image/png"){if(/^data:/i.test(t.src)||typeof HTMLCanvasElement>"u")return t.src;let i;if(t instanceof HTMLCanvasElement)i=t;else{kn===void 0&&(kn=kA("canvas")),kn.width=t.width,kn.height=t.height;const n=kn.getContext("2d");t instanceof ImageData?n.putImageData(t,0,0):n.drawImage(t,0,0,t.width,t.height),i=kn}return i.toDataURL(e)}static sRGBToLinear(t){if(typeof HTMLImageElement<"u"&&t instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&t instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&t instanceof ImageBitmap){const e=kA("canvas");e.width=t.width,e.height=t.height;const i=e.getContext("2d");i.drawImage(t,0,0,t.width,t.height);const n=i.getImageData(0,0,t.width,t.height),s=n.data;for(let a=0;a<s.length;a++)s[a]=Mi(s[a]/255)*255;return i.putImageData(n,0,0),e}else if(t.data){const e=t.data.slice(0);for(let i=0;i<e.length;i++)e instanceof Uint8Array||e instanceof Uint8ClampedArray?e[i]=Math.floor(Mi(e[i]/255)*255):e[i]=Mi(e[i]);return{data:e,width:t.width,height:t.height}}else return Se("ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied."),t}}let jc=0;class Qc{constructor(t=null){this.isSource=!0,Object.defineProperty(this,"id",{value:jc++}),this.uuid=Rs(),this.data=t,this.dataReady=!0,this.version=0}getSize(t){const e=this.data;return typeof HTMLVideoElement<"u"&&e instanceof HTMLVideoElement?t.set(e.videoWidth,e.videoHeight,0):typeof VideoFrame<"u"&&e instanceof VideoFrame?t.set(e.displayHeight,e.displayWidth,0):e!==null?t.set(e.width,e.height,e.depth||0):t.set(0,0,0),t}set needsUpdate(t){t===!0&&this.version++}toJSON(t){const e=t===void 0||typeof t=="string";if(!e&&t.images[this.uuid]!==void 0)return t.images[this.uuid];const i={uuid:this.uuid,url:""},n=this.data;if(n!==null){let s;if(Array.isArray(n)){s=[];for(let a=0,o=n.length;a<o;a++)n[a].isDataTexture?s.push(ma(n[a].image)):s.push(ma(n[a]))}else s=ma(n);i.url=s}return e||(t.images[this.uuid]=i),i}}function ma(r){return typeof HTMLImageElement<"u"&&r instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&r instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&r instanceof ImageBitmap?Jc.getDataURL(r):r.data?{data:Array.from(r.data),width:r.width,height:r.height,type:r.data.constructor.name}:(Se("Texture: Unable to serialize Texture."),{})}let qc=0;const Ia=new V;class pi extends or{constructor(t=pi.DEFAULT_IMAGE,e=pi.DEFAULT_MAPPING,i=1001,n=1001,s=1006,a=1008,o=1023,l=1009,A=pi.DEFAULT_ANISOTROPY,h=""){super(),this.isTexture=!0,Object.defineProperty(this,"id",{value:qc++}),this.uuid=Rs(),this.name="",this.source=new Qc(t),this.mipmaps=[],this.mapping=e,this.channel=0,this.wrapS=i,this.wrapT=n,this.magFilter=s,this.minFilter=a,this.anisotropy=A,this.format=o,this.internalFormat=null,this.type=l,this.offset=new ke(0,0),this.repeat=new ke(1,1),this.center=new ke(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new Yi,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.colorSpace=h,this.userData={},this.updateRanges=[],this.version=0,this.onUpdate=null,this.renderTarget=null,this.isRenderTargetTexture=!1,this.isArrayTexture=!!(t&&t.depth&&t.depth>1),this.pmremVersion=0}get width(){return this.source.getSize(Ia).x}get height(){return this.source.getSize(Ia).y}get depth(){return this.source.getSize(Ia).z}get image(){return this.source.data}set image(t=null){this.source.data=t}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}addUpdateRange(t,e){this.updateRanges.push({start:t,count:e})}clearUpdateRanges(){this.updateRanges.length=0}clone(){return new this.constructor().copy(this)}copy(t){return this.name=t.name,this.source=t.source,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.channel=t.channel,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.internalFormat=t.internalFormat,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.colorSpace=t.colorSpace,this.renderTarget=t.renderTarget,this.isRenderTargetTexture=t.isRenderTargetTexture,this.isArrayTexture=t.isArrayTexture,this.userData=JSON.parse(JSON.stringify(t.userData)),this.needsUpdate=!0,this}setValues(t){for(const e in t){const i=t[e];if(i===void 0){Se(`Texture.setValues(): parameter '${e}' has value of undefined.`);continue}const n=this[e];if(n===void 0){Se(`Texture.setValues(): property '${e}' does not exist.`);continue}n&&i&&n.isVector2&&i.isVector2||n&&i&&n.isVector3&&i.isVector3||n&&i&&n.isMatrix3&&i.isMatrix3?n.copy(i):this[e]=i}}toJSON(t){const e=t===void 0||typeof t=="string";if(!e&&t.textures[this.uuid]!==void 0)return t.textures[this.uuid];const i={metadata:{version:4.7,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,image:this.source.toJSON(t).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(i.userData=this.userData),e||(t.textures[this.uuid]=i),i}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(t){if(this.mapping!==300)return t;if(t.applyMatrix3(this.matrix),t.x<0||t.x>1)switch(this.wrapS){case 1e3:t.x=t.x-Math.floor(t.x);break;case 1001:t.x=t.x<0?0:1;break;case 1002:Math.abs(Math.floor(t.x)%2)===1?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x);break}if(t.y<0||t.y>1)switch(this.wrapT){case 1e3:t.y=t.y-Math.floor(t.y);break;case 1001:t.y=t.y<0?0:1;break;case 1002:Math.abs(Math.floor(t.y)%2)===1?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y);break}return this.flipY&&(t.y=1-t.y),t}set needsUpdate(t){t===!0&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(t){t===!0&&this.pmremVersion++}}pi.DEFAULT_IMAGE=null,pi.DEFAULT_MAPPING=300,pi.DEFAULT_ANISOTROPY=1;class Ds{constructor(t=0,e=0,i=0,n=1){Ds.prototype.isVector4=!0,this.x=t,this.y=e,this.z=i,this.w=n}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,i,n){return this.x=t,this.y=e,this.z=i,this.w=n,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(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)}return this}getComponent(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)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=t.w!==void 0?t.w:1,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(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}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(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}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const e=this.x,i=this.y,n=this.z,s=this.w,a=t.elements;return this.x=a[0]*e+a[4]*i+a[8]*n+a[12]*s,this.y=a[1]*e+a[5]*i+a[9]*n+a[13]*s,this.z=a[2]*e+a[6]*i+a[10]*n+a[14]*s,this.w=a[3]*e+a[7]*i+a[11]*n+a[15]*s,this}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this.w/=t.w,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const 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(t){let e,i,n,s;const a=t.elements,o=a[0],l=a[4],A=a[8],h=a[1],c=a[5],u=a[9],d=a[2],p=a[6],m=a[10];if(Math.abs(l-h)<.01&&Math.abs(A-d)<.01&&Math.abs(u-p)<.01){if(Math.abs(l+h)<.1&&Math.abs(A+d)<.1&&Math.abs(u+p)<.1&&Math.abs(o+c+m-3)<.1)return this.set(1,0,0,0),this;e=Math.PI;const f=(o+1)/2,y=(c+1)/2,S=(m+1)/2,v=(l+h)/4,w=(A+d)/4,T=(u+p)/4;return f>y&&f>S?f<.01?(i=0,n=.707106781,s=.707106781):(i=Math.sqrt(f),n=v/i,s=w/i):y>S?y<.01?(i=.707106781,n=0,s=.707106781):(n=Math.sqrt(y),i=v/n,s=T/n):S<.01?(i=.707106781,n=.707106781,s=0):(s=Math.sqrt(S),i=w/s,n=T/s),this.set(i,n,s,e),this}let g=Math.sqrt((p-u)*(p-u)+(A-d)*(A-d)+(h-l)*(h-l));return Math.abs(g)<.001&&(g=1),this.x=(p-u)/g,this.y=(A-d)/g,this.z=(h-l)/g,this.w=Math.acos((o+c+m-1)/2),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this.w=e[15],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this.w=Math.min(this.w,t.w),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this.w=Math.max(this.w,t.w),this}clamp(t,e){return this.x=Gt(this.x,t.x,e.x),this.y=Gt(this.y,t.y,e.y),this.z=Gt(this.z,t.z,e.z),this.w=Gt(this.w,t.w,e.w),this}clampScalar(t,e){return this.x=Gt(this.x,t,e),this.y=Gt(this.y,t,e),this.z=Gt(this.z,t,e),this.w=Gt(this.w,t,e),this}clampLength(t,e){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Gt(i,t,e))}floor(){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(){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(){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(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this.w=Math.trunc(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(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}lerpVectors(t,e,i){return this.x=t.x+(e.x-t.x)*i,this.y=t.y+(e.y-t.y)*i,this.z=t.z+(e.z-t.z)*i,this.w=t.w+(e.w-t.w)*i,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z&&t.w===this.w}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this.w=t[e+3],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t[e+3]=this.w,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this.w=t.getW(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}}class ni{constructor(t,e,i,n,s,a,o,l,A,h,c,u,d,p,m,g){ni.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],t!==void 0&&this.set(t,e,i,n,s,a,o,l,A,h,c,u,d,p,m,g)}set(t,e,i,n,s,a,o,l,A,h,c,u,d,p,m,g){const f=this.elements;return f[0]=t,f[4]=e,f[8]=i,f[12]=n,f[1]=s,f[5]=a,f[9]=o,f[13]=l,f[2]=A,f[6]=h,f[10]=c,f[14]=u,f[3]=d,f[7]=p,f[11]=m,f[15]=g,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new ni().fromArray(this.elements)}copy(t){const e=this.elements,i=t.elements;return e[0]=i[0],e[1]=i[1],e[2]=i[2],e[3]=i[3],e[4]=i[4],e[5]=i[5],e[6]=i[6],e[7]=i[7],e[8]=i[8],e[9]=i[9],e[10]=i[10],e[11]=i[11],e[12]=i[12],e[13]=i[13],e[14]=i[14],e[15]=i[15],this}copyPosition(t){const e=this.elements,i=t.elements;return e[12]=i[12],e[13]=i[13],e[14]=i[14],this}setFromMatrix3(t){const e=t.elements;return this.set(e[0],e[3],e[6],0,e[1],e[4],e[7],0,e[2],e[5],e[8],0,0,0,0,1),this}extractBasis(t,e,i){return this.determinant()===0?(t.set(1,0,0),e.set(0,1,0),i.set(0,0,1),this):(t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),i.setFromMatrixColumn(this,2),this)}makeBasis(t,e,i){return this.set(t.x,e.x,i.x,0,t.y,e.y,i.y,0,t.z,e.z,i.z,0,0,0,0,1),this}extractRotation(t){if(t.determinant()===0)return this.identity();const e=this.elements,i=t.elements,n=1/Hn.setFromMatrixColumn(t,0).length(),s=1/Hn.setFromMatrixColumn(t,1).length(),a=1/Hn.setFromMatrixColumn(t,2).length();return e[0]=i[0]*n,e[1]=i[1]*n,e[2]=i[2]*n,e[3]=0,e[4]=i[4]*s,e[5]=i[5]*s,e[6]=i[6]*s,e[7]=0,e[8]=i[8]*a,e[9]=i[9]*a,e[10]=i[10]*a,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){const e=this.elements,i=t.x,n=t.y,s=t.z,a=Math.cos(i),o=Math.sin(i),l=Math.cos(n),A=Math.sin(n),h=Math.cos(s),c=Math.sin(s);if(t.order==="XYZ"){const u=a*h,d=a*c,p=o*h,m=o*c;e[0]=l*h,e[4]=-l*c,e[8]=A,e[1]=d+p*A,e[5]=u-m*A,e[9]=-o*l,e[2]=m-u*A,e[6]=p+d*A,e[10]=a*l}else if(t.order==="YXZ"){const u=l*h,d=l*c,p=A*h,m=A*c;e[0]=u+m*o,e[4]=p*o-d,e[8]=a*A,e[1]=a*c,e[5]=a*h,e[9]=-o,e[2]=d*o-p,e[6]=m+u*o,e[10]=a*l}else if(t.order==="ZXY"){const u=l*h,d=l*c,p=A*h,m=A*c;e[0]=u-m*o,e[4]=-a*c,e[8]=p+d*o,e[1]=d+p*o,e[5]=a*h,e[9]=m-u*o,e[2]=-a*A,e[6]=o,e[10]=a*l}else if(t.order==="ZYX"){const u=a*h,d=a*c,p=o*h,m=o*c;e[0]=l*h,e[4]=p*A-d,e[8]=u*A+m,e[1]=l*c,e[5]=m*A+u,e[9]=d*A-p,e[2]=-A,e[6]=o*l,e[10]=a*l}else if(t.order==="YZX"){const u=a*l,d=a*A,p=o*l,m=o*A;e[0]=l*h,e[4]=m-u*c,e[8]=p*c+d,e[1]=c,e[5]=a*h,e[9]=-o*h,e[2]=-A*h,e[6]=d*c+p,e[10]=u-m*c}else if(t.order==="XZY"){const u=a*l,d=a*A,p=o*l,m=o*A;e[0]=l*h,e[4]=-c,e[8]=A*h,e[1]=u*c+m,e[5]=a*h,e[9]=d*c-p,e[2]=p*c-d,e[6]=o*h,e[10]=m*c+u}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(Kc,t,$c)}lookAt(t,e,i){const n=this.elements;return He.subVectors(t,e),He.lengthSq()===0&&(He.z=1),He.normalize(),Xi.crossVectors(i,He),Xi.lengthSq()===0&&(Math.abs(i.z)===1?He.x+=1e-4:He.z+=1e-4,He.normalize(),Xi.crossVectors(i,He)),Xi.normalize(),Ar.crossVectors(He,Xi),n[0]=Xi.x,n[4]=Ar.x,n[8]=He.x,n[1]=Xi.y,n[5]=Ar.y,n[9]=He.y,n[2]=Xi.z,n[6]=Ar.z,n[10]=He.z,this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const i=t.elements,n=e.elements,s=this.elements,a=i[0],o=i[4],l=i[8],A=i[12],h=i[1],c=i[5],u=i[9],d=i[13],p=i[2],m=i[6],g=i[10],f=i[14],y=i[3],S=i[7],v=i[11],w=i[15],T=n[0],R=n[4],P=n[8],E=n[12],x=n[1],b=n[5],z=n[9],F=n[13],U=n[2],W=n[6],Y=n[10],$=n[14],H=n[3],rt=n[7],lt=n[11],mt=n[15];return s[0]=a*T+o*x+l*U+A*H,s[4]=a*R+o*b+l*W+A*rt,s[8]=a*P+o*z+l*Y+A*lt,s[12]=a*E+o*F+l*$+A*mt,s[1]=h*T+c*x+u*U+d*H,s[5]=h*R+c*b+u*W+d*rt,s[9]=h*P+c*z+u*Y+d*lt,s[13]=h*E+c*F+u*$+d*mt,s[2]=p*T+m*x+g*U+f*H,s[6]=p*R+m*b+g*W+f*rt,s[10]=p*P+m*z+g*Y+f*lt,s[14]=p*E+m*F+g*$+f*mt,s[3]=y*T+S*x+v*U+w*H,s[7]=y*R+S*b+v*W+w*rt,s[11]=y*P+S*z+v*Y+w*lt,s[15]=y*E+S*F+v*$+w*mt,this}multiplyScalar(t){const 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}determinant(){const t=this.elements,e=t[0],i=t[4],n=t[8],s=t[12],a=t[1],o=t[5],l=t[9],A=t[13],h=t[2],c=t[6],u=t[10],d=t[14],p=t[3],m=t[7],g=t[11],f=t[15],y=l*d-A*u,S=o*d-A*c,v=o*u-l*c,w=a*d-A*h,T=a*u-l*h,R=a*c-o*h;return e*(m*y-g*S+f*v)-i*(p*y-g*w+f*T)+n*(p*S-m*w+f*R)-s*(p*v-m*T+g*R)}transpose(){const t=this.elements;let e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,i){const n=this.elements;return t.isVector3?(n[12]=t.x,n[13]=t.y,n[14]=t.z):(n[12]=t,n[13]=e,n[14]=i),this}invert(){const t=this.elements,e=t[0],i=t[1],n=t[2],s=t[3],a=t[4],o=t[5],l=t[6],A=t[7],h=t[8],c=t[9],u=t[10],d=t[11],p=t[12],m=t[13],g=t[14],f=t[15],y=e*o-i*a,S=e*l-n*a,v=e*A-s*a,w=i*l-n*o,T=i*A-s*o,R=n*A-s*l,P=h*m-c*p,E=h*g-u*p,x=h*f-d*p,b=c*g-u*m,z=c*f-d*m,F=u*f-d*g,U=y*F-S*z+v*b+w*x-T*E+R*P;if(U===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const W=1/U;return t[0]=(o*F-l*z+A*b)*W,t[1]=(n*z-i*F-s*b)*W,t[2]=(m*R-g*T+f*w)*W,t[3]=(u*T-c*R-d*w)*W,t[4]=(l*x-a*F-A*E)*W,t[5]=(e*F-n*x+s*E)*W,t[6]=(g*v-p*R-f*S)*W,t[7]=(h*R-u*v+d*S)*W,t[8]=(a*z-o*x+A*P)*W,t[9]=(i*x-e*z-s*P)*W,t[10]=(p*T-m*v+f*y)*W,t[11]=(c*v-h*T-d*y)*W,t[12]=(o*E-a*b-l*P)*W,t[13]=(e*b-i*E+n*P)*W,t[14]=(m*S-p*w-g*y)*W,t[15]=(h*w-c*S+u*y)*W,this}scale(t){const e=this.elements,i=t.x,n=t.y,s=t.z;return e[0]*=i,e[4]*=n,e[8]*=s,e[1]*=i,e[5]*=n,e[9]*=s,e[2]*=i,e[6]*=n,e[10]*=s,e[3]*=i,e[7]*=n,e[11]*=s,this}getMaxScaleOnAxis(){const t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],i=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],n=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,i,n))}makeTranslation(t,e,i){return t.isVector3?this.set(1,0,0,t.x,0,1,0,t.y,0,0,1,t.z,0,0,0,1):this.set(1,0,0,t,0,1,0,e,0,0,1,i,0,0,0,1),this}makeRotationX(t){const e=Math.cos(t),i=Math.sin(t);return this.set(1,0,0,0,0,e,-i,0,0,i,e,0,0,0,0,1),this}makeRotationY(t){const e=Math.cos(t),i=Math.sin(t);return this.set(e,0,i,0,0,1,0,0,-i,0,e,0,0,0,0,1),this}makeRotationZ(t){const e=Math.cos(t),i=Math.sin(t);return this.set(e,-i,0,0,i,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){const i=Math.cos(e),n=Math.sin(e),s=1-i,a=t.x,o=t.y,l=t.z,A=s*a,h=s*o;return this.set(A*a+i,A*o-n*l,A*l+n*o,0,A*o+n*l,h*o+i,h*l-n*a,0,A*l-n*o,h*l+n*a,s*l*l+i,0,0,0,0,1),this}makeScale(t,e,i){return this.set(t,0,0,0,0,e,0,0,0,0,i,0,0,0,0,1),this}makeShear(t,e,i,n,s,a){return this.set(1,i,s,0,t,1,a,0,e,n,1,0,0,0,0,1),this}compose(t,e,i){const n=this.elements,s=e._x,a=e._y,o=e._z,l=e._w,A=s+s,h=a+a,c=o+o,u=s*A,d=s*h,p=s*c,m=a*h,g=a*c,f=o*c,y=l*A,S=l*h,v=l*c,w=i.x,T=i.y,R=i.z;return n[0]=(1-(m+f))*w,n[1]=(d+v)*w,n[2]=(p-S)*w,n[3]=0,n[4]=(d-v)*T,n[5]=(1-(u+f))*T,n[6]=(g+y)*T,n[7]=0,n[8]=(p+S)*R,n[9]=(g-y)*R,n[10]=(1-(u+m))*R,n[11]=0,n[12]=t.x,n[13]=t.y,n[14]=t.z,n[15]=1,this}decompose(t,e,i){const n=this.elements;t.x=n[12],t.y=n[13],t.z=n[14];const s=this.determinant();if(s===0)return i.set(1,1,1),e.identity(),this;let a=Hn.set(n[0],n[1],n[2]).length();const o=Hn.set(n[4],n[5],n[6]).length(),l=Hn.set(n[8],n[9],n[10]).length();s<0&&(a=-a),si.copy(this);const A=1/a,h=1/o,c=1/l;return si.elements[0]*=A,si.elements[1]*=A,si.elements[2]*=A,si.elements[4]*=h,si.elements[5]*=h,si.elements[6]*=h,si.elements[8]*=c,si.elements[9]*=c,si.elements[10]*=c,e.setFromRotationMatrix(si),i.x=a,i.y=o,i.z=l,this}makePerspective(t,e,i,n,s,a,o=2e3,l=!1){const A=this.elements,h=2*s/(e-t),c=2*s/(i-n),u=(e+t)/(e-t),d=(i+n)/(i-n);let p,m;if(l)p=s/(a-s),m=a*s/(a-s);else if(o===2e3)p=-(a+s)/(a-s),m=-2*a*s/(a-s);else if(o===2001)p=-a/(a-s),m=-a*s/(a-s);else throw new Error("THREE.Matrix4.makePerspective(): Invalid coordinate system: "+o);return A[0]=h,A[4]=0,A[8]=u,A[12]=0,A[1]=0,A[5]=c,A[9]=d,A[13]=0,A[2]=0,A[6]=0,A[10]=p,A[14]=m,A[3]=0,A[7]=0,A[11]=-1,A[15]=0,this}makeOrthographic(t,e,i,n,s,a,o=2e3,l=!1){const A=this.elements,h=2/(e-t),c=2/(i-n),u=-(e+t)/(e-t),d=-(i+n)/(i-n);let p,m;if(l)p=1/(a-s),m=a/(a-s);else if(o===2e3)p=-2/(a-s),m=-(a+s)/(a-s);else if(o===2001)p=-1/(a-s),m=-s/(a-s);else throw new Error("THREE.Matrix4.makeOrthographic(): Invalid coordinate system: "+o);return A[0]=h,A[4]=0,A[8]=0,A[12]=u,A[1]=0,A[5]=c,A[9]=0,A[13]=d,A[2]=0,A[6]=0,A[10]=p,A[14]=m,A[3]=0,A[7]=0,A[11]=0,A[15]=1,this}equals(t){const e=this.elements,i=t.elements;for(let n=0;n<16;n++)if(e[n]!==i[n])return!1;return!0}fromArray(t,e=0){for(let i=0;i<16;i++)this.elements[i]=t[i+e];return this}toArray(t=[],e=0){const i=this.elements;return t[e]=i[0],t[e+1]=i[1],t[e+2]=i[2],t[e+3]=i[3],t[e+4]=i[4],t[e+5]=i[5],t[e+6]=i[6],t[e+7]=i[7],t[e+8]=i[8],t[e+9]=i[9],t[e+10]=i[10],t[e+11]=i[11],t[e+12]=i[12],t[e+13]=i[13],t[e+14]=i[14],t[e+15]=i[15],t}}const Hn=new V,si=new ni,Kc=new V(0,0,0),$c=new V(1,1,1),Xi=new V,Ar=new V,He=new V,JA=new ni,jA=new Ps;class Vn{constructor(t=0,e=0,i=0,n=Vn.DEFAULT_ORDER){this.isEuler=!0,this._x=t,this._y=e,this._z=i,this._order=n}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(t,e,i,n=this._order){return this._x=t,this._y=e,this._z=i,this._order=n,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e=this._order,i=!0){const n=t.elements,s=n[0],a=n[4],o=n[8],l=n[1],A=n[5],h=n[9],c=n[2],u=n[6],d=n[10];switch(e){case"XYZ":this._y=Math.asin(Gt(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-h,d),this._z=Math.atan2(-a,s)):(this._x=Math.atan2(u,A),this._z=0);break;case"YXZ":this._x=Math.asin(-Gt(h,-1,1)),Math.abs(h)<.9999999?(this._y=Math.atan2(o,d),this._z=Math.atan2(l,A)):(this._y=Math.atan2(-c,s),this._z=0);break;case"ZXY":this._x=Math.asin(Gt(u,-1,1)),Math.abs(u)<.9999999?(this._y=Math.atan2(-c,d),this._z=Math.atan2(-a,A)):(this._y=0,this._z=Math.atan2(l,s));break;case"ZYX":this._y=Math.asin(-Gt(c,-1,1)),Math.abs(c)<.9999999?(this._x=Math.atan2(u,d),this._z=Math.atan2(l,s)):(this._x=0,this._z=Math.atan2(-a,A));break;case"YZX":this._z=Math.asin(Gt(l,-1,1)),Math.abs(l)<.9999999?(this._x=Math.atan2(-h,A),this._y=Math.atan2(-c,s)):(this._x=0,this._y=Math.atan2(o,d));break;case"XZY":this._z=Math.asin(-Gt(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(u,A),this._y=Math.atan2(o,s)):(this._x=Math.atan2(-h,d),this._y=0);break;default:Se("Euler: .setFromRotationMatrix() encountered an unknown order: "+e)}return this._order=e,i===!0&&this._onChangeCallback(),this}setFromQuaternion(t,e,i){return JA.makeRotationFromQuaternion(t),this.setFromRotationMatrix(JA,e,i)}setFromVector3(t,e=this._order){return this.set(t.x,t.y,t.z,e)}reorder(t){return jA.setFromEuler(this),this.setFromQuaternion(jA,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],t[3]!==void 0&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}}Vn.DEFAULT_ORDER="XYZ";class tu{constructor(){this.mask=1}set(t){this.mask=(1<<t|0)>>>0}enable(t){this.mask|=1<<t|0}enableAll(){this.mask=-1}toggle(t){this.mask^=1<<t|0}disable(t){this.mask&=~(1<<t|0)}disableAll(){this.mask=0}test(t){return(this.mask&t.mask)!==0}isEnabled(t){return(this.mask&(1<<t|0))!==0}}let eu=0;const QA=new V,Wn=new Ps,yi=new ni,lr=new V,Ls=new V,iu=new V,nu=new Ps,qA=new V(1,0,0),KA=new V(0,1,0),$A=new V(0,0,1),tl={type:"added"},su={type:"removed"},Yn={type:"childadded",child:null},Ca={type:"childremoved",child:null};class je extends or{constructor(){super(),this.isObject3D=!0,Object.defineProperty(this,"id",{value:eu++}),this.uuid=Rs(),this.name="",this.type="Object3D",this.parent=null,this.children=[],this.up=je.DEFAULT_UP.clone();const t=new V,e=new Vn,i=new Ps,n=new V(1,1,1);function s(){i.setFromEuler(e,!1)}function a(){e.setFromQuaternion(i,void 0,!1)}e._onChange(s),i._onChange(a),Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:t},rotation:{configurable:!0,enumerable:!0,value:e},quaternion:{configurable:!0,enumerable:!0,value:i},scale:{configurable:!0,enumerable:!0,value:n},modelViewMatrix:{value:new ni},normalMatrix:{value:new Yi}}),this.matrix=new ni,this.matrixWorld=new ni,this.matrixAutoUpdate=je.DEFAULT_MATRIX_AUTO_UPDATE,this.matrixWorldAutoUpdate=je.DEFAULT_MATRIX_WORLD_AUTO_UPDATE,this.matrixWorldNeedsUpdate=!1,this.layers=new tu,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.animations=[],this.customDepthMaterial=void 0,this.customDistanceMaterial=void 0,this.static=!1,this.userData={},this.pivot=null}onBeforeShadow(){}onAfterShadow(){}onBeforeRender(){}onAfterRender(){}applyMatrix4(t){this.matrixAutoUpdate&&this.updateMatrix(),this.matrix.premultiply(t),this.matrix.decompose(this.position,this.quaternion,this.scale)}applyQuaternion(t){return this.quaternion.premultiply(t),this}setRotationFromAxisAngle(t,e){this.quaternion.setFromAxisAngle(t,e)}setRotationFromEuler(t){this.quaternion.setFromEuler(t,!0)}setRotationFromMatrix(t){this.quaternion.setFromRotationMatrix(t)}setRotationFromQuaternion(t){this.quaternion.copy(t)}rotateOnAxis(t,e){return Wn.setFromAxisAngle(t,e),this.quaternion.multiply(Wn),this}rotateOnWorldAxis(t,e){return Wn.setFromAxisAngle(t,e),this.quaternion.premultiply(Wn),this}rotateX(t){return this.rotateOnAxis(qA,t)}rotateY(t){return this.rotateOnAxis(KA,t)}rotateZ(t){return this.rotateOnAxis($A,t)}translateOnAxis(t,e){return QA.copy(t).applyQuaternion(this.quaternion),this.position.add(QA.multiplyScalar(e)),this}translateX(t){return this.translateOnAxis(qA,t)}translateY(t){return this.translateOnAxis(KA,t)}translateZ(t){return this.translateOnAxis($A,t)}localToWorld(t){return this.updateWorldMatrix(!0,!1),t.applyMatrix4(this.matrixWorld)}worldToLocal(t){return this.updateWorldMatrix(!0,!1),t.applyMatrix4(yi.copy(this.matrixWorld).invert())}lookAt(t,e,i){t.isVector3?lr.copy(t):lr.set(t,e,i);const n=this.parent;this.updateWorldMatrix(!0,!1),Ls.setFromMatrixPosition(this.matrixWorld),this.isCamera||this.isLight?yi.lookAt(Ls,lr,this.up):yi.lookAt(lr,Ls,this.up),this.quaternion.setFromRotationMatrix(yi),n&&(yi.extractRotation(n.matrixWorld),Wn.setFromRotationMatrix(yi),this.quaternion.premultiply(Wn.invert()))}add(t){if(arguments.length>1){for(let e=0;e<arguments.length;e++)this.add(arguments[e]);return this}return t===this?(cn("Object3D.add: object can't be added as a child of itself.",t),this):(t&&t.isObject3D?(t.removeFromParent(),t.parent=this,this.children.push(t),t.dispatchEvent(tl),Yn.child=t,this.dispatchEvent(Yn),Yn.child=null):cn("Object3D.add: object not an instance of THREE.Object3D.",t),this)}remove(t){if(arguments.length>1){for(let i=0;i<arguments.length;i++)this.remove(arguments[i]);return this}const e=this.children.indexOf(t);return e!==-1&&(t.parent=null,this.children.splice(e,1),t.dispatchEvent(su),Ca.child=t,this.dispatchEvent(Ca),Ca.child=null),this}removeFromParent(){const t=this.parent;return t!==null&&t.remove(this),this}clear(){return this.remove(...this.children)}attach(t){return this.updateWorldMatrix(!0,!1),yi.copy(this.matrixWorld).invert(),t.parent!==null&&(t.parent.updateWorldMatrix(!0,!1),yi.multiply(t.parent.matrixWorld)),t.applyMatrix4(yi),t.removeFromParent(),t.parent=this,this.children.push(t),t.updateWorldMatrix(!1,!0),t.dispatchEvent(tl),Yn.child=t,this.dispatchEvent(Yn),Yn.child=null,this}getObjectById(t){return this.getObjectByProperty("id",t)}getObjectByName(t){return this.getObjectByProperty("name",t)}getObjectByProperty(t,e){if(this[t]===e)return this;for(let i=0,n=this.children.length;i<n;i++){const s=this.children[i].getObjectByProperty(t,e);if(s!==void 0)return s}}getObjectsByProperty(t,e,i=[]){this[t]===e&&i.push(this);const n=this.children;for(let s=0,a=n.length;s<a;s++)n[s].getObjectsByProperty(t,e,i);return i}getWorldPosition(t){return this.updateWorldMatrix(!0,!1),t.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(Ls,t,iu),t}getWorldScale(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(Ls,nu,t),t}getWorldDirection(t){this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(e[8],e[9],e[10]).normalize()}raycast(){}traverse(t){t(this);const e=this.children;for(let i=0,n=e.length;i<n;i++)e[i].traverse(t)}traverseVisible(t){if(this.visible===!1)return;t(this);const e=this.children;for(let i=0,n=e.length;i<n;i++)e[i].traverseVisible(t)}traverseAncestors(t){const e=this.parent;e!==null&&(t(e),e.traverseAncestors(t))}updateMatrix(){this.matrix.compose(this.position,this.quaternion,this.scale);const t=this.pivot;if(t!==null){const e=t.x,i=t.y,n=t.z,s=this.matrix.elements;s[12]+=e-s[0]*e-s[4]*i-s[8]*n,s[13]+=i-s[1]*e-s[5]*i-s[9]*n,s[14]+=n-s[2]*e-s[6]*i-s[10]*n}this.matrixWorldNeedsUpdate=!0}updateMatrixWorld(t){this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||t)&&(this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),this.matrixWorldNeedsUpdate=!1,t=!0);const e=this.children;for(let i=0,n=e.length;i<n;i++)e[i].updateMatrixWorld(t)}updateWorldMatrix(t,e){const i=this.parent;if(t===!0&&i!==null&&i.updateWorldMatrix(!0,!1),this.matrixAutoUpdate&&this.updateMatrix(),this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),e===!0){const n=this.children;for(let s=0,a=n.length;s<a;s++)n[s].updateWorldMatrix(!1,!0)}}toJSON(t){const e=t===void 0||typeof t=="string",i={};e&&(t={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{},nodes:{}},i.metadata={version:4.7,type:"Object",generator:"Object3D.toJSON"});const n={};n.uuid=this.uuid,n.type=this.type,this.name!==""&&(n.name=this.name),this.castShadow===!0&&(n.castShadow=!0),this.receiveShadow===!0&&(n.receiveShadow=!0),this.visible===!1&&(n.visible=!1),this.frustumCulled===!1&&(n.frustumCulled=!1),this.renderOrder!==0&&(n.renderOrder=this.renderOrder),this.static!==!1&&(n.static=this.static),Object.keys(this.userData).length>0&&(n.userData=this.userData),n.layers=this.layers.mask,n.matrix=this.matrix.toArray(),n.up=this.up.toArray(),this.pivot!==null&&(n.pivot=this.pivot.toArray()),this.matrixAutoUpdate===!1&&(n.matrixAutoUpdate=!1),this.morphTargetDictionary!==void 0&&(n.morphTargetDictionary=Object.assign({},this.morphTargetDictionary)),this.morphTargetInfluences!==void 0&&(n.morphTargetInfluences=this.morphTargetInfluences.slice()),this.isInstancedMesh&&(n.type="InstancedMesh",n.count=this.count,n.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(n.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(n.type="BatchedMesh",n.perObjectFrustumCulled=this.perObjectFrustumCulled,n.sortObjects=this.sortObjects,n.drawRanges=this._drawRanges,n.reservedRanges=this._reservedRanges,n.geometryInfo=this._geometryInfo.map(o=>({...o,boundingBox:o.boundingBox?o.boundingBox.toJSON():void 0,boundingSphere:o.boundingSphere?o.boundingSphere.toJSON():void 0})),n.instanceInfo=this._instanceInfo.map(o=>({...o})),n.availableInstanceIds=this._availableInstanceIds.slice(),n.availableGeometryIds=this._availableGeometryIds.slice(),n.nextIndexStart=this._nextIndexStart,n.nextVertexStart=this._nextVertexStart,n.geometryCount=this._geometryCount,n.maxInstanceCount=this._maxInstanceCount,n.maxVertexCount=this._maxVertexCount,n.maxIndexCount=this._maxIndexCount,n.geometryInitialized=this._geometryInitialized,n.matricesTexture=this._matricesTexture.toJSON(t),n.indirectTexture=this._indirectTexture.toJSON(t),this._colorsTexture!==null&&(n.colorsTexture=this._colorsTexture.toJSON(t)),this.boundingSphere!==null&&(n.boundingSphere=this.boundingSphere.toJSON()),this.boundingBox!==null&&(n.boundingBox=this.boundingBox.toJSON()));function s(o,l){return o[l.uuid]===void 0&&(o[l.uuid]=l.toJSON(t)),l.uuid}if(this.isScene)this.background&&(this.background.isColor?n.background=this.background.toJSON():this.background.isTexture&&(n.background=this.background.toJSON(t).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(n.environment=this.environment.toJSON(t).uuid);else if(this.isMesh||this.isLine||this.isPoints){n.geometry=s(t.geometries,this.geometry);const o=this.geometry.parameters;if(o!==void 0&&o.shapes!==void 0){const l=o.shapes;if(Array.isArray(l))for(let A=0,h=l.length;A<h;A++){const c=l[A];s(t.shapes,c)}else s(t.shapes,l)}}if(this.isSkinnedMesh&&(n.bindMode=this.bindMode,n.bindMatrix=this.bindMatrix.toArray(),this.skeleton!==void 0&&(s(t.skeletons,this.skeleton),n.skeleton=this.skeleton.uuid)),this.material!==void 0)if(Array.isArray(this.material)){const o=[];for(let l=0,A=this.material.length;l<A;l++)o.push(s(t.materials,this.material[l]));n.material=o}else n.material=s(t.materials,this.material);if(this.children.length>0){n.children=[];for(let o=0;o<this.children.length;o++)n.children.push(this.children[o].toJSON(t).object)}if(this.animations.length>0){n.animations=[];for(let o=0;o<this.animations.length;o++){const l=this.animations[o];n.animations.push(s(t.animations,l))}}if(e){const o=a(t.geometries),l=a(t.materials),A=a(t.textures),h=a(t.images),c=a(t.shapes),u=a(t.skeletons),d=a(t.animations),p=a(t.nodes);o.length>0&&(i.geometries=o),l.length>0&&(i.materials=l),A.length>0&&(i.textures=A),h.length>0&&(i.images=h),c.length>0&&(i.shapes=c),u.length>0&&(i.skeletons=u),d.length>0&&(i.animations=d),p.length>0&&(i.nodes=p)}return i.object=n,i;function a(o){const l=[];for(const A in o){const h=o[A];delete h.metadata,l.push(h)}return l}}clone(t){return new this.constructor().copy(this,t)}copy(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),t.pivot!==null&&(this.pivot=t.pivot.clone()),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldAutoUpdate=t.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.static=t.static,this.animations=t.animations.slice(),this.userData=JSON.parse(JSON.stringify(t.userData)),e===!0)for(let i=0;i<t.children.length;i++){const n=t.children[i];this.add(n.clone())}return this}}je.DEFAULT_UP=new V(0,1,0),je.DEFAULT_MATRIX_AUTO_UPDATE=!0,je.DEFAULT_MATRIX_WORLD_AUTO_UPDATE=!0;const el={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},Zi={h:0,s:0,l:0},hr={h:0,s:0,l:0};function va(r,t,e){return e<0&&(e+=1),e>1&&(e-=1),e<1/6?r+(t-r)*6*e:e<1/2?t:e<2/3?r+(t-r)*6*(2/3-e):r}class Ji{constructor(t,e,i){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(t,e,i)}set(t,e,i){if(e===void 0&&i===void 0){const n=t;n&&n.isColor?this.copy(n):typeof n=="number"?this.setHex(n):typeof n=="string"&&this.setStyle(n)}else this.setRGB(t,e,i);return this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t,e=Ge){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(t&255)/255,ii.colorSpaceToWorking(this,e),this}setRGB(t,e,i,n=ii.workingColorSpace){return this.r=t,this.g=e,this.b=i,ii.colorSpaceToWorking(this,n),this}setHSL(t,e,i,n=ii.workingColorSpace){if(t=Xc(t,1),e=Gt(e,0,1),i=Gt(i,0,1),e===0)this.r=this.g=this.b=i;else{const s=i<=.5?i*(1+e):i+e-i*e,a=2*i-s;this.r=va(a,s,t+1/3),this.g=va(a,s,t),this.b=va(a,s,t-1/3)}return ii.colorSpaceToWorking(this,n),this}setStyle(t,e=Ge){function i(s){s!==void 0&&parseFloat(s)<1&&Se("Color: Alpha component of "+t+" will be ignored.")}let n;if(n=/^(\w+)\(([^\)]*)\)/.exec(t)){let s;const a=n[1],o=n[2];switch(a){case"rgb":case"rgba":if(s=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(s[4]),this.setRGB(Math.min(255,parseInt(s[1],10))/255,Math.min(255,parseInt(s[2],10))/255,Math.min(255,parseInt(s[3],10))/255,e);if(s=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(s[4]),this.setRGB(Math.min(100,parseInt(s[1],10))/100,Math.min(100,parseInt(s[2],10))/100,Math.min(100,parseInt(s[3],10))/100,e);break;case"hsl":case"hsla":if(s=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(s[4]),this.setHSL(parseFloat(s[1])/360,parseFloat(s[2])/100,parseFloat(s[3])/100,e);break;default:Se("Color: Unknown color model "+t)}}else if(n=/^\#([A-Fa-f\d]+)$/.exec(t)){const s=n[1],a=s.length;if(a===3)return this.setRGB(parseInt(s.charAt(0),16)/15,parseInt(s.charAt(1),16)/15,parseInt(s.charAt(2),16)/15,e);if(a===6)return this.setHex(parseInt(s,16),e);Se("Color: Invalid hex color "+t)}else if(t&&t.length>0)return this.setColorName(t,e);return this}setColorName(t,e=Ge){const i=el[t.toLowerCase()];return i!==void 0?this.setHex(i,e):Se("Color: Unknown color "+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copySRGBToLinear(t){return this.r=Mi(t.r),this.g=Mi(t.g),this.b=Mi(t.b),this}copyLinearToSRGB(t){return this.r=Gn(t.r),this.g=Gn(t.g),this.b=Gn(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(t=Ge){return ii.workingToColorSpace(ye.copy(this),t),Math.round(Gt(ye.r*255,0,255))*65536+Math.round(Gt(ye.g*255,0,255))*256+Math.round(Gt(ye.b*255,0,255))}getHexString(t=Ge){return("000000"+this.getHex(t).toString(16)).slice(-6)}getHSL(t,e=ii.workingColorSpace){ii.workingToColorSpace(ye.copy(this),e);const i=ye.r,n=ye.g,s=ye.b,a=Math.max(i,n,s),o=Math.min(i,n,s);let l,A;const h=(o+a)/2;if(o===a)l=0,A=0;else{const c=a-o;switch(A=h<=.5?c/(a+o):c/(2-a-o),a){case i:l=(n-s)/c+(n<s?6:0);break;case n:l=(s-i)/c+2;break;case s:l=(i-n)/c+4;break}l/=6}return t.h=l,t.s=A,t.l=h,t}getRGB(t,e=ii.workingColorSpace){return ii.workingToColorSpace(ye.copy(this),e),t.r=ye.r,t.g=ye.g,t.b=ye.b,t}getStyle(t=Ge){ii.workingToColorSpace(ye.copy(this),t);const e=ye.r,i=ye.g,n=ye.b;return t!==Ge?`color(${t} ${e.toFixed(3)} ${i.toFixed(3)} ${n.toFixed(3)})`:`rgb(${Math.round(e*255)},${Math.round(i*255)},${Math.round(n*255)})`}offsetHSL(t,e,i){return this.getHSL(Zi),this.setHSL(Zi.h+t,Zi.s+e,Zi.l+i)}add(t){return this.r+=t.r,this.g+=t.g,this.b+=t.b,this}addColors(t,e){return this.r=t.r+e.r,this.g=t.g+e.g,this.b=t.b+e.b,this}addScalar(t){return this.r+=t,this.g+=t,this.b+=t,this}sub(t){return this.r=Math.max(0,this.r-t.r),this.g=Math.max(0,this.g-t.g),this.b=Math.max(0,this.b-t.b),this}multiply(t){return this.r*=t.r,this.g*=t.g,this.b*=t.b,this}multiplyScalar(t){return this.r*=t,this.g*=t,this.b*=t,this}lerp(t,e){return this.r+=(t.r-this.r)*e,this.g+=(t.g-this.g)*e,this.b+=(t.b-this.b)*e,this}lerpColors(t,e,i){return this.r=t.r+(e.r-t.r)*i,this.g=t.g+(e.g-t.g)*i,this.b=t.b+(e.b-t.b)*i,this}lerpHSL(t,e){this.getHSL(Zi),t.getHSL(hr);const i=fa(Zi.h,hr.h,e),n=fa(Zi.s,hr.s,e),s=fa(Zi.l,hr.l,e);return this.setHSL(i,n,s),this}setFromVector3(t){return this.r=t.x,this.g=t.y,this.b=t.z,this}applyMatrix3(t){const e=this.r,i=this.g,n=this.b,s=t.elements;return this.r=s[0]*e+s[3]*i+s[6]*n,this.g=s[1]*e+s[4]*i+s[7]*n,this.b=s[2]*e+s[5]*i+s[8]*n,this}equals(t){return t.r===this.r&&t.g===this.g&&t.b===this.b}fromArray(t,e=0){return this.r=t[e],this.g=t[e+1],this.b=t[e+2],this}toArray(t=[],e=0){return t[e]=this.r,t[e+1]=this.g,t[e+2]=this.b,t}fromBufferAttribute(t,e){return this.r=t.getX(e),this.g=t.getY(e),this.b=t.getZ(e),this}toJSON(){return this.getHex()}*[Symbol.iterator](){yield this.r,yield this.g,yield this.b}}const ye=new Ji;Ji.NAMES=el;const ri=new V,bi=new V,xa=new V,Ti=new V,Xn=new V,Zn=new V,il=new V,Ea=new V,Sa=new V,Ma=new V,ya=new Ds,ba=new Ds,Ta=new Ds;class ai{constructor(t=new V,e=new V,i=new V){this.a=t,this.b=e,this.c=i}static getNormal(t,e,i,n){n.subVectors(i,e),ri.subVectors(t,e),n.cross(ri);const s=n.lengthSq();return s>0?n.multiplyScalar(1/Math.sqrt(s)):n.set(0,0,0)}static getBarycoord(t,e,i,n,s){ri.subVectors(n,e),bi.subVectors(i,e),xa.subVectors(t,e);const a=ri.dot(ri),o=ri.dot(bi),l=ri.dot(xa),A=bi.dot(bi),h=bi.dot(xa),c=a*A-o*o;if(c===0)return s.set(0,0,0),null;const u=1/c,d=(A*l-o*h)*u,p=(a*h-o*l)*u;return s.set(1-d-p,p,d)}static containsPoint(t,e,i,n){return this.getBarycoord(t,e,i,n,Ti)===null?!1:Ti.x>=0&&Ti.y>=0&&Ti.x+Ti.y<=1}static getInterpolation(t,e,i,n,s,a,o,l){return this.getBarycoord(t,e,i,n,Ti)===null?(l.x=0,l.y=0,"z"in l&&(l.z=0),"w"in l&&(l.w=0),null):(l.setScalar(0),l.addScaledVector(s,Ti.x),l.addScaledVector(a,Ti.y),l.addScaledVector(o,Ti.z),l)}static getInterpolatedAttribute(t,e,i,n,s,a){return ya.setScalar(0),ba.setScalar(0),Ta.setScalar(0),ya.fromBufferAttribute(t,e),ba.fromBufferAttribute(t,i),Ta.fromBufferAttribute(t,n),a.setScalar(0),a.addScaledVector(ya,s.x),a.addScaledVector(ba,s.y),a.addScaledVector(Ta,s.z),a}static isFrontFacing(t,e,i,n){return ri.subVectors(i,e),bi.subVectors(t,e),ri.cross(bi).dot(n)<0}set(t,e,i){return this.a.copy(t),this.b.copy(e),this.c.copy(i),this}setFromPointsAndIndices(t,e,i,n){return this.a.copy(t[e]),this.b.copy(t[i]),this.c.copy(t[n]),this}setFromAttributeAndIndices(t,e,i,n){return this.a.fromBufferAttribute(t,e),this.b.fromBufferAttribute(t,i),this.c.fromBufferAttribute(t,n),this}clone(){return new this.constructor().copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return ri.subVectors(this.c,this.b),bi.subVectors(this.a,this.b),ri.cross(bi).length()*.5}getMidpoint(t){return t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return ai.getNormal(this.a,this.b,this.c,t)}getPlane(t){return t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return ai.getBarycoord(t,this.a,this.b,this.c,e)}getInterpolation(t,e,i,n,s){return ai.getInterpolation(t,this.a,this.b,this.c,e,i,n,s)}containsPoint(t){return ai.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return ai.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){const i=this.a,n=this.b,s=this.c;let a,o;Xn.subVectors(n,i),Zn.subVectors(s,i),Ea.subVectors(t,i);const l=Xn.dot(Ea),A=Zn.dot(Ea);if(l<=0&&A<=0)return e.copy(i);Sa.subVectors(t,n);const h=Xn.dot(Sa),c=Zn.dot(Sa);if(h>=0&&c<=h)return e.copy(n);const u=l*c-h*A;if(u<=0&&l>=0&&h<=0)return a=l/(l-h),e.copy(i).addScaledVector(Xn,a);Ma.subVectors(t,s);const d=Xn.dot(Ma),p=Zn.dot(Ma);if(p>=0&&d<=p)return e.copy(s);const m=d*A-l*p;if(m<=0&&A>=0&&p<=0)return o=A/(A-p),e.copy(i).addScaledVector(Zn,o);const g=h*p-d*c;if(g<=0&&c-h>=0&&d-p>=0)return il.subVectors(s,n),o=(c-h)/(c-h+(d-p)),e.copy(n).addScaledVector(il,o);const f=1/(g+m+u);return a=m*f,o=u*f,e.copy(i).addScaledVector(Xn,a).addScaledVector(Zn,o)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}class Ns{constructor(t=new V(1/0,1/0,1/0),e=new V(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=t,this.max=e}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){this.makeEmpty();for(let e=0,i=t.length;e<i;e+=3)this.expandByPoint(oi.fromArray(t,e));return this}setFromBufferAttribute(t){this.makeEmpty();for(let e=0,i=t.count;e<i;e++)this.expandByPoint(oi.fromBufferAttribute(t,e));return this}setFromPoints(t){this.makeEmpty();for(let e=0,i=t.length;e<i;e++)this.expandByPoint(t[e]);return this}setFromCenterAndSize(t,e){const i=oi.copy(e).multiplyScalar(.5);return this.min.copy(t).sub(i),this.max.copy(t).add(i),this}setFromObject(t,e=!1){return this.makeEmpty(),this.expandByObject(t,e)}clone(){return new this.constructor().copy(this)}copy(t){return this.min.copy(t.min),this.max.copy(t.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z}getCenter(t){return this.isEmpty()?t.set(0,0,0):t.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(t){return this.isEmpty()?t.set(0,0,0):t.subVectors(this.max,this.min)}expandByPoint(t){return this.min.min(t),this.max.max(t),this}expandByVector(t){return this.min.sub(t),this.max.add(t),this}expandByScalar(t){return this.min.addScalar(-t),this.max.addScalar(t),this}expandByObject(t,e=!1){t.updateWorldMatrix(!1,!1);const i=t.geometry;if(i!==void 0){const s=i.getAttribute("position");if(e===!0&&s!==void 0&&t.isInstancedMesh!==!0)for(let a=0,o=s.count;a<o;a++)t.isMesh===!0?t.getVertexPosition(a,oi):oi.fromBufferAttribute(s,a),oi.applyMatrix4(t.matrixWorld),this.expandByPoint(oi);else t.boundingBox!==void 0?(t.boundingBox===null&&t.computeBoundingBox(),cr.copy(t.boundingBox)):(i.boundingBox===null&&i.computeBoundingBox(),cr.copy(i.boundingBox)),cr.applyMatrix4(t.matrixWorld),this.union(cr)}const n=t.children;for(let s=0,a=n.length;s<a;s++)this.expandByObject(n[s],e);return this}containsPoint(t){return t.x>=this.min.x&&t.x<=this.max.x&&t.y>=this.min.y&&t.y<=this.max.y&&t.z>=this.min.z&&t.z<=this.max.z}containsBox(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(t,e){return e.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))}intersectsBox(t){return t.max.x>=this.min.x&&t.min.x<=this.max.x&&t.max.y>=this.min.y&&t.min.y<=this.max.y&&t.max.z>=this.min.z&&t.min.z<=this.max.z}intersectsSphere(t){return this.clampPoint(t.center,oi),oi.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,i;return t.normal.x>0?(e=t.normal.x*this.min.x,i=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,i=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,i+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,i+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,i+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,i+=t.normal.z*this.min.z),e<=-t.constant&&i>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(Bs),ur.subVectors(this.max,Bs),Jn.subVectors(t.a,Bs),jn.subVectors(t.b,Bs),Qn.subVectors(t.c,Bs),ji.subVectors(jn,Jn),Qi.subVectors(Qn,jn),un.subVectors(Jn,Qn);let e=[0,-ji.z,ji.y,0,-Qi.z,Qi.y,0,-un.z,un.y,ji.z,0,-ji.x,Qi.z,0,-Qi.x,un.z,0,-un.x,-ji.y,ji.x,0,-Qi.y,Qi.x,0,-un.y,un.x,0];return!wa(e,Jn,jn,Qn,ur)||(e=[1,0,0,0,1,0,0,0,1],!wa(e,Jn,jn,Qn,ur))?!1:(dr.crossVectors(ji,Qi),e=[dr.x,dr.y,dr.z],wa(e,Jn,jn,Qn,ur))}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return this.clampPoint(t,oi).distanceTo(t)}getBoundingSphere(t){return this.isEmpty()?t.makeEmpty():(this.getCenter(t.center),t.radius=this.getSize(oi).length()*.5),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()?this:(wi[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),wi[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),wi[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),wi[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),wi[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),wi[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),wi[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),wi[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(wi),this)}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}toJSON(){return{min:this.min.toArray(),max:this.max.toArray()}}fromJSON(t){return this.min.fromArray(t.min),this.max.fromArray(t.max),this}}const wi=[new V,new V,new V,new V,new V,new V,new V,new V],oi=new V,cr=new Ns,Jn=new V,jn=new V,Qn=new V,ji=new V,Qi=new V,un=new V,Bs=new V,ur=new V,dr=new V,dn=new V;function wa(r,t,e,i,n){for(let s=0,a=r.length-3;s<=a;s+=3){dn.fromArray(r,s);const o=n.x*Math.abs(dn.x)+n.y*Math.abs(dn.y)+n.z*Math.abs(dn.z),l=t.dot(dn),A=e.dot(dn),h=i.dot(dn);if(Math.max(-Math.max(l,A,h),Math.min(l,A,h))>o)return!1}return!0}const ge=new V,fr=new ke;let ru=0;class fn{constructor(t,e,i=!1){if(Array.isArray(t))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,Object.defineProperty(this,"id",{value:ru++}),this.name="",this.array=t,this.itemSize=e,this.count=t!==void 0?t.length/e:0,this.normalized=i,this.usage=35044,this.updateRanges=[],this.gpuType=1015,this.version=0}onUploadCallback(){}set needsUpdate(t){t===!0&&this.version++}setUsage(t){return this.usage=t,this}addUpdateRange(t,e){this.updateRanges.push({start:t,count:e})}clearUpdateRanges(){this.updateRanges.length=0}copy(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.usage=t.usage,this.gpuType=t.gpuType,this}copyAt(t,e,i){t*=this.itemSize,i*=e.itemSize;for(let n=0,s=this.itemSize;n<s;n++)this.array[t+n]=e.array[i+n];return this}copyArray(t){return this.array.set(t),this}applyMatrix3(t){if(this.itemSize===2)for(let e=0,i=this.count;e<i;e++)fr.fromBufferAttribute(this,e),fr.applyMatrix3(t),this.setXY(e,fr.x,fr.y);else if(this.itemSize===3)for(let e=0,i=this.count;e<i;e++)ge.fromBufferAttribute(this,e),ge.applyMatrix3(t),this.setXYZ(e,ge.x,ge.y,ge.z);return this}applyMatrix4(t){for(let e=0,i=this.count;e<i;e++)ge.fromBufferAttribute(this,e),ge.applyMatrix4(t),this.setXYZ(e,ge.x,ge.y,ge.z);return this}applyNormalMatrix(t){for(let e=0,i=this.count;e<i;e++)ge.fromBufferAttribute(this,e),ge.applyNormalMatrix(t),this.setXYZ(e,ge.x,ge.y,ge.z);return this}transformDirection(t){for(let e=0,i=this.count;e<i;e++)ge.fromBufferAttribute(this,e),ge.transformDirection(t),this.setXYZ(e,ge.x,ge.y,ge.z);return this}set(t,e=0){return this.array.set(t,e),this}getComponent(t,e){let i=this.array[t*this.itemSize+e];return this.normalized&&(i=_s(i,this.array)),i}setComponent(t,e,i){return this.normalized&&(i=Be(i,this.array)),this.array[t*this.itemSize+e]=i,this}getX(t){let e=this.array[t*this.itemSize];return this.normalized&&(e=_s(e,this.array)),e}setX(t,e){return this.normalized&&(e=Be(e,this.array)),this.array[t*this.itemSize]=e,this}getY(t){let e=this.array[t*this.itemSize+1];return this.normalized&&(e=_s(e,this.array)),e}setY(t,e){return this.normalized&&(e=Be(e,this.array)),this.array[t*this.itemSize+1]=e,this}getZ(t){let e=this.array[t*this.itemSize+2];return this.normalized&&(e=_s(e,this.array)),e}setZ(t,e){return this.normalized&&(e=Be(e,this.array)),this.array[t*this.itemSize+2]=e,this}getW(t){let e=this.array[t*this.itemSize+3];return this.normalized&&(e=_s(e,this.array)),e}setW(t,e){return this.normalized&&(e=Be(e,this.array)),this.array[t*this.itemSize+3]=e,this}setXY(t,e,i){return t*=this.itemSize,this.normalized&&(e=Be(e,this.array),i=Be(i,this.array)),this.array[t+0]=e,this.array[t+1]=i,this}setXYZ(t,e,i,n){return t*=this.itemSize,this.normalized&&(e=Be(e,this.array),i=Be(i,this.array),n=Be(n,this.array)),this.array[t+0]=e,this.array[t+1]=i,this.array[t+2]=n,this}setXYZW(t,e,i,n,s){return t*=this.itemSize,this.normalized&&(e=Be(e,this.array),i=Be(i,this.array),n=Be(n,this.array),s=Be(s,this.array)),this.array[t+0]=e,this.array[t+1]=i,this.array[t+2]=n,this.array[t+3]=s,this}onUpload(t){return this.onUploadCallback=t,this}clone(){return new this.constructor(this.array,this.itemSize).copy(this)}toJSON(){const t={itemSize:this.itemSize,type:this.array.constructor.name,array:Array.from(this.array),normalized:this.normalized};return this.name!==""&&(t.name=this.name),this.usage!==35044&&(t.usage=this.usage),t}}class au extends fn{constructor(t,e,i){super(new Uint16Array(t),e,i)}}class ou extends fn{constructor(t,e,i){super(new Uint32Array(t),e,i)}}class gn extends fn{constructor(t,e,i){super(new Float32Array(t),e,i)}}const Au=new Ns,Fs=new V,Ra=new V;class nl{constructor(t=new V,e=-1){this.isSphere=!0,this.center=t,this.radius=e}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){const i=this.center;e!==void 0?i.copy(e):Au.setFromPoints(t).getCenter(i);let n=0;for(let s=0,a=t.length;s<a;s++)n=Math.max(n,i.distanceToSquared(t[s]));return this.radius=Math.sqrt(n),this}copy(t){return this.center.copy(t.center),this.radius=t.radius,this}isEmpty(){return this.radius<0}makeEmpty(){return this.center.set(0,0,0),this.radius=-1,this}containsPoint(t){return t.distanceToSquared(this.center)<=this.radius*this.radius}distanceToPoint(t){return t.distanceTo(this.center)-this.radius}intersectsSphere(t){const e=this.radius+t.radius;return t.center.distanceToSquared(this.center)<=e*e}intersectsBox(t){return t.intersectsSphere(this)}intersectsPlane(t){return Math.abs(t.distanceToPoint(this.center))<=this.radius}clampPoint(t,e){const i=this.center.distanceToSquared(t);return e.copy(t),i>this.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}expandByPoint(t){if(this.isEmpty())return this.center.copy(t),this.radius=0,this;Fs.subVectors(t,this.center);const e=Fs.lengthSq();if(e>this.radius*this.radius){const i=Math.sqrt(e),n=(i-this.radius)*.5;this.center.addScaledVector(Fs,n/i),this.radius+=n}return this}union(t){return t.isEmpty()?this:this.isEmpty()?(this.copy(t),this):(this.center.equals(t.center)===!0?this.radius=Math.max(this.radius,t.radius):(Ra.subVectors(t.center,this.center).setLength(t.radius),this.expandByPoint(Fs.copy(t.center).add(Ra)),this.expandByPoint(Fs.copy(t.center).sub(Ra))),this)}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}clone(){return new this.constructor().copy(this)}toJSON(){return{radius:this.radius,center:this.center.toArray()}}fromJSON(t){return this.radius=t.radius,this.center.fromArray(t.center),this}}let lu=0;const Qe=new ni,_a=new je,qn=new V,Ve=new Ns,Os=new Ns,Ce=new V;class Kn extends or{constructor(){super(),this.isBufferGeometry=!0,Object.defineProperty(this,"id",{value:lu++}),this.uuid=Rs(),this.name="",this.type="BufferGeometry",this.index=null,this.indirect=null,this.indirectOffset=0,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}getIndex(){return this.index}setIndex(t){return Array.isArray(t)?this.index=new(Yc(t)?ou:au)(t,1):this.index=t,this}setIndirect(t,e=0){return this.indirect=t,this.indirectOffset=e,this}getIndirect(){return this.indirect}getAttribute(t){return this.attributes[t]}setAttribute(t,e){return this.attributes[t]=e,this}deleteAttribute(t){return delete this.attributes[t],this}hasAttribute(t){return this.attributes[t]!==void 0}addGroup(t,e,i=0){this.groups.push({start:t,count:e,materialIndex:i})}clearGroups(){this.groups=[]}setDrawRange(t,e){this.drawRange.start=t,this.drawRange.count=e}applyMatrix4(t){const e=this.attributes.position;e!==void 0&&(e.applyMatrix4(t),e.needsUpdate=!0);const i=this.attributes.normal;if(i!==void 0){const s=new Yi().getNormalMatrix(t);i.applyNormalMatrix(s),i.needsUpdate=!0}const n=this.attributes.tangent;return n!==void 0&&(n.transformDirection(t),n.needsUpdate=!0),this.boundingBox!==null&&this.computeBoundingBox(),this.boundingSphere!==null&&this.computeBoundingSphere(),this}applyQuaternion(t){return Qe.makeRotationFromQuaternion(t),this.applyMatrix4(Qe),this}rotateX(t){return Qe.makeRotationX(t),this.applyMatrix4(Qe),this}rotateY(t){return Qe.makeRotationY(t),this.applyMatrix4(Qe),this}rotateZ(t){return Qe.makeRotationZ(t),this.applyMatrix4(Qe),this}translate(t,e,i){return Qe.makeTranslation(t,e,i),this.applyMatrix4(Qe),this}scale(t,e,i){return Qe.makeScale(t,e,i),this.applyMatrix4(Qe),this}lookAt(t){return _a.lookAt(t),_a.updateMatrix(),this.applyMatrix4(_a.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(qn).negate(),this.translate(qn.x,qn.y,qn.z),this}setFromPoints(t){const e=this.getAttribute("position");if(e===void 0){const i=[];for(let n=0,s=t.length;n<s;n++){const a=t[n];i.push(a.x,a.y,a.z||0)}this.setAttribute("position",new gn(i,3))}else{const i=Math.min(t.length,e.count);for(let n=0;n<i;n++){const s=t[n];e.setXYZ(n,s.x,s.y,s.z||0)}t.length>e.count&&Se("BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry."),e.needsUpdate=!0}return this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new Ns);const t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute){cn("BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.",this),this.boundingBox.set(new V(-1/0,-1/0,-1/0),new V(1/0,1/0,1/0));return}if(t!==void 0){if(this.boundingBox.setFromBufferAttribute(t),e)for(let i=0,n=e.length;i<n;i++){const s=e[i];Ve.setFromBufferAttribute(s),this.morphTargetsRelative?(Ce.addVectors(this.boundingBox.min,Ve.min),this.boundingBox.expandByPoint(Ce),Ce.addVectors(this.boundingBox.max,Ve.max),this.boundingBox.expandByPoint(Ce)):(this.boundingBox.expandByPoint(Ve.min),this.boundingBox.expandByPoint(Ve.max))}}else this.boundingBox.makeEmpty();(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))&&cn('BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The "position" attribute is likely to have NaN values.',this)}computeBoundingSphere(){this.boundingSphere===null&&(this.boundingSphere=new nl);const t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute){cn("BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere.",this),this.boundingSphere.set(new V,1/0);return}if(t){const i=this.boundingSphere.center;if(Ve.setFromBufferAttribute(t),e)for(let s=0,a=e.length;s<a;s++){const o=e[s];Os.setFromBufferAttribute(o),this.morphTargetsRelative?(Ce.addVectors(Ve.min,Os.min),Ve.expandByPoint(Ce),Ce.addVectors(Ve.max,Os.max),Ve.expandByPoint(Ce)):(Ve.expandByPoint(Os.min),Ve.expandByPoint(Os.max))}Ve.getCenter(i);let n=0;for(let s=0,a=t.count;s<a;s++)Ce.fromBufferAttribute(t,s),n=Math.max(n,i.distanceToSquared(Ce));if(e)for(let s=0,a=e.length;s<a;s++){const o=e[s],l=this.morphTargetsRelative;for(let A=0,h=o.count;A<h;A++)Ce.fromBufferAttribute(o,A),l&&(qn.fromBufferAttribute(t,A),Ce.add(qn)),n=Math.max(n,i.distanceToSquared(Ce))}this.boundingSphere.radius=Math.sqrt(n),isNaN(this.boundingSphere.radius)&&cn('BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.',this)}}computeTangents(){const t=this.index,e=this.attributes;if(t===null||e.position===void 0||e.normal===void 0||e.uv===void 0){cn("BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)");return}const i=e.position,n=e.normal,s=e.uv;this.hasAttribute("tangent")===!1&&this.setAttribute("tangent",new fn(new Float32Array(4*i.count),4));const a=this.getAttribute("tangent"),o=[],l=[];for(let P=0;P<i.count;P++)o[P]=new V,l[P]=new V;const A=new V,h=new V,c=new V,u=new ke,d=new ke,p=new ke,m=new V,g=new V;function f(P,E,x){A.fromBufferAttribute(i,P),h.fromBufferAttribute(i,E),c.fromBufferAttribute(i,x),u.fromBufferAttribute(s,P),d.fromBufferAttribute(s,E),p.fromBufferAttribute(s,x),h.sub(A),c.sub(A),d.sub(u),p.sub(u);const b=1/(d.x*p.y-p.x*d.y);isFinite(b)&&(m.copy(h).multiplyScalar(p.y).addScaledVector(c,-d.y).multiplyScalar(b),g.copy(c).multiplyScalar(d.x).addScaledVector(h,-p.x).multiplyScalar(b),o[P].add(m),o[E].add(m),o[x].add(m),l[P].add(g),l[E].add(g),l[x].add(g))}let y=this.groups;y.length===0&&(y=[{start:0,count:t.count}]);for(let P=0,E=y.length;P<E;++P){const x=y[P],b=x.start,z=x.count;for(let F=b,U=b+z;F<U;F+=3)f(t.getX(F+0),t.getX(F+1),t.getX(F+2))}const S=new V,v=new V,w=new V,T=new V;function R(P){w.fromBufferAttribute(n,P),T.copy(w);const E=o[P];S.copy(E),S.sub(w.multiplyScalar(w.dot(E))).normalize(),v.crossVectors(T,E);const x=v.dot(l[P])<0?-1:1;a.setXYZW(P,S.x,S.y,S.z,x)}for(let P=0,E=y.length;P<E;++P){const x=y[P],b=x.start,z=x.count;for(let F=b,U=b+z;F<U;F+=3)R(t.getX(F+0)),R(t.getX(F+1)),R(t.getX(F+2))}}computeVertexNormals(){const t=this.index,e=this.getAttribute("position");if(e!==void 0){let i=this.getAttribute("normal");if(i===void 0)i=new fn(new Float32Array(e.count*3),3),this.setAttribute("normal",i);else for(let u=0,d=i.count;u<d;u++)i.setXYZ(u,0,0,0);const n=new V,s=new V,a=new V,o=new V,l=new V,A=new V,h=new V,c=new V;if(t)for(let u=0,d=t.count;u<d;u+=3){const p=t.getX(u+0),m=t.getX(u+1),g=t.getX(u+2);n.fromBufferAttribute(e,p),s.fromBufferAttribute(e,m),a.fromBufferAttribute(e,g),h.subVectors(a,s),c.subVectors(n,s),h.cross(c),o.fromBufferAttribute(i,p),l.fromBufferAttribute(i,m),A.fromBufferAttribute(i,g),o.add(h),l.add(h),A.add(h),i.setXYZ(p,o.x,o.y,o.z),i.setXYZ(m,l.x,l.y,l.z),i.setXYZ(g,A.x,A.y,A.z)}else for(let u=0,d=e.count;u<d;u+=3)n.fromBufferAttribute(e,u+0),s.fromBufferAttribute(e,u+1),a.fromBufferAttribute(e,u+2),h.subVectors(a,s),c.subVectors(n,s),h.cross(c),i.setXYZ(u+0,h.x,h.y,h.z),i.setXYZ(u+1,h.x,h.y,h.z),i.setXYZ(u+2,h.x,h.y,h.z);this.normalizeNormals(),i.needsUpdate=!0}}normalizeNormals(){const t=this.attributes.normal;for(let e=0,i=t.count;e<i;e++)Ce.fromBufferAttribute(t,e),Ce.normalize(),t.setXYZ(e,Ce.x,Ce.y,Ce.z)}toNonIndexed(){function t(o,l){const A=o.array,h=o.itemSize,c=o.normalized,u=new A.constructor(l.length*h);let d=0,p=0;for(let m=0,g=l.length;m<g;m++){o.isInterleavedBufferAttribute?d=l[m]*o.data.stride+o.offset:d=l[m]*h;for(let f=0;f<h;f++)u[p++]=A[d++]}return new fn(u,h,c)}if(this.index===null)return Se("BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed."),this;const e=new Kn,i=this.index.array,n=this.attributes;for(const o in n){const l=n[o],A=t(l,i);e.setAttribute(o,A)}const s=this.morphAttributes;for(const o in s){const l=[],A=s[o];for(let h=0,c=A.length;h<c;h++){const u=A[h],d=t(u,i);l.push(d)}e.morphAttributes[o]=l}e.morphTargetsRelative=this.morphTargetsRelative;const a=this.groups;for(let o=0,l=a.length;o<l;o++){const A=a[o];e.addGroup(A.start,A.count,A.materialIndex)}return e}toJSON(){const t={metadata:{version:4.7,type:"BufferGeometry",generator:"BufferGeometry.toJSON"}};if(t.uuid=this.uuid,t.type=this.type,this.name!==""&&(t.name=this.name),Object.keys(this.userData).length>0&&(t.userData=this.userData),this.parameters!==void 0){const l=this.parameters;for(const A in l)l[A]!==void 0&&(t[A]=l[A]);return t}t.data={attributes:{}};const e=this.index;e!==null&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});const i=this.attributes;for(const l in i){const A=i[l];t.data.attributes[l]=A.toJSON(t.data)}const n={};let s=!1;for(const l in this.morphAttributes){const A=this.morphAttributes[l],h=[];for(let c=0,u=A.length;c<u;c++){const d=A[c];h.push(d.toJSON(t.data))}h.length>0&&(n[l]=h,s=!0)}s&&(t.data.morphAttributes=n,t.data.morphTargetsRelative=this.morphTargetsRelative);const a=this.groups;a.length>0&&(t.data.groups=JSON.parse(JSON.stringify(a)));const o=this.boundingSphere;return o!==null&&(t.data.boundingSphere=o.toJSON()),t}clone(){return new this.constructor().copy(this)}copy(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const e={};this.name=t.name;const i=t.index;i!==null&&this.setIndex(i.clone());const n=t.attributes;for(const A in n){const h=n[A];this.setAttribute(A,h.clone(e))}const s=t.morphAttributes;for(const A in s){const h=[],c=s[A];for(let u=0,d=c.length;u<d;u++)h.push(c[u].clone(e));this.morphAttributes[A]=h}this.morphTargetsRelative=t.morphTargetsRelative;const a=t.groups;for(let A=0,h=a.length;A<h;A++){const c=a[A];this.addGroup(c.start,c.count,c.materialIndex)}const o=t.boundingBox;o!==null&&(this.boundingBox=o.clone());const l=t.boundingSphere;return l!==null&&(this.boundingSphere=l.clone()),this.drawRange.start=t.drawRange.start,this.drawRange.count=t.drawRange.count,this.userData=t.userData,this}dispose(){this.dispatchEvent({type:"dispose"})}}let hu=0;class Pa extends or{constructor(){super(),this.isMaterial=!0,Object.defineProperty(this,"id",{value:hu++}),this.uuid=Rs(),this.name="",this.type="Material",this.blending=1,this.side=0,this.vertexColors=!1,this.opacity=1,this.transparent=!1,this.alphaHash=!1,this.blendSrc=204,this.blendDst=205,this.blendEquation=100,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.blendColor=new Ji(0,0,0),this.blendAlpha=0,this.depthFunc=3,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=519,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=7680,this.stencilZFail=7680,this.stencilZPass=7680,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.forceSinglePass=!1,this.allowOverride=!0,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0,this._alphaTest=0}get alphaTest(){return this._alphaTest}set alphaTest(t){this._alphaTest>0!=t>0&&this.version++,this._alphaTest=t}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(t){if(t!==void 0)for(const e in t){const i=t[e];if(i===void 0){Se(`Material: parameter '${e}' has value of undefined.`);continue}const n=this[e];if(n===void 0){Se(`Material: '${e}' is not a property of THREE.${this.type}.`);continue}n&&n.isColor?n.set(i):n&&n.isVector3&&i&&i.isVector3?n.copy(i):this[e]=i}}toJSON(t){const e=t===void 0||typeof t=="string";e&&(t={textures:{},images:{}});const i={metadata:{version:4.7,type:"Material",generator:"Material.toJSON"}};i.uuid=this.uuid,i.type=this.type,this.name!==""&&(i.name=this.name),this.color&&this.color.isColor&&(i.color=this.color.getHex()),this.roughness!==void 0&&(i.roughness=this.roughness),this.metalness!==void 0&&(i.metalness=this.metalness),this.sheen!==void 0&&(i.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(i.sheenColor=this.sheenColor.getHex()),this.sheenRoughness!==void 0&&(i.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(i.emissive=this.emissive.getHex()),this.emissiveIntensity!==void 0&&this.emissiveIntensity!==1&&(i.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(i.specular=this.specular.getHex()),this.specularIntensity!==void 0&&(i.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(i.specularColor=this.specularColor.getHex()),this.shininess!==void 0&&(i.shininess=this.shininess),this.clearcoat!==void 0&&(i.clearcoat=this.clearcoat),this.clearcoatRoughness!==void 0&&(i.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(i.clearcoatMap=this.clearcoatMap.toJSON(t).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(i.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(t).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(i.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(t).uuid,i.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.sheenColorMap&&this.sheenColorMap.isTexture&&(i.sheenColorMap=this.sheenColorMap.toJSON(t).uuid),this.sheenRoughnessMap&&this.sheenRoughnessMap.isTexture&&(i.sheenRoughnessMap=this.sheenRoughnessMap.toJSON(t).uuid),this.dispersion!==void 0&&(i.dispersion=this.dispersion),this.iridescence!==void 0&&(i.iridescence=this.iridescence),this.iridescenceIOR!==void 0&&(i.iridescenceIOR=this.iridescenceIOR),this.iridescenceThicknessRange!==void 0&&(i.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(i.iridescenceMap=this.iridescenceMap.toJSON(t).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(i.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(t).uuid),this.anisotropy!==void 0&&(i.anisotropy=this.anisotropy),this.anisotropyRotation!==void 0&&(i.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(i.anisotropyMap=this.anisotropyMap.toJSON(t).uuid),this.map&&this.map.isTexture&&(i.map=this.map.toJSON(t).uuid),this.matcap&&this.matcap.isTexture&&(i.matcap=this.matcap.toJSON(t).uuid),this.alphaMap&&this.alphaMap.isTexture&&(i.alphaMap=this.alphaMap.toJSON(t).uuid),this.lightMap&&this.lightMap.isTexture&&(i.lightMap=this.lightMap.toJSON(t).uuid,i.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(i.aoMap=this.aoMap.toJSON(t).uuid,i.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(i.bumpMap=this.bumpMap.toJSON(t).uuid,i.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(i.normalMap=this.normalMap.toJSON(t).uuid,i.normalMapType=this.normalMapType,i.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(i.displacementMap=this.displacementMap.toJSON(t).uuid,i.displacementScale=this.displacementScale,i.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(i.roughnessMap=this.roughnessMap.toJSON(t).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(i.metalnessMap=this.metalnessMap.toJSON(t).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(i.emissiveMap=this.emissiveMap.toJSON(t).uuid),this.specularMap&&this.specularMap.isTexture&&(i.specularMap=this.specularMap.toJSON(t).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(i.specularIntensityMap=this.specularIntensityMap.toJSON(t).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(i.specularColorMap=this.specularColorMap.toJSON(t).uuid),this.envMap&&this.envMap.isTexture&&(i.envMap=this.envMap.toJSON(t).uuid,this.combine!==void 0&&(i.combine=this.combine)),this.envMapRotation!==void 0&&(i.envMapRotation=this.envMapRotation.toArray()),this.envMapIntensity!==void 0&&(i.envMapIntensity=this.envMapIntensity),this.reflectivity!==void 0&&(i.reflectivity=this.reflectivity),this.refractionRatio!==void 0&&(i.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(i.gradientMap=this.gradientMap.toJSON(t).uuid),this.transmission!==void 0&&(i.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(i.transmissionMap=this.transmissionMap.toJSON(t).uuid),this.thickness!==void 0&&(i.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(i.thicknessMap=this.thicknessMap.toJSON(t).uuid),this.attenuationDistance!==void 0&&this.attenuationDistance!==1/0&&(i.attenuationDistance=this.attenuationDistance),this.attenuationColor!==void 0&&(i.attenuationColor=this.attenuationColor.getHex()),this.size!==void 0&&(i.size=this.size),this.shadowSide!==null&&(i.shadowSide=this.shadowSide),this.sizeAttenuation!==void 0&&(i.sizeAttenuation=this.sizeAttenuation),this.blending!==1&&(i.blending=this.blending),this.side!==0&&(i.side=this.side),this.vertexColors===!0&&(i.vertexColors=!0),this.opacity<1&&(i.opacity=this.opacity),this.transparent===!0&&(i.transparent=!0),this.blendSrc!==204&&(i.blendSrc=this.blendSrc),this.blendDst!==205&&(i.blendDst=this.blendDst),this.blendEquation!==100&&(i.blendEquation=this.blendEquation),this.blendSrcAlpha!==null&&(i.blendSrcAlpha=this.blendSrcAlpha),this.blendDstAlpha!==null&&(i.blendDstAlpha=this.blendDstAlpha),this.blendEquationAlpha!==null&&(i.blendEquationAlpha=this.blendEquationAlpha),this.blendColor&&this.blendColor.isColor&&(i.blendColor=this.blendColor.getHex()),this.blendAlpha!==0&&(i.blendAlpha=this.blendAlpha),this.depthFunc!==3&&(i.depthFunc=this.depthFunc),this.depthTest===!1&&(i.depthTest=this.depthTest),this.depthWrite===!1&&(i.depthWrite=this.depthWrite),this.colorWrite===!1&&(i.colorWrite=this.colorWrite),this.stencilWriteMask!==255&&(i.stencilWriteMask=this.stencilWriteMask),this.stencilFunc!==519&&(i.stencilFunc=this.stencilFunc),this.stencilRef!==0&&(i.stencilRef=this.stencilRef),this.stencilFuncMask!==255&&(i.stencilFuncMask=this.stencilFuncMask),this.stencilFail!==7680&&(i.stencilFail=this.stencilFail),this.stencilZFail!==7680&&(i.stencilZFail=this.stencilZFail),this.stencilZPass!==7680&&(i.stencilZPass=this.stencilZPass),this.stencilWrite===!0&&(i.stencilWrite=this.stencilWrite),this.rotation!==void 0&&this.rotation!==0&&(i.rotation=this.rotation),this.polygonOffset===!0&&(i.polygonOffset=!0),this.polygonOffsetFactor!==0&&(i.polygonOffsetFactor=this.polygonOffsetFactor),this.polygonOffsetUnits!==0&&(i.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth!==void 0&&this.linewidth!==1&&(i.linewidth=this.linewidth),this.dashSize!==void 0&&(i.dashSize=this.dashSize),this.gapSize!==void 0&&(i.gapSize=this.gapSize),this.scale!==void 0&&(i.scale=this.scale),this.dithering===!0&&(i.dithering=!0),this.alphaTest>0&&(i.alphaTest=this.alphaTest),this.alphaHash===!0&&(i.alphaHash=!0),this.alphaToCoverage===!0&&(i.alphaToCoverage=!0),this.premultipliedAlpha===!0&&(i.premultipliedAlpha=!0),this.forceSinglePass===!0&&(i.forceSinglePass=!0),this.allowOverride===!1&&(i.allowOverride=!1),this.wireframe===!0&&(i.wireframe=!0),this.wireframeLinewidth>1&&(i.wireframeLinewidth=this.wireframeLinewidth),this.wireframeLinecap!=="round"&&(i.wireframeLinecap=this.wireframeLinecap),this.wireframeLinejoin!=="round"&&(i.wireframeLinejoin=this.wireframeLinejoin),this.flatShading===!0&&(i.flatShading=!0),this.visible===!1&&(i.visible=!1),this.toneMapped===!1&&(i.toneMapped=!1),this.fog===!1&&(i.fog=!1),Object.keys(this.userData).length>0&&(i.userData=this.userData);function n(s){const a=[];for(const o in s){const l=s[o];delete l.metadata,a.push(l)}return a}if(e){const s=n(t.textures),a=n(t.images);s.length>0&&(i.textures=s),a.length>0&&(i.images=a)}return i}clone(){return new this.constructor().copy(this)}copy(t){this.name=t.name,this.blending=t.blending,this.side=t.side,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.blendColor.copy(t.blendColor),this.blendAlpha=t.blendAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;const e=t.clippingPlanes;let i=null;if(e!==null){const n=e.length;i=new Array(n);for(let s=0;s!==n;++s)i[s]=e[s].clone()}return this.clippingPlanes=i,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.alphaHash=t.alphaHash,this.alphaToCoverage=t.alphaToCoverage,this.premultipliedAlpha=t.premultipliedAlpha,this.forceSinglePass=t.forceSinglePass,this.allowOverride=t.allowOverride,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(t){t===!0&&this.version++}}const Ri=new V,Da=new V,gr=new V,qi=new V,La=new V,pr=new V,Na=new V;class cu{constructor(t=new V,e=new V(0,0,-1)){this.origin=t,this.direction=e}set(t,e){return this.origin.copy(t),this.direction.copy(e),this}copy(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this}at(t,e){return e.copy(this.origin).addScaledVector(this.direction,t)}lookAt(t){return this.direction.copy(t).sub(this.origin).normalize(),this}recast(t){return this.origin.copy(this.at(t,Ri)),this}closestPointToPoint(t,e){e.subVectors(t,this.origin);const i=e.dot(this.direction);return i<0?e.copy(this.origin):e.copy(this.origin).addScaledVector(this.direction,i)}distanceToPoint(t){return Math.sqrt(this.distanceSqToPoint(t))}distanceSqToPoint(t){const e=Ri.subVectors(t,this.origin).dot(this.direction);return e<0?this.origin.distanceToSquared(t):(Ri.copy(this.origin).addScaledVector(this.direction,e),Ri.distanceToSquared(t))}distanceSqToSegment(t,e,i,n){Da.copy(t).add(e).multiplyScalar(.5),gr.copy(e).sub(t).normalize(),qi.copy(this.origin).sub(Da);const s=t.distanceTo(e)*.5,a=-this.direction.dot(gr),o=qi.dot(this.direction),l=-qi.dot(gr),A=qi.lengthSq(),h=Math.abs(1-a*a);let c,u,d,p;if(h>0)if(c=a*l-o,u=a*o-l,p=s*h,c>=0)if(u>=-p)if(u<=p){const m=1/h;c*=m,u*=m,d=c*(c+a*u+2*o)+u*(a*c+u+2*l)+A}else u=s,c=Math.max(0,-(a*u+o)),d=-c*c+u*(u+2*l)+A;else u=-s,c=Math.max(0,-(a*u+o)),d=-c*c+u*(u+2*l)+A;else u<=-p?(c=Math.max(0,-(-a*s+o)),u=c>0?-s:Math.min(Math.max(-s,-l),s),d=-c*c+u*(u+2*l)+A):u<=p?(c=0,u=Math.min(Math.max(-s,-l),s),d=u*(u+2*l)+A):(c=Math.max(0,-(a*s+o)),u=c>0?s:Math.min(Math.max(-s,-l),s),d=-c*c+u*(u+2*l)+A);else u=a>0?-s:s,c=Math.max(0,-(a*u+o)),d=-c*c+u*(u+2*l)+A;return i&&i.copy(this.origin).addScaledVector(this.direction,c),n&&n.copy(Da).addScaledVector(gr,u),d}intersectSphere(t,e){Ri.subVectors(t.center,this.origin);const i=Ri.dot(this.direction),n=Ri.dot(Ri)-i*i,s=t.radius*t.radius;if(n>s)return null;const a=Math.sqrt(s-n),o=i-a,l=i+a;return l<0?null:o<0?this.at(l,e):this.at(o,e)}intersectsSphere(t){return t.radius<0?!1:this.distanceSqToPoint(t.center)<=t.radius*t.radius}distanceToPlane(t){const e=t.normal.dot(this.direction);if(e===0)return t.distanceToPoint(this.origin)===0?0:null;const i=-(this.origin.dot(t.normal)+t.constant)/e;return i>=0?i:null}intersectPlane(t,e){const i=this.distanceToPlane(t);return i===null?null:this.at(i,e)}intersectsPlane(t){const e=t.distanceToPoint(this.origin);return e===0||t.normal.dot(this.direction)*e<0}intersectBox(t,e){let i,n,s,a,o,l;const A=1/this.direction.x,h=1/this.direction.y,c=1/this.direction.z,u=this.origin;return A>=0?(i=(t.min.x-u.x)*A,n=(t.max.x-u.x)*A):(i=(t.max.x-u.x)*A,n=(t.min.x-u.x)*A),h>=0?(s=(t.min.y-u.y)*h,a=(t.max.y-u.y)*h):(s=(t.max.y-u.y)*h,a=(t.min.y-u.y)*h),i>a||s>n||((s>i||isNaN(i))&&(i=s),(a<n||isNaN(n))&&(n=a),c>=0?(o=(t.min.z-u.z)*c,l=(t.max.z-u.z)*c):(o=(t.max.z-u.z)*c,l=(t.min.z-u.z)*c),i>l||o>n)||((o>i||i!==i)&&(i=o),(l<n||n!==n)&&(n=l),n<0)?null:this.at(i>=0?i:n,e)}intersectsBox(t){return this.intersectBox(t,Ri)!==null}intersectTriangle(t,e,i,n,s){La.subVectors(e,t),pr.subVectors(i,t),Na.crossVectors(La,pr);let a=this.direction.dot(Na),o;if(a>0){if(n)return null;o=1}else if(a<0)o=-1,a=-a;else return null;qi.subVectors(this.origin,t);const l=o*this.direction.dot(pr.crossVectors(qi,pr));if(l<0)return null;const A=o*this.direction.dot(La.cross(qi));if(A<0||l+A>a)return null;const h=-o*qi.dot(Na);return h<0?null:this.at(h/a,s)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}}class uu extends Pa{constructor(t){super(),this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new Ji(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new Vn,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapRotation.copy(t.envMapRotation),this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.fog=t.fog,this}}const sl=new ni,pn=new cu,mr=new nl,rl=new V,Ir=new V,Cr=new V,vr=new V,Ba=new V,xr=new V,al=new V,Er=new V;class ol extends je{constructor(t=new Kn,e=new uu){super(),this.isMesh=!0,this.type="Mesh",this.geometry=t,this.material=e,this.morphTargetDictionary=void 0,this.morphTargetInfluences=void 0,this.count=1,this.updateMorphTargets()}copy(t,e){return super.copy(t,e),t.morphTargetInfluences!==void 0&&(this.morphTargetInfluences=t.morphTargetInfluences.slice()),t.morphTargetDictionary!==void 0&&(this.morphTargetDictionary=Object.assign({},t.morphTargetDictionary)),this.material=Array.isArray(t.material)?t.material.slice():t.material,this.geometry=t.geometry,this}updateMorphTargets(){const t=this.geometry.morphAttributes,e=Object.keys(t);if(e.length>0){const i=t[e[0]];if(i!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let n=0,s=i.length;n<s;n++){const a=i[n].name||String(n);this.morphTargetInfluences.push(0),this.morphTargetDictionary[a]=n}}}}getVertexPosition(t,e){const i=this.geometry,n=i.attributes.position,s=i.morphAttributes.position,a=i.morphTargetsRelative;e.fromBufferAttribute(n,t);const o=this.morphTargetInfluences;if(s&&o){xr.set(0,0,0);for(let l=0,A=s.length;l<A;l++){const h=o[l],c=s[l];h!==0&&(Ba.fromBufferAttribute(c,t),a?xr.addScaledVector(Ba,h):xr.addScaledVector(Ba.sub(e),h))}e.add(xr)}return e}raycast(t,e){const i=this.geometry,n=this.material,s=this.matrixWorld;n!==void 0&&(i.boundingSphere===null&&i.computeBoundingSphere(),mr.copy(i.boundingSphere),mr.applyMatrix4(s),pn.copy(t.ray).recast(t.near),!(mr.containsPoint(pn.origin)===!1&&(pn.intersectSphere(mr,rl)===null||pn.origin.distanceToSquared(rl)>(t.far-t.near)**2))&&(sl.copy(s).invert(),pn.copy(t.ray).applyMatrix4(sl),!(i.boundingBox!==null&&pn.intersectsBox(i.boundingBox)===!1)&&this._computeIntersections(t,e,pn)))}_computeIntersections(t,e,i){let n;const s=this.geometry,a=this.material,o=s.index,l=s.attributes.position,A=s.attributes.uv,h=s.attributes.uv1,c=s.attributes.normal,u=s.groups,d=s.drawRange;if(o!==null)if(Array.isArray(a))for(let p=0,m=u.length;p<m;p++){const g=u[p],f=a[g.materialIndex],y=Math.max(g.start,d.start),S=Math.min(o.count,Math.min(g.start+g.count,d.start+d.count));for(let v=y,w=S;v<w;v+=3){const T=o.getX(v),R=o.getX(v+1),P=o.getX(v+2);n=Sr(this,f,t,i,A,h,c,T,R,P),n&&(n.faceIndex=Math.floor(v/3),n.face.materialIndex=g.materialIndex,e.push(n))}}else{const p=Math.max(0,d.start),m=Math.min(o.count,d.start+d.count);for(let g=p,f=m;g<f;g+=3){const y=o.getX(g),S=o.getX(g+1),v=o.getX(g+2);n=Sr(this,a,t,i,A,h,c,y,S,v),n&&(n.faceIndex=Math.floor(g/3),e.push(n))}}else if(l!==void 0)if(Array.isArray(a))for(let p=0,m=u.length;p<m;p++){const g=u[p],f=a[g.materialIndex],y=Math.max(g.start,d.start),S=Math.min(l.count,Math.min(g.start+g.count,d.start+d.count));for(let v=y,w=S;v<w;v+=3){const T=v,R=v+1,P=v+2;n=Sr(this,f,t,i,A,h,c,T,R,P),n&&(n.faceIndex=Math.floor(v/3),n.face.materialIndex=g.materialIndex,e.push(n))}}else{const p=Math.max(0,d.start),m=Math.min(l.count,d.start+d.count);for(let g=p,f=m;g<f;g+=3){const y=g,S=g+1,v=g+2;n=Sr(this,a,t,i,A,h,c,y,S,v),n&&(n.faceIndex=Math.floor(g/3),e.push(n))}}}}function du(r,t,e,i,n,s,a,o){let l;if(t.side===1?l=i.intersectTriangle(a,s,n,!0,o):l=i.intersectTriangle(n,s,a,t.side===0,o),l===null)return null;Er.copy(o),Er.applyMatrix4(r.matrixWorld);const A=e.ray.origin.distanceTo(Er);return A<e.near||A>e.far?null:{distance:A,point:Er.clone(),object:r}}function Sr(r,t,e,i,n,s,a,o,l,A){r.getVertexPosition(o,Ir),r.getVertexPosition(l,Cr),r.getVertexPosition(A,vr);const h=du(r,t,e,i,Ir,Cr,vr,al);if(h){const c=new V;ai.getBarycoord(al,Ir,Cr,vr,c),n&&(h.uv=ai.getInterpolatedAttribute(n,o,l,A,c,new ke)),s&&(h.uv1=ai.getInterpolatedAttribute(s,o,l,A,c,new ke)),a&&(h.normal=ai.getInterpolatedAttribute(a,o,l,A,c,new V),h.normal.dot(i.direction)>0&&h.normal.multiplyScalar(-1));const u={a:o,b:l,c:A,normal:new V,materialIndex:0};ai.getNormal(Ir,Cr,vr,u.normal),h.face=u,h.barycoord=c}return h}class fu extends pi{constructor(t=null,e=1,i=1,n,s,a,o,l,A=1003,h=1003,c,u){super(null,a,o,l,A,h,n,s,c,u),this.isDataTexture=!0,this.image={data:t,width:e,height:i},this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}}class mn extends Kn{constructor(t=1,e=1,i=1,n=32,s=1,a=!1,o=0,l=Math.PI*2){super(),this.type="CylinderGeometry",this.parameters={radiusTop:t,radiusBottom:e,height:i,radialSegments:n,heightSegments:s,openEnded:a,thetaStart:o,thetaLength:l};const A=this;n=Math.floor(n),s=Math.floor(s);const h=[],c=[],u=[],d=[];let p=0;const m=[],g=i/2;let f=0;y(),a===!1&&(t>0&&S(!0),e>0&&S(!1)),this.setIndex(h),this.setAttribute("position",new gn(c,3)),this.setAttribute("normal",new gn(u,3)),this.setAttribute("uv",new gn(d,2));function y(){const v=new V,w=new V;let T=0;const R=(e-t)/i;for(let P=0;P<=s;P++){const E=[],x=P/s,b=x*(e-t)+t;for(let z=0;z<=n;z++){const F=z/n,U=F*l+o,W=Math.sin(U),Y=Math.cos(U);w.x=b*W,w.y=-x*i+g,w.z=b*Y,c.push(w.x,w.y,w.z),v.set(W,R,Y).normalize(),u.push(v.x,v.y,v.z),d.push(F,1-x),E.push(p++)}m.push(E)}for(let P=0;P<n;P++)for(let E=0;E<s;E++){const x=m[E][P],b=m[E+1][P],z=m[E+1][P+1],F=m[E][P+1];(t>0||E!==0)&&(h.push(x,b,F),T+=3),(e>0||E!==s-1)&&(h.push(b,z,F),T+=3)}A.addGroup(f,T,0),f+=T}function S(v){const w=p,T=new ke,R=new V;let P=0;const E=v===!0?t:e,x=v===!0?1:-1;for(let z=1;z<=n;z++)c.push(0,g*x,0),u.push(0,x,0),d.push(.5,.5),p++;const b=p;for(let z=0;z<=n;z++){const F=z/n*l+o,U=Math.cos(F),W=Math.sin(F);R.x=E*W,R.y=g*x,R.z=E*U,c.push(R.x,R.y,R.z),u.push(0,x,0),T.x=U*.5+.5,T.y=W*.5*x+.5,d.push(T.x,T.y),p++}for(let z=0;z<n;z++){const F=w+z,U=b+z;v===!0?h.push(U,U+1,F):h.push(U+1,U,F),P+=3}A.addGroup(f,P,v===!0?1:2),f+=P}}copy(t){return super.copy(t),this.parameters=Object.assign({},t.parameters),this}static fromJSON(t){return new mn(t.radiusTop,t.radiusBottom,t.height,t.radialSegments,t.heightSegments,t.openEnded,t.thetaStart,t.thetaLength)}}function gu(r){const t={};for(const e in r){t[e]={};for(const i in r[e]){const n=r[e][i];n&&(n.isColor||n.isMatrix3||n.isMatrix4||n.isVector2||n.isVector3||n.isVector4||n.isTexture||n.isQuaternion)?n.isRenderTargetTexture?(Se("UniformsUtils: Textures of render targets cannot be cloned via cloneUniforms() or mergeUniforms()."),t[e][i]=null):t[e][i]=n.clone():Array.isArray(n)?t[e][i]=n.slice():t[e][i]=n}}return t}function pu(r){const t=[];for(let e=0;e<r.length;e++)t.push(r[e].clone());return t}var mu=`void main() {
|
|
56
56
|
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
|
|
57
|
-
}`,
|
|
57
|
+
}`,Iu=`void main() {
|
|
58
58
|
gl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );
|
|
59
|
-
}`;class
|
|
59
|
+
}`;class Cu extends Pa{constructor(t){super(),this.isShaderMaterial=!0,this.type="ShaderMaterial",this.defines={},this.uniforms={},this.uniformsGroups=[],this.vertexShader=mu,this.fragmentShader=Iu,this.linewidth=1,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.clipping=!1,this.forceSinglePass=!0,this.extensions={clipCullDistance:!1,multiDraw:!1},this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv1:[0,0]},this.index0AttributeName=void 0,this.uniformsNeedUpdate=!1,this.glslVersion=null,t!==void 0&&this.setValues(t)}copy(t){return super.copy(t),this.fragmentShader=t.fragmentShader,this.vertexShader=t.vertexShader,this.uniforms=gu(t.uniforms),this.uniformsGroups=pu(t.uniformsGroups),this.defines=Object.assign({},t.defines),this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.fog=t.fog,this.lights=t.lights,this.clipping=t.clipping,this.extensions=Object.assign({},t.extensions),this.glslVersion=t.glslVersion,this.defaultAttributeValues=Object.assign({},t.defaultAttributeValues),this.index0AttributeName=t.index0AttributeName,this.uniformsNeedUpdate=t.uniformsNeedUpdate,this}toJSON(t){const e=super.toJSON(t);e.glslVersion=this.glslVersion,e.uniforms={};for(const n in this.uniforms){const s=this.uniforms[n].value;s&&s.isTexture?e.uniforms[n]={type:"t",value:s.toJSON(t).uuid}:s&&s.isColor?e.uniforms[n]={type:"c",value:s.getHex()}:s&&s.isVector2?e.uniforms[n]={type:"v2",value:s.toArray()}:s&&s.isVector3?e.uniforms[n]={type:"v3",value:s.toArray()}:s&&s.isVector4?e.uniforms[n]={type:"v4",value:s.toArray()}:s&&s.isMatrix3?e.uniforms[n]={type:"m3",value:s.toArray()}:s&&s.isMatrix4?e.uniforms[n]={type:"m4",value:s.toArray()}:e.uniforms[n]={value:s}}Object.keys(this.defines).length>0&&(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader,e.lights=this.lights,e.clipping=this.clipping;const i={};for(const n in this.extensions)this.extensions[n]===!0&&(i[n]=!0);return Object.keys(i).length>0&&(e.extensions=i),e}}class Al extends Pa{constructor(t){super(),this.isMeshStandardMaterial=!0,this.type="MeshStandardMaterial",this.defines={STANDARD:""},this.color=new Ji(16777215),this.roughness=1,this.metalness=0,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Ji(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new ke(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.roughnessMap=null,this.metalnessMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new Vn,this.envMapIntensity=1,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.defines={STANDARD:""},this.color.copy(t.color),this.roughness=t.roughness,this.metalness=t.metalness,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.roughnessMap=t.roughnessMap,this.metalnessMap=t.metalnessMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapRotation.copy(t.envMapRotation),this.envMapIntensity=t.envMapIntensity,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.flatShading=t.flatShading,this.fog=t.fog,this}}typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:"183"}})),typeof window<"u"&&(window.__THREE__?Se("WARNING: Multiple instances of Three.js being imported."):window.__THREE__="183");const vu=`#include <common>
|
|
60
60
|
#include <batching_pars_vertex>
|
|
61
61
|
#include <uv_pars_vertex>
|
|
62
62
|
#include <displacementmap_pars_vertex>
|
|
@@ -83,7 +83,7 @@ void main() {
|
|
|
83
83
|
#include <logdepthbuf_vertex>
|
|
84
84
|
#include <clipping_planes_vertex>
|
|
85
85
|
vHighPrecisionZW = gl_Position.zw;
|
|
86
|
-
}`,
|
|
86
|
+
}`,xu=`#if DEPTH_PACKING == 3200
|
|
87
87
|
uniform float opacity;
|
|
88
88
|
#endif
|
|
89
89
|
#include <common>
|
|
@@ -121,11 +121,11 @@ void main() {
|
|
|
121
121
|
#elif DEPTH_PACKING == 3203
|
|
122
122
|
gl_FragColor = vec4( packDepthToRG( fragCoordZ ), 0.0, 1.0 );
|
|
123
123
|
#endif
|
|
124
|
-
}`,gh={depth_vert:Du,depth_frag:Lu};class Nu extends ns{constructor(t=(n,r,a)=>a.set(n,r,Math.cos(n)*Math.sin(r)),e=8,i=8){super(),this.type="ParametricGeometry",this.parameters={func:t,slices:e,stacks:i};const n=[],r=[],a=[],o=[],h=1e-5,l=new V,A=new V,c=new V,u=new V,d=new V,p=e+1;for(let m=0;m<=i;m++){const g=m/i;for(let f=0;f<=e;f++){const M=f/e;t(M,g,A),r.push(A.x,A.y,A.z),M-h>=0?(t(M-h,g,c),u.subVectors(A,c)):(t(M+h,g,c),u.subVectors(c,A)),g-h>=0?(t(M,g-h,c),d.subVectors(A,c)):(t(M,g+h,c),d.subVectors(c,A)),l.crossVectors(u,d).normalize(),a.push(l.x,l.y,l.z),o.push(M,g)}}for(let m=0;m<i;m++)for(let g=0;g<e;g++){const f=m*p+g,M=m*p+g+1,S=(m+1)*p+g+1,v=(m+1)*p+g;n.push(f,M,v),n.push(M,S,v)}this.setIndex(n),this.setAttribute("position",new vn(r,3)),this.setAttribute("normal",new vn(a,3)),this.setAttribute("uv",new vn(o,2))}copy(t){return super.copy(t),this.parameters=Object.assign({},t.parameters),this}}const Va=new V;class Sn{p1;p2;restDistance;constructor(t,e,i){this.p1=t,this.p2=e,this.restDistance=i}resolve(){const t=this.p1,e=this.p2,i=this.restDistance;Va.subVectors(e.position,t.position);const n=Va.length();if(n===0)return;const r=Va.multiplyScalar((1-i/n)/2);t.position.add(r),e.position.sub(r)}}const ph=2,Ou=.03,Fu=1-Ou,Bu=.12,Uu=1.225;class zu{position;previous;original;mass;inverseMass;acceleration;tmp;constructor(t,e){this.position=t.clone(),this.previous=t.clone(),this.original=t.clone(),this.mass=e,this.inverseMass=1/e,this.acceleration=new V,this.tmp=new V}applyForce(t){this.acceleration.addScaledVector(t,this.inverseMass)}integrate(t){const e=this.tmp.subVectors(this.position,this.previous).multiplyScalar(Fu).add(this.position).addScaledVector(this.acceleration,t);this.tmp=this.previous,this.previous=this.position,this.position=e,this.acceleration.set(0,0,0)}}class ku{xSegments;ySegments;restDistance;width;height;particles;constraints;particleAt;geometry;constructor(t,e,i,n){const r=i*t,a=i*e,o=[],h=[],l=(m,g)=>o[m+g*(t+1)],A=(m,g,f)=>{f.set(m*r,g*a,0)},c=new V,u=n/((e+1)*(t+1));for(let m=0;m<=e;m++)for(let g=0;g<=t;g++)A(g/t,m/e,c),o.push(new zu(c,u));for(let m=0;m<e;m++)for(let g=0;g<t;g++)h.push(new Sn(l(g,m),l(g,m+1),i),new Sn(l(g,m),l(g+1,m),i));for(let m=t,g=0;g<e;g++)h.push(new Sn(l(m,g),l(m,g+1),i));for(let m=e,g=0;g<t;g++)h.push(new Sn(l(g,m),l(g+1,m),i));const d=Math.sqrt(i*i*2);for(let m=0;m<e;m++)for(let g=0;g<t;g++)h.push(new Sn(l(g,m),l(g+1,m+1),d),new Sn(l(g+1,m),l(g,m+1),d));const p=new Nu(A,t,e);p.getAttribute("position").setUsage(35040),this.xSegments=t,this.ySegments=e,this.restDistance=i,this.width=r,this.height=a,this.particles=o,this.constraints=h,this.particleAt=l,this.geometry=p}reset(){for(const t of this.particles)t.previous.copy(t.position.copy(t.original))}simulate(t){const e=this.particles,i=this.constraints,n=Math.pow(t,2);for(let r=0,a=e.length;r<a;r++)e[r].integrate(n);for(let r=0,a=ph;r<a;r++)for(let o=0,h=i.length;o<h;o++)i[o].resolve()}render(){const t=this.particles,e=this.geometry,i=e.getAttribute("position"),n=i.array;for(let r=0,a=t.length;r<a;r++){const o=t[r].position,h=r*3;n[h]=o.x,n[h+1]=o.y,n[h+2]=o.z}i.needsUpdate=!0,e.computeVertexNormals()}}function Gu(s){const{width:t,height:e,mass:i,restDistance:n}=s;return new ku(Math.max(1,Math.round(t/n)),Math.max(1,Math.round(e/n)),n,i*t*e)}function mh(s,t,e){const i=s*t,n=new Uint8Array(4*i),r=Math.floor(e.r*255),a=Math.floor(e.g*255),o=Math.floor(e.b*255),h=255;for(let A=0;A<i;A++){const c=A*4;n[c]=r,n[c+1]=a,n[c+2]=o,n[c+3]=h}const l=new bu(n,s,t,1023,1009);return l.needsUpdate=!0,l}const Hu=mh(1,1,new qi(16777215));function Vu(s,t){const e=s.geometry;let i=Hu,n;const r=o=>(o.needsUpdate=!0,o.anisotropy=16,o.minFilter=1006,o.magFilter=1006,o.wrapS=1001,o.wrapT=1001,o),a=(o,h)=>{o.colorSpace=Ve;const l=new fh({alphaTest:.5,color:16777215,metalness:.08,roughness:.86,side:h,map:o}),A=new dh(e,l);return A.castShadow=!0,A.customDepthMaterial=new Pu({uniforms:{textureMap:{value:o}},vertexShader:gh.depth_vert,fragmentShader:gh.depth_frag,side:h,lights:!1,defines:{DEPTH_PACKING:"3200"}}),A.position.set(0,-s.height,0),A};return t?.texture instanceof Ii?(i=r(t.texture),t.backSideTexture instanceof Ii&&(n=r(t.backSideTexture))):t?.texture!==void 0&&console.error("FlagWaver.Flag: options.texture must be an instance of THREE.Texture."),[a(i,n!==void 0?0:2),n!==void 0?a(n,1):null]}const Ae={TOP:"top",LEFT:"left",BOTTOM:"bottom",RIGHT:"right"},Wu=(()=>{const s={edges:[],spacing:1};function t(e,i,n,r){const{xSegments:a,ySegments:o,particleAt:h}=e,{spacing:l}=r;switch(n){case Ae.TOP:for(let A=0;A<=a;A+=l)i.push(h(A,o));break;case Ae.LEFT:for(let A=0;A<=o;A+=l)i.push(h(0,A));break;case Ae.BOTTOM:for(let A=0;A<=a;A+=l)i.push(h(A,0));break;case Ae.RIGHT:for(let A=0;A<=o;A+=l)i.push(h(a,A));break}}return function(e,i,n={}){const r={...s,...n},{edges:a}=r;if(typeof a=="string")t(e,i,a,r);else if(Array.isArray(a)&&a.length>0)for(let o=0,h=a.length;o<h;o++)t(e,i,a[o],r)}})(),Ch=1.2,Tr=new V;class Ih extends Sn{resolve(){const t=this.p1,e=this.p2,i=this.restDistance*Ch;Tr.subVectors(t.position,e.position);const n=Tr.length()/Ch;Tr.normalize();const r=Tr.multiplyScalar(n-i);n>i&&e.position.add(r)}}function vh(s){if(Array.isArray(s))for(const t of s)xh(t);else xh(s)}function xh(s){s.map?.dispose(),s.dispose()}const Yu=mh(1,1,new qi(16777215));class Ws{cloth;pins;lengthConstraints;mesh;mesh2;object;static defaults={width:1.8,height:1.2,mass:.11,restDistance:1.2/10,rigidness:1,texture:Yu,backSideTexture:void 0,pin:{edges:[Ae.LEFT],spacing:1}};constructor(t={}){const e={...Ws.defaults,...t};this.cloth=Gu(e),this.pins=[],this.lengthConstraints=[];const[i,n]=Vu(this.cloth,e);this.mesh=i,this.mesh2=n,this.object=new Ke,this.object.add(this.mesh),this.mesh2!==null&&this.object.add(this.mesh2),this.pin(e.pin)}destroy(){vh(this.mesh.material),this.mesh.geometry.dispose(),this.mesh.customDepthMaterial?.dispose(),this.mesh2!==null&&(vh(this.mesh2.material),this.mesh2.customDepthMaterial?.dispose())}pin(t){Wu(this.cloth,this.pins,t)}unpin(){this.pins=[]}setLengthConstraints(t){const{xSegments:e,ySegments:i,restDistance:n,particleAt:r}=this.cloth,a=[];if(t===Ae.LEFT)for(let o=0;o<=i;o++)for(let h=0;h<e;h++)a.push(new Ih(r(h,o),r(h+1,o),n));else if(t===Ae.TOP)for(let o=0;o<=e;o++)for(let h=i;h>0;h--)a.push(new Ih(r(o,h),r(o,h-1),n));this.lengthConstraints=a}reset(){this.cloth.reset()}simulate(t){const e=this.pins,i=this.lengthConstraints;this.cloth.simulate(t);for(const n of e)n.previous.copy(n.position.copy(n.original));for(let n=0;n<ph;n++)for(const r of i)r.resolve()}render(){this.cloth.render()}setTexture(t){t.needsUpdate=!0,t.anisotropy=16,t.minFilter=1006,t.magFilter=1006,t.wrapS=1001,t.wrapT=1001,t.colorSpace=Ve;const e=this.mesh.material;e.map!==null&&e.map!==void 0&&(e.map=t,e.needsUpdate=!0);const i=this.mesh.customDepthMaterial;if(i!=null){const n=i;n.uniforms!=null&&n.uniforms.textureMap!=null&&(n.uniforms.textureMap.value=t)}if(this.mesh2!=null){const n=this.mesh2.material;n.map!=null&&(n.map=t,n.needsUpdate=!0);const r=this.mesh2.customDepthMaterial;if(r!=null){const a=r;a.uniforms?.textureMap!=null&&(a.uniforms.textureMap.value=t)}}}}const yn={CROSSBAR:"CROSSBAR",GALLERY:"GALLERY",HORIZONTAL:"HORIZONTAL",OUTRIGGER:"OUTRIGGER",VERTICAL:"VERTICAL"},Ys={NONE:"none",TOP_RIGHT:"topright",TOP_LEFT:"topleft"};class Li{top;mesh;object;constructor(t){this.create(t)}static defaults={flagpoleType:yn.VERTICAL,poleWidth:.076,poleLength:6,poleCapSize:.076*4/3,crossbarWidth:.076*2/3,crossbarLength:1.2,crossbarCapSize:.076*2/3*3/2,poleTopOffset:.1,verticalHoisting:Ys.TOP_RIGHT};destroy(){this.mesh!==void 0&&((Array.isArray(this.mesh.material)?this.mesh.material:[this.mesh.material]).forEach(t=>{t.dispose()}),this.mesh.geometry.dispose())}create(t){this.destroy();const e=Object.assign({},Li.defaults,t),i=this.buildGeometry(e),n=new fh({color:16711422,metalness:.98,roughness:.55}),r=new dh(i,n);r.receiveShadow=!0,r.castShadow=!0,this.top=new V(0,e.poleLength,0),this.mesh=r,this.object=this.mesh}addFlag(t){t.unpin(),t.pin({edges:[Ae.LEFT]}),t.setLengthConstraints(Ae.LEFT),t.object.position.add(this.top)}}function Wa(s,t=!1){const e=s[0].index!==null,i=new Set(Object.keys(s[0].attributes)),n=new Set(Object.keys(s[0].morphAttributes)),r={},a={},o=s[0].morphTargetsRelative,h=new ns;let l=0;for(let A=0;A<s.length;++A){const c=s[A];let u=0;if(e!==(c.index!==null))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+A+". All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them."),null;for(const d in c.attributes){if(!i.has(d))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+A+'. All geometries must have compatible attributes; make sure "'+d+'" attribute exists among all geometries, or in none of them.'),null;r[d]===void 0&&(r[d]=[]),r[d].push(c.attributes[d]),u++}if(u!==i.size)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+A+". Make sure all geometries have the same number of attributes."),null;if(o!==c.morphTargetsRelative)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+A+". .morphTargetsRelative must be consistent throughout all geometries."),null;for(const d in c.morphAttributes){if(!n.has(d))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+A+". .morphAttributes must be consistent throughout all geometries."),null;a[d]===void 0&&(a[d]=[]),a[d].push(c.morphAttributes[d])}if(t){let d;if(e)d=c.index.count;else if(c.attributes.position!==void 0)d=c.attributes.position.count;else return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+A+". The geometry must have either an index or a position attribute"),null;h.addGroup(l,d,A),l+=d}}if(e){let A=0;const c=[];for(let u=0;u<s.length;++u){const d=s[u].index;for(let p=0;p<d.count;++p)c.push(d.getX(p)+A);A+=s[u].attributes.position.count}h.setIndex(c)}for(const A in r){const c=Eh(r[A]);if(!c)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the "+A+" attribute."),null;h.setAttribute(A,c)}for(const A in a){const c=a[A][0].length;if(c===0)break;h.morphAttributes=h.morphAttributes||{},h.morphAttributes[A]=[];for(let u=0;u<c;++u){const d=[];for(let m=0;m<a[A].length;++m)d.push(a[A][m][u]);const p=Eh(d);if(!p)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the "+A+" morphAttribute."),null;h.morphAttributes[A].push(p)}}return h}function Eh(s){let t,e,i,n=-1,r=0;for(let l=0;l<s.length;++l){const A=s[l];if(t===void 0&&(t=A.array.constructor),t!==A.array.constructor)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes."),null;if(e===void 0&&(e=A.itemSize),e!==A.itemSize)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes."),null;if(i===void 0&&(i=A.normalized),i!==A.normalized)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes."),null;if(n===-1&&(n=A.gpuType),n!==A.gpuType)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.gpuType must be consistent across matching attributes."),null;r+=A.count*e}const a=new t(r),o=new In(a,e,i);let h=0;for(let l=0;l<s.length;++l){const A=s[l];if(A.isInterleavedBufferAttribute){const c=h/e;for(let u=0,d=A.count;u<d;u++)for(let p=0;p<e;p++){const m=A.getComponent(u,p);o.setComponent(u+c,p,m)}}else a.set(A.array,h);h+=A.count*e}return n!==void 0&&(o.gpuType=n),o}function Xs(s){const t=s.poleWidth/2,e=s.poleLength,i=32,n=s.poleCapSize/2,r=new En(t,t,e,i);r.translate(0,s.poleLength/2,0);const a=new En(n,n,n,i);return a.translate(0,e+n/2,0),Wa([r,a])}function Xu(s){const t=Xs(s),e=s.poleWidth/2,i=s.poleLength,n=s.crossbarWidth/2,r=s.crossbarLength,a=16,o=s.crossbarCapSize/2,h=s.poleTopOffset,l=new En(n,n,r,a);l.rotateZ(Math.PI/2);const A=new En(o,o,o,a),c=A.clone(),u=i-h,d=e+n;return A.rotateZ(Math.PI/2),A.translate(-r/2,u,d),c.rotateZ(-Math.PI/2),c.translate(r/2,u,d),l.translate(0,u,d),Wa([t,l,A,c])}function Zu(s){const t=Xs(s),e=s.poleLength,i=s.poleCapSize/2,n=s.crossbarWidth/2,r=s.crossbarLength,a=16,o=new En(n,n,r,a);return o.rotateZ(Math.PI/2),o.translate(r/2,e+i-n,0),Wa([t,o])}class Sh extends Li{constructor(t={}){super(t)}buildGeometry(t){return Xs(t)}}class ju{flagpole;flag;object;constructor(t={}){const e={...t},{flagpole:i,flag:n}=e;this.flagpole=i??new Sh,this.flag=n??new Ws,this.flagpole.addFlag(this.flag),this.object=new Ke,this.object.add(this.flagpole.object),this.object.add(this.flag.object)}destroy(){this.destroyChildSubject(this.flagpole),this.destroyChildSubject(this.flag)}destroyChildSubject(t){t!=null&&(this.object.remove(t.object),t.destroy())}reset(){this.flag.reset()}simulate(t){this.flag.simulate(t)}render(){this.flag.render()}setTexture(t){this.flag.setTexture(t)}}function Ju(s){return s===0?.001:s}function Qu(s){return s.x===0&&(s.x=.001),s.y===0&&(s.y=.001),s.z===0&&(s.z=.001),s}const yh={blowFromLeftDirection:s=>s.set(2e3,0,1e3),constantSpeed:s=>s};function qu(s){return .5*Uu*Math.pow(s,2)}class Ya{direction;speed;directionFn;speedFn;pressure;static defaults={direction:new V(1,0,0),speed:10,directionFn:yh.blowFromLeftDirection,speedFn:yh.constantSpeed};constructor(t={}){const e={...Ya.defaults,...t};this.direction=e.direction.clone(),this.speed=e.speed,this.directionFn=e.directionFn,this.speedFn=e.speedFn,this.pressure=new V}update(){const t=Date.now();this.directionFn(Qu(this.pressure.copy(this.direction)),t).normalize().multiplyScalar(qu(this.speedFn(Ju(this.speed),t)))}}const wr=new V,Mh=new V;function bh(s,t){return wr.copy(s),t instanceof Ke&&(Mh.setFromMatrixPosition(t.matrixWorld),wr.add(Mh),t.worldToLocal(wr)),wr}const Ku=new V(0,-9.80665,0);function $u(s,t){const e=s.particles,i=bh(Ku,t);for(let n=0,r=e.length;n<r;n++)e[n].acceleration.add(i)}const Rr=new V,_h=new V;function td(s){return s<0?0:s>1?1:s}function Th(s){const t=Math.sin(s*12.9898)*43758.5453;return t-Math.floor(t)}function ed(s,t){const e=td(t?.randomizeAmount??0);if(e===0)return 1;const i=t?.randomSeed??s?.id??0,n=t?.time??0,r=.5+Th(i)*2,a=Th(i+1e3)*Math.PI*2;return 1+(Math.sin(n*r+a)*.5+Math.sin(n*r*1.7+a*.3)*.3)*e}function id(s,t,e){return Rr.subVectors(e,t),_h.subVectors(s,t),Rr.cross(_h),Rr.normalize(),Rr}function nd(s,t,e,i){const n=s.particles,r=s.geometry.getIndex();if(t==null||r==null)return;const a=s.restDistance*s.restDistance/2,o=ed(e,i),h=bh(t.pressure,e).multiplyScalar(Bu*a/3*o);for(let l=0,A=r.count;l<A;l+=3){const c=r.getX(l),u=r.getX(l+1),d=r.getX(l+2),p=n[c],m=n[u],g=n[d],f=id(p.position,m.position,g.position);f.multiplyScalar(f.dot(h)),p.applyForce(f),m.applyForce(f),g.applyForce(f)}}function sd(s){return new Ws(s)}function rd(s,t){const e={...s};return Object.entries(t).forEach(([i,n])=>{n!==void 0&&(e[i]=n)}),e}class ad extends Li{verticalHoisting;constructor(t={}){super(t);const e=rd(Li.defaults,t);this.top.set(0,e.poleLength-e.poleTopOffset,e.poleWidth/2+e.crossbarWidth/2),this.verticalHoisting=e.verticalHoisting}buildGeometry(t){return Xu(t)}addFlag(t){switch(t.unpin(),this.verticalHoisting){case Ys.NONE:t.pin({edges:[Ae.TOP]}),t.setLengthConstraints(Ae.TOP),t.object.position.add(this.top),t.object.position.x=-t.cloth.width/2;break;case Ys.TOP_LEFT:t.pin({edges:[Ae.LEFT]}),t.setLengthConstraints(Ae.LEFT),t.object.position.add(this.top),t.object.position.x=-t.cloth.height/2,t.object.rotateZ(Math.PI*3/2),t.object.rotateX(Math.PI);break;case Ys.TOP_RIGHT:default:t.pin({edges:[Ae.LEFT]}),t.setLengthConstraints(Ae.LEFT),t.object.position.add(this.top),t.object.position.x=t.cloth.height/2,t.object.rotateZ(Math.PI*3/2);break}}}class od extends Li{buildGeometry(t){return Zu(t)}addFlag(t){t.unpin(),t.pin({edges:[Ae.LEFT,Ae.TOP]}),t.setLengthConstraints(Ae.LEFT),t.object.position.add(this.top)}}const ld=new V(0,0,1);class hd extends Li{constructor(t={}){super(t),this.top.applyAxisAngle(ld,Math.PI*3/2)}buildGeometry(t){const e=Xs(t);return e.rotateZ(Math.PI*3/2),e}addFlag(t){t.unpin(),t.pin({edges:[Ae.LEFT]}),t.setLengthConstraints(Ae.LEFT),t.object.position.add(this.top),t.object.rotateZ(Math.PI*3/2)}}const Ad=new V(0,0,1);class cd extends Li{constructor(t={}){super(t),this.top.applyAxisAngle(Ad,Math.PI*7/4)}buildGeometry(t){const e=Xs(t);return e.rotateZ(Math.PI*7/4),e}addFlag(t){t.unpin(),t.pin({edges:[Ae.LEFT]}),t.setLengthConstraints(Ae.LEFT),t.object.position.add(this.top),t.object.rotateZ(Math.PI*7/4)}}function ud(s,t){const e=Object.assign({},s);let i;switch(e.flagpoleType){case yn.HORIZONTAL:i=new hd(e);break;case yn.OUTRIGGER:i=new cd(e);break;case yn.CROSSBAR:e.crossbarLength=e.verticalHoisting===Ys.NONE?t.cloth.width:t.cloth.height,i=new ad(e);break;case yn.GALLERY:e.crossbarLength=t.cloth.width,i=new od(e);break;case yn.VERTICAL:default:i=new Sh(e);break}return i}const Ni=Object.freeze(Object.defineProperty({__proto__:null,FLAG_POLE_TYPE:yn,Flag:Ws,FlagGroup:ju,Flagpole:Li,Wind:Ya,applyGravityToCloth:$u,applyWindForceToCloth:nd,buildFlag:sd,buildFlagpole:ud},Symbol.toStringTag,{value:"Module"}));const Xa="179",ss={ROTATE:0,DOLLY:1,PAN:2},rs={ROTATE:0,PAN:1,DOLLY_PAN:2,DOLLY_ROTATE:3},dd=0,wh=1,fd=2,Rh=1,gd=2,Oi=3,en=0,Ue=1,Fi=2,nn=0,as=1,Ph=2,Dh=3,Lh=4,pd=5,Mn=100,md=101,Cd=102,Id=103,vd=104,xd=200,Ed=201,Sd=202,yd=203,Za=204,ja=205,Md=206,bd=207,_d=208,Td=209,wd=210,Rd=211,Pd=212,Dd=213,Ld=214,Ja=0,Qa=1,qa=2,os=3,Ka=4,$a=5,to=6,eo=7,Nh=0,Nd=1,Od=2,sn=0,Fd=1,Bd=2,Ud=3,zd=4,kd=5,Gd=6,Hd=7,Oh=300,ls=301,hs=302,io=303,no=304,Pr=306,so=1e3,bn=1001,ro=1002,ui=1003,Vd=1004,Dr=1005,vi=1006,ao=1007,_n=1008,xi=1009,Fh=1010,Bh=1011,Zs=1012,oo=1013,Tn=1014,Bi=1015,js=1016,lo=1017,ho=1018,Js=1020,Uh=35902,zh=1021,kh=1022,di=1023,Qs=1026,qs=1027,Gh=1028,Ao=1029,Hh=1030,co=1031,uo=1033,Lr=33776,Nr=33777,Or=33778,Fr=33779,fo=35840,go=35841,po=35842,mo=35843,Co=36196,Io=37492,vo=37496,xo=37808,Eo=37809,So=37810,yo=37811,Mo=37812,bo=37813,_o=37814,To=37815,wo=37816,Ro=37817,Po=37818,Do=37819,Lo=37820,No=37821,Br=36492,Oo=36494,Fo=36495,Vh=36283,Bo=36284,Uo=36285,zo=36286,Wd=3200,Yd=3201,Wh=0,Xd=1,rn="",Pe="srgb",As="srgb-linear",Ur="linear",qt="srgb",cs=7680,Yh=519,Zd=512,jd=513,Jd=514,Xh=515,Qd=516,qd=517,Kd=518,$d=519,Zh=35044,jh="300 es",Ei=2e3,zr=2001;class wn{addEventListener(t,e){this._listeners===void 0&&(this._listeners={});const i=this._listeners;i[t]===void 0&&(i[t]=[]),i[t].indexOf(e)===-1&&i[t].push(e)}hasEventListener(t,e){const i=this._listeners;return i===void 0?!1:i[t]!==void 0&&i[t].indexOf(e)!==-1}removeEventListener(t,e){const i=this._listeners;if(i===void 0)return;const n=i[t];if(n!==void 0){const r=n.indexOf(e);r!==-1&&n.splice(r,1)}}dispatchEvent(t){const e=this._listeners;if(e===void 0)return;const i=e[t.type];if(i!==void 0){t.target=this;const n=i.slice(0);for(let r=0,a=n.length;r<a;r++)n[r].call(this,t);t.target=null}}}const Te=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"],kr=Math.PI/180,Gr=180/Math.PI;function Ks(){const s=Math.random()*4294967295|0,t=Math.random()*4294967295|0,e=Math.random()*4294967295|0,i=Math.random()*4294967295|0;return(Te[s&255]+Te[s>>8&255]+Te[s>>16&255]+Te[s>>24&255]+"-"+Te[t&255]+Te[t>>8&255]+"-"+Te[t>>16&15|64]+Te[t>>24&255]+"-"+Te[e&63|128]+Te[e>>8&255]+"-"+Te[e>>16&255]+Te[e>>24&255]+Te[i&255]+Te[i>>8&255]+Te[i>>16&255]+Te[i>>24&255]).toLowerCase()}function kt(s,t,e){return Math.max(t,Math.min(e,s))}function tf(s,t){return(s%t+t)%t}function ko(s,t,e){return(1-e)*s+e*t}function $s(s,t){switch(t.constructor){case Float32Array:return s;case Uint32Array:return s/4294967295;case Uint16Array:return s/65535;case Uint8Array:return s/255;case Int32Array:return Math.max(s/2147483647,-1);case Int16Array:return Math.max(s/32767,-1);case Int8Array:return Math.max(s/127,-1);default:throw new Error("Invalid component type.")}}function ze(s,t){switch(t.constructor){case Float32Array:return s;case Uint32Array:return Math.round(s*4294967295);case Uint16Array:return Math.round(s*65535);case Uint8Array:return Math.round(s*255);case Int32Array:return Math.round(s*2147483647);case Int16Array:return Math.round(s*32767);case Int8Array:return Math.round(s*127);default:throw new Error("Invalid component type.")}}const ef={DEG2RAD:kr};class Nt{constructor(t=0,e=0){Nt.prototype.isVector2=!0,this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(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)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t){return this.x+=t.x,this.y+=t.y,this}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const e=this.x,i=this.y,n=t.elements;return this.x=n[0]*e+n[3]*i+n[6],this.y=n[1]*e+n[4]*i+n[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=kt(this.x,t.x,e.x),this.y=kt(this.y,t.y,e.y),this}clampScalar(t,e){return this.x=kt(this.x,t,e),this.y=kt(this.y,t,e),this}clampLength(t,e){const i=this.length();return this.divideScalar(i||1).multiplyScalar(kt(i,t,e))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(e===0)return Math.PI/2;const i=this.dot(t)/e;return Math.acos(kt(i,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,i=this.y-t.y;return e*e+i*i}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,i){return this.x=t.x+(e.x-t.x)*i,this.y=t.y+(e.y-t.y)*i,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){const i=Math.cos(e),n=Math.sin(e),r=this.x-t.x,a=this.y-t.y;return this.x=r*i-a*n+t.x,this.y=r*n+a*i+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}class Rn{constructor(t=0,e=0,i=0,n=1){this.isQuaternion=!0,this._x=t,this._y=e,this._z=i,this._w=n}static slerpFlat(t,e,i,n,r,a,o){let h=i[n+0],l=i[n+1],A=i[n+2],c=i[n+3];const u=r[a+0],d=r[a+1],p=r[a+2],m=r[a+3];if(o===0){t[e+0]=h,t[e+1]=l,t[e+2]=A,t[e+3]=c;return}if(o===1){t[e+0]=u,t[e+1]=d,t[e+2]=p,t[e+3]=m;return}if(c!==m||h!==u||l!==d||A!==p){let g=1-o;const f=h*u+l*d+A*p+c*m,M=f>=0?1:-1,S=1-f*f;if(S>Number.EPSILON){const T=Math.sqrt(S),_=Math.atan2(T,f*M);g=Math.sin(g*_)/T,o=Math.sin(o*_)/T}const v=o*M;if(h=h*g+u*v,l=l*g+d*v,A=A*g+p*v,c=c*g+m*v,g===1-o){const T=1/Math.sqrt(h*h+l*l+A*A+c*c);h*=T,l*=T,A*=T,c*=T}}t[e]=h,t[e+1]=l,t[e+2]=A,t[e+3]=c}static multiplyQuaternionsFlat(t,e,i,n,r,a){const o=i[n],h=i[n+1],l=i[n+2],A=i[n+3],c=r[a],u=r[a+1],d=r[a+2],p=r[a+3];return t[e]=o*p+A*c+h*d-l*u,t[e+1]=h*p+A*u+l*c-o*d,t[e+2]=l*p+A*d+o*u-h*c,t[e+3]=A*p-o*c-h*u-l*d,t}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 w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,i,n){return this._x=t,this._y=e,this._z=i,this._w=n,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e=!0){const i=t._x,n=t._y,r=t._z,a=t._order,o=Math.cos,h=Math.sin,l=o(i/2),A=o(n/2),c=o(r/2),u=h(i/2),d=h(n/2),p=h(r/2);switch(a){case"XYZ":this._x=u*A*c+l*d*p,this._y=l*d*c-u*A*p,this._z=l*A*p+u*d*c,this._w=l*A*c-u*d*p;break;case"YXZ":this._x=u*A*c+l*d*p,this._y=l*d*c-u*A*p,this._z=l*A*p-u*d*c,this._w=l*A*c+u*d*p;break;case"ZXY":this._x=u*A*c-l*d*p,this._y=l*d*c+u*A*p,this._z=l*A*p+u*d*c,this._w=l*A*c-u*d*p;break;case"ZYX":this._x=u*A*c-l*d*p,this._y=l*d*c+u*A*p,this._z=l*A*p-u*d*c,this._w=l*A*c+u*d*p;break;case"YZX":this._x=u*A*c+l*d*p,this._y=l*d*c+u*A*p,this._z=l*A*p-u*d*c,this._w=l*A*c-u*d*p;break;case"XZY":this._x=u*A*c-l*d*p,this._y=l*d*c-u*A*p,this._z=l*A*p+u*d*c,this._w=l*A*c+u*d*p;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+a)}return e===!0&&this._onChangeCallback(),this}setFromAxisAngle(t,e){const i=e/2,n=Math.sin(i);return this._x=t.x*n,this._y=t.y*n,this._z=t.z*n,this._w=Math.cos(i),this._onChangeCallback(),this}setFromRotationMatrix(t){const e=t.elements,i=e[0],n=e[4],r=e[8],a=e[1],o=e[5],h=e[9],l=e[2],A=e[6],c=e[10],u=i+o+c;if(u>0){const d=.5/Math.sqrt(u+1);this._w=.25/d,this._x=(A-h)*d,this._y=(r-l)*d,this._z=(a-n)*d}else if(i>o&&i>c){const d=2*Math.sqrt(1+i-o-c);this._w=(A-h)/d,this._x=.25*d,this._y=(n+a)/d,this._z=(r+l)/d}else if(o>c){const d=2*Math.sqrt(1+o-i-c);this._w=(r-l)/d,this._x=(n+a)/d,this._y=.25*d,this._z=(h+A)/d}else{const d=2*Math.sqrt(1+c-i-o);this._w=(a-n)/d,this._x=(r+l)/d,this._y=(h+A)/d,this._z=.25*d}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let i=t.dot(e)+1;return i<1e-8?(i=0,Math.abs(t.x)>Math.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=i):(this._x=0,this._y=-t.z,this._z=t.y,this._w=i)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=i),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(kt(this.dot(t),-1,1)))}rotateTowards(t,e){const i=this.angleTo(t);if(i===0)return this;const n=Math.min(1,e/i);return this.slerp(t,n),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let t=this.length();return t===0?(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(t){return this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){const i=t._x,n=t._y,r=t._z,a=t._w,o=e._x,h=e._y,l=e._z,A=e._w;return this._x=i*A+a*o+n*l-r*h,this._y=n*A+a*h+r*o-i*l,this._z=r*A+a*l+i*h-n*o,this._w=a*A-i*o-n*h-r*l,this._onChangeCallback(),this}slerp(t,e){if(e===0)return this;if(e===1)return this.copy(t);const i=this._x,n=this._y,r=this._z,a=this._w;let o=a*t._w+i*t._x+n*t._y+r*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=i,this._y=n,this._z=r,this;const h=1-o*o;if(h<=Number.EPSILON){const d=1-e;return this._w=d*a+e*this._w,this._x=d*i+e*this._x,this._y=d*n+e*this._y,this._z=d*r+e*this._z,this.normalize(),this}const l=Math.sqrt(h),A=Math.atan2(l,o),c=Math.sin((1-e)*A)/l,u=Math.sin(e*A)/l;return this._w=a*c+this._w*u,this._x=i*c+this._x*u,this._y=n*c+this._y*u,this._z=r*c+this._z*u,this._onChangeCallback(),this}slerpQuaternions(t,e,i){return this.copy(t).slerp(e,i)}random(){const t=2*Math.PI*Math.random(),e=2*Math.PI*Math.random(),i=Math.random(),n=Math.sqrt(1-i),r=Math.sqrt(i);return this.set(n*Math.sin(t),n*Math.cos(t),r*Math.sin(e),r*Math.cos(e))}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}class O{constructor(t=0,e=0,i=0){O.prototype.isVector3=!0,this.x=t,this.y=e,this.z=i}set(t,e,i){return i===void 0&&(i=this.z),this.x=t,this.y=e,this.z=i,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(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)}return this}getComponent(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)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return this.applyQuaternion(Jh.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(Jh.setFromAxisAngle(t,e))}applyMatrix3(t){const e=this.x,i=this.y,n=this.z,r=t.elements;return this.x=r[0]*e+r[3]*i+r[6]*n,this.y=r[1]*e+r[4]*i+r[7]*n,this.z=r[2]*e+r[5]*i+r[8]*n,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const e=this.x,i=this.y,n=this.z,r=t.elements,a=1/(r[3]*e+r[7]*i+r[11]*n+r[15]);return this.x=(r[0]*e+r[4]*i+r[8]*n+r[12])*a,this.y=(r[1]*e+r[5]*i+r[9]*n+r[13])*a,this.z=(r[2]*e+r[6]*i+r[10]*n+r[14])*a,this}applyQuaternion(t){const e=this.x,i=this.y,n=this.z,r=t.x,a=t.y,o=t.z,h=t.w,l=2*(a*n-o*i),A=2*(o*e-r*n),c=2*(r*i-a*e);return this.x=e+h*l+a*c-o*A,this.y=i+h*A+o*l-r*c,this.z=n+h*c+r*A-a*l,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const e=this.x,i=this.y,n=this.z,r=t.elements;return this.x=r[0]*e+r[4]*i+r[8]*n,this.y=r[1]*e+r[5]*i+r[9]*n,this.z=r[2]*e+r[6]*i+r[10]*n,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=kt(this.x,t.x,e.x),this.y=kt(this.y,t.y,e.y),this.z=kt(this.z,t.z,e.z),this}clampScalar(t,e){return this.x=kt(this.x,t,e),this.y=kt(this.y,t,e),this.z=kt(this.z,t,e),this}clampLength(t,e){const i=this.length();return this.divideScalar(i||1).multiplyScalar(kt(i,t,e))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(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}lerpVectors(t,e,i){return this.x=t.x+(e.x-t.x)*i,this.y=t.y+(e.y-t.y)*i,this.z=t.z+(e.z-t.z)*i,this}cross(t){return this.crossVectors(this,t)}crossVectors(t,e){const i=t.x,n=t.y,r=t.z,a=e.x,o=e.y,h=e.z;return this.x=n*h-r*o,this.y=r*a-i*h,this.z=i*o-n*a,this}projectOnVector(t){const e=t.lengthSq();if(e===0)return this.set(0,0,0);const i=t.dot(this)/e;return this.copy(t).multiplyScalar(i)}projectOnPlane(t){return Go.copy(this).projectOnVector(t),this.sub(Go)}reflect(t){return this.sub(Go.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(e===0)return Math.PI/2;const i=this.dot(t)/e;return Math.acos(kt(i,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,i=this.y-t.y,n=this.z-t.z;return e*e+i*i+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,i){const n=Math.sin(e)*t;return this.x=n*Math.sin(i),this.y=Math.cos(e)*t,this.z=n*Math.cos(i),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,i){return this.x=t*Math.sin(e),this.y=i,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){const e=this.setFromMatrixColumn(t,0).length(),i=this.setFromMatrixColumn(t,1).length(),n=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=i,this.z=n,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,e*4)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,e*3)}setFromEuler(t){return this.x=t._x,this.y=t._y,this.z=t._z,this}setFromColor(t){return this.x=t.r,this.y=t.g,this.z=t.b,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const t=Math.random()*Math.PI*2,e=Math.random()*2-1,i=Math.sqrt(1-e*e);return this.x=i*Math.cos(t),this.y=e,this.z=i*Math.sin(t),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}const Go=new O,Jh=new Rn;class Ot{constructor(t,e,i,n,r,a,o,h,l){Ot.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],t!==void 0&&this.set(t,e,i,n,r,a,o,h,l)}set(t,e,i,n,r,a,o,h,l){const A=this.elements;return A[0]=t,A[1]=n,A[2]=o,A[3]=e,A[4]=r,A[5]=h,A[6]=i,A[7]=a,A[8]=l,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){const e=this.elements,i=t.elements;return e[0]=i[0],e[1]=i[1],e[2]=i[2],e[3]=i[3],e[4]=i[4],e[5]=i[5],e[6]=i[6],e[7]=i[7],e[8]=i[8],this}extractBasis(t,e,i){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),i.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const i=t.elements,n=e.elements,r=this.elements,a=i[0],o=i[3],h=i[6],l=i[1],A=i[4],c=i[7],u=i[2],d=i[5],p=i[8],m=n[0],g=n[3],f=n[6],M=n[1],S=n[4],v=n[7],T=n[2],_=n[5],w=n[8];return r[0]=a*m+o*M+h*T,r[3]=a*g+o*S+h*_,r[6]=a*f+o*v+h*w,r[1]=l*m+A*M+c*T,r[4]=l*g+A*S+c*_,r[7]=l*f+A*v+c*w,r[2]=u*m+d*M+p*T,r[5]=u*g+d*S+p*_,r[8]=u*f+d*v+p*w,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){const t=this.elements,e=t[0],i=t[1],n=t[2],r=t[3],a=t[4],o=t[5],h=t[6],l=t[7],A=t[8];return e*a*A-e*o*l-i*r*A+i*o*h+n*r*l-n*a*h}invert(){const t=this.elements,e=t[0],i=t[1],n=t[2],r=t[3],a=t[4],o=t[5],h=t[6],l=t[7],A=t[8],c=A*a-o*l,u=o*h-A*r,d=l*r-a*h,p=e*c+i*u+n*d;if(p===0)return this.set(0,0,0,0,0,0,0,0,0);const m=1/p;return t[0]=c*m,t[1]=(n*l-A*i)*m,t[2]=(o*i-n*a)*m,t[3]=u*m,t[4]=(A*e-n*h)*m,t[5]=(n*r-o*e)*m,t[6]=d*m,t[7]=(i*h-l*e)*m,t[8]=(a*e-i*r)*m,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){const e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,i,n,r,a,o){const h=Math.cos(r),l=Math.sin(r);return this.set(i*h,i*l,-i*(h*a+l*o)+a+t,-n*l,n*h,-n*(-l*a+h*o)+o+e,0,0,1),this}scale(t,e){return this.premultiply(Ho.makeScale(t,e)),this}rotate(t){return this.premultiply(Ho.makeRotation(-t)),this}translate(t,e){return this.premultiply(Ho.makeTranslation(t,e)),this}makeTranslation(t,e){return t.isVector2?this.set(1,0,t.x,0,1,t.y,0,0,1):this.set(1,0,t,0,1,e,0,0,1),this}makeRotation(t){const e=Math.cos(t),i=Math.sin(t);return this.set(e,-i,0,i,e,0,0,0,1),this}makeScale(t,e){return this.set(t,0,0,0,e,0,0,0,1),this}equals(t){const e=this.elements,i=t.elements;for(let n=0;n<9;n++)if(e[n]!==i[n])return!1;return!0}fromArray(t,e=0){for(let i=0;i<9;i++)this.elements[i]=t[i+e];return this}toArray(t=[],e=0){const i=this.elements;return t[e]=i[0],t[e+1]=i[1],t[e+2]=i[2],t[e+3]=i[3],t[e+4]=i[4],t[e+5]=i[5],t[e+6]=i[6],t[e+7]=i[7],t[e+8]=i[8],t}clone(){return new this.constructor().fromArray(this.elements)}}const Ho=new Ot;function Qh(s){for(let t=s.length-1;t>=0;--t)if(s[t]>=65535)return!0;return!1}function tr(s){return document.createElementNS("http://www.w3.org/1999/xhtml",s)}function nf(){const s=tr("canvas");return s.style.display="block",s}const qh={};function us(s){s in qh||(qh[s]=!0,console.warn(s))}function sf(s,t,e){return new Promise(function(i,n){function r(){switch(s.clientWaitSync(t,s.SYNC_FLUSH_COMMANDS_BIT,0)){case s.WAIT_FAILED:n();break;case s.TIMEOUT_EXPIRED:setTimeout(r,e);break;default:i()}}setTimeout(r,e)})}const Kh=new Ot().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),$h=new Ot().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function rf(){const s={enabled:!0,workingColorSpace:As,spaces:{},convert:function(n,r,a){return this.enabled===!1||r===a||!r||!a||(this.spaces[r].transfer===qt&&(n.r=Ui(n.r),n.g=Ui(n.g),n.b=Ui(n.b)),this.spaces[r].primaries!==this.spaces[a].primaries&&(n.applyMatrix3(this.spaces[r].toXYZ),n.applyMatrix3(this.spaces[a].fromXYZ)),this.spaces[a].transfer===qt&&(n.r=ds(n.r),n.g=ds(n.g),n.b=ds(n.b))),n},workingToColorSpace:function(n,r){return this.convert(n,this.workingColorSpace,r)},colorSpaceToWorking:function(n,r){return this.convert(n,r,this.workingColorSpace)},getPrimaries:function(n){return this.spaces[n].primaries},getTransfer:function(n){return n===rn?Ur:this.spaces[n].transfer},getLuminanceCoefficients:function(n,r=this.workingColorSpace){return n.fromArray(this.spaces[r].luminanceCoefficients)},define:function(n){Object.assign(this.spaces,n)},_getMatrix:function(n,r,a){return n.copy(this.spaces[r].toXYZ).multiply(this.spaces[a].fromXYZ)},_getDrawingBufferColorSpace:function(n){return this.spaces[n].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(n=this.workingColorSpace){return this.spaces[n].workingColorSpaceConfig.unpackColorSpace},fromWorkingColorSpace:function(n,r){return us("THREE.ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace()."),s.workingToColorSpace(n,r)},toWorkingColorSpace:function(n,r){return us("THREE.ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking()."),s.colorSpaceToWorking(n,r)}},t=[.64,.33,.3,.6,.15,.06],e=[.2126,.7152,.0722],i=[.3127,.329];return s.define({[As]:{primaries:t,whitePoint:i,transfer:Ur,toXYZ:Kh,fromXYZ:$h,luminanceCoefficients:e,workingColorSpaceConfig:{unpackColorSpace:Pe},outputColorSpaceConfig:{drawingBufferColorSpace:Pe}},[Pe]:{primaries:t,whitePoint:i,transfer:qt,toXYZ:Kh,fromXYZ:$h,luminanceCoefficients:e,outputColorSpaceConfig:{drawingBufferColorSpace:Pe}}}),s}const Xt=rf();function Ui(s){return s<.04045?s*.0773993808:Math.pow(s*.9478672986+.0521327014,2.4)}function ds(s){return s<.0031308?s*12.92:1.055*Math.pow(s,.41666)-.055}let fs;class af{static getDataURL(t,e="image/png"){if(/^data:/i.test(t.src)||typeof HTMLCanvasElement>"u")return t.src;let i;if(t instanceof HTMLCanvasElement)i=t;else{fs===void 0&&(fs=tr("canvas")),fs.width=t.width,fs.height=t.height;const n=fs.getContext("2d");t instanceof ImageData?n.putImageData(t,0,0):n.drawImage(t,0,0,t.width,t.height),i=fs}return i.toDataURL(e)}static sRGBToLinear(t){if(typeof HTMLImageElement<"u"&&t instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&t instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&t instanceof ImageBitmap){const e=tr("canvas");e.width=t.width,e.height=t.height;const i=e.getContext("2d");i.drawImage(t,0,0,t.width,t.height);const n=i.getImageData(0,0,t.width,t.height),r=n.data;for(let a=0;a<r.length;a++)r[a]=Ui(r[a]/255)*255;return i.putImageData(n,0,0),e}else if(t.data){const e=t.data.slice(0);for(let i=0;i<e.length;i++)e instanceof Uint8Array||e instanceof Uint8ClampedArray?e[i]=Math.floor(Ui(e[i]/255)*255):e[i]=Ui(e[i]);return{data:e,width:t.width,height:t.height}}else return console.warn("THREE.ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied."),t}}let of=0;class Vo{constructor(t=null){this.isSource=!0,Object.defineProperty(this,"id",{value:of++}),this.uuid=Ks(),this.data=t,this.dataReady=!0,this.version=0}getSize(t){const e=this.data;return e instanceof HTMLVideoElement?t.set(e.videoWidth,e.videoHeight,0):e instanceof VideoFrame?t.set(e.displayHeight,e.displayWidth,0):e!==null?t.set(e.width,e.height,e.depth||0):t.set(0,0,0),t}set needsUpdate(t){t===!0&&this.version++}toJSON(t){const e=t===void 0||typeof t=="string";if(!e&&t.images[this.uuid]!==void 0)return t.images[this.uuid];const i={uuid:this.uuid,url:""},n=this.data;if(n!==null){let r;if(Array.isArray(n)){r=[];for(let a=0,o=n.length;a<o;a++)n[a].isDataTexture?r.push(Wo(n[a].image)):r.push(Wo(n[a]))}else r=Wo(n);i.url=r}return e||(t.images[this.uuid]=i),i}}function Wo(s){return typeof HTMLImageElement<"u"&&s instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&s instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&s instanceof ImageBitmap?af.getDataURL(s):s.data?{data:Array.from(s.data),width:s.width,height:s.height,type:s.data.constructor.name}:(console.warn("THREE.Texture: Unable to serialize Texture."),{})}let lf=0;const Yo=new O;class we extends wn{constructor(t=we.DEFAULT_IMAGE,e=we.DEFAULT_MAPPING,i=bn,n=bn,r=vi,a=_n,o=di,h=xi,l=we.DEFAULT_ANISOTROPY,A=rn){super(),this.isTexture=!0,Object.defineProperty(this,"id",{value:lf++}),this.uuid=Ks(),this.name="",this.source=new Vo(t),this.mipmaps=[],this.mapping=e,this.channel=0,this.wrapS=i,this.wrapT=n,this.magFilter=r,this.minFilter=a,this.anisotropy=l,this.format=o,this.internalFormat=null,this.type=h,this.offset=new Nt(0,0),this.repeat=new Nt(1,1),this.center=new Nt(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new Ot,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.colorSpace=A,this.userData={},this.updateRanges=[],this.version=0,this.onUpdate=null,this.renderTarget=null,this.isRenderTargetTexture=!1,this.isArrayTexture=!!(t&&t.depth&&t.depth>1),this.pmremVersion=0}get width(){return this.source.getSize(Yo).x}get height(){return this.source.getSize(Yo).y}get depth(){return this.source.getSize(Yo).z}get image(){return this.source.data}set image(t=null){this.source.data=t}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}addUpdateRange(t,e){this.updateRanges.push({start:t,count:e})}clearUpdateRanges(){this.updateRanges.length=0}clone(){return new this.constructor().copy(this)}copy(t){return this.name=t.name,this.source=t.source,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.channel=t.channel,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.internalFormat=t.internalFormat,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.colorSpace=t.colorSpace,this.renderTarget=t.renderTarget,this.isRenderTargetTexture=t.isRenderTargetTexture,this.isArrayTexture=t.isArrayTexture,this.userData=JSON.parse(JSON.stringify(t.userData)),this.needsUpdate=!0,this}setValues(t){for(const e in t){const i=t[e];if(i===void 0){console.warn(`THREE.Texture.setValues(): parameter '${e}' has value of undefined.`);continue}const n=this[e];if(n===void 0){console.warn(`THREE.Texture.setValues(): property '${e}' does not exist.`);continue}n&&i&&n.isVector2&&i.isVector2||n&&i&&n.isVector3&&i.isVector3||n&&i&&n.isMatrix3&&i.isMatrix3?n.copy(i):this[e]=i}}toJSON(t){const e=t===void 0||typeof t=="string";if(!e&&t.textures[this.uuid]!==void 0)return t.textures[this.uuid];const i={metadata:{version:4.7,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,image:this.source.toJSON(t).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(i.userData=this.userData),e||(t.textures[this.uuid]=i),i}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(t){if(this.mapping!==Oh)return t;if(t.applyMatrix3(this.matrix),t.x<0||t.x>1)switch(this.wrapS){case so:t.x=t.x-Math.floor(t.x);break;case bn:t.x=t.x<0?0:1;break;case ro:Math.abs(Math.floor(t.x)%2)===1?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x);break}if(t.y<0||t.y>1)switch(this.wrapT){case so:t.y=t.y-Math.floor(t.y);break;case bn:t.y=t.y<0?0:1;break;case ro:Math.abs(Math.floor(t.y)%2)===1?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y);break}return this.flipY&&(t.y=1-t.y),t}set needsUpdate(t){t===!0&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(t){t===!0&&this.pmremVersion++}}we.DEFAULT_IMAGE=null,we.DEFAULT_MAPPING=Oh,we.DEFAULT_ANISOTROPY=1;class ce{constructor(t=0,e=0,i=0,n=1){ce.prototype.isVector4=!0,this.x=t,this.y=e,this.z=i,this.w=n}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,i,n){return this.x=t,this.y=e,this.z=i,this.w=n,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(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)}return this}getComponent(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)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=t.w!==void 0?t.w:1,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(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}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(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}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const e=this.x,i=this.y,n=this.z,r=this.w,a=t.elements;return this.x=a[0]*e+a[4]*i+a[8]*n+a[12]*r,this.y=a[1]*e+a[5]*i+a[9]*n+a[13]*r,this.z=a[2]*e+a[6]*i+a[10]*n+a[14]*r,this.w=a[3]*e+a[7]*i+a[11]*n+a[15]*r,this}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this.w/=t.w,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const 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(t){let e,i,n,r;const h=t.elements,l=h[0],A=h[4],c=h[8],u=h[1],d=h[5],p=h[9],m=h[2],g=h[6],f=h[10];if(Math.abs(A-u)<.01&&Math.abs(c-m)<.01&&Math.abs(p-g)<.01){if(Math.abs(A+u)<.1&&Math.abs(c+m)<.1&&Math.abs(p+g)<.1&&Math.abs(l+d+f-3)<.1)return this.set(1,0,0,0),this;e=Math.PI;const S=(l+1)/2,v=(d+1)/2,T=(f+1)/2,_=(A+u)/4,w=(c+m)/4,P=(p+g)/4;return S>v&&S>T?S<.01?(i=0,n=.707106781,r=.707106781):(i=Math.sqrt(S),n=_/i,r=w/i):v>T?v<.01?(i=.707106781,n=0,r=.707106781):(n=Math.sqrt(v),i=_/n,r=P/n):T<.01?(i=.707106781,n=.707106781,r=0):(r=Math.sqrt(T),i=w/r,n=P/r),this.set(i,n,r,e),this}let M=Math.sqrt((g-p)*(g-p)+(c-m)*(c-m)+(u-A)*(u-A));return Math.abs(M)<.001&&(M=1),this.x=(g-p)/M,this.y=(c-m)/M,this.z=(u-A)/M,this.w=Math.acos((l+d+f-1)/2),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this.w=e[15],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this.w=Math.min(this.w,t.w),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this.w=Math.max(this.w,t.w),this}clamp(t,e){return this.x=kt(this.x,t.x,e.x),this.y=kt(this.y,t.y,e.y),this.z=kt(this.z,t.z,e.z),this.w=kt(this.w,t.w,e.w),this}clampScalar(t,e){return this.x=kt(this.x,t,e),this.y=kt(this.y,t,e),this.z=kt(this.z,t,e),this.w=kt(this.w,t,e),this}clampLength(t,e){const i=this.length();return this.divideScalar(i||1).multiplyScalar(kt(i,t,e))}floor(){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(){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(){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(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this.w=Math.trunc(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(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}lerpVectors(t,e,i){return this.x=t.x+(e.x-t.x)*i,this.y=t.y+(e.y-t.y)*i,this.z=t.z+(e.z-t.z)*i,this.w=t.w+(e.w-t.w)*i,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z&&t.w===this.w}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this.w=t[e+3],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t[e+3]=this.w,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this.w=t.getW(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}}class hf extends wn{constructor(t=1,e=1,i={}){super(),i=Object.assign({generateMipmaps:!1,internalFormat:null,minFilter:vi,depthBuffer:!0,stencilBuffer:!1,resolveDepthBuffer:!0,resolveStencilBuffer:!0,depthTexture:null,samples:0,count:1,depth:1,multiview:!1},i),this.isRenderTarget=!0,this.width=t,this.height=e,this.depth=i.depth,this.scissor=new ce(0,0,t,e),this.scissorTest=!1,this.viewport=new ce(0,0,t,e);const n={width:t,height:e,depth:i.depth},r=new we(n);this.textures=[];const a=i.count;for(let o=0;o<a;o++)this.textures[o]=r.clone(),this.textures[o].isRenderTargetTexture=!0,this.textures[o].renderTarget=this;this._setTextureOptions(i),this.depthBuffer=i.depthBuffer,this.stencilBuffer=i.stencilBuffer,this.resolveDepthBuffer=i.resolveDepthBuffer,this.resolveStencilBuffer=i.resolveStencilBuffer,this._depthTexture=null,this.depthTexture=i.depthTexture,this.samples=i.samples,this.multiview=i.multiview}_setTextureOptions(t={}){const e={minFilter:vi,generateMipmaps:!1,flipY:!1,internalFormat:null};t.mapping!==void 0&&(e.mapping=t.mapping),t.wrapS!==void 0&&(e.wrapS=t.wrapS),t.wrapT!==void 0&&(e.wrapT=t.wrapT),t.wrapR!==void 0&&(e.wrapR=t.wrapR),t.magFilter!==void 0&&(e.magFilter=t.magFilter),t.minFilter!==void 0&&(e.minFilter=t.minFilter),t.format!==void 0&&(e.format=t.format),t.type!==void 0&&(e.type=t.type),t.anisotropy!==void 0&&(e.anisotropy=t.anisotropy),t.colorSpace!==void 0&&(e.colorSpace=t.colorSpace),t.flipY!==void 0&&(e.flipY=t.flipY),t.generateMipmaps!==void 0&&(e.generateMipmaps=t.generateMipmaps),t.internalFormat!==void 0&&(e.internalFormat=t.internalFormat);for(let i=0;i<this.textures.length;i++)this.textures[i].setValues(e)}get texture(){return this.textures[0]}set texture(t){this.textures[0]=t}set depthTexture(t){this._depthTexture!==null&&(this._depthTexture.renderTarget=null),t!==null&&(t.renderTarget=this),this._depthTexture=t}get depthTexture(){return this._depthTexture}setSize(t,e,i=1){if(this.width!==t||this.height!==e||this.depth!==i){this.width=t,this.height=e,this.depth=i;for(let n=0,r=this.textures.length;n<r;n++)this.textures[n].image.width=t,this.textures[n].image.height=e,this.textures[n].image.depth=i,this.textures[n].isArrayTexture=this.textures[n].image.depth>1;this.dispose()}this.viewport.set(0,0,t,e),this.scissor.set(0,0,t,e)}clone(){return new this.constructor().copy(this)}copy(t){this.width=t.width,this.height=t.height,this.depth=t.depth,this.scissor.copy(t.scissor),this.scissorTest=t.scissorTest,this.viewport.copy(t.viewport),this.textures.length=0;for(let e=0,i=t.textures.length;e<i;e++){this.textures[e]=t.textures[e].clone(),this.textures[e].isRenderTargetTexture=!0,this.textures[e].renderTarget=this;const n=Object.assign({},t.textures[e].image);this.textures[e].source=new Vo(n)}return this.depthBuffer=t.depthBuffer,this.stencilBuffer=t.stencilBuffer,this.resolveDepthBuffer=t.resolveDepthBuffer,this.resolveStencilBuffer=t.resolveStencilBuffer,t.depthTexture!==null&&(this.depthTexture=t.depthTexture.clone()),this.samples=t.samples,this}dispose(){this.dispatchEvent({type:"dispose"})}}class Pn extends hf{constructor(t=1,e=1,i={}){super(t,e,i),this.isWebGLRenderTarget=!0}}class tA extends we{constructor(t=null,e=1,i=1,n=1){super(null),this.isDataArrayTexture=!0,this.image={data:t,width:e,height:i,depth:n},this.magFilter=ui,this.minFilter=ui,this.wrapR=bn,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.layerUpdates=new Set}addLayerUpdate(t){this.layerUpdates.add(t)}clearLayerUpdates(){this.layerUpdates.clear()}}class Af extends we{constructor(t=null,e=1,i=1,n=1){super(null),this.isData3DTexture=!0,this.image={data:t,width:e,height:i,depth:n},this.magFilter=ui,this.minFilter=ui,this.wrapR=bn,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}}class gs{constructor(t=new O(1/0,1/0,1/0),e=new O(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=t,this.max=e}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){this.makeEmpty();for(let e=0,i=t.length;e<i;e+=3)this.expandByPoint(fi.fromArray(t,e));return this}setFromBufferAttribute(t){this.makeEmpty();for(let e=0,i=t.count;e<i;e++)this.expandByPoint(fi.fromBufferAttribute(t,e));return this}setFromPoints(t){this.makeEmpty();for(let e=0,i=t.length;e<i;e++)this.expandByPoint(t[e]);return this}setFromCenterAndSize(t,e){const i=fi.copy(e).multiplyScalar(.5);return this.min.copy(t).sub(i),this.max.copy(t).add(i),this}setFromObject(t,e=!1){return this.makeEmpty(),this.expandByObject(t,e)}clone(){return new this.constructor().copy(this)}copy(t){return this.min.copy(t.min),this.max.copy(t.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z}getCenter(t){return this.isEmpty()?t.set(0,0,0):t.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(t){return this.isEmpty()?t.set(0,0,0):t.subVectors(this.max,this.min)}expandByPoint(t){return this.min.min(t),this.max.max(t),this}expandByVector(t){return this.min.sub(t),this.max.add(t),this}expandByScalar(t){return this.min.addScalar(-t),this.max.addScalar(t),this}expandByObject(t,e=!1){t.updateWorldMatrix(!1,!1);const i=t.geometry;if(i!==void 0){const r=i.getAttribute("position");if(e===!0&&r!==void 0&&t.isInstancedMesh!==!0)for(let a=0,o=r.count;a<o;a++)t.isMesh===!0?t.getVertexPosition(a,fi):fi.fromBufferAttribute(r,a),fi.applyMatrix4(t.matrixWorld),this.expandByPoint(fi);else t.boundingBox!==void 0?(t.boundingBox===null&&t.computeBoundingBox(),Hr.copy(t.boundingBox)):(i.boundingBox===null&&i.computeBoundingBox(),Hr.copy(i.boundingBox)),Hr.applyMatrix4(t.matrixWorld),this.union(Hr)}const n=t.children;for(let r=0,a=n.length;r<a;r++)this.expandByObject(n[r],e);return this}containsPoint(t){return t.x>=this.min.x&&t.x<=this.max.x&&t.y>=this.min.y&&t.y<=this.max.y&&t.z>=this.min.z&&t.z<=this.max.z}containsBox(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(t,e){return e.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))}intersectsBox(t){return t.max.x>=this.min.x&&t.min.x<=this.max.x&&t.max.y>=this.min.y&&t.min.y<=this.max.y&&t.max.z>=this.min.z&&t.min.z<=this.max.z}intersectsSphere(t){return this.clampPoint(t.center,fi),fi.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,i;return t.normal.x>0?(e=t.normal.x*this.min.x,i=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,i=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,i+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,i+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,i+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,i+=t.normal.z*this.min.z),e<=-t.constant&&i>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(er),Vr.subVectors(this.max,er),ps.subVectors(t.a,er),ms.subVectors(t.b,er),Cs.subVectors(t.c,er),an.subVectors(ms,ps),on.subVectors(Cs,ms),Dn.subVectors(ps,Cs);let e=[0,-an.z,an.y,0,-on.z,on.y,0,-Dn.z,Dn.y,an.z,0,-an.x,on.z,0,-on.x,Dn.z,0,-Dn.x,-an.y,an.x,0,-on.y,on.x,0,-Dn.y,Dn.x,0];return!Xo(e,ps,ms,Cs,Vr)||(e=[1,0,0,0,1,0,0,0,1],!Xo(e,ps,ms,Cs,Vr))?!1:(Wr.crossVectors(an,on),e=[Wr.x,Wr.y,Wr.z],Xo(e,ps,ms,Cs,Vr))}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return this.clampPoint(t,fi).distanceTo(t)}getBoundingSphere(t){return this.isEmpty()?t.makeEmpty():(this.getCenter(t.center),t.radius=this.getSize(fi).length()*.5),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()?this:(zi[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),zi[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),zi[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),zi[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),zi[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),zi[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),zi[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),zi[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(zi),this)}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}toJSON(){return{min:this.min.toArray(),max:this.max.toArray()}}fromJSON(t){return this.min.fromArray(t.min),this.max.fromArray(t.max),this}}const zi=[new O,new O,new O,new O,new O,new O,new O,new O],fi=new O,Hr=new gs,ps=new O,ms=new O,Cs=new O,an=new O,on=new O,Dn=new O,er=new O,Vr=new O,Wr=new O,Ln=new O;function Xo(s,t,e,i,n){for(let r=0,a=s.length-3;r<=a;r+=3){Ln.fromArray(s,r);const o=n.x*Math.abs(Ln.x)+n.y*Math.abs(Ln.y)+n.z*Math.abs(Ln.z),h=t.dot(Ln),l=e.dot(Ln),A=i.dot(Ln);if(Math.max(-Math.max(h,l,A),Math.min(h,l,A))>o)return!1}return!0}const cf=new gs,ir=new O,Zo=new O;class jo{constructor(t=new O,e=-1){this.isSphere=!0,this.center=t,this.radius=e}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){const i=this.center;e!==void 0?i.copy(e):cf.setFromPoints(t).getCenter(i);let n=0;for(let r=0,a=t.length;r<a;r++)n=Math.max(n,i.distanceToSquared(t[r]));return this.radius=Math.sqrt(n),this}copy(t){return this.center.copy(t.center),this.radius=t.radius,this}isEmpty(){return this.radius<0}makeEmpty(){return this.center.set(0,0,0),this.radius=-1,this}containsPoint(t){return t.distanceToSquared(this.center)<=this.radius*this.radius}distanceToPoint(t){return t.distanceTo(this.center)-this.radius}intersectsSphere(t){const e=this.radius+t.radius;return t.center.distanceToSquared(this.center)<=e*e}intersectsBox(t){return t.intersectsSphere(this)}intersectsPlane(t){return Math.abs(t.distanceToPoint(this.center))<=this.radius}clampPoint(t,e){const i=this.center.distanceToSquared(t);return e.copy(t),i>this.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}expandByPoint(t){if(this.isEmpty())return this.center.copy(t),this.radius=0,this;ir.subVectors(t,this.center);const e=ir.lengthSq();if(e>this.radius*this.radius){const i=Math.sqrt(e),n=(i-this.radius)*.5;this.center.addScaledVector(ir,n/i),this.radius+=n}return this}union(t){return t.isEmpty()?this:this.isEmpty()?(this.copy(t),this):(this.center.equals(t.center)===!0?this.radius=Math.max(this.radius,t.radius):(Zo.subVectors(t.center,this.center).setLength(t.radius),this.expandByPoint(ir.copy(t.center).add(Zo)),this.expandByPoint(ir.copy(t.center).sub(Zo))),this)}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}clone(){return new this.constructor().copy(this)}toJSON(){return{radius:this.radius,center:this.center.toArray()}}fromJSON(t){return this.radius=t.radius,this.center.fromArray(t.center),this}}const ki=new O,Jo=new O,Yr=new O,ln=new O,Qo=new O,Xr=new O,qo=new O;class eA{constructor(t=new O,e=new O(0,0,-1)){this.origin=t,this.direction=e}set(t,e){return this.origin.copy(t),this.direction.copy(e),this}copy(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this}at(t,e){return e.copy(this.origin).addScaledVector(this.direction,t)}lookAt(t){return this.direction.copy(t).sub(this.origin).normalize(),this}recast(t){return this.origin.copy(this.at(t,ki)),this}closestPointToPoint(t,e){e.subVectors(t,this.origin);const i=e.dot(this.direction);return i<0?e.copy(this.origin):e.copy(this.origin).addScaledVector(this.direction,i)}distanceToPoint(t){return Math.sqrt(this.distanceSqToPoint(t))}distanceSqToPoint(t){const e=ki.subVectors(t,this.origin).dot(this.direction);return e<0?this.origin.distanceToSquared(t):(ki.copy(this.origin).addScaledVector(this.direction,e),ki.distanceToSquared(t))}distanceSqToSegment(t,e,i,n){Jo.copy(t).add(e).multiplyScalar(.5),Yr.copy(e).sub(t).normalize(),ln.copy(this.origin).sub(Jo);const r=t.distanceTo(e)*.5,a=-this.direction.dot(Yr),o=ln.dot(this.direction),h=-ln.dot(Yr),l=ln.lengthSq(),A=Math.abs(1-a*a);let c,u,d,p;if(A>0)if(c=a*h-o,u=a*o-h,p=r*A,c>=0)if(u>=-p)if(u<=p){const m=1/A;c*=m,u*=m,d=c*(c+a*u+2*o)+u*(a*c+u+2*h)+l}else u=r,c=Math.max(0,-(a*u+o)),d=-c*c+u*(u+2*h)+l;else u=-r,c=Math.max(0,-(a*u+o)),d=-c*c+u*(u+2*h)+l;else u<=-p?(c=Math.max(0,-(-a*r+o)),u=c>0?-r:Math.min(Math.max(-r,-h),r),d=-c*c+u*(u+2*h)+l):u<=p?(c=0,u=Math.min(Math.max(-r,-h),r),d=u*(u+2*h)+l):(c=Math.max(0,-(a*r+o)),u=c>0?r:Math.min(Math.max(-r,-h),r),d=-c*c+u*(u+2*h)+l);else u=a>0?-r:r,c=Math.max(0,-(a*u+o)),d=-c*c+u*(u+2*h)+l;return i&&i.copy(this.origin).addScaledVector(this.direction,c),n&&n.copy(Jo).addScaledVector(Yr,u),d}intersectSphere(t,e){ki.subVectors(t.center,this.origin);const i=ki.dot(this.direction),n=ki.dot(ki)-i*i,r=t.radius*t.radius;if(n>r)return null;const a=Math.sqrt(r-n),o=i-a,h=i+a;return h<0?null:o<0?this.at(h,e):this.at(o,e)}intersectsSphere(t){return t.radius<0?!1:this.distanceSqToPoint(t.center)<=t.radius*t.radius}distanceToPlane(t){const e=t.normal.dot(this.direction);if(e===0)return t.distanceToPoint(this.origin)===0?0:null;const i=-(this.origin.dot(t.normal)+t.constant)/e;return i>=0?i:null}intersectPlane(t,e){const i=this.distanceToPlane(t);return i===null?null:this.at(i,e)}intersectsPlane(t){const e=t.distanceToPoint(this.origin);return e===0||t.normal.dot(this.direction)*e<0}intersectBox(t,e){let i,n,r,a,o,h;const l=1/this.direction.x,A=1/this.direction.y,c=1/this.direction.z,u=this.origin;return l>=0?(i=(t.min.x-u.x)*l,n=(t.max.x-u.x)*l):(i=(t.max.x-u.x)*l,n=(t.min.x-u.x)*l),A>=0?(r=(t.min.y-u.y)*A,a=(t.max.y-u.y)*A):(r=(t.max.y-u.y)*A,a=(t.min.y-u.y)*A),i>a||r>n||((r>i||isNaN(i))&&(i=r),(a<n||isNaN(n))&&(n=a),c>=0?(o=(t.min.z-u.z)*c,h=(t.max.z-u.z)*c):(o=(t.max.z-u.z)*c,h=(t.min.z-u.z)*c),i>h||o>n)||((o>i||i!==i)&&(i=o),(h<n||n!==n)&&(n=h),n<0)?null:this.at(i>=0?i:n,e)}intersectsBox(t){return this.intersectBox(t,ki)!==null}intersectTriangle(t,e,i,n,r){Qo.subVectors(e,t),Xr.subVectors(i,t),qo.crossVectors(Qo,Xr);let a=this.direction.dot(qo),o;if(a>0){if(n)return null;o=1}else if(a<0)o=-1,a=-a;else return null;ln.subVectors(this.origin,t);const h=o*this.direction.dot(Xr.crossVectors(ln,Xr));if(h<0)return null;const l=o*this.direction.dot(Qo.cross(ln));if(l<0||h+l>a)return null;const A=-o*ln.dot(qo);return A<0?null:this.at(A/a,r)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}}class de{constructor(t,e,i,n,r,a,o,h,l,A,c,u,d,p,m,g){de.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],t!==void 0&&this.set(t,e,i,n,r,a,o,h,l,A,c,u,d,p,m,g)}set(t,e,i,n,r,a,o,h,l,A,c,u,d,p,m,g){const f=this.elements;return f[0]=t,f[4]=e,f[8]=i,f[12]=n,f[1]=r,f[5]=a,f[9]=o,f[13]=h,f[2]=l,f[6]=A,f[10]=c,f[14]=u,f[3]=d,f[7]=p,f[11]=m,f[15]=g,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new de().fromArray(this.elements)}copy(t){const e=this.elements,i=t.elements;return e[0]=i[0],e[1]=i[1],e[2]=i[2],e[3]=i[3],e[4]=i[4],e[5]=i[5],e[6]=i[6],e[7]=i[7],e[8]=i[8],e[9]=i[9],e[10]=i[10],e[11]=i[11],e[12]=i[12],e[13]=i[13],e[14]=i[14],e[15]=i[15],this}copyPosition(t){const e=this.elements,i=t.elements;return e[12]=i[12],e[13]=i[13],e[14]=i[14],this}setFromMatrix3(t){const e=t.elements;return this.set(e[0],e[3],e[6],0,e[1],e[4],e[7],0,e[2],e[5],e[8],0,0,0,0,1),this}extractBasis(t,e,i){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),i.setFromMatrixColumn(this,2),this}makeBasis(t,e,i){return this.set(t.x,e.x,i.x,0,t.y,e.y,i.y,0,t.z,e.z,i.z,0,0,0,0,1),this}extractRotation(t){const e=this.elements,i=t.elements,n=1/Is.setFromMatrixColumn(t,0).length(),r=1/Is.setFromMatrixColumn(t,1).length(),a=1/Is.setFromMatrixColumn(t,2).length();return e[0]=i[0]*n,e[1]=i[1]*n,e[2]=i[2]*n,e[3]=0,e[4]=i[4]*r,e[5]=i[5]*r,e[6]=i[6]*r,e[7]=0,e[8]=i[8]*a,e[9]=i[9]*a,e[10]=i[10]*a,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){const e=this.elements,i=t.x,n=t.y,r=t.z,a=Math.cos(i),o=Math.sin(i),h=Math.cos(n),l=Math.sin(n),A=Math.cos(r),c=Math.sin(r);if(t.order==="XYZ"){const u=a*A,d=a*c,p=o*A,m=o*c;e[0]=h*A,e[4]=-h*c,e[8]=l,e[1]=d+p*l,e[5]=u-m*l,e[9]=-o*h,e[2]=m-u*l,e[6]=p+d*l,e[10]=a*h}else if(t.order==="YXZ"){const u=h*A,d=h*c,p=l*A,m=l*c;e[0]=u+m*o,e[4]=p*o-d,e[8]=a*l,e[1]=a*c,e[5]=a*A,e[9]=-o,e[2]=d*o-p,e[6]=m+u*o,e[10]=a*h}else if(t.order==="ZXY"){const u=h*A,d=h*c,p=l*A,m=l*c;e[0]=u-m*o,e[4]=-a*c,e[8]=p+d*o,e[1]=d+p*o,e[5]=a*A,e[9]=m-u*o,e[2]=-a*l,e[6]=o,e[10]=a*h}else if(t.order==="ZYX"){const u=a*A,d=a*c,p=o*A,m=o*c;e[0]=h*A,e[4]=p*l-d,e[8]=u*l+m,e[1]=h*c,e[5]=m*l+u,e[9]=d*l-p,e[2]=-l,e[6]=o*h,e[10]=a*h}else if(t.order==="YZX"){const u=a*h,d=a*l,p=o*h,m=o*l;e[0]=h*A,e[4]=m-u*c,e[8]=p*c+d,e[1]=c,e[5]=a*A,e[9]=-o*A,e[2]=-l*A,e[6]=d*c+p,e[10]=u-m*c}else if(t.order==="XZY"){const u=a*h,d=a*l,p=o*h,m=o*l;e[0]=h*A,e[4]=-c,e[8]=l*A,e[1]=u*c+m,e[5]=a*A,e[9]=d*c-p,e[2]=p*c-d,e[6]=o*A,e[10]=m*c+u}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(uf,t,df)}lookAt(t,e,i){const n=this.elements;return Ze.subVectors(t,e),Ze.lengthSq()===0&&(Ze.z=1),Ze.normalize(),hn.crossVectors(i,Ze),hn.lengthSq()===0&&(Math.abs(i.z)===1?Ze.x+=1e-4:Ze.z+=1e-4,Ze.normalize(),hn.crossVectors(i,Ze)),hn.normalize(),Zr.crossVectors(Ze,hn),n[0]=hn.x,n[4]=Zr.x,n[8]=Ze.x,n[1]=hn.y,n[5]=Zr.y,n[9]=Ze.y,n[2]=hn.z,n[6]=Zr.z,n[10]=Ze.z,this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const i=t.elements,n=e.elements,r=this.elements,a=i[0],o=i[4],h=i[8],l=i[12],A=i[1],c=i[5],u=i[9],d=i[13],p=i[2],m=i[6],g=i[10],f=i[14],M=i[3],S=i[7],v=i[11],T=i[15],_=n[0],w=n[4],P=n[8],E=n[12],x=n[1],b=n[5],z=n[9],F=n[13],U=n[2],W=n[6],Y=n[10],$=n[14],H=n[3],rt=n[7],ht=n[11],mt=n[15];return r[0]=a*_+o*x+h*U+l*H,r[4]=a*w+o*b+h*W+l*rt,r[8]=a*P+o*z+h*Y+l*ht,r[12]=a*E+o*F+h*$+l*mt,r[1]=A*_+c*x+u*U+d*H,r[5]=A*w+c*b+u*W+d*rt,r[9]=A*P+c*z+u*Y+d*ht,r[13]=A*E+c*F+u*$+d*mt,r[2]=p*_+m*x+g*U+f*H,r[6]=p*w+m*b+g*W+f*rt,r[10]=p*P+m*z+g*Y+f*ht,r[14]=p*E+m*F+g*$+f*mt,r[3]=M*_+S*x+v*U+T*H,r[7]=M*w+S*b+v*W+T*rt,r[11]=M*P+S*z+v*Y+T*ht,r[15]=M*E+S*F+v*$+T*mt,this}multiplyScalar(t){const 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}determinant(){const t=this.elements,e=t[0],i=t[4],n=t[8],r=t[12],a=t[1],o=t[5],h=t[9],l=t[13],A=t[2],c=t[6],u=t[10],d=t[14],p=t[3],m=t[7],g=t[11],f=t[15];return p*(+r*h*c-n*l*c-r*o*u+i*l*u+n*o*d-i*h*d)+m*(+e*h*d-e*l*u+r*a*u-n*a*d+n*l*A-r*h*A)+g*(+e*l*c-e*o*d-r*a*c+i*a*d+r*o*A-i*l*A)+f*(-n*o*A-e*h*c+e*o*u+n*a*c-i*a*u+i*h*A)}transpose(){const t=this.elements;let e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,i){const n=this.elements;return t.isVector3?(n[12]=t.x,n[13]=t.y,n[14]=t.z):(n[12]=t,n[13]=e,n[14]=i),this}invert(){const t=this.elements,e=t[0],i=t[1],n=t[2],r=t[3],a=t[4],o=t[5],h=t[6],l=t[7],A=t[8],c=t[9],u=t[10],d=t[11],p=t[12],m=t[13],g=t[14],f=t[15],M=c*g*l-m*u*l+m*h*d-o*g*d-c*h*f+o*u*f,S=p*u*l-A*g*l-p*h*d+a*g*d+A*h*f-a*u*f,v=A*m*l-p*c*l+p*o*d-a*m*d-A*o*f+a*c*f,T=p*c*h-A*m*h-p*o*u+a*m*u+A*o*g-a*c*g,_=e*M+i*S+n*v+r*T;if(_===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const w=1/_;return t[0]=M*w,t[1]=(m*u*r-c*g*r-m*n*d+i*g*d+c*n*f-i*u*f)*w,t[2]=(o*g*r-m*h*r+m*n*l-i*g*l-o*n*f+i*h*f)*w,t[3]=(c*h*r-o*u*r-c*n*l+i*u*l+o*n*d-i*h*d)*w,t[4]=S*w,t[5]=(A*g*r-p*u*r+p*n*d-e*g*d-A*n*f+e*u*f)*w,t[6]=(p*h*r-a*g*r-p*n*l+e*g*l+a*n*f-e*h*f)*w,t[7]=(a*u*r-A*h*r+A*n*l-e*u*l-a*n*d+e*h*d)*w,t[8]=v*w,t[9]=(p*c*r-A*m*r-p*i*d+e*m*d+A*i*f-e*c*f)*w,t[10]=(a*m*r-p*o*r+p*i*l-e*m*l-a*i*f+e*o*f)*w,t[11]=(A*o*r-a*c*r-A*i*l+e*c*l+a*i*d-e*o*d)*w,t[12]=T*w,t[13]=(A*m*n-p*c*n+p*i*u-e*m*u-A*i*g+e*c*g)*w,t[14]=(p*o*n-a*m*n-p*i*h+e*m*h+a*i*g-e*o*g)*w,t[15]=(a*c*n-A*o*n+A*i*h-e*c*h-a*i*u+e*o*u)*w,this}scale(t){const e=this.elements,i=t.x,n=t.y,r=t.z;return e[0]*=i,e[4]*=n,e[8]*=r,e[1]*=i,e[5]*=n,e[9]*=r,e[2]*=i,e[6]*=n,e[10]*=r,e[3]*=i,e[7]*=n,e[11]*=r,this}getMaxScaleOnAxis(){const t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],i=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],n=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,i,n))}makeTranslation(t,e,i){return t.isVector3?this.set(1,0,0,t.x,0,1,0,t.y,0,0,1,t.z,0,0,0,1):this.set(1,0,0,t,0,1,0,e,0,0,1,i,0,0,0,1),this}makeRotationX(t){const e=Math.cos(t),i=Math.sin(t);return this.set(1,0,0,0,0,e,-i,0,0,i,e,0,0,0,0,1),this}makeRotationY(t){const e=Math.cos(t),i=Math.sin(t);return this.set(e,0,i,0,0,1,0,0,-i,0,e,0,0,0,0,1),this}makeRotationZ(t){const e=Math.cos(t),i=Math.sin(t);return this.set(e,-i,0,0,i,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){const i=Math.cos(e),n=Math.sin(e),r=1-i,a=t.x,o=t.y,h=t.z,l=r*a,A=r*o;return this.set(l*a+i,l*o-n*h,l*h+n*o,0,l*o+n*h,A*o+i,A*h-n*a,0,l*h-n*o,A*h+n*a,r*h*h+i,0,0,0,0,1),this}makeScale(t,e,i){return this.set(t,0,0,0,0,e,0,0,0,0,i,0,0,0,0,1),this}makeShear(t,e,i,n,r,a){return this.set(1,i,r,0,t,1,a,0,e,n,1,0,0,0,0,1),this}compose(t,e,i){const n=this.elements,r=e._x,a=e._y,o=e._z,h=e._w,l=r+r,A=a+a,c=o+o,u=r*l,d=r*A,p=r*c,m=a*A,g=a*c,f=o*c,M=h*l,S=h*A,v=h*c,T=i.x,_=i.y,w=i.z;return n[0]=(1-(m+f))*T,n[1]=(d+v)*T,n[2]=(p-S)*T,n[3]=0,n[4]=(d-v)*_,n[5]=(1-(u+f))*_,n[6]=(g+M)*_,n[7]=0,n[8]=(p+S)*w,n[9]=(g-M)*w,n[10]=(1-(u+m))*w,n[11]=0,n[12]=t.x,n[13]=t.y,n[14]=t.z,n[15]=1,this}decompose(t,e,i){const n=this.elements;let r=Is.set(n[0],n[1],n[2]).length();const a=Is.set(n[4],n[5],n[6]).length(),o=Is.set(n[8],n[9],n[10]).length();this.determinant()<0&&(r=-r),t.x=n[12],t.y=n[13],t.z=n[14],gi.copy(this);const l=1/r,A=1/a,c=1/o;return gi.elements[0]*=l,gi.elements[1]*=l,gi.elements[2]*=l,gi.elements[4]*=A,gi.elements[5]*=A,gi.elements[6]*=A,gi.elements[8]*=c,gi.elements[9]*=c,gi.elements[10]*=c,e.setFromRotationMatrix(gi),i.x=r,i.y=a,i.z=o,this}makePerspective(t,e,i,n,r,a,o=Ei,h=!1){const l=this.elements,A=2*r/(e-t),c=2*r/(i-n),u=(e+t)/(e-t),d=(i+n)/(i-n);let p,m;if(h)p=r/(a-r),m=a*r/(a-r);else if(o===Ei)p=-(a+r)/(a-r),m=-2*a*r/(a-r);else if(o===zr)p=-a/(a-r),m=-a*r/(a-r);else throw new Error("THREE.Matrix4.makePerspective(): Invalid coordinate system: "+o);return l[0]=A,l[4]=0,l[8]=u,l[12]=0,l[1]=0,l[5]=c,l[9]=d,l[13]=0,l[2]=0,l[6]=0,l[10]=p,l[14]=m,l[3]=0,l[7]=0,l[11]=-1,l[15]=0,this}makeOrthographic(t,e,i,n,r,a,o=Ei,h=!1){const l=this.elements,A=2/(e-t),c=2/(i-n),u=-(e+t)/(e-t),d=-(i+n)/(i-n);let p,m;if(h)p=1/(a-r),m=a/(a-r);else if(o===Ei)p=-2/(a-r),m=-(a+r)/(a-r);else if(o===zr)p=-1/(a-r),m=-r/(a-r);else throw new Error("THREE.Matrix4.makeOrthographic(): Invalid coordinate system: "+o);return l[0]=A,l[4]=0,l[8]=0,l[12]=u,l[1]=0,l[5]=c,l[9]=0,l[13]=d,l[2]=0,l[6]=0,l[10]=p,l[14]=m,l[3]=0,l[7]=0,l[11]=0,l[15]=1,this}equals(t){const e=this.elements,i=t.elements;for(let n=0;n<16;n++)if(e[n]!==i[n])return!1;return!0}fromArray(t,e=0){for(let i=0;i<16;i++)this.elements[i]=t[i+e];return this}toArray(t=[],e=0){const i=this.elements;return t[e]=i[0],t[e+1]=i[1],t[e+2]=i[2],t[e+3]=i[3],t[e+4]=i[4],t[e+5]=i[5],t[e+6]=i[6],t[e+7]=i[7],t[e+8]=i[8],t[e+9]=i[9],t[e+10]=i[10],t[e+11]=i[11],t[e+12]=i[12],t[e+13]=i[13],t[e+14]=i[14],t[e+15]=i[15],t}}const Is=new O,gi=new de,uf=new O(0,0,0),df=new O(1,1,1),hn=new O,Zr=new O,Ze=new O,iA=new de,nA=new Rn;class Si{constructor(t=0,e=0,i=0,n=Si.DEFAULT_ORDER){this.isEuler=!0,this._x=t,this._y=e,this._z=i,this._order=n}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(t,e,i,n=this._order){return this._x=t,this._y=e,this._z=i,this._order=n,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e=this._order,i=!0){const n=t.elements,r=n[0],a=n[4],o=n[8],h=n[1],l=n[5],A=n[9],c=n[2],u=n[6],d=n[10];switch(e){case"XYZ":this._y=Math.asin(kt(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-A,d),this._z=Math.atan2(-a,r)):(this._x=Math.atan2(u,l),this._z=0);break;case"YXZ":this._x=Math.asin(-kt(A,-1,1)),Math.abs(A)<.9999999?(this._y=Math.atan2(o,d),this._z=Math.atan2(h,l)):(this._y=Math.atan2(-c,r),this._z=0);break;case"ZXY":this._x=Math.asin(kt(u,-1,1)),Math.abs(u)<.9999999?(this._y=Math.atan2(-c,d),this._z=Math.atan2(-a,l)):(this._y=0,this._z=Math.atan2(h,r));break;case"ZYX":this._y=Math.asin(-kt(c,-1,1)),Math.abs(c)<.9999999?(this._x=Math.atan2(u,d),this._z=Math.atan2(h,r)):(this._x=0,this._z=Math.atan2(-a,l));break;case"YZX":this._z=Math.asin(kt(h,-1,1)),Math.abs(h)<.9999999?(this._x=Math.atan2(-A,l),this._y=Math.atan2(-c,r)):(this._x=0,this._y=Math.atan2(o,d));break;case"XZY":this._z=Math.asin(-kt(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(u,l),this._y=Math.atan2(o,r)):(this._x=Math.atan2(-A,d),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+e)}return this._order=e,i===!0&&this._onChangeCallback(),this}setFromQuaternion(t,e,i){return iA.makeRotationFromQuaternion(t),this.setFromRotationMatrix(iA,e,i)}setFromVector3(t,e=this._order){return this.set(t.x,t.y,t.z,e)}reorder(t){return nA.setFromEuler(this),this.setFromQuaternion(nA,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],t[3]!==void 0&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}}Si.DEFAULT_ORDER="XYZ";class sA{constructor(){this.mask=1}set(t){this.mask=(1<<t|0)>>>0}enable(t){this.mask|=1<<t|0}enableAll(){this.mask=-1}toggle(t){this.mask^=1<<t|0}disable(t){this.mask&=~(1<<t|0)}disableAll(){this.mask=0}test(t){return(this.mask&t.mask)!==0}isEnabled(t){return(this.mask&(1<<t|0))!==0}}let ff=0;const rA=new O,vs=new Rn,Gi=new de,jr=new O,nr=new O,gf=new O,pf=new Rn,aA=new O(1,0,0),oA=new O(0,1,0),lA=new O(0,0,1),hA={type:"added"},mf={type:"removed"},xs={type:"childadded",child:null},Ko={type:"childremoved",child:null};class Ee extends wn{constructor(){super(),this.isObject3D=!0,Object.defineProperty(this,"id",{value:ff++}),this.uuid=Ks(),this.name="",this.type="Object3D",this.parent=null,this.children=[],this.up=Ee.DEFAULT_UP.clone();const t=new O,e=new Si,i=new Rn,n=new O(1,1,1);function r(){i.setFromEuler(e,!1)}function a(){e.setFromQuaternion(i,void 0,!1)}e._onChange(r),i._onChange(a),Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:t},rotation:{configurable:!0,enumerable:!0,value:e},quaternion:{configurable:!0,enumerable:!0,value:i},scale:{configurable:!0,enumerable:!0,value:n},modelViewMatrix:{value:new de},normalMatrix:{value:new Ot}}),this.matrix=new de,this.matrixWorld=new de,this.matrixAutoUpdate=Ee.DEFAULT_MATRIX_AUTO_UPDATE,this.matrixWorldAutoUpdate=Ee.DEFAULT_MATRIX_WORLD_AUTO_UPDATE,this.matrixWorldNeedsUpdate=!1,this.layers=new sA,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.animations=[],this.customDepthMaterial=void 0,this.customDistanceMaterial=void 0,this.userData={}}onBeforeShadow(){}onAfterShadow(){}onBeforeRender(){}onAfterRender(){}applyMatrix4(t){this.matrixAutoUpdate&&this.updateMatrix(),this.matrix.premultiply(t),this.matrix.decompose(this.position,this.quaternion,this.scale)}applyQuaternion(t){return this.quaternion.premultiply(t),this}setRotationFromAxisAngle(t,e){this.quaternion.setFromAxisAngle(t,e)}setRotationFromEuler(t){this.quaternion.setFromEuler(t,!0)}setRotationFromMatrix(t){this.quaternion.setFromRotationMatrix(t)}setRotationFromQuaternion(t){this.quaternion.copy(t)}rotateOnAxis(t,e){return vs.setFromAxisAngle(t,e),this.quaternion.multiply(vs),this}rotateOnWorldAxis(t,e){return vs.setFromAxisAngle(t,e),this.quaternion.premultiply(vs),this}rotateX(t){return this.rotateOnAxis(aA,t)}rotateY(t){return this.rotateOnAxis(oA,t)}rotateZ(t){return this.rotateOnAxis(lA,t)}translateOnAxis(t,e){return rA.copy(t).applyQuaternion(this.quaternion),this.position.add(rA.multiplyScalar(e)),this}translateX(t){return this.translateOnAxis(aA,t)}translateY(t){return this.translateOnAxis(oA,t)}translateZ(t){return this.translateOnAxis(lA,t)}localToWorld(t){return this.updateWorldMatrix(!0,!1),t.applyMatrix4(this.matrixWorld)}worldToLocal(t){return this.updateWorldMatrix(!0,!1),t.applyMatrix4(Gi.copy(this.matrixWorld).invert())}lookAt(t,e,i){t.isVector3?jr.copy(t):jr.set(t,e,i);const n=this.parent;this.updateWorldMatrix(!0,!1),nr.setFromMatrixPosition(this.matrixWorld),this.isCamera||this.isLight?Gi.lookAt(nr,jr,this.up):Gi.lookAt(jr,nr,this.up),this.quaternion.setFromRotationMatrix(Gi),n&&(Gi.extractRotation(n.matrixWorld),vs.setFromRotationMatrix(Gi),this.quaternion.premultiply(vs.invert()))}add(t){if(arguments.length>1){for(let e=0;e<arguments.length;e++)this.add(arguments[e]);return this}return t===this?(console.error("THREE.Object3D.add: object can't be added as a child of itself.",t),this):(t&&t.isObject3D?(t.removeFromParent(),t.parent=this,this.children.push(t),t.dispatchEvent(hA),xs.child=t,this.dispatchEvent(xs),xs.child=null):console.error("THREE.Object3D.add: object not an instance of THREE.Object3D.",t),this)}remove(t){if(arguments.length>1){for(let i=0;i<arguments.length;i++)this.remove(arguments[i]);return this}const e=this.children.indexOf(t);return e!==-1&&(t.parent=null,this.children.splice(e,1),t.dispatchEvent(mf),Ko.child=t,this.dispatchEvent(Ko),Ko.child=null),this}removeFromParent(){const t=this.parent;return t!==null&&t.remove(this),this}clear(){return this.remove(...this.children)}attach(t){return this.updateWorldMatrix(!0,!1),Gi.copy(this.matrixWorld).invert(),t.parent!==null&&(t.parent.updateWorldMatrix(!0,!1),Gi.multiply(t.parent.matrixWorld)),t.applyMatrix4(Gi),t.removeFromParent(),t.parent=this,this.children.push(t),t.updateWorldMatrix(!1,!0),t.dispatchEvent(hA),xs.child=t,this.dispatchEvent(xs),xs.child=null,this}getObjectById(t){return this.getObjectByProperty("id",t)}getObjectByName(t){return this.getObjectByProperty("name",t)}getObjectByProperty(t,e){if(this[t]===e)return this;for(let i=0,n=this.children.length;i<n;i++){const a=this.children[i].getObjectByProperty(t,e);if(a!==void 0)return a}}getObjectsByProperty(t,e,i=[]){this[t]===e&&i.push(this);const n=this.children;for(let r=0,a=n.length;r<a;r++)n[r].getObjectsByProperty(t,e,i);return i}getWorldPosition(t){return this.updateWorldMatrix(!0,!1),t.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(nr,t,gf),t}getWorldScale(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(nr,pf,t),t}getWorldDirection(t){this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(e[8],e[9],e[10]).normalize()}raycast(){}traverse(t){t(this);const e=this.children;for(let i=0,n=e.length;i<n;i++)e[i].traverse(t)}traverseVisible(t){if(this.visible===!1)return;t(this);const e=this.children;for(let i=0,n=e.length;i<n;i++)e[i].traverseVisible(t)}traverseAncestors(t){const e=this.parent;e!==null&&(t(e),e.traverseAncestors(t))}updateMatrix(){this.matrix.compose(this.position,this.quaternion,this.scale),this.matrixWorldNeedsUpdate=!0}updateMatrixWorld(t){this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||t)&&(this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),this.matrixWorldNeedsUpdate=!1,t=!0);const e=this.children;for(let i=0,n=e.length;i<n;i++)e[i].updateMatrixWorld(t)}updateWorldMatrix(t,e){const i=this.parent;if(t===!0&&i!==null&&i.updateWorldMatrix(!0,!1),this.matrixAutoUpdate&&this.updateMatrix(),this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),e===!0){const n=this.children;for(let r=0,a=n.length;r<a;r++)n[r].updateWorldMatrix(!1,!0)}}toJSON(t){const e=t===void 0||typeof t=="string",i={};e&&(t={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{},nodes:{}},i.metadata={version:4.7,type:"Object",generator:"Object3D.toJSON"});const n={};n.uuid=this.uuid,n.type=this.type,this.name!==""&&(n.name=this.name),this.castShadow===!0&&(n.castShadow=!0),this.receiveShadow===!0&&(n.receiveShadow=!0),this.visible===!1&&(n.visible=!1),this.frustumCulled===!1&&(n.frustumCulled=!1),this.renderOrder!==0&&(n.renderOrder=this.renderOrder),Object.keys(this.userData).length>0&&(n.userData=this.userData),n.layers=this.layers.mask,n.matrix=this.matrix.toArray(),n.up=this.up.toArray(),this.matrixAutoUpdate===!1&&(n.matrixAutoUpdate=!1),this.isInstancedMesh&&(n.type="InstancedMesh",n.count=this.count,n.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(n.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(n.type="BatchedMesh",n.perObjectFrustumCulled=this.perObjectFrustumCulled,n.sortObjects=this.sortObjects,n.drawRanges=this._drawRanges,n.reservedRanges=this._reservedRanges,n.geometryInfo=this._geometryInfo.map(o=>({...o,boundingBox:o.boundingBox?o.boundingBox.toJSON():void 0,boundingSphere:o.boundingSphere?o.boundingSphere.toJSON():void 0})),n.instanceInfo=this._instanceInfo.map(o=>({...o})),n.availableInstanceIds=this._availableInstanceIds.slice(),n.availableGeometryIds=this._availableGeometryIds.slice(),n.nextIndexStart=this._nextIndexStart,n.nextVertexStart=this._nextVertexStart,n.geometryCount=this._geometryCount,n.maxInstanceCount=this._maxInstanceCount,n.maxVertexCount=this._maxVertexCount,n.maxIndexCount=this._maxIndexCount,n.geometryInitialized=this._geometryInitialized,n.matricesTexture=this._matricesTexture.toJSON(t),n.indirectTexture=this._indirectTexture.toJSON(t),this._colorsTexture!==null&&(n.colorsTexture=this._colorsTexture.toJSON(t)),this.boundingSphere!==null&&(n.boundingSphere=this.boundingSphere.toJSON()),this.boundingBox!==null&&(n.boundingBox=this.boundingBox.toJSON()));function r(o,h){return o[h.uuid]===void 0&&(o[h.uuid]=h.toJSON(t)),h.uuid}if(this.isScene)this.background&&(this.background.isColor?n.background=this.background.toJSON():this.background.isTexture&&(n.background=this.background.toJSON(t).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(n.environment=this.environment.toJSON(t).uuid);else if(this.isMesh||this.isLine||this.isPoints){n.geometry=r(t.geometries,this.geometry);const o=this.geometry.parameters;if(o!==void 0&&o.shapes!==void 0){const h=o.shapes;if(Array.isArray(h))for(let l=0,A=h.length;l<A;l++){const c=h[l];r(t.shapes,c)}else r(t.shapes,h)}}if(this.isSkinnedMesh&&(n.bindMode=this.bindMode,n.bindMatrix=this.bindMatrix.toArray(),this.skeleton!==void 0&&(r(t.skeletons,this.skeleton),n.skeleton=this.skeleton.uuid)),this.material!==void 0)if(Array.isArray(this.material)){const o=[];for(let h=0,l=this.material.length;h<l;h++)o.push(r(t.materials,this.material[h]));n.material=o}else n.material=r(t.materials,this.material);if(this.children.length>0){n.children=[];for(let o=0;o<this.children.length;o++)n.children.push(this.children[o].toJSON(t).object)}if(this.animations.length>0){n.animations=[];for(let o=0;o<this.animations.length;o++){const h=this.animations[o];n.animations.push(r(t.animations,h))}}if(e){const o=a(t.geometries),h=a(t.materials),l=a(t.textures),A=a(t.images),c=a(t.shapes),u=a(t.skeletons),d=a(t.animations),p=a(t.nodes);o.length>0&&(i.geometries=o),h.length>0&&(i.materials=h),l.length>0&&(i.textures=l),A.length>0&&(i.images=A),c.length>0&&(i.shapes=c),u.length>0&&(i.skeletons=u),d.length>0&&(i.animations=d),p.length>0&&(i.nodes=p)}return i.object=n,i;function a(o){const h=[];for(const l in o){const A=o[l];delete A.metadata,h.push(A)}return h}}clone(t){return new this.constructor().copy(this,t)}copy(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldAutoUpdate=t.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.animations=t.animations.slice(),this.userData=JSON.parse(JSON.stringify(t.userData)),e===!0)for(let i=0;i<t.children.length;i++){const n=t.children[i];this.add(n.clone())}return this}}Ee.DEFAULT_UP=new O(0,1,0),Ee.DEFAULT_MATRIX_AUTO_UPDATE=!0,Ee.DEFAULT_MATRIX_WORLD_AUTO_UPDATE=!0;const pi=new O,Hi=new O,$o=new O,Vi=new O,Es=new O,Ss=new O,AA=new O,tl=new O,el=new O,il=new O,nl=new ce,sl=new ce,rl=new ce;class mi{constructor(t=new O,e=new O,i=new O){this.a=t,this.b=e,this.c=i}static getNormal(t,e,i,n){n.subVectors(i,e),pi.subVectors(t,e),n.cross(pi);const r=n.lengthSq();return r>0?n.multiplyScalar(1/Math.sqrt(r)):n.set(0,0,0)}static getBarycoord(t,e,i,n,r){pi.subVectors(n,e),Hi.subVectors(i,e),$o.subVectors(t,e);const a=pi.dot(pi),o=pi.dot(Hi),h=pi.dot($o),l=Hi.dot(Hi),A=Hi.dot($o),c=a*l-o*o;if(c===0)return r.set(0,0,0),null;const u=1/c,d=(l*h-o*A)*u,p=(a*A-o*h)*u;return r.set(1-d-p,p,d)}static containsPoint(t,e,i,n){return this.getBarycoord(t,e,i,n,Vi)===null?!1:Vi.x>=0&&Vi.y>=0&&Vi.x+Vi.y<=1}static getInterpolation(t,e,i,n,r,a,o,h){return this.getBarycoord(t,e,i,n,Vi)===null?(h.x=0,h.y=0,"z"in h&&(h.z=0),"w"in h&&(h.w=0),null):(h.setScalar(0),h.addScaledVector(r,Vi.x),h.addScaledVector(a,Vi.y),h.addScaledVector(o,Vi.z),h)}static getInterpolatedAttribute(t,e,i,n,r,a){return nl.setScalar(0),sl.setScalar(0),rl.setScalar(0),nl.fromBufferAttribute(t,e),sl.fromBufferAttribute(t,i),rl.fromBufferAttribute(t,n),a.setScalar(0),a.addScaledVector(nl,r.x),a.addScaledVector(sl,r.y),a.addScaledVector(rl,r.z),a}static isFrontFacing(t,e,i,n){return pi.subVectors(i,e),Hi.subVectors(t,e),pi.cross(Hi).dot(n)<0}set(t,e,i){return this.a.copy(t),this.b.copy(e),this.c.copy(i),this}setFromPointsAndIndices(t,e,i,n){return this.a.copy(t[e]),this.b.copy(t[i]),this.c.copy(t[n]),this}setFromAttributeAndIndices(t,e,i,n){return this.a.fromBufferAttribute(t,e),this.b.fromBufferAttribute(t,i),this.c.fromBufferAttribute(t,n),this}clone(){return new this.constructor().copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return pi.subVectors(this.c,this.b),Hi.subVectors(this.a,this.b),pi.cross(Hi).length()*.5}getMidpoint(t){return t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return mi.getNormal(this.a,this.b,this.c,t)}getPlane(t){return t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return mi.getBarycoord(t,this.a,this.b,this.c,e)}getInterpolation(t,e,i,n,r){return mi.getInterpolation(t,this.a,this.b,this.c,e,i,n,r)}containsPoint(t){return mi.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return mi.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){const i=this.a,n=this.b,r=this.c;let a,o;Es.subVectors(n,i),Ss.subVectors(r,i),tl.subVectors(t,i);const h=Es.dot(tl),l=Ss.dot(tl);if(h<=0&&l<=0)return e.copy(i);el.subVectors(t,n);const A=Es.dot(el),c=Ss.dot(el);if(A>=0&&c<=A)return e.copy(n);const u=h*c-A*l;if(u<=0&&h>=0&&A<=0)return a=h/(h-A),e.copy(i).addScaledVector(Es,a);il.subVectors(t,r);const d=Es.dot(il),p=Ss.dot(il);if(p>=0&&d<=p)return e.copy(r);const m=d*l-h*p;if(m<=0&&l>=0&&p<=0)return o=l/(l-p),e.copy(i).addScaledVector(Ss,o);const g=A*p-d*c;if(g<=0&&c-A>=0&&d-p>=0)return AA.subVectors(r,n),o=(c-A)/(c-A+(d-p)),e.copy(n).addScaledVector(AA,o);const f=1/(g+m+u);return a=m*f,o=u*f,e.copy(i).addScaledVector(Es,a).addScaledVector(Ss,o)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}const cA={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},An={h:0,s:0,l:0},Jr={h:0,s:0,l:0};function al(s,t,e){return e<0&&(e+=1),e>1&&(e-=1),e<1/6?s+(t-s)*6*e:e<1/2?t:e<2/3?s+(t-s)*6*(2/3-e):s}class Wt{constructor(t,e,i){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(t,e,i)}set(t,e,i){if(e===void 0&&i===void 0){const n=t;n&&n.isColor?this.copy(n):typeof n=="number"?this.setHex(n):typeof n=="string"&&this.setStyle(n)}else this.setRGB(t,e,i);return this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t,e=Pe){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(t&255)/255,Xt.colorSpaceToWorking(this,e),this}setRGB(t,e,i,n=Xt.workingColorSpace){return this.r=t,this.g=e,this.b=i,Xt.colorSpaceToWorking(this,n),this}setHSL(t,e,i,n=Xt.workingColorSpace){if(t=tf(t,1),e=kt(e,0,1),i=kt(i,0,1),e===0)this.r=this.g=this.b=i;else{const r=i<=.5?i*(1+e):i+e-i*e,a=2*i-r;this.r=al(a,r,t+1/3),this.g=al(a,r,t),this.b=al(a,r,t-1/3)}return Xt.colorSpaceToWorking(this,n),this}setStyle(t,e=Pe){function i(r){r!==void 0&&parseFloat(r)<1&&console.warn("THREE.Color: Alpha component of "+t+" will be ignored.")}let n;if(n=/^(\w+)\(([^\)]*)\)/.exec(t)){let r;const a=n[1],o=n[2];switch(a){case"rgb":case"rgba":if(r=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(r[4]),this.setRGB(Math.min(255,parseInt(r[1],10))/255,Math.min(255,parseInt(r[2],10))/255,Math.min(255,parseInt(r[3],10))/255,e);if(r=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(r[4]),this.setRGB(Math.min(100,parseInt(r[1],10))/100,Math.min(100,parseInt(r[2],10))/100,Math.min(100,parseInt(r[3],10))/100,e);break;case"hsl":case"hsla":if(r=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(r[4]),this.setHSL(parseFloat(r[1])/360,parseFloat(r[2])/100,parseFloat(r[3])/100,e);break;default:console.warn("THREE.Color: Unknown color model "+t)}}else if(n=/^\#([A-Fa-f\d]+)$/.exec(t)){const r=n[1],a=r.length;if(a===3)return this.setRGB(parseInt(r.charAt(0),16)/15,parseInt(r.charAt(1),16)/15,parseInt(r.charAt(2),16)/15,e);if(a===6)return this.setHex(parseInt(r,16),e);console.warn("THREE.Color: Invalid hex color "+t)}else if(t&&t.length>0)return this.setColorName(t,e);return this}setColorName(t,e=Pe){const i=cA[t.toLowerCase()];return i!==void 0?this.setHex(i,e):console.warn("THREE.Color: Unknown color "+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copySRGBToLinear(t){return this.r=Ui(t.r),this.g=Ui(t.g),this.b=Ui(t.b),this}copyLinearToSRGB(t){return this.r=ds(t.r),this.g=ds(t.g),this.b=ds(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(t=Pe){return Xt.workingToColorSpace(Re.copy(this),t),Math.round(kt(Re.r*255,0,255))*65536+Math.round(kt(Re.g*255,0,255))*256+Math.round(kt(Re.b*255,0,255))}getHexString(t=Pe){return("000000"+this.getHex(t).toString(16)).slice(-6)}getHSL(t,e=Xt.workingColorSpace){Xt.workingToColorSpace(Re.copy(this),e);const i=Re.r,n=Re.g,r=Re.b,a=Math.max(i,n,r),o=Math.min(i,n,r);let h,l;const A=(o+a)/2;if(o===a)h=0,l=0;else{const c=a-o;switch(l=A<=.5?c/(a+o):c/(2-a-o),a){case i:h=(n-r)/c+(n<r?6:0);break;case n:h=(r-i)/c+2;break;case r:h=(i-n)/c+4;break}h/=6}return t.h=h,t.s=l,t.l=A,t}getRGB(t,e=Xt.workingColorSpace){return Xt.workingToColorSpace(Re.copy(this),e),t.r=Re.r,t.g=Re.g,t.b=Re.b,t}getStyle(t=Pe){Xt.workingToColorSpace(Re.copy(this),t);const e=Re.r,i=Re.g,n=Re.b;return t!==Pe?`color(${t} ${e.toFixed(3)} ${i.toFixed(3)} ${n.toFixed(3)})`:`rgb(${Math.round(e*255)},${Math.round(i*255)},${Math.round(n*255)})`}offsetHSL(t,e,i){return this.getHSL(An),this.setHSL(An.h+t,An.s+e,An.l+i)}add(t){return this.r+=t.r,this.g+=t.g,this.b+=t.b,this}addColors(t,e){return this.r=t.r+e.r,this.g=t.g+e.g,this.b=t.b+e.b,this}addScalar(t){return this.r+=t,this.g+=t,this.b+=t,this}sub(t){return this.r=Math.max(0,this.r-t.r),this.g=Math.max(0,this.g-t.g),this.b=Math.max(0,this.b-t.b),this}multiply(t){return this.r*=t.r,this.g*=t.g,this.b*=t.b,this}multiplyScalar(t){return this.r*=t,this.g*=t,this.b*=t,this}lerp(t,e){return this.r+=(t.r-this.r)*e,this.g+=(t.g-this.g)*e,this.b+=(t.b-this.b)*e,this}lerpColors(t,e,i){return this.r=t.r+(e.r-t.r)*i,this.g=t.g+(e.g-t.g)*i,this.b=t.b+(e.b-t.b)*i,this}lerpHSL(t,e){this.getHSL(An),t.getHSL(Jr);const i=ko(An.h,Jr.h,e),n=ko(An.s,Jr.s,e),r=ko(An.l,Jr.l,e);return this.setHSL(i,n,r),this}setFromVector3(t){return this.r=t.x,this.g=t.y,this.b=t.z,this}applyMatrix3(t){const e=this.r,i=this.g,n=this.b,r=t.elements;return this.r=r[0]*e+r[3]*i+r[6]*n,this.g=r[1]*e+r[4]*i+r[7]*n,this.b=r[2]*e+r[5]*i+r[8]*n,this}equals(t){return t.r===this.r&&t.g===this.g&&t.b===this.b}fromArray(t,e=0){return this.r=t[e],this.g=t[e+1],this.b=t[e+2],this}toArray(t=[],e=0){return t[e]=this.r,t[e+1]=this.g,t[e+2]=this.b,t}fromBufferAttribute(t,e){return this.r=t.getX(e),this.g=t.getY(e),this.b=t.getZ(e),this}toJSON(){return this.getHex()}*[Symbol.iterator](){yield this.r,yield this.g,yield this.b}}const Re=new Wt;Wt.NAMES=cA;let Cf=0;class sr extends wn{constructor(){super(),this.isMaterial=!0,Object.defineProperty(this,"id",{value:Cf++}),this.uuid=Ks(),this.name="",this.type="Material",this.blending=as,this.side=en,this.vertexColors=!1,this.opacity=1,this.transparent=!1,this.alphaHash=!1,this.blendSrc=Za,this.blendDst=ja,this.blendEquation=Mn,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.blendColor=new Wt(0,0,0),this.blendAlpha=0,this.depthFunc=os,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=Yh,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=cs,this.stencilZFail=cs,this.stencilZPass=cs,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.forceSinglePass=!1,this.allowOverride=!0,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0,this._alphaTest=0}get alphaTest(){return this._alphaTest}set alphaTest(t){this._alphaTest>0!=t>0&&this.version++,this._alphaTest=t}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(t){if(t!==void 0)for(const e in t){const i=t[e];if(i===void 0){console.warn(`THREE.Material: parameter '${e}' has value of undefined.`);continue}const n=this[e];if(n===void 0){console.warn(`THREE.Material: '${e}' is not a property of THREE.${this.type}.`);continue}n&&n.isColor?n.set(i):n&&n.isVector3&&i&&i.isVector3?n.copy(i):this[e]=i}}toJSON(t){const e=t===void 0||typeof t=="string";e&&(t={textures:{},images:{}});const i={metadata:{version:4.7,type:"Material",generator:"Material.toJSON"}};i.uuid=this.uuid,i.type=this.type,this.name!==""&&(i.name=this.name),this.color&&this.color.isColor&&(i.color=this.color.getHex()),this.roughness!==void 0&&(i.roughness=this.roughness),this.metalness!==void 0&&(i.metalness=this.metalness),this.sheen!==void 0&&(i.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(i.sheenColor=this.sheenColor.getHex()),this.sheenRoughness!==void 0&&(i.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(i.emissive=this.emissive.getHex()),this.emissiveIntensity!==void 0&&this.emissiveIntensity!==1&&(i.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(i.specular=this.specular.getHex()),this.specularIntensity!==void 0&&(i.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(i.specularColor=this.specularColor.getHex()),this.shininess!==void 0&&(i.shininess=this.shininess),this.clearcoat!==void 0&&(i.clearcoat=this.clearcoat),this.clearcoatRoughness!==void 0&&(i.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(i.clearcoatMap=this.clearcoatMap.toJSON(t).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(i.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(t).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(i.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(t).uuid,i.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.dispersion!==void 0&&(i.dispersion=this.dispersion),this.iridescence!==void 0&&(i.iridescence=this.iridescence),this.iridescenceIOR!==void 0&&(i.iridescenceIOR=this.iridescenceIOR),this.iridescenceThicknessRange!==void 0&&(i.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(i.iridescenceMap=this.iridescenceMap.toJSON(t).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(i.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(t).uuid),this.anisotropy!==void 0&&(i.anisotropy=this.anisotropy),this.anisotropyRotation!==void 0&&(i.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(i.anisotropyMap=this.anisotropyMap.toJSON(t).uuid),this.map&&this.map.isTexture&&(i.map=this.map.toJSON(t).uuid),this.matcap&&this.matcap.isTexture&&(i.matcap=this.matcap.toJSON(t).uuid),this.alphaMap&&this.alphaMap.isTexture&&(i.alphaMap=this.alphaMap.toJSON(t).uuid),this.lightMap&&this.lightMap.isTexture&&(i.lightMap=this.lightMap.toJSON(t).uuid,i.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(i.aoMap=this.aoMap.toJSON(t).uuid,i.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(i.bumpMap=this.bumpMap.toJSON(t).uuid,i.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(i.normalMap=this.normalMap.toJSON(t).uuid,i.normalMapType=this.normalMapType,i.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(i.displacementMap=this.displacementMap.toJSON(t).uuid,i.displacementScale=this.displacementScale,i.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(i.roughnessMap=this.roughnessMap.toJSON(t).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(i.metalnessMap=this.metalnessMap.toJSON(t).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(i.emissiveMap=this.emissiveMap.toJSON(t).uuid),this.specularMap&&this.specularMap.isTexture&&(i.specularMap=this.specularMap.toJSON(t).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(i.specularIntensityMap=this.specularIntensityMap.toJSON(t).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(i.specularColorMap=this.specularColorMap.toJSON(t).uuid),this.envMap&&this.envMap.isTexture&&(i.envMap=this.envMap.toJSON(t).uuid,this.combine!==void 0&&(i.combine=this.combine)),this.envMapRotation!==void 0&&(i.envMapRotation=this.envMapRotation.toArray()),this.envMapIntensity!==void 0&&(i.envMapIntensity=this.envMapIntensity),this.reflectivity!==void 0&&(i.reflectivity=this.reflectivity),this.refractionRatio!==void 0&&(i.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(i.gradientMap=this.gradientMap.toJSON(t).uuid),this.transmission!==void 0&&(i.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(i.transmissionMap=this.transmissionMap.toJSON(t).uuid),this.thickness!==void 0&&(i.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(i.thicknessMap=this.thicknessMap.toJSON(t).uuid),this.attenuationDistance!==void 0&&this.attenuationDistance!==1/0&&(i.attenuationDistance=this.attenuationDistance),this.attenuationColor!==void 0&&(i.attenuationColor=this.attenuationColor.getHex()),this.size!==void 0&&(i.size=this.size),this.shadowSide!==null&&(i.shadowSide=this.shadowSide),this.sizeAttenuation!==void 0&&(i.sizeAttenuation=this.sizeAttenuation),this.blending!==as&&(i.blending=this.blending),this.side!==en&&(i.side=this.side),this.vertexColors===!0&&(i.vertexColors=!0),this.opacity<1&&(i.opacity=this.opacity),this.transparent===!0&&(i.transparent=!0),this.blendSrc!==Za&&(i.blendSrc=this.blendSrc),this.blendDst!==ja&&(i.blendDst=this.blendDst),this.blendEquation!==Mn&&(i.blendEquation=this.blendEquation),this.blendSrcAlpha!==null&&(i.blendSrcAlpha=this.blendSrcAlpha),this.blendDstAlpha!==null&&(i.blendDstAlpha=this.blendDstAlpha),this.blendEquationAlpha!==null&&(i.blendEquationAlpha=this.blendEquationAlpha),this.blendColor&&this.blendColor.isColor&&(i.blendColor=this.blendColor.getHex()),this.blendAlpha!==0&&(i.blendAlpha=this.blendAlpha),this.depthFunc!==os&&(i.depthFunc=this.depthFunc),this.depthTest===!1&&(i.depthTest=this.depthTest),this.depthWrite===!1&&(i.depthWrite=this.depthWrite),this.colorWrite===!1&&(i.colorWrite=this.colorWrite),this.stencilWriteMask!==255&&(i.stencilWriteMask=this.stencilWriteMask),this.stencilFunc!==Yh&&(i.stencilFunc=this.stencilFunc),this.stencilRef!==0&&(i.stencilRef=this.stencilRef),this.stencilFuncMask!==255&&(i.stencilFuncMask=this.stencilFuncMask),this.stencilFail!==cs&&(i.stencilFail=this.stencilFail),this.stencilZFail!==cs&&(i.stencilZFail=this.stencilZFail),this.stencilZPass!==cs&&(i.stencilZPass=this.stencilZPass),this.stencilWrite===!0&&(i.stencilWrite=this.stencilWrite),this.rotation!==void 0&&this.rotation!==0&&(i.rotation=this.rotation),this.polygonOffset===!0&&(i.polygonOffset=!0),this.polygonOffsetFactor!==0&&(i.polygonOffsetFactor=this.polygonOffsetFactor),this.polygonOffsetUnits!==0&&(i.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth!==void 0&&this.linewidth!==1&&(i.linewidth=this.linewidth),this.dashSize!==void 0&&(i.dashSize=this.dashSize),this.gapSize!==void 0&&(i.gapSize=this.gapSize),this.scale!==void 0&&(i.scale=this.scale),this.dithering===!0&&(i.dithering=!0),this.alphaTest>0&&(i.alphaTest=this.alphaTest),this.alphaHash===!0&&(i.alphaHash=!0),this.alphaToCoverage===!0&&(i.alphaToCoverage=!0),this.premultipliedAlpha===!0&&(i.premultipliedAlpha=!0),this.forceSinglePass===!0&&(i.forceSinglePass=!0),this.wireframe===!0&&(i.wireframe=!0),this.wireframeLinewidth>1&&(i.wireframeLinewidth=this.wireframeLinewidth),this.wireframeLinecap!=="round"&&(i.wireframeLinecap=this.wireframeLinecap),this.wireframeLinejoin!=="round"&&(i.wireframeLinejoin=this.wireframeLinejoin),this.flatShading===!0&&(i.flatShading=!0),this.visible===!1&&(i.visible=!1),this.toneMapped===!1&&(i.toneMapped=!1),this.fog===!1&&(i.fog=!1),Object.keys(this.userData).length>0&&(i.userData=this.userData);function n(r){const a=[];for(const o in r){const h=r[o];delete h.metadata,a.push(h)}return a}if(e){const r=n(t.textures),a=n(t.images);r.length>0&&(i.textures=r),a.length>0&&(i.images=a)}return i}clone(){return new this.constructor().copy(this)}copy(t){this.name=t.name,this.blending=t.blending,this.side=t.side,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.blendColor.copy(t.blendColor),this.blendAlpha=t.blendAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;const e=t.clippingPlanes;let i=null;if(e!==null){const n=e.length;i=new Array(n);for(let r=0;r!==n;++r)i[r]=e[r].clone()}return this.clippingPlanes=i,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.alphaHash=t.alphaHash,this.alphaToCoverage=t.alphaToCoverage,this.premultipliedAlpha=t.premultipliedAlpha,this.forceSinglePass=t.forceSinglePass,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(t){t===!0&&this.version++}}class ol extends sr{constructor(t){super(),this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new Wt(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new Si,this.combine=Nh,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapRotation.copy(t.envMapRotation),this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.fog=t.fog,this}}const me=new O,Qr=new Nt;let If=0;class yi{constructor(t,e,i=!1){if(Array.isArray(t))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,Object.defineProperty(this,"id",{value:If++}),this.name="",this.array=t,this.itemSize=e,this.count=t!==void 0?t.length/e:0,this.normalized=i,this.usage=Zh,this.updateRanges=[],this.gpuType=Bi,this.version=0}onUploadCallback(){}set needsUpdate(t){t===!0&&this.version++}setUsage(t){return this.usage=t,this}addUpdateRange(t,e){this.updateRanges.push({start:t,count:e})}clearUpdateRanges(){this.updateRanges.length=0}copy(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.usage=t.usage,this.gpuType=t.gpuType,this}copyAt(t,e,i){t*=this.itemSize,i*=e.itemSize;for(let n=0,r=this.itemSize;n<r;n++)this.array[t+n]=e.array[i+n];return this}copyArray(t){return this.array.set(t),this}applyMatrix3(t){if(this.itemSize===2)for(let e=0,i=this.count;e<i;e++)Qr.fromBufferAttribute(this,e),Qr.applyMatrix3(t),this.setXY(e,Qr.x,Qr.y);else if(this.itemSize===3)for(let e=0,i=this.count;e<i;e++)me.fromBufferAttribute(this,e),me.applyMatrix3(t),this.setXYZ(e,me.x,me.y,me.z);return this}applyMatrix4(t){for(let e=0,i=this.count;e<i;e++)me.fromBufferAttribute(this,e),me.applyMatrix4(t),this.setXYZ(e,me.x,me.y,me.z);return this}applyNormalMatrix(t){for(let e=0,i=this.count;e<i;e++)me.fromBufferAttribute(this,e),me.applyNormalMatrix(t),this.setXYZ(e,me.x,me.y,me.z);return this}transformDirection(t){for(let e=0,i=this.count;e<i;e++)me.fromBufferAttribute(this,e),me.transformDirection(t),this.setXYZ(e,me.x,me.y,me.z);return this}set(t,e=0){return this.array.set(t,e),this}getComponent(t,e){let i=this.array[t*this.itemSize+e];return this.normalized&&(i=$s(i,this.array)),i}setComponent(t,e,i){return this.normalized&&(i=ze(i,this.array)),this.array[t*this.itemSize+e]=i,this}getX(t){let e=this.array[t*this.itemSize];return this.normalized&&(e=$s(e,this.array)),e}setX(t,e){return this.normalized&&(e=ze(e,this.array)),this.array[t*this.itemSize]=e,this}getY(t){let e=this.array[t*this.itemSize+1];return this.normalized&&(e=$s(e,this.array)),e}setY(t,e){return this.normalized&&(e=ze(e,this.array)),this.array[t*this.itemSize+1]=e,this}getZ(t){let e=this.array[t*this.itemSize+2];return this.normalized&&(e=$s(e,this.array)),e}setZ(t,e){return this.normalized&&(e=ze(e,this.array)),this.array[t*this.itemSize+2]=e,this}getW(t){let e=this.array[t*this.itemSize+3];return this.normalized&&(e=$s(e,this.array)),e}setW(t,e){return this.normalized&&(e=ze(e,this.array)),this.array[t*this.itemSize+3]=e,this}setXY(t,e,i){return t*=this.itemSize,this.normalized&&(e=ze(e,this.array),i=ze(i,this.array)),this.array[t+0]=e,this.array[t+1]=i,this}setXYZ(t,e,i,n){return t*=this.itemSize,this.normalized&&(e=ze(e,this.array),i=ze(i,this.array),n=ze(n,this.array)),this.array[t+0]=e,this.array[t+1]=i,this.array[t+2]=n,this}setXYZW(t,e,i,n,r){return t*=this.itemSize,this.normalized&&(e=ze(e,this.array),i=ze(i,this.array),n=ze(n,this.array),r=ze(r,this.array)),this.array[t+0]=e,this.array[t+1]=i,this.array[t+2]=n,this.array[t+3]=r,this}onUpload(t){return this.onUploadCallback=t,this}clone(){return new this.constructor(this.array,this.itemSize).copy(this)}toJSON(){const t={itemSize:this.itemSize,type:this.array.constructor.name,array:Array.from(this.array),normalized:this.normalized};return this.name!==""&&(t.name=this.name),this.usage!==Zh&&(t.usage=this.usage),t}}class uA extends yi{constructor(t,e,i){super(new Uint16Array(t),e,i)}}class dA extends yi{constructor(t,e,i){super(new Uint32Array(t),e,i)}}class Nn extends yi{constructor(t,e,i){super(new Float32Array(t),e,i)}}let vf=0;const ti=new de,ll=new Ee,ys=new O,je=new gs,rr=new gs,Se=new O;class On extends wn{constructor(){super(),this.isBufferGeometry=!0,Object.defineProperty(this,"id",{value:vf++}),this.uuid=Ks(),this.name="",this.type="BufferGeometry",this.index=null,this.indirect=null,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}getIndex(){return this.index}setIndex(t){return Array.isArray(t)?this.index=new(Qh(t)?dA:uA)(t,1):this.index=t,this}setIndirect(t){return this.indirect=t,this}getIndirect(){return this.indirect}getAttribute(t){return this.attributes[t]}setAttribute(t,e){return this.attributes[t]=e,this}deleteAttribute(t){return delete this.attributes[t],this}hasAttribute(t){return this.attributes[t]!==void 0}addGroup(t,e,i=0){this.groups.push({start:t,count:e,materialIndex:i})}clearGroups(){this.groups=[]}setDrawRange(t,e){this.drawRange.start=t,this.drawRange.count=e}applyMatrix4(t){const e=this.attributes.position;e!==void 0&&(e.applyMatrix4(t),e.needsUpdate=!0);const i=this.attributes.normal;if(i!==void 0){const r=new Ot().getNormalMatrix(t);i.applyNormalMatrix(r),i.needsUpdate=!0}const n=this.attributes.tangent;return n!==void 0&&(n.transformDirection(t),n.needsUpdate=!0),this.boundingBox!==null&&this.computeBoundingBox(),this.boundingSphere!==null&&this.computeBoundingSphere(),this}applyQuaternion(t){return ti.makeRotationFromQuaternion(t),this.applyMatrix4(ti),this}rotateX(t){return ti.makeRotationX(t),this.applyMatrix4(ti),this}rotateY(t){return ti.makeRotationY(t),this.applyMatrix4(ti),this}rotateZ(t){return ti.makeRotationZ(t),this.applyMatrix4(ti),this}translate(t,e,i){return ti.makeTranslation(t,e,i),this.applyMatrix4(ti),this}scale(t,e,i){return ti.makeScale(t,e,i),this.applyMatrix4(ti),this}lookAt(t){return ll.lookAt(t),ll.updateMatrix(),this.applyMatrix4(ll.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(ys).negate(),this.translate(ys.x,ys.y,ys.z),this}setFromPoints(t){const e=this.getAttribute("position");if(e===void 0){const i=[];for(let n=0,r=t.length;n<r;n++){const a=t[n];i.push(a.x,a.y,a.z||0)}this.setAttribute("position",new Nn(i,3))}else{const i=Math.min(t.length,e.count);for(let n=0;n<i;n++){const r=t[n];e.setXYZ(n,r.x,r.y,r.z||0)}t.length>e.count&&console.warn("THREE.BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry."),e.needsUpdate=!0}return this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new gs);const t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute){console.error("THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.",this),this.boundingBox.set(new O(-1/0,-1/0,-1/0),new O(1/0,1/0,1/0));return}if(t!==void 0){if(this.boundingBox.setFromBufferAttribute(t),e)for(let i=0,n=e.length;i<n;i++){const r=e[i];je.setFromBufferAttribute(r),this.morphTargetsRelative?(Se.addVectors(this.boundingBox.min,je.min),this.boundingBox.expandByPoint(Se),Se.addVectors(this.boundingBox.max,je.max),this.boundingBox.expandByPoint(Se)):(this.boundingBox.expandByPoint(je.min),this.boundingBox.expandByPoint(je.max))}}else this.boundingBox.makeEmpty();(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))&&console.error('THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The "position" attribute is likely to have NaN values.',this)}computeBoundingSphere(){this.boundingSphere===null&&(this.boundingSphere=new jo);const t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute){console.error("THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere.",this),this.boundingSphere.set(new O,1/0);return}if(t){const i=this.boundingSphere.center;if(je.setFromBufferAttribute(t),e)for(let r=0,a=e.length;r<a;r++){const o=e[r];rr.setFromBufferAttribute(o),this.morphTargetsRelative?(Se.addVectors(je.min,rr.min),je.expandByPoint(Se),Se.addVectors(je.max,rr.max),je.expandByPoint(Se)):(je.expandByPoint(rr.min),je.expandByPoint(rr.max))}je.getCenter(i);let n=0;for(let r=0,a=t.count;r<a;r++)Se.fromBufferAttribute(t,r),n=Math.max(n,i.distanceToSquared(Se));if(e)for(let r=0,a=e.length;r<a;r++){const o=e[r],h=this.morphTargetsRelative;for(let l=0,A=o.count;l<A;l++)Se.fromBufferAttribute(o,l),h&&(ys.fromBufferAttribute(t,l),Se.add(ys)),n=Math.max(n,i.distanceToSquared(Se))}this.boundingSphere.radius=Math.sqrt(n),isNaN(this.boundingSphere.radius)&&console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.',this)}}computeTangents(){const t=this.index,e=this.attributes;if(t===null||e.position===void 0||e.normal===void 0||e.uv===void 0){console.error("THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)");return}const i=e.position,n=e.normal,r=e.uv;this.hasAttribute("tangent")===!1&&this.setAttribute("tangent",new yi(new Float32Array(4*i.count),4));const a=this.getAttribute("tangent"),o=[],h=[];for(let P=0;P<i.count;P++)o[P]=new O,h[P]=new O;const l=new O,A=new O,c=new O,u=new Nt,d=new Nt,p=new Nt,m=new O,g=new O;function f(P,E,x){l.fromBufferAttribute(i,P),A.fromBufferAttribute(i,E),c.fromBufferAttribute(i,x),u.fromBufferAttribute(r,P),d.fromBufferAttribute(r,E),p.fromBufferAttribute(r,x),A.sub(l),c.sub(l),d.sub(u),p.sub(u);const b=1/(d.x*p.y-p.x*d.y);isFinite(b)&&(m.copy(A).multiplyScalar(p.y).addScaledVector(c,-d.y).multiplyScalar(b),g.copy(c).multiplyScalar(d.x).addScaledVector(A,-p.x).multiplyScalar(b),o[P].add(m),o[E].add(m),o[x].add(m),h[P].add(g),h[E].add(g),h[x].add(g))}let M=this.groups;M.length===0&&(M=[{start:0,count:t.count}]);for(let P=0,E=M.length;P<E;++P){const x=M[P],b=x.start,z=x.count;for(let F=b,U=b+z;F<U;F+=3)f(t.getX(F+0),t.getX(F+1),t.getX(F+2))}const S=new O,v=new O,T=new O,_=new O;function w(P){T.fromBufferAttribute(n,P),_.copy(T);const E=o[P];S.copy(E),S.sub(T.multiplyScalar(T.dot(E))).normalize(),v.crossVectors(_,E);const b=v.dot(h[P])<0?-1:1;a.setXYZW(P,S.x,S.y,S.z,b)}for(let P=0,E=M.length;P<E;++P){const x=M[P],b=x.start,z=x.count;for(let F=b,U=b+z;F<U;F+=3)w(t.getX(F+0)),w(t.getX(F+1)),w(t.getX(F+2))}}computeVertexNormals(){const t=this.index,e=this.getAttribute("position");if(e!==void 0){let i=this.getAttribute("normal");if(i===void 0)i=new yi(new Float32Array(e.count*3),3),this.setAttribute("normal",i);else for(let u=0,d=i.count;u<d;u++)i.setXYZ(u,0,0,0);const n=new O,r=new O,a=new O,o=new O,h=new O,l=new O,A=new O,c=new O;if(t)for(let u=0,d=t.count;u<d;u+=3){const p=t.getX(u+0),m=t.getX(u+1),g=t.getX(u+2);n.fromBufferAttribute(e,p),r.fromBufferAttribute(e,m),a.fromBufferAttribute(e,g),A.subVectors(a,r),c.subVectors(n,r),A.cross(c),o.fromBufferAttribute(i,p),h.fromBufferAttribute(i,m),l.fromBufferAttribute(i,g),o.add(A),h.add(A),l.add(A),i.setXYZ(p,o.x,o.y,o.z),i.setXYZ(m,h.x,h.y,h.z),i.setXYZ(g,l.x,l.y,l.z)}else for(let u=0,d=e.count;u<d;u+=3)n.fromBufferAttribute(e,u+0),r.fromBufferAttribute(e,u+1),a.fromBufferAttribute(e,u+2),A.subVectors(a,r),c.subVectors(n,r),A.cross(c),i.setXYZ(u+0,A.x,A.y,A.z),i.setXYZ(u+1,A.x,A.y,A.z),i.setXYZ(u+2,A.x,A.y,A.z);this.normalizeNormals(),i.needsUpdate=!0}}normalizeNormals(){const t=this.attributes.normal;for(let e=0,i=t.count;e<i;e++)Se.fromBufferAttribute(t,e),Se.normalize(),t.setXYZ(e,Se.x,Se.y,Se.z)}toNonIndexed(){function t(o,h){const l=o.array,A=o.itemSize,c=o.normalized,u=new l.constructor(h.length*A);let d=0,p=0;for(let m=0,g=h.length;m<g;m++){o.isInterleavedBufferAttribute?d=h[m]*o.data.stride+o.offset:d=h[m]*A;for(let f=0;f<A;f++)u[p++]=l[d++]}return new yi(u,A,c)}if(this.index===null)return console.warn("THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed."),this;const e=new On,i=this.index.array,n=this.attributes;for(const o in n){const h=n[o],l=t(h,i);e.setAttribute(o,l)}const r=this.morphAttributes;for(const o in r){const h=[],l=r[o];for(let A=0,c=l.length;A<c;A++){const u=l[A],d=t(u,i);h.push(d)}e.morphAttributes[o]=h}e.morphTargetsRelative=this.morphTargetsRelative;const a=this.groups;for(let o=0,h=a.length;o<h;o++){const l=a[o];e.addGroup(l.start,l.count,l.materialIndex)}return e}toJSON(){const t={metadata:{version:4.7,type:"BufferGeometry",generator:"BufferGeometry.toJSON"}};if(t.uuid=this.uuid,t.type=this.type,this.name!==""&&(t.name=this.name),Object.keys(this.userData).length>0&&(t.userData=this.userData),this.parameters!==void 0){const h=this.parameters;for(const l in h)h[l]!==void 0&&(t[l]=h[l]);return t}t.data={attributes:{}};const e=this.index;e!==null&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});const i=this.attributes;for(const h in i){const l=i[h];t.data.attributes[h]=l.toJSON(t.data)}const n={};let r=!1;for(const h in this.morphAttributes){const l=this.morphAttributes[h],A=[];for(let c=0,u=l.length;c<u;c++){const d=l[c];A.push(d.toJSON(t.data))}A.length>0&&(n[h]=A,r=!0)}r&&(t.data.morphAttributes=n,t.data.morphTargetsRelative=this.morphTargetsRelative);const a=this.groups;a.length>0&&(t.data.groups=JSON.parse(JSON.stringify(a)));const o=this.boundingSphere;return o!==null&&(t.data.boundingSphere=o.toJSON()),t}clone(){return new this.constructor().copy(this)}copy(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const e={};this.name=t.name;const i=t.index;i!==null&&this.setIndex(i.clone());const n=t.attributes;for(const l in n){const A=n[l];this.setAttribute(l,A.clone(e))}const r=t.morphAttributes;for(const l in r){const A=[],c=r[l];for(let u=0,d=c.length;u<d;u++)A.push(c[u].clone(e));this.morphAttributes[l]=A}this.morphTargetsRelative=t.morphTargetsRelative;const a=t.groups;for(let l=0,A=a.length;l<A;l++){const c=a[l];this.addGroup(c.start,c.count,c.materialIndex)}const o=t.boundingBox;o!==null&&(this.boundingBox=o.clone());const h=t.boundingSphere;return h!==null&&(this.boundingSphere=h.clone()),this.drawRange.start=t.drawRange.start,this.drawRange.count=t.drawRange.count,this.userData=t.userData,this}dispose(){this.dispatchEvent({type:"dispose"})}}const fA=new de,Fn=new eA,qr=new jo,gA=new O,Kr=new O,$r=new O,ta=new O,hl=new O,ea=new O,pA=new O,ia=new O;class Ci extends Ee{constructor(t=new On,e=new ol){super(),this.isMesh=!0,this.type="Mesh",this.geometry=t,this.material=e,this.morphTargetDictionary=void 0,this.morphTargetInfluences=void 0,this.count=1,this.updateMorphTargets()}copy(t,e){return super.copy(t,e),t.morphTargetInfluences!==void 0&&(this.morphTargetInfluences=t.morphTargetInfluences.slice()),t.morphTargetDictionary!==void 0&&(this.morphTargetDictionary=Object.assign({},t.morphTargetDictionary)),this.material=Array.isArray(t.material)?t.material.slice():t.material,this.geometry=t.geometry,this}updateMorphTargets(){const e=this.geometry.morphAttributes,i=Object.keys(e);if(i.length>0){const n=e[i[0]];if(n!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let r=0,a=n.length;r<a;r++){const o=n[r].name||String(r);this.morphTargetInfluences.push(0),this.morphTargetDictionary[o]=r}}}}getVertexPosition(t,e){const i=this.geometry,n=i.attributes.position,r=i.morphAttributes.position,a=i.morphTargetsRelative;e.fromBufferAttribute(n,t);const o=this.morphTargetInfluences;if(r&&o){ea.set(0,0,0);for(let h=0,l=r.length;h<l;h++){const A=o[h],c=r[h];A!==0&&(hl.fromBufferAttribute(c,t),a?ea.addScaledVector(hl,A):ea.addScaledVector(hl.sub(e),A))}e.add(ea)}return e}raycast(t,e){const i=this.geometry,n=this.material,r=this.matrixWorld;n!==void 0&&(i.boundingSphere===null&&i.computeBoundingSphere(),qr.copy(i.boundingSphere),qr.applyMatrix4(r),Fn.copy(t.ray).recast(t.near),!(qr.containsPoint(Fn.origin)===!1&&(Fn.intersectSphere(qr,gA)===null||Fn.origin.distanceToSquared(gA)>(t.far-t.near)**2))&&(fA.copy(r).invert(),Fn.copy(t.ray).applyMatrix4(fA),!(i.boundingBox!==null&&Fn.intersectsBox(i.boundingBox)===!1)&&this._computeIntersections(t,e,Fn)))}_computeIntersections(t,e,i){let n;const r=this.geometry,a=this.material,o=r.index,h=r.attributes.position,l=r.attributes.uv,A=r.attributes.uv1,c=r.attributes.normal,u=r.groups,d=r.drawRange;if(o!==null)if(Array.isArray(a))for(let p=0,m=u.length;p<m;p++){const g=u[p],f=a[g.materialIndex],M=Math.max(g.start,d.start),S=Math.min(o.count,Math.min(g.start+g.count,d.start+d.count));for(let v=M,T=S;v<T;v+=3){const _=o.getX(v),w=o.getX(v+1),P=o.getX(v+2);n=na(this,f,t,i,l,A,c,_,w,P),n&&(n.faceIndex=Math.floor(v/3),n.face.materialIndex=g.materialIndex,e.push(n))}}else{const p=Math.max(0,d.start),m=Math.min(o.count,d.start+d.count);for(let g=p,f=m;g<f;g+=3){const M=o.getX(g),S=o.getX(g+1),v=o.getX(g+2);n=na(this,a,t,i,l,A,c,M,S,v),n&&(n.faceIndex=Math.floor(g/3),e.push(n))}}else if(h!==void 0)if(Array.isArray(a))for(let p=0,m=u.length;p<m;p++){const g=u[p],f=a[g.materialIndex],M=Math.max(g.start,d.start),S=Math.min(h.count,Math.min(g.start+g.count,d.start+d.count));for(let v=M,T=S;v<T;v+=3){const _=v,w=v+1,P=v+2;n=na(this,f,t,i,l,A,c,_,w,P),n&&(n.faceIndex=Math.floor(v/3),n.face.materialIndex=g.materialIndex,e.push(n))}}else{const p=Math.max(0,d.start),m=Math.min(h.count,d.start+d.count);for(let g=p,f=m;g<f;g+=3){const M=g,S=g+1,v=g+2;n=na(this,a,t,i,l,A,c,M,S,v),n&&(n.faceIndex=Math.floor(g/3),e.push(n))}}}}function xf(s,t,e,i,n,r,a,o){let h;if(t.side===Ue?h=i.intersectTriangle(a,r,n,!0,o):h=i.intersectTriangle(n,r,a,t.side===en,o),h===null)return null;ia.copy(o),ia.applyMatrix4(s.matrixWorld);const l=e.ray.origin.distanceTo(ia);return l<e.near||l>e.far?null:{distance:l,point:ia.clone(),object:s}}function na(s,t,e,i,n,r,a,o,h,l){s.getVertexPosition(o,Kr),s.getVertexPosition(h,$r),s.getVertexPosition(l,ta);const A=xf(s,t,e,i,Kr,$r,ta,pA);if(A){const c=new O;mi.getBarycoord(pA,Kr,$r,ta,c),n&&(A.uv=mi.getInterpolatedAttribute(n,o,h,l,c,new Nt)),r&&(A.uv1=mi.getInterpolatedAttribute(r,o,h,l,c,new Nt)),a&&(A.normal=mi.getInterpolatedAttribute(a,o,h,l,c,new O),A.normal.dot(i.direction)>0&&A.normal.multiplyScalar(-1));const u={a:o,b:h,c:l,normal:new O,materialIndex:0};mi.getNormal(Kr,$r,ta,u.normal),A.face=u,A.barycoord=c}return A}class Ms extends On{constructor(t=1,e=1,i=1,n=1,r=1,a=1){super(),this.type="BoxGeometry",this.parameters={width:t,height:e,depth:i,widthSegments:n,heightSegments:r,depthSegments:a};const o=this;n=Math.floor(n),r=Math.floor(r),a=Math.floor(a);const h=[],l=[],A=[],c=[];let u=0,d=0;p("z","y","x",-1,-1,i,e,t,a,r,0),p("z","y","x",1,-1,i,e,-t,a,r,1),p("x","z","y",1,1,t,i,e,n,a,2),p("x","z","y",1,-1,t,i,-e,n,a,3),p("x","y","z",1,-1,t,e,i,n,r,4),p("x","y","z",-1,-1,t,e,-i,n,r,5),this.setIndex(h),this.setAttribute("position",new Nn(l,3)),this.setAttribute("normal",new Nn(A,3)),this.setAttribute("uv",new Nn(c,2));function p(m,g,f,M,S,v,T,_,w,P,E){const x=v/w,b=T/P,z=v/2,F=T/2,U=_/2,W=w+1,Y=P+1;let $=0,H=0;const rt=new O;for(let ht=0;ht<Y;ht++){const mt=ht*b-F;for(let Ut=0;Ut<W;Ut++){const re=Ut*x-z;rt[m]=re*M,rt[g]=mt*S,rt[f]=U,l.push(rt.x,rt.y,rt.z),rt[m]=0,rt[g]=0,rt[f]=_>0?1:-1,A.push(rt.x,rt.y,rt.z),c.push(Ut/w),c.push(1-ht/P),$+=1}}for(let ht=0;ht<P;ht++)for(let mt=0;mt<w;mt++){const Ut=u+mt+W*ht,re=u+mt+W*(ht+1),te=u+(mt+1)+W*(ht+1),j=u+(mt+1)+W*ht;h.push(Ut,re,j),h.push(re,te,j),H+=6}o.addGroup(d,H,E),d+=H,u+=$}}copy(t){return super.copy(t),this.parameters=Object.assign({},t.parameters),this}static fromJSON(t){return new Ms(t.width,t.height,t.depth,t.widthSegments,t.heightSegments,t.depthSegments)}}function bs(s){const t={};for(const e in s){t[e]={};for(const i in s[e]){const n=s[e][i];n&&(n.isColor||n.isMatrix3||n.isMatrix4||n.isVector2||n.isVector3||n.isVector4||n.isTexture||n.isQuaternion)?n.isRenderTargetTexture?(console.warn("UniformsUtils: Textures of render targets cannot be cloned via cloneUniforms() or mergeUniforms()."),t[e][i]=null):t[e][i]=n.clone():Array.isArray(n)?t[e][i]=n.slice():t[e][i]=n}}return t}function De(s){const t={};for(let e=0;e<s.length;e++){const i=bs(s[e]);for(const n in i)t[n]=i[n]}return t}function Ef(s){const t=[];for(let e=0;e<s.length;e++)t.push(s[e].clone());return t}function mA(s){const t=s.getRenderTarget();return t===null?s.outputColorSpace:t.isXRRenderTarget===!0?t.texture.colorSpace:Xt.workingColorSpace}const Sf={clone:bs,merge:De};var yf=`void main() {
|
|
124
|
+
}`,ll={depth_vert:vu,depth_frag:xu};class Eu extends Kn{constructor(t=(n,s,a)=>a.set(n,s,Math.cos(n)*Math.sin(s)),e=8,i=8){super(),this.type="ParametricGeometry",this.parameters={func:t,slices:e,stacks:i};const n=[],s=[],a=[],o=[],l=1e-5,A=new V,h=new V,c=new V,u=new V,d=new V,p=e+1;for(let m=0;m<=i;m++){const g=m/i;for(let f=0;f<=e;f++){const y=f/e;t(y,g,h),s.push(h.x,h.y,h.z),y-l>=0?(t(y-l,g,c),u.subVectors(h,c)):(t(y+l,g,c),u.subVectors(c,h)),g-l>=0?(t(y,g-l,c),d.subVectors(h,c)):(t(y,g+l,c),d.subVectors(c,h)),A.crossVectors(u,d).normalize(),a.push(A.x,A.y,A.z),o.push(y,g)}}for(let m=0;m<i;m++)for(let g=0;g<e;g++){const f=m*p+g,y=m*p+g+1,S=(m+1)*p+g+1,v=(m+1)*p+g;n.push(f,y,v),n.push(y,S,v)}this.setIndex(n),this.setAttribute("position",new gn(s,3)),this.setAttribute("normal",new gn(a,3)),this.setAttribute("uv",new gn(o,2))}copy(t){return super.copy(t),this.parameters=Object.assign({},t.parameters),this}}const Fa=new V;class In{p1;p2;restDistance;constructor(t,e,i){this.p1=t,this.p2=e,this.restDistance=i}resolve(){const t=this.p1,e=this.p2,i=this.restDistance;Fa.subVectors(e.position,t.position);const n=Fa.length();if(n===0)return;const s=Fa.multiplyScalar((1-i/n)/2);t.position.add(s),e.position.sub(s)}}const hl=2,Su=.03,Mu=1-Su,yu=.12,bu=1.225;class Tu{position;previous;original;mass;inverseMass;acceleration;tmp;constructor(t,e){this.position=t.clone(),this.previous=t.clone(),this.original=t.clone(),this.mass=e,this.inverseMass=1/e,this.acceleration=new V,this.tmp=new V}applyForce(t){this.acceleration.addScaledVector(t,this.inverseMass)}integrate(t){const e=this.tmp.subVectors(this.position,this.previous).multiplyScalar(Mu).add(this.position).addScaledVector(this.acceleration,t);this.tmp=this.previous,this.previous=this.position,this.position=e,this.acceleration.set(0,0,0)}}class wu{xSegments;ySegments;restDistance;width;height;particles;constraints;particleAt;geometry;constructor(t,e,i,n){const s=i*t,a=i*e,o=[],l=[],A=(m,g)=>o[m+g*(t+1)],h=(m,g,f)=>{f.set(m*s,g*a,0)},c=new V,u=n/((e+1)*(t+1));for(let m=0;m<=e;m++)for(let g=0;g<=t;g++)h(g/t,m/e,c),o.push(new Tu(c,u));for(let m=0;m<e;m++)for(let g=0;g<t;g++)l.push(new In(A(g,m),A(g,m+1),i),new In(A(g,m),A(g+1,m),i));for(let m=t,g=0;g<e;g++)l.push(new In(A(m,g),A(m,g+1),i));for(let m=e,g=0;g<t;g++)l.push(new In(A(g,m),A(g+1,m),i));const d=Math.sqrt(i*i*2);for(let m=0;m<e;m++)for(let g=0;g<t;g++)l.push(new In(A(g,m),A(g+1,m+1),d),new In(A(g+1,m),A(g,m+1),d));const p=new Eu(h,t,e);p.getAttribute("position").setUsage(35040),this.xSegments=t,this.ySegments=e,this.restDistance=i,this.width=s,this.height=a,this.particles=o,this.constraints=l,this.particleAt=A,this.geometry=p}reset(){for(const t of this.particles)t.previous.copy(t.position.copy(t.original))}simulate(t){const e=this.particles,i=this.constraints,n=Math.pow(t,2);for(let s=0,a=e.length;s<a;s++)e[s].integrate(n);for(let s=0,a=hl;s<a;s++)for(let o=0,l=i.length;o<l;o++)i[o].resolve()}render(){const t=this.particles,e=this.geometry,i=e.getAttribute("position"),n=i.array;for(let s=0,a=t.length;s<a;s++){const o=t[s].position,l=s*3;n[l]=o.x,n[l+1]=o.y,n[l+2]=o.z}i.needsUpdate=!0,e.computeVertexNormals()}}function Ru(r){const{width:t,height:e,mass:i,restDistance:n}=r;return new wu(Math.max(1,Math.round(t/n)),Math.max(1,Math.round(e/n)),n,i*t*e)}function cl(r,t,e){const i=r*t,n=new Uint8Array(4*i),s=Math.floor(e.r*255),a=Math.floor(e.g*255),o=Math.floor(e.b*255),l=255;for(let h=0;h<i;h++){const c=h*4;n[c]=s,n[c+1]=a,n[c+2]=o,n[c+3]=l}const A=new fu(n,r,t,1023,1009);return A.needsUpdate=!0,A}const _u=cl(1,1,new Ji(16777215));function Pu(r,t){const e=r.geometry;let i=_u,n;const s=o=>(o.needsUpdate=!0,o.anisotropy=16,o.minFilter=1006,o.magFilter=1006,o.wrapS=1001,o.wrapT=1001,o),a=(o,l)=>{o.colorSpace=Ge;const A=new Al({alphaTest:.5,color:16777215,metalness:.08,roughness:.86,side:l,map:o}),h=new ol(e,A);return h.castShadow=!0,h.customDepthMaterial=new Cu({uniforms:{textureMap:{value:o}},vertexShader:ll.depth_vert,fragmentShader:ll.depth_frag,side:l,lights:!1,defines:{DEPTH_PACKING:"3200"}}),h.position.set(0,-r.height,0),h};return t?.texture instanceof pi?(i=s(t.texture),t.backSideTexture instanceof pi&&(n=s(t.backSideTexture))):t?.texture!==void 0&&console.error("FlagWaver.Flag: options.texture must be an instance of THREE.Texture."),[a(i,n!==void 0?0:2),n!==void 0?a(n,1):null]}const le={TOP:"top",LEFT:"left",BOTTOM:"bottom",RIGHT:"right"},Du=(()=>{const r={edges:[],spacing:1};function t(e,i,n,s){const{xSegments:a,ySegments:o,particleAt:l}=e,{spacing:A}=s;switch(n){case le.TOP:for(let h=0;h<=a;h+=A)i.push(l(h,o));break;case le.LEFT:for(let h=0;h<=o;h+=A)i.push(l(0,h));break;case le.BOTTOM:for(let h=0;h<=a;h+=A)i.push(l(h,0));break;case le.RIGHT:for(let h=0;h<=o;h+=A)i.push(l(a,h));break}}return function(e,i,n={}){const s={...r,...n},{edges:a}=s;if(typeof a=="string")t(e,i,a,s);else if(Array.isArray(a)&&a.length>0)for(let o=0,l=a.length;o<l;o++)t(e,i,a[o],s)}})(),ul=1.2,Mr=new V;class dl extends In{resolve(){const t=this.p1,e=this.p2,i=this.restDistance*ul;Mr.subVectors(t.position,e.position);const n=Mr.length()/ul;Mr.normalize();const s=Mr.multiplyScalar(n-i);n>i&&e.position.add(s)}}function fl(r){if(Array.isArray(r))for(const t of r)gl(t);else gl(r)}function gl(r){r.map?.dispose(),r.dispose()}const Lu=cl(1,1,new Ji(16777215));class Us{cloth;pins;lengthConstraints;mesh;mesh2;object;static defaults={width:1.8,height:1.2,mass:.11,restDistance:1.2/10,rigidness:1,texture:Lu,backSideTexture:void 0,pin:{edges:[le.LEFT],spacing:1}};constructor(t={}){const e={...Us.defaults,...t};this.cloth=Ru(e),this.pins=[],this.lengthConstraints=[];const[i,n]=Pu(this.cloth,e);this.mesh=i,this.mesh2=n,this.object=new je,this.object.add(this.mesh),this.mesh2!==null&&this.object.add(this.mesh2),this.pin(e.pin)}destroy(){fl(this.mesh.material),this.mesh.geometry.dispose(),this.mesh.customDepthMaterial?.dispose(),this.mesh2!==null&&(fl(this.mesh2.material),this.mesh2.customDepthMaterial?.dispose())}pin(t){Du(this.cloth,this.pins,t)}unpin(){this.pins=[]}setLengthConstraints(t){const{xSegments:e,ySegments:i,restDistance:n,particleAt:s}=this.cloth,a=[];if(t===le.LEFT)for(let o=0;o<=i;o++)for(let l=0;l<e;l++)a.push(new dl(s(l,o),s(l+1,o),n));else if(t===le.TOP)for(let o=0;o<=e;o++)for(let l=i;l>0;l--)a.push(new dl(s(o,l),s(o,l-1),n));this.lengthConstraints=a}reset(){this.cloth.reset()}simulate(t){const e=this.pins,i=this.lengthConstraints;this.cloth.simulate(t);for(const n of e)n.previous.copy(n.position.copy(n.original));for(let n=0;n<hl;n++)for(const s of i)s.resolve()}render(){this.cloth.render()}setTexture(t){t.needsUpdate=!0,t.anisotropy=16,t.minFilter=1006,t.magFilter=1006,t.wrapS=1001,t.wrapT=1001,t.colorSpace=Ge;const e=this.mesh.material;e.map!==null&&e.map!==void 0&&(e.map=t,e.needsUpdate=!0);const i=this.mesh.customDepthMaterial;if(i!=null){const n=i;n.uniforms!=null&&n.uniforms.textureMap!=null&&(n.uniforms.textureMap.value=t)}if(this.mesh2!=null){const n=this.mesh2.material;n.map!=null&&(n.map=t,n.needsUpdate=!0);const s=this.mesh2.customDepthMaterial;if(s!=null){const a=s;a.uniforms?.textureMap!=null&&(a.uniforms.textureMap.value=t)}}}}const Cn={CROSSBAR:"CROSSBAR",GALLERY:"GALLERY",HORIZONTAL:"HORIZONTAL",OUTRIGGER:"OUTRIGGER",VERTICAL:"VERTICAL"},zs={NONE:"none",TOP_RIGHT:"topright",TOP_LEFT:"topleft"};class _i{top;mesh;object;constructor(t){this.create(t)}static defaults={flagpoleType:Cn.VERTICAL,poleWidth:.076,poleLength:6,poleCapSize:.076*4/3,crossbarWidth:.076*2/3,crossbarLength:1.2,crossbarCapSize:.076*2/3*3/2,poleTopOffset:.1,verticalHoisting:zs.TOP_RIGHT};destroy(){this.mesh!==void 0&&((Array.isArray(this.mesh.material)?this.mesh.material:[this.mesh.material]).forEach(t=>{t.dispose()}),this.mesh.geometry.dispose())}create(t){this.destroy();const e=Object.assign({},_i.defaults,t),i=this.buildGeometry(e),n=new Al({color:16711422,metalness:.98,roughness:.55}),s=new ol(i,n);s.receiveShadow=!0,s.castShadow=!0,this.top=new V(0,e.poleLength,0),this.mesh=s,this.object=this.mesh}addFlag(t){t.unpin(),t.pin({edges:[le.LEFT]}),t.setLengthConstraints(le.LEFT),t.object.position.add(this.top)}}function Oa(r,t=!1){const e=r[0].index!==null,i=new Set(Object.keys(r[0].attributes)),n=new Set(Object.keys(r[0].morphAttributes)),s={},a={},o=r[0].morphTargetsRelative,l=new Kn;let A=0;for(let h=0;h<r.length;++h){const c=r[h];let u=0;if(e!==(c.index!==null))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+h+". All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them."),null;for(const d in c.attributes){if(!i.has(d))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+h+'. All geometries must have compatible attributes; make sure "'+d+'" attribute exists among all geometries, or in none of them.'),null;s[d]===void 0&&(s[d]=[]),s[d].push(c.attributes[d]),u++}if(u!==i.size)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+h+". Make sure all geometries have the same number of attributes."),null;if(o!==c.morphTargetsRelative)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+h+". .morphTargetsRelative must be consistent throughout all geometries."),null;for(const d in c.morphAttributes){if(!n.has(d))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+h+". .morphAttributes must be consistent throughout all geometries."),null;a[d]===void 0&&(a[d]=[]),a[d].push(c.morphAttributes[d])}if(t){let d;if(e)d=c.index.count;else if(c.attributes.position!==void 0)d=c.attributes.position.count;else return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+h+". The geometry must have either an index or a position attribute"),null;l.addGroup(A,d,h),A+=d}}if(e){let h=0;const c=[];for(let u=0;u<r.length;++u){const d=r[u].index;for(let p=0;p<d.count;++p)c.push(d.getX(p)+h);h+=r[u].attributes.position.count}l.setIndex(c)}for(const h in s){const c=pl(s[h]);if(!c)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the "+h+" attribute."),null;l.setAttribute(h,c)}for(const h in a){const c=a[h][0].length;if(c===0)break;l.morphAttributes=l.morphAttributes||{},l.morphAttributes[h]=[];for(let u=0;u<c;++u){const d=[];for(let m=0;m<a[h].length;++m)d.push(a[h][m][u]);const p=pl(d);if(!p)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the "+h+" morphAttribute."),null;l.morphAttributes[h].push(p)}}return l}function pl(r){let t,e,i,n=-1,s=0;for(let A=0;A<r.length;++A){const h=r[A];if(t===void 0&&(t=h.array.constructor),t!==h.array.constructor)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes."),null;if(e===void 0&&(e=h.itemSize),e!==h.itemSize)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes."),null;if(i===void 0&&(i=h.normalized),i!==h.normalized)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes."),null;if(n===-1&&(n=h.gpuType),n!==h.gpuType)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.gpuType must be consistent across matching attributes."),null;s+=h.count*e}const a=new t(s),o=new fn(a,e,i);let l=0;for(let A=0;A<r.length;++A){const h=r[A];if(h.isInterleavedBufferAttribute){const c=l/e;for(let u=0,d=h.count;u<d;u++)for(let p=0;p<e;p++){const m=h.getComponent(u,p);o.setComponent(u+c,p,m)}}else a.set(h.array,l);l+=h.count*e}return n!==void 0&&(o.gpuType=n),o}function Gs(r){const t=r.poleWidth/2,e=r.poleLength,i=32,n=r.poleCapSize/2,s=new mn(t,t,e,i);s.translate(0,r.poleLength/2,0);const a=new mn(n,n,n,i);return a.translate(0,e+n/2,0),Oa([s,a])}function Nu(r){const t=Gs(r),e=r.poleWidth/2,i=r.poleLength,n=r.crossbarWidth/2,s=r.crossbarLength,a=16,o=r.crossbarCapSize/2,l=r.poleTopOffset,A=new mn(n,n,s,a);A.rotateZ(Math.PI/2);const h=new mn(o,o,o,a),c=h.clone(),u=i-l,d=e+n;return h.rotateZ(Math.PI/2),h.translate(-s/2,u,d),c.rotateZ(-Math.PI/2),c.translate(s/2,u,d),A.translate(0,u,d),Oa([t,A,h,c])}function Bu(r){const t=Gs(r),e=r.poleLength,i=r.poleCapSize/2,n=r.crossbarWidth/2,s=r.crossbarLength,a=16,o=new mn(n,n,s,a);return o.rotateZ(Math.PI/2),o.translate(s/2,e+i-n,0),Oa([t,o])}class ml extends _i{constructor(t={}){super(t)}buildGeometry(t){return Gs(t)}}class Fu{flagpole;flag;object;constructor(t={}){const e={...t},{flagpole:i,flag:n}=e;this.flagpole=i??new ml,this.flag=n??new Us,this.flagpole.addFlag(this.flag),this.object=new je,this.object.add(this.flagpole.object),this.object.add(this.flag.object)}destroy(){this.destroyChildSubject(this.flagpole),this.destroyChildSubject(this.flag)}destroyChildSubject(t){t!=null&&(this.object.remove(t.object),t.destroy())}reset(){this.flag.reset()}simulate(t){this.flag.simulate(t)}render(){this.flag.render()}setTexture(t){this.flag.setTexture(t)}}function Ou(r){return r===0?.001:r}function Uu(r){return r.x===0&&(r.x=.001),r.y===0&&(r.y=.001),r.z===0&&(r.z=.001),r}const Il={blowFromLeftDirection:r=>r.set(2e3,0,1e3),constantSpeed:r=>r};function zu(r){return .5*bu*Math.pow(r,2)}class Ua{direction;speed;directionFn;speedFn;pressure;static defaults={direction:new V(1,0,0),speed:10,directionFn:Il.blowFromLeftDirection,speedFn:Il.constantSpeed};constructor(t={}){const e={...Ua.defaults,...t};this.direction=e.direction.clone(),this.speed=e.speed,this.directionFn=e.directionFn,this.speedFn=e.speedFn,this.pressure=new V}update(){const t=Date.now();this.directionFn(Uu(this.pressure.copy(this.direction)),t).normalize().multiplyScalar(zu(this.speedFn(Ou(this.speed),t)))}}const yr=new V,Cl=new V;function vl(r,t){return yr.copy(r),t instanceof je&&(Cl.setFromMatrixPosition(t.matrixWorld),yr.add(Cl),t.worldToLocal(yr)),yr}const Gu=new V(0,-9.80665,0);function ku(r,t){const e=r.particles,i=vl(Gu,t);for(let n=0,s=e.length;n<s;n++)e[n].acceleration.add(i)}const br=new V,xl=new V;function Hu(r){return r<0?0:r>1?1:r}function El(r){const t=Math.sin(r*12.9898)*43758.5453;return t-Math.floor(t)}function Vu(r,t){const e=Hu(t?.randomizeAmount??0);if(e===0)return 1;const i=t?.randomSeed??r?.id??0,n=t?.time??0,s=.5+El(i)*2,a=El(i+1e3)*Math.PI*2;return 1+(Math.sin(n*s+a)*.5+Math.sin(n*s*1.7+a*.3)*.3)*e}function Wu(r,t,e){return br.subVectors(e,t),xl.subVectors(r,t),br.cross(xl),br.normalize(),br}function Yu(r,t,e,i){const n=r.particles,s=r.geometry.getIndex();if(t==null||s==null)return;const a=r.restDistance*r.restDistance/2,o=Vu(e,i),l=vl(t.pressure,e).multiplyScalar(yu*a/3*o);for(let A=0,h=s.count;A<h;A+=3){const c=s.getX(A),u=s.getX(A+1),d=s.getX(A+2),p=n[c],m=n[u],g=n[d],f=Wu(p.position,m.position,g.position);f.multiplyScalar(f.dot(l)),p.applyForce(f),m.applyForce(f),g.applyForce(f)}}function Xu(r){return new Us(r)}function Zu(r,t){const e={...r};return Object.entries(t).forEach(([i,n])=>{n!==void 0&&(e[i]=n)}),e}class Ju extends _i{verticalHoisting;constructor(t={}){super(t);const e=Zu(_i.defaults,t);this.top.set(0,e.poleLength-e.poleTopOffset,e.poleWidth/2+e.crossbarWidth/2),this.verticalHoisting=e.verticalHoisting}buildGeometry(t){return Nu(t)}addFlag(t){switch(t.unpin(),this.verticalHoisting){case zs.NONE:t.pin({edges:[le.TOP]}),t.setLengthConstraints(le.TOP),t.object.position.add(this.top),t.object.position.x=-t.cloth.width/2;break;case zs.TOP_LEFT:t.pin({edges:[le.LEFT]}),t.setLengthConstraints(le.LEFT),t.object.position.add(this.top),t.object.position.x=-t.cloth.height/2,t.object.rotateZ(Math.PI*3/2),t.object.rotateX(Math.PI);break;case zs.TOP_RIGHT:default:t.pin({edges:[le.LEFT]}),t.setLengthConstraints(le.LEFT),t.object.position.add(this.top),t.object.position.x=t.cloth.height/2,t.object.rotateZ(Math.PI*3/2);break}}}class ju extends _i{buildGeometry(t){return Bu(t)}addFlag(t){t.unpin(),t.pin({edges:[le.LEFT,le.TOP]}),t.setLengthConstraints(le.LEFT),t.object.position.add(this.top)}}const Qu=new V(0,0,1);class qu extends _i{constructor(t={}){super(t),this.top.applyAxisAngle(Qu,Math.PI*3/2)}buildGeometry(t){const e=Gs(t);return e.rotateZ(Math.PI*3/2),e}addFlag(t){t.unpin(),t.pin({edges:[le.LEFT]}),t.setLengthConstraints(le.LEFT),t.object.position.add(this.top),t.object.rotateZ(Math.PI*3/2)}}const Ku=new V(0,0,1);class $u extends _i{constructor(t={}){super(t),this.top.applyAxisAngle(Ku,Math.PI*7/4)}buildGeometry(t){const e=Gs(t);return e.rotateZ(Math.PI*7/4),e}addFlag(t){t.unpin(),t.pin({edges:[le.LEFT]}),t.setLengthConstraints(le.LEFT),t.object.position.add(this.top),t.object.rotateZ(Math.PI*7/4)}}function td(r,t){const e=Object.assign({},r);let i;switch(e.flagpoleType){case Cn.HORIZONTAL:i=new qu(e);break;case Cn.OUTRIGGER:i=new $u(e);break;case Cn.CROSSBAR:e.crossbarLength=e.verticalHoisting===zs.NONE?t.cloth.width:t.cloth.height,i=new Ju(e);break;case Cn.GALLERY:e.crossbarLength=t.cloth.width,i=new ju(e);break;case Cn.VERTICAL:default:i=new ml(e);break}return i}const Pi=Object.freeze(Object.defineProperty({__proto__:null,FLAG_POLE_TYPE:Cn,Flag:Us,FlagGroup:Fu,Flagpole:_i,Wind:Ua,applyGravityToCloth:ku,applyWindForceToCloth:Yu,buildFlag:Xu,buildFlagpole:td},Symbol.toStringTag,{value:"Module"}));const za="179",ed=0,Sl=1,id=2,Ml=1,nd=2,Di=3,Ki=0,Fe=1,Li=2,$i=0,$n=1,yl=2,bl=3,Tl=4,sd=5,vn=100,rd=101,ad=102,od=103,Ad=104,ld=200,hd=201,cd=202,ud=203,Ga=204,ka=205,dd=206,fd=207,gd=208,pd=209,md=210,Id=211,Cd=212,vd=213,xd=214,Ha=0,Va=1,Wa=2,ts=3,Ya=4,Xa=5,Za=6,Ja=7,wl=0,Ed=1,Sd=2,tn=0,Md=1,yd=2,bd=3,Td=4,wd=5,Rd=6,_d=7,Rl=300,es=301,is=302,ja=303,Qa=304,Tr=306,qa=1e3,xn=1001,Ka=1002,Ai=1003,Pd=1004,wr=1005,mi=1006,$a=1007,En=1008,Ii=1009,_l=1010,Pl=1011,ks=1012,to=1013,Sn=1014,Ni=1015,Hs=1016,eo=1017,io=1018,Vs=1020,Dl=35902,Ll=1021,Nl=1022,li=1023,Ws=1026,Ys=1027,Bl=1028,no=1029,Fl=1030,so=1031,ro=1033,Rr=33776,_r=33777,Pr=33778,Dr=33779,ao=35840,oo=35841,Ao=35842,lo=35843,ho=36196,co=37492,uo=37496,fo=37808,go=37809,po=37810,mo=37811,Io=37812,Co=37813,vo=37814,xo=37815,Eo=37816,So=37817,Mo=37818,yo=37819,bo=37820,To=37821,Lr=36492,wo=36494,Ro=36495,Ol=36283,_o=36284,Po=36285,Do=36286,Dd=3200,Ld=3201,Ul=0,Nd=1,en="",Re="srgb",ns="srgb-linear",Nr="linear",qt="srgb",ss=7680,zl=519,Bd=512,Fd=513,Od=514,Gl=515,Ud=516,zd=517,Gd=518,kd=519,kl=35044,Hl="300 es",Ci=2e3,Br=2001;class rs{addEventListener(t,e){this._listeners===void 0&&(this._listeners={});const i=this._listeners;i[t]===void 0&&(i[t]=[]),i[t].indexOf(e)===-1&&i[t].push(e)}hasEventListener(t,e){const i=this._listeners;return i===void 0?!1:i[t]!==void 0&&i[t].indexOf(e)!==-1}removeEventListener(t,e){const i=this._listeners;if(i===void 0)return;const n=i[t];if(n!==void 0){const s=n.indexOf(e);s!==-1&&n.splice(s,1)}}dispatchEvent(t){const e=this._listeners;if(e===void 0)return;const i=e[t.type];if(i!==void 0){t.target=this;const n=i.slice(0);for(let s=0,a=n.length;s<a;s++)n[s].call(this,t);t.target=null}}}const be=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"],Lo=Math.PI/180,Fr=180/Math.PI;function Xs(){const r=Math.random()*4294967295|0,t=Math.random()*4294967295|0,e=Math.random()*4294967295|0,i=Math.random()*4294967295|0;return(be[r&255]+be[r>>8&255]+be[r>>16&255]+be[r>>24&255]+"-"+be[t&255]+be[t>>8&255]+"-"+be[t>>16&15|64]+be[t>>24&255]+"-"+be[e&63|128]+be[e>>8&255]+"-"+be[e>>16&255]+be[e>>24&255]+be[i&255]+be[i>>8&255]+be[i>>16&255]+be[i>>24&255]).toLowerCase()}function kt(r,t,e){return Math.max(t,Math.min(e,r))}function Hd(r,t){return(r%t+t)%t}function No(r,t,e){return(1-e)*r+e*t}function Zs(r,t){switch(t.constructor){case Float32Array:return r;case Uint32Array:return r/4294967295;case Uint16Array:return r/65535;case Uint8Array:return r/255;case Int32Array:return Math.max(r/2147483647,-1);case Int16Array:return Math.max(r/32767,-1);case Int8Array:return Math.max(r/127,-1);default:throw new Error("Invalid component type.")}}function Oe(r,t){switch(t.constructor){case Float32Array:return r;case Uint32Array:return Math.round(r*4294967295);case Uint16Array:return Math.round(r*65535);case Uint8Array:return Math.round(r*255);case Int32Array:return Math.round(r*2147483647);case Int16Array:return Math.round(r*32767);case Int8Array:return Math.round(r*127);default:throw new Error("Invalid component type.")}}class Zt{constructor(t=0,e=0){Zt.prototype.isVector2=!0,this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(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)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t){return this.x+=t.x,this.y+=t.y,this}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const e=this.x,i=this.y,n=t.elements;return this.x=n[0]*e+n[3]*i+n[6],this.y=n[1]*e+n[4]*i+n[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=kt(this.x,t.x,e.x),this.y=kt(this.y,t.y,e.y),this}clampScalar(t,e){return this.x=kt(this.x,t,e),this.y=kt(this.y,t,e),this}clampLength(t,e){const i=this.length();return this.divideScalar(i||1).multiplyScalar(kt(i,t,e))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(e===0)return Math.PI/2;const i=this.dot(t)/e;return Math.acos(kt(i,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,i=this.y-t.y;return e*e+i*i}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,i){return this.x=t.x+(e.x-t.x)*i,this.y=t.y+(e.y-t.y)*i,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){const i=Math.cos(e),n=Math.sin(e),s=this.x-t.x,a=this.y-t.y;return this.x=s*i-a*n+t.x,this.y=s*n+a*i+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}class Js{constructor(t=0,e=0,i=0,n=1){this.isQuaternion=!0,this._x=t,this._y=e,this._z=i,this._w=n}static slerpFlat(t,e,i,n,s,a,o){let l=i[n+0],A=i[n+1],h=i[n+2],c=i[n+3];const u=s[a+0],d=s[a+1],p=s[a+2],m=s[a+3];if(o===0){t[e+0]=l,t[e+1]=A,t[e+2]=h,t[e+3]=c;return}if(o===1){t[e+0]=u,t[e+1]=d,t[e+2]=p,t[e+3]=m;return}if(c!==m||l!==u||A!==d||h!==p){let g=1-o;const f=l*u+A*d+h*p+c*m,y=f>=0?1:-1,S=1-f*f;if(S>Number.EPSILON){const w=Math.sqrt(S),T=Math.atan2(w,f*y);g=Math.sin(g*T)/w,o=Math.sin(o*T)/w}const v=o*y;if(l=l*g+u*v,A=A*g+d*v,h=h*g+p*v,c=c*g+m*v,g===1-o){const w=1/Math.sqrt(l*l+A*A+h*h+c*c);l*=w,A*=w,h*=w,c*=w}}t[e]=l,t[e+1]=A,t[e+2]=h,t[e+3]=c}static multiplyQuaternionsFlat(t,e,i,n,s,a){const o=i[n],l=i[n+1],A=i[n+2],h=i[n+3],c=s[a],u=s[a+1],d=s[a+2],p=s[a+3];return t[e]=o*p+h*c+l*d-A*u,t[e+1]=l*p+h*u+A*c-o*d,t[e+2]=A*p+h*d+o*u-l*c,t[e+3]=h*p-o*c-l*u-A*d,t}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 w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,i,n){return this._x=t,this._y=e,this._z=i,this._w=n,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e=!0){const i=t._x,n=t._y,s=t._z,a=t._order,o=Math.cos,l=Math.sin,A=o(i/2),h=o(n/2),c=o(s/2),u=l(i/2),d=l(n/2),p=l(s/2);switch(a){case"XYZ":this._x=u*h*c+A*d*p,this._y=A*d*c-u*h*p,this._z=A*h*p+u*d*c,this._w=A*h*c-u*d*p;break;case"YXZ":this._x=u*h*c+A*d*p,this._y=A*d*c-u*h*p,this._z=A*h*p-u*d*c,this._w=A*h*c+u*d*p;break;case"ZXY":this._x=u*h*c-A*d*p,this._y=A*d*c+u*h*p,this._z=A*h*p+u*d*c,this._w=A*h*c-u*d*p;break;case"ZYX":this._x=u*h*c-A*d*p,this._y=A*d*c+u*h*p,this._z=A*h*p-u*d*c,this._w=A*h*c+u*d*p;break;case"YZX":this._x=u*h*c+A*d*p,this._y=A*d*c+u*h*p,this._z=A*h*p-u*d*c,this._w=A*h*c-u*d*p;break;case"XZY":this._x=u*h*c-A*d*p,this._y=A*d*c-u*h*p,this._z=A*h*p+u*d*c,this._w=A*h*c+u*d*p;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+a)}return e===!0&&this._onChangeCallback(),this}setFromAxisAngle(t,e){const i=e/2,n=Math.sin(i);return this._x=t.x*n,this._y=t.y*n,this._z=t.z*n,this._w=Math.cos(i),this._onChangeCallback(),this}setFromRotationMatrix(t){const e=t.elements,i=e[0],n=e[4],s=e[8],a=e[1],o=e[5],l=e[9],A=e[2],h=e[6],c=e[10],u=i+o+c;if(u>0){const d=.5/Math.sqrt(u+1);this._w=.25/d,this._x=(h-l)*d,this._y=(s-A)*d,this._z=(a-n)*d}else if(i>o&&i>c){const d=2*Math.sqrt(1+i-o-c);this._w=(h-l)/d,this._x=.25*d,this._y=(n+a)/d,this._z=(s+A)/d}else if(o>c){const d=2*Math.sqrt(1+o-i-c);this._w=(s-A)/d,this._x=(n+a)/d,this._y=.25*d,this._z=(l+h)/d}else{const d=2*Math.sqrt(1+c-i-o);this._w=(a-n)/d,this._x=(s+A)/d,this._y=(l+h)/d,this._z=.25*d}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let i=t.dot(e)+1;return i<1e-8?(i=0,Math.abs(t.x)>Math.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=i):(this._x=0,this._y=-t.z,this._z=t.y,this._w=i)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=i),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(kt(this.dot(t),-1,1)))}rotateTowards(t,e){const i=this.angleTo(t);if(i===0)return this;const n=Math.min(1,e/i);return this.slerp(t,n),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let t=this.length();return t===0?(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(t){return this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){const i=t._x,n=t._y,s=t._z,a=t._w,o=e._x,l=e._y,A=e._z,h=e._w;return this._x=i*h+a*o+n*A-s*l,this._y=n*h+a*l+s*o-i*A,this._z=s*h+a*A+i*l-n*o,this._w=a*h-i*o-n*l-s*A,this._onChangeCallback(),this}slerp(t,e){if(e===0)return this;if(e===1)return this.copy(t);const i=this._x,n=this._y,s=this._z,a=this._w;let o=a*t._w+i*t._x+n*t._y+s*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=i,this._y=n,this._z=s,this;const l=1-o*o;if(l<=Number.EPSILON){const d=1-e;return this._w=d*a+e*this._w,this._x=d*i+e*this._x,this._y=d*n+e*this._y,this._z=d*s+e*this._z,this.normalize(),this}const A=Math.sqrt(l),h=Math.atan2(A,o),c=Math.sin((1-e)*h)/A,u=Math.sin(e*h)/A;return this._w=a*c+this._w*u,this._x=i*c+this._x*u,this._y=n*c+this._y*u,this._z=s*c+this._z*u,this._onChangeCallback(),this}slerpQuaternions(t,e,i){return this.copy(t).slerp(e,i)}random(){const t=2*Math.PI*Math.random(),e=2*Math.PI*Math.random(),i=Math.random(),n=Math.sqrt(1-i),s=Math.sqrt(i);return this.set(n*Math.sin(t),n*Math.cos(t),s*Math.sin(e),s*Math.cos(e))}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}class B{constructor(t=0,e=0,i=0){B.prototype.isVector3=!0,this.x=t,this.y=e,this.z=i}set(t,e,i){return i===void 0&&(i=this.z),this.x=t,this.y=e,this.z=i,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(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)}return this}getComponent(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)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return this.applyQuaternion(Vl.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(Vl.setFromAxisAngle(t,e))}applyMatrix3(t){const e=this.x,i=this.y,n=this.z,s=t.elements;return this.x=s[0]*e+s[3]*i+s[6]*n,this.y=s[1]*e+s[4]*i+s[7]*n,this.z=s[2]*e+s[5]*i+s[8]*n,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const e=this.x,i=this.y,n=this.z,s=t.elements,a=1/(s[3]*e+s[7]*i+s[11]*n+s[15]);return this.x=(s[0]*e+s[4]*i+s[8]*n+s[12])*a,this.y=(s[1]*e+s[5]*i+s[9]*n+s[13])*a,this.z=(s[2]*e+s[6]*i+s[10]*n+s[14])*a,this}applyQuaternion(t){const e=this.x,i=this.y,n=this.z,s=t.x,a=t.y,o=t.z,l=t.w,A=2*(a*n-o*i),h=2*(o*e-s*n),c=2*(s*i-a*e);return this.x=e+l*A+a*c-o*h,this.y=i+l*h+o*A-s*c,this.z=n+l*c+s*h-a*A,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const e=this.x,i=this.y,n=this.z,s=t.elements;return this.x=s[0]*e+s[4]*i+s[8]*n,this.y=s[1]*e+s[5]*i+s[9]*n,this.z=s[2]*e+s[6]*i+s[10]*n,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=kt(this.x,t.x,e.x),this.y=kt(this.y,t.y,e.y),this.z=kt(this.z,t.z,e.z),this}clampScalar(t,e){return this.x=kt(this.x,t,e),this.y=kt(this.y,t,e),this.z=kt(this.z,t,e),this}clampLength(t,e){const i=this.length();return this.divideScalar(i||1).multiplyScalar(kt(i,t,e))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(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}lerpVectors(t,e,i){return this.x=t.x+(e.x-t.x)*i,this.y=t.y+(e.y-t.y)*i,this.z=t.z+(e.z-t.z)*i,this}cross(t){return this.crossVectors(this,t)}crossVectors(t,e){const i=t.x,n=t.y,s=t.z,a=e.x,o=e.y,l=e.z;return this.x=n*l-s*o,this.y=s*a-i*l,this.z=i*o-n*a,this}projectOnVector(t){const e=t.lengthSq();if(e===0)return this.set(0,0,0);const i=t.dot(this)/e;return this.copy(t).multiplyScalar(i)}projectOnPlane(t){return Bo.copy(this).projectOnVector(t),this.sub(Bo)}reflect(t){return this.sub(Bo.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(e===0)return Math.PI/2;const i=this.dot(t)/e;return Math.acos(kt(i,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,i=this.y-t.y,n=this.z-t.z;return e*e+i*i+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,i){const n=Math.sin(e)*t;return this.x=n*Math.sin(i),this.y=Math.cos(e)*t,this.z=n*Math.cos(i),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,i){return this.x=t*Math.sin(e),this.y=i,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){const e=this.setFromMatrixColumn(t,0).length(),i=this.setFromMatrixColumn(t,1).length(),n=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=i,this.z=n,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,e*4)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,e*3)}setFromEuler(t){return this.x=t._x,this.y=t._y,this.z=t._z,this}setFromColor(t){return this.x=t.r,this.y=t.g,this.z=t.b,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const t=Math.random()*Math.PI*2,e=Math.random()*2-1,i=Math.sqrt(1-e*e);return this.x=i*Math.cos(t),this.y=e,this.z=i*Math.sin(t),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}const Bo=new B,Vl=new Js;class Nt{constructor(t,e,i,n,s,a,o,l,A){Nt.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],t!==void 0&&this.set(t,e,i,n,s,a,o,l,A)}set(t,e,i,n,s,a,o,l,A){const h=this.elements;return h[0]=t,h[1]=n,h[2]=o,h[3]=e,h[4]=s,h[5]=l,h[6]=i,h[7]=a,h[8]=A,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){const e=this.elements,i=t.elements;return e[0]=i[0],e[1]=i[1],e[2]=i[2],e[3]=i[3],e[4]=i[4],e[5]=i[5],e[6]=i[6],e[7]=i[7],e[8]=i[8],this}extractBasis(t,e,i){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),i.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const i=t.elements,n=e.elements,s=this.elements,a=i[0],o=i[3],l=i[6],A=i[1],h=i[4],c=i[7],u=i[2],d=i[5],p=i[8],m=n[0],g=n[3],f=n[6],y=n[1],S=n[4],v=n[7],w=n[2],T=n[5],R=n[8];return s[0]=a*m+o*y+l*w,s[3]=a*g+o*S+l*T,s[6]=a*f+o*v+l*R,s[1]=A*m+h*y+c*w,s[4]=A*g+h*S+c*T,s[7]=A*f+h*v+c*R,s[2]=u*m+d*y+p*w,s[5]=u*g+d*S+p*T,s[8]=u*f+d*v+p*R,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){const t=this.elements,e=t[0],i=t[1],n=t[2],s=t[3],a=t[4],o=t[5],l=t[6],A=t[7],h=t[8];return e*a*h-e*o*A-i*s*h+i*o*l+n*s*A-n*a*l}invert(){const t=this.elements,e=t[0],i=t[1],n=t[2],s=t[3],a=t[4],o=t[5],l=t[6],A=t[7],h=t[8],c=h*a-o*A,u=o*l-h*s,d=A*s-a*l,p=e*c+i*u+n*d;if(p===0)return this.set(0,0,0,0,0,0,0,0,0);const m=1/p;return t[0]=c*m,t[1]=(n*A-h*i)*m,t[2]=(o*i-n*a)*m,t[3]=u*m,t[4]=(h*e-n*l)*m,t[5]=(n*s-o*e)*m,t[6]=d*m,t[7]=(i*l-A*e)*m,t[8]=(a*e-i*s)*m,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){const e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,i,n,s,a,o){const l=Math.cos(s),A=Math.sin(s);return this.set(i*l,i*A,-i*(l*a+A*o)+a+t,-n*A,n*l,-n*(-A*a+l*o)+o+e,0,0,1),this}scale(t,e){return this.premultiply(Fo.makeScale(t,e)),this}rotate(t){return this.premultiply(Fo.makeRotation(-t)),this}translate(t,e){return this.premultiply(Fo.makeTranslation(t,e)),this}makeTranslation(t,e){return t.isVector2?this.set(1,0,t.x,0,1,t.y,0,0,1):this.set(1,0,t,0,1,e,0,0,1),this}makeRotation(t){const e=Math.cos(t),i=Math.sin(t);return this.set(e,-i,0,i,e,0,0,0,1),this}makeScale(t,e){return this.set(t,0,0,0,e,0,0,0,1),this}equals(t){const e=this.elements,i=t.elements;for(let n=0;n<9;n++)if(e[n]!==i[n])return!1;return!0}fromArray(t,e=0){for(let i=0;i<9;i++)this.elements[i]=t[i+e];return this}toArray(t=[],e=0){const i=this.elements;return t[e]=i[0],t[e+1]=i[1],t[e+2]=i[2],t[e+3]=i[3],t[e+4]=i[4],t[e+5]=i[5],t[e+6]=i[6],t[e+7]=i[7],t[e+8]=i[8],t}clone(){return new this.constructor().fromArray(this.elements)}}const Fo=new Nt;function Wl(r){for(let t=r.length-1;t>=0;--t)if(r[t]>=65535)return!0;return!1}function js(r){return document.createElementNS("http://www.w3.org/1999/xhtml",r)}function Vd(){const r=js("canvas");return r.style.display="block",r}const Yl={};function as(r){r in Yl||(Yl[r]=!0,console.warn(r))}function Wd(r,t,e){return new Promise(function(i,n){function s(){switch(r.clientWaitSync(t,r.SYNC_FLUSH_COMMANDS_BIT,0)){case r.WAIT_FAILED:n();break;case r.TIMEOUT_EXPIRED:setTimeout(s,e);break;default:i()}}setTimeout(s,e)})}const Xl=new Nt().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),Zl=new Nt().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function Yd(){const r={enabled:!0,workingColorSpace:ns,spaces:{},convert:function(n,s,a){return this.enabled===!1||s===a||!s||!a||(this.spaces[s].transfer===qt&&(n.r=Bi(n.r),n.g=Bi(n.g),n.b=Bi(n.b)),this.spaces[s].primaries!==this.spaces[a].primaries&&(n.applyMatrix3(this.spaces[s].toXYZ),n.applyMatrix3(this.spaces[a].fromXYZ)),this.spaces[a].transfer===qt&&(n.r=os(n.r),n.g=os(n.g),n.b=os(n.b))),n},workingToColorSpace:function(n,s){return this.convert(n,this.workingColorSpace,s)},colorSpaceToWorking:function(n,s){return this.convert(n,s,this.workingColorSpace)},getPrimaries:function(n){return this.spaces[n].primaries},getTransfer:function(n){return n===en?Nr:this.spaces[n].transfer},getLuminanceCoefficients:function(n,s=this.workingColorSpace){return n.fromArray(this.spaces[s].luminanceCoefficients)},define:function(n){Object.assign(this.spaces,n)},_getMatrix:function(n,s,a){return n.copy(this.spaces[s].toXYZ).multiply(this.spaces[a].fromXYZ)},_getDrawingBufferColorSpace:function(n){return this.spaces[n].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(n=this.workingColorSpace){return this.spaces[n].workingColorSpaceConfig.unpackColorSpace},fromWorkingColorSpace:function(n,s){return as("THREE.ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace()."),r.workingToColorSpace(n,s)},toWorkingColorSpace:function(n,s){return as("THREE.ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking()."),r.colorSpaceToWorking(n,s)}},t=[.64,.33,.3,.6,.15,.06],e=[.2126,.7152,.0722],i=[.3127,.329];return r.define({[ns]:{primaries:t,whitePoint:i,transfer:Nr,toXYZ:Xl,fromXYZ:Zl,luminanceCoefficients:e,workingColorSpaceConfig:{unpackColorSpace:Re},outputColorSpaceConfig:{drawingBufferColorSpace:Re}},[Re]:{primaries:t,whitePoint:i,transfer:qt,toXYZ:Xl,fromXYZ:Zl,luminanceCoefficients:e,outputColorSpaceConfig:{drawingBufferColorSpace:Re}}}),r}const Yt=Yd();function Bi(r){return r<.04045?r*.0773993808:Math.pow(r*.9478672986+.0521327014,2.4)}function os(r){return r<.0031308?r*12.92:1.055*Math.pow(r,.41666)-.055}let As;class Xd{static getDataURL(t,e="image/png"){if(/^data:/i.test(t.src)||typeof HTMLCanvasElement>"u")return t.src;let i;if(t instanceof HTMLCanvasElement)i=t;else{As===void 0&&(As=js("canvas")),As.width=t.width,As.height=t.height;const n=As.getContext("2d");t instanceof ImageData?n.putImageData(t,0,0):n.drawImage(t,0,0,t.width,t.height),i=As}return i.toDataURL(e)}static sRGBToLinear(t){if(typeof HTMLImageElement<"u"&&t instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&t instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&t instanceof ImageBitmap){const e=js("canvas");e.width=t.width,e.height=t.height;const i=e.getContext("2d");i.drawImage(t,0,0,t.width,t.height);const n=i.getImageData(0,0,t.width,t.height),s=n.data;for(let a=0;a<s.length;a++)s[a]=Bi(s[a]/255)*255;return i.putImageData(n,0,0),e}else if(t.data){const e=t.data.slice(0);for(let i=0;i<e.length;i++)e instanceof Uint8Array||e instanceof Uint8ClampedArray?e[i]=Math.floor(Bi(e[i]/255)*255):e[i]=Bi(e[i]);return{data:e,width:t.width,height:t.height}}else return console.warn("THREE.ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied."),t}}let Zd=0;class Oo{constructor(t=null){this.isSource=!0,Object.defineProperty(this,"id",{value:Zd++}),this.uuid=Xs(),this.data=t,this.dataReady=!0,this.version=0}getSize(t){const e=this.data;return e instanceof HTMLVideoElement?t.set(e.videoWidth,e.videoHeight,0):e instanceof VideoFrame?t.set(e.displayHeight,e.displayWidth,0):e!==null?t.set(e.width,e.height,e.depth||0):t.set(0,0,0),t}set needsUpdate(t){t===!0&&this.version++}toJSON(t){const e=t===void 0||typeof t=="string";if(!e&&t.images[this.uuid]!==void 0)return t.images[this.uuid];const i={uuid:this.uuid,url:""},n=this.data;if(n!==null){let s;if(Array.isArray(n)){s=[];for(let a=0,o=n.length;a<o;a++)n[a].isDataTexture?s.push(Uo(n[a].image)):s.push(Uo(n[a]))}else s=Uo(n);i.url=s}return e||(t.images[this.uuid]=i),i}}function Uo(r){return typeof HTMLImageElement<"u"&&r instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&r instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&r instanceof ImageBitmap?Xd.getDataURL(r):r.data?{data:Array.from(r.data),width:r.width,height:r.height,type:r.data.constructor.name}:(console.warn("THREE.Texture: Unable to serialize Texture."),{})}let Jd=0;const zo=new B;class Te extends rs{constructor(t=Te.DEFAULT_IMAGE,e=Te.DEFAULT_MAPPING,i=xn,n=xn,s=mi,a=En,o=li,l=Ii,A=Te.DEFAULT_ANISOTROPY,h=en){super(),this.isTexture=!0,Object.defineProperty(this,"id",{value:Jd++}),this.uuid=Xs(),this.name="",this.source=new Oo(t),this.mipmaps=[],this.mapping=e,this.channel=0,this.wrapS=i,this.wrapT=n,this.magFilter=s,this.minFilter=a,this.anisotropy=A,this.format=o,this.internalFormat=null,this.type=l,this.offset=new Zt(0,0),this.repeat=new Zt(1,1),this.center=new Zt(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new Nt,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.colorSpace=h,this.userData={},this.updateRanges=[],this.version=0,this.onUpdate=null,this.renderTarget=null,this.isRenderTargetTexture=!1,this.isArrayTexture=!!(t&&t.depth&&t.depth>1),this.pmremVersion=0}get width(){return this.source.getSize(zo).x}get height(){return this.source.getSize(zo).y}get depth(){return this.source.getSize(zo).z}get image(){return this.source.data}set image(t=null){this.source.data=t}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}addUpdateRange(t,e){this.updateRanges.push({start:t,count:e})}clearUpdateRanges(){this.updateRanges.length=0}clone(){return new this.constructor().copy(this)}copy(t){return this.name=t.name,this.source=t.source,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.channel=t.channel,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.internalFormat=t.internalFormat,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.colorSpace=t.colorSpace,this.renderTarget=t.renderTarget,this.isRenderTargetTexture=t.isRenderTargetTexture,this.isArrayTexture=t.isArrayTexture,this.userData=JSON.parse(JSON.stringify(t.userData)),this.needsUpdate=!0,this}setValues(t){for(const e in t){const i=t[e];if(i===void 0){console.warn(`THREE.Texture.setValues(): parameter '${e}' has value of undefined.`);continue}const n=this[e];if(n===void 0){console.warn(`THREE.Texture.setValues(): property '${e}' does not exist.`);continue}n&&i&&n.isVector2&&i.isVector2||n&&i&&n.isVector3&&i.isVector3||n&&i&&n.isMatrix3&&i.isMatrix3?n.copy(i):this[e]=i}}toJSON(t){const e=t===void 0||typeof t=="string";if(!e&&t.textures[this.uuid]!==void 0)return t.textures[this.uuid];const i={metadata:{version:4.7,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,image:this.source.toJSON(t).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(i.userData=this.userData),e||(t.textures[this.uuid]=i),i}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(t){if(this.mapping!==Rl)return t;if(t.applyMatrix3(this.matrix),t.x<0||t.x>1)switch(this.wrapS){case qa:t.x=t.x-Math.floor(t.x);break;case xn:t.x=t.x<0?0:1;break;case Ka:Math.abs(Math.floor(t.x)%2)===1?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x);break}if(t.y<0||t.y>1)switch(this.wrapT){case qa:t.y=t.y-Math.floor(t.y);break;case xn:t.y=t.y<0?0:1;break;case Ka:Math.abs(Math.floor(t.y)%2)===1?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y);break}return this.flipY&&(t.y=1-t.y),t}set needsUpdate(t){t===!0&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(t){t===!0&&this.pmremVersion++}}Te.DEFAULT_IMAGE=null,Te.DEFAULT_MAPPING=Rl,Te.DEFAULT_ANISOTROPY=1;class he{constructor(t=0,e=0,i=0,n=1){he.prototype.isVector4=!0,this.x=t,this.y=e,this.z=i,this.w=n}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,i,n){return this.x=t,this.y=e,this.z=i,this.w=n,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(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)}return this}getComponent(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)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=t.w!==void 0?t.w:1,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(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}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(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}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const e=this.x,i=this.y,n=this.z,s=this.w,a=t.elements;return this.x=a[0]*e+a[4]*i+a[8]*n+a[12]*s,this.y=a[1]*e+a[5]*i+a[9]*n+a[13]*s,this.z=a[2]*e+a[6]*i+a[10]*n+a[14]*s,this.w=a[3]*e+a[7]*i+a[11]*n+a[15]*s,this}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this.w/=t.w,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const 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(t){let e,i,n,s;const l=t.elements,A=l[0],h=l[4],c=l[8],u=l[1],d=l[5],p=l[9],m=l[2],g=l[6],f=l[10];if(Math.abs(h-u)<.01&&Math.abs(c-m)<.01&&Math.abs(p-g)<.01){if(Math.abs(h+u)<.1&&Math.abs(c+m)<.1&&Math.abs(p+g)<.1&&Math.abs(A+d+f-3)<.1)return this.set(1,0,0,0),this;e=Math.PI;const S=(A+1)/2,v=(d+1)/2,w=(f+1)/2,T=(h+u)/4,R=(c+m)/4,P=(p+g)/4;return S>v&&S>w?S<.01?(i=0,n=.707106781,s=.707106781):(i=Math.sqrt(S),n=T/i,s=R/i):v>w?v<.01?(i=.707106781,n=0,s=.707106781):(n=Math.sqrt(v),i=T/n,s=P/n):w<.01?(i=.707106781,n=.707106781,s=0):(s=Math.sqrt(w),i=R/s,n=P/s),this.set(i,n,s,e),this}let y=Math.sqrt((g-p)*(g-p)+(c-m)*(c-m)+(u-h)*(u-h));return Math.abs(y)<.001&&(y=1),this.x=(g-p)/y,this.y=(c-m)/y,this.z=(u-h)/y,this.w=Math.acos((A+d+f-1)/2),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this.w=e[15],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this.w=Math.min(this.w,t.w),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this.w=Math.max(this.w,t.w),this}clamp(t,e){return this.x=kt(this.x,t.x,e.x),this.y=kt(this.y,t.y,e.y),this.z=kt(this.z,t.z,e.z),this.w=kt(this.w,t.w,e.w),this}clampScalar(t,e){return this.x=kt(this.x,t,e),this.y=kt(this.y,t,e),this.z=kt(this.z,t,e),this.w=kt(this.w,t,e),this}clampLength(t,e){const i=this.length();return this.divideScalar(i||1).multiplyScalar(kt(i,t,e))}floor(){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(){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(){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(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this.w=Math.trunc(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(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}lerpVectors(t,e,i){return this.x=t.x+(e.x-t.x)*i,this.y=t.y+(e.y-t.y)*i,this.z=t.z+(e.z-t.z)*i,this.w=t.w+(e.w-t.w)*i,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z&&t.w===this.w}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this.w=t[e+3],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t[e+3]=this.w,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this.w=t.getW(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}}class jd extends rs{constructor(t=1,e=1,i={}){super(),i=Object.assign({generateMipmaps:!1,internalFormat:null,minFilter:mi,depthBuffer:!0,stencilBuffer:!1,resolveDepthBuffer:!0,resolveStencilBuffer:!0,depthTexture:null,samples:0,count:1,depth:1,multiview:!1},i),this.isRenderTarget=!0,this.width=t,this.height=e,this.depth=i.depth,this.scissor=new he(0,0,t,e),this.scissorTest=!1,this.viewport=new he(0,0,t,e);const n={width:t,height:e,depth:i.depth},s=new Te(n);this.textures=[];const a=i.count;for(let o=0;o<a;o++)this.textures[o]=s.clone(),this.textures[o].isRenderTargetTexture=!0,this.textures[o].renderTarget=this;this._setTextureOptions(i),this.depthBuffer=i.depthBuffer,this.stencilBuffer=i.stencilBuffer,this.resolveDepthBuffer=i.resolveDepthBuffer,this.resolveStencilBuffer=i.resolveStencilBuffer,this._depthTexture=null,this.depthTexture=i.depthTexture,this.samples=i.samples,this.multiview=i.multiview}_setTextureOptions(t={}){const e={minFilter:mi,generateMipmaps:!1,flipY:!1,internalFormat:null};t.mapping!==void 0&&(e.mapping=t.mapping),t.wrapS!==void 0&&(e.wrapS=t.wrapS),t.wrapT!==void 0&&(e.wrapT=t.wrapT),t.wrapR!==void 0&&(e.wrapR=t.wrapR),t.magFilter!==void 0&&(e.magFilter=t.magFilter),t.minFilter!==void 0&&(e.minFilter=t.minFilter),t.format!==void 0&&(e.format=t.format),t.type!==void 0&&(e.type=t.type),t.anisotropy!==void 0&&(e.anisotropy=t.anisotropy),t.colorSpace!==void 0&&(e.colorSpace=t.colorSpace),t.flipY!==void 0&&(e.flipY=t.flipY),t.generateMipmaps!==void 0&&(e.generateMipmaps=t.generateMipmaps),t.internalFormat!==void 0&&(e.internalFormat=t.internalFormat);for(let i=0;i<this.textures.length;i++)this.textures[i].setValues(e)}get texture(){return this.textures[0]}set texture(t){this.textures[0]=t}set depthTexture(t){this._depthTexture!==null&&(this._depthTexture.renderTarget=null),t!==null&&(t.renderTarget=this),this._depthTexture=t}get depthTexture(){return this._depthTexture}setSize(t,e,i=1){if(this.width!==t||this.height!==e||this.depth!==i){this.width=t,this.height=e,this.depth=i;for(let n=0,s=this.textures.length;n<s;n++)this.textures[n].image.width=t,this.textures[n].image.height=e,this.textures[n].image.depth=i,this.textures[n].isArrayTexture=this.textures[n].image.depth>1;this.dispose()}this.viewport.set(0,0,t,e),this.scissor.set(0,0,t,e)}clone(){return new this.constructor().copy(this)}copy(t){this.width=t.width,this.height=t.height,this.depth=t.depth,this.scissor.copy(t.scissor),this.scissorTest=t.scissorTest,this.viewport.copy(t.viewport),this.textures.length=0;for(let e=0,i=t.textures.length;e<i;e++){this.textures[e]=t.textures[e].clone(),this.textures[e].isRenderTargetTexture=!0,this.textures[e].renderTarget=this;const n=Object.assign({},t.textures[e].image);this.textures[e].source=new Oo(n)}return this.depthBuffer=t.depthBuffer,this.stencilBuffer=t.stencilBuffer,this.resolveDepthBuffer=t.resolveDepthBuffer,this.resolveStencilBuffer=t.resolveStencilBuffer,t.depthTexture!==null&&(this.depthTexture=t.depthTexture.clone()),this.samples=t.samples,this}dispose(){this.dispatchEvent({type:"dispose"})}}class Mn extends jd{constructor(t=1,e=1,i={}){super(t,e,i),this.isWebGLRenderTarget=!0}}class Jl extends Te{constructor(t=null,e=1,i=1,n=1){super(null),this.isDataArrayTexture=!0,this.image={data:t,width:e,height:i,depth:n},this.magFilter=Ai,this.minFilter=Ai,this.wrapR=xn,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.layerUpdates=new Set}addLayerUpdate(t){this.layerUpdates.add(t)}clearLayerUpdates(){this.layerUpdates.clear()}}class Qd extends Te{constructor(t=null,e=1,i=1,n=1){super(null),this.isData3DTexture=!0,this.image={data:t,width:e,height:i,depth:n},this.magFilter=Ai,this.minFilter=Ai,this.wrapR=xn,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}}class ls{constructor(t=new B(1/0,1/0,1/0),e=new B(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=t,this.max=e}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){this.makeEmpty();for(let e=0,i=t.length;e<i;e+=3)this.expandByPoint(hi.fromArray(t,e));return this}setFromBufferAttribute(t){this.makeEmpty();for(let e=0,i=t.count;e<i;e++)this.expandByPoint(hi.fromBufferAttribute(t,e));return this}setFromPoints(t){this.makeEmpty();for(let e=0,i=t.length;e<i;e++)this.expandByPoint(t[e]);return this}setFromCenterAndSize(t,e){const i=hi.copy(e).multiplyScalar(.5);return this.min.copy(t).sub(i),this.max.copy(t).add(i),this}setFromObject(t,e=!1){return this.makeEmpty(),this.expandByObject(t,e)}clone(){return new this.constructor().copy(this)}copy(t){return this.min.copy(t.min),this.max.copy(t.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z}getCenter(t){return this.isEmpty()?t.set(0,0,0):t.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(t){return this.isEmpty()?t.set(0,0,0):t.subVectors(this.max,this.min)}expandByPoint(t){return this.min.min(t),this.max.max(t),this}expandByVector(t){return this.min.sub(t),this.max.add(t),this}expandByScalar(t){return this.min.addScalar(-t),this.max.addScalar(t),this}expandByObject(t,e=!1){t.updateWorldMatrix(!1,!1);const i=t.geometry;if(i!==void 0){const s=i.getAttribute("position");if(e===!0&&s!==void 0&&t.isInstancedMesh!==!0)for(let a=0,o=s.count;a<o;a++)t.isMesh===!0?t.getVertexPosition(a,hi):hi.fromBufferAttribute(s,a),hi.applyMatrix4(t.matrixWorld),this.expandByPoint(hi);else t.boundingBox!==void 0?(t.boundingBox===null&&t.computeBoundingBox(),Or.copy(t.boundingBox)):(i.boundingBox===null&&i.computeBoundingBox(),Or.copy(i.boundingBox)),Or.applyMatrix4(t.matrixWorld),this.union(Or)}const n=t.children;for(let s=0,a=n.length;s<a;s++)this.expandByObject(n[s],e);return this}containsPoint(t){return t.x>=this.min.x&&t.x<=this.max.x&&t.y>=this.min.y&&t.y<=this.max.y&&t.z>=this.min.z&&t.z<=this.max.z}containsBox(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(t,e){return e.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))}intersectsBox(t){return t.max.x>=this.min.x&&t.min.x<=this.max.x&&t.max.y>=this.min.y&&t.min.y<=this.max.y&&t.max.z>=this.min.z&&t.min.z<=this.max.z}intersectsSphere(t){return this.clampPoint(t.center,hi),hi.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,i;return t.normal.x>0?(e=t.normal.x*this.min.x,i=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,i=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,i+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,i+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,i+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,i+=t.normal.z*this.min.z),e<=-t.constant&&i>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(Qs),Ur.subVectors(this.max,Qs),hs.subVectors(t.a,Qs),cs.subVectors(t.b,Qs),us.subVectors(t.c,Qs),nn.subVectors(cs,hs),sn.subVectors(us,cs),yn.subVectors(hs,us);let e=[0,-nn.z,nn.y,0,-sn.z,sn.y,0,-yn.z,yn.y,nn.z,0,-nn.x,sn.z,0,-sn.x,yn.z,0,-yn.x,-nn.y,nn.x,0,-sn.y,sn.x,0,-yn.y,yn.x,0];return!Go(e,hs,cs,us,Ur)||(e=[1,0,0,0,1,0,0,0,1],!Go(e,hs,cs,us,Ur))?!1:(zr.crossVectors(nn,sn),e=[zr.x,zr.y,zr.z],Go(e,hs,cs,us,Ur))}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return this.clampPoint(t,hi).distanceTo(t)}getBoundingSphere(t){return this.isEmpty()?t.makeEmpty():(this.getCenter(t.center),t.radius=this.getSize(hi).length()*.5),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()?this:(Fi[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),Fi[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),Fi[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),Fi[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),Fi[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),Fi[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),Fi[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),Fi[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(Fi),this)}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}toJSON(){return{min:this.min.toArray(),max:this.max.toArray()}}fromJSON(t){return this.min.fromArray(t.min),this.max.fromArray(t.max),this}}const Fi=[new B,new B,new B,new B,new B,new B,new B,new B],hi=new B,Or=new ls,hs=new B,cs=new B,us=new B,nn=new B,sn=new B,yn=new B,Qs=new B,Ur=new B,zr=new B,bn=new B;function Go(r,t,e,i,n){for(let s=0,a=r.length-3;s<=a;s+=3){bn.fromArray(r,s);const o=n.x*Math.abs(bn.x)+n.y*Math.abs(bn.y)+n.z*Math.abs(bn.z),l=t.dot(bn),A=e.dot(bn),h=i.dot(bn);if(Math.max(-Math.max(l,A,h),Math.min(l,A,h))>o)return!1}return!0}const qd=new ls,qs=new B,ko=new B;class Ho{constructor(t=new B,e=-1){this.isSphere=!0,this.center=t,this.radius=e}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){const i=this.center;e!==void 0?i.copy(e):qd.setFromPoints(t).getCenter(i);let n=0;for(let s=0,a=t.length;s<a;s++)n=Math.max(n,i.distanceToSquared(t[s]));return this.radius=Math.sqrt(n),this}copy(t){return this.center.copy(t.center),this.radius=t.radius,this}isEmpty(){return this.radius<0}makeEmpty(){return this.center.set(0,0,0),this.radius=-1,this}containsPoint(t){return t.distanceToSquared(this.center)<=this.radius*this.radius}distanceToPoint(t){return t.distanceTo(this.center)-this.radius}intersectsSphere(t){const e=this.radius+t.radius;return t.center.distanceToSquared(this.center)<=e*e}intersectsBox(t){return t.intersectsSphere(this)}intersectsPlane(t){return Math.abs(t.distanceToPoint(this.center))<=this.radius}clampPoint(t,e){const i=this.center.distanceToSquared(t);return e.copy(t),i>this.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}expandByPoint(t){if(this.isEmpty())return this.center.copy(t),this.radius=0,this;qs.subVectors(t,this.center);const e=qs.lengthSq();if(e>this.radius*this.radius){const i=Math.sqrt(e),n=(i-this.radius)*.5;this.center.addScaledVector(qs,n/i),this.radius+=n}return this}union(t){return t.isEmpty()?this:this.isEmpty()?(this.copy(t),this):(this.center.equals(t.center)===!0?this.radius=Math.max(this.radius,t.radius):(ko.subVectors(t.center,this.center).setLength(t.radius),this.expandByPoint(qs.copy(t.center).add(ko)),this.expandByPoint(qs.copy(t.center).sub(ko))),this)}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}clone(){return new this.constructor().copy(this)}toJSON(){return{radius:this.radius,center:this.center.toArray()}}fromJSON(t){return this.radius=t.radius,this.center.fromArray(t.center),this}}const Oi=new B,Vo=new B,Gr=new B,rn=new B,Wo=new B,kr=new B,Yo=new B;class Kd{constructor(t=new B,e=new B(0,0,-1)){this.origin=t,this.direction=e}set(t,e){return this.origin.copy(t),this.direction.copy(e),this}copy(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this}at(t,e){return e.copy(this.origin).addScaledVector(this.direction,t)}lookAt(t){return this.direction.copy(t).sub(this.origin).normalize(),this}recast(t){return this.origin.copy(this.at(t,Oi)),this}closestPointToPoint(t,e){e.subVectors(t,this.origin);const i=e.dot(this.direction);return i<0?e.copy(this.origin):e.copy(this.origin).addScaledVector(this.direction,i)}distanceToPoint(t){return Math.sqrt(this.distanceSqToPoint(t))}distanceSqToPoint(t){const e=Oi.subVectors(t,this.origin).dot(this.direction);return e<0?this.origin.distanceToSquared(t):(Oi.copy(this.origin).addScaledVector(this.direction,e),Oi.distanceToSquared(t))}distanceSqToSegment(t,e,i,n){Vo.copy(t).add(e).multiplyScalar(.5),Gr.copy(e).sub(t).normalize(),rn.copy(this.origin).sub(Vo);const s=t.distanceTo(e)*.5,a=-this.direction.dot(Gr),o=rn.dot(this.direction),l=-rn.dot(Gr),A=rn.lengthSq(),h=Math.abs(1-a*a);let c,u,d,p;if(h>0)if(c=a*l-o,u=a*o-l,p=s*h,c>=0)if(u>=-p)if(u<=p){const m=1/h;c*=m,u*=m,d=c*(c+a*u+2*o)+u*(a*c+u+2*l)+A}else u=s,c=Math.max(0,-(a*u+o)),d=-c*c+u*(u+2*l)+A;else u=-s,c=Math.max(0,-(a*u+o)),d=-c*c+u*(u+2*l)+A;else u<=-p?(c=Math.max(0,-(-a*s+o)),u=c>0?-s:Math.min(Math.max(-s,-l),s),d=-c*c+u*(u+2*l)+A):u<=p?(c=0,u=Math.min(Math.max(-s,-l),s),d=u*(u+2*l)+A):(c=Math.max(0,-(a*s+o)),u=c>0?s:Math.min(Math.max(-s,-l),s),d=-c*c+u*(u+2*l)+A);else u=a>0?-s:s,c=Math.max(0,-(a*u+o)),d=-c*c+u*(u+2*l)+A;return i&&i.copy(this.origin).addScaledVector(this.direction,c),n&&n.copy(Vo).addScaledVector(Gr,u),d}intersectSphere(t,e){Oi.subVectors(t.center,this.origin);const i=Oi.dot(this.direction),n=Oi.dot(Oi)-i*i,s=t.radius*t.radius;if(n>s)return null;const a=Math.sqrt(s-n),o=i-a,l=i+a;return l<0?null:o<0?this.at(l,e):this.at(o,e)}intersectsSphere(t){return t.radius<0?!1:this.distanceSqToPoint(t.center)<=t.radius*t.radius}distanceToPlane(t){const e=t.normal.dot(this.direction);if(e===0)return t.distanceToPoint(this.origin)===0?0:null;const i=-(this.origin.dot(t.normal)+t.constant)/e;return i>=0?i:null}intersectPlane(t,e){const i=this.distanceToPlane(t);return i===null?null:this.at(i,e)}intersectsPlane(t){const e=t.distanceToPoint(this.origin);return e===0||t.normal.dot(this.direction)*e<0}intersectBox(t,e){let i,n,s,a,o,l;const A=1/this.direction.x,h=1/this.direction.y,c=1/this.direction.z,u=this.origin;return A>=0?(i=(t.min.x-u.x)*A,n=(t.max.x-u.x)*A):(i=(t.max.x-u.x)*A,n=(t.min.x-u.x)*A),h>=0?(s=(t.min.y-u.y)*h,a=(t.max.y-u.y)*h):(s=(t.max.y-u.y)*h,a=(t.min.y-u.y)*h),i>a||s>n||((s>i||isNaN(i))&&(i=s),(a<n||isNaN(n))&&(n=a),c>=0?(o=(t.min.z-u.z)*c,l=(t.max.z-u.z)*c):(o=(t.max.z-u.z)*c,l=(t.min.z-u.z)*c),i>l||o>n)||((o>i||i!==i)&&(i=o),(l<n||n!==n)&&(n=l),n<0)?null:this.at(i>=0?i:n,e)}intersectsBox(t){return this.intersectBox(t,Oi)!==null}intersectTriangle(t,e,i,n,s){Wo.subVectors(e,t),kr.subVectors(i,t),Yo.crossVectors(Wo,kr);let a=this.direction.dot(Yo),o;if(a>0){if(n)return null;o=1}else if(a<0)o=-1,a=-a;else return null;rn.subVectors(this.origin,t);const l=o*this.direction.dot(kr.crossVectors(rn,kr));if(l<0)return null;const A=o*this.direction.dot(Wo.cross(rn));if(A<0||l+A>a)return null;const h=-o*rn.dot(Yo);return h<0?null:this.at(h/a,s)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}}class ue{constructor(t,e,i,n,s,a,o,l,A,h,c,u,d,p,m,g){ue.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],t!==void 0&&this.set(t,e,i,n,s,a,o,l,A,h,c,u,d,p,m,g)}set(t,e,i,n,s,a,o,l,A,h,c,u,d,p,m,g){const f=this.elements;return f[0]=t,f[4]=e,f[8]=i,f[12]=n,f[1]=s,f[5]=a,f[9]=o,f[13]=l,f[2]=A,f[6]=h,f[10]=c,f[14]=u,f[3]=d,f[7]=p,f[11]=m,f[15]=g,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new ue().fromArray(this.elements)}copy(t){const e=this.elements,i=t.elements;return e[0]=i[0],e[1]=i[1],e[2]=i[2],e[3]=i[3],e[4]=i[4],e[5]=i[5],e[6]=i[6],e[7]=i[7],e[8]=i[8],e[9]=i[9],e[10]=i[10],e[11]=i[11],e[12]=i[12],e[13]=i[13],e[14]=i[14],e[15]=i[15],this}copyPosition(t){const e=this.elements,i=t.elements;return e[12]=i[12],e[13]=i[13],e[14]=i[14],this}setFromMatrix3(t){const e=t.elements;return this.set(e[0],e[3],e[6],0,e[1],e[4],e[7],0,e[2],e[5],e[8],0,0,0,0,1),this}extractBasis(t,e,i){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),i.setFromMatrixColumn(this,2),this}makeBasis(t,e,i){return this.set(t.x,e.x,i.x,0,t.y,e.y,i.y,0,t.z,e.z,i.z,0,0,0,0,1),this}extractRotation(t){const e=this.elements,i=t.elements,n=1/ds.setFromMatrixColumn(t,0).length(),s=1/ds.setFromMatrixColumn(t,1).length(),a=1/ds.setFromMatrixColumn(t,2).length();return e[0]=i[0]*n,e[1]=i[1]*n,e[2]=i[2]*n,e[3]=0,e[4]=i[4]*s,e[5]=i[5]*s,e[6]=i[6]*s,e[7]=0,e[8]=i[8]*a,e[9]=i[9]*a,e[10]=i[10]*a,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){const e=this.elements,i=t.x,n=t.y,s=t.z,a=Math.cos(i),o=Math.sin(i),l=Math.cos(n),A=Math.sin(n),h=Math.cos(s),c=Math.sin(s);if(t.order==="XYZ"){const u=a*h,d=a*c,p=o*h,m=o*c;e[0]=l*h,e[4]=-l*c,e[8]=A,e[1]=d+p*A,e[5]=u-m*A,e[9]=-o*l,e[2]=m-u*A,e[6]=p+d*A,e[10]=a*l}else if(t.order==="YXZ"){const u=l*h,d=l*c,p=A*h,m=A*c;e[0]=u+m*o,e[4]=p*o-d,e[8]=a*A,e[1]=a*c,e[5]=a*h,e[9]=-o,e[2]=d*o-p,e[6]=m+u*o,e[10]=a*l}else if(t.order==="ZXY"){const u=l*h,d=l*c,p=A*h,m=A*c;e[0]=u-m*o,e[4]=-a*c,e[8]=p+d*o,e[1]=d+p*o,e[5]=a*h,e[9]=m-u*o,e[2]=-a*A,e[6]=o,e[10]=a*l}else if(t.order==="ZYX"){const u=a*h,d=a*c,p=o*h,m=o*c;e[0]=l*h,e[4]=p*A-d,e[8]=u*A+m,e[1]=l*c,e[5]=m*A+u,e[9]=d*A-p,e[2]=-A,e[6]=o*l,e[10]=a*l}else if(t.order==="YZX"){const u=a*l,d=a*A,p=o*l,m=o*A;e[0]=l*h,e[4]=m-u*c,e[8]=p*c+d,e[1]=c,e[5]=a*h,e[9]=-o*h,e[2]=-A*h,e[6]=d*c+p,e[10]=u-m*c}else if(t.order==="XZY"){const u=a*l,d=a*A,p=o*l,m=o*A;e[0]=l*h,e[4]=-c,e[8]=A*h,e[1]=u*c+m,e[5]=a*h,e[9]=d*c-p,e[2]=p*c-d,e[6]=o*h,e[10]=m*c+u}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose($d,t,tf)}lookAt(t,e,i){const n=this.elements;return We.subVectors(t,e),We.lengthSq()===0&&(We.z=1),We.normalize(),an.crossVectors(i,We),an.lengthSq()===0&&(Math.abs(i.z)===1?We.x+=1e-4:We.z+=1e-4,We.normalize(),an.crossVectors(i,We)),an.normalize(),Hr.crossVectors(We,an),n[0]=an.x,n[4]=Hr.x,n[8]=We.x,n[1]=an.y,n[5]=Hr.y,n[9]=We.y,n[2]=an.z,n[6]=Hr.z,n[10]=We.z,this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const i=t.elements,n=e.elements,s=this.elements,a=i[0],o=i[4],l=i[8],A=i[12],h=i[1],c=i[5],u=i[9],d=i[13],p=i[2],m=i[6],g=i[10],f=i[14],y=i[3],S=i[7],v=i[11],w=i[15],T=n[0],R=n[4],P=n[8],E=n[12],x=n[1],b=n[5],z=n[9],F=n[13],U=n[2],W=n[6],Y=n[10],$=n[14],H=n[3],rt=n[7],lt=n[11],mt=n[15];return s[0]=a*T+o*x+l*U+A*H,s[4]=a*R+o*b+l*W+A*rt,s[8]=a*P+o*z+l*Y+A*lt,s[12]=a*E+o*F+l*$+A*mt,s[1]=h*T+c*x+u*U+d*H,s[5]=h*R+c*b+u*W+d*rt,s[9]=h*P+c*z+u*Y+d*lt,s[13]=h*E+c*F+u*$+d*mt,s[2]=p*T+m*x+g*U+f*H,s[6]=p*R+m*b+g*W+f*rt,s[10]=p*P+m*z+g*Y+f*lt,s[14]=p*E+m*F+g*$+f*mt,s[3]=y*T+S*x+v*U+w*H,s[7]=y*R+S*b+v*W+w*rt,s[11]=y*P+S*z+v*Y+w*lt,s[15]=y*E+S*F+v*$+w*mt,this}multiplyScalar(t){const 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}determinant(){const t=this.elements,e=t[0],i=t[4],n=t[8],s=t[12],a=t[1],o=t[5],l=t[9],A=t[13],h=t[2],c=t[6],u=t[10],d=t[14],p=t[3],m=t[7],g=t[11],f=t[15];return p*(+s*l*c-n*A*c-s*o*u+i*A*u+n*o*d-i*l*d)+m*(+e*l*d-e*A*u+s*a*u-n*a*d+n*A*h-s*l*h)+g*(+e*A*c-e*o*d-s*a*c+i*a*d+s*o*h-i*A*h)+f*(-n*o*h-e*l*c+e*o*u+n*a*c-i*a*u+i*l*h)}transpose(){const t=this.elements;let e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,i){const n=this.elements;return t.isVector3?(n[12]=t.x,n[13]=t.y,n[14]=t.z):(n[12]=t,n[13]=e,n[14]=i),this}invert(){const t=this.elements,e=t[0],i=t[1],n=t[2],s=t[3],a=t[4],o=t[5],l=t[6],A=t[7],h=t[8],c=t[9],u=t[10],d=t[11],p=t[12],m=t[13],g=t[14],f=t[15],y=c*g*A-m*u*A+m*l*d-o*g*d-c*l*f+o*u*f,S=p*u*A-h*g*A-p*l*d+a*g*d+h*l*f-a*u*f,v=h*m*A-p*c*A+p*o*d-a*m*d-h*o*f+a*c*f,w=p*c*l-h*m*l-p*o*u+a*m*u+h*o*g-a*c*g,T=e*y+i*S+n*v+s*w;if(T===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const R=1/T;return t[0]=y*R,t[1]=(m*u*s-c*g*s-m*n*d+i*g*d+c*n*f-i*u*f)*R,t[2]=(o*g*s-m*l*s+m*n*A-i*g*A-o*n*f+i*l*f)*R,t[3]=(c*l*s-o*u*s-c*n*A+i*u*A+o*n*d-i*l*d)*R,t[4]=S*R,t[5]=(h*g*s-p*u*s+p*n*d-e*g*d-h*n*f+e*u*f)*R,t[6]=(p*l*s-a*g*s-p*n*A+e*g*A+a*n*f-e*l*f)*R,t[7]=(a*u*s-h*l*s+h*n*A-e*u*A-a*n*d+e*l*d)*R,t[8]=v*R,t[9]=(p*c*s-h*m*s-p*i*d+e*m*d+h*i*f-e*c*f)*R,t[10]=(a*m*s-p*o*s+p*i*A-e*m*A-a*i*f+e*o*f)*R,t[11]=(h*o*s-a*c*s-h*i*A+e*c*A+a*i*d-e*o*d)*R,t[12]=w*R,t[13]=(h*m*n-p*c*n+p*i*u-e*m*u-h*i*g+e*c*g)*R,t[14]=(p*o*n-a*m*n-p*i*l+e*m*l+a*i*g-e*o*g)*R,t[15]=(a*c*n-h*o*n+h*i*l-e*c*l-a*i*u+e*o*u)*R,this}scale(t){const e=this.elements,i=t.x,n=t.y,s=t.z;return e[0]*=i,e[4]*=n,e[8]*=s,e[1]*=i,e[5]*=n,e[9]*=s,e[2]*=i,e[6]*=n,e[10]*=s,e[3]*=i,e[7]*=n,e[11]*=s,this}getMaxScaleOnAxis(){const t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],i=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],n=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,i,n))}makeTranslation(t,e,i){return t.isVector3?this.set(1,0,0,t.x,0,1,0,t.y,0,0,1,t.z,0,0,0,1):this.set(1,0,0,t,0,1,0,e,0,0,1,i,0,0,0,1),this}makeRotationX(t){const e=Math.cos(t),i=Math.sin(t);return this.set(1,0,0,0,0,e,-i,0,0,i,e,0,0,0,0,1),this}makeRotationY(t){const e=Math.cos(t),i=Math.sin(t);return this.set(e,0,i,0,0,1,0,0,-i,0,e,0,0,0,0,1),this}makeRotationZ(t){const e=Math.cos(t),i=Math.sin(t);return this.set(e,-i,0,0,i,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){const i=Math.cos(e),n=Math.sin(e),s=1-i,a=t.x,o=t.y,l=t.z,A=s*a,h=s*o;return this.set(A*a+i,A*o-n*l,A*l+n*o,0,A*o+n*l,h*o+i,h*l-n*a,0,A*l-n*o,h*l+n*a,s*l*l+i,0,0,0,0,1),this}makeScale(t,e,i){return this.set(t,0,0,0,0,e,0,0,0,0,i,0,0,0,0,1),this}makeShear(t,e,i,n,s,a){return this.set(1,i,s,0,t,1,a,0,e,n,1,0,0,0,0,1),this}compose(t,e,i){const n=this.elements,s=e._x,a=e._y,o=e._z,l=e._w,A=s+s,h=a+a,c=o+o,u=s*A,d=s*h,p=s*c,m=a*h,g=a*c,f=o*c,y=l*A,S=l*h,v=l*c,w=i.x,T=i.y,R=i.z;return n[0]=(1-(m+f))*w,n[1]=(d+v)*w,n[2]=(p-S)*w,n[3]=0,n[4]=(d-v)*T,n[5]=(1-(u+f))*T,n[6]=(g+y)*T,n[7]=0,n[8]=(p+S)*R,n[9]=(g-y)*R,n[10]=(1-(u+m))*R,n[11]=0,n[12]=t.x,n[13]=t.y,n[14]=t.z,n[15]=1,this}decompose(t,e,i){const n=this.elements;let s=ds.set(n[0],n[1],n[2]).length();const a=ds.set(n[4],n[5],n[6]).length(),o=ds.set(n[8],n[9],n[10]).length();this.determinant()<0&&(s=-s),t.x=n[12],t.y=n[13],t.z=n[14],ci.copy(this);const A=1/s,h=1/a,c=1/o;return ci.elements[0]*=A,ci.elements[1]*=A,ci.elements[2]*=A,ci.elements[4]*=h,ci.elements[5]*=h,ci.elements[6]*=h,ci.elements[8]*=c,ci.elements[9]*=c,ci.elements[10]*=c,e.setFromRotationMatrix(ci),i.x=s,i.y=a,i.z=o,this}makePerspective(t,e,i,n,s,a,o=Ci,l=!1){const A=this.elements,h=2*s/(e-t),c=2*s/(i-n),u=(e+t)/(e-t),d=(i+n)/(i-n);let p,m;if(l)p=s/(a-s),m=a*s/(a-s);else if(o===Ci)p=-(a+s)/(a-s),m=-2*a*s/(a-s);else if(o===Br)p=-a/(a-s),m=-a*s/(a-s);else throw new Error("THREE.Matrix4.makePerspective(): Invalid coordinate system: "+o);return A[0]=h,A[4]=0,A[8]=u,A[12]=0,A[1]=0,A[5]=c,A[9]=d,A[13]=0,A[2]=0,A[6]=0,A[10]=p,A[14]=m,A[3]=0,A[7]=0,A[11]=-1,A[15]=0,this}makeOrthographic(t,e,i,n,s,a,o=Ci,l=!1){const A=this.elements,h=2/(e-t),c=2/(i-n),u=-(e+t)/(e-t),d=-(i+n)/(i-n);let p,m;if(l)p=1/(a-s),m=a/(a-s);else if(o===Ci)p=-2/(a-s),m=-(a+s)/(a-s);else if(o===Br)p=-1/(a-s),m=-s/(a-s);else throw new Error("THREE.Matrix4.makeOrthographic(): Invalid coordinate system: "+o);return A[0]=h,A[4]=0,A[8]=0,A[12]=u,A[1]=0,A[5]=c,A[9]=0,A[13]=d,A[2]=0,A[6]=0,A[10]=p,A[14]=m,A[3]=0,A[7]=0,A[11]=0,A[15]=1,this}equals(t){const e=this.elements,i=t.elements;for(let n=0;n<16;n++)if(e[n]!==i[n])return!1;return!0}fromArray(t,e=0){for(let i=0;i<16;i++)this.elements[i]=t[i+e];return this}toArray(t=[],e=0){const i=this.elements;return t[e]=i[0],t[e+1]=i[1],t[e+2]=i[2],t[e+3]=i[3],t[e+4]=i[4],t[e+5]=i[5],t[e+6]=i[6],t[e+7]=i[7],t[e+8]=i[8],t[e+9]=i[9],t[e+10]=i[10],t[e+11]=i[11],t[e+12]=i[12],t[e+13]=i[13],t[e+14]=i[14],t[e+15]=i[15],t}}const ds=new B,ci=new ue,$d=new B(0,0,0),tf=new B(1,1,1),an=new B,Hr=new B,We=new B,jl=new ue,Ql=new Js;class vi{constructor(t=0,e=0,i=0,n=vi.DEFAULT_ORDER){this.isEuler=!0,this._x=t,this._y=e,this._z=i,this._order=n}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(t,e,i,n=this._order){return this._x=t,this._y=e,this._z=i,this._order=n,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e=this._order,i=!0){const n=t.elements,s=n[0],a=n[4],o=n[8],l=n[1],A=n[5],h=n[9],c=n[2],u=n[6],d=n[10];switch(e){case"XYZ":this._y=Math.asin(kt(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-h,d),this._z=Math.atan2(-a,s)):(this._x=Math.atan2(u,A),this._z=0);break;case"YXZ":this._x=Math.asin(-kt(h,-1,1)),Math.abs(h)<.9999999?(this._y=Math.atan2(o,d),this._z=Math.atan2(l,A)):(this._y=Math.atan2(-c,s),this._z=0);break;case"ZXY":this._x=Math.asin(kt(u,-1,1)),Math.abs(u)<.9999999?(this._y=Math.atan2(-c,d),this._z=Math.atan2(-a,A)):(this._y=0,this._z=Math.atan2(l,s));break;case"ZYX":this._y=Math.asin(-kt(c,-1,1)),Math.abs(c)<.9999999?(this._x=Math.atan2(u,d),this._z=Math.atan2(l,s)):(this._x=0,this._z=Math.atan2(-a,A));break;case"YZX":this._z=Math.asin(kt(l,-1,1)),Math.abs(l)<.9999999?(this._x=Math.atan2(-h,A),this._y=Math.atan2(-c,s)):(this._x=0,this._y=Math.atan2(o,d));break;case"XZY":this._z=Math.asin(-kt(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(u,A),this._y=Math.atan2(o,s)):(this._x=Math.atan2(-h,d),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+e)}return this._order=e,i===!0&&this._onChangeCallback(),this}setFromQuaternion(t,e,i){return jl.makeRotationFromQuaternion(t),this.setFromRotationMatrix(jl,e,i)}setFromVector3(t,e=this._order){return this.set(t.x,t.y,t.z,e)}reorder(t){return Ql.setFromEuler(this),this.setFromQuaternion(Ql,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],t[3]!==void 0&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}}vi.DEFAULT_ORDER="XYZ";class ql{constructor(){this.mask=1}set(t){this.mask=(1<<t|0)>>>0}enable(t){this.mask|=1<<t|0}enableAll(){this.mask=-1}toggle(t){this.mask^=1<<t|0}disable(t){this.mask&=~(1<<t|0)}disableAll(){this.mask=0}test(t){return(this.mask&t.mask)!==0}isEnabled(t){return(this.mask&(1<<t|0))!==0}}let ef=0;const Kl=new B,fs=new Js,Ui=new ue,Vr=new B,Ks=new B,nf=new B,sf=new Js,$l=new B(1,0,0),th=new B(0,1,0),eh=new B(0,0,1),ih={type:"added"},rf={type:"removed"},gs={type:"childadded",child:null},Xo={type:"childremoved",child:null};class ve extends rs{constructor(){super(),this.isObject3D=!0,Object.defineProperty(this,"id",{value:ef++}),this.uuid=Xs(),this.name="",this.type="Object3D",this.parent=null,this.children=[],this.up=ve.DEFAULT_UP.clone();const t=new B,e=new vi,i=new Js,n=new B(1,1,1);function s(){i.setFromEuler(e,!1)}function a(){e.setFromQuaternion(i,void 0,!1)}e._onChange(s),i._onChange(a),Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:t},rotation:{configurable:!0,enumerable:!0,value:e},quaternion:{configurable:!0,enumerable:!0,value:i},scale:{configurable:!0,enumerable:!0,value:n},modelViewMatrix:{value:new ue},normalMatrix:{value:new Nt}}),this.matrix=new ue,this.matrixWorld=new ue,this.matrixAutoUpdate=ve.DEFAULT_MATRIX_AUTO_UPDATE,this.matrixWorldAutoUpdate=ve.DEFAULT_MATRIX_WORLD_AUTO_UPDATE,this.matrixWorldNeedsUpdate=!1,this.layers=new ql,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.animations=[],this.customDepthMaterial=void 0,this.customDistanceMaterial=void 0,this.userData={}}onBeforeShadow(){}onAfterShadow(){}onBeforeRender(){}onAfterRender(){}applyMatrix4(t){this.matrixAutoUpdate&&this.updateMatrix(),this.matrix.premultiply(t),this.matrix.decompose(this.position,this.quaternion,this.scale)}applyQuaternion(t){return this.quaternion.premultiply(t),this}setRotationFromAxisAngle(t,e){this.quaternion.setFromAxisAngle(t,e)}setRotationFromEuler(t){this.quaternion.setFromEuler(t,!0)}setRotationFromMatrix(t){this.quaternion.setFromRotationMatrix(t)}setRotationFromQuaternion(t){this.quaternion.copy(t)}rotateOnAxis(t,e){return fs.setFromAxisAngle(t,e),this.quaternion.multiply(fs),this}rotateOnWorldAxis(t,e){return fs.setFromAxisAngle(t,e),this.quaternion.premultiply(fs),this}rotateX(t){return this.rotateOnAxis($l,t)}rotateY(t){return this.rotateOnAxis(th,t)}rotateZ(t){return this.rotateOnAxis(eh,t)}translateOnAxis(t,e){return Kl.copy(t).applyQuaternion(this.quaternion),this.position.add(Kl.multiplyScalar(e)),this}translateX(t){return this.translateOnAxis($l,t)}translateY(t){return this.translateOnAxis(th,t)}translateZ(t){return this.translateOnAxis(eh,t)}localToWorld(t){return this.updateWorldMatrix(!0,!1),t.applyMatrix4(this.matrixWorld)}worldToLocal(t){return this.updateWorldMatrix(!0,!1),t.applyMatrix4(Ui.copy(this.matrixWorld).invert())}lookAt(t,e,i){t.isVector3?Vr.copy(t):Vr.set(t,e,i);const n=this.parent;this.updateWorldMatrix(!0,!1),Ks.setFromMatrixPosition(this.matrixWorld),this.isCamera||this.isLight?Ui.lookAt(Ks,Vr,this.up):Ui.lookAt(Vr,Ks,this.up),this.quaternion.setFromRotationMatrix(Ui),n&&(Ui.extractRotation(n.matrixWorld),fs.setFromRotationMatrix(Ui),this.quaternion.premultiply(fs.invert()))}add(t){if(arguments.length>1){for(let e=0;e<arguments.length;e++)this.add(arguments[e]);return this}return t===this?(console.error("THREE.Object3D.add: object can't be added as a child of itself.",t),this):(t&&t.isObject3D?(t.removeFromParent(),t.parent=this,this.children.push(t),t.dispatchEvent(ih),gs.child=t,this.dispatchEvent(gs),gs.child=null):console.error("THREE.Object3D.add: object not an instance of THREE.Object3D.",t),this)}remove(t){if(arguments.length>1){for(let i=0;i<arguments.length;i++)this.remove(arguments[i]);return this}const e=this.children.indexOf(t);return e!==-1&&(t.parent=null,this.children.splice(e,1),t.dispatchEvent(rf),Xo.child=t,this.dispatchEvent(Xo),Xo.child=null),this}removeFromParent(){const t=this.parent;return t!==null&&t.remove(this),this}clear(){return this.remove(...this.children)}attach(t){return this.updateWorldMatrix(!0,!1),Ui.copy(this.matrixWorld).invert(),t.parent!==null&&(t.parent.updateWorldMatrix(!0,!1),Ui.multiply(t.parent.matrixWorld)),t.applyMatrix4(Ui),t.removeFromParent(),t.parent=this,this.children.push(t),t.updateWorldMatrix(!1,!0),t.dispatchEvent(ih),gs.child=t,this.dispatchEvent(gs),gs.child=null,this}getObjectById(t){return this.getObjectByProperty("id",t)}getObjectByName(t){return this.getObjectByProperty("name",t)}getObjectByProperty(t,e){if(this[t]===e)return this;for(let i=0,n=this.children.length;i<n;i++){const a=this.children[i].getObjectByProperty(t,e);if(a!==void 0)return a}}getObjectsByProperty(t,e,i=[]){this[t]===e&&i.push(this);const n=this.children;for(let s=0,a=n.length;s<a;s++)n[s].getObjectsByProperty(t,e,i);return i}getWorldPosition(t){return this.updateWorldMatrix(!0,!1),t.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(Ks,t,nf),t}getWorldScale(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(Ks,sf,t),t}getWorldDirection(t){this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(e[8],e[9],e[10]).normalize()}raycast(){}traverse(t){t(this);const e=this.children;for(let i=0,n=e.length;i<n;i++)e[i].traverse(t)}traverseVisible(t){if(this.visible===!1)return;t(this);const e=this.children;for(let i=0,n=e.length;i<n;i++)e[i].traverseVisible(t)}traverseAncestors(t){const e=this.parent;e!==null&&(t(e),e.traverseAncestors(t))}updateMatrix(){this.matrix.compose(this.position,this.quaternion,this.scale),this.matrixWorldNeedsUpdate=!0}updateMatrixWorld(t){this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||t)&&(this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),this.matrixWorldNeedsUpdate=!1,t=!0);const e=this.children;for(let i=0,n=e.length;i<n;i++)e[i].updateMatrixWorld(t)}updateWorldMatrix(t,e){const i=this.parent;if(t===!0&&i!==null&&i.updateWorldMatrix(!0,!1),this.matrixAutoUpdate&&this.updateMatrix(),this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),e===!0){const n=this.children;for(let s=0,a=n.length;s<a;s++)n[s].updateWorldMatrix(!1,!0)}}toJSON(t){const e=t===void 0||typeof t=="string",i={};e&&(t={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{},nodes:{}},i.metadata={version:4.7,type:"Object",generator:"Object3D.toJSON"});const n={};n.uuid=this.uuid,n.type=this.type,this.name!==""&&(n.name=this.name),this.castShadow===!0&&(n.castShadow=!0),this.receiveShadow===!0&&(n.receiveShadow=!0),this.visible===!1&&(n.visible=!1),this.frustumCulled===!1&&(n.frustumCulled=!1),this.renderOrder!==0&&(n.renderOrder=this.renderOrder),Object.keys(this.userData).length>0&&(n.userData=this.userData),n.layers=this.layers.mask,n.matrix=this.matrix.toArray(),n.up=this.up.toArray(),this.matrixAutoUpdate===!1&&(n.matrixAutoUpdate=!1),this.isInstancedMesh&&(n.type="InstancedMesh",n.count=this.count,n.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(n.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(n.type="BatchedMesh",n.perObjectFrustumCulled=this.perObjectFrustumCulled,n.sortObjects=this.sortObjects,n.drawRanges=this._drawRanges,n.reservedRanges=this._reservedRanges,n.geometryInfo=this._geometryInfo.map(o=>({...o,boundingBox:o.boundingBox?o.boundingBox.toJSON():void 0,boundingSphere:o.boundingSphere?o.boundingSphere.toJSON():void 0})),n.instanceInfo=this._instanceInfo.map(o=>({...o})),n.availableInstanceIds=this._availableInstanceIds.slice(),n.availableGeometryIds=this._availableGeometryIds.slice(),n.nextIndexStart=this._nextIndexStart,n.nextVertexStart=this._nextVertexStart,n.geometryCount=this._geometryCount,n.maxInstanceCount=this._maxInstanceCount,n.maxVertexCount=this._maxVertexCount,n.maxIndexCount=this._maxIndexCount,n.geometryInitialized=this._geometryInitialized,n.matricesTexture=this._matricesTexture.toJSON(t),n.indirectTexture=this._indirectTexture.toJSON(t),this._colorsTexture!==null&&(n.colorsTexture=this._colorsTexture.toJSON(t)),this.boundingSphere!==null&&(n.boundingSphere=this.boundingSphere.toJSON()),this.boundingBox!==null&&(n.boundingBox=this.boundingBox.toJSON()));function s(o,l){return o[l.uuid]===void 0&&(o[l.uuid]=l.toJSON(t)),l.uuid}if(this.isScene)this.background&&(this.background.isColor?n.background=this.background.toJSON():this.background.isTexture&&(n.background=this.background.toJSON(t).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(n.environment=this.environment.toJSON(t).uuid);else if(this.isMesh||this.isLine||this.isPoints){n.geometry=s(t.geometries,this.geometry);const o=this.geometry.parameters;if(o!==void 0&&o.shapes!==void 0){const l=o.shapes;if(Array.isArray(l))for(let A=0,h=l.length;A<h;A++){const c=l[A];s(t.shapes,c)}else s(t.shapes,l)}}if(this.isSkinnedMesh&&(n.bindMode=this.bindMode,n.bindMatrix=this.bindMatrix.toArray(),this.skeleton!==void 0&&(s(t.skeletons,this.skeleton),n.skeleton=this.skeleton.uuid)),this.material!==void 0)if(Array.isArray(this.material)){const o=[];for(let l=0,A=this.material.length;l<A;l++)o.push(s(t.materials,this.material[l]));n.material=o}else n.material=s(t.materials,this.material);if(this.children.length>0){n.children=[];for(let o=0;o<this.children.length;o++)n.children.push(this.children[o].toJSON(t).object)}if(this.animations.length>0){n.animations=[];for(let o=0;o<this.animations.length;o++){const l=this.animations[o];n.animations.push(s(t.animations,l))}}if(e){const o=a(t.geometries),l=a(t.materials),A=a(t.textures),h=a(t.images),c=a(t.shapes),u=a(t.skeletons),d=a(t.animations),p=a(t.nodes);o.length>0&&(i.geometries=o),l.length>0&&(i.materials=l),A.length>0&&(i.textures=A),h.length>0&&(i.images=h),c.length>0&&(i.shapes=c),u.length>0&&(i.skeletons=u),d.length>0&&(i.animations=d),p.length>0&&(i.nodes=p)}return i.object=n,i;function a(o){const l=[];for(const A in o){const h=o[A];delete h.metadata,l.push(h)}return l}}clone(t){return new this.constructor().copy(this,t)}copy(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldAutoUpdate=t.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.animations=t.animations.slice(),this.userData=JSON.parse(JSON.stringify(t.userData)),e===!0)for(let i=0;i<t.children.length;i++){const n=t.children[i];this.add(n.clone())}return this}}ve.DEFAULT_UP=new B(0,1,0),ve.DEFAULT_MATRIX_AUTO_UPDATE=!0,ve.DEFAULT_MATRIX_WORLD_AUTO_UPDATE=!0;const ui=new B,zi=new B,Zo=new B,Gi=new B,ps=new B,ms=new B,nh=new B,Jo=new B,jo=new B,Qo=new B,qo=new he,Ko=new he,$o=new he;class di{constructor(t=new B,e=new B,i=new B){this.a=t,this.b=e,this.c=i}static getNormal(t,e,i,n){n.subVectors(i,e),ui.subVectors(t,e),n.cross(ui);const s=n.lengthSq();return s>0?n.multiplyScalar(1/Math.sqrt(s)):n.set(0,0,0)}static getBarycoord(t,e,i,n,s){ui.subVectors(n,e),zi.subVectors(i,e),Zo.subVectors(t,e);const a=ui.dot(ui),o=ui.dot(zi),l=ui.dot(Zo),A=zi.dot(zi),h=zi.dot(Zo),c=a*A-o*o;if(c===0)return s.set(0,0,0),null;const u=1/c,d=(A*l-o*h)*u,p=(a*h-o*l)*u;return s.set(1-d-p,p,d)}static containsPoint(t,e,i,n){return this.getBarycoord(t,e,i,n,Gi)===null?!1:Gi.x>=0&&Gi.y>=0&&Gi.x+Gi.y<=1}static getInterpolation(t,e,i,n,s,a,o,l){return this.getBarycoord(t,e,i,n,Gi)===null?(l.x=0,l.y=0,"z"in l&&(l.z=0),"w"in l&&(l.w=0),null):(l.setScalar(0),l.addScaledVector(s,Gi.x),l.addScaledVector(a,Gi.y),l.addScaledVector(o,Gi.z),l)}static getInterpolatedAttribute(t,e,i,n,s,a){return qo.setScalar(0),Ko.setScalar(0),$o.setScalar(0),qo.fromBufferAttribute(t,e),Ko.fromBufferAttribute(t,i),$o.fromBufferAttribute(t,n),a.setScalar(0),a.addScaledVector(qo,s.x),a.addScaledVector(Ko,s.y),a.addScaledVector($o,s.z),a}static isFrontFacing(t,e,i,n){return ui.subVectors(i,e),zi.subVectors(t,e),ui.cross(zi).dot(n)<0}set(t,e,i){return this.a.copy(t),this.b.copy(e),this.c.copy(i),this}setFromPointsAndIndices(t,e,i,n){return this.a.copy(t[e]),this.b.copy(t[i]),this.c.copy(t[n]),this}setFromAttributeAndIndices(t,e,i,n){return this.a.fromBufferAttribute(t,e),this.b.fromBufferAttribute(t,i),this.c.fromBufferAttribute(t,n),this}clone(){return new this.constructor().copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return ui.subVectors(this.c,this.b),zi.subVectors(this.a,this.b),ui.cross(zi).length()*.5}getMidpoint(t){return t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return di.getNormal(this.a,this.b,this.c,t)}getPlane(t){return t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return di.getBarycoord(t,this.a,this.b,this.c,e)}getInterpolation(t,e,i,n,s){return di.getInterpolation(t,this.a,this.b,this.c,e,i,n,s)}containsPoint(t){return di.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return di.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){const i=this.a,n=this.b,s=this.c;let a,o;ps.subVectors(n,i),ms.subVectors(s,i),Jo.subVectors(t,i);const l=ps.dot(Jo),A=ms.dot(Jo);if(l<=0&&A<=0)return e.copy(i);jo.subVectors(t,n);const h=ps.dot(jo),c=ms.dot(jo);if(h>=0&&c<=h)return e.copy(n);const u=l*c-h*A;if(u<=0&&l>=0&&h<=0)return a=l/(l-h),e.copy(i).addScaledVector(ps,a);Qo.subVectors(t,s);const d=ps.dot(Qo),p=ms.dot(Qo);if(p>=0&&d<=p)return e.copy(s);const m=d*A-l*p;if(m<=0&&A>=0&&p<=0)return o=A/(A-p),e.copy(i).addScaledVector(ms,o);const g=h*p-d*c;if(g<=0&&c-h>=0&&d-p>=0)return nh.subVectors(s,n),o=(c-h)/(c-h+(d-p)),e.copy(n).addScaledVector(nh,o);const f=1/(g+m+u);return a=m*f,o=u*f,e.copy(i).addScaledVector(ps,a).addScaledVector(ms,o)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}const sh={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},on={h:0,s:0,l:0},Wr={h:0,s:0,l:0};function tA(r,t,e){return e<0&&(e+=1),e>1&&(e-=1),e<1/6?r+(t-r)*6*e:e<1/2?t:e<2/3?r+(t-r)*6*(2/3-e):r}class Vt{constructor(t,e,i){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(t,e,i)}set(t,e,i){if(e===void 0&&i===void 0){const n=t;n&&n.isColor?this.copy(n):typeof n=="number"?this.setHex(n):typeof n=="string"&&this.setStyle(n)}else this.setRGB(t,e,i);return this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t,e=Re){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(t&255)/255,Yt.colorSpaceToWorking(this,e),this}setRGB(t,e,i,n=Yt.workingColorSpace){return this.r=t,this.g=e,this.b=i,Yt.colorSpaceToWorking(this,n),this}setHSL(t,e,i,n=Yt.workingColorSpace){if(t=Hd(t,1),e=kt(e,0,1),i=kt(i,0,1),e===0)this.r=this.g=this.b=i;else{const s=i<=.5?i*(1+e):i+e-i*e,a=2*i-s;this.r=tA(a,s,t+1/3),this.g=tA(a,s,t),this.b=tA(a,s,t-1/3)}return Yt.colorSpaceToWorking(this,n),this}setStyle(t,e=Re){function i(s){s!==void 0&&parseFloat(s)<1&&console.warn("THREE.Color: Alpha component of "+t+" will be ignored.")}let n;if(n=/^(\w+)\(([^\)]*)\)/.exec(t)){let s;const a=n[1],o=n[2];switch(a){case"rgb":case"rgba":if(s=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(s[4]),this.setRGB(Math.min(255,parseInt(s[1],10))/255,Math.min(255,parseInt(s[2],10))/255,Math.min(255,parseInt(s[3],10))/255,e);if(s=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(s[4]),this.setRGB(Math.min(100,parseInt(s[1],10))/100,Math.min(100,parseInt(s[2],10))/100,Math.min(100,parseInt(s[3],10))/100,e);break;case"hsl":case"hsla":if(s=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(s[4]),this.setHSL(parseFloat(s[1])/360,parseFloat(s[2])/100,parseFloat(s[3])/100,e);break;default:console.warn("THREE.Color: Unknown color model "+t)}}else if(n=/^\#([A-Fa-f\d]+)$/.exec(t)){const s=n[1],a=s.length;if(a===3)return this.setRGB(parseInt(s.charAt(0),16)/15,parseInt(s.charAt(1),16)/15,parseInt(s.charAt(2),16)/15,e);if(a===6)return this.setHex(parseInt(s,16),e);console.warn("THREE.Color: Invalid hex color "+t)}else if(t&&t.length>0)return this.setColorName(t,e);return this}setColorName(t,e=Re){const i=sh[t.toLowerCase()];return i!==void 0?this.setHex(i,e):console.warn("THREE.Color: Unknown color "+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copySRGBToLinear(t){return this.r=Bi(t.r),this.g=Bi(t.g),this.b=Bi(t.b),this}copyLinearToSRGB(t){return this.r=os(t.r),this.g=os(t.g),this.b=os(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(t=Re){return Yt.workingToColorSpace(we.copy(this),t),Math.round(kt(we.r*255,0,255))*65536+Math.round(kt(we.g*255,0,255))*256+Math.round(kt(we.b*255,0,255))}getHexString(t=Re){return("000000"+this.getHex(t).toString(16)).slice(-6)}getHSL(t,e=Yt.workingColorSpace){Yt.workingToColorSpace(we.copy(this),e);const i=we.r,n=we.g,s=we.b,a=Math.max(i,n,s),o=Math.min(i,n,s);let l,A;const h=(o+a)/2;if(o===a)l=0,A=0;else{const c=a-o;switch(A=h<=.5?c/(a+o):c/(2-a-o),a){case i:l=(n-s)/c+(n<s?6:0);break;case n:l=(s-i)/c+2;break;case s:l=(i-n)/c+4;break}l/=6}return t.h=l,t.s=A,t.l=h,t}getRGB(t,e=Yt.workingColorSpace){return Yt.workingToColorSpace(we.copy(this),e),t.r=we.r,t.g=we.g,t.b=we.b,t}getStyle(t=Re){Yt.workingToColorSpace(we.copy(this),t);const e=we.r,i=we.g,n=we.b;return t!==Re?`color(${t} ${e.toFixed(3)} ${i.toFixed(3)} ${n.toFixed(3)})`:`rgb(${Math.round(e*255)},${Math.round(i*255)},${Math.round(n*255)})`}offsetHSL(t,e,i){return this.getHSL(on),this.setHSL(on.h+t,on.s+e,on.l+i)}add(t){return this.r+=t.r,this.g+=t.g,this.b+=t.b,this}addColors(t,e){return this.r=t.r+e.r,this.g=t.g+e.g,this.b=t.b+e.b,this}addScalar(t){return this.r+=t,this.g+=t,this.b+=t,this}sub(t){return this.r=Math.max(0,this.r-t.r),this.g=Math.max(0,this.g-t.g),this.b=Math.max(0,this.b-t.b),this}multiply(t){return this.r*=t.r,this.g*=t.g,this.b*=t.b,this}multiplyScalar(t){return this.r*=t,this.g*=t,this.b*=t,this}lerp(t,e){return this.r+=(t.r-this.r)*e,this.g+=(t.g-this.g)*e,this.b+=(t.b-this.b)*e,this}lerpColors(t,e,i){return this.r=t.r+(e.r-t.r)*i,this.g=t.g+(e.g-t.g)*i,this.b=t.b+(e.b-t.b)*i,this}lerpHSL(t,e){this.getHSL(on),t.getHSL(Wr);const i=No(on.h,Wr.h,e),n=No(on.s,Wr.s,e),s=No(on.l,Wr.l,e);return this.setHSL(i,n,s),this}setFromVector3(t){return this.r=t.x,this.g=t.y,this.b=t.z,this}applyMatrix3(t){const e=this.r,i=this.g,n=this.b,s=t.elements;return this.r=s[0]*e+s[3]*i+s[6]*n,this.g=s[1]*e+s[4]*i+s[7]*n,this.b=s[2]*e+s[5]*i+s[8]*n,this}equals(t){return t.r===this.r&&t.g===this.g&&t.b===this.b}fromArray(t,e=0){return this.r=t[e],this.g=t[e+1],this.b=t[e+2],this}toArray(t=[],e=0){return t[e]=this.r,t[e+1]=this.g,t[e+2]=this.b,t}fromBufferAttribute(t,e){return this.r=t.getX(e),this.g=t.getY(e),this.b=t.getZ(e),this}toJSON(){return this.getHex()}*[Symbol.iterator](){yield this.r,yield this.g,yield this.b}}const we=new Vt;Vt.NAMES=sh;let af=0;class $s extends rs{constructor(){super(),this.isMaterial=!0,Object.defineProperty(this,"id",{value:af++}),this.uuid=Xs(),this.name="",this.type="Material",this.blending=$n,this.side=Ki,this.vertexColors=!1,this.opacity=1,this.transparent=!1,this.alphaHash=!1,this.blendSrc=Ga,this.blendDst=ka,this.blendEquation=vn,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.blendColor=new Vt(0,0,0),this.blendAlpha=0,this.depthFunc=ts,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=zl,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=ss,this.stencilZFail=ss,this.stencilZPass=ss,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.forceSinglePass=!1,this.allowOverride=!0,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0,this._alphaTest=0}get alphaTest(){return this._alphaTest}set alphaTest(t){this._alphaTest>0!=t>0&&this.version++,this._alphaTest=t}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(t){if(t!==void 0)for(const e in t){const i=t[e];if(i===void 0){console.warn(`THREE.Material: parameter '${e}' has value of undefined.`);continue}const n=this[e];if(n===void 0){console.warn(`THREE.Material: '${e}' is not a property of THREE.${this.type}.`);continue}n&&n.isColor?n.set(i):n&&n.isVector3&&i&&i.isVector3?n.copy(i):this[e]=i}}toJSON(t){const e=t===void 0||typeof t=="string";e&&(t={textures:{},images:{}});const i={metadata:{version:4.7,type:"Material",generator:"Material.toJSON"}};i.uuid=this.uuid,i.type=this.type,this.name!==""&&(i.name=this.name),this.color&&this.color.isColor&&(i.color=this.color.getHex()),this.roughness!==void 0&&(i.roughness=this.roughness),this.metalness!==void 0&&(i.metalness=this.metalness),this.sheen!==void 0&&(i.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(i.sheenColor=this.sheenColor.getHex()),this.sheenRoughness!==void 0&&(i.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(i.emissive=this.emissive.getHex()),this.emissiveIntensity!==void 0&&this.emissiveIntensity!==1&&(i.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(i.specular=this.specular.getHex()),this.specularIntensity!==void 0&&(i.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(i.specularColor=this.specularColor.getHex()),this.shininess!==void 0&&(i.shininess=this.shininess),this.clearcoat!==void 0&&(i.clearcoat=this.clearcoat),this.clearcoatRoughness!==void 0&&(i.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(i.clearcoatMap=this.clearcoatMap.toJSON(t).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(i.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(t).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(i.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(t).uuid,i.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.dispersion!==void 0&&(i.dispersion=this.dispersion),this.iridescence!==void 0&&(i.iridescence=this.iridescence),this.iridescenceIOR!==void 0&&(i.iridescenceIOR=this.iridescenceIOR),this.iridescenceThicknessRange!==void 0&&(i.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(i.iridescenceMap=this.iridescenceMap.toJSON(t).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(i.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(t).uuid),this.anisotropy!==void 0&&(i.anisotropy=this.anisotropy),this.anisotropyRotation!==void 0&&(i.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(i.anisotropyMap=this.anisotropyMap.toJSON(t).uuid),this.map&&this.map.isTexture&&(i.map=this.map.toJSON(t).uuid),this.matcap&&this.matcap.isTexture&&(i.matcap=this.matcap.toJSON(t).uuid),this.alphaMap&&this.alphaMap.isTexture&&(i.alphaMap=this.alphaMap.toJSON(t).uuid),this.lightMap&&this.lightMap.isTexture&&(i.lightMap=this.lightMap.toJSON(t).uuid,i.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(i.aoMap=this.aoMap.toJSON(t).uuid,i.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(i.bumpMap=this.bumpMap.toJSON(t).uuid,i.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(i.normalMap=this.normalMap.toJSON(t).uuid,i.normalMapType=this.normalMapType,i.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(i.displacementMap=this.displacementMap.toJSON(t).uuid,i.displacementScale=this.displacementScale,i.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(i.roughnessMap=this.roughnessMap.toJSON(t).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(i.metalnessMap=this.metalnessMap.toJSON(t).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(i.emissiveMap=this.emissiveMap.toJSON(t).uuid),this.specularMap&&this.specularMap.isTexture&&(i.specularMap=this.specularMap.toJSON(t).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(i.specularIntensityMap=this.specularIntensityMap.toJSON(t).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(i.specularColorMap=this.specularColorMap.toJSON(t).uuid),this.envMap&&this.envMap.isTexture&&(i.envMap=this.envMap.toJSON(t).uuid,this.combine!==void 0&&(i.combine=this.combine)),this.envMapRotation!==void 0&&(i.envMapRotation=this.envMapRotation.toArray()),this.envMapIntensity!==void 0&&(i.envMapIntensity=this.envMapIntensity),this.reflectivity!==void 0&&(i.reflectivity=this.reflectivity),this.refractionRatio!==void 0&&(i.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(i.gradientMap=this.gradientMap.toJSON(t).uuid),this.transmission!==void 0&&(i.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(i.transmissionMap=this.transmissionMap.toJSON(t).uuid),this.thickness!==void 0&&(i.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(i.thicknessMap=this.thicknessMap.toJSON(t).uuid),this.attenuationDistance!==void 0&&this.attenuationDistance!==1/0&&(i.attenuationDistance=this.attenuationDistance),this.attenuationColor!==void 0&&(i.attenuationColor=this.attenuationColor.getHex()),this.size!==void 0&&(i.size=this.size),this.shadowSide!==null&&(i.shadowSide=this.shadowSide),this.sizeAttenuation!==void 0&&(i.sizeAttenuation=this.sizeAttenuation),this.blending!==$n&&(i.blending=this.blending),this.side!==Ki&&(i.side=this.side),this.vertexColors===!0&&(i.vertexColors=!0),this.opacity<1&&(i.opacity=this.opacity),this.transparent===!0&&(i.transparent=!0),this.blendSrc!==Ga&&(i.blendSrc=this.blendSrc),this.blendDst!==ka&&(i.blendDst=this.blendDst),this.blendEquation!==vn&&(i.blendEquation=this.blendEquation),this.blendSrcAlpha!==null&&(i.blendSrcAlpha=this.blendSrcAlpha),this.blendDstAlpha!==null&&(i.blendDstAlpha=this.blendDstAlpha),this.blendEquationAlpha!==null&&(i.blendEquationAlpha=this.blendEquationAlpha),this.blendColor&&this.blendColor.isColor&&(i.blendColor=this.blendColor.getHex()),this.blendAlpha!==0&&(i.blendAlpha=this.blendAlpha),this.depthFunc!==ts&&(i.depthFunc=this.depthFunc),this.depthTest===!1&&(i.depthTest=this.depthTest),this.depthWrite===!1&&(i.depthWrite=this.depthWrite),this.colorWrite===!1&&(i.colorWrite=this.colorWrite),this.stencilWriteMask!==255&&(i.stencilWriteMask=this.stencilWriteMask),this.stencilFunc!==zl&&(i.stencilFunc=this.stencilFunc),this.stencilRef!==0&&(i.stencilRef=this.stencilRef),this.stencilFuncMask!==255&&(i.stencilFuncMask=this.stencilFuncMask),this.stencilFail!==ss&&(i.stencilFail=this.stencilFail),this.stencilZFail!==ss&&(i.stencilZFail=this.stencilZFail),this.stencilZPass!==ss&&(i.stencilZPass=this.stencilZPass),this.stencilWrite===!0&&(i.stencilWrite=this.stencilWrite),this.rotation!==void 0&&this.rotation!==0&&(i.rotation=this.rotation),this.polygonOffset===!0&&(i.polygonOffset=!0),this.polygonOffsetFactor!==0&&(i.polygonOffsetFactor=this.polygonOffsetFactor),this.polygonOffsetUnits!==0&&(i.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth!==void 0&&this.linewidth!==1&&(i.linewidth=this.linewidth),this.dashSize!==void 0&&(i.dashSize=this.dashSize),this.gapSize!==void 0&&(i.gapSize=this.gapSize),this.scale!==void 0&&(i.scale=this.scale),this.dithering===!0&&(i.dithering=!0),this.alphaTest>0&&(i.alphaTest=this.alphaTest),this.alphaHash===!0&&(i.alphaHash=!0),this.alphaToCoverage===!0&&(i.alphaToCoverage=!0),this.premultipliedAlpha===!0&&(i.premultipliedAlpha=!0),this.forceSinglePass===!0&&(i.forceSinglePass=!0),this.wireframe===!0&&(i.wireframe=!0),this.wireframeLinewidth>1&&(i.wireframeLinewidth=this.wireframeLinewidth),this.wireframeLinecap!=="round"&&(i.wireframeLinecap=this.wireframeLinecap),this.wireframeLinejoin!=="round"&&(i.wireframeLinejoin=this.wireframeLinejoin),this.flatShading===!0&&(i.flatShading=!0),this.visible===!1&&(i.visible=!1),this.toneMapped===!1&&(i.toneMapped=!1),this.fog===!1&&(i.fog=!1),Object.keys(this.userData).length>0&&(i.userData=this.userData);function n(s){const a=[];for(const o in s){const l=s[o];delete l.metadata,a.push(l)}return a}if(e){const s=n(t.textures),a=n(t.images);s.length>0&&(i.textures=s),a.length>0&&(i.images=a)}return i}clone(){return new this.constructor().copy(this)}copy(t){this.name=t.name,this.blending=t.blending,this.side=t.side,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.blendColor.copy(t.blendColor),this.blendAlpha=t.blendAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;const e=t.clippingPlanes;let i=null;if(e!==null){const n=e.length;i=new Array(n);for(let s=0;s!==n;++s)i[s]=e[s].clone()}return this.clippingPlanes=i,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.alphaHash=t.alphaHash,this.alphaToCoverage=t.alphaToCoverage,this.premultipliedAlpha=t.premultipliedAlpha,this.forceSinglePass=t.forceSinglePass,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(t){t===!0&&this.version++}}class eA extends $s{constructor(t){super(),this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new Vt(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new vi,this.combine=wl,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapRotation.copy(t.envMapRotation),this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.fog=t.fog,this}}const pe=new B,Yr=new Zt;let of=0;class xi{constructor(t,e,i=!1){if(Array.isArray(t))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,Object.defineProperty(this,"id",{value:of++}),this.name="",this.array=t,this.itemSize=e,this.count=t!==void 0?t.length/e:0,this.normalized=i,this.usage=kl,this.updateRanges=[],this.gpuType=Ni,this.version=0}onUploadCallback(){}set needsUpdate(t){t===!0&&this.version++}setUsage(t){return this.usage=t,this}addUpdateRange(t,e){this.updateRanges.push({start:t,count:e})}clearUpdateRanges(){this.updateRanges.length=0}copy(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.usage=t.usage,this.gpuType=t.gpuType,this}copyAt(t,e,i){t*=this.itemSize,i*=e.itemSize;for(let n=0,s=this.itemSize;n<s;n++)this.array[t+n]=e.array[i+n];return this}copyArray(t){return this.array.set(t),this}applyMatrix3(t){if(this.itemSize===2)for(let e=0,i=this.count;e<i;e++)Yr.fromBufferAttribute(this,e),Yr.applyMatrix3(t),this.setXY(e,Yr.x,Yr.y);else if(this.itemSize===3)for(let e=0,i=this.count;e<i;e++)pe.fromBufferAttribute(this,e),pe.applyMatrix3(t),this.setXYZ(e,pe.x,pe.y,pe.z);return this}applyMatrix4(t){for(let e=0,i=this.count;e<i;e++)pe.fromBufferAttribute(this,e),pe.applyMatrix4(t),this.setXYZ(e,pe.x,pe.y,pe.z);return this}applyNormalMatrix(t){for(let e=0,i=this.count;e<i;e++)pe.fromBufferAttribute(this,e),pe.applyNormalMatrix(t),this.setXYZ(e,pe.x,pe.y,pe.z);return this}transformDirection(t){for(let e=0,i=this.count;e<i;e++)pe.fromBufferAttribute(this,e),pe.transformDirection(t),this.setXYZ(e,pe.x,pe.y,pe.z);return this}set(t,e=0){return this.array.set(t,e),this}getComponent(t,e){let i=this.array[t*this.itemSize+e];return this.normalized&&(i=Zs(i,this.array)),i}setComponent(t,e,i){return this.normalized&&(i=Oe(i,this.array)),this.array[t*this.itemSize+e]=i,this}getX(t){let e=this.array[t*this.itemSize];return this.normalized&&(e=Zs(e,this.array)),e}setX(t,e){return this.normalized&&(e=Oe(e,this.array)),this.array[t*this.itemSize]=e,this}getY(t){let e=this.array[t*this.itemSize+1];return this.normalized&&(e=Zs(e,this.array)),e}setY(t,e){return this.normalized&&(e=Oe(e,this.array)),this.array[t*this.itemSize+1]=e,this}getZ(t){let e=this.array[t*this.itemSize+2];return this.normalized&&(e=Zs(e,this.array)),e}setZ(t,e){return this.normalized&&(e=Oe(e,this.array)),this.array[t*this.itemSize+2]=e,this}getW(t){let e=this.array[t*this.itemSize+3];return this.normalized&&(e=Zs(e,this.array)),e}setW(t,e){return this.normalized&&(e=Oe(e,this.array)),this.array[t*this.itemSize+3]=e,this}setXY(t,e,i){return t*=this.itemSize,this.normalized&&(e=Oe(e,this.array),i=Oe(i,this.array)),this.array[t+0]=e,this.array[t+1]=i,this}setXYZ(t,e,i,n){return t*=this.itemSize,this.normalized&&(e=Oe(e,this.array),i=Oe(i,this.array),n=Oe(n,this.array)),this.array[t+0]=e,this.array[t+1]=i,this.array[t+2]=n,this}setXYZW(t,e,i,n,s){return t*=this.itemSize,this.normalized&&(e=Oe(e,this.array),i=Oe(i,this.array),n=Oe(n,this.array),s=Oe(s,this.array)),this.array[t+0]=e,this.array[t+1]=i,this.array[t+2]=n,this.array[t+3]=s,this}onUpload(t){return this.onUploadCallback=t,this}clone(){return new this.constructor(this.array,this.itemSize).copy(this)}toJSON(){const t={itemSize:this.itemSize,type:this.array.constructor.name,array:Array.from(this.array),normalized:this.normalized};return this.name!==""&&(t.name=this.name),this.usage!==kl&&(t.usage=this.usage),t}}class rh extends xi{constructor(t,e,i){super(new Uint16Array(t),e,i)}}class ah extends xi{constructor(t,e,i){super(new Uint32Array(t),e,i)}}class Tn extends xi{constructor(t,e,i){super(new Float32Array(t),e,i)}}let Af=0;const qe=new ue,iA=new ve,Is=new B,Ye=new ls,tr=new ls,xe=new B;class wn extends rs{constructor(){super(),this.isBufferGeometry=!0,Object.defineProperty(this,"id",{value:Af++}),this.uuid=Xs(),this.name="",this.type="BufferGeometry",this.index=null,this.indirect=null,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}getIndex(){return this.index}setIndex(t){return Array.isArray(t)?this.index=new(Wl(t)?ah:rh)(t,1):this.index=t,this}setIndirect(t){return this.indirect=t,this}getIndirect(){return this.indirect}getAttribute(t){return this.attributes[t]}setAttribute(t,e){return this.attributes[t]=e,this}deleteAttribute(t){return delete this.attributes[t],this}hasAttribute(t){return this.attributes[t]!==void 0}addGroup(t,e,i=0){this.groups.push({start:t,count:e,materialIndex:i})}clearGroups(){this.groups=[]}setDrawRange(t,e){this.drawRange.start=t,this.drawRange.count=e}applyMatrix4(t){const e=this.attributes.position;e!==void 0&&(e.applyMatrix4(t),e.needsUpdate=!0);const i=this.attributes.normal;if(i!==void 0){const s=new Nt().getNormalMatrix(t);i.applyNormalMatrix(s),i.needsUpdate=!0}const n=this.attributes.tangent;return n!==void 0&&(n.transformDirection(t),n.needsUpdate=!0),this.boundingBox!==null&&this.computeBoundingBox(),this.boundingSphere!==null&&this.computeBoundingSphere(),this}applyQuaternion(t){return qe.makeRotationFromQuaternion(t),this.applyMatrix4(qe),this}rotateX(t){return qe.makeRotationX(t),this.applyMatrix4(qe),this}rotateY(t){return qe.makeRotationY(t),this.applyMatrix4(qe),this}rotateZ(t){return qe.makeRotationZ(t),this.applyMatrix4(qe),this}translate(t,e,i){return qe.makeTranslation(t,e,i),this.applyMatrix4(qe),this}scale(t,e,i){return qe.makeScale(t,e,i),this.applyMatrix4(qe),this}lookAt(t){return iA.lookAt(t),iA.updateMatrix(),this.applyMatrix4(iA.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(Is).negate(),this.translate(Is.x,Is.y,Is.z),this}setFromPoints(t){const e=this.getAttribute("position");if(e===void 0){const i=[];for(let n=0,s=t.length;n<s;n++){const a=t[n];i.push(a.x,a.y,a.z||0)}this.setAttribute("position",new Tn(i,3))}else{const i=Math.min(t.length,e.count);for(let n=0;n<i;n++){const s=t[n];e.setXYZ(n,s.x,s.y,s.z||0)}t.length>e.count&&console.warn("THREE.BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry."),e.needsUpdate=!0}return this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new ls);const t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute){console.error("THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.",this),this.boundingBox.set(new B(-1/0,-1/0,-1/0),new B(1/0,1/0,1/0));return}if(t!==void 0){if(this.boundingBox.setFromBufferAttribute(t),e)for(let i=0,n=e.length;i<n;i++){const s=e[i];Ye.setFromBufferAttribute(s),this.morphTargetsRelative?(xe.addVectors(this.boundingBox.min,Ye.min),this.boundingBox.expandByPoint(xe),xe.addVectors(this.boundingBox.max,Ye.max),this.boundingBox.expandByPoint(xe)):(this.boundingBox.expandByPoint(Ye.min),this.boundingBox.expandByPoint(Ye.max))}}else this.boundingBox.makeEmpty();(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))&&console.error('THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The "position" attribute is likely to have NaN values.',this)}computeBoundingSphere(){this.boundingSphere===null&&(this.boundingSphere=new Ho);const t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute){console.error("THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere.",this),this.boundingSphere.set(new B,1/0);return}if(t){const i=this.boundingSphere.center;if(Ye.setFromBufferAttribute(t),e)for(let s=0,a=e.length;s<a;s++){const o=e[s];tr.setFromBufferAttribute(o),this.morphTargetsRelative?(xe.addVectors(Ye.min,tr.min),Ye.expandByPoint(xe),xe.addVectors(Ye.max,tr.max),Ye.expandByPoint(xe)):(Ye.expandByPoint(tr.min),Ye.expandByPoint(tr.max))}Ye.getCenter(i);let n=0;for(let s=0,a=t.count;s<a;s++)xe.fromBufferAttribute(t,s),n=Math.max(n,i.distanceToSquared(xe));if(e)for(let s=0,a=e.length;s<a;s++){const o=e[s],l=this.morphTargetsRelative;for(let A=0,h=o.count;A<h;A++)xe.fromBufferAttribute(o,A),l&&(Is.fromBufferAttribute(t,A),xe.add(Is)),n=Math.max(n,i.distanceToSquared(xe))}this.boundingSphere.radius=Math.sqrt(n),isNaN(this.boundingSphere.radius)&&console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.',this)}}computeTangents(){const t=this.index,e=this.attributes;if(t===null||e.position===void 0||e.normal===void 0||e.uv===void 0){console.error("THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)");return}const i=e.position,n=e.normal,s=e.uv;this.hasAttribute("tangent")===!1&&this.setAttribute("tangent",new xi(new Float32Array(4*i.count),4));const a=this.getAttribute("tangent"),o=[],l=[];for(let P=0;P<i.count;P++)o[P]=new B,l[P]=new B;const A=new B,h=new B,c=new B,u=new Zt,d=new Zt,p=new Zt,m=new B,g=new B;function f(P,E,x){A.fromBufferAttribute(i,P),h.fromBufferAttribute(i,E),c.fromBufferAttribute(i,x),u.fromBufferAttribute(s,P),d.fromBufferAttribute(s,E),p.fromBufferAttribute(s,x),h.sub(A),c.sub(A),d.sub(u),p.sub(u);const b=1/(d.x*p.y-p.x*d.y);isFinite(b)&&(m.copy(h).multiplyScalar(p.y).addScaledVector(c,-d.y).multiplyScalar(b),g.copy(c).multiplyScalar(d.x).addScaledVector(h,-p.x).multiplyScalar(b),o[P].add(m),o[E].add(m),o[x].add(m),l[P].add(g),l[E].add(g),l[x].add(g))}let y=this.groups;y.length===0&&(y=[{start:0,count:t.count}]);for(let P=0,E=y.length;P<E;++P){const x=y[P],b=x.start,z=x.count;for(let F=b,U=b+z;F<U;F+=3)f(t.getX(F+0),t.getX(F+1),t.getX(F+2))}const S=new B,v=new B,w=new B,T=new B;function R(P){w.fromBufferAttribute(n,P),T.copy(w);const E=o[P];S.copy(E),S.sub(w.multiplyScalar(w.dot(E))).normalize(),v.crossVectors(T,E);const b=v.dot(l[P])<0?-1:1;a.setXYZW(P,S.x,S.y,S.z,b)}for(let P=0,E=y.length;P<E;++P){const x=y[P],b=x.start,z=x.count;for(let F=b,U=b+z;F<U;F+=3)R(t.getX(F+0)),R(t.getX(F+1)),R(t.getX(F+2))}}computeVertexNormals(){const t=this.index,e=this.getAttribute("position");if(e!==void 0){let i=this.getAttribute("normal");if(i===void 0)i=new xi(new Float32Array(e.count*3),3),this.setAttribute("normal",i);else for(let u=0,d=i.count;u<d;u++)i.setXYZ(u,0,0,0);const n=new B,s=new B,a=new B,o=new B,l=new B,A=new B,h=new B,c=new B;if(t)for(let u=0,d=t.count;u<d;u+=3){const p=t.getX(u+0),m=t.getX(u+1),g=t.getX(u+2);n.fromBufferAttribute(e,p),s.fromBufferAttribute(e,m),a.fromBufferAttribute(e,g),h.subVectors(a,s),c.subVectors(n,s),h.cross(c),o.fromBufferAttribute(i,p),l.fromBufferAttribute(i,m),A.fromBufferAttribute(i,g),o.add(h),l.add(h),A.add(h),i.setXYZ(p,o.x,o.y,o.z),i.setXYZ(m,l.x,l.y,l.z),i.setXYZ(g,A.x,A.y,A.z)}else for(let u=0,d=e.count;u<d;u+=3)n.fromBufferAttribute(e,u+0),s.fromBufferAttribute(e,u+1),a.fromBufferAttribute(e,u+2),h.subVectors(a,s),c.subVectors(n,s),h.cross(c),i.setXYZ(u+0,h.x,h.y,h.z),i.setXYZ(u+1,h.x,h.y,h.z),i.setXYZ(u+2,h.x,h.y,h.z);this.normalizeNormals(),i.needsUpdate=!0}}normalizeNormals(){const t=this.attributes.normal;for(let e=0,i=t.count;e<i;e++)xe.fromBufferAttribute(t,e),xe.normalize(),t.setXYZ(e,xe.x,xe.y,xe.z)}toNonIndexed(){function t(o,l){const A=o.array,h=o.itemSize,c=o.normalized,u=new A.constructor(l.length*h);let d=0,p=0;for(let m=0,g=l.length;m<g;m++){o.isInterleavedBufferAttribute?d=l[m]*o.data.stride+o.offset:d=l[m]*h;for(let f=0;f<h;f++)u[p++]=A[d++]}return new xi(u,h,c)}if(this.index===null)return console.warn("THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed."),this;const e=new wn,i=this.index.array,n=this.attributes;for(const o in n){const l=n[o],A=t(l,i);e.setAttribute(o,A)}const s=this.morphAttributes;for(const o in s){const l=[],A=s[o];for(let h=0,c=A.length;h<c;h++){const u=A[h],d=t(u,i);l.push(d)}e.morphAttributes[o]=l}e.morphTargetsRelative=this.morphTargetsRelative;const a=this.groups;for(let o=0,l=a.length;o<l;o++){const A=a[o];e.addGroup(A.start,A.count,A.materialIndex)}return e}toJSON(){const t={metadata:{version:4.7,type:"BufferGeometry",generator:"BufferGeometry.toJSON"}};if(t.uuid=this.uuid,t.type=this.type,this.name!==""&&(t.name=this.name),Object.keys(this.userData).length>0&&(t.userData=this.userData),this.parameters!==void 0){const l=this.parameters;for(const A in l)l[A]!==void 0&&(t[A]=l[A]);return t}t.data={attributes:{}};const e=this.index;e!==null&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});const i=this.attributes;for(const l in i){const A=i[l];t.data.attributes[l]=A.toJSON(t.data)}const n={};let s=!1;for(const l in this.morphAttributes){const A=this.morphAttributes[l],h=[];for(let c=0,u=A.length;c<u;c++){const d=A[c];h.push(d.toJSON(t.data))}h.length>0&&(n[l]=h,s=!0)}s&&(t.data.morphAttributes=n,t.data.morphTargetsRelative=this.morphTargetsRelative);const a=this.groups;a.length>0&&(t.data.groups=JSON.parse(JSON.stringify(a)));const o=this.boundingSphere;return o!==null&&(t.data.boundingSphere=o.toJSON()),t}clone(){return new this.constructor().copy(this)}copy(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const e={};this.name=t.name;const i=t.index;i!==null&&this.setIndex(i.clone());const n=t.attributes;for(const A in n){const h=n[A];this.setAttribute(A,h.clone(e))}const s=t.morphAttributes;for(const A in s){const h=[],c=s[A];for(let u=0,d=c.length;u<d;u++)h.push(c[u].clone(e));this.morphAttributes[A]=h}this.morphTargetsRelative=t.morphTargetsRelative;const a=t.groups;for(let A=0,h=a.length;A<h;A++){const c=a[A];this.addGroup(c.start,c.count,c.materialIndex)}const o=t.boundingBox;o!==null&&(this.boundingBox=o.clone());const l=t.boundingSphere;return l!==null&&(this.boundingSphere=l.clone()),this.drawRange.start=t.drawRange.start,this.drawRange.count=t.drawRange.count,this.userData=t.userData,this}dispose(){this.dispatchEvent({type:"dispose"})}}const oh=new ue,Rn=new Kd,Xr=new Ho,Ah=new B,Zr=new B,Jr=new B,jr=new B,nA=new B,Qr=new B,lh=new B,qr=new B;class fi extends ve{constructor(t=new wn,e=new eA){super(),this.isMesh=!0,this.type="Mesh",this.geometry=t,this.material=e,this.morphTargetDictionary=void 0,this.morphTargetInfluences=void 0,this.count=1,this.updateMorphTargets()}copy(t,e){return super.copy(t,e),t.morphTargetInfluences!==void 0&&(this.morphTargetInfluences=t.morphTargetInfluences.slice()),t.morphTargetDictionary!==void 0&&(this.morphTargetDictionary=Object.assign({},t.morphTargetDictionary)),this.material=Array.isArray(t.material)?t.material.slice():t.material,this.geometry=t.geometry,this}updateMorphTargets(){const e=this.geometry.morphAttributes,i=Object.keys(e);if(i.length>0){const n=e[i[0]];if(n!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let s=0,a=n.length;s<a;s++){const o=n[s].name||String(s);this.morphTargetInfluences.push(0),this.morphTargetDictionary[o]=s}}}}getVertexPosition(t,e){const i=this.geometry,n=i.attributes.position,s=i.morphAttributes.position,a=i.morphTargetsRelative;e.fromBufferAttribute(n,t);const o=this.morphTargetInfluences;if(s&&o){Qr.set(0,0,0);for(let l=0,A=s.length;l<A;l++){const h=o[l],c=s[l];h!==0&&(nA.fromBufferAttribute(c,t),a?Qr.addScaledVector(nA,h):Qr.addScaledVector(nA.sub(e),h))}e.add(Qr)}return e}raycast(t,e){const i=this.geometry,n=this.material,s=this.matrixWorld;n!==void 0&&(i.boundingSphere===null&&i.computeBoundingSphere(),Xr.copy(i.boundingSphere),Xr.applyMatrix4(s),Rn.copy(t.ray).recast(t.near),!(Xr.containsPoint(Rn.origin)===!1&&(Rn.intersectSphere(Xr,Ah)===null||Rn.origin.distanceToSquared(Ah)>(t.far-t.near)**2))&&(oh.copy(s).invert(),Rn.copy(t.ray).applyMatrix4(oh),!(i.boundingBox!==null&&Rn.intersectsBox(i.boundingBox)===!1)&&this._computeIntersections(t,e,Rn)))}_computeIntersections(t,e,i){let n;const s=this.geometry,a=this.material,o=s.index,l=s.attributes.position,A=s.attributes.uv,h=s.attributes.uv1,c=s.attributes.normal,u=s.groups,d=s.drawRange;if(o!==null)if(Array.isArray(a))for(let p=0,m=u.length;p<m;p++){const g=u[p],f=a[g.materialIndex],y=Math.max(g.start,d.start),S=Math.min(o.count,Math.min(g.start+g.count,d.start+d.count));for(let v=y,w=S;v<w;v+=3){const T=o.getX(v),R=o.getX(v+1),P=o.getX(v+2);n=Kr(this,f,t,i,A,h,c,T,R,P),n&&(n.faceIndex=Math.floor(v/3),n.face.materialIndex=g.materialIndex,e.push(n))}}else{const p=Math.max(0,d.start),m=Math.min(o.count,d.start+d.count);for(let g=p,f=m;g<f;g+=3){const y=o.getX(g),S=o.getX(g+1),v=o.getX(g+2);n=Kr(this,a,t,i,A,h,c,y,S,v),n&&(n.faceIndex=Math.floor(g/3),e.push(n))}}else if(l!==void 0)if(Array.isArray(a))for(let p=0,m=u.length;p<m;p++){const g=u[p],f=a[g.materialIndex],y=Math.max(g.start,d.start),S=Math.min(l.count,Math.min(g.start+g.count,d.start+d.count));for(let v=y,w=S;v<w;v+=3){const T=v,R=v+1,P=v+2;n=Kr(this,f,t,i,A,h,c,T,R,P),n&&(n.faceIndex=Math.floor(v/3),n.face.materialIndex=g.materialIndex,e.push(n))}}else{const p=Math.max(0,d.start),m=Math.min(l.count,d.start+d.count);for(let g=p,f=m;g<f;g+=3){const y=g,S=g+1,v=g+2;n=Kr(this,a,t,i,A,h,c,y,S,v),n&&(n.faceIndex=Math.floor(g/3),e.push(n))}}}}function lf(r,t,e,i,n,s,a,o){let l;if(t.side===Fe?l=i.intersectTriangle(a,s,n,!0,o):l=i.intersectTriangle(n,s,a,t.side===Ki,o),l===null)return null;qr.copy(o),qr.applyMatrix4(r.matrixWorld);const A=e.ray.origin.distanceTo(qr);return A<e.near||A>e.far?null:{distance:A,point:qr.clone(),object:r}}function Kr(r,t,e,i,n,s,a,o,l,A){r.getVertexPosition(o,Zr),r.getVertexPosition(l,Jr),r.getVertexPosition(A,jr);const h=lf(r,t,e,i,Zr,Jr,jr,lh);if(h){const c=new B;di.getBarycoord(lh,Zr,Jr,jr,c),n&&(h.uv=di.getInterpolatedAttribute(n,o,l,A,c,new Zt)),s&&(h.uv1=di.getInterpolatedAttribute(s,o,l,A,c,new Zt)),a&&(h.normal=di.getInterpolatedAttribute(a,o,l,A,c,new B),h.normal.dot(i.direction)>0&&h.normal.multiplyScalar(-1));const u={a:o,b:l,c:A,normal:new B,materialIndex:0};di.getNormal(Zr,Jr,jr,u.normal),h.face=u,h.barycoord=c}return h}class Cs extends wn{constructor(t=1,e=1,i=1,n=1,s=1,a=1){super(),this.type="BoxGeometry",this.parameters={width:t,height:e,depth:i,widthSegments:n,heightSegments:s,depthSegments:a};const o=this;n=Math.floor(n),s=Math.floor(s),a=Math.floor(a);const l=[],A=[],h=[],c=[];let u=0,d=0;p("z","y","x",-1,-1,i,e,t,a,s,0),p("z","y","x",1,-1,i,e,-t,a,s,1),p("x","z","y",1,1,t,i,e,n,a,2),p("x","z","y",1,-1,t,i,-e,n,a,3),p("x","y","z",1,-1,t,e,i,n,s,4),p("x","y","z",-1,-1,t,e,-i,n,s,5),this.setIndex(l),this.setAttribute("position",new Tn(A,3)),this.setAttribute("normal",new Tn(h,3)),this.setAttribute("uv",new Tn(c,2));function p(m,g,f,y,S,v,w,T,R,P,E){const x=v/R,b=w/P,z=v/2,F=w/2,U=T/2,W=R+1,Y=P+1;let $=0,H=0;const rt=new B;for(let lt=0;lt<Y;lt++){const mt=lt*b-F;for(let Ot=0;Ot<W;Ot++){const se=Ot*x-z;rt[m]=se*y,rt[g]=mt*S,rt[f]=U,A.push(rt.x,rt.y,rt.z),rt[m]=0,rt[g]=0,rt[f]=T>0?1:-1,h.push(rt.x,rt.y,rt.z),c.push(Ot/R),c.push(1-lt/P),$+=1}}for(let lt=0;lt<P;lt++)for(let mt=0;mt<R;mt++){const Ot=u+mt+W*lt,se=u+mt+W*(lt+1),$t=u+(mt+1)+W*(lt+1),J=u+(mt+1)+W*lt;l.push(Ot,se,J),l.push(se,$t,J),H+=6}o.addGroup(d,H,E),d+=H,u+=$}}copy(t){return super.copy(t),this.parameters=Object.assign({},t.parameters),this}static fromJSON(t){return new Cs(t.width,t.height,t.depth,t.widthSegments,t.heightSegments,t.depthSegments)}}function vs(r){const t={};for(const e in r){t[e]={};for(const i in r[e]){const n=r[e][i];n&&(n.isColor||n.isMatrix3||n.isMatrix4||n.isVector2||n.isVector3||n.isVector4||n.isTexture||n.isQuaternion)?n.isRenderTargetTexture?(console.warn("UniformsUtils: Textures of render targets cannot be cloned via cloneUniforms() or mergeUniforms()."),t[e][i]=null):t[e][i]=n.clone():Array.isArray(n)?t[e][i]=n.slice():t[e][i]=n}}return t}function _e(r){const t={};for(let e=0;e<r.length;e++){const i=vs(r[e]);for(const n in i)t[n]=i[n]}return t}function hf(r){const t=[];for(let e=0;e<r.length;e++)t.push(r[e].clone());return t}function hh(r){const t=r.getRenderTarget();return t===null?r.outputColorSpace:t.isXRRenderTarget===!0?t.texture.colorSpace:Yt.workingColorSpace}const cf={clone:vs,merge:_e};var uf=`void main() {
|
|
125
125
|
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
|
|
126
|
-
}`,
|
|
126
|
+
}`,df=`void main() {
|
|
127
127
|
gl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );
|
|
128
|
-
}`;class
|
|
128
|
+
}`;class An extends $s{constructor(t){super(),this.isShaderMaterial=!0,this.type="ShaderMaterial",this.defines={},this.uniforms={},this.uniformsGroups=[],this.vertexShader=uf,this.fragmentShader=df,this.linewidth=1,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.clipping=!1,this.forceSinglePass=!0,this.extensions={clipCullDistance:!1,multiDraw:!1},this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv1:[0,0]},this.index0AttributeName=void 0,this.uniformsNeedUpdate=!1,this.glslVersion=null,t!==void 0&&this.setValues(t)}copy(t){return super.copy(t),this.fragmentShader=t.fragmentShader,this.vertexShader=t.vertexShader,this.uniforms=vs(t.uniforms),this.uniformsGroups=hf(t.uniformsGroups),this.defines=Object.assign({},t.defines),this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.fog=t.fog,this.lights=t.lights,this.clipping=t.clipping,this.extensions=Object.assign({},t.extensions),this.glslVersion=t.glslVersion,this}toJSON(t){const e=super.toJSON(t);e.glslVersion=this.glslVersion,e.uniforms={};for(const n in this.uniforms){const a=this.uniforms[n].value;a&&a.isTexture?e.uniforms[n]={type:"t",value:a.toJSON(t).uuid}:a&&a.isColor?e.uniforms[n]={type:"c",value:a.getHex()}:a&&a.isVector2?e.uniforms[n]={type:"v2",value:a.toArray()}:a&&a.isVector3?e.uniforms[n]={type:"v3",value:a.toArray()}:a&&a.isVector4?e.uniforms[n]={type:"v4",value:a.toArray()}:a&&a.isMatrix3?e.uniforms[n]={type:"m3",value:a.toArray()}:a&&a.isMatrix4?e.uniforms[n]={type:"m4",value:a.toArray()}:e.uniforms[n]={value:a}}Object.keys(this.defines).length>0&&(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader,e.lights=this.lights,e.clipping=this.clipping;const i={};for(const n in this.extensions)this.extensions[n]===!0&&(i[n]=!0);return Object.keys(i).length>0&&(e.extensions=i),e}}class ch extends ve{constructor(){super(),this.isCamera=!0,this.type="Camera",this.matrixWorldInverse=new ue,this.projectionMatrix=new ue,this.projectionMatrixInverse=new ue,this.coordinateSystem=Ci,this._reversedDepth=!1}get reversedDepth(){return this._reversedDepth}copy(t,e){return super.copy(t,e),this.matrixWorldInverse.copy(t.matrixWorldInverse),this.projectionMatrix.copy(t.projectionMatrix),this.projectionMatrixInverse.copy(t.projectionMatrixInverse),this.coordinateSystem=t.coordinateSystem,this}getWorldDirection(t){return super.getWorldDirection(t).negate()}updateMatrixWorld(t){super.updateMatrixWorld(t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(t,e){super.updateWorldMatrix(t,e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return new this.constructor().copy(this)}}const ln=new B,uh=new Zt,dh=new Zt;class Ue extends ch{constructor(t=50,e=1,i=.1,n=2e3){super(),this.isPerspectiveCamera=!0,this.type="PerspectiveCamera",this.fov=t,this.zoom=1,this.near=i,this.far=n,this.focus=10,this.aspect=e,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.fov=t.fov,this.zoom=t.zoom,this.near=t.near,this.far=t.far,this.focus=t.focus,this.aspect=t.aspect,this.view=t.view===null?null:Object.assign({},t.view),this.filmGauge=t.filmGauge,this.filmOffset=t.filmOffset,this}setFocalLength(t){const e=.5*this.getFilmHeight()/t;this.fov=Fr*2*Math.atan(e),this.updateProjectionMatrix()}getFocalLength(){const t=Math.tan(Lo*.5*this.fov);return .5*this.getFilmHeight()/t}getEffectiveFOV(){return Fr*2*Math.atan(Math.tan(Lo*.5*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}getViewBounds(t,e,i){ln.set(-1,-1,.5).applyMatrix4(this.projectionMatrixInverse),e.set(ln.x,ln.y).multiplyScalar(-t/ln.z),ln.set(1,1,.5).applyMatrix4(this.projectionMatrixInverse),i.set(ln.x,ln.y).multiplyScalar(-t/ln.z)}getViewSize(t,e){return this.getViewBounds(t,uh,dh),e.subVectors(dh,uh)}setViewOffset(t,e,i,n,s,a){this.aspect=t/e,this.view===null&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=i,this.view.offsetY=n,this.view.width=s,this.view.height=a,this.updateProjectionMatrix()}clearViewOffset(){this.view!==null&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const t=this.near;let e=t*Math.tan(Lo*.5*this.fov)/this.zoom,i=2*e,n=this.aspect*i,s=-.5*n;const a=this.view;if(this.view!==null&&this.view.enabled){const l=a.fullWidth,A=a.fullHeight;s+=a.offsetX*n/l,e-=a.offsetY*i/A,n*=a.width/l,i*=a.height/A}const o=this.filmOffset;o!==0&&(s+=t*o/this.getFilmWidth()),this.projectionMatrix.makePerspective(s,s+n,e,e-i,t,this.far,this.coordinateSystem,this.reversedDepth),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){const e=super.toJSON(t);return e.object.fov=this.fov,e.object.zoom=this.zoom,e.object.near=this.near,e.object.far=this.far,e.object.focus=this.focus,e.object.aspect=this.aspect,this.view!==null&&(e.object.view=Object.assign({},this.view)),e.object.filmGauge=this.filmGauge,e.object.filmOffset=this.filmOffset,e}}const xs=-90,Es=1;class ff extends ve{constructor(t,e,i){super(),this.type="CubeCamera",this.renderTarget=i,this.coordinateSystem=null,this.activeMipmapLevel=0;const n=new Ue(xs,Es,t,e);n.layers=this.layers,this.add(n);const s=new Ue(xs,Es,t,e);s.layers=this.layers,this.add(s);const a=new Ue(xs,Es,t,e);a.layers=this.layers,this.add(a);const o=new Ue(xs,Es,t,e);o.layers=this.layers,this.add(o);const l=new Ue(xs,Es,t,e);l.layers=this.layers,this.add(l);const A=new Ue(xs,Es,t,e);A.layers=this.layers,this.add(A)}updateCoordinateSystem(){const t=this.coordinateSystem,e=this.children.concat(),[i,n,s,a,o,l]=e;for(const A of e)this.remove(A);if(t===Ci)i.up.set(0,1,0),i.lookAt(1,0,0),n.up.set(0,1,0),n.lookAt(-1,0,0),s.up.set(0,0,-1),s.lookAt(0,1,0),a.up.set(0,0,1),a.lookAt(0,-1,0),o.up.set(0,1,0),o.lookAt(0,0,1),l.up.set(0,1,0),l.lookAt(0,0,-1);else if(t===Br)i.up.set(0,-1,0),i.lookAt(-1,0,0),n.up.set(0,-1,0),n.lookAt(1,0,0),s.up.set(0,0,1),s.lookAt(0,1,0),a.up.set(0,0,-1),a.lookAt(0,-1,0),o.up.set(0,-1,0),o.lookAt(0,0,1),l.up.set(0,-1,0),l.lookAt(0,0,-1);else throw new Error("THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: "+t);for(const A of e)this.add(A),A.updateMatrixWorld()}update(t,e){this.parent===null&&this.updateMatrixWorld();const{renderTarget:i,activeMipmapLevel:n}=this;this.coordinateSystem!==t.coordinateSystem&&(this.coordinateSystem=t.coordinateSystem,this.updateCoordinateSystem());const[s,a,o,l,A,h]=this.children,c=t.getRenderTarget(),u=t.getActiveCubeFace(),d=t.getActiveMipmapLevel(),p=t.xr.enabled;t.xr.enabled=!1;const m=i.texture.generateMipmaps;i.texture.generateMipmaps=!1,t.setRenderTarget(i,0,n),t.render(e,s),t.setRenderTarget(i,1,n),t.render(e,a),t.setRenderTarget(i,2,n),t.render(e,o),t.setRenderTarget(i,3,n),t.render(e,l),t.setRenderTarget(i,4,n),t.render(e,A),i.texture.generateMipmaps=m,t.setRenderTarget(i,5,n),t.render(e,h),t.setRenderTarget(c,u,d),t.xr.enabled=p,i.texture.needsPMREMUpdate=!0}}class fh extends Te{constructor(t=[],e=es,i,n,s,a,o,l,A,h){super(t,e,i,n,s,a,o,l,A,h),this.isCubeTexture=!0,this.flipY=!1}get images(){return this.image}set images(t){this.image=t}}class gf extends Mn{constructor(t=1,e={}){super(t,t,e),this.isWebGLCubeRenderTarget=!0;const i={width:t,height:t,depth:1},n=[i,i,i,i,i,i];this.texture=new fh(n),this._setTextureOptions(e),this.texture.isRenderTargetTexture=!0}fromEquirectangularTexture(t,e){this.texture.type=e.type,this.texture.colorSpace=e.colorSpace,this.texture.generateMipmaps=e.generateMipmaps,this.texture.minFilter=e.minFilter,this.texture.magFilter=e.magFilter;const i={uniforms:{tEquirect:{value:null}},vertexShader:`
|
|
129
129
|
|
|
130
130
|
varying vec3 vWorldDirection;
|
|
131
131
|
|
|
@@ -160,9 +160,9 @@ void main() {
|
|
|
160
160
|
gl_FragColor = texture2D( tEquirect, sampleUV );
|
|
161
161
|
|
|
162
162
|
}
|
|
163
|
-
`},n=new Ms(5,5,5),r=new cn({name:"CubemapFromEquirect",uniforms:bs(i.uniforms),vertexShader:i.vertexShader,fragmentShader:i.fragmentShader,side:Ue,blending:nn});r.uniforms.tEquirect.value=e;const a=new Ci(n,r),o=e.minFilter;return e.minFilter===_n&&(e.minFilter=vi),new bf(1,10,this).update(t,a),e.minFilter=o,a.geometry.dispose(),a.material.dispose(),this}clear(t,e=!0,i=!0,n=!0){const r=t.getRenderTarget();for(let a=0;a<6;a++)t.setRenderTarget(this,a),t.clear(e,i,n);t.setRenderTarget(r)}}class ar extends Ee{constructor(){super(),this.isGroup=!0,this.type="Group"}}const Tf={type:"move"};class Al{constructor(){this._targetRay=null,this._grip=null,this._hand=null}getHandSpace(){return this._hand===null&&(this._hand=new ar,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand}getTargetRaySpace(){return this._targetRay===null&&(this._targetRay=new ar,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new O,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new O),this._targetRay}getGripSpace(){return this._grip===null&&(this._grip=new ar,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new O,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new O),this._grip}dispatchEvent(t){return this._targetRay!==null&&this._targetRay.dispatchEvent(t),this._grip!==null&&this._grip.dispatchEvent(t),this._hand!==null&&this._hand.dispatchEvent(t),this}connect(t){if(t&&t.hand){const e=this._hand;if(e)for(const i of t.hand.values())this._getHandJoint(e,i)}return this.dispatchEvent({type:"connected",data:t}),this}disconnect(t){return this.dispatchEvent({type:"disconnected",data:t}),this._targetRay!==null&&(this._targetRay.visible=!1),this._grip!==null&&(this._grip.visible=!1),this._hand!==null&&(this._hand.visible=!1),this}update(t,e,i){let n=null,r=null,a=null;const o=this._targetRay,h=this._grip,l=this._hand;if(t&&e.session.visibilityState!=="visible-blurred"){if(l&&t.hand){a=!0;for(const m of t.hand.values()){const g=e.getJointPose(m,i),f=this._getHandJoint(l,m);g!==null&&(f.matrix.fromArray(g.transform.matrix),f.matrix.decompose(f.position,f.rotation,f.scale),f.matrixWorldNeedsUpdate=!0,f.jointRadius=g.radius),f.visible=g!==null}const A=l.joints["index-finger-tip"],c=l.joints["thumb-tip"],u=A.position.distanceTo(c.position),d=.02,p=.005;l.inputState.pinching&&u>d+p?(l.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:t.handedness,target:this})):!l.inputState.pinching&&u<=d-p&&(l.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:t.handedness,target:this}))}else h!==null&&t.gripSpace&&(r=e.getPose(t.gripSpace,i),r!==null&&(h.matrix.fromArray(r.transform.matrix),h.matrix.decompose(h.position,h.rotation,h.scale),h.matrixWorldNeedsUpdate=!0,r.linearVelocity?(h.hasLinearVelocity=!0,h.linearVelocity.copy(r.linearVelocity)):h.hasLinearVelocity=!1,r.angularVelocity?(h.hasAngularVelocity=!0,h.angularVelocity.copy(r.angularVelocity)):h.hasAngularVelocity=!1));o!==null&&(n=e.getPose(t.targetRaySpace,i),n===null&&r!==null&&(n=r),n!==null&&(o.matrix.fromArray(n.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),o.matrixWorldNeedsUpdate=!0,n.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(n.linearVelocity)):o.hasLinearVelocity=!1,n.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(n.angularVelocity)):o.hasAngularVelocity=!1,this.dispatchEvent(Tf)))}return o!==null&&(o.visible=n!==null),h!==null&&(h.visible=r!==null),l!==null&&(l.visible=a!==null),this}_getHandJoint(t,e){if(t.joints[e.jointName]===void 0){const i=new ar;i.matrixAutoUpdate=!1,i.visible=!1,t.joints[e.jointName]=i,t.add(i)}return t.joints[e.jointName]}}class cl{constructor(t,e=1,i=1e3){this.isFog=!0,this.name="",this.color=new Wt(t),this.near=e,this.far=i}clone(){return new cl(this.color,this.near,this.far)}toJSON(){return{type:"Fog",name:this.name,color:this.color.getHex(),near:this.near,far:this.far}}}class EA extends Ee{constructor(){super(),this.isScene=!0,this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.backgroundBlurriness=0,this.backgroundIntensity=1,this.backgroundRotation=new Si,this.environmentIntensity=1,this.environmentRotation=new Si,this.overrideMaterial=null,typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(t,e){return super.copy(t,e),t.background!==null&&(this.background=t.background.clone()),t.environment!==null&&(this.environment=t.environment.clone()),t.fog!==null&&(this.fog=t.fog.clone()),this.backgroundBlurriness=t.backgroundBlurriness,this.backgroundIntensity=t.backgroundIntensity,this.backgroundRotation.copy(t.backgroundRotation),this.environmentIntensity=t.environmentIntensity,this.environmentRotation.copy(t.environmentRotation),t.overrideMaterial!==null&&(this.overrideMaterial=t.overrideMaterial.clone()),this.matrixAutoUpdate=t.matrixAutoUpdate,this}toJSON(t){const e=super.toJSON(t);return this.fog!==null&&(e.object.fog=this.fog.toJSON()),this.backgroundBlurriness>0&&(e.object.backgroundBlurriness=this.backgroundBlurriness),this.backgroundIntensity!==1&&(e.object.backgroundIntensity=this.backgroundIntensity),e.object.backgroundRotation=this.backgroundRotation.toArray(),this.environmentIntensity!==1&&(e.object.environmentIntensity=this.environmentIntensity),e.object.environmentRotation=this.environmentRotation.toArray(),e}}const ul=new O,wf=new O,Rf=new Ot;class dn{constructor(t=new O(1,0,0),e=0){this.isPlane=!0,this.normal=t,this.constant=e}set(t,e){return this.normal.copy(t),this.constant=e,this}setComponents(t,e,i,n){return this.normal.set(t,e,i),this.constant=n,this}setFromNormalAndCoplanarPoint(t,e){return this.normal.copy(t),this.constant=-e.dot(this.normal),this}setFromCoplanarPoints(t,e,i){const n=ul.subVectors(i,e).cross(wf.subVectors(t,e)).normalize();return this.setFromNormalAndCoplanarPoint(n,t),this}copy(t){return this.normal.copy(t.normal),this.constant=t.constant,this}normalize(){const t=1/this.normal.length();return this.normal.multiplyScalar(t),this.constant*=t,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(t){return this.normal.dot(t)+this.constant}distanceToSphere(t){return this.distanceToPoint(t.center)-t.radius}projectPoint(t,e){return e.copy(t).addScaledVector(this.normal,-this.distanceToPoint(t))}intersectLine(t,e){const i=t.delta(ul),n=this.normal.dot(i);if(n===0)return this.distanceToPoint(t.start)===0?e.copy(t.start):null;const r=-(t.start.dot(this.normal)+this.constant)/n;return r<0||r>1?null:e.copy(t.start).addScaledVector(i,r)}intersectsLine(t){const e=this.distanceToPoint(t.start),i=this.distanceToPoint(t.end);return e<0&&i>0||i<0&&e>0}intersectsBox(t){return t.intersectsPlane(this)}intersectsSphere(t){return t.intersectsPlane(this)}coplanarPoint(t){return t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){const i=e||Rf.getNormalMatrix(t),n=this.coplanarPoint(ul).applyMatrix4(t),r=this.normal.applyMatrix3(i).normalize();return this.constant=-n.dot(r),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}clone(){return new this.constructor().copy(this)}}const Bn=new jo,Pf=new Nt(.5,.5),sa=new O;class dl{constructor(t=new dn,e=new dn,i=new dn,n=new dn,r=new dn,a=new dn){this.planes=[t,e,i,n,r,a]}set(t,e,i,n,r,a){const o=this.planes;return o[0].copy(t),o[1].copy(e),o[2].copy(i),o[3].copy(n),o[4].copy(r),o[5].copy(a),this}copy(t){const e=this.planes;for(let i=0;i<6;i++)e[i].copy(t.planes[i]);return this}setFromProjectionMatrix(t,e=Ei,i=!1){const n=this.planes,r=t.elements,a=r[0],o=r[1],h=r[2],l=r[3],A=r[4],c=r[5],u=r[6],d=r[7],p=r[8],m=r[9],g=r[10],f=r[11],M=r[12],S=r[13],v=r[14],T=r[15];if(n[0].setComponents(l-a,d-A,f-p,T-M).normalize(),n[1].setComponents(l+a,d+A,f+p,T+M).normalize(),n[2].setComponents(l+o,d+c,f+m,T+S).normalize(),n[3].setComponents(l-o,d-c,f-m,T-S).normalize(),i)n[4].setComponents(h,u,g,v).normalize(),n[5].setComponents(l-h,d-u,f-g,T-v).normalize();else if(n[4].setComponents(l-h,d-u,f-g,T-v).normalize(),e===Ei)n[5].setComponents(l+h,d+u,f+g,T+v).normalize();else if(e===zr)n[5].setComponents(h,u,g,v).normalize();else throw new Error("THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: "+e);return this}intersectsObject(t){if(t.boundingSphere!==void 0)t.boundingSphere===null&&t.computeBoundingSphere(),Bn.copy(t.boundingSphere).applyMatrix4(t.matrixWorld);else{const e=t.geometry;e.boundingSphere===null&&e.computeBoundingSphere(),Bn.copy(e.boundingSphere).applyMatrix4(t.matrixWorld)}return this.intersectsSphere(Bn)}intersectsSprite(t){Bn.center.set(0,0,0);const e=Pf.distanceTo(t.center);return Bn.radius=.7071067811865476+e,Bn.applyMatrix4(t.matrixWorld),this.intersectsSphere(Bn)}intersectsSphere(t){const e=this.planes,i=t.center,n=-t.radius;for(let r=0;r<6;r++)if(e[r].distanceToPoint(i)<n)return!1;return!0}intersectsBox(t){const e=this.planes;for(let i=0;i<6;i++){const n=e[i];if(sa.x=n.normal.x>0?t.max.x:t.min.x,sa.y=n.normal.y>0?t.max.y:t.min.y,sa.z=n.normal.z>0?t.max.z:t.min.z,n.distanceToPoint(sa)<0)return!1}return!0}containsPoint(t){const e=this.planes;for(let i=0;i<6;i++)if(e[i].distanceToPoint(t)<0)return!1;return!0}clone(){return new this.constructor().copy(this)}}class SA extends we{constructor(t,e,i,n,r,a,o,h,l){super(t,e,i,n,r,a,o,h,l),this.isCanvasTexture=!0,this.needsUpdate=!0}}class yA extends we{constructor(t,e,i=Tn,n,r,a,o=ui,h=ui,l,A=Qs,c=1){if(A!==Qs&&A!==qs)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");const u={width:t,height:e,depth:c};super(u,n,r,a,o,h,A,i,l),this.isDepthTexture=!0,this.flipY=!1,this.generateMipmaps=!1,this.compareFunction=null}copy(t){return super.copy(t),this.source=new Vo(Object.assign({},t.image)),this.compareFunction=t.compareFunction,this}toJSON(t){const e=super.toJSON(t);return this.compareFunction!==null&&(e.compareFunction=this.compareFunction),e}}class or extends On{constructor(t=1,e=1,i=1,n=1){super(),this.type="PlaneGeometry",this.parameters={width:t,height:e,widthSegments:i,heightSegments:n};const r=t/2,a=e/2,o=Math.floor(i),h=Math.floor(n),l=o+1,A=h+1,c=t/o,u=e/h,d=[],p=[],m=[],g=[];for(let f=0;f<A;f++){const M=f*u-a;for(let S=0;S<l;S++){const v=S*c-r;p.push(v,-M,0),m.push(0,0,1),g.push(S/o),g.push(1-f/h)}}for(let f=0;f<h;f++)for(let M=0;M<o;M++){const S=M+l*f,v=M+l*(f+1),T=M+1+l*(f+1),_=M+1+l*f;d.push(S,v,_),d.push(v,T,_)}this.setIndex(d),this.setAttribute("position",new Nn(p,3)),this.setAttribute("normal",new Nn(m,3)),this.setAttribute("uv",new Nn(g,2))}copy(t){return super.copy(t),this.parameters=Object.assign({},t.parameters),this}static fromJSON(t){return new or(t.width,t.height,t.widthSegments,t.heightSegments)}}class Df extends sr{constructor(t){super(),this.isMeshStandardMaterial=!0,this.type="MeshStandardMaterial",this.defines={STANDARD:""},this.color=new Wt(16777215),this.roughness=1,this.metalness=0,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Wt(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=Wh,this.normalScale=new Nt(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.roughnessMap=null,this.metalnessMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new Si,this.envMapIntensity=1,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.defines={STANDARD:""},this.color.copy(t.color),this.roughness=t.roughness,this.metalness=t.metalness,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.roughnessMap=t.roughnessMap,this.metalnessMap=t.metalnessMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapRotation.copy(t.envMapRotation),this.envMapIntensity=t.envMapIntensity,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.flatShading=t.flatShading,this.fog=t.fog,this}}class Lf extends sr{constructor(t){super(),this.isMeshDepthMaterial=!0,this.type="MeshDepthMaterial",this.depthPacking=Wd,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.setValues(t)}copy(t){return super.copy(t),this.depthPacking=t.depthPacking,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this}}class Nf extends sr{constructor(t){super(),this.isMeshDistanceMaterial=!0,this.type="MeshDistanceMaterial",this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.setValues(t)}copy(t){return super.copy(t),this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this}}const fl={enabled:!1,files:{},add:function(s,t){this.enabled!==!1&&(this.files[s]=t)},get:function(s){if(this.enabled!==!1)return this.files[s]},remove:function(s){delete this.files[s]},clear:function(){this.files={}}};class Of{constructor(t,e,i){const n=this;let r=!1,a=0,o=0,h;const l=[];this.onStart=void 0,this.onLoad=t,this.onProgress=e,this.onError=i,this.abortController=new AbortController,this.itemStart=function(A){o++,r===!1&&n.onStart!==void 0&&n.onStart(A,a,o),r=!0},this.itemEnd=function(A){a++,n.onProgress!==void 0&&n.onProgress(A,a,o),a===o&&(r=!1,n.onLoad!==void 0&&n.onLoad())},this.itemError=function(A){n.onError!==void 0&&n.onError(A)},this.resolveURL=function(A){return h?h(A):A},this.setURLModifier=function(A){return h=A,this},this.addHandler=function(A,c){return l.push(A,c),this},this.removeHandler=function(A){const c=l.indexOf(A);return c!==-1&&l.splice(c,2),this},this.getHandler=function(A){for(let c=0,u=l.length;c<u;c+=2){const d=l[c],p=l[c+1];if(d.global&&(d.lastIndex=0),d.test(A))return p}return null},this.abort=function(){return this.abortController.abort(),this.abortController=new AbortController,this}}}const Ff=new Of;class gl{constructor(t){this.manager=t!==void 0?t:Ff,this.crossOrigin="anonymous",this.withCredentials=!1,this.path="",this.resourcePath="",this.requestHeader={}}load(){}loadAsync(t,e){const i=this;return new Promise(function(n,r){i.load(t,n,e,r)})}parse(){}setCrossOrigin(t){return this.crossOrigin=t,this}setWithCredentials(t){return this.withCredentials=t,this}setPath(t){return this.path=t,this}setResourcePath(t){return this.resourcePath=t,this}setRequestHeader(t){return this.requestHeader=t,this}abort(){return this}}gl.DEFAULT_MATERIAL_NAME="__DEFAULT";const ws=new WeakMap;class Bf extends gl{constructor(t){super(t)}load(t,e,i,n){this.path!==void 0&&(t=this.path+t),t=this.manager.resolveURL(t);const r=this,a=fl.get(`image:${t}`);if(a!==void 0){if(a.complete===!0)r.manager.itemStart(t),setTimeout(function(){e&&e(a),r.manager.itemEnd(t)},0);else{let c=ws.get(a);c===void 0&&(c=[],ws.set(a,c)),c.push({onLoad:e,onError:n})}return a}const o=tr("img");function h(){A(),e&&e(this);const c=ws.get(this)||[];for(let u=0;u<c.length;u++){const d=c[u];d.onLoad&&d.onLoad(this)}ws.delete(this),r.manager.itemEnd(t)}function l(c){A(),n&&n(c),fl.remove(`image:${t}`);const u=ws.get(this)||[];for(let d=0;d<u.length;d++){const p=u[d];p.onError&&p.onError(c)}ws.delete(this),r.manager.itemError(t),r.manager.itemEnd(t)}function A(){o.removeEventListener("load",h,!1),o.removeEventListener("error",l,!1)}return o.addEventListener("load",h,!1),o.addEventListener("error",l,!1),t.slice(0,5)!=="data:"&&this.crossOrigin!==void 0&&(o.crossOrigin=this.crossOrigin),fl.add(`image:${t}`,o),r.manager.itemStart(t),o.src=t,o}}class MA extends gl{constructor(t){super(t)}load(t,e,i,n){const r=new we,a=new Bf(this.manager);return a.setCrossOrigin(this.crossOrigin),a.setPath(this.path),a.load(t,function(o){r.image=o,r.needsUpdate=!0,e!==void 0&&e(r)},i,n),r}}class pl extends Ee{constructor(t,e=1){super(),this.isLight=!0,this.type="Light",this.color=new Wt(t),this.intensity=e}dispose(){}copy(t,e){return super.copy(t,e),this.color.copy(t.color),this.intensity=t.intensity,this}toJSON(t){const e=super.toJSON(t);return e.object.color=this.color.getHex(),e.object.intensity=this.intensity,this.groundColor!==void 0&&(e.object.groundColor=this.groundColor.getHex()),this.distance!==void 0&&(e.object.distance=this.distance),this.angle!==void 0&&(e.object.angle=this.angle),this.decay!==void 0&&(e.object.decay=this.decay),this.penumbra!==void 0&&(e.object.penumbra=this.penumbra),this.shadow!==void 0&&(e.object.shadow=this.shadow.toJSON()),this.target!==void 0&&(e.object.target=this.target.uuid),e}}const ml=new de,bA=new O,_A=new O;class TA{constructor(t){this.camera=t,this.intensity=1,this.bias=0,this.normalBias=0,this.radius=1,this.blurSamples=8,this.mapSize=new Nt(512,512),this.mapType=xi,this.map=null,this.mapPass=null,this.matrix=new de,this.autoUpdate=!0,this.needsUpdate=!1,this._frustum=new dl,this._frameExtents=new Nt(1,1),this._viewportCount=1,this._viewports=[new ce(0,0,1,1)]}getViewportCount(){return this._viewportCount}getFrustum(){return this._frustum}updateMatrices(t){const e=this.camera,i=this.matrix;bA.setFromMatrixPosition(t.matrixWorld),e.position.copy(bA),_A.setFromMatrixPosition(t.target.matrixWorld),e.lookAt(_A),e.updateMatrixWorld(),ml.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse),this._frustum.setFromProjectionMatrix(ml,e.coordinateSystem,e.reversedDepth),e.reversedDepth?i.set(.5,0,0,.5,0,.5,0,.5,0,0,1,0,0,0,0,1):i.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),i.multiply(ml)}getViewport(t){return this._viewports[t]}getFrameExtents(){return this._frameExtents}dispose(){this.map&&this.map.dispose(),this.mapPass&&this.mapPass.dispose()}copy(t){return this.camera=t.camera.clone(),this.intensity=t.intensity,this.bias=t.bias,this.radius=t.radius,this.autoUpdate=t.autoUpdate,this.needsUpdate=t.needsUpdate,this.normalBias=t.normalBias,this.blurSamples=t.blurSamples,this.mapSize.copy(t.mapSize),this}clone(){return new this.constructor().copy(this)}toJSON(){const t={};return this.intensity!==1&&(t.intensity=this.intensity),this.bias!==0&&(t.bias=this.bias),this.normalBias!==0&&(t.normalBias=this.normalBias),this.radius!==1&&(t.radius=this.radius),(this.mapSize.x!==512||this.mapSize.y!==512)&&(t.mapSize=this.mapSize.toArray()),t.camera=this.camera.toJSON(!1).object,delete t.camera.matrix,t}}class Uf extends TA{constructor(){super(new ke(50,1,.5,500)),this.isSpotLightShadow=!0,this.focus=1,this.aspect=1}updateMatrices(t){const e=this.camera,i=Gr*2*t.angle*this.focus,n=this.mapSize.width/this.mapSize.height*this.aspect,r=t.distance||e.far;(i!==e.fov||n!==e.aspect||r!==e.far)&&(e.fov=i,e.aspect=n,e.far=r,e.updateProjectionMatrix()),super.updateMatrices(t)}copy(t){return super.copy(t),this.focus=t.focus,this}}class zf extends pl{constructor(t,e,i=0,n=Math.PI/3,r=0,a=2){super(t,e),this.isSpotLight=!0,this.type="SpotLight",this.position.copy(Ee.DEFAULT_UP),this.updateMatrix(),this.target=new Ee,this.distance=i,this.angle=n,this.penumbra=r,this.decay=a,this.map=null,this.shadow=new Uf}get power(){return this.intensity*Math.PI}set power(t){this.intensity=t/Math.PI}dispose(){this.shadow.dispose()}copy(t,e){return super.copy(t,e),this.distance=t.distance,this.angle=t.angle,this.penumbra=t.penumbra,this.decay=t.decay,this.target=t.target.clone(),this.shadow=t.shadow.clone(),this}}class wA extends CA{constructor(t=-1,e=1,i=1,n=-1,r=.1,a=2e3){super(),this.isOrthographicCamera=!0,this.type="OrthographicCamera",this.zoom=1,this.view=null,this.left=t,this.right=e,this.top=i,this.bottom=n,this.near=r,this.far=a,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.left=t.left,this.right=t.right,this.top=t.top,this.bottom=t.bottom,this.near=t.near,this.far=t.far,this.zoom=t.zoom,this.view=t.view===null?null:Object.assign({},t.view),this}setViewOffset(t,e,i,n,r,a){this.view===null&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=i,this.view.offsetY=n,this.view.width=r,this.view.height=a,this.updateProjectionMatrix()}clearViewOffset(){this.view!==null&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const t=(this.right-this.left)/(2*this.zoom),e=(this.top-this.bottom)/(2*this.zoom),i=(this.right+this.left)/2,n=(this.top+this.bottom)/2;let r=i-t,a=i+t,o=n+e,h=n-e;if(this.view!==null&&this.view.enabled){const l=(this.right-this.left)/this.view.fullWidth/this.zoom,A=(this.top-this.bottom)/this.view.fullHeight/this.zoom;r+=l*this.view.offsetX,a=r+l*this.view.width,o-=A*this.view.offsetY,h=o-A*this.view.height}this.projectionMatrix.makeOrthographic(r,a,o,h,this.near,this.far,this.coordinateSystem,this.reversedDepth),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){const e=super.toJSON(t);return e.object.zoom=this.zoom,e.object.left=this.left,e.object.right=this.right,e.object.top=this.top,e.object.bottom=this.bottom,e.object.near=this.near,e.object.far=this.far,this.view!==null&&(e.object.view=Object.assign({},this.view)),e}}class kf extends TA{constructor(){super(new wA(-5,5,5,-5,.5,500)),this.isDirectionalLightShadow=!0}}class RA extends pl{constructor(t,e){super(t,e),this.isDirectionalLight=!0,this.type="DirectionalLight",this.position.copy(Ee.DEFAULT_UP),this.updateMatrix(),this.target=new Ee,this.shadow=new kf}dispose(){this.shadow.dispose()}copy(t){return super.copy(t),this.target=t.target.clone(),this.shadow=t.shadow.clone(),this}}class Gf extends pl{constructor(t,e){super(t,e),this.isAmbientLight=!0,this.type="AmbientLight"}}class Hf extends ke{constructor(t=[]){super(),this.isArrayCamera=!0,this.isMultiViewCamera=!1,this.cameras=t}}class PA{constructor(t=!0){this.autoStart=t,this.startTime=0,this.oldTime=0,this.elapsedTime=0,this.running=!1}start(){this.startTime=performance.now(),this.oldTime=this.startTime,this.elapsedTime=0,this.running=!0}stop(){this.getElapsedTime(),this.running=!1,this.autoStart=!1}getElapsedTime(){return this.getDelta(),this.elapsedTime}getDelta(){let t=0;if(this.autoStart&&!this.running)return this.start(),0;if(this.running){const e=performance.now();t=(e-this.oldTime)/1e3,this.oldTime=e,this.elapsedTime+=t}return t}}class DA{constructor(t=1,e=0,i=0){this.radius=t,this.phi=e,this.theta=i}set(t,e,i){return this.radius=t,this.phi=e,this.theta=i,this}copy(t){return this.radius=t.radius,this.phi=t.phi,this.theta=t.theta,this}makeSafe(){return this.phi=kt(this.phi,1e-6,Math.PI-1e-6),this}setFromVector3(t){return this.setFromCartesianCoords(t.x,t.y,t.z)}setFromCartesianCoords(t,e,i){return this.radius=Math.sqrt(t*t+e*e+i*i),this.radius===0?(this.theta=0,this.phi=0):(this.theta=Math.atan2(t,i),this.phi=Math.acos(kt(e/this.radius,-1,1))),this}clone(){return new this.constructor().copy(this)}}class Vf extends wn{constructor(t,e=null){super(),this.object=t,this.domElement=e,this.enabled=!0,this.state=-1,this.keys={},this.mouseButtons={LEFT:null,MIDDLE:null,RIGHT:null},this.touches={ONE:null,TWO:null}}connect(t){if(t===void 0){console.warn("THREE.Controls: connect() now requires an element.");return}this.domElement!==null&&this.disconnect(),this.domElement=t}disconnect(){}dispose(){}update(){}}function LA(s,t,e,i){const n=Wf(i);switch(e){case zh:return s*t;case Gh:return s*t/n.components*n.byteLength;case Ao:return s*t/n.components*n.byteLength;case Hh:return s*t*2/n.components*n.byteLength;case co:return s*t*2/n.components*n.byteLength;case kh:return s*t*3/n.components*n.byteLength;case di:return s*t*4/n.components*n.byteLength;case uo:return s*t*4/n.components*n.byteLength;case Lr:case Nr:return Math.floor((s+3)/4)*Math.floor((t+3)/4)*8;case Or:case Fr:return Math.floor((s+3)/4)*Math.floor((t+3)/4)*16;case go:case mo:return Math.max(s,16)*Math.max(t,8)/4;case fo:case po:return Math.max(s,8)*Math.max(t,8)/2;case Co:case Io:return Math.floor((s+3)/4)*Math.floor((t+3)/4)*8;case vo:return Math.floor((s+3)/4)*Math.floor((t+3)/4)*16;case xo:return Math.floor((s+3)/4)*Math.floor((t+3)/4)*16;case Eo:return Math.floor((s+4)/5)*Math.floor((t+3)/4)*16;case So:return Math.floor((s+4)/5)*Math.floor((t+4)/5)*16;case yo:return Math.floor((s+5)/6)*Math.floor((t+4)/5)*16;case Mo:return Math.floor((s+5)/6)*Math.floor((t+5)/6)*16;case bo:return Math.floor((s+7)/8)*Math.floor((t+4)/5)*16;case _o:return Math.floor((s+7)/8)*Math.floor((t+5)/6)*16;case To:return Math.floor((s+7)/8)*Math.floor((t+7)/8)*16;case wo:return Math.floor((s+9)/10)*Math.floor((t+4)/5)*16;case Ro:return Math.floor((s+9)/10)*Math.floor((t+5)/6)*16;case Po:return Math.floor((s+9)/10)*Math.floor((t+7)/8)*16;case Do:return Math.floor((s+9)/10)*Math.floor((t+9)/10)*16;case Lo:return Math.floor((s+11)/12)*Math.floor((t+9)/10)*16;case No:return Math.floor((s+11)/12)*Math.floor((t+11)/12)*16;case Br:case Oo:case Fo:return Math.ceil(s/4)*Math.ceil(t/4)*16;case Vh:case Bo:return Math.ceil(s/4)*Math.ceil(t/4)*8;case Uo:case zo:return Math.ceil(s/4)*Math.ceil(t/4)*16}throw new Error(`Unable to determine texture byte length for ${e} format.`)}function Wf(s){switch(s){case xi:case Fh:return{byteLength:1,components:1};case Zs:case Bh:case js:return{byteLength:2,components:1};case lo:case ho:return{byteLength:2,components:4};case Tn:case oo:case Bi:return{byteLength:4,components:1};case Uh:return{byteLength:4,components:3}}throw new Error(`Unknown texture type ${s}.`)}typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:Xa}})),typeof window<"u"&&(window.__THREE__?console.warn("WARNING: Multiple instances of Three.js being imported."):window.__THREE__=Xa);function NA(){let s=null,t=!1,e=null,i=null;function n(r,a){e(r,a),i=s.requestAnimationFrame(n)}return{start:function(){t!==!0&&e!==null&&(i=s.requestAnimationFrame(n),t=!0)},stop:function(){s.cancelAnimationFrame(i),t=!1},setAnimationLoop:function(r){e=r},setContext:function(r){s=r}}}function Yf(s){const t=new WeakMap;function e(o,h){const l=o.array,A=o.usage,c=l.byteLength,u=s.createBuffer();s.bindBuffer(h,u),s.bufferData(h,l,A),o.onUploadCallback();let d;if(l instanceof Float32Array)d=s.FLOAT;else if(typeof Float16Array<"u"&&l instanceof Float16Array)d=s.HALF_FLOAT;else if(l instanceof Uint16Array)o.isFloat16BufferAttribute?d=s.HALF_FLOAT:d=s.UNSIGNED_SHORT;else if(l instanceof Int16Array)d=s.SHORT;else if(l instanceof Uint32Array)d=s.UNSIGNED_INT;else if(l instanceof Int32Array)d=s.INT;else if(l instanceof Int8Array)d=s.BYTE;else if(l instanceof Uint8Array)d=s.UNSIGNED_BYTE;else if(l instanceof Uint8ClampedArray)d=s.UNSIGNED_BYTE;else throw new Error("THREE.WebGLAttributes: Unsupported buffer data format: "+l);return{buffer:u,type:d,bytesPerElement:l.BYTES_PER_ELEMENT,version:o.version,size:c}}function i(o,h,l){const A=h.array,c=h.updateRanges;if(s.bindBuffer(l,o),c.length===0)s.bufferSubData(l,0,A);else{c.sort((d,p)=>d.start-p.start);let u=0;for(let d=1;d<c.length;d++){const p=c[u],m=c[d];m.start<=p.start+p.count+1?p.count=Math.max(p.count,m.start+m.count-p.start):(++u,c[u]=m)}c.length=u+1;for(let d=0,p=c.length;d<p;d++){const m=c[d];s.bufferSubData(l,m.start*A.BYTES_PER_ELEMENT,A,m.start,m.count)}h.clearUpdateRanges()}h.onUploadCallback()}function n(o){return o.isInterleavedBufferAttribute&&(o=o.data),t.get(o)}function r(o){o.isInterleavedBufferAttribute&&(o=o.data);const h=t.get(o);h&&(s.deleteBuffer(h.buffer),t.delete(o))}function a(o,h){if(o.isInterleavedBufferAttribute&&(o=o.data),o.isGLBufferAttribute){const A=t.get(o);(!A||A.version<o.version)&&t.set(o,{buffer:o.buffer,type:o.type,bytesPerElement:o.elementSize,version:o.version});return}const l=t.get(o);if(l===void 0)t.set(o,e(o,h));else if(l.version<o.version){if(l.size!==o.array.byteLength)throw new Error("THREE.WebGLAttributes: The size of the buffer attribute's array buffer does not match the original size. Resizing buffer attributes is not supported.");i(l.buffer,o,h),l.version=o.version}}return{get:n,remove:r,update:a}}var Xf=`#ifdef USE_ALPHAHASH
|
|
163
|
+
`},n=new Cs(5,5,5),s=new An({name:"CubemapFromEquirect",uniforms:vs(i.uniforms),vertexShader:i.vertexShader,fragmentShader:i.fragmentShader,side:Fe,blending:$i});s.uniforms.tEquirect.value=e;const a=new fi(n,s),o=e.minFilter;return e.minFilter===En&&(e.minFilter=mi),new ff(1,10,this).update(t,a),e.minFilter=o,a.geometry.dispose(),a.material.dispose(),this}clear(t,e=!0,i=!0,n=!0){const s=t.getRenderTarget();for(let a=0;a<6;a++)t.setRenderTarget(this,a),t.clear(e,i,n);t.setRenderTarget(s)}}class er extends ve{constructor(){super(),this.isGroup=!0,this.type="Group"}}const pf={type:"move"};class sA{constructor(){this._targetRay=null,this._grip=null,this._hand=null}getHandSpace(){return this._hand===null&&(this._hand=new er,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand}getTargetRaySpace(){return this._targetRay===null&&(this._targetRay=new er,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new B,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new B),this._targetRay}getGripSpace(){return this._grip===null&&(this._grip=new er,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new B,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new B),this._grip}dispatchEvent(t){return this._targetRay!==null&&this._targetRay.dispatchEvent(t),this._grip!==null&&this._grip.dispatchEvent(t),this._hand!==null&&this._hand.dispatchEvent(t),this}connect(t){if(t&&t.hand){const e=this._hand;if(e)for(const i of t.hand.values())this._getHandJoint(e,i)}return this.dispatchEvent({type:"connected",data:t}),this}disconnect(t){return this.dispatchEvent({type:"disconnected",data:t}),this._targetRay!==null&&(this._targetRay.visible=!1),this._grip!==null&&(this._grip.visible=!1),this._hand!==null&&(this._hand.visible=!1),this}update(t,e,i){let n=null,s=null,a=null;const o=this._targetRay,l=this._grip,A=this._hand;if(t&&e.session.visibilityState!=="visible-blurred"){if(A&&t.hand){a=!0;for(const m of t.hand.values()){const g=e.getJointPose(m,i),f=this._getHandJoint(A,m);g!==null&&(f.matrix.fromArray(g.transform.matrix),f.matrix.decompose(f.position,f.rotation,f.scale),f.matrixWorldNeedsUpdate=!0,f.jointRadius=g.radius),f.visible=g!==null}const h=A.joints["index-finger-tip"],c=A.joints["thumb-tip"],u=h.position.distanceTo(c.position),d=.02,p=.005;A.inputState.pinching&&u>d+p?(A.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:t.handedness,target:this})):!A.inputState.pinching&&u<=d-p&&(A.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:t.handedness,target:this}))}else l!==null&&t.gripSpace&&(s=e.getPose(t.gripSpace,i),s!==null&&(l.matrix.fromArray(s.transform.matrix),l.matrix.decompose(l.position,l.rotation,l.scale),l.matrixWorldNeedsUpdate=!0,s.linearVelocity?(l.hasLinearVelocity=!0,l.linearVelocity.copy(s.linearVelocity)):l.hasLinearVelocity=!1,s.angularVelocity?(l.hasAngularVelocity=!0,l.angularVelocity.copy(s.angularVelocity)):l.hasAngularVelocity=!1));o!==null&&(n=e.getPose(t.targetRaySpace,i),n===null&&s!==null&&(n=s),n!==null&&(o.matrix.fromArray(n.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),o.matrixWorldNeedsUpdate=!0,n.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(n.linearVelocity)):o.hasLinearVelocity=!1,n.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(n.angularVelocity)):o.hasAngularVelocity=!1,this.dispatchEvent(pf)))}return o!==null&&(o.visible=n!==null),l!==null&&(l.visible=s!==null),A!==null&&(A.visible=a!==null),this}_getHandJoint(t,e){if(t.joints[e.jointName]===void 0){const i=new er;i.matrixAutoUpdate=!1,i.visible=!1,t.joints[e.jointName]=i,t.add(i)}return t.joints[e.jointName]}}class rA{constructor(t,e=1,i=1e3){this.isFog=!0,this.name="",this.color=new Vt(t),this.near=e,this.far=i}clone(){return new rA(this.color,this.near,this.far)}toJSON(){return{type:"Fog",name:this.name,color:this.color.getHex(),near:this.near,far:this.far}}}class gh extends ve{constructor(){super(),this.isScene=!0,this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.backgroundBlurriness=0,this.backgroundIntensity=1,this.backgroundRotation=new vi,this.environmentIntensity=1,this.environmentRotation=new vi,this.overrideMaterial=null,typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(t,e){return super.copy(t,e),t.background!==null&&(this.background=t.background.clone()),t.environment!==null&&(this.environment=t.environment.clone()),t.fog!==null&&(this.fog=t.fog.clone()),this.backgroundBlurriness=t.backgroundBlurriness,this.backgroundIntensity=t.backgroundIntensity,this.backgroundRotation.copy(t.backgroundRotation),this.environmentIntensity=t.environmentIntensity,this.environmentRotation.copy(t.environmentRotation),t.overrideMaterial!==null&&(this.overrideMaterial=t.overrideMaterial.clone()),this.matrixAutoUpdate=t.matrixAutoUpdate,this}toJSON(t){const e=super.toJSON(t);return this.fog!==null&&(e.object.fog=this.fog.toJSON()),this.backgroundBlurriness>0&&(e.object.backgroundBlurriness=this.backgroundBlurriness),this.backgroundIntensity!==1&&(e.object.backgroundIntensity=this.backgroundIntensity),e.object.backgroundRotation=this.backgroundRotation.toArray(),this.environmentIntensity!==1&&(e.object.environmentIntensity=this.environmentIntensity),e.object.environmentRotation=this.environmentRotation.toArray(),e}}const aA=new B,mf=new B,If=new Nt;class _n{constructor(t=new B(1,0,0),e=0){this.isPlane=!0,this.normal=t,this.constant=e}set(t,e){return this.normal.copy(t),this.constant=e,this}setComponents(t,e,i,n){return this.normal.set(t,e,i),this.constant=n,this}setFromNormalAndCoplanarPoint(t,e){return this.normal.copy(t),this.constant=-e.dot(this.normal),this}setFromCoplanarPoints(t,e,i){const n=aA.subVectors(i,e).cross(mf.subVectors(t,e)).normalize();return this.setFromNormalAndCoplanarPoint(n,t),this}copy(t){return this.normal.copy(t.normal),this.constant=t.constant,this}normalize(){const t=1/this.normal.length();return this.normal.multiplyScalar(t),this.constant*=t,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(t){return this.normal.dot(t)+this.constant}distanceToSphere(t){return this.distanceToPoint(t.center)-t.radius}projectPoint(t,e){return e.copy(t).addScaledVector(this.normal,-this.distanceToPoint(t))}intersectLine(t,e){const i=t.delta(aA),n=this.normal.dot(i);if(n===0)return this.distanceToPoint(t.start)===0?e.copy(t.start):null;const s=-(t.start.dot(this.normal)+this.constant)/n;return s<0||s>1?null:e.copy(t.start).addScaledVector(i,s)}intersectsLine(t){const e=this.distanceToPoint(t.start),i=this.distanceToPoint(t.end);return e<0&&i>0||i<0&&e>0}intersectsBox(t){return t.intersectsPlane(this)}intersectsSphere(t){return t.intersectsPlane(this)}coplanarPoint(t){return t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){const i=e||If.getNormalMatrix(t),n=this.coplanarPoint(aA).applyMatrix4(t),s=this.normal.applyMatrix3(i).normalize();return this.constant=-n.dot(s),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}clone(){return new this.constructor().copy(this)}}const Pn=new Ho,Cf=new Zt(.5,.5),$r=new B;class oA{constructor(t=new _n,e=new _n,i=new _n,n=new _n,s=new _n,a=new _n){this.planes=[t,e,i,n,s,a]}set(t,e,i,n,s,a){const o=this.planes;return o[0].copy(t),o[1].copy(e),o[2].copy(i),o[3].copy(n),o[4].copy(s),o[5].copy(a),this}copy(t){const e=this.planes;for(let i=0;i<6;i++)e[i].copy(t.planes[i]);return this}setFromProjectionMatrix(t,e=Ci,i=!1){const n=this.planes,s=t.elements,a=s[0],o=s[1],l=s[2],A=s[3],h=s[4],c=s[5],u=s[6],d=s[7],p=s[8],m=s[9],g=s[10],f=s[11],y=s[12],S=s[13],v=s[14],w=s[15];if(n[0].setComponents(A-a,d-h,f-p,w-y).normalize(),n[1].setComponents(A+a,d+h,f+p,w+y).normalize(),n[2].setComponents(A+o,d+c,f+m,w+S).normalize(),n[3].setComponents(A-o,d-c,f-m,w-S).normalize(),i)n[4].setComponents(l,u,g,v).normalize(),n[5].setComponents(A-l,d-u,f-g,w-v).normalize();else if(n[4].setComponents(A-l,d-u,f-g,w-v).normalize(),e===Ci)n[5].setComponents(A+l,d+u,f+g,w+v).normalize();else if(e===Br)n[5].setComponents(l,u,g,v).normalize();else throw new Error("THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: "+e);return this}intersectsObject(t){if(t.boundingSphere!==void 0)t.boundingSphere===null&&t.computeBoundingSphere(),Pn.copy(t.boundingSphere).applyMatrix4(t.matrixWorld);else{const e=t.geometry;e.boundingSphere===null&&e.computeBoundingSphere(),Pn.copy(e.boundingSphere).applyMatrix4(t.matrixWorld)}return this.intersectsSphere(Pn)}intersectsSprite(t){Pn.center.set(0,0,0);const e=Cf.distanceTo(t.center);return Pn.radius=.7071067811865476+e,Pn.applyMatrix4(t.matrixWorld),this.intersectsSphere(Pn)}intersectsSphere(t){const e=this.planes,i=t.center,n=-t.radius;for(let s=0;s<6;s++)if(e[s].distanceToPoint(i)<n)return!1;return!0}intersectsBox(t){const e=this.planes;for(let i=0;i<6;i++){const n=e[i];if($r.x=n.normal.x>0?t.max.x:t.min.x,$r.y=n.normal.y>0?t.max.y:t.min.y,$r.z=n.normal.z>0?t.max.z:t.min.z,n.distanceToPoint($r)<0)return!1}return!0}containsPoint(t){const e=this.planes;for(let i=0;i<6;i++)if(e[i].distanceToPoint(t)<0)return!1;return!0}clone(){return new this.constructor().copy(this)}}class ph extends Te{constructor(t,e,i,n,s,a,o,l,A){super(t,e,i,n,s,a,o,l,A),this.isCanvasTexture=!0,this.needsUpdate=!0}}class mh extends Te{constructor(t,e,i=Sn,n,s,a,o=Ai,l=Ai,A,h=Ws,c=1){if(h!==Ws&&h!==Ys)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");const u={width:t,height:e,depth:c};super(u,n,s,a,o,l,h,i,A),this.isDepthTexture=!0,this.flipY=!1,this.generateMipmaps=!1,this.compareFunction=null}copy(t){return super.copy(t),this.source=new Oo(Object.assign({},t.image)),this.compareFunction=t.compareFunction,this}toJSON(t){const e=super.toJSON(t);return this.compareFunction!==null&&(e.compareFunction=this.compareFunction),e}}class ir extends wn{constructor(t=1,e=1,i=1,n=1){super(),this.type="PlaneGeometry",this.parameters={width:t,height:e,widthSegments:i,heightSegments:n};const s=t/2,a=e/2,o=Math.floor(i),l=Math.floor(n),A=o+1,h=l+1,c=t/o,u=e/l,d=[],p=[],m=[],g=[];for(let f=0;f<h;f++){const y=f*u-a;for(let S=0;S<A;S++){const v=S*c-s;p.push(v,-y,0),m.push(0,0,1),g.push(S/o),g.push(1-f/l)}}for(let f=0;f<l;f++)for(let y=0;y<o;y++){const S=y+A*f,v=y+A*(f+1),w=y+1+A*(f+1),T=y+1+A*f;d.push(S,v,T),d.push(v,w,T)}this.setIndex(d),this.setAttribute("position",new Tn(p,3)),this.setAttribute("normal",new Tn(m,3)),this.setAttribute("uv",new Tn(g,2))}copy(t){return super.copy(t),this.parameters=Object.assign({},t.parameters),this}static fromJSON(t){return new ir(t.width,t.height,t.widthSegments,t.heightSegments)}}class vf extends $s{constructor(t){super(),this.isMeshStandardMaterial=!0,this.type="MeshStandardMaterial",this.defines={STANDARD:""},this.color=new Vt(16777215),this.roughness=1,this.metalness=0,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Vt(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=Ul,this.normalScale=new Zt(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.roughnessMap=null,this.metalnessMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new vi,this.envMapIntensity=1,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.defines={STANDARD:""},this.color.copy(t.color),this.roughness=t.roughness,this.metalness=t.metalness,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.roughnessMap=t.roughnessMap,this.metalnessMap=t.metalnessMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapRotation.copy(t.envMapRotation),this.envMapIntensity=t.envMapIntensity,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.flatShading=t.flatShading,this.fog=t.fog,this}}class xf extends $s{constructor(t){super(),this.isMeshDepthMaterial=!0,this.type="MeshDepthMaterial",this.depthPacking=Dd,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.setValues(t)}copy(t){return super.copy(t),this.depthPacking=t.depthPacking,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this}}class Ef extends $s{constructor(t){super(),this.isMeshDistanceMaterial=!0,this.type="MeshDistanceMaterial",this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.setValues(t)}copy(t){return super.copy(t),this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this}}const AA={enabled:!1,files:{},add:function(r,t){this.enabled!==!1&&(this.files[r]=t)},get:function(r){if(this.enabled!==!1)return this.files[r]},remove:function(r){delete this.files[r]},clear:function(){this.files={}}};class Sf{constructor(t,e,i){const n=this;let s=!1,a=0,o=0,l;const A=[];this.onStart=void 0,this.onLoad=t,this.onProgress=e,this.onError=i,this.abortController=new AbortController,this.itemStart=function(h){o++,s===!1&&n.onStart!==void 0&&n.onStart(h,a,o),s=!0},this.itemEnd=function(h){a++,n.onProgress!==void 0&&n.onProgress(h,a,o),a===o&&(s=!1,n.onLoad!==void 0&&n.onLoad())},this.itemError=function(h){n.onError!==void 0&&n.onError(h)},this.resolveURL=function(h){return l?l(h):h},this.setURLModifier=function(h){return l=h,this},this.addHandler=function(h,c){return A.push(h,c),this},this.removeHandler=function(h){const c=A.indexOf(h);return c!==-1&&A.splice(c,2),this},this.getHandler=function(h){for(let c=0,u=A.length;c<u;c+=2){const d=A[c],p=A[c+1];if(d.global&&(d.lastIndex=0),d.test(h))return p}return null},this.abort=function(){return this.abortController.abort(),this.abortController=new AbortController,this}}}const Mf=new Sf;class lA{constructor(t){this.manager=t!==void 0?t:Mf,this.crossOrigin="anonymous",this.withCredentials=!1,this.path="",this.resourcePath="",this.requestHeader={}}load(){}loadAsync(t,e){const i=this;return new Promise(function(n,s){i.load(t,n,e,s)})}parse(){}setCrossOrigin(t){return this.crossOrigin=t,this}setWithCredentials(t){return this.withCredentials=t,this}setPath(t){return this.path=t,this}setResourcePath(t){return this.resourcePath=t,this}setRequestHeader(t){return this.requestHeader=t,this}abort(){return this}}lA.DEFAULT_MATERIAL_NAME="__DEFAULT";const Ss=new WeakMap;class yf extends lA{constructor(t){super(t)}load(t,e,i,n){this.path!==void 0&&(t=this.path+t),t=this.manager.resolveURL(t);const s=this,a=AA.get(`image:${t}`);if(a!==void 0){if(a.complete===!0)s.manager.itemStart(t),setTimeout(function(){e&&e(a),s.manager.itemEnd(t)},0);else{let c=Ss.get(a);c===void 0&&(c=[],Ss.set(a,c)),c.push({onLoad:e,onError:n})}return a}const o=js("img");function l(){h(),e&&e(this);const c=Ss.get(this)||[];for(let u=0;u<c.length;u++){const d=c[u];d.onLoad&&d.onLoad(this)}Ss.delete(this),s.manager.itemEnd(t)}function A(c){h(),n&&n(c),AA.remove(`image:${t}`);const u=Ss.get(this)||[];for(let d=0;d<u.length;d++){const p=u[d];p.onError&&p.onError(c)}Ss.delete(this),s.manager.itemError(t),s.manager.itemEnd(t)}function h(){o.removeEventListener("load",l,!1),o.removeEventListener("error",A,!1)}return o.addEventListener("load",l,!1),o.addEventListener("error",A,!1),t.slice(0,5)!=="data:"&&this.crossOrigin!==void 0&&(o.crossOrigin=this.crossOrigin),AA.add(`image:${t}`,o),s.manager.itemStart(t),o.src=t,o}}class Ih extends lA{constructor(t){super(t)}load(t,e,i,n){const s=new Te,a=new yf(this.manager);return a.setCrossOrigin(this.crossOrigin),a.setPath(this.path),a.load(t,function(o){s.image=o,s.needsUpdate=!0,e!==void 0&&e(s)},i,n),s}}class hA extends ve{constructor(t,e=1){super(),this.isLight=!0,this.type="Light",this.color=new Vt(t),this.intensity=e}dispose(){}copy(t,e){return super.copy(t,e),this.color.copy(t.color),this.intensity=t.intensity,this}toJSON(t){const e=super.toJSON(t);return e.object.color=this.color.getHex(),e.object.intensity=this.intensity,this.groundColor!==void 0&&(e.object.groundColor=this.groundColor.getHex()),this.distance!==void 0&&(e.object.distance=this.distance),this.angle!==void 0&&(e.object.angle=this.angle),this.decay!==void 0&&(e.object.decay=this.decay),this.penumbra!==void 0&&(e.object.penumbra=this.penumbra),this.shadow!==void 0&&(e.object.shadow=this.shadow.toJSON()),this.target!==void 0&&(e.object.target=this.target.uuid),e}}const cA=new ue,Ch=new B,vh=new B;class xh{constructor(t){this.camera=t,this.intensity=1,this.bias=0,this.normalBias=0,this.radius=1,this.blurSamples=8,this.mapSize=new Zt(512,512),this.mapType=Ii,this.map=null,this.mapPass=null,this.matrix=new ue,this.autoUpdate=!0,this.needsUpdate=!1,this._frustum=new oA,this._frameExtents=new Zt(1,1),this._viewportCount=1,this._viewports=[new he(0,0,1,1)]}getViewportCount(){return this._viewportCount}getFrustum(){return this._frustum}updateMatrices(t){const e=this.camera,i=this.matrix;Ch.setFromMatrixPosition(t.matrixWorld),e.position.copy(Ch),vh.setFromMatrixPosition(t.target.matrixWorld),e.lookAt(vh),e.updateMatrixWorld(),cA.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse),this._frustum.setFromProjectionMatrix(cA,e.coordinateSystem,e.reversedDepth),e.reversedDepth?i.set(.5,0,0,.5,0,.5,0,.5,0,0,1,0,0,0,0,1):i.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),i.multiply(cA)}getViewport(t){return this._viewports[t]}getFrameExtents(){return this._frameExtents}dispose(){this.map&&this.map.dispose(),this.mapPass&&this.mapPass.dispose()}copy(t){return this.camera=t.camera.clone(),this.intensity=t.intensity,this.bias=t.bias,this.radius=t.radius,this.autoUpdate=t.autoUpdate,this.needsUpdate=t.needsUpdate,this.normalBias=t.normalBias,this.blurSamples=t.blurSamples,this.mapSize.copy(t.mapSize),this}clone(){return new this.constructor().copy(this)}toJSON(){const t={};return this.intensity!==1&&(t.intensity=this.intensity),this.bias!==0&&(t.bias=this.bias),this.normalBias!==0&&(t.normalBias=this.normalBias),this.radius!==1&&(t.radius=this.radius),(this.mapSize.x!==512||this.mapSize.y!==512)&&(t.mapSize=this.mapSize.toArray()),t.camera=this.camera.toJSON(!1).object,delete t.camera.matrix,t}}class bf extends xh{constructor(){super(new Ue(50,1,.5,500)),this.isSpotLightShadow=!0,this.focus=1,this.aspect=1}updateMatrices(t){const e=this.camera,i=Fr*2*t.angle*this.focus,n=this.mapSize.width/this.mapSize.height*this.aspect,s=t.distance||e.far;(i!==e.fov||n!==e.aspect||s!==e.far)&&(e.fov=i,e.aspect=n,e.far=s,e.updateProjectionMatrix()),super.updateMatrices(t)}copy(t){return super.copy(t),this.focus=t.focus,this}}class Tf extends hA{constructor(t,e,i=0,n=Math.PI/3,s=0,a=2){super(t,e),this.isSpotLight=!0,this.type="SpotLight",this.position.copy(ve.DEFAULT_UP),this.updateMatrix(),this.target=new ve,this.distance=i,this.angle=n,this.penumbra=s,this.decay=a,this.map=null,this.shadow=new bf}get power(){return this.intensity*Math.PI}set power(t){this.intensity=t/Math.PI}dispose(){this.shadow.dispose()}copy(t,e){return super.copy(t,e),this.distance=t.distance,this.angle=t.angle,this.penumbra=t.penumbra,this.decay=t.decay,this.target=t.target.clone(),this.shadow=t.shadow.clone(),this}}class Eh extends ch{constructor(t=-1,e=1,i=1,n=-1,s=.1,a=2e3){super(),this.isOrthographicCamera=!0,this.type="OrthographicCamera",this.zoom=1,this.view=null,this.left=t,this.right=e,this.top=i,this.bottom=n,this.near=s,this.far=a,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.left=t.left,this.right=t.right,this.top=t.top,this.bottom=t.bottom,this.near=t.near,this.far=t.far,this.zoom=t.zoom,this.view=t.view===null?null:Object.assign({},t.view),this}setViewOffset(t,e,i,n,s,a){this.view===null&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=i,this.view.offsetY=n,this.view.width=s,this.view.height=a,this.updateProjectionMatrix()}clearViewOffset(){this.view!==null&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const t=(this.right-this.left)/(2*this.zoom),e=(this.top-this.bottom)/(2*this.zoom),i=(this.right+this.left)/2,n=(this.top+this.bottom)/2;let s=i-t,a=i+t,o=n+e,l=n-e;if(this.view!==null&&this.view.enabled){const A=(this.right-this.left)/this.view.fullWidth/this.zoom,h=(this.top-this.bottom)/this.view.fullHeight/this.zoom;s+=A*this.view.offsetX,a=s+A*this.view.width,o-=h*this.view.offsetY,l=o-h*this.view.height}this.projectionMatrix.makeOrthographic(s,a,o,l,this.near,this.far,this.coordinateSystem,this.reversedDepth),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){const e=super.toJSON(t);return e.object.zoom=this.zoom,e.object.left=this.left,e.object.right=this.right,e.object.top=this.top,e.object.bottom=this.bottom,e.object.near=this.near,e.object.far=this.far,this.view!==null&&(e.object.view=Object.assign({},this.view)),e}}class wf extends xh{constructor(){super(new Eh(-5,5,5,-5,.5,500)),this.isDirectionalLightShadow=!0}}class Sh extends hA{constructor(t,e){super(t,e),this.isDirectionalLight=!0,this.type="DirectionalLight",this.position.copy(ve.DEFAULT_UP),this.updateMatrix(),this.target=new ve,this.shadow=new wf}dispose(){this.shadow.dispose()}copy(t){return super.copy(t),this.target=t.target.clone(),this.shadow=t.shadow.clone(),this}}class Rf extends hA{constructor(t,e){super(t,e),this.isAmbientLight=!0,this.type="AmbientLight"}}class _f extends Ue{constructor(t=[]){super(),this.isArrayCamera=!0,this.isMultiViewCamera=!1,this.cameras=t}}class Mh{constructor(t=!0){this.autoStart=t,this.startTime=0,this.oldTime=0,this.elapsedTime=0,this.running=!1}start(){this.startTime=performance.now(),this.oldTime=this.startTime,this.elapsedTime=0,this.running=!0}stop(){this.getElapsedTime(),this.running=!1,this.autoStart=!1}getElapsedTime(){return this.getDelta(),this.elapsedTime}getDelta(){let t=0;if(this.autoStart&&!this.running)return this.start(),0;if(this.running){const e=performance.now();t=(e-this.oldTime)/1e3,this.oldTime=e,this.elapsedTime+=t}return t}}function yh(r,t,e,i){const n=Pf(i);switch(e){case Ll:return r*t;case Bl:return r*t/n.components*n.byteLength;case no:return r*t/n.components*n.byteLength;case Fl:return r*t*2/n.components*n.byteLength;case so:return r*t*2/n.components*n.byteLength;case Nl:return r*t*3/n.components*n.byteLength;case li:return r*t*4/n.components*n.byteLength;case ro:return r*t*4/n.components*n.byteLength;case Rr:case _r:return Math.floor((r+3)/4)*Math.floor((t+3)/4)*8;case Pr:case Dr:return Math.floor((r+3)/4)*Math.floor((t+3)/4)*16;case oo:case lo:return Math.max(r,16)*Math.max(t,8)/4;case ao:case Ao:return Math.max(r,8)*Math.max(t,8)/2;case ho:case co:return Math.floor((r+3)/4)*Math.floor((t+3)/4)*8;case uo:return Math.floor((r+3)/4)*Math.floor((t+3)/4)*16;case fo:return Math.floor((r+3)/4)*Math.floor((t+3)/4)*16;case go:return Math.floor((r+4)/5)*Math.floor((t+3)/4)*16;case po:return Math.floor((r+4)/5)*Math.floor((t+4)/5)*16;case mo:return Math.floor((r+5)/6)*Math.floor((t+4)/5)*16;case Io:return Math.floor((r+5)/6)*Math.floor((t+5)/6)*16;case Co:return Math.floor((r+7)/8)*Math.floor((t+4)/5)*16;case vo:return Math.floor((r+7)/8)*Math.floor((t+5)/6)*16;case xo:return Math.floor((r+7)/8)*Math.floor((t+7)/8)*16;case Eo:return Math.floor((r+9)/10)*Math.floor((t+4)/5)*16;case So:return Math.floor((r+9)/10)*Math.floor((t+5)/6)*16;case Mo:return Math.floor((r+9)/10)*Math.floor((t+7)/8)*16;case yo:return Math.floor((r+9)/10)*Math.floor((t+9)/10)*16;case bo:return Math.floor((r+11)/12)*Math.floor((t+9)/10)*16;case To:return Math.floor((r+11)/12)*Math.floor((t+11)/12)*16;case Lr:case wo:case Ro:return Math.ceil(r/4)*Math.ceil(t/4)*16;case Ol:case _o:return Math.ceil(r/4)*Math.ceil(t/4)*8;case Po:case Do:return Math.ceil(r/4)*Math.ceil(t/4)*16}throw new Error(`Unable to determine texture byte length for ${e} format.`)}function Pf(r){switch(r){case Ii:case _l:return{byteLength:1,components:1};case ks:case Pl:case Hs:return{byteLength:2,components:1};case eo:case io:return{byteLength:2,components:4};case Sn:case to:case Ni:return{byteLength:4,components:1};case Dl:return{byteLength:4,components:3}}throw new Error(`Unknown texture type ${r}.`)}typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:za}})),typeof window<"u"&&(window.__THREE__?console.warn("WARNING: Multiple instances of Three.js being imported."):window.__THREE__=za);function bh(){let r=null,t=!1,e=null,i=null;function n(s,a){e(s,a),i=r.requestAnimationFrame(n)}return{start:function(){t!==!0&&e!==null&&(i=r.requestAnimationFrame(n),t=!0)},stop:function(){r.cancelAnimationFrame(i),t=!1},setAnimationLoop:function(s){e=s},setContext:function(s){r=s}}}function Df(r){const t=new WeakMap;function e(o,l){const A=o.array,h=o.usage,c=A.byteLength,u=r.createBuffer();r.bindBuffer(l,u),r.bufferData(l,A,h),o.onUploadCallback();let d;if(A instanceof Float32Array)d=r.FLOAT;else if(typeof Float16Array<"u"&&A instanceof Float16Array)d=r.HALF_FLOAT;else if(A instanceof Uint16Array)o.isFloat16BufferAttribute?d=r.HALF_FLOAT:d=r.UNSIGNED_SHORT;else if(A instanceof Int16Array)d=r.SHORT;else if(A instanceof Uint32Array)d=r.UNSIGNED_INT;else if(A instanceof Int32Array)d=r.INT;else if(A instanceof Int8Array)d=r.BYTE;else if(A instanceof Uint8Array)d=r.UNSIGNED_BYTE;else if(A instanceof Uint8ClampedArray)d=r.UNSIGNED_BYTE;else throw new Error("THREE.WebGLAttributes: Unsupported buffer data format: "+A);return{buffer:u,type:d,bytesPerElement:A.BYTES_PER_ELEMENT,version:o.version,size:c}}function i(o,l,A){const h=l.array,c=l.updateRanges;if(r.bindBuffer(A,o),c.length===0)r.bufferSubData(A,0,h);else{c.sort((d,p)=>d.start-p.start);let u=0;for(let d=1;d<c.length;d++){const p=c[u],m=c[d];m.start<=p.start+p.count+1?p.count=Math.max(p.count,m.start+m.count-p.start):(++u,c[u]=m)}c.length=u+1;for(let d=0,p=c.length;d<p;d++){const m=c[d];r.bufferSubData(A,m.start*h.BYTES_PER_ELEMENT,h,m.start,m.count)}l.clearUpdateRanges()}l.onUploadCallback()}function n(o){return o.isInterleavedBufferAttribute&&(o=o.data),t.get(o)}function s(o){o.isInterleavedBufferAttribute&&(o=o.data);const l=t.get(o);l&&(r.deleteBuffer(l.buffer),t.delete(o))}function a(o,l){if(o.isInterleavedBufferAttribute&&(o=o.data),o.isGLBufferAttribute){const h=t.get(o);(!h||h.version<o.version)&&t.set(o,{buffer:o.buffer,type:o.type,bytesPerElement:o.elementSize,version:o.version});return}const A=t.get(o);if(A===void 0)t.set(o,e(o,l));else if(A.version<o.version){if(A.size!==o.array.byteLength)throw new Error("THREE.WebGLAttributes: The size of the buffer attribute's array buffer does not match the original size. Resizing buffer attributes is not supported.");i(A.buffer,o,l),A.version=o.version}}return{get:n,remove:s,update:a}}var Lf=`#ifdef USE_ALPHAHASH
|
|
164
164
|
if ( diffuseColor.a < getAlphaHashThreshold( vPosition ) ) discard;
|
|
165
|
-
#endif`,
|
|
165
|
+
#endif`,Nf=`#ifdef USE_ALPHAHASH
|
|
166
166
|
const float ALPHA_HASH_SCALE = 0.05;
|
|
167
167
|
float hash2D( vec2 value ) {
|
|
168
168
|
return fract( 1.0e4 * sin( 17.0 * value.x + 0.1 * value.y ) * ( 0.1 + abs( sin( 13.0 * value.y + value.x ) ) ) );
|
|
@@ -197,20 +197,20 @@ void main() {
|
|
|
197
197
|
: cases.z;
|
|
198
198
|
return clamp( threshold , 1.0e-6, 1.0 );
|
|
199
199
|
}
|
|
200
|
-
#endif`,
|
|
200
|
+
#endif`,Bf=`#ifdef USE_ALPHAMAP
|
|
201
201
|
diffuseColor.a *= texture2D( alphaMap, vAlphaMapUv ).g;
|
|
202
|
-
#endif`,
|
|
202
|
+
#endif`,Ff=`#ifdef USE_ALPHAMAP
|
|
203
203
|
uniform sampler2D alphaMap;
|
|
204
|
-
#endif`,
|
|
204
|
+
#endif`,Of=`#ifdef USE_ALPHATEST
|
|
205
205
|
#ifdef ALPHA_TO_COVERAGE
|
|
206
206
|
diffuseColor.a = smoothstep( alphaTest, alphaTest + fwidth( diffuseColor.a ), diffuseColor.a );
|
|
207
207
|
if ( diffuseColor.a == 0.0 ) discard;
|
|
208
208
|
#else
|
|
209
209
|
if ( diffuseColor.a < alphaTest ) discard;
|
|
210
210
|
#endif
|
|
211
|
-
#endif`,
|
|
211
|
+
#endif`,Uf=`#ifdef USE_ALPHATEST
|
|
212
212
|
uniform float alphaTest;
|
|
213
|
-
#endif`,
|
|
213
|
+
#endif`,zf=`#ifdef USE_AOMAP
|
|
214
214
|
float ambientOcclusion = ( texture2D( aoMap, vAoMapUv ).r - 1.0 ) * aoMapIntensity + 1.0;
|
|
215
215
|
reflectedLight.indirectDiffuse *= ambientOcclusion;
|
|
216
216
|
#if defined( USE_CLEARCOAT )
|
|
@@ -223,10 +223,10 @@ void main() {
|
|
|
223
223
|
float dotNV = saturate( dot( geometryNormal, geometryViewDir ) );
|
|
224
224
|
reflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );
|
|
225
225
|
#endif
|
|
226
|
-
#endif
|
|
226
|
+
#endif`,Gf=`#ifdef USE_AOMAP
|
|
227
227
|
uniform sampler2D aoMap;
|
|
228
228
|
uniform float aoMapIntensity;
|
|
229
|
-
#endif`,
|
|
229
|
+
#endif`,kf=`#ifdef USE_BATCHING
|
|
230
230
|
#if ! defined( GL_ANGLE_multi_draw )
|
|
231
231
|
#define gl_DrawID _gl_DrawID
|
|
232
232
|
uniform int _gl_DrawID;
|
|
@@ -260,15 +260,15 @@ void main() {
|
|
|
260
260
|
int y = j / size;
|
|
261
261
|
return texelFetch( batchingColorTexture, ivec2( x, y ), 0 ).rgb;
|
|
262
262
|
}
|
|
263
|
-
#endif`,
|
|
263
|
+
#endif`,Hf=`#ifdef USE_BATCHING
|
|
264
264
|
mat4 batchingMatrix = getBatchingMatrix( getIndirectIndex( gl_DrawID ) );
|
|
265
|
-
#endif`,
|
|
265
|
+
#endif`,Vf=`vec3 transformed = vec3( position );
|
|
266
266
|
#ifdef USE_ALPHAHASH
|
|
267
267
|
vPosition = vec3( position );
|
|
268
|
-
#endif`,
|
|
268
|
+
#endif`,Wf=`vec3 objectNormal = vec3( normal );
|
|
269
269
|
#ifdef USE_TANGENT
|
|
270
270
|
vec3 objectTangent = vec3( tangent.xyz );
|
|
271
|
-
#endif`,
|
|
271
|
+
#endif`,Yf=`float G_BlinnPhong_Implicit( ) {
|
|
272
272
|
return 0.25;
|
|
273
273
|
}
|
|
274
274
|
float D_BlinnPhong( const in float shininess, const in float dotNH ) {
|
|
@@ -282,7 +282,7 @@ vec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in ve
|
|
|
282
282
|
float G = G_BlinnPhong_Implicit( );
|
|
283
283
|
float D = D_BlinnPhong( shininess, dotNH );
|
|
284
284
|
return F * ( G * D );
|
|
285
|
-
} // validated`,
|
|
285
|
+
} // validated`,Xf=`#ifdef USE_IRIDESCENCE
|
|
286
286
|
const mat3 XYZ_TO_REC709 = mat3(
|
|
287
287
|
3.2404542, -0.9692660, 0.0556434,
|
|
288
288
|
-1.5371385, 1.8760108, -0.2040259,
|
|
@@ -345,7 +345,7 @@ vec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in ve
|
|
|
345
345
|
}
|
|
346
346
|
return max( I, vec3( 0.0 ) );
|
|
347
347
|
}
|
|
348
|
-
#endif`,
|
|
348
|
+
#endif`,Zf=`#ifdef USE_BUMPMAP
|
|
349
349
|
uniform sampler2D bumpMap;
|
|
350
350
|
uniform float bumpScale;
|
|
351
351
|
vec2 dHdxy_fwd() {
|
|
@@ -366,7 +366,7 @@ vec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in ve
|
|
|
366
366
|
vec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );
|
|
367
367
|
return normalize( abs( fDet ) * surf_norm - vGrad );
|
|
368
368
|
}
|
|
369
|
-
#endif`,
|
|
369
|
+
#endif`,Jf=`#if NUM_CLIPPING_PLANES > 0
|
|
370
370
|
vec4 plane;
|
|
371
371
|
#ifdef ALPHA_TO_COVERAGE
|
|
372
372
|
float distanceToPlane, distanceGradient;
|
|
@@ -412,26 +412,26 @@ vec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in ve
|
|
|
412
412
|
if ( clipped ) discard;
|
|
413
413
|
#endif
|
|
414
414
|
#endif
|
|
415
|
-
#endif`,
|
|
415
|
+
#endif`,jf=`#if NUM_CLIPPING_PLANES > 0
|
|
416
416
|
varying vec3 vClipPosition;
|
|
417
417
|
uniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];
|
|
418
|
-
#endif`,
|
|
418
|
+
#endif`,Qf=`#if NUM_CLIPPING_PLANES > 0
|
|
419
419
|
varying vec3 vClipPosition;
|
|
420
|
-
#endif`,
|
|
420
|
+
#endif`,qf=`#if NUM_CLIPPING_PLANES > 0
|
|
421
421
|
vClipPosition = - mvPosition.xyz;
|
|
422
|
-
#endif`,
|
|
422
|
+
#endif`,Kf=`#if defined( USE_COLOR_ALPHA )
|
|
423
423
|
diffuseColor *= vColor;
|
|
424
424
|
#elif defined( USE_COLOR )
|
|
425
425
|
diffuseColor.rgb *= vColor;
|
|
426
|
-
#endif
|
|
426
|
+
#endif`,$f=`#if defined( USE_COLOR_ALPHA )
|
|
427
427
|
varying vec4 vColor;
|
|
428
428
|
#elif defined( USE_COLOR )
|
|
429
429
|
varying vec3 vColor;
|
|
430
|
-
#endif`,
|
|
430
|
+
#endif`,tg=`#if defined( USE_COLOR_ALPHA )
|
|
431
431
|
varying vec4 vColor;
|
|
432
432
|
#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )
|
|
433
433
|
varying vec3 vColor;
|
|
434
|
-
#endif`,
|
|
434
|
+
#endif`,eg=`#if defined( USE_COLOR_ALPHA )
|
|
435
435
|
vColor = vec4( 1.0 );
|
|
436
436
|
#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )
|
|
437
437
|
vColor = vec3( 1.0 );
|
|
@@ -445,7 +445,7 @@ vec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in ve
|
|
|
445
445
|
#ifdef USE_BATCHING_COLOR
|
|
446
446
|
vec3 batchingColor = getBatchingColor( getIndirectIndex( gl_DrawID ) );
|
|
447
447
|
vColor.xyz *= batchingColor.xyz;
|
|
448
|
-
#endif`,
|
|
448
|
+
#endif`,ig=`#define PI 3.141592653589793
|
|
449
449
|
#define PI2 6.283185307179586
|
|
450
450
|
#define PI_HALF 1.5707963267948966
|
|
451
451
|
#define RECIPROCAL_PI 0.3183098861837907
|
|
@@ -519,7 +519,7 @@ vec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {
|
|
|
519
519
|
float F_Schlick( const in float f0, const in float f90, const in float dotVH ) {
|
|
520
520
|
float fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );
|
|
521
521
|
return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );
|
|
522
|
-
} // validated`,
|
|
522
|
+
} // validated`,ng=`#ifdef ENVMAP_TYPE_CUBE_UV
|
|
523
523
|
#define cubeUV_minMipLevel 4.0
|
|
524
524
|
#define cubeUV_minTileSize 16.0
|
|
525
525
|
float getFace( vec3 direction ) {
|
|
@@ -612,7 +612,7 @@ float F_Schlick( const in float f0, const in float f90, const in float dotVH ) {
|
|
|
612
612
|
return vec4( mix( color0, color1, mipF ), 1.0 );
|
|
613
613
|
}
|
|
614
614
|
}
|
|
615
|
-
#endif`,
|
|
615
|
+
#endif`,sg=`vec3 transformedNormal = objectNormal;
|
|
616
616
|
#ifdef USE_TANGENT
|
|
617
617
|
vec3 transformedTangent = objectTangent;
|
|
618
618
|
#endif
|
|
@@ -641,21 +641,21 @@ transformedNormal = normalMatrix * transformedNormal;
|
|
|
641
641
|
#ifdef FLIP_SIDED
|
|
642
642
|
transformedTangent = - transformedTangent;
|
|
643
643
|
#endif
|
|
644
|
-
#endif`,
|
|
644
|
+
#endif`,rg=`#ifdef USE_DISPLACEMENTMAP
|
|
645
645
|
uniform sampler2D displacementMap;
|
|
646
646
|
uniform float displacementScale;
|
|
647
647
|
uniform float displacementBias;
|
|
648
|
-
#endif`,
|
|
648
|
+
#endif`,ag=`#ifdef USE_DISPLACEMENTMAP
|
|
649
649
|
transformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias );
|
|
650
|
-
#endif`,
|
|
650
|
+
#endif`,og=`#ifdef USE_EMISSIVEMAP
|
|
651
651
|
vec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv );
|
|
652
652
|
#ifdef DECODE_VIDEO_TEXTURE_EMISSIVE
|
|
653
653
|
emissiveColor = sRGBTransferEOTF( emissiveColor );
|
|
654
654
|
#endif
|
|
655
655
|
totalEmissiveRadiance *= emissiveColor.rgb;
|
|
656
|
-
#endif`,
|
|
656
|
+
#endif`,Ag=`#ifdef USE_EMISSIVEMAP
|
|
657
657
|
uniform sampler2D emissiveMap;
|
|
658
|
-
#endif`,
|
|
658
|
+
#endif`,lg="gl_FragColor = linearToOutputTexel( gl_FragColor );",hg=`vec4 LinearTransferOETF( in vec4 value ) {
|
|
659
659
|
return value;
|
|
660
660
|
}
|
|
661
661
|
vec4 sRGBTransferEOTF( in vec4 value ) {
|
|
@@ -663,7 +663,7 @@ vec4 sRGBTransferEOTF( in vec4 value ) {
|
|
|
663
663
|
}
|
|
664
664
|
vec4 sRGBTransferOETF( in vec4 value ) {
|
|
665
665
|
return vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );
|
|
666
|
-
}`,
|
|
666
|
+
}`,cg=`#ifdef USE_ENVMAP
|
|
667
667
|
#ifdef ENV_WORLDPOS
|
|
668
668
|
vec3 cameraToFrag;
|
|
669
669
|
if ( isOrthographic ) {
|
|
@@ -692,7 +692,7 @@ vec4 sRGBTransferOETF( in vec4 value ) {
|
|
|
692
692
|
#elif defined( ENVMAP_BLENDING_ADD )
|
|
693
693
|
outgoingLight += envColor.xyz * specularStrength * reflectivity;
|
|
694
694
|
#endif
|
|
695
|
-
#endif`,
|
|
695
|
+
#endif`,ug=`#ifdef USE_ENVMAP
|
|
696
696
|
uniform float envMapIntensity;
|
|
697
697
|
uniform float flipEnvMap;
|
|
698
698
|
uniform mat3 envMapRotation;
|
|
@@ -702,7 +702,7 @@ vec4 sRGBTransferOETF( in vec4 value ) {
|
|
|
702
702
|
uniform sampler2D envMap;
|
|
703
703
|
#endif
|
|
704
704
|
|
|
705
|
-
#endif`,
|
|
705
|
+
#endif`,dg=`#ifdef USE_ENVMAP
|
|
706
706
|
uniform float reflectivity;
|
|
707
707
|
#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )
|
|
708
708
|
#define ENV_WORLDPOS
|
|
@@ -713,7 +713,7 @@ vec4 sRGBTransferOETF( in vec4 value ) {
|
|
|
713
713
|
#else
|
|
714
714
|
varying vec3 vReflect;
|
|
715
715
|
#endif
|
|
716
|
-
#endif`,
|
|
716
|
+
#endif`,fg=`#ifdef USE_ENVMAP
|
|
717
717
|
#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )
|
|
718
718
|
#define ENV_WORLDPOS
|
|
719
719
|
#endif
|
|
@@ -724,7 +724,7 @@ vec4 sRGBTransferOETF( in vec4 value ) {
|
|
|
724
724
|
varying vec3 vReflect;
|
|
725
725
|
uniform float refractionRatio;
|
|
726
726
|
#endif
|
|
727
|
-
#endif`,
|
|
727
|
+
#endif`,gg=`#ifdef USE_ENVMAP
|
|
728
728
|
#ifdef ENV_WORLDPOS
|
|
729
729
|
vWorldPosition = worldPosition.xyz;
|
|
730
730
|
#else
|
|
@@ -741,18 +741,18 @@ vec4 sRGBTransferOETF( in vec4 value ) {
|
|
|
741
741
|
vReflect = refract( cameraToVertex, worldNormal, refractionRatio );
|
|
742
742
|
#endif
|
|
743
743
|
#endif
|
|
744
|
-
#endif`,
|
|
744
|
+
#endif`,pg=`#ifdef USE_FOG
|
|
745
745
|
vFogDepth = - mvPosition.z;
|
|
746
|
-
#endif`,
|
|
746
|
+
#endif`,mg=`#ifdef USE_FOG
|
|
747
747
|
varying float vFogDepth;
|
|
748
|
-
#endif`,
|
|
748
|
+
#endif`,Ig=`#ifdef USE_FOG
|
|
749
749
|
#ifdef FOG_EXP2
|
|
750
750
|
float fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );
|
|
751
751
|
#else
|
|
752
752
|
float fogFactor = smoothstep( fogNear, fogFar, vFogDepth );
|
|
753
753
|
#endif
|
|
754
754
|
gl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );
|
|
755
|
-
#endif`,
|
|
755
|
+
#endif`,Cg=`#ifdef USE_FOG
|
|
756
756
|
uniform vec3 fogColor;
|
|
757
757
|
varying float vFogDepth;
|
|
758
758
|
#ifdef FOG_EXP2
|
|
@@ -761,7 +761,7 @@ vec4 sRGBTransferOETF( in vec4 value ) {
|
|
|
761
761
|
uniform float fogNear;
|
|
762
762
|
uniform float fogFar;
|
|
763
763
|
#endif
|
|
764
|
-
#endif`,
|
|
764
|
+
#endif`,vg=`#ifdef USE_GRADIENTMAP
|
|
765
765
|
uniform sampler2D gradientMap;
|
|
766
766
|
#endif
|
|
767
767
|
vec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {
|
|
@@ -773,12 +773,12 @@ vec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {
|
|
|
773
773
|
vec2 fw = fwidth( coord ) * 0.5;
|
|
774
774
|
return mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) );
|
|
775
775
|
#endif
|
|
776
|
-
}`,
|
|
776
|
+
}`,xg=`#ifdef USE_LIGHTMAP
|
|
777
777
|
uniform sampler2D lightMap;
|
|
778
778
|
uniform float lightMapIntensity;
|
|
779
|
-
#endif`,
|
|
779
|
+
#endif`,Eg=`LambertMaterial material;
|
|
780
780
|
material.diffuseColor = diffuseColor.rgb;
|
|
781
|
-
material.specularStrength = specularStrength;`,
|
|
781
|
+
material.specularStrength = specularStrength;`,Sg=`varying vec3 vViewPosition;
|
|
782
782
|
struct LambertMaterial {
|
|
783
783
|
vec3 diffuseColor;
|
|
784
784
|
float specularStrength;
|
|
@@ -792,7 +792,7 @@ void RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in vec3 geometr
|
|
|
792
792
|
reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
|
|
793
793
|
}
|
|
794
794
|
#define RE_Direct RE_Direct_Lambert
|
|
795
|
-
#define RE_IndirectDiffuse RE_IndirectDiffuse_Lambert`,
|
|
795
|
+
#define RE_IndirectDiffuse RE_IndirectDiffuse_Lambert`,Mg=`uniform bool receiveShadow;
|
|
796
796
|
uniform vec3 ambientLightColor;
|
|
797
797
|
#if defined( USE_LIGHT_PROBES )
|
|
798
798
|
uniform vec3 lightProbe[ 9 ];
|
|
@@ -908,7 +908,7 @@ float getSpotAttenuation( const in float coneCosine, const in float penumbraCosi
|
|
|
908
908
|
vec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );
|
|
909
909
|
return irradiance;
|
|
910
910
|
}
|
|
911
|
-
#endif`,
|
|
911
|
+
#endif`,yg=`#ifdef USE_ENVMAP
|
|
912
912
|
vec3 getIBLIrradiance( const in vec3 normal ) {
|
|
913
913
|
#ifdef ENVMAP_TYPE_CUBE_UV
|
|
914
914
|
vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );
|
|
@@ -941,8 +941,8 @@ float getSpotAttenuation( const in float coneCosine, const in float penumbraCosi
|
|
|
941
941
|
#endif
|
|
942
942
|
}
|
|
943
943
|
#endif
|
|
944
|
-
#endif`,
|
|
945
|
-
material.diffuseColor = diffuseColor.rgb;`,
|
|
944
|
+
#endif`,bg=`ToonMaterial material;
|
|
945
|
+
material.diffuseColor = diffuseColor.rgb;`,Tg=`varying vec3 vViewPosition;
|
|
946
946
|
struct ToonMaterial {
|
|
947
947
|
vec3 diffuseColor;
|
|
948
948
|
};
|
|
@@ -954,11 +954,11 @@ void RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in vec3 geometryPo
|
|
|
954
954
|
reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
|
|
955
955
|
}
|
|
956
956
|
#define RE_Direct RE_Direct_Toon
|
|
957
|
-
#define RE_IndirectDiffuse RE_IndirectDiffuse_Toon`,
|
|
957
|
+
#define RE_IndirectDiffuse RE_IndirectDiffuse_Toon`,wg=`BlinnPhongMaterial material;
|
|
958
958
|
material.diffuseColor = diffuseColor.rgb;
|
|
959
959
|
material.specularColor = specular;
|
|
960
960
|
material.specularShininess = shininess;
|
|
961
|
-
material.specularStrength = specularStrength;`,
|
|
961
|
+
material.specularStrength = specularStrength;`,Rg=`varying vec3 vViewPosition;
|
|
962
962
|
struct BlinnPhongMaterial {
|
|
963
963
|
vec3 diffuseColor;
|
|
964
964
|
vec3 specularColor;
|
|
@@ -975,7 +975,7 @@ void RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in vec3 geom
|
|
|
975
975
|
reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
|
|
976
976
|
}
|
|
977
977
|
#define RE_Direct RE_Direct_BlinnPhong
|
|
978
|
-
#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong`,
|
|
978
|
+
#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong`,_g=`PhysicalMaterial material;
|
|
979
979
|
material.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );
|
|
980
980
|
vec3 dxy = max( abs( dFdx( nonPerturbedNormal ) ), abs( dFdy( nonPerturbedNormal ) ) );
|
|
981
981
|
float geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );
|
|
@@ -1061,7 +1061,7 @@ material.roughness = min( material.roughness, 1.0 );
|
|
|
1061
1061
|
material.alphaT = mix( pow2( material.roughness ), 1.0, pow2( material.anisotropy ) );
|
|
1062
1062
|
material.anisotropyT = tbn[ 0 ] * anisotropyV.x + tbn[ 1 ] * anisotropyV.y;
|
|
1063
1063
|
material.anisotropyB = tbn[ 1 ] * anisotropyV.x - tbn[ 0 ] * anisotropyV.y;
|
|
1064
|
-
#endif`,
|
|
1064
|
+
#endif`,Pg=`struct PhysicalMaterial {
|
|
1065
1065
|
vec3 diffuseColor;
|
|
1066
1066
|
float roughness;
|
|
1067
1067
|
vec3 specularColor;
|
|
@@ -1362,7 +1362,7 @@ void RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradia
|
|
|
1362
1362
|
#define RE_IndirectSpecular RE_IndirectSpecular_Physical
|
|
1363
1363
|
float computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {
|
|
1364
1364
|
return saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );
|
|
1365
|
-
}`,
|
|
1365
|
+
}`,Dg=`
|
|
1366
1366
|
vec3 geometryPosition = - vViewPosition;
|
|
1367
1367
|
vec3 geometryNormal = normal;
|
|
1368
1368
|
vec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );
|
|
@@ -1477,7 +1477,7 @@ IncidentLight directLight;
|
|
|
1477
1477
|
#if defined( RE_IndirectSpecular )
|
|
1478
1478
|
vec3 radiance = vec3( 0.0 );
|
|
1479
1479
|
vec3 clearcoatRadiance = vec3( 0.0 );
|
|
1480
|
-
#endif`,
|
|
1480
|
+
#endif`,Lg=`#if defined( RE_IndirectDiffuse )
|
|
1481
1481
|
#ifdef USE_LIGHTMAP
|
|
1482
1482
|
vec4 lightMapTexel = texture2D( lightMap, vLightMapUv );
|
|
1483
1483
|
vec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;
|
|
@@ -1496,32 +1496,32 @@ IncidentLight directLight;
|
|
|
1496
1496
|
#ifdef USE_CLEARCOAT
|
|
1497
1497
|
clearcoatRadiance += getIBLRadiance( geometryViewDir, geometryClearcoatNormal, material.clearcoatRoughness );
|
|
1498
1498
|
#endif
|
|
1499
|
-
#endif`,
|
|
1499
|
+
#endif`,Ng=`#if defined( RE_IndirectDiffuse )
|
|
1500
1500
|
RE_IndirectDiffuse( irradiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );
|
|
1501
1501
|
#endif
|
|
1502
1502
|
#if defined( RE_IndirectSpecular )
|
|
1503
1503
|
RE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );
|
|
1504
|
-
#endif`,
|
|
1504
|
+
#endif`,Bg=`#if defined( USE_LOGDEPTHBUF )
|
|
1505
1505
|
gl_FragDepth = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;
|
|
1506
|
-
#endif`,
|
|
1506
|
+
#endif`,Fg=`#if defined( USE_LOGDEPTHBUF )
|
|
1507
1507
|
uniform float logDepthBufFC;
|
|
1508
1508
|
varying float vFragDepth;
|
|
1509
1509
|
varying float vIsPerspective;
|
|
1510
|
-
#endif`,
|
|
1510
|
+
#endif`,Og=`#ifdef USE_LOGDEPTHBUF
|
|
1511
1511
|
varying float vFragDepth;
|
|
1512
1512
|
varying float vIsPerspective;
|
|
1513
|
-
#endif`,
|
|
1513
|
+
#endif`,Ug=`#ifdef USE_LOGDEPTHBUF
|
|
1514
1514
|
vFragDepth = 1.0 + gl_Position.w;
|
|
1515
1515
|
vIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );
|
|
1516
|
-
#endif`,
|
|
1516
|
+
#endif`,zg=`#ifdef USE_MAP
|
|
1517
1517
|
vec4 sampledDiffuseColor = texture2D( map, vMapUv );
|
|
1518
1518
|
#ifdef DECODE_VIDEO_TEXTURE
|
|
1519
1519
|
sampledDiffuseColor = sRGBTransferEOTF( sampledDiffuseColor );
|
|
1520
1520
|
#endif
|
|
1521
1521
|
diffuseColor *= sampledDiffuseColor;
|
|
1522
|
-
#endif
|
|
1522
|
+
#endif`,Gg=`#ifdef USE_MAP
|
|
1523
1523
|
uniform sampler2D map;
|
|
1524
|
-
#endif`,
|
|
1524
|
+
#endif`,kg=`#if defined( USE_MAP ) || defined( USE_ALPHAMAP )
|
|
1525
1525
|
#if defined( USE_POINTS_UV )
|
|
1526
1526
|
vec2 uv = vUv;
|
|
1527
1527
|
#else
|
|
@@ -1533,7 +1533,7 @@ IncidentLight directLight;
|
|
|
1533
1533
|
#endif
|
|
1534
1534
|
#ifdef USE_ALPHAMAP
|
|
1535
1535
|
diffuseColor.a *= texture2D( alphaMap, uv ).g;
|
|
1536
|
-
#endif`,
|
|
1536
|
+
#endif`,Hg=`#if defined( USE_POINTS_UV )
|
|
1537
1537
|
varying vec2 vUv;
|
|
1538
1538
|
#else
|
|
1539
1539
|
#if defined( USE_MAP ) || defined( USE_ALPHAMAP )
|
|
@@ -1545,19 +1545,19 @@ IncidentLight directLight;
|
|
|
1545
1545
|
#endif
|
|
1546
1546
|
#ifdef USE_ALPHAMAP
|
|
1547
1547
|
uniform sampler2D alphaMap;
|
|
1548
|
-
#endif`,
|
|
1548
|
+
#endif`,Vg=`float metalnessFactor = metalness;
|
|
1549
1549
|
#ifdef USE_METALNESSMAP
|
|
1550
1550
|
vec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv );
|
|
1551
1551
|
metalnessFactor *= texelMetalness.b;
|
|
1552
|
-
#endif`,
|
|
1552
|
+
#endif`,Wg=`#ifdef USE_METALNESSMAP
|
|
1553
1553
|
uniform sampler2D metalnessMap;
|
|
1554
|
-
#endif`,
|
|
1554
|
+
#endif`,Yg=`#ifdef USE_INSTANCING_MORPH
|
|
1555
1555
|
float morphTargetInfluences[ MORPHTARGETS_COUNT ];
|
|
1556
1556
|
float morphTargetBaseInfluence = texelFetch( morphTexture, ivec2( 0, gl_InstanceID ), 0 ).r;
|
|
1557
1557
|
for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {
|
|
1558
1558
|
morphTargetInfluences[i] = texelFetch( morphTexture, ivec2( i + 1, gl_InstanceID ), 0 ).r;
|
|
1559
1559
|
}
|
|
1560
|
-
#endif`,
|
|
1560
|
+
#endif`,Xg=`#if defined( USE_MORPHCOLORS )
|
|
1561
1561
|
vColor *= morphTargetBaseInfluence;
|
|
1562
1562
|
for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {
|
|
1563
1563
|
#if defined( USE_COLOR_ALPHA )
|
|
@@ -1566,12 +1566,12 @@ IncidentLight directLight;
|
|
|
1566
1566
|
if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];
|
|
1567
1567
|
#endif
|
|
1568
1568
|
}
|
|
1569
|
-
#endif`,
|
|
1569
|
+
#endif`,Zg=`#ifdef USE_MORPHNORMALS
|
|
1570
1570
|
objectNormal *= morphTargetBaseInfluence;
|
|
1571
1571
|
for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {
|
|
1572
1572
|
if ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];
|
|
1573
1573
|
}
|
|
1574
|
-
#endif`,
|
|
1574
|
+
#endif`,Jg=`#ifdef USE_MORPHTARGETS
|
|
1575
1575
|
#ifndef USE_INSTANCING_MORPH
|
|
1576
1576
|
uniform float morphTargetBaseInfluence;
|
|
1577
1577
|
uniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];
|
|
@@ -1585,12 +1585,12 @@ IncidentLight directLight;
|
|
|
1585
1585
|
ivec3 morphUV = ivec3( x, y, morphTargetIndex );
|
|
1586
1586
|
return texelFetch( morphTargetsTexture, morphUV, 0 );
|
|
1587
1587
|
}
|
|
1588
|
-
#endif`,
|
|
1588
|
+
#endif`,jg=`#ifdef USE_MORPHTARGETS
|
|
1589
1589
|
transformed *= morphTargetBaseInfluence;
|
|
1590
1590
|
for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {
|
|
1591
1591
|
if ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];
|
|
1592
1592
|
}
|
|
1593
|
-
#endif`,
|
|
1593
|
+
#endif`,Qg=`float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;
|
|
1594
1594
|
#ifdef FLAT_SHADED
|
|
1595
1595
|
vec3 fdx = dFdx( vViewPosition );
|
|
1596
1596
|
vec3 fdy = dFdy( vViewPosition );
|
|
@@ -1631,7 +1631,7 @@ IncidentLight directLight;
|
|
|
1631
1631
|
tbn2[1] *= faceDirection;
|
|
1632
1632
|
#endif
|
|
1633
1633
|
#endif
|
|
1634
|
-
vec3 nonPerturbedNormal = normal;`,
|
|
1634
|
+
vec3 nonPerturbedNormal = normal;`,qg=`#ifdef USE_NORMALMAP_OBJECTSPACE
|
|
1635
1635
|
normal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;
|
|
1636
1636
|
#ifdef FLIP_SIDED
|
|
1637
1637
|
normal = - normal;
|
|
@@ -1646,25 +1646,25 @@ vec3 nonPerturbedNormal = normal;`,Ap=`#ifdef USE_NORMALMAP_OBJECTSPACE
|
|
|
1646
1646
|
normal = normalize( tbn * mapN );
|
|
1647
1647
|
#elif defined( USE_BUMPMAP )
|
|
1648
1648
|
normal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );
|
|
1649
|
-
#endif`,
|
|
1649
|
+
#endif`,Kg=`#ifndef FLAT_SHADED
|
|
1650
1650
|
varying vec3 vNormal;
|
|
1651
1651
|
#ifdef USE_TANGENT
|
|
1652
1652
|
varying vec3 vTangent;
|
|
1653
1653
|
varying vec3 vBitangent;
|
|
1654
1654
|
#endif
|
|
1655
|
-
#endif
|
|
1655
|
+
#endif`,$g=`#ifndef FLAT_SHADED
|
|
1656
1656
|
varying vec3 vNormal;
|
|
1657
1657
|
#ifdef USE_TANGENT
|
|
1658
1658
|
varying vec3 vTangent;
|
|
1659
1659
|
varying vec3 vBitangent;
|
|
1660
1660
|
#endif
|
|
1661
|
-
#endif`,
|
|
1661
|
+
#endif`,tp=`#ifndef FLAT_SHADED
|
|
1662
1662
|
vNormal = normalize( transformedNormal );
|
|
1663
1663
|
#ifdef USE_TANGENT
|
|
1664
1664
|
vTangent = normalize( transformedTangent );
|
|
1665
1665
|
vBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );
|
|
1666
1666
|
#endif
|
|
1667
|
-
#endif`,
|
|
1667
|
+
#endif`,ep=`#ifdef USE_NORMALMAP
|
|
1668
1668
|
uniform sampler2D normalMap;
|
|
1669
1669
|
uniform vec2 normalScale;
|
|
1670
1670
|
#endif
|
|
@@ -1686,13 +1686,13 @@ vec3 nonPerturbedNormal = normal;`,Ap=`#ifdef USE_NORMALMAP_OBJECTSPACE
|
|
|
1686
1686
|
float scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det );
|
|
1687
1687
|
return mat3( T * scale, B * scale, N );
|
|
1688
1688
|
}
|
|
1689
|
-
#endif`,
|
|
1689
|
+
#endif`,ip=`#ifdef USE_CLEARCOAT
|
|
1690
1690
|
vec3 clearcoatNormal = nonPerturbedNormal;
|
|
1691
|
-
#endif`,
|
|
1691
|
+
#endif`,np=`#ifdef USE_CLEARCOAT_NORMALMAP
|
|
1692
1692
|
vec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0;
|
|
1693
1693
|
clearcoatMapN.xy *= clearcoatNormalScale;
|
|
1694
1694
|
clearcoatNormal = normalize( tbn2 * clearcoatMapN );
|
|
1695
|
-
#endif`,
|
|
1695
|
+
#endif`,sp=`#ifdef USE_CLEARCOATMAP
|
|
1696
1696
|
uniform sampler2D clearcoatMap;
|
|
1697
1697
|
#endif
|
|
1698
1698
|
#ifdef USE_CLEARCOAT_NORMALMAP
|
|
@@ -1701,18 +1701,18 @@ vec3 nonPerturbedNormal = normal;`,Ap=`#ifdef USE_NORMALMAP_OBJECTSPACE
|
|
|
1701
1701
|
#endif
|
|
1702
1702
|
#ifdef USE_CLEARCOAT_ROUGHNESSMAP
|
|
1703
1703
|
uniform sampler2D clearcoatRoughnessMap;
|
|
1704
|
-
#endif`,
|
|
1704
|
+
#endif`,rp=`#ifdef USE_IRIDESCENCEMAP
|
|
1705
1705
|
uniform sampler2D iridescenceMap;
|
|
1706
1706
|
#endif
|
|
1707
1707
|
#ifdef USE_IRIDESCENCE_THICKNESSMAP
|
|
1708
1708
|
uniform sampler2D iridescenceThicknessMap;
|
|
1709
|
-
#endif`,
|
|
1709
|
+
#endif`,ap=`#ifdef OPAQUE
|
|
1710
1710
|
diffuseColor.a = 1.0;
|
|
1711
1711
|
#endif
|
|
1712
1712
|
#ifdef USE_TRANSMISSION
|
|
1713
1713
|
diffuseColor.a *= material.transmissionAlpha;
|
|
1714
1714
|
#endif
|
|
1715
|
-
gl_FragColor = vec4( outgoingLight, diffuseColor.a );`,
|
|
1715
|
+
gl_FragColor = vec4( outgoingLight, diffuseColor.a );`,op=`vec3 packNormalToRGB( const in vec3 normal ) {
|
|
1716
1716
|
return normalize( normal ) * 0.5 + 0.5;
|
|
1717
1717
|
}
|
|
1718
1718
|
vec3 unpackRGBToNormal( const in vec3 rgb ) {
|
|
@@ -1781,9 +1781,9 @@ float viewZToPerspectiveDepth( const in float viewZ, const in float near, const
|
|
|
1781
1781
|
}
|
|
1782
1782
|
float perspectiveDepthToViewZ( const in float depth, const in float near, const in float far ) {
|
|
1783
1783
|
return ( near * far ) / ( ( far - near ) * depth - far );
|
|
1784
|
-
}`,
|
|
1784
|
+
}`,Ap=`#ifdef PREMULTIPLIED_ALPHA
|
|
1785
1785
|
gl_FragColor.rgb *= gl_FragColor.a;
|
|
1786
|
-
#endif`,
|
|
1786
|
+
#endif`,lp=`vec4 mvPosition = vec4( transformed, 1.0 );
|
|
1787
1787
|
#ifdef USE_BATCHING
|
|
1788
1788
|
mvPosition = batchingMatrix * mvPosition;
|
|
1789
1789
|
#endif
|
|
@@ -1791,22 +1791,22 @@ float perspectiveDepthToViewZ( const in float depth, const in float near, const
|
|
|
1791
1791
|
mvPosition = instanceMatrix * mvPosition;
|
|
1792
1792
|
#endif
|
|
1793
1793
|
mvPosition = modelViewMatrix * mvPosition;
|
|
1794
|
-
gl_Position = projectionMatrix * mvPosition;`,
|
|
1794
|
+
gl_Position = projectionMatrix * mvPosition;`,hp=`#ifdef DITHERING
|
|
1795
1795
|
gl_FragColor.rgb = dithering( gl_FragColor.rgb );
|
|
1796
|
-
#endif`,
|
|
1796
|
+
#endif`,cp=`#ifdef DITHERING
|
|
1797
1797
|
vec3 dithering( vec3 color ) {
|
|
1798
1798
|
float grid_position = rand( gl_FragCoord.xy );
|
|
1799
1799
|
vec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );
|
|
1800
1800
|
dither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );
|
|
1801
1801
|
return color + dither_shift_RGB;
|
|
1802
1802
|
}
|
|
1803
|
-
#endif`,
|
|
1803
|
+
#endif`,up=`float roughnessFactor = roughness;
|
|
1804
1804
|
#ifdef USE_ROUGHNESSMAP
|
|
1805
1805
|
vec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv );
|
|
1806
1806
|
roughnessFactor *= texelRoughness.g;
|
|
1807
|
-
#endif`,
|
|
1807
|
+
#endif`,dp=`#ifdef USE_ROUGHNESSMAP
|
|
1808
1808
|
uniform sampler2D roughnessMap;
|
|
1809
|
-
#endif`,
|
|
1809
|
+
#endif`,fp=`#if NUM_SPOT_LIGHT_COORDS > 0
|
|
1810
1810
|
varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];
|
|
1811
1811
|
#endif
|
|
1812
1812
|
#if NUM_SPOT_LIGHT_MAPS > 0
|
|
@@ -2001,7 +2001,7 @@ gl_Position = projectionMatrix * mvPosition;`,Sp=`#ifdef DITHERING
|
|
|
2001
2001
|
}
|
|
2002
2002
|
return mix( 1.0, shadow, shadowIntensity );
|
|
2003
2003
|
}
|
|
2004
|
-
#endif`,
|
|
2004
|
+
#endif`,gp=`#if NUM_SPOT_LIGHT_COORDS > 0
|
|
2005
2005
|
uniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ];
|
|
2006
2006
|
varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];
|
|
2007
2007
|
#endif
|
|
@@ -2042,7 +2042,7 @@ gl_Position = projectionMatrix * mvPosition;`,Sp=`#ifdef DITHERING
|
|
|
2042
2042
|
};
|
|
2043
2043
|
uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];
|
|
2044
2044
|
#endif
|
|
2045
|
-
#endif`,
|
|
2045
|
+
#endif`,pp=`#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 )
|
|
2046
2046
|
vec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );
|
|
2047
2047
|
vec4 shadowWorldPosition;
|
|
2048
2048
|
#endif
|
|
@@ -2074,7 +2074,7 @@ gl_Position = projectionMatrix * mvPosition;`,Sp=`#ifdef DITHERING
|
|
|
2074
2074
|
vSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition;
|
|
2075
2075
|
}
|
|
2076
2076
|
#pragma unroll_loop_end
|
|
2077
|
-
#endif`,
|
|
2077
|
+
#endif`,mp=`float getShadowMask() {
|
|
2078
2078
|
float shadow = 1.0;
|
|
2079
2079
|
#ifdef USE_SHADOWMAP
|
|
2080
2080
|
#if NUM_DIR_LIGHT_SHADOWS > 0
|
|
@@ -2106,12 +2106,12 @@ gl_Position = projectionMatrix * mvPosition;`,Sp=`#ifdef DITHERING
|
|
|
2106
2106
|
#endif
|
|
2107
2107
|
#endif
|
|
2108
2108
|
return shadow;
|
|
2109
|
-
}`,
|
|
2109
|
+
}`,Ip=`#ifdef USE_SKINNING
|
|
2110
2110
|
mat4 boneMatX = getBoneMatrix( skinIndex.x );
|
|
2111
2111
|
mat4 boneMatY = getBoneMatrix( skinIndex.y );
|
|
2112
2112
|
mat4 boneMatZ = getBoneMatrix( skinIndex.z );
|
|
2113
2113
|
mat4 boneMatW = getBoneMatrix( skinIndex.w );
|
|
2114
|
-
#endif`,
|
|
2114
|
+
#endif`,Cp=`#ifdef USE_SKINNING
|
|
2115
2115
|
uniform mat4 bindMatrix;
|
|
2116
2116
|
uniform mat4 bindMatrixInverse;
|
|
2117
2117
|
uniform highp sampler2D boneTexture;
|
|
@@ -2126,7 +2126,7 @@ gl_Position = projectionMatrix * mvPosition;`,Sp=`#ifdef DITHERING
|
|
|
2126
2126
|
vec4 v4 = texelFetch( boneTexture, ivec2( x + 3, y ), 0 );
|
|
2127
2127
|
return mat4( v1, v2, v3, v4 );
|
|
2128
2128
|
}
|
|
2129
|
-
#endif`,
|
|
2129
|
+
#endif`,vp=`#ifdef USE_SKINNING
|
|
2130
2130
|
vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );
|
|
2131
2131
|
vec4 skinned = vec4( 0.0 );
|
|
2132
2132
|
skinned += boneMatX * skinVertex * skinWeight.x;
|
|
@@ -2134,7 +2134,7 @@ gl_Position = projectionMatrix * mvPosition;`,Sp=`#ifdef DITHERING
|
|
|
2134
2134
|
skinned += boneMatZ * skinVertex * skinWeight.z;
|
|
2135
2135
|
skinned += boneMatW * skinVertex * skinWeight.w;
|
|
2136
2136
|
transformed = ( bindMatrixInverse * skinned ).xyz;
|
|
2137
|
-
#endif`,
|
|
2137
|
+
#endif`,xp=`#ifdef USE_SKINNING
|
|
2138
2138
|
mat4 skinMatrix = mat4( 0.0 );
|
|
2139
2139
|
skinMatrix += skinWeight.x * boneMatX;
|
|
2140
2140
|
skinMatrix += skinWeight.y * boneMatY;
|
|
@@ -2145,17 +2145,17 @@ gl_Position = projectionMatrix * mvPosition;`,Sp=`#ifdef DITHERING
|
|
|
2145
2145
|
#ifdef USE_TANGENT
|
|
2146
2146
|
objectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;
|
|
2147
2147
|
#endif
|
|
2148
|
-
#endif`,
|
|
2148
|
+
#endif`,Ep=`float specularStrength;
|
|
2149
2149
|
#ifdef USE_SPECULARMAP
|
|
2150
2150
|
vec4 texelSpecular = texture2D( specularMap, vSpecularMapUv );
|
|
2151
2151
|
specularStrength = texelSpecular.r;
|
|
2152
2152
|
#else
|
|
2153
2153
|
specularStrength = 1.0;
|
|
2154
|
-
#endif`,
|
|
2154
|
+
#endif`,Sp=`#ifdef USE_SPECULARMAP
|
|
2155
2155
|
uniform sampler2D specularMap;
|
|
2156
|
-
#endif`,
|
|
2156
|
+
#endif`,Mp=`#if defined( TONE_MAPPING )
|
|
2157
2157
|
gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );
|
|
2158
|
-
#endif`,
|
|
2158
|
+
#endif`,yp=`#ifndef saturate
|
|
2159
2159
|
#define saturate( a ) clamp( a, 0.0, 1.0 )
|
|
2160
2160
|
#endif
|
|
2161
2161
|
uniform float toneMappingExposure;
|
|
@@ -2252,7 +2252,7 @@ vec3 NeutralToneMapping( vec3 color ) {
|
|
|
2252
2252
|
float g = 1. - 1. / ( Desaturation * ( peak - newPeak ) + 1. );
|
|
2253
2253
|
return mix( color, vec3( newPeak ), g );
|
|
2254
2254
|
}
|
|
2255
|
-
vec3 CustomToneMapping( vec3 color ) { return color; }`,
|
|
2255
|
+
vec3 CustomToneMapping( vec3 color ) { return color; }`,bp=`#ifdef USE_TRANSMISSION
|
|
2256
2256
|
material.transmission = transmission;
|
|
2257
2257
|
material.transmissionAlpha = 1.0;
|
|
2258
2258
|
material.thickness = thickness;
|
|
@@ -2273,7 +2273,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,zp=`#ifdef USE_TRANSMISS
|
|
|
2273
2273
|
material.attenuationColor, material.attenuationDistance );
|
|
2274
2274
|
material.transmissionAlpha = mix( material.transmissionAlpha, transmitted.a, material.transmission );
|
|
2275
2275
|
totalDiffuse = mix( totalDiffuse, transmitted.rgb, material.transmission );
|
|
2276
|
-
#endif`,
|
|
2276
|
+
#endif`,Tp=`#ifdef USE_TRANSMISSION
|
|
2277
2277
|
uniform float transmission;
|
|
2278
2278
|
uniform float thickness;
|
|
2279
2279
|
uniform float attenuationDistance;
|
|
@@ -2399,7 +2399,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,zp=`#ifdef USE_TRANSMISS
|
|
|
2399
2399
|
float transmittanceFactor = ( transmittance.r + transmittance.g + transmittance.b ) / 3.0;
|
|
2400
2400
|
return vec4( ( 1.0 - F ) * attenuatedColor, 1.0 - ( 1.0 - transmittedLight.a ) * transmittanceFactor );
|
|
2401
2401
|
}
|
|
2402
|
-
#endif`,
|
|
2402
|
+
#endif`,wp=`#if defined( USE_UV ) || defined( USE_ANISOTROPY )
|
|
2403
2403
|
varying vec2 vUv;
|
|
2404
2404
|
#endif
|
|
2405
2405
|
#ifdef USE_MAP
|
|
@@ -2469,7 +2469,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,zp=`#ifdef USE_TRANSMISS
|
|
|
2469
2469
|
#ifdef USE_THICKNESSMAP
|
|
2470
2470
|
uniform mat3 thicknessMapTransform;
|
|
2471
2471
|
varying vec2 vThicknessMapUv;
|
|
2472
|
-
#endif`,
|
|
2472
|
+
#endif`,Rp=`#if defined( USE_UV ) || defined( USE_ANISOTROPY )
|
|
2473
2473
|
varying vec2 vUv;
|
|
2474
2474
|
#endif
|
|
2475
2475
|
#ifdef USE_MAP
|
|
@@ -2563,7 +2563,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,zp=`#ifdef USE_TRANSMISS
|
|
|
2563
2563
|
#ifdef USE_THICKNESSMAP
|
|
2564
2564
|
uniform mat3 thicknessMapTransform;
|
|
2565
2565
|
varying vec2 vThicknessMapUv;
|
|
2566
|
-
#endif`,
|
|
2566
|
+
#endif`,_p=`#if defined( USE_UV ) || defined( USE_ANISOTROPY )
|
|
2567
2567
|
vUv = vec3( uv, 1 ).xy;
|
|
2568
2568
|
#endif
|
|
2569
2569
|
#ifdef USE_MAP
|
|
@@ -2634,7 +2634,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,zp=`#ifdef USE_TRANSMISS
|
|
|
2634
2634
|
#endif
|
|
2635
2635
|
#ifdef USE_THICKNESSMAP
|
|
2636
2636
|
vThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy;
|
|
2637
|
-
#endif`,
|
|
2637
|
+
#endif`,Pp=`#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0
|
|
2638
2638
|
vec4 worldPosition = vec4( transformed, 1.0 );
|
|
2639
2639
|
#ifdef USE_BATCHING
|
|
2640
2640
|
worldPosition = batchingMatrix * worldPosition;
|
|
@@ -2643,7 +2643,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,zp=`#ifdef USE_TRANSMISS
|
|
|
2643
2643
|
worldPosition = instanceMatrix * worldPosition;
|
|
2644
2644
|
#endif
|
|
2645
2645
|
worldPosition = modelMatrix * worldPosition;
|
|
2646
|
-
#endif`;const
|
|
2646
|
+
#endif`;const Ft={alphahash_fragment:Lf,alphahash_pars_fragment:Nf,alphamap_fragment:Bf,alphamap_pars_fragment:Ff,alphatest_fragment:Of,alphatest_pars_fragment:Uf,aomap_fragment:zf,aomap_pars_fragment:Gf,batching_pars_vertex:kf,batching_vertex:Hf,begin_vertex:Vf,beginnormal_vertex:Wf,bsdfs:Yf,iridescence_fragment:Xf,bumpmap_pars_fragment:Zf,clipping_planes_fragment:Jf,clipping_planes_pars_fragment:jf,clipping_planes_pars_vertex:Qf,clipping_planes_vertex:qf,color_fragment:Kf,color_pars_fragment:$f,color_pars_vertex:tg,color_vertex:eg,common:ig,cube_uv_reflection_fragment:ng,defaultnormal_vertex:sg,displacementmap_pars_vertex:rg,displacementmap_vertex:ag,emissivemap_fragment:og,emissivemap_pars_fragment:Ag,colorspace_fragment:lg,colorspace_pars_fragment:hg,envmap_fragment:cg,envmap_common_pars_fragment:ug,envmap_pars_fragment:dg,envmap_pars_vertex:fg,envmap_physical_pars_fragment:yg,envmap_vertex:gg,fog_vertex:pg,fog_pars_vertex:mg,fog_fragment:Ig,fog_pars_fragment:Cg,gradientmap_pars_fragment:vg,lightmap_pars_fragment:xg,lights_lambert_fragment:Eg,lights_lambert_pars_fragment:Sg,lights_pars_begin:Mg,lights_toon_fragment:bg,lights_toon_pars_fragment:Tg,lights_phong_fragment:wg,lights_phong_pars_fragment:Rg,lights_physical_fragment:_g,lights_physical_pars_fragment:Pg,lights_fragment_begin:Dg,lights_fragment_maps:Lg,lights_fragment_end:Ng,logdepthbuf_fragment:Bg,logdepthbuf_pars_fragment:Fg,logdepthbuf_pars_vertex:Og,logdepthbuf_vertex:Ug,map_fragment:zg,map_pars_fragment:Gg,map_particle_fragment:kg,map_particle_pars_fragment:Hg,metalnessmap_fragment:Vg,metalnessmap_pars_fragment:Wg,morphinstance_vertex:Yg,morphcolor_vertex:Xg,morphnormal_vertex:Zg,morphtarget_pars_vertex:Jg,morphtarget_vertex:jg,normal_fragment_begin:Qg,normal_fragment_maps:qg,normal_pars_fragment:Kg,normal_pars_vertex:$g,normal_vertex:tp,normalmap_pars_fragment:ep,clearcoat_normal_fragment_begin:ip,clearcoat_normal_fragment_maps:np,clearcoat_pars_fragment:sp,iridescence_pars_fragment:rp,opaque_fragment:ap,packing:op,premultiplied_alpha_fragment:Ap,project_vertex:lp,dithering_fragment:hp,dithering_pars_fragment:cp,roughnessmap_fragment:up,roughnessmap_pars_fragment:dp,shadowmap_pars_fragment:fp,shadowmap_pars_vertex:gp,shadowmap_vertex:pp,shadowmask_pars_fragment:mp,skinbase_vertex:Ip,skinning_pars_vertex:Cp,skinning_vertex:vp,skinnormal_vertex:xp,specularmap_fragment:Ep,specularmap_pars_fragment:Sp,tonemapping_fragment:Mp,tonemapping_pars_fragment:yp,transmission_fragment:bp,transmission_pars_fragment:Tp,uv_pars_fragment:wp,uv_pars_vertex:Rp,uv_vertex:_p,worldpos_vertex:Pp,background_vert:`varying vec2 vUv;
|
|
2647
2647
|
uniform mat3 uvTransform;
|
|
2648
2648
|
void main() {
|
|
2649
2649
|
vUv = ( uvTransform * vec3( uv, 1 ) ).xy;
|
|
@@ -3699,7 +3699,7 @@ void main() {
|
|
|
3699
3699
|
#include <tonemapping_fragment>
|
|
3700
3700
|
#include <colorspace_fragment>
|
|
3701
3701
|
#include <fog_fragment>
|
|
3702
|
-
}`},at={common:{diffuse:{value:new Wt(16777215)},opacity:{value:1},map:{value:null},mapTransform:{value:new Ot},alphaMap:{value:null},alphaMapTransform:{value:new Ot},alphaTest:{value:0}},specularmap:{specularMap:{value:null},specularMapTransform:{value:new Ot}},envmap:{envMap:{value:null},envMapRotation:{value:new Ot},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1},aoMapTransform:{value:new Ot}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1},lightMapTransform:{value:new Ot}},bumpmap:{bumpMap:{value:null},bumpMapTransform:{value:new Ot},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalMapTransform:{value:new Ot},normalScale:{value:new Nt(1,1)}},displacementmap:{displacementMap:{value:null},displacementMapTransform:{value:new Ot},displacementScale:{value:1},displacementBias:{value:0}},emissivemap:{emissiveMap:{value:null},emissiveMapTransform:{value:new Ot}},metalnessmap:{metalnessMap:{value:null},metalnessMapTransform:{value:new Ot}},roughnessmap:{roughnessMap:{value:null},roughnessMapTransform:{value:new Ot}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new Wt(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotShadowMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new Wt(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaMapTransform:{value:new Ot},alphaTest:{value:0},uvTransform:{value:new Ot}},sprite:{diffuse:{value:new Wt(16777215)},opacity:{value:1},center:{value:new Nt(.5,.5)},rotation:{value:0},map:{value:null},mapTransform:{value:new Ot},alphaMap:{value:null},alphaMapTransform:{value:new Ot},alphaTest:{value:0}}},Mi={basic:{uniforms:De([at.common,at.specularmap,at.envmap,at.aomap,at.lightmap,at.fog]),vertexShader:Bt.meshbasic_vert,fragmentShader:Bt.meshbasic_frag},lambert:{uniforms:De([at.common,at.specularmap,at.envmap,at.aomap,at.lightmap,at.emissivemap,at.bumpmap,at.normalmap,at.displacementmap,at.fog,at.lights,{emissive:{value:new Wt(0)}}]),vertexShader:Bt.meshlambert_vert,fragmentShader:Bt.meshlambert_frag},phong:{uniforms:De([at.common,at.specularmap,at.envmap,at.aomap,at.lightmap,at.emissivemap,at.bumpmap,at.normalmap,at.displacementmap,at.fog,at.lights,{emissive:{value:new Wt(0)},specular:{value:new Wt(1118481)},shininess:{value:30}}]),vertexShader:Bt.meshphong_vert,fragmentShader:Bt.meshphong_frag},standard:{uniforms:De([at.common,at.envmap,at.aomap,at.lightmap,at.emissivemap,at.bumpmap,at.normalmap,at.displacementmap,at.roughnessmap,at.metalnessmap,at.fog,at.lights,{emissive:{value:new Wt(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:Bt.meshphysical_vert,fragmentShader:Bt.meshphysical_frag},toon:{uniforms:De([at.common,at.aomap,at.lightmap,at.emissivemap,at.bumpmap,at.normalmap,at.displacementmap,at.gradientmap,at.fog,at.lights,{emissive:{value:new Wt(0)}}]),vertexShader:Bt.meshtoon_vert,fragmentShader:Bt.meshtoon_frag},matcap:{uniforms:De([at.common,at.bumpmap,at.normalmap,at.displacementmap,at.fog,{matcap:{value:null}}]),vertexShader:Bt.meshmatcap_vert,fragmentShader:Bt.meshmatcap_frag},points:{uniforms:De([at.points,at.fog]),vertexShader:Bt.points_vert,fragmentShader:Bt.points_frag},dashed:{uniforms:De([at.common,at.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:Bt.linedashed_vert,fragmentShader:Bt.linedashed_frag},depth:{uniforms:De([at.common,at.displacementmap]),vertexShader:Bt.depth_vert,fragmentShader:Bt.depth_frag},normal:{uniforms:De([at.common,at.bumpmap,at.normalmap,at.displacementmap,{opacity:{value:1}}]),vertexShader:Bt.meshnormal_vert,fragmentShader:Bt.meshnormal_frag},sprite:{uniforms:De([at.sprite,at.fog]),vertexShader:Bt.sprite_vert,fragmentShader:Bt.sprite_frag},background:{uniforms:{uvTransform:{value:new Ot},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:Bt.background_vert,fragmentShader:Bt.background_frag},backgroundCube:{uniforms:{envMap:{value:null},flipEnvMap:{value:-1},backgroundBlurriness:{value:0},backgroundIntensity:{value:1},backgroundRotation:{value:new Ot}},vertexShader:Bt.backgroundCube_vert,fragmentShader:Bt.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:Bt.cube_vert,fragmentShader:Bt.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:Bt.equirect_vert,fragmentShader:Bt.equirect_frag},distanceRGBA:{uniforms:De([at.common,at.displacementmap,{referencePosition:{value:new O},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:Bt.distanceRGBA_vert,fragmentShader:Bt.distanceRGBA_frag},shadow:{uniforms:De([at.lights,at.fog,{color:{value:new Wt(0)},opacity:{value:1}}]),vertexShader:Bt.shadow_vert,fragmentShader:Bt.shadow_frag}};Mi.physical={uniforms:De([Mi.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatMapTransform:{value:new Ot},clearcoatNormalMap:{value:null},clearcoatNormalMapTransform:{value:new Ot},clearcoatNormalScale:{value:new Nt(1,1)},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatRoughnessMapTransform:{value:new Ot},dispersion:{value:0},iridescence:{value:0},iridescenceMap:{value:null},iridescenceMapTransform:{value:new Ot},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},iridescenceThicknessMapTransform:{value:new Ot},sheen:{value:0},sheenColor:{value:new Wt(0)},sheenColorMap:{value:null},sheenColorMapTransform:{value:new Ot},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},sheenRoughnessMapTransform:{value:new Ot},transmission:{value:0},transmissionMap:{value:null},transmissionMapTransform:{value:new Ot},transmissionSamplerSize:{value:new Nt},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},thicknessMapTransform:{value:new Ot},attenuationDistance:{value:0},attenuationColor:{value:new Wt(0)},specularColor:{value:new Wt(1,1,1)},specularColorMap:{value:null},specularColorMapTransform:{value:new Ot},specularIntensity:{value:1},specularIntensityMap:{value:null},specularIntensityMapTransform:{value:new Ot},anisotropyVector:{value:new Nt},anisotropyMap:{value:null},anisotropyMapTransform:{value:new Ot}}]),vertexShader:Bt.meshphysical_vert,fragmentShader:Bt.meshphysical_frag};const ra={r:0,b:0,g:0},Un=new Si,Yp=new de;function Xp(s,t,e,i,n,r,a){const o=new Wt(0);let h=r===!0?0:1,l,A,c=null,u=0,d=null;function p(S){let v=S.isScene===!0?S.background:null;return v&&v.isTexture&&(v=(S.backgroundBlurriness>0?e:t).get(v)),v}function m(S){let v=!1;const T=p(S);T===null?f(o,h):T&&T.isColor&&(f(T,1),v=!0);const _=s.xr.getEnvironmentBlendMode();_==="additive"?i.buffers.color.setClear(0,0,0,1,a):_==="alpha-blend"&&i.buffers.color.setClear(0,0,0,0,a),(s.autoClear||v)&&(i.buffers.depth.setTest(!0),i.buffers.depth.setMask(!0),i.buffers.color.setMask(!0),s.clear(s.autoClearColor,s.autoClearDepth,s.autoClearStencil))}function g(S,v){const T=p(v);T&&(T.isCubeTexture||T.mapping===Pr)?(A===void 0&&(A=new Ci(new Ms(1,1,1),new cn({name:"BackgroundCubeMaterial",uniforms:bs(Mi.backgroundCube.uniforms),vertexShader:Mi.backgroundCube.vertexShader,fragmentShader:Mi.backgroundCube.fragmentShader,side:Ue,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),A.geometry.deleteAttribute("normal"),A.geometry.deleteAttribute("uv"),A.onBeforeRender=function(_,w,P){this.matrixWorld.copyPosition(P.matrixWorld)},Object.defineProperty(A.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),n.update(A)),Un.copy(v.backgroundRotation),Un.x*=-1,Un.y*=-1,Un.z*=-1,T.isCubeTexture&&T.isRenderTargetTexture===!1&&(Un.y*=-1,Un.z*=-1),A.material.uniforms.envMap.value=T,A.material.uniforms.flipEnvMap.value=T.isCubeTexture&&T.isRenderTargetTexture===!1?-1:1,A.material.uniforms.backgroundBlurriness.value=v.backgroundBlurriness,A.material.uniforms.backgroundIntensity.value=v.backgroundIntensity,A.material.uniforms.backgroundRotation.value.setFromMatrix4(Yp.makeRotationFromEuler(Un)),A.material.toneMapped=Xt.getTransfer(T.colorSpace)!==qt,(c!==T||u!==T.version||d!==s.toneMapping)&&(A.material.needsUpdate=!0,c=T,u=T.version,d=s.toneMapping),A.layers.enableAll(),S.unshift(A,A.geometry,A.material,0,0,null)):T&&T.isTexture&&(l===void 0&&(l=new Ci(new or(2,2),new cn({name:"BackgroundMaterial",uniforms:bs(Mi.background.uniforms),vertexShader:Mi.background.vertexShader,fragmentShader:Mi.background.fragmentShader,side:en,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),l.geometry.deleteAttribute("normal"),Object.defineProperty(l.material,"map",{get:function(){return this.uniforms.t2D.value}}),n.update(l)),l.material.uniforms.t2D.value=T,l.material.uniforms.backgroundIntensity.value=v.backgroundIntensity,l.material.toneMapped=Xt.getTransfer(T.colorSpace)!==qt,T.matrixAutoUpdate===!0&&T.updateMatrix(),l.material.uniforms.uvTransform.value.copy(T.matrix),(c!==T||u!==T.version||d!==s.toneMapping)&&(l.material.needsUpdate=!0,c=T,u=T.version,d=s.toneMapping),l.layers.enableAll(),S.unshift(l,l.geometry,l.material,0,0,null))}function f(S,v){S.getRGB(ra,mA(s)),i.buffers.color.setClear(ra.r,ra.g,ra.b,v,a)}function M(){A!==void 0&&(A.geometry.dispose(),A.material.dispose(),A=void 0),l!==void 0&&(l.geometry.dispose(),l.material.dispose(),l=void 0)}return{getClearColor:function(){return o},setClearColor:function(S,v=1){o.set(S),h=v,f(o,h)},getClearAlpha:function(){return h},setClearAlpha:function(S){h=S,f(o,h)},render:m,addToRenderList:g,dispose:M}}function Zp(s,t){const e=s.getParameter(s.MAX_VERTEX_ATTRIBS),i={},n=u(null);let r=n,a=!1;function o(x,b,z,F,U){let W=!1;const Y=c(F,z,b);r!==Y&&(r=Y,l(r.object)),W=d(x,F,z,U),W&&p(x,F,z,U),U!==null&&t.update(U,s.ELEMENT_ARRAY_BUFFER),(W||a)&&(a=!1,v(x,b,z,F),U!==null&&s.bindBuffer(s.ELEMENT_ARRAY_BUFFER,t.get(U).buffer))}function h(){return s.createVertexArray()}function l(x){return s.bindVertexArray(x)}function A(x){return s.deleteVertexArray(x)}function c(x,b,z){const F=z.wireframe===!0;let U=i[x.id];U===void 0&&(U={},i[x.id]=U);let W=U[b.id];W===void 0&&(W={},U[b.id]=W);let Y=W[F];return Y===void 0&&(Y=u(h()),W[F]=Y),Y}function u(x){const b=[],z=[],F=[];for(let U=0;U<e;U++)b[U]=0,z[U]=0,F[U]=0;return{geometry:null,program:null,wireframe:!1,newAttributes:b,enabledAttributes:z,attributeDivisors:F,object:x,attributes:{},index:null}}function d(x,b,z,F){const U=r.attributes,W=b.attributes;let Y=0;const $=z.getAttributes();for(const H in $)if($[H].location>=0){const ht=U[H];let mt=W[H];if(mt===void 0&&(H==="instanceMatrix"&&x.instanceMatrix&&(mt=x.instanceMatrix),H==="instanceColor"&&x.instanceColor&&(mt=x.instanceColor)),ht===void 0||ht.attribute!==mt||mt&&ht.data!==mt.data)return!0;Y++}return r.attributesNum!==Y||r.index!==F}function p(x,b,z,F){const U={},W=b.attributes;let Y=0;const $=z.getAttributes();for(const H in $)if($[H].location>=0){let ht=W[H];ht===void 0&&(H==="instanceMatrix"&&x.instanceMatrix&&(ht=x.instanceMatrix),H==="instanceColor"&&x.instanceColor&&(ht=x.instanceColor));const mt={};mt.attribute=ht,ht&&ht.data&&(mt.data=ht.data),U[H]=mt,Y++}r.attributes=U,r.attributesNum=Y,r.index=F}function m(){const x=r.newAttributes;for(let b=0,z=x.length;b<z;b++)x[b]=0}function g(x){f(x,0)}function f(x,b){const z=r.newAttributes,F=r.enabledAttributes,U=r.attributeDivisors;z[x]=1,F[x]===0&&(s.enableVertexAttribArray(x),F[x]=1),U[x]!==b&&(s.vertexAttribDivisor(x,b),U[x]=b)}function M(){const x=r.newAttributes,b=r.enabledAttributes;for(let z=0,F=b.length;z<F;z++)b[z]!==x[z]&&(s.disableVertexAttribArray(z),b[z]=0)}function S(x,b,z,F,U,W,Y){Y===!0?s.vertexAttribIPointer(x,b,z,U,W):s.vertexAttribPointer(x,b,z,F,U,W)}function v(x,b,z,F){m();const U=F.attributes,W=z.getAttributes(),Y=b.defaultAttributeValues;for(const $ in W){const H=W[$];if(H.location>=0){let rt=U[$];if(rt===void 0&&($==="instanceMatrix"&&x.instanceMatrix&&(rt=x.instanceMatrix),$==="instanceColor"&&x.instanceColor&&(rt=x.instanceColor)),rt!==void 0){const ht=rt.normalized,mt=rt.itemSize,Ut=t.get(rt);if(Ut===void 0)continue;const re=Ut.buffer,te=Ut.type,j=Ut.bytesPerElement,ot=te===s.INT||te===s.UNSIGNED_INT||rt.gpuType===oo;if(rt.isInterleavedBufferAttribute){const nt=rt.data,bt=nt.stride,_t=rt.offset;if(nt.isInstancedInterleavedBuffer){for(let Dt=0;Dt<H.locationSize;Dt++)f(H.location+Dt,nt.meshPerAttribute);x.isInstancedMesh!==!0&&F._maxInstanceCount===void 0&&(F._maxInstanceCount=nt.meshPerAttribute*nt.count)}else for(let Dt=0;Dt<H.locationSize;Dt++)g(H.location+Dt);s.bindBuffer(s.ARRAY_BUFFER,re);for(let Dt=0;Dt<H.locationSize;Dt++)S(H.location+Dt,mt/H.locationSize,te,ht,bt*j,(_t+mt/H.locationSize*Dt)*j,ot)}else{if(rt.isInstancedBufferAttribute){for(let nt=0;nt<H.locationSize;nt++)f(H.location+nt,rt.meshPerAttribute);x.isInstancedMesh!==!0&&F._maxInstanceCount===void 0&&(F._maxInstanceCount=rt.meshPerAttribute*rt.count)}else for(let nt=0;nt<H.locationSize;nt++)g(H.location+nt);s.bindBuffer(s.ARRAY_BUFFER,re);for(let nt=0;nt<H.locationSize;nt++)S(H.location+nt,mt/H.locationSize,te,ht,mt*j,mt/H.locationSize*nt*j,ot)}}else if(Y!==void 0){const ht=Y[$];if(ht!==void 0)switch(ht.length){case 2:s.vertexAttrib2fv(H.location,ht);break;case 3:s.vertexAttrib3fv(H.location,ht);break;case 4:s.vertexAttrib4fv(H.location,ht);break;default:s.vertexAttrib1fv(H.location,ht)}}}}M()}function T(){P();for(const x in i){const b=i[x];for(const z in b){const F=b[z];for(const U in F)A(F[U].object),delete F[U];delete b[z]}delete i[x]}}function _(x){if(i[x.id]===void 0)return;const b=i[x.id];for(const z in b){const F=b[z];for(const U in F)A(F[U].object),delete F[U];delete b[z]}delete i[x.id]}function w(x){for(const b in i){const z=i[b];if(z[x.id]===void 0)continue;const F=z[x.id];for(const U in F)A(F[U].object),delete F[U];delete z[x.id]}}function P(){E(),a=!0,r!==n&&(r=n,l(r.object))}function E(){n.geometry=null,n.program=null,n.wireframe=!1}return{setup:o,reset:P,resetDefaultState:E,dispose:T,releaseStatesOfGeometry:_,releaseStatesOfProgram:w,initAttributes:m,enableAttribute:g,disableUnusedAttributes:M}}function jp(s,t,e){let i;function n(l){i=l}function r(l,A){s.drawArrays(i,l,A),e.update(A,i,1)}function a(l,A,c){c!==0&&(s.drawArraysInstanced(i,l,A,c),e.update(A,i,c))}function o(l,A,c){if(c===0)return;t.get("WEBGL_multi_draw").multiDrawArraysWEBGL(i,l,0,A,0,c);let d=0;for(let p=0;p<c;p++)d+=A[p];e.update(d,i,1)}function h(l,A,c,u){if(c===0)return;const d=t.get("WEBGL_multi_draw");if(d===null)for(let p=0;p<l.length;p++)a(l[p],A[p],u[p]);else{d.multiDrawArraysInstancedWEBGL(i,l,0,A,0,u,0,c);let p=0;for(let m=0;m<c;m++)p+=A[m]*u[m];e.update(p,i,1)}}this.setMode=n,this.render=r,this.renderInstances=a,this.renderMultiDraw=o,this.renderMultiDrawInstances=h}function Jp(s,t,e,i){let n;function r(){if(n!==void 0)return n;if(t.has("EXT_texture_filter_anisotropic")===!0){const w=t.get("EXT_texture_filter_anisotropic");n=s.getParameter(w.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else n=0;return n}function a(w){return!(w!==di&&i.convert(w)!==s.getParameter(s.IMPLEMENTATION_COLOR_READ_FORMAT))}function o(w){const P=w===js&&(t.has("EXT_color_buffer_half_float")||t.has("EXT_color_buffer_float"));return!(w!==xi&&i.convert(w)!==s.getParameter(s.IMPLEMENTATION_COLOR_READ_TYPE)&&w!==Bi&&!P)}function h(w){if(w==="highp"){if(s.getShaderPrecisionFormat(s.VERTEX_SHADER,s.HIGH_FLOAT).precision>0&&s.getShaderPrecisionFormat(s.FRAGMENT_SHADER,s.HIGH_FLOAT).precision>0)return"highp";w="mediump"}return w==="mediump"&&s.getShaderPrecisionFormat(s.VERTEX_SHADER,s.MEDIUM_FLOAT).precision>0&&s.getShaderPrecisionFormat(s.FRAGMENT_SHADER,s.MEDIUM_FLOAT).precision>0?"mediump":"lowp"}let l=e.precision!==void 0?e.precision:"highp";const A=h(l);A!==l&&(console.warn("THREE.WebGLRenderer:",l,"not supported, using",A,"instead."),l=A);const c=e.logarithmicDepthBuffer===!0,u=e.reversedDepthBuffer===!0&&t.has("EXT_clip_control"),d=s.getParameter(s.MAX_TEXTURE_IMAGE_UNITS),p=s.getParameter(s.MAX_VERTEX_TEXTURE_IMAGE_UNITS),m=s.getParameter(s.MAX_TEXTURE_SIZE),g=s.getParameter(s.MAX_CUBE_MAP_TEXTURE_SIZE),f=s.getParameter(s.MAX_VERTEX_ATTRIBS),M=s.getParameter(s.MAX_VERTEX_UNIFORM_VECTORS),S=s.getParameter(s.MAX_VARYING_VECTORS),v=s.getParameter(s.MAX_FRAGMENT_UNIFORM_VECTORS),T=p>0,_=s.getParameter(s.MAX_SAMPLES);return{isWebGL2:!0,getMaxAnisotropy:r,getMaxPrecision:h,textureFormatReadable:a,textureTypeReadable:o,precision:l,logarithmicDepthBuffer:c,reversedDepthBuffer:u,maxTextures:d,maxVertexTextures:p,maxTextureSize:m,maxCubemapSize:g,maxAttributes:f,maxVertexUniforms:M,maxVaryings:S,maxFragmentUniforms:v,vertexTextures:T,maxSamples:_}}function Qp(s){const t=this;let e=null,i=0,n=!1,r=!1;const a=new dn,o=new Ot,h={value:null,needsUpdate:!1};this.uniform=h,this.numPlanes=0,this.numIntersection=0,this.init=function(c,u){const d=c.length!==0||u||i!==0||n;return n=u,i=c.length,d},this.beginShadows=function(){r=!0,A(null)},this.endShadows=function(){r=!1},this.setGlobalState=function(c,u){e=A(c,u,0)},this.setState=function(c,u,d){const p=c.clippingPlanes,m=c.clipIntersection,g=c.clipShadows,f=s.get(c);if(!n||p===null||p.length===0||r&&!g)r?A(null):l();else{const M=r?0:i,S=M*4;let v=f.clippingState||null;h.value=v,v=A(p,u,S,d);for(let T=0;T!==S;++T)v[T]=e[T];f.clippingState=v,this.numIntersection=m?this.numPlanes:0,this.numPlanes+=M}};function l(){h.value!==e&&(h.value=e,h.needsUpdate=i>0),t.numPlanes=i,t.numIntersection=0}function A(c,u,d,p){const m=c!==null?c.length:0;let g=null;if(m!==0){if(g=h.value,p!==!0||g===null){const f=d+m*4,M=u.matrixWorldInverse;o.getNormalMatrix(M),(g===null||g.length<f)&&(g=new Float32Array(f));for(let S=0,v=d;S!==m;++S,v+=4)a.copy(c[S]).applyMatrix4(M,o),a.normal.toArray(g,v),g[v+3]=a.constant}h.value=g,h.needsUpdate=!0}return t.numPlanes=m,t.numIntersection=0,g}}function qp(s){let t=new WeakMap;function e(a,o){return o===io?a.mapping=ls:o===no&&(a.mapping=hs),a}function i(a){if(a&&a.isTexture){const o=a.mapping;if(o===io||o===no)if(t.has(a)){const h=t.get(a).texture;return e(h,a.mapping)}else{const h=a.image;if(h&&h.height>0){const l=new _f(h.height);return l.fromEquirectangularTexture(s,a),t.set(a,l),a.addEventListener("dispose",n),e(l.texture,a.mapping)}else return null}}return a}function n(a){const o=a.target;o.removeEventListener("dispose",n);const h=t.get(o);h!==void 0&&(t.delete(o),h.dispose())}function r(){t=new WeakMap}return{get:i,dispose:r}}const Rs=4,OA=[.125,.215,.35,.446,.526,.582],zn=20,Cl=new wA,FA=new Wt;let Il=null,vl=0,xl=0,El=!1;const kn=(1+Math.sqrt(5))/2,Ps=1/kn,BA=[new O(-kn,Ps,0),new O(kn,Ps,0),new O(-Ps,0,kn),new O(Ps,0,kn),new O(0,kn,-Ps),new O(0,kn,Ps),new O(-1,1,-1),new O(1,1,-1),new O(-1,1,1),new O(1,1,1)],Kp=new O;class UA{constructor(t){this._renderer=t,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._lodPlanes=[],this._sizeLods=[],this._sigmas=[],this._blurMaterial=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._compileMaterial(this._blurMaterial)}fromScene(t,e=0,i=.1,n=100,r={}){const{size:a=256,position:o=Kp}=r;Il=this._renderer.getRenderTarget(),vl=this._renderer.getActiveCubeFace(),xl=this._renderer.getActiveMipmapLevel(),El=this._renderer.xr.enabled,this._renderer.xr.enabled=!1,this._setSize(a);const h=this._allocateTargets();return h.depthBuffer=!0,this._sceneToCubeUV(t,i,n,h,o),e>0&&this._blur(h,0,0,e),this._applyPMREM(h),this._cleanup(h),h}fromEquirectangular(t,e=null){return this._fromTexture(t,e)}fromCubemap(t,e=null){return this._fromTexture(t,e)}compileCubemapShader(){this._cubemapMaterial===null&&(this._cubemapMaterial=GA(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){this._equirectMaterial===null&&(this._equirectMaterial=kA(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),this._cubemapMaterial!==null&&this._cubemapMaterial.dispose(),this._equirectMaterial!==null&&this._equirectMaterial.dispose()}_setSize(t){this._lodMax=Math.floor(Math.log2(t)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){this._blurMaterial!==null&&this._blurMaterial.dispose(),this._pingPongRenderTarget!==null&&this._pingPongRenderTarget.dispose();for(let t=0;t<this._lodPlanes.length;t++)this._lodPlanes[t].dispose()}_cleanup(t){this._renderer.setRenderTarget(Il,vl,xl),this._renderer.xr.enabled=El,t.scissorTest=!1,aa(t,0,0,t.width,t.height)}_fromTexture(t,e){t.mapping===ls||t.mapping===hs?this._setSize(t.image.length===0?16:t.image[0].width||t.image[0].image.width):this._setSize(t.image.width/4),Il=this._renderer.getRenderTarget(),vl=this._renderer.getActiveCubeFace(),xl=this._renderer.getActiveMipmapLevel(),El=this._renderer.xr.enabled,this._renderer.xr.enabled=!1;const i=e||this._allocateTargets();return this._textureToCubeUV(t,i),this._applyPMREM(i),this._cleanup(i),i}_allocateTargets(){const t=3*Math.max(this._cubeSize,112),e=4*this._cubeSize,i={magFilter:vi,minFilter:vi,generateMipmaps:!1,type:js,format:di,colorSpace:As,depthBuffer:!1},n=zA(t,e,i);if(this._pingPongRenderTarget===null||this._pingPongRenderTarget.width!==t||this._pingPongRenderTarget.height!==e){this._pingPongRenderTarget!==null&&this._dispose(),this._pingPongRenderTarget=zA(t,e,i);const{_lodMax:r}=this;({sizeLods:this._sizeLods,lodPlanes:this._lodPlanes,sigmas:this._sigmas}=$p(r)),this._blurMaterial=tm(r,t,e)}return n}_compileMaterial(t){const e=new Ci(this._lodPlanes[0],t);this._renderer.compile(e,Cl)}_sceneToCubeUV(t,e,i,n,r){const h=new ke(90,1,e,i),l=[1,-1,1,1,1,1],A=[1,1,1,-1,-1,-1],c=this._renderer,u=c.autoClear,d=c.toneMapping;c.getClearColor(FA),c.toneMapping=sn,c.autoClear=!1,c.state.buffers.depth.getReversed()&&(c.setRenderTarget(n),c.clearDepth(),c.setRenderTarget(null));const m=new ol({name:"PMREM.Background",side:Ue,depthWrite:!1,depthTest:!1}),g=new Ci(new Ms,m);let f=!1;const M=t.background;M?M.isColor&&(m.color.copy(M),t.background=null,f=!0):(m.color.copy(FA),f=!0);for(let S=0;S<6;S++){const v=S%3;v===0?(h.up.set(0,l[S],0),h.position.set(r.x,r.y,r.z),h.lookAt(r.x+A[S],r.y,r.z)):v===1?(h.up.set(0,0,l[S]),h.position.set(r.x,r.y,r.z),h.lookAt(r.x,r.y+A[S],r.z)):(h.up.set(0,l[S],0),h.position.set(r.x,r.y,r.z),h.lookAt(r.x,r.y,r.z+A[S]));const T=this._cubeSize;aa(n,v*T,S>2?T:0,T,T),c.setRenderTarget(n),f&&c.render(g,h),c.render(t,h)}g.geometry.dispose(),g.material.dispose(),c.toneMapping=d,c.autoClear=u,t.background=M}_textureToCubeUV(t,e){const i=this._renderer,n=t.mapping===ls||t.mapping===hs;n?(this._cubemapMaterial===null&&(this._cubemapMaterial=GA()),this._cubemapMaterial.uniforms.flipEnvMap.value=t.isRenderTargetTexture===!1?-1:1):this._equirectMaterial===null&&(this._equirectMaterial=kA());const r=n?this._cubemapMaterial:this._equirectMaterial,a=new Ci(this._lodPlanes[0],r),o=r.uniforms;o.envMap.value=t;const h=this._cubeSize;aa(e,0,0,3*h,2*h),i.setRenderTarget(e),i.render(a,Cl)}_applyPMREM(t){const e=this._renderer,i=e.autoClear;e.autoClear=!1;const n=this._lodPlanes.length;for(let r=1;r<n;r++){const a=Math.sqrt(this._sigmas[r]*this._sigmas[r]-this._sigmas[r-1]*this._sigmas[r-1]),o=BA[(n-r-1)%BA.length];this._blur(t,r-1,r,a,o)}e.autoClear=i}_blur(t,e,i,n,r){const a=this._pingPongRenderTarget;this._halfBlur(t,a,e,i,n,"latitudinal",r),this._halfBlur(a,t,i,i,n,"longitudinal",r)}_halfBlur(t,e,i,n,r,a,o){const h=this._renderer,l=this._blurMaterial;a!=="latitudinal"&&a!=="longitudinal"&&console.error("blur direction must be either latitudinal or longitudinal!");const A=3,c=new Ci(this._lodPlanes[n],l),u=l.uniforms,d=this._sizeLods[i]-1,p=isFinite(r)?Math.PI/(2*d):2*Math.PI/(2*zn-1),m=r/p,g=isFinite(r)?1+Math.floor(A*m):zn;g>zn&&console.warn(`sigmaRadians, ${r}, is too large and will clip, as it requested ${g} samples when the maximum is set to ${zn}`);const f=[];let M=0;for(let w=0;w<zn;++w){const P=w/m,E=Math.exp(-P*P/2);f.push(E),w===0?M+=E:w<g&&(M+=2*E)}for(let w=0;w<f.length;w++)f[w]=f[w]/M;u.envMap.value=t.texture,u.samples.value=g,u.weights.value=f,u.latitudinal.value=a==="latitudinal",o&&(u.poleAxis.value=o);const{_lodMax:S}=this;u.dTheta.value=p,u.mipInt.value=S-i;const v=this._sizeLods[n],T=3*v*(n>S-Rs?n-S+Rs:0),_=4*(this._cubeSize-v);aa(e,T,_,3*v,2*v),h.setRenderTarget(e),h.render(c,Cl)}}function $p(s){const t=[],e=[],i=[];let n=s;const r=s-Rs+1+OA.length;for(let a=0;a<r;a++){const o=Math.pow(2,n);e.push(o);let h=1/o;a>s-Rs?h=OA[a-s+Rs-1]:a===0&&(h=0),i.push(h);const l=1/(o-2),A=-l,c=1+l,u=[A,A,c,A,c,c,A,A,c,c,A,c],d=6,p=6,m=3,g=2,f=1,M=new Float32Array(m*p*d),S=new Float32Array(g*p*d),v=new Float32Array(f*p*d);for(let _=0;_<d;_++){const w=_%3*2/3-1,P=_>2?0:-1,E=[w,P,0,w+2/3,P,0,w+2/3,P+1,0,w,P,0,w+2/3,P+1,0,w,P+1,0];M.set(E,m*p*_),S.set(u,g*p*_);const x=[_,_,_,_,_,_];v.set(x,f*p*_)}const T=new On;T.setAttribute("position",new yi(M,m)),T.setAttribute("uv",new yi(S,g)),T.setAttribute("faceIndex",new yi(v,f)),t.push(T),n>Rs&&n--}return{lodPlanes:t,sizeLods:e,sigmas:i}}function zA(s,t,e){const i=new Pn(s,t,e);return i.texture.mapping=Pr,i.texture.name="PMREM.cubeUv",i.scissorTest=!0,i}function aa(s,t,e,i,n){s.viewport.set(t,e,i,n),s.scissor.set(t,e,i,n)}function tm(s,t,e){const i=new Float32Array(zn),n=new O(0,1,0);return new cn({name:"SphericalGaussianBlur",defines:{n:zn,CUBEUV_TEXEL_WIDTH:1/t,CUBEUV_TEXEL_HEIGHT:1/e,CUBEUV_MAX_MIP:`${s}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:i},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:n}},vertexShader:Sl(),fragmentShader:`
|
|
3702
|
+
}`},at={common:{diffuse:{value:new Vt(16777215)},opacity:{value:1},map:{value:null},mapTransform:{value:new Nt},alphaMap:{value:null},alphaMapTransform:{value:new Nt},alphaTest:{value:0}},specularmap:{specularMap:{value:null},specularMapTransform:{value:new Nt}},envmap:{envMap:{value:null},envMapRotation:{value:new Nt},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1},aoMapTransform:{value:new Nt}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1},lightMapTransform:{value:new Nt}},bumpmap:{bumpMap:{value:null},bumpMapTransform:{value:new Nt},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalMapTransform:{value:new Nt},normalScale:{value:new Zt(1,1)}},displacementmap:{displacementMap:{value:null},displacementMapTransform:{value:new Nt},displacementScale:{value:1},displacementBias:{value:0}},emissivemap:{emissiveMap:{value:null},emissiveMapTransform:{value:new Nt}},metalnessmap:{metalnessMap:{value:null},metalnessMapTransform:{value:new Nt}},roughnessmap:{roughnessMap:{value:null},roughnessMapTransform:{value:new Nt}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new Vt(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotShadowMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new Vt(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaMapTransform:{value:new Nt},alphaTest:{value:0},uvTransform:{value:new Nt}},sprite:{diffuse:{value:new Vt(16777215)},opacity:{value:1},center:{value:new Zt(.5,.5)},rotation:{value:0},map:{value:null},mapTransform:{value:new Nt},alphaMap:{value:null},alphaMapTransform:{value:new Nt},alphaTest:{value:0}}},Ei={basic:{uniforms:_e([at.common,at.specularmap,at.envmap,at.aomap,at.lightmap,at.fog]),vertexShader:Ft.meshbasic_vert,fragmentShader:Ft.meshbasic_frag},lambert:{uniforms:_e([at.common,at.specularmap,at.envmap,at.aomap,at.lightmap,at.emissivemap,at.bumpmap,at.normalmap,at.displacementmap,at.fog,at.lights,{emissive:{value:new Vt(0)}}]),vertexShader:Ft.meshlambert_vert,fragmentShader:Ft.meshlambert_frag},phong:{uniforms:_e([at.common,at.specularmap,at.envmap,at.aomap,at.lightmap,at.emissivemap,at.bumpmap,at.normalmap,at.displacementmap,at.fog,at.lights,{emissive:{value:new Vt(0)},specular:{value:new Vt(1118481)},shininess:{value:30}}]),vertexShader:Ft.meshphong_vert,fragmentShader:Ft.meshphong_frag},standard:{uniforms:_e([at.common,at.envmap,at.aomap,at.lightmap,at.emissivemap,at.bumpmap,at.normalmap,at.displacementmap,at.roughnessmap,at.metalnessmap,at.fog,at.lights,{emissive:{value:new Vt(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:Ft.meshphysical_vert,fragmentShader:Ft.meshphysical_frag},toon:{uniforms:_e([at.common,at.aomap,at.lightmap,at.emissivemap,at.bumpmap,at.normalmap,at.displacementmap,at.gradientmap,at.fog,at.lights,{emissive:{value:new Vt(0)}}]),vertexShader:Ft.meshtoon_vert,fragmentShader:Ft.meshtoon_frag},matcap:{uniforms:_e([at.common,at.bumpmap,at.normalmap,at.displacementmap,at.fog,{matcap:{value:null}}]),vertexShader:Ft.meshmatcap_vert,fragmentShader:Ft.meshmatcap_frag},points:{uniforms:_e([at.points,at.fog]),vertexShader:Ft.points_vert,fragmentShader:Ft.points_frag},dashed:{uniforms:_e([at.common,at.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:Ft.linedashed_vert,fragmentShader:Ft.linedashed_frag},depth:{uniforms:_e([at.common,at.displacementmap]),vertexShader:Ft.depth_vert,fragmentShader:Ft.depth_frag},normal:{uniforms:_e([at.common,at.bumpmap,at.normalmap,at.displacementmap,{opacity:{value:1}}]),vertexShader:Ft.meshnormal_vert,fragmentShader:Ft.meshnormal_frag},sprite:{uniforms:_e([at.sprite,at.fog]),vertexShader:Ft.sprite_vert,fragmentShader:Ft.sprite_frag},background:{uniforms:{uvTransform:{value:new Nt},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:Ft.background_vert,fragmentShader:Ft.background_frag},backgroundCube:{uniforms:{envMap:{value:null},flipEnvMap:{value:-1},backgroundBlurriness:{value:0},backgroundIntensity:{value:1},backgroundRotation:{value:new Nt}},vertexShader:Ft.backgroundCube_vert,fragmentShader:Ft.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:Ft.cube_vert,fragmentShader:Ft.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:Ft.equirect_vert,fragmentShader:Ft.equirect_frag},distanceRGBA:{uniforms:_e([at.common,at.displacementmap,{referencePosition:{value:new B},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:Ft.distanceRGBA_vert,fragmentShader:Ft.distanceRGBA_frag},shadow:{uniforms:_e([at.lights,at.fog,{color:{value:new Vt(0)},opacity:{value:1}}]),vertexShader:Ft.shadow_vert,fragmentShader:Ft.shadow_frag}};Ei.physical={uniforms:_e([Ei.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatMapTransform:{value:new Nt},clearcoatNormalMap:{value:null},clearcoatNormalMapTransform:{value:new Nt},clearcoatNormalScale:{value:new Zt(1,1)},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatRoughnessMapTransform:{value:new Nt},dispersion:{value:0},iridescence:{value:0},iridescenceMap:{value:null},iridescenceMapTransform:{value:new Nt},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},iridescenceThicknessMapTransform:{value:new Nt},sheen:{value:0},sheenColor:{value:new Vt(0)},sheenColorMap:{value:null},sheenColorMapTransform:{value:new Nt},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},sheenRoughnessMapTransform:{value:new Nt},transmission:{value:0},transmissionMap:{value:null},transmissionMapTransform:{value:new Nt},transmissionSamplerSize:{value:new Zt},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},thicknessMapTransform:{value:new Nt},attenuationDistance:{value:0},attenuationColor:{value:new Vt(0)},specularColor:{value:new Vt(1,1,1)},specularColorMap:{value:null},specularColorMapTransform:{value:new Nt},specularIntensity:{value:1},specularIntensityMap:{value:null},specularIntensityMapTransform:{value:new Nt},anisotropyVector:{value:new Zt},anisotropyMap:{value:null},anisotropyMapTransform:{value:new Nt}}]),vertexShader:Ft.meshphysical_vert,fragmentShader:Ft.meshphysical_frag};const ta={r:0,b:0,g:0},Dn=new vi,Dp=new ue;function Lp(r,t,e,i,n,s,a){const o=new Vt(0);let l=s===!0?0:1,A,h,c=null,u=0,d=null;function p(S){let v=S.isScene===!0?S.background:null;return v&&v.isTexture&&(v=(S.backgroundBlurriness>0?e:t).get(v)),v}function m(S){let v=!1;const w=p(S);w===null?f(o,l):w&&w.isColor&&(f(w,1),v=!0);const T=r.xr.getEnvironmentBlendMode();T==="additive"?i.buffers.color.setClear(0,0,0,1,a):T==="alpha-blend"&&i.buffers.color.setClear(0,0,0,0,a),(r.autoClear||v)&&(i.buffers.depth.setTest(!0),i.buffers.depth.setMask(!0),i.buffers.color.setMask(!0),r.clear(r.autoClearColor,r.autoClearDepth,r.autoClearStencil))}function g(S,v){const w=p(v);w&&(w.isCubeTexture||w.mapping===Tr)?(h===void 0&&(h=new fi(new Cs(1,1,1),new An({name:"BackgroundCubeMaterial",uniforms:vs(Ei.backgroundCube.uniforms),vertexShader:Ei.backgroundCube.vertexShader,fragmentShader:Ei.backgroundCube.fragmentShader,side:Fe,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),h.geometry.deleteAttribute("normal"),h.geometry.deleteAttribute("uv"),h.onBeforeRender=function(T,R,P){this.matrixWorld.copyPosition(P.matrixWorld)},Object.defineProperty(h.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),n.update(h)),Dn.copy(v.backgroundRotation),Dn.x*=-1,Dn.y*=-1,Dn.z*=-1,w.isCubeTexture&&w.isRenderTargetTexture===!1&&(Dn.y*=-1,Dn.z*=-1),h.material.uniforms.envMap.value=w,h.material.uniforms.flipEnvMap.value=w.isCubeTexture&&w.isRenderTargetTexture===!1?-1:1,h.material.uniforms.backgroundBlurriness.value=v.backgroundBlurriness,h.material.uniforms.backgroundIntensity.value=v.backgroundIntensity,h.material.uniforms.backgroundRotation.value.setFromMatrix4(Dp.makeRotationFromEuler(Dn)),h.material.toneMapped=Yt.getTransfer(w.colorSpace)!==qt,(c!==w||u!==w.version||d!==r.toneMapping)&&(h.material.needsUpdate=!0,c=w,u=w.version,d=r.toneMapping),h.layers.enableAll(),S.unshift(h,h.geometry,h.material,0,0,null)):w&&w.isTexture&&(A===void 0&&(A=new fi(new ir(2,2),new An({name:"BackgroundMaterial",uniforms:vs(Ei.background.uniforms),vertexShader:Ei.background.vertexShader,fragmentShader:Ei.background.fragmentShader,side:Ki,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),A.geometry.deleteAttribute("normal"),Object.defineProperty(A.material,"map",{get:function(){return this.uniforms.t2D.value}}),n.update(A)),A.material.uniforms.t2D.value=w,A.material.uniforms.backgroundIntensity.value=v.backgroundIntensity,A.material.toneMapped=Yt.getTransfer(w.colorSpace)!==qt,w.matrixAutoUpdate===!0&&w.updateMatrix(),A.material.uniforms.uvTransform.value.copy(w.matrix),(c!==w||u!==w.version||d!==r.toneMapping)&&(A.material.needsUpdate=!0,c=w,u=w.version,d=r.toneMapping),A.layers.enableAll(),S.unshift(A,A.geometry,A.material,0,0,null))}function f(S,v){S.getRGB(ta,hh(r)),i.buffers.color.setClear(ta.r,ta.g,ta.b,v,a)}function y(){h!==void 0&&(h.geometry.dispose(),h.material.dispose(),h=void 0),A!==void 0&&(A.geometry.dispose(),A.material.dispose(),A=void 0)}return{getClearColor:function(){return o},setClearColor:function(S,v=1){o.set(S),l=v,f(o,l)},getClearAlpha:function(){return l},setClearAlpha:function(S){l=S,f(o,l)},render:m,addToRenderList:g,dispose:y}}function Np(r,t){const e=r.getParameter(r.MAX_VERTEX_ATTRIBS),i={},n=u(null);let s=n,a=!1;function o(x,b,z,F,U){let W=!1;const Y=c(F,z,b);s!==Y&&(s=Y,A(s.object)),W=d(x,F,z,U),W&&p(x,F,z,U),U!==null&&t.update(U,r.ELEMENT_ARRAY_BUFFER),(W||a)&&(a=!1,v(x,b,z,F),U!==null&&r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t.get(U).buffer))}function l(){return r.createVertexArray()}function A(x){return r.bindVertexArray(x)}function h(x){return r.deleteVertexArray(x)}function c(x,b,z){const F=z.wireframe===!0;let U=i[x.id];U===void 0&&(U={},i[x.id]=U);let W=U[b.id];W===void 0&&(W={},U[b.id]=W);let Y=W[F];return Y===void 0&&(Y=u(l()),W[F]=Y),Y}function u(x){const b=[],z=[],F=[];for(let U=0;U<e;U++)b[U]=0,z[U]=0,F[U]=0;return{geometry:null,program:null,wireframe:!1,newAttributes:b,enabledAttributes:z,attributeDivisors:F,object:x,attributes:{},index:null}}function d(x,b,z,F){const U=s.attributes,W=b.attributes;let Y=0;const $=z.getAttributes();for(const H in $)if($[H].location>=0){const lt=U[H];let mt=W[H];if(mt===void 0&&(H==="instanceMatrix"&&x.instanceMatrix&&(mt=x.instanceMatrix),H==="instanceColor"&&x.instanceColor&&(mt=x.instanceColor)),lt===void 0||lt.attribute!==mt||mt&<.data!==mt.data)return!0;Y++}return s.attributesNum!==Y||s.index!==F}function p(x,b,z,F){const U={},W=b.attributes;let Y=0;const $=z.getAttributes();for(const H in $)if($[H].location>=0){let lt=W[H];lt===void 0&&(H==="instanceMatrix"&&x.instanceMatrix&&(lt=x.instanceMatrix),H==="instanceColor"&&x.instanceColor&&(lt=x.instanceColor));const mt={};mt.attribute=lt,lt&<.data&&(mt.data=lt.data),U[H]=mt,Y++}s.attributes=U,s.attributesNum=Y,s.index=F}function m(){const x=s.newAttributes;for(let b=0,z=x.length;b<z;b++)x[b]=0}function g(x){f(x,0)}function f(x,b){const z=s.newAttributes,F=s.enabledAttributes,U=s.attributeDivisors;z[x]=1,F[x]===0&&(r.enableVertexAttribArray(x),F[x]=1),U[x]!==b&&(r.vertexAttribDivisor(x,b),U[x]=b)}function y(){const x=s.newAttributes,b=s.enabledAttributes;for(let z=0,F=b.length;z<F;z++)b[z]!==x[z]&&(r.disableVertexAttribArray(z),b[z]=0)}function S(x,b,z,F,U,W,Y){Y===!0?r.vertexAttribIPointer(x,b,z,U,W):r.vertexAttribPointer(x,b,z,F,U,W)}function v(x,b,z,F){m();const U=F.attributes,W=z.getAttributes(),Y=b.defaultAttributeValues;for(const $ in W){const H=W[$];if(H.location>=0){let rt=U[$];if(rt===void 0&&($==="instanceMatrix"&&x.instanceMatrix&&(rt=x.instanceMatrix),$==="instanceColor"&&x.instanceColor&&(rt=x.instanceColor)),rt!==void 0){const lt=rt.normalized,mt=rt.itemSize,Ot=t.get(rt);if(Ot===void 0)continue;const se=Ot.buffer,$t=Ot.type,J=Ot.bytesPerElement,ot=$t===r.INT||$t===r.UNSIGNED_INT||rt.gpuType===to;if(rt.isInterleavedBufferAttribute){const nt=rt.data,bt=nt.stride,Tt=rt.offset;if(nt.isInstancedInterleavedBuffer){for(let Dt=0;Dt<H.locationSize;Dt++)f(H.location+Dt,nt.meshPerAttribute);x.isInstancedMesh!==!0&&F._maxInstanceCount===void 0&&(F._maxInstanceCount=nt.meshPerAttribute*nt.count)}else for(let Dt=0;Dt<H.locationSize;Dt++)g(H.location+Dt);r.bindBuffer(r.ARRAY_BUFFER,se);for(let Dt=0;Dt<H.locationSize;Dt++)S(H.location+Dt,mt/H.locationSize,$t,lt,bt*J,(Tt+mt/H.locationSize*Dt)*J,ot)}else{if(rt.isInstancedBufferAttribute){for(let nt=0;nt<H.locationSize;nt++)f(H.location+nt,rt.meshPerAttribute);x.isInstancedMesh!==!0&&F._maxInstanceCount===void 0&&(F._maxInstanceCount=rt.meshPerAttribute*rt.count)}else for(let nt=0;nt<H.locationSize;nt++)g(H.location+nt);r.bindBuffer(r.ARRAY_BUFFER,se);for(let nt=0;nt<H.locationSize;nt++)S(H.location+nt,mt/H.locationSize,$t,lt,mt*J,mt/H.locationSize*nt*J,ot)}}else if(Y!==void 0){const lt=Y[$];if(lt!==void 0)switch(lt.length){case 2:r.vertexAttrib2fv(H.location,lt);break;case 3:r.vertexAttrib3fv(H.location,lt);break;case 4:r.vertexAttrib4fv(H.location,lt);break;default:r.vertexAttrib1fv(H.location,lt)}}}}y()}function w(){P();for(const x in i){const b=i[x];for(const z in b){const F=b[z];for(const U in F)h(F[U].object),delete F[U];delete b[z]}delete i[x]}}function T(x){if(i[x.id]===void 0)return;const b=i[x.id];for(const z in b){const F=b[z];for(const U in F)h(F[U].object),delete F[U];delete b[z]}delete i[x.id]}function R(x){for(const b in i){const z=i[b];if(z[x.id]===void 0)continue;const F=z[x.id];for(const U in F)h(F[U].object),delete F[U];delete z[x.id]}}function P(){E(),a=!0,s!==n&&(s=n,A(s.object))}function E(){n.geometry=null,n.program=null,n.wireframe=!1}return{setup:o,reset:P,resetDefaultState:E,dispose:w,releaseStatesOfGeometry:T,releaseStatesOfProgram:R,initAttributes:m,enableAttribute:g,disableUnusedAttributes:y}}function Bp(r,t,e){let i;function n(A){i=A}function s(A,h){r.drawArrays(i,A,h),e.update(h,i,1)}function a(A,h,c){c!==0&&(r.drawArraysInstanced(i,A,h,c),e.update(h,i,c))}function o(A,h,c){if(c===0)return;t.get("WEBGL_multi_draw").multiDrawArraysWEBGL(i,A,0,h,0,c);let d=0;for(let p=0;p<c;p++)d+=h[p];e.update(d,i,1)}function l(A,h,c,u){if(c===0)return;const d=t.get("WEBGL_multi_draw");if(d===null)for(let p=0;p<A.length;p++)a(A[p],h[p],u[p]);else{d.multiDrawArraysInstancedWEBGL(i,A,0,h,0,u,0,c);let p=0;for(let m=0;m<c;m++)p+=h[m]*u[m];e.update(p,i,1)}}this.setMode=n,this.render=s,this.renderInstances=a,this.renderMultiDraw=o,this.renderMultiDrawInstances=l}function Fp(r,t,e,i){let n;function s(){if(n!==void 0)return n;if(t.has("EXT_texture_filter_anisotropic")===!0){const R=t.get("EXT_texture_filter_anisotropic");n=r.getParameter(R.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else n=0;return n}function a(R){return!(R!==li&&i.convert(R)!==r.getParameter(r.IMPLEMENTATION_COLOR_READ_FORMAT))}function o(R){const P=R===Hs&&(t.has("EXT_color_buffer_half_float")||t.has("EXT_color_buffer_float"));return!(R!==Ii&&i.convert(R)!==r.getParameter(r.IMPLEMENTATION_COLOR_READ_TYPE)&&R!==Ni&&!P)}function l(R){if(R==="highp"){if(r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.HIGH_FLOAT).precision>0&&r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.HIGH_FLOAT).precision>0)return"highp";R="mediump"}return R==="mediump"&&r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.MEDIUM_FLOAT).precision>0&&r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.MEDIUM_FLOAT).precision>0?"mediump":"lowp"}let A=e.precision!==void 0?e.precision:"highp";const h=l(A);h!==A&&(console.warn("THREE.WebGLRenderer:",A,"not supported, using",h,"instead."),A=h);const c=e.logarithmicDepthBuffer===!0,u=e.reversedDepthBuffer===!0&&t.has("EXT_clip_control"),d=r.getParameter(r.MAX_TEXTURE_IMAGE_UNITS),p=r.getParameter(r.MAX_VERTEX_TEXTURE_IMAGE_UNITS),m=r.getParameter(r.MAX_TEXTURE_SIZE),g=r.getParameter(r.MAX_CUBE_MAP_TEXTURE_SIZE),f=r.getParameter(r.MAX_VERTEX_ATTRIBS),y=r.getParameter(r.MAX_VERTEX_UNIFORM_VECTORS),S=r.getParameter(r.MAX_VARYING_VECTORS),v=r.getParameter(r.MAX_FRAGMENT_UNIFORM_VECTORS),w=p>0,T=r.getParameter(r.MAX_SAMPLES);return{isWebGL2:!0,getMaxAnisotropy:s,getMaxPrecision:l,textureFormatReadable:a,textureTypeReadable:o,precision:A,logarithmicDepthBuffer:c,reversedDepthBuffer:u,maxTextures:d,maxVertexTextures:p,maxTextureSize:m,maxCubemapSize:g,maxAttributes:f,maxVertexUniforms:y,maxVaryings:S,maxFragmentUniforms:v,vertexTextures:w,maxSamples:T}}function Op(r){const t=this;let e=null,i=0,n=!1,s=!1;const a=new _n,o=new Nt,l={value:null,needsUpdate:!1};this.uniform=l,this.numPlanes=0,this.numIntersection=0,this.init=function(c,u){const d=c.length!==0||u||i!==0||n;return n=u,i=c.length,d},this.beginShadows=function(){s=!0,h(null)},this.endShadows=function(){s=!1},this.setGlobalState=function(c,u){e=h(c,u,0)},this.setState=function(c,u,d){const p=c.clippingPlanes,m=c.clipIntersection,g=c.clipShadows,f=r.get(c);if(!n||p===null||p.length===0||s&&!g)s?h(null):A();else{const y=s?0:i,S=y*4;let v=f.clippingState||null;l.value=v,v=h(p,u,S,d);for(let w=0;w!==S;++w)v[w]=e[w];f.clippingState=v,this.numIntersection=m?this.numPlanes:0,this.numPlanes+=y}};function A(){l.value!==e&&(l.value=e,l.needsUpdate=i>0),t.numPlanes=i,t.numIntersection=0}function h(c,u,d,p){const m=c!==null?c.length:0;let g=null;if(m!==0){if(g=l.value,p!==!0||g===null){const f=d+m*4,y=u.matrixWorldInverse;o.getNormalMatrix(y),(g===null||g.length<f)&&(g=new Float32Array(f));for(let S=0,v=d;S!==m;++S,v+=4)a.copy(c[S]).applyMatrix4(y,o),a.normal.toArray(g,v),g[v+3]=a.constant}l.value=g,l.needsUpdate=!0}return t.numPlanes=m,t.numIntersection=0,g}}function Up(r){let t=new WeakMap;function e(a,o){return o===ja?a.mapping=es:o===Qa&&(a.mapping=is),a}function i(a){if(a&&a.isTexture){const o=a.mapping;if(o===ja||o===Qa)if(t.has(a)){const l=t.get(a).texture;return e(l,a.mapping)}else{const l=a.image;if(l&&l.height>0){const A=new gf(l.height);return A.fromEquirectangularTexture(r,a),t.set(a,A),a.addEventListener("dispose",n),e(A.texture,a.mapping)}else return null}}return a}function n(a){const o=a.target;o.removeEventListener("dispose",n);const l=t.get(o);l!==void 0&&(t.delete(o),l.dispose())}function s(){t=new WeakMap}return{get:i,dispose:s}}const Ms=4,Th=[.125,.215,.35,.446,.526,.582],Ln=20,uA=new Eh,wh=new Vt;let dA=null,fA=0,gA=0,pA=!1;const Nn=(1+Math.sqrt(5))/2,ys=1/Nn,Rh=[new B(-Nn,ys,0),new B(Nn,ys,0),new B(-ys,0,Nn),new B(ys,0,Nn),new B(0,Nn,-ys),new B(0,Nn,ys),new B(-1,1,-1),new B(1,1,-1),new B(-1,1,1),new B(1,1,1)],zp=new B;class _h{constructor(t){this._renderer=t,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._lodPlanes=[],this._sizeLods=[],this._sigmas=[],this._blurMaterial=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._compileMaterial(this._blurMaterial)}fromScene(t,e=0,i=.1,n=100,s={}){const{size:a=256,position:o=zp}=s;dA=this._renderer.getRenderTarget(),fA=this._renderer.getActiveCubeFace(),gA=this._renderer.getActiveMipmapLevel(),pA=this._renderer.xr.enabled,this._renderer.xr.enabled=!1,this._setSize(a);const l=this._allocateTargets();return l.depthBuffer=!0,this._sceneToCubeUV(t,i,n,l,o),e>0&&this._blur(l,0,0,e),this._applyPMREM(l),this._cleanup(l),l}fromEquirectangular(t,e=null){return this._fromTexture(t,e)}fromCubemap(t,e=null){return this._fromTexture(t,e)}compileCubemapShader(){this._cubemapMaterial===null&&(this._cubemapMaterial=Lh(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){this._equirectMaterial===null&&(this._equirectMaterial=Dh(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),this._cubemapMaterial!==null&&this._cubemapMaterial.dispose(),this._equirectMaterial!==null&&this._equirectMaterial.dispose()}_setSize(t){this._lodMax=Math.floor(Math.log2(t)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){this._blurMaterial!==null&&this._blurMaterial.dispose(),this._pingPongRenderTarget!==null&&this._pingPongRenderTarget.dispose();for(let t=0;t<this._lodPlanes.length;t++)this._lodPlanes[t].dispose()}_cleanup(t){this._renderer.setRenderTarget(dA,fA,gA),this._renderer.xr.enabled=pA,t.scissorTest=!1,ea(t,0,0,t.width,t.height)}_fromTexture(t,e){t.mapping===es||t.mapping===is?this._setSize(t.image.length===0?16:t.image[0].width||t.image[0].image.width):this._setSize(t.image.width/4),dA=this._renderer.getRenderTarget(),fA=this._renderer.getActiveCubeFace(),gA=this._renderer.getActiveMipmapLevel(),pA=this._renderer.xr.enabled,this._renderer.xr.enabled=!1;const i=e||this._allocateTargets();return this._textureToCubeUV(t,i),this._applyPMREM(i),this._cleanup(i),i}_allocateTargets(){const t=3*Math.max(this._cubeSize,112),e=4*this._cubeSize,i={magFilter:mi,minFilter:mi,generateMipmaps:!1,type:Hs,format:li,colorSpace:ns,depthBuffer:!1},n=Ph(t,e,i);if(this._pingPongRenderTarget===null||this._pingPongRenderTarget.width!==t||this._pingPongRenderTarget.height!==e){this._pingPongRenderTarget!==null&&this._dispose(),this._pingPongRenderTarget=Ph(t,e,i);const{_lodMax:s}=this;({sizeLods:this._sizeLods,lodPlanes:this._lodPlanes,sigmas:this._sigmas}=Gp(s)),this._blurMaterial=kp(s,t,e)}return n}_compileMaterial(t){const e=new fi(this._lodPlanes[0],t);this._renderer.compile(e,uA)}_sceneToCubeUV(t,e,i,n,s){const l=new Ue(90,1,e,i),A=[1,-1,1,1,1,1],h=[1,1,1,-1,-1,-1],c=this._renderer,u=c.autoClear,d=c.toneMapping;c.getClearColor(wh),c.toneMapping=tn,c.autoClear=!1,c.state.buffers.depth.getReversed()&&(c.setRenderTarget(n),c.clearDepth(),c.setRenderTarget(null));const m=new eA({name:"PMREM.Background",side:Fe,depthWrite:!1,depthTest:!1}),g=new fi(new Cs,m);let f=!1;const y=t.background;y?y.isColor&&(m.color.copy(y),t.background=null,f=!0):(m.color.copy(wh),f=!0);for(let S=0;S<6;S++){const v=S%3;v===0?(l.up.set(0,A[S],0),l.position.set(s.x,s.y,s.z),l.lookAt(s.x+h[S],s.y,s.z)):v===1?(l.up.set(0,0,A[S]),l.position.set(s.x,s.y,s.z),l.lookAt(s.x,s.y+h[S],s.z)):(l.up.set(0,A[S],0),l.position.set(s.x,s.y,s.z),l.lookAt(s.x,s.y,s.z+h[S]));const w=this._cubeSize;ea(n,v*w,S>2?w:0,w,w),c.setRenderTarget(n),f&&c.render(g,l),c.render(t,l)}g.geometry.dispose(),g.material.dispose(),c.toneMapping=d,c.autoClear=u,t.background=y}_textureToCubeUV(t,e){const i=this._renderer,n=t.mapping===es||t.mapping===is;n?(this._cubemapMaterial===null&&(this._cubemapMaterial=Lh()),this._cubemapMaterial.uniforms.flipEnvMap.value=t.isRenderTargetTexture===!1?-1:1):this._equirectMaterial===null&&(this._equirectMaterial=Dh());const s=n?this._cubemapMaterial:this._equirectMaterial,a=new fi(this._lodPlanes[0],s),o=s.uniforms;o.envMap.value=t;const l=this._cubeSize;ea(e,0,0,3*l,2*l),i.setRenderTarget(e),i.render(a,uA)}_applyPMREM(t){const e=this._renderer,i=e.autoClear;e.autoClear=!1;const n=this._lodPlanes.length;for(let s=1;s<n;s++){const a=Math.sqrt(this._sigmas[s]*this._sigmas[s]-this._sigmas[s-1]*this._sigmas[s-1]),o=Rh[(n-s-1)%Rh.length];this._blur(t,s-1,s,a,o)}e.autoClear=i}_blur(t,e,i,n,s){const a=this._pingPongRenderTarget;this._halfBlur(t,a,e,i,n,"latitudinal",s),this._halfBlur(a,t,i,i,n,"longitudinal",s)}_halfBlur(t,e,i,n,s,a,o){const l=this._renderer,A=this._blurMaterial;a!=="latitudinal"&&a!=="longitudinal"&&console.error("blur direction must be either latitudinal or longitudinal!");const h=3,c=new fi(this._lodPlanes[n],A),u=A.uniforms,d=this._sizeLods[i]-1,p=isFinite(s)?Math.PI/(2*d):2*Math.PI/(2*Ln-1),m=s/p,g=isFinite(s)?1+Math.floor(h*m):Ln;g>Ln&&console.warn(`sigmaRadians, ${s}, is too large and will clip, as it requested ${g} samples when the maximum is set to ${Ln}`);const f=[];let y=0;for(let R=0;R<Ln;++R){const P=R/m,E=Math.exp(-P*P/2);f.push(E),R===0?y+=E:R<g&&(y+=2*E)}for(let R=0;R<f.length;R++)f[R]=f[R]/y;u.envMap.value=t.texture,u.samples.value=g,u.weights.value=f,u.latitudinal.value=a==="latitudinal",o&&(u.poleAxis.value=o);const{_lodMax:S}=this;u.dTheta.value=p,u.mipInt.value=S-i;const v=this._sizeLods[n],w=3*v*(n>S-Ms?n-S+Ms:0),T=4*(this._cubeSize-v);ea(e,w,T,3*v,2*v),l.setRenderTarget(e),l.render(c,uA)}}function Gp(r){const t=[],e=[],i=[];let n=r;const s=r-Ms+1+Th.length;for(let a=0;a<s;a++){const o=Math.pow(2,n);e.push(o);let l=1/o;a>r-Ms?l=Th[a-r+Ms-1]:a===0&&(l=0),i.push(l);const A=1/(o-2),h=-A,c=1+A,u=[h,h,c,h,c,c,h,h,c,c,h,c],d=6,p=6,m=3,g=2,f=1,y=new Float32Array(m*p*d),S=new Float32Array(g*p*d),v=new Float32Array(f*p*d);for(let T=0;T<d;T++){const R=T%3*2/3-1,P=T>2?0:-1,E=[R,P,0,R+2/3,P,0,R+2/3,P+1,0,R,P,0,R+2/3,P+1,0,R,P+1,0];y.set(E,m*p*T),S.set(u,g*p*T);const x=[T,T,T,T,T,T];v.set(x,f*p*T)}const w=new wn;w.setAttribute("position",new xi(y,m)),w.setAttribute("uv",new xi(S,g)),w.setAttribute("faceIndex",new xi(v,f)),t.push(w),n>Ms&&n--}return{lodPlanes:t,sizeLods:e,sigmas:i}}function Ph(r,t,e){const i=new Mn(r,t,e);return i.texture.mapping=Tr,i.texture.name="PMREM.cubeUv",i.scissorTest=!0,i}function ea(r,t,e,i,n){r.viewport.set(t,e,i,n),r.scissor.set(t,e,i,n)}function kp(r,t,e){const i=new Float32Array(Ln),n=new B(0,1,0);return new An({name:"SphericalGaussianBlur",defines:{n:Ln,CUBEUV_TEXEL_WIDTH:1/t,CUBEUV_TEXEL_HEIGHT:1/e,CUBEUV_MAX_MIP:`${r}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:i},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:n}},vertexShader:mA(),fragmentShader:`
|
|
3703
3703
|
|
|
3704
3704
|
precision mediump float;
|
|
3705
3705
|
precision mediump int;
|
|
@@ -3759,7 +3759,7 @@ void main() {
|
|
|
3759
3759
|
}
|
|
3760
3760
|
|
|
3761
3761
|
}
|
|
3762
|
-
`,blending
|
|
3762
|
+
`,blending:$i,depthTest:!1,depthWrite:!1})}function Dh(){return new An({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null}},vertexShader:mA(),fragmentShader:`
|
|
3763
3763
|
|
|
3764
3764
|
precision mediump float;
|
|
3765
3765
|
precision mediump int;
|
|
@@ -3778,7 +3778,7 @@ void main() {
|
|
|
3778
3778
|
gl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 );
|
|
3779
3779
|
|
|
3780
3780
|
}
|
|
3781
|
-
`,blending
|
|
3781
|
+
`,blending:$i,depthTest:!1,depthWrite:!1})}function Lh(){return new An({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:mA(),fragmentShader:`
|
|
3782
3782
|
|
|
3783
3783
|
precision mediump float;
|
|
3784
3784
|
precision mediump int;
|
|
@@ -3794,7 +3794,7 @@ void main() {
|
|
|
3794
3794
|
gl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) );
|
|
3795
3795
|
|
|
3796
3796
|
}
|
|
3797
|
-
`,blending
|
|
3797
|
+
`,blending:$i,depthTest:!1,depthWrite:!1})}function mA(){return`
|
|
3798
3798
|
|
|
3799
3799
|
precision mediump float;
|
|
3800
3800
|
precision mediump int;
|
|
@@ -3849,60 +3849,60 @@ void main() {
|
|
|
3849
3849
|
gl_Position = vec4( position, 1.0 );
|
|
3850
3850
|
|
|
3851
3851
|
}
|
|
3852
|
-
`}function em(s){let t=new WeakMap,e=null;function i(o){if(o&&o.isTexture){const h=o.mapping,l=h===io||h===no,A=h===ls||h===hs;if(l||A){let c=t.get(o);const u=c!==void 0?c.texture.pmremVersion:0;if(o.isRenderTargetTexture&&o.pmremVersion!==u)return e===null&&(e=new UA(s)),c=l?e.fromEquirectangular(o,c):e.fromCubemap(o,c),c.texture.pmremVersion=o.pmremVersion,t.set(o,c),c.texture;if(c!==void 0)return c.texture;{const d=o.image;return l&&d&&d.height>0||A&&d&&n(d)?(e===null&&(e=new UA(s)),c=l?e.fromEquirectangular(o):e.fromCubemap(o),c.texture.pmremVersion=o.pmremVersion,t.set(o,c),o.addEventListener("dispose",r),c.texture):null}}}return o}function n(o){let h=0;const l=6;for(let A=0;A<l;A++)o[A]!==void 0&&h++;return h===l}function r(o){const h=o.target;h.removeEventListener("dispose",r);const l=t.get(h);l!==void 0&&(t.delete(h),l.dispose())}function a(){t=new WeakMap,e!==null&&(e.dispose(),e=null)}return{get:i,dispose:a}}function im(s){const t={};function e(i){if(t[i]!==void 0)return t[i];let n;switch(i){case"WEBGL_depth_texture":n=s.getExtension("WEBGL_depth_texture")||s.getExtension("MOZ_WEBGL_depth_texture")||s.getExtension("WEBKIT_WEBGL_depth_texture");break;case"EXT_texture_filter_anisotropic":n=s.getExtension("EXT_texture_filter_anisotropic")||s.getExtension("MOZ_EXT_texture_filter_anisotropic")||s.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":n=s.getExtension("WEBGL_compressed_texture_s3tc")||s.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||s.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":n=s.getExtension("WEBGL_compressed_texture_pvrtc")||s.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:n=s.getExtension(i)}return t[i]=n,n}return{has:function(i){return e(i)!==null},init:function(){e("EXT_color_buffer_float"),e("WEBGL_clip_cull_distance"),e("OES_texture_float_linear"),e("EXT_color_buffer_half_float"),e("WEBGL_multisampled_render_to_texture"),e("WEBGL_render_shared_exponent")},get:function(i){const n=e(i);return n===null&&us("THREE.WebGLRenderer: "+i+" extension not supported."),n}}}function nm(s,t,e,i){const n={},r=new WeakMap;function a(c){const u=c.target;u.index!==null&&t.remove(u.index);for(const p in u.attributes)t.remove(u.attributes[p]);u.removeEventListener("dispose",a),delete n[u.id];const d=r.get(u);d&&(t.remove(d),r.delete(u)),i.releaseStatesOfGeometry(u),u.isInstancedBufferGeometry===!0&&delete u._maxInstanceCount,e.memory.geometries--}function o(c,u){return n[u.id]===!0||(u.addEventListener("dispose",a),n[u.id]=!0,e.memory.geometries++),u}function h(c){const u=c.attributes;for(const d in u)t.update(u[d],s.ARRAY_BUFFER)}function l(c){const u=[],d=c.index,p=c.attributes.position;let m=0;if(d!==null){const M=d.array;m=d.version;for(let S=0,v=M.length;S<v;S+=3){const T=M[S+0],_=M[S+1],w=M[S+2];u.push(T,_,_,w,w,T)}}else if(p!==void 0){const M=p.array;m=p.version;for(let S=0,v=M.length/3-1;S<v;S+=3){const T=S+0,_=S+1,w=S+2;u.push(T,_,_,w,w,T)}}else return;const g=new(Qh(u)?dA:uA)(u,1);g.version=m;const f=r.get(c);f&&t.remove(f),r.set(c,g)}function A(c){const u=r.get(c);if(u){const d=c.index;d!==null&&u.version<d.version&&l(c)}else l(c);return r.get(c)}return{get:o,update:h,getWireframeAttribute:A}}function sm(s,t,e){let i;function n(u){i=u}let r,a;function o(u){r=u.type,a=u.bytesPerElement}function h(u,d){s.drawElements(i,d,r,u*a),e.update(d,i,1)}function l(u,d,p){p!==0&&(s.drawElementsInstanced(i,d,r,u*a,p),e.update(d,i,p))}function A(u,d,p){if(p===0)return;t.get("WEBGL_multi_draw").multiDrawElementsWEBGL(i,d,0,r,u,0,p);let g=0;for(let f=0;f<p;f++)g+=d[f];e.update(g,i,1)}function c(u,d,p,m){if(p===0)return;const g=t.get("WEBGL_multi_draw");if(g===null)for(let f=0;f<u.length;f++)l(u[f]/a,d[f],m[f]);else{g.multiDrawElementsInstancedWEBGL(i,d,0,r,u,0,m,0,p);let f=0;for(let M=0;M<p;M++)f+=d[M]*m[M];e.update(f,i,1)}}this.setMode=n,this.setIndex=o,this.render=h,this.renderInstances=l,this.renderMultiDraw=A,this.renderMultiDrawInstances=c}function rm(s){const t={geometries:0,textures:0},e={frame:0,calls:0,triangles:0,points:0,lines:0};function i(r,a,o){switch(e.calls++,a){case s.TRIANGLES:e.triangles+=o*(r/3);break;case s.LINES:e.lines+=o*(r/2);break;case s.LINE_STRIP:e.lines+=o*(r-1);break;case s.LINE_LOOP:e.lines+=o*r;break;case s.POINTS:e.points+=o*r;break;default:console.error("THREE.WebGLInfo: Unknown draw mode:",a);break}}function n(){e.calls=0,e.triangles=0,e.points=0,e.lines=0}return{memory:t,render:e,programs:null,autoReset:!0,reset:n,update:i}}function am(s,t,e){const i=new WeakMap,n=new ce;function r(a,o,h){const l=a.morphTargetInfluences,A=o.morphAttributes.position||o.morphAttributes.normal||o.morphAttributes.color,c=A!==void 0?A.length:0;let u=i.get(o);if(u===void 0||u.count!==c){let E=function(){w.dispose(),i.delete(o),o.removeEventListener("dispose",E)};u!==void 0&&u.texture.dispose();const d=o.morphAttributes.position!==void 0,p=o.morphAttributes.normal!==void 0,m=o.morphAttributes.color!==void 0,g=o.morphAttributes.position||[],f=o.morphAttributes.normal||[],M=o.morphAttributes.color||[];let S=0;d===!0&&(S=1),p===!0&&(S=2),m===!0&&(S=3);let v=o.attributes.position.count*S,T=1;v>t.maxTextureSize&&(T=Math.ceil(v/t.maxTextureSize),v=t.maxTextureSize);const _=new Float32Array(v*T*4*c),w=new tA(_,v,T,c);w.type=Bi,w.needsUpdate=!0;const P=S*4;for(let x=0;x<c;x++){const b=g[x],z=f[x],F=M[x],U=v*T*4*x;for(let W=0;W<b.count;W++){const Y=W*P;d===!0&&(n.fromBufferAttribute(b,W),_[U+Y+0]=n.x,_[U+Y+1]=n.y,_[U+Y+2]=n.z,_[U+Y+3]=0),p===!0&&(n.fromBufferAttribute(z,W),_[U+Y+4]=n.x,_[U+Y+5]=n.y,_[U+Y+6]=n.z,_[U+Y+7]=0),m===!0&&(n.fromBufferAttribute(F,W),_[U+Y+8]=n.x,_[U+Y+9]=n.y,_[U+Y+10]=n.z,_[U+Y+11]=F.itemSize===4?n.w:1)}}u={count:c,texture:w,size:new Nt(v,T)},i.set(o,u),o.addEventListener("dispose",E)}if(a.isInstancedMesh===!0&&a.morphTexture!==null)h.getUniforms().setValue(s,"morphTexture",a.morphTexture,e);else{let d=0;for(let m=0;m<l.length;m++)d+=l[m];const p=o.morphTargetsRelative?1:1-d;h.getUniforms().setValue(s,"morphTargetBaseInfluence",p),h.getUniforms().setValue(s,"morphTargetInfluences",l)}h.getUniforms().setValue(s,"morphTargetsTexture",u.texture,e),h.getUniforms().setValue(s,"morphTargetsTextureSize",u.size)}return{update:r}}function om(s,t,e,i){let n=new WeakMap;function r(h){const l=i.render.frame,A=h.geometry,c=t.get(h,A);if(n.get(c)!==l&&(t.update(c),n.set(c,l)),h.isInstancedMesh&&(h.hasEventListener("dispose",o)===!1&&h.addEventListener("dispose",o),n.get(h)!==l&&(e.update(h.instanceMatrix,s.ARRAY_BUFFER),h.instanceColor!==null&&e.update(h.instanceColor,s.ARRAY_BUFFER),n.set(h,l))),h.isSkinnedMesh){const u=h.skeleton;n.get(u)!==l&&(u.update(),n.set(u,l))}return c}function a(){n=new WeakMap}function o(h){const l=h.target;l.removeEventListener("dispose",o),e.remove(l.instanceMatrix),l.instanceColor!==null&&e.remove(l.instanceColor)}return{update:r,dispose:a}}const HA=new we,VA=new yA(1,1),WA=new tA,YA=new Af,XA=new xA,ZA=[],jA=[],JA=new Float32Array(16),QA=new Float32Array(9),qA=new Float32Array(4);function Ds(s,t,e){const i=s[0];if(i<=0||i>0)return s;const n=t*e;let r=ZA[n];if(r===void 0&&(r=new Float32Array(n),ZA[n]=r),t!==0){i.toArray(r,0);for(let a=1,o=0;a!==t;++a)o+=e,s[a].toArray(r,o)}return r}function Ce(s,t){if(s.length!==t.length)return!1;for(let e=0,i=s.length;e<i;e++)if(s[e]!==t[e])return!1;return!0}function Ie(s,t){for(let e=0,i=t.length;e<i;e++)s[e]=t[e]}function oa(s,t){let e=jA[t];e===void 0&&(e=new Int32Array(t),jA[t]=e);for(let i=0;i!==t;++i)e[i]=s.allocateTextureUnit();return e}function lm(s,t){const e=this.cache;e[0]!==t&&(s.uniform1f(this.addr,t),e[0]=t)}function hm(s,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y)&&(s.uniform2f(this.addr,t.x,t.y),e[0]=t.x,e[1]=t.y);else{if(Ce(e,t))return;s.uniform2fv(this.addr,t),Ie(e,t)}}function Am(s,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y||e[2]!==t.z)&&(s.uniform3f(this.addr,t.x,t.y,t.z),e[0]=t.x,e[1]=t.y,e[2]=t.z);else if(t.r!==void 0)(e[0]!==t.r||e[1]!==t.g||e[2]!==t.b)&&(s.uniform3f(this.addr,t.r,t.g,t.b),e[0]=t.r,e[1]=t.g,e[2]=t.b);else{if(Ce(e,t))return;s.uniform3fv(this.addr,t),Ie(e,t)}}function cm(s,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y||e[2]!==t.z||e[3]!==t.w)&&(s.uniform4f(this.addr,t.x,t.y,t.z,t.w),e[0]=t.x,e[1]=t.y,e[2]=t.z,e[3]=t.w);else{if(Ce(e,t))return;s.uniform4fv(this.addr,t),Ie(e,t)}}function um(s,t){const e=this.cache,i=t.elements;if(i===void 0){if(Ce(e,t))return;s.uniformMatrix2fv(this.addr,!1,t),Ie(e,t)}else{if(Ce(e,i))return;qA.set(i),s.uniformMatrix2fv(this.addr,!1,qA),Ie(e,i)}}function dm(s,t){const e=this.cache,i=t.elements;if(i===void 0){if(Ce(e,t))return;s.uniformMatrix3fv(this.addr,!1,t),Ie(e,t)}else{if(Ce(e,i))return;QA.set(i),s.uniformMatrix3fv(this.addr,!1,QA),Ie(e,i)}}function fm(s,t){const e=this.cache,i=t.elements;if(i===void 0){if(Ce(e,t))return;s.uniformMatrix4fv(this.addr,!1,t),Ie(e,t)}else{if(Ce(e,i))return;JA.set(i),s.uniformMatrix4fv(this.addr,!1,JA),Ie(e,i)}}function gm(s,t){const e=this.cache;e[0]!==t&&(s.uniform1i(this.addr,t),e[0]=t)}function pm(s,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y)&&(s.uniform2i(this.addr,t.x,t.y),e[0]=t.x,e[1]=t.y);else{if(Ce(e,t))return;s.uniform2iv(this.addr,t),Ie(e,t)}}function mm(s,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y||e[2]!==t.z)&&(s.uniform3i(this.addr,t.x,t.y,t.z),e[0]=t.x,e[1]=t.y,e[2]=t.z);else{if(Ce(e,t))return;s.uniform3iv(this.addr,t),Ie(e,t)}}function Cm(s,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y||e[2]!==t.z||e[3]!==t.w)&&(s.uniform4i(this.addr,t.x,t.y,t.z,t.w),e[0]=t.x,e[1]=t.y,e[2]=t.z,e[3]=t.w);else{if(Ce(e,t))return;s.uniform4iv(this.addr,t),Ie(e,t)}}function Im(s,t){const e=this.cache;e[0]!==t&&(s.uniform1ui(this.addr,t),e[0]=t)}function vm(s,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y)&&(s.uniform2ui(this.addr,t.x,t.y),e[0]=t.x,e[1]=t.y);else{if(Ce(e,t))return;s.uniform2uiv(this.addr,t),Ie(e,t)}}function xm(s,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y||e[2]!==t.z)&&(s.uniform3ui(this.addr,t.x,t.y,t.z),e[0]=t.x,e[1]=t.y,e[2]=t.z);else{if(Ce(e,t))return;s.uniform3uiv(this.addr,t),Ie(e,t)}}function Em(s,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y||e[2]!==t.z||e[3]!==t.w)&&(s.uniform4ui(this.addr,t.x,t.y,t.z,t.w),e[0]=t.x,e[1]=t.y,e[2]=t.z,e[3]=t.w);else{if(Ce(e,t))return;s.uniform4uiv(this.addr,t),Ie(e,t)}}function Sm(s,t,e){const i=this.cache,n=e.allocateTextureUnit();i[0]!==n&&(s.uniform1i(this.addr,n),i[0]=n);let r;this.type===s.SAMPLER_2D_SHADOW?(VA.compareFunction=Xh,r=VA):r=HA,e.setTexture2D(t||r,n)}function ym(s,t,e){const i=this.cache,n=e.allocateTextureUnit();i[0]!==n&&(s.uniform1i(this.addr,n),i[0]=n),e.setTexture3D(t||YA,n)}function Mm(s,t,e){const i=this.cache,n=e.allocateTextureUnit();i[0]!==n&&(s.uniform1i(this.addr,n),i[0]=n),e.setTextureCube(t||XA,n)}function bm(s,t,e){const i=this.cache,n=e.allocateTextureUnit();i[0]!==n&&(s.uniform1i(this.addr,n),i[0]=n),e.setTexture2DArray(t||WA,n)}function _m(s){switch(s){case 5126:return lm;case 35664:return hm;case 35665:return Am;case 35666:return cm;case 35674:return um;case 35675:return dm;case 35676:return fm;case 5124:case 35670:return gm;case 35667:case 35671:return pm;case 35668:case 35672:return mm;case 35669:case 35673:return Cm;case 5125:return Im;case 36294:return vm;case 36295:return xm;case 36296:return Em;case 35678:case 36198:case 36298:case 36306:case 35682:return Sm;case 35679:case 36299:case 36307:return ym;case 35680:case 36300:case 36308:case 36293:return Mm;case 36289:case 36303:case 36311:case 36292:return bm}}function Tm(s,t){s.uniform1fv(this.addr,t)}function wm(s,t){const e=Ds(t,this.size,2);s.uniform2fv(this.addr,e)}function Rm(s,t){const e=Ds(t,this.size,3);s.uniform3fv(this.addr,e)}function Pm(s,t){const e=Ds(t,this.size,4);s.uniform4fv(this.addr,e)}function Dm(s,t){const e=Ds(t,this.size,4);s.uniformMatrix2fv(this.addr,!1,e)}function Lm(s,t){const e=Ds(t,this.size,9);s.uniformMatrix3fv(this.addr,!1,e)}function Nm(s,t){const e=Ds(t,this.size,16);s.uniformMatrix4fv(this.addr,!1,e)}function Om(s,t){s.uniform1iv(this.addr,t)}function Fm(s,t){s.uniform2iv(this.addr,t)}function Bm(s,t){s.uniform3iv(this.addr,t)}function Um(s,t){s.uniform4iv(this.addr,t)}function zm(s,t){s.uniform1uiv(this.addr,t)}function km(s,t){s.uniform2uiv(this.addr,t)}function Gm(s,t){s.uniform3uiv(this.addr,t)}function Hm(s,t){s.uniform4uiv(this.addr,t)}function Vm(s,t,e){const i=this.cache,n=t.length,r=oa(e,n);Ce(i,r)||(s.uniform1iv(this.addr,r),Ie(i,r));for(let a=0;a!==n;++a)e.setTexture2D(t[a]||HA,r[a])}function Wm(s,t,e){const i=this.cache,n=t.length,r=oa(e,n);Ce(i,r)||(s.uniform1iv(this.addr,r),Ie(i,r));for(let a=0;a!==n;++a)e.setTexture3D(t[a]||YA,r[a])}function Ym(s,t,e){const i=this.cache,n=t.length,r=oa(e,n);Ce(i,r)||(s.uniform1iv(this.addr,r),Ie(i,r));for(let a=0;a!==n;++a)e.setTextureCube(t[a]||XA,r[a])}function Xm(s,t,e){const i=this.cache,n=t.length,r=oa(e,n);Ce(i,r)||(s.uniform1iv(this.addr,r),Ie(i,r));for(let a=0;a!==n;++a)e.setTexture2DArray(t[a]||WA,r[a])}function Zm(s){switch(s){case 5126:return Tm;case 35664:return wm;case 35665:return Rm;case 35666:return Pm;case 35674:return Dm;case 35675:return Lm;case 35676:return Nm;case 5124:case 35670:return Om;case 35667:case 35671:return Fm;case 35668:case 35672:return Bm;case 35669:case 35673:return Um;case 5125:return zm;case 36294:return km;case 36295:return Gm;case 36296:return Hm;case 35678:case 36198:case 36298:case 36306:case 35682:return Vm;case 35679:case 36299:case 36307:return Wm;case 35680:case 36300:case 36308:case 36293:return Ym;case 36289:case 36303:case 36311:case 36292:return Xm}}class jm{constructor(t,e,i){this.id=t,this.addr=i,this.cache=[],this.type=e.type,this.setValue=_m(e.type)}}class Jm{constructor(t,e,i){this.id=t,this.addr=i,this.cache=[],this.type=e.type,this.size=e.size,this.setValue=Zm(e.type)}}class Qm{constructor(t){this.id=t,this.seq=[],this.map={}}setValue(t,e,i){const n=this.seq;for(let r=0,a=n.length;r!==a;++r){const o=n[r];o.setValue(t,e[o.id],i)}}}const yl=/(\w+)(\])?(\[|\.)?/g;function KA(s,t){s.seq.push(t),s.map[t.id]=t}function qm(s,t,e){const i=s.name,n=i.length;for(yl.lastIndex=0;;){const r=yl.exec(i),a=yl.lastIndex;let o=r[1];const h=r[2]==="]",l=r[3];if(h&&(o=o|0),l===void 0||l==="["&&a+2===n){KA(e,l===void 0?new jm(o,s,t):new Jm(o,s,t));break}else{let c=e.map[o];c===void 0&&(c=new Qm(o),KA(e,c)),e=c}}}class la{constructor(t,e){this.seq=[],this.map={};const i=t.getProgramParameter(e,t.ACTIVE_UNIFORMS);for(let n=0;n<i;++n){const r=t.getActiveUniform(e,n),a=t.getUniformLocation(e,r.name);qm(r,a,this)}}setValue(t,e,i,n){const r=this.map[e];r!==void 0&&r.setValue(t,i,n)}setOptional(t,e,i){const n=e[i];n!==void 0&&this.setValue(t,i,n)}static upload(t,e,i,n){for(let r=0,a=e.length;r!==a;++r){const o=e[r],h=i[o.id];h.needsUpdate!==!1&&o.setValue(t,h.value,n)}}static seqWithValue(t,e){const i=[];for(let n=0,r=t.length;n!==r;++n){const a=t[n];a.id in e&&i.push(a)}return i}}function $A(s,t,e){const i=s.createShader(t);return s.shaderSource(i,e),s.compileShader(i),i}const Km=37297;let $m=0;function tC(s,t){const e=s.split(`
|
|
3853
|
-
`),i=[],n=Math.max(t-6,0),
|
|
3854
|
-
`)}const
|
|
3855
|
-
|
|
3856
|
-
`+
|
|
3857
|
-
|
|
3858
|
-
`+
|
|
3859
|
-
`)}function
|
|
3860
|
-
`)}function
|
|
3861
|
-
`)}function
|
|
3862
|
-
`)}function
|
|
3863
|
-
precision ${
|
|
3864
|
-
precision ${
|
|
3865
|
-
precision ${
|
|
3866
|
-
precision ${
|
|
3867
|
-
precision ${
|
|
3868
|
-
precision ${
|
|
3869
|
-
precision ${
|
|
3870
|
-
precision ${
|
|
3871
|
-
precision ${
|
|
3872
|
-
precision ${
|
|
3873
|
-
precision ${
|
|
3874
|
-
precision ${
|
|
3875
|
-
precision ${
|
|
3876
|
-
precision ${
|
|
3877
|
-
precision ${
|
|
3878
|
-
precision ${
|
|
3879
|
-
`;return
|
|
3880
|
-
#define HIGH_PRECISION`:
|
|
3881
|
-
#define MEDIUM_PRECISION`:
|
|
3882
|
-
#define LOW_PRECISION`),t}function
|
|
3883
|
-
`:"";e.isRawShaderMaterial?(g=["#define SHADER_TYPE "+e.shaderType,"#define SHADER_NAME "+e.shaderName,p].filter(
|
|
3852
|
+
`}function Hp(r){let t=new WeakMap,e=null;function i(o){if(o&&o.isTexture){const l=o.mapping,A=l===ja||l===Qa,h=l===es||l===is;if(A||h){let c=t.get(o);const u=c!==void 0?c.texture.pmremVersion:0;if(o.isRenderTargetTexture&&o.pmremVersion!==u)return e===null&&(e=new _h(r)),c=A?e.fromEquirectangular(o,c):e.fromCubemap(o,c),c.texture.pmremVersion=o.pmremVersion,t.set(o,c),c.texture;if(c!==void 0)return c.texture;{const d=o.image;return A&&d&&d.height>0||h&&d&&n(d)?(e===null&&(e=new _h(r)),c=A?e.fromEquirectangular(o):e.fromCubemap(o),c.texture.pmremVersion=o.pmremVersion,t.set(o,c),o.addEventListener("dispose",s),c.texture):null}}}return o}function n(o){let l=0;const A=6;for(let h=0;h<A;h++)o[h]!==void 0&&l++;return l===A}function s(o){const l=o.target;l.removeEventListener("dispose",s);const A=t.get(l);A!==void 0&&(t.delete(l),A.dispose())}function a(){t=new WeakMap,e!==null&&(e.dispose(),e=null)}return{get:i,dispose:a}}function Vp(r){const t={};function e(i){if(t[i]!==void 0)return t[i];let n;switch(i){case"WEBGL_depth_texture":n=r.getExtension("WEBGL_depth_texture")||r.getExtension("MOZ_WEBGL_depth_texture")||r.getExtension("WEBKIT_WEBGL_depth_texture");break;case"EXT_texture_filter_anisotropic":n=r.getExtension("EXT_texture_filter_anisotropic")||r.getExtension("MOZ_EXT_texture_filter_anisotropic")||r.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":n=r.getExtension("WEBGL_compressed_texture_s3tc")||r.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||r.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":n=r.getExtension("WEBGL_compressed_texture_pvrtc")||r.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:n=r.getExtension(i)}return t[i]=n,n}return{has:function(i){return e(i)!==null},init:function(){e("EXT_color_buffer_float"),e("WEBGL_clip_cull_distance"),e("OES_texture_float_linear"),e("EXT_color_buffer_half_float"),e("WEBGL_multisampled_render_to_texture"),e("WEBGL_render_shared_exponent")},get:function(i){const n=e(i);return n===null&&as("THREE.WebGLRenderer: "+i+" extension not supported."),n}}}function Wp(r,t,e,i){const n={},s=new WeakMap;function a(c){const u=c.target;u.index!==null&&t.remove(u.index);for(const p in u.attributes)t.remove(u.attributes[p]);u.removeEventListener("dispose",a),delete n[u.id];const d=s.get(u);d&&(t.remove(d),s.delete(u)),i.releaseStatesOfGeometry(u),u.isInstancedBufferGeometry===!0&&delete u._maxInstanceCount,e.memory.geometries--}function o(c,u){return n[u.id]===!0||(u.addEventListener("dispose",a),n[u.id]=!0,e.memory.geometries++),u}function l(c){const u=c.attributes;for(const d in u)t.update(u[d],r.ARRAY_BUFFER)}function A(c){const u=[],d=c.index,p=c.attributes.position;let m=0;if(d!==null){const y=d.array;m=d.version;for(let S=0,v=y.length;S<v;S+=3){const w=y[S+0],T=y[S+1],R=y[S+2];u.push(w,T,T,R,R,w)}}else if(p!==void 0){const y=p.array;m=p.version;for(let S=0,v=y.length/3-1;S<v;S+=3){const w=S+0,T=S+1,R=S+2;u.push(w,T,T,R,R,w)}}else return;const g=new(Wl(u)?ah:rh)(u,1);g.version=m;const f=s.get(c);f&&t.remove(f),s.set(c,g)}function h(c){const u=s.get(c);if(u){const d=c.index;d!==null&&u.version<d.version&&A(c)}else A(c);return s.get(c)}return{get:o,update:l,getWireframeAttribute:h}}function Yp(r,t,e){let i;function n(u){i=u}let s,a;function o(u){s=u.type,a=u.bytesPerElement}function l(u,d){r.drawElements(i,d,s,u*a),e.update(d,i,1)}function A(u,d,p){p!==0&&(r.drawElementsInstanced(i,d,s,u*a,p),e.update(d,i,p))}function h(u,d,p){if(p===0)return;t.get("WEBGL_multi_draw").multiDrawElementsWEBGL(i,d,0,s,u,0,p);let g=0;for(let f=0;f<p;f++)g+=d[f];e.update(g,i,1)}function c(u,d,p,m){if(p===0)return;const g=t.get("WEBGL_multi_draw");if(g===null)for(let f=0;f<u.length;f++)A(u[f]/a,d[f],m[f]);else{g.multiDrawElementsInstancedWEBGL(i,d,0,s,u,0,m,0,p);let f=0;for(let y=0;y<p;y++)f+=d[y]*m[y];e.update(f,i,1)}}this.setMode=n,this.setIndex=o,this.render=l,this.renderInstances=A,this.renderMultiDraw=h,this.renderMultiDrawInstances=c}function Xp(r){const t={geometries:0,textures:0},e={frame:0,calls:0,triangles:0,points:0,lines:0};function i(s,a,o){switch(e.calls++,a){case r.TRIANGLES:e.triangles+=o*(s/3);break;case r.LINES:e.lines+=o*(s/2);break;case r.LINE_STRIP:e.lines+=o*(s-1);break;case r.LINE_LOOP:e.lines+=o*s;break;case r.POINTS:e.points+=o*s;break;default:console.error("THREE.WebGLInfo: Unknown draw mode:",a);break}}function n(){e.calls=0,e.triangles=0,e.points=0,e.lines=0}return{memory:t,render:e,programs:null,autoReset:!0,reset:n,update:i}}function Zp(r,t,e){const i=new WeakMap,n=new he;function s(a,o,l){const A=a.morphTargetInfluences,h=o.morphAttributes.position||o.morphAttributes.normal||o.morphAttributes.color,c=h!==void 0?h.length:0;let u=i.get(o);if(u===void 0||u.count!==c){let E=function(){R.dispose(),i.delete(o),o.removeEventListener("dispose",E)};u!==void 0&&u.texture.dispose();const d=o.morphAttributes.position!==void 0,p=o.morphAttributes.normal!==void 0,m=o.morphAttributes.color!==void 0,g=o.morphAttributes.position||[],f=o.morphAttributes.normal||[],y=o.morphAttributes.color||[];let S=0;d===!0&&(S=1),p===!0&&(S=2),m===!0&&(S=3);let v=o.attributes.position.count*S,w=1;v>t.maxTextureSize&&(w=Math.ceil(v/t.maxTextureSize),v=t.maxTextureSize);const T=new Float32Array(v*w*4*c),R=new Jl(T,v,w,c);R.type=Ni,R.needsUpdate=!0;const P=S*4;for(let x=0;x<c;x++){const b=g[x],z=f[x],F=y[x],U=v*w*4*x;for(let W=0;W<b.count;W++){const Y=W*P;d===!0&&(n.fromBufferAttribute(b,W),T[U+Y+0]=n.x,T[U+Y+1]=n.y,T[U+Y+2]=n.z,T[U+Y+3]=0),p===!0&&(n.fromBufferAttribute(z,W),T[U+Y+4]=n.x,T[U+Y+5]=n.y,T[U+Y+6]=n.z,T[U+Y+7]=0),m===!0&&(n.fromBufferAttribute(F,W),T[U+Y+8]=n.x,T[U+Y+9]=n.y,T[U+Y+10]=n.z,T[U+Y+11]=F.itemSize===4?n.w:1)}}u={count:c,texture:R,size:new Zt(v,w)},i.set(o,u),o.addEventListener("dispose",E)}if(a.isInstancedMesh===!0&&a.morphTexture!==null)l.getUniforms().setValue(r,"morphTexture",a.morphTexture,e);else{let d=0;for(let m=0;m<A.length;m++)d+=A[m];const p=o.morphTargetsRelative?1:1-d;l.getUniforms().setValue(r,"morphTargetBaseInfluence",p),l.getUniforms().setValue(r,"morphTargetInfluences",A)}l.getUniforms().setValue(r,"morphTargetsTexture",u.texture,e),l.getUniforms().setValue(r,"morphTargetsTextureSize",u.size)}return{update:s}}function Jp(r,t,e,i){let n=new WeakMap;function s(l){const A=i.render.frame,h=l.geometry,c=t.get(l,h);if(n.get(c)!==A&&(t.update(c),n.set(c,A)),l.isInstancedMesh&&(l.hasEventListener("dispose",o)===!1&&l.addEventListener("dispose",o),n.get(l)!==A&&(e.update(l.instanceMatrix,r.ARRAY_BUFFER),l.instanceColor!==null&&e.update(l.instanceColor,r.ARRAY_BUFFER),n.set(l,A))),l.isSkinnedMesh){const u=l.skeleton;n.get(u)!==A&&(u.update(),n.set(u,A))}return c}function a(){n=new WeakMap}function o(l){const A=l.target;A.removeEventListener("dispose",o),e.remove(A.instanceMatrix),A.instanceColor!==null&&e.remove(A.instanceColor)}return{update:s,dispose:a}}const Nh=new Te,Bh=new mh(1,1),Fh=new Jl,Oh=new Qd,Uh=new fh,zh=[],Gh=[],kh=new Float32Array(16),Hh=new Float32Array(9),Vh=new Float32Array(4);function bs(r,t,e){const i=r[0];if(i<=0||i>0)return r;const n=t*e;let s=zh[n];if(s===void 0&&(s=new Float32Array(n),zh[n]=s),t!==0){i.toArray(s,0);for(let a=1,o=0;a!==t;++a)o+=e,r[a].toArray(s,o)}return s}function me(r,t){if(r.length!==t.length)return!1;for(let e=0,i=r.length;e<i;e++)if(r[e]!==t[e])return!1;return!0}function Ie(r,t){for(let e=0,i=t.length;e<i;e++)r[e]=t[e]}function ia(r,t){let e=Gh[t];e===void 0&&(e=new Int32Array(t),Gh[t]=e);for(let i=0;i!==t;++i)e[i]=r.allocateTextureUnit();return e}function jp(r,t){const e=this.cache;e[0]!==t&&(r.uniform1f(this.addr,t),e[0]=t)}function Qp(r,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y)&&(r.uniform2f(this.addr,t.x,t.y),e[0]=t.x,e[1]=t.y);else{if(me(e,t))return;r.uniform2fv(this.addr,t),Ie(e,t)}}function qp(r,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y||e[2]!==t.z)&&(r.uniform3f(this.addr,t.x,t.y,t.z),e[0]=t.x,e[1]=t.y,e[2]=t.z);else if(t.r!==void 0)(e[0]!==t.r||e[1]!==t.g||e[2]!==t.b)&&(r.uniform3f(this.addr,t.r,t.g,t.b),e[0]=t.r,e[1]=t.g,e[2]=t.b);else{if(me(e,t))return;r.uniform3fv(this.addr,t),Ie(e,t)}}function Kp(r,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y||e[2]!==t.z||e[3]!==t.w)&&(r.uniform4f(this.addr,t.x,t.y,t.z,t.w),e[0]=t.x,e[1]=t.y,e[2]=t.z,e[3]=t.w);else{if(me(e,t))return;r.uniform4fv(this.addr,t),Ie(e,t)}}function $p(r,t){const e=this.cache,i=t.elements;if(i===void 0){if(me(e,t))return;r.uniformMatrix2fv(this.addr,!1,t),Ie(e,t)}else{if(me(e,i))return;Vh.set(i),r.uniformMatrix2fv(this.addr,!1,Vh),Ie(e,i)}}function tm(r,t){const e=this.cache,i=t.elements;if(i===void 0){if(me(e,t))return;r.uniformMatrix3fv(this.addr,!1,t),Ie(e,t)}else{if(me(e,i))return;Hh.set(i),r.uniformMatrix3fv(this.addr,!1,Hh),Ie(e,i)}}function em(r,t){const e=this.cache,i=t.elements;if(i===void 0){if(me(e,t))return;r.uniformMatrix4fv(this.addr,!1,t),Ie(e,t)}else{if(me(e,i))return;kh.set(i),r.uniformMatrix4fv(this.addr,!1,kh),Ie(e,i)}}function im(r,t){const e=this.cache;e[0]!==t&&(r.uniform1i(this.addr,t),e[0]=t)}function nm(r,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y)&&(r.uniform2i(this.addr,t.x,t.y),e[0]=t.x,e[1]=t.y);else{if(me(e,t))return;r.uniform2iv(this.addr,t),Ie(e,t)}}function sm(r,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y||e[2]!==t.z)&&(r.uniform3i(this.addr,t.x,t.y,t.z),e[0]=t.x,e[1]=t.y,e[2]=t.z);else{if(me(e,t))return;r.uniform3iv(this.addr,t),Ie(e,t)}}function rm(r,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y||e[2]!==t.z||e[3]!==t.w)&&(r.uniform4i(this.addr,t.x,t.y,t.z,t.w),e[0]=t.x,e[1]=t.y,e[2]=t.z,e[3]=t.w);else{if(me(e,t))return;r.uniform4iv(this.addr,t),Ie(e,t)}}function am(r,t){const e=this.cache;e[0]!==t&&(r.uniform1ui(this.addr,t),e[0]=t)}function om(r,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y)&&(r.uniform2ui(this.addr,t.x,t.y),e[0]=t.x,e[1]=t.y);else{if(me(e,t))return;r.uniform2uiv(this.addr,t),Ie(e,t)}}function Am(r,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y||e[2]!==t.z)&&(r.uniform3ui(this.addr,t.x,t.y,t.z),e[0]=t.x,e[1]=t.y,e[2]=t.z);else{if(me(e,t))return;r.uniform3uiv(this.addr,t),Ie(e,t)}}function lm(r,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y||e[2]!==t.z||e[3]!==t.w)&&(r.uniform4ui(this.addr,t.x,t.y,t.z,t.w),e[0]=t.x,e[1]=t.y,e[2]=t.z,e[3]=t.w);else{if(me(e,t))return;r.uniform4uiv(this.addr,t),Ie(e,t)}}function hm(r,t,e){const i=this.cache,n=e.allocateTextureUnit();i[0]!==n&&(r.uniform1i(this.addr,n),i[0]=n);let s;this.type===r.SAMPLER_2D_SHADOW?(Bh.compareFunction=Gl,s=Bh):s=Nh,e.setTexture2D(t||s,n)}function cm(r,t,e){const i=this.cache,n=e.allocateTextureUnit();i[0]!==n&&(r.uniform1i(this.addr,n),i[0]=n),e.setTexture3D(t||Oh,n)}function um(r,t,e){const i=this.cache,n=e.allocateTextureUnit();i[0]!==n&&(r.uniform1i(this.addr,n),i[0]=n),e.setTextureCube(t||Uh,n)}function dm(r,t,e){const i=this.cache,n=e.allocateTextureUnit();i[0]!==n&&(r.uniform1i(this.addr,n),i[0]=n),e.setTexture2DArray(t||Fh,n)}function fm(r){switch(r){case 5126:return jp;case 35664:return Qp;case 35665:return qp;case 35666:return Kp;case 35674:return $p;case 35675:return tm;case 35676:return em;case 5124:case 35670:return im;case 35667:case 35671:return nm;case 35668:case 35672:return sm;case 35669:case 35673:return rm;case 5125:return am;case 36294:return om;case 36295:return Am;case 36296:return lm;case 35678:case 36198:case 36298:case 36306:case 35682:return hm;case 35679:case 36299:case 36307:return cm;case 35680:case 36300:case 36308:case 36293:return um;case 36289:case 36303:case 36311:case 36292:return dm}}function gm(r,t){r.uniform1fv(this.addr,t)}function pm(r,t){const e=bs(t,this.size,2);r.uniform2fv(this.addr,e)}function mm(r,t){const e=bs(t,this.size,3);r.uniform3fv(this.addr,e)}function Im(r,t){const e=bs(t,this.size,4);r.uniform4fv(this.addr,e)}function Cm(r,t){const e=bs(t,this.size,4);r.uniformMatrix2fv(this.addr,!1,e)}function vm(r,t){const e=bs(t,this.size,9);r.uniformMatrix3fv(this.addr,!1,e)}function xm(r,t){const e=bs(t,this.size,16);r.uniformMatrix4fv(this.addr,!1,e)}function Em(r,t){r.uniform1iv(this.addr,t)}function Sm(r,t){r.uniform2iv(this.addr,t)}function Mm(r,t){r.uniform3iv(this.addr,t)}function ym(r,t){r.uniform4iv(this.addr,t)}function bm(r,t){r.uniform1uiv(this.addr,t)}function Tm(r,t){r.uniform2uiv(this.addr,t)}function wm(r,t){r.uniform3uiv(this.addr,t)}function Rm(r,t){r.uniform4uiv(this.addr,t)}function _m(r,t,e){const i=this.cache,n=t.length,s=ia(e,n);me(i,s)||(r.uniform1iv(this.addr,s),Ie(i,s));for(let a=0;a!==n;++a)e.setTexture2D(t[a]||Nh,s[a])}function Pm(r,t,e){const i=this.cache,n=t.length,s=ia(e,n);me(i,s)||(r.uniform1iv(this.addr,s),Ie(i,s));for(let a=0;a!==n;++a)e.setTexture3D(t[a]||Oh,s[a])}function Dm(r,t,e){const i=this.cache,n=t.length,s=ia(e,n);me(i,s)||(r.uniform1iv(this.addr,s),Ie(i,s));for(let a=0;a!==n;++a)e.setTextureCube(t[a]||Uh,s[a])}function Lm(r,t,e){const i=this.cache,n=t.length,s=ia(e,n);me(i,s)||(r.uniform1iv(this.addr,s),Ie(i,s));for(let a=0;a!==n;++a)e.setTexture2DArray(t[a]||Fh,s[a])}function Nm(r){switch(r){case 5126:return gm;case 35664:return pm;case 35665:return mm;case 35666:return Im;case 35674:return Cm;case 35675:return vm;case 35676:return xm;case 5124:case 35670:return Em;case 35667:case 35671:return Sm;case 35668:case 35672:return Mm;case 35669:case 35673:return ym;case 5125:return bm;case 36294:return Tm;case 36295:return wm;case 36296:return Rm;case 35678:case 36198:case 36298:case 36306:case 35682:return _m;case 35679:case 36299:case 36307:return Pm;case 35680:case 36300:case 36308:case 36293:return Dm;case 36289:case 36303:case 36311:case 36292:return Lm}}class Bm{constructor(t,e,i){this.id=t,this.addr=i,this.cache=[],this.type=e.type,this.setValue=fm(e.type)}}class Fm{constructor(t,e,i){this.id=t,this.addr=i,this.cache=[],this.type=e.type,this.size=e.size,this.setValue=Nm(e.type)}}class Om{constructor(t){this.id=t,this.seq=[],this.map={}}setValue(t,e,i){const n=this.seq;for(let s=0,a=n.length;s!==a;++s){const o=n[s];o.setValue(t,e[o.id],i)}}}const IA=/(\w+)(\])?(\[|\.)?/g;function Wh(r,t){r.seq.push(t),r.map[t.id]=t}function Um(r,t,e){const i=r.name,n=i.length;for(IA.lastIndex=0;;){const s=IA.exec(i),a=IA.lastIndex;let o=s[1];const l=s[2]==="]",A=s[3];if(l&&(o=o|0),A===void 0||A==="["&&a+2===n){Wh(e,A===void 0?new Bm(o,r,t):new Fm(o,r,t));break}else{let c=e.map[o];c===void 0&&(c=new Om(o),Wh(e,c)),e=c}}}class na{constructor(t,e){this.seq=[],this.map={};const i=t.getProgramParameter(e,t.ACTIVE_UNIFORMS);for(let n=0;n<i;++n){const s=t.getActiveUniform(e,n),a=t.getUniformLocation(e,s.name);Um(s,a,this)}}setValue(t,e,i,n){const s=this.map[e];s!==void 0&&s.setValue(t,i,n)}setOptional(t,e,i){const n=e[i];n!==void 0&&this.setValue(t,i,n)}static upload(t,e,i,n){for(let s=0,a=e.length;s!==a;++s){const o=e[s],l=i[o.id];l.needsUpdate!==!1&&o.setValue(t,l.value,n)}}static seqWithValue(t,e){const i=[];for(let n=0,s=t.length;n!==s;++n){const a=t[n];a.id in e&&i.push(a)}return i}}function Yh(r,t,e){const i=r.createShader(t);return r.shaderSource(i,e),r.compileShader(i),i}const zm=37297;let Gm=0;function km(r,t){const e=r.split(`
|
|
3853
|
+
`),i=[],n=Math.max(t-6,0),s=Math.min(t+6,e.length);for(let a=n;a<s;a++){const o=a+1;i.push(`${o===t?">":" "} ${o}: ${e[a]}`)}return i.join(`
|
|
3854
|
+
`)}const Xh=new Nt;function Hm(r){Yt._getMatrix(Xh,Yt.workingColorSpace,r);const t=`mat3( ${Xh.elements.map(e=>e.toFixed(4))} )`;switch(Yt.getTransfer(r)){case Nr:return[t,"LinearTransferOETF"];case qt:return[t,"sRGBTransferOETF"];default:return console.warn("THREE.WebGLProgram: Unsupported color space: ",r),[t,"LinearTransferOETF"]}}function Zh(r,t,e){const i=r.getShaderParameter(t,r.COMPILE_STATUS),s=(r.getShaderInfoLog(t)||"").trim();if(i&&s==="")return"";const a=/ERROR: 0:(\d+)/.exec(s);if(a){const o=parseInt(a[1]);return e.toUpperCase()+`
|
|
3855
|
+
|
|
3856
|
+
`+s+`
|
|
3857
|
+
|
|
3858
|
+
`+km(r.getShaderSource(t),o)}else return s}function Vm(r,t){const e=Hm(t);return[`vec4 ${r}( vec4 value ) {`,` return ${e[1]}( vec4( value.rgb * ${e[0]}, value.a ) );`,"}"].join(`
|
|
3859
|
+
`)}function Wm(r,t){let e;switch(t){case Md:e="Linear";break;case yd:e="Reinhard";break;case bd:e="Cineon";break;case Td:e="ACESFilmic";break;case Rd:e="AgX";break;case _d:e="Neutral";break;case wd:e="Custom";break;default:console.warn("THREE.WebGLProgram: Unsupported toneMapping:",t),e="Linear"}return"vec3 "+r+"( vec3 color ) { return "+e+"ToneMapping( color ); }"}const sa=new B;function Ym(){Yt.getLuminanceCoefficients(sa);const r=sa.x.toFixed(4),t=sa.y.toFixed(4),e=sa.z.toFixed(4);return["float luminance( const in vec3 rgb ) {",` const vec3 weights = vec3( ${r}, ${t}, ${e} );`," return dot( weights, rgb );","}"].join(`
|
|
3860
|
+
`)}function Xm(r){return[r.extensionClipCullDistance?"#extension GL_ANGLE_clip_cull_distance : require":"",r.extensionMultiDraw?"#extension GL_ANGLE_multi_draw : require":""].filter(nr).join(`
|
|
3861
|
+
`)}function Zm(r){const t=[];for(const e in r){const i=r[e];i!==!1&&t.push("#define "+e+" "+i)}return t.join(`
|
|
3862
|
+
`)}function Jm(r,t){const e={},i=r.getProgramParameter(t,r.ACTIVE_ATTRIBUTES);for(let n=0;n<i;n++){const s=r.getActiveAttrib(t,n),a=s.name;let o=1;s.type===r.FLOAT_MAT2&&(o=2),s.type===r.FLOAT_MAT3&&(o=3),s.type===r.FLOAT_MAT4&&(o=4),e[a]={type:s.type,location:r.getAttribLocation(t,a),locationSize:o}}return e}function nr(r){return r!==""}function Jh(r,t){const e=t.numSpotLightShadows+t.numSpotLightMaps-t.numSpotLightShadowsWithMaps;return r.replace(/NUM_DIR_LIGHTS/g,t.numDirLights).replace(/NUM_SPOT_LIGHTS/g,t.numSpotLights).replace(/NUM_SPOT_LIGHT_MAPS/g,t.numSpotLightMaps).replace(/NUM_SPOT_LIGHT_COORDS/g,e).replace(/NUM_RECT_AREA_LIGHTS/g,t.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,t.numPointLights).replace(/NUM_HEMI_LIGHTS/g,t.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g,t.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g,t.numSpotLightShadowsWithMaps).replace(/NUM_SPOT_LIGHT_SHADOWS/g,t.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g,t.numPointLightShadows)}function jh(r,t){return r.replace(/NUM_CLIPPING_PLANES/g,t.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g,t.numClippingPlanes-t.numClipIntersection)}const jm=/^[ \t]*#include +<([\w\d./]+)>/gm;function CA(r){return r.replace(jm,qm)}const Qm=new Map;function qm(r,t){let e=Ft[t];if(e===void 0){const i=Qm.get(t);if(i!==void 0)e=Ft[i],console.warn('THREE.WebGLRenderer: Shader chunk "%s" has been deprecated. Use "%s" instead.',t,i);else throw new Error("Can not resolve #include <"+t+">")}return CA(e)}const Km=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function Qh(r){return r.replace(Km,$m)}function $m(r,t,e,i){let n="";for(let s=parseInt(t);s<parseInt(e);s++)n+=i.replace(/\[\s*i\s*\]/g,"[ "+s+" ]").replace(/UNROLLED_LOOP_INDEX/g,s);return n}function qh(r){let t=`precision ${r.precision} float;
|
|
3863
|
+
precision ${r.precision} int;
|
|
3864
|
+
precision ${r.precision} sampler2D;
|
|
3865
|
+
precision ${r.precision} samplerCube;
|
|
3866
|
+
precision ${r.precision} sampler3D;
|
|
3867
|
+
precision ${r.precision} sampler2DArray;
|
|
3868
|
+
precision ${r.precision} sampler2DShadow;
|
|
3869
|
+
precision ${r.precision} samplerCubeShadow;
|
|
3870
|
+
precision ${r.precision} sampler2DArrayShadow;
|
|
3871
|
+
precision ${r.precision} isampler2D;
|
|
3872
|
+
precision ${r.precision} isampler3D;
|
|
3873
|
+
precision ${r.precision} isamplerCube;
|
|
3874
|
+
precision ${r.precision} isampler2DArray;
|
|
3875
|
+
precision ${r.precision} usampler2D;
|
|
3876
|
+
precision ${r.precision} usampler3D;
|
|
3877
|
+
precision ${r.precision} usamplerCube;
|
|
3878
|
+
precision ${r.precision} usampler2DArray;
|
|
3879
|
+
`;return r.precision==="highp"?t+=`
|
|
3880
|
+
#define HIGH_PRECISION`:r.precision==="mediump"?t+=`
|
|
3881
|
+
#define MEDIUM_PRECISION`:r.precision==="lowp"&&(t+=`
|
|
3882
|
+
#define LOW_PRECISION`),t}function tI(r){let t="SHADOWMAP_TYPE_BASIC";return r.shadowMapType===Ml?t="SHADOWMAP_TYPE_PCF":r.shadowMapType===nd?t="SHADOWMAP_TYPE_PCF_SOFT":r.shadowMapType===Di&&(t="SHADOWMAP_TYPE_VSM"),t}function eI(r){let t="ENVMAP_TYPE_CUBE";if(r.envMap)switch(r.envMapMode){case es:case is:t="ENVMAP_TYPE_CUBE";break;case Tr:t="ENVMAP_TYPE_CUBE_UV";break}return t}function iI(r){let t="ENVMAP_MODE_REFLECTION";return r.envMap&&r.envMapMode===is&&(t="ENVMAP_MODE_REFRACTION"),t}function nI(r){let t="ENVMAP_BLENDING_NONE";if(r.envMap)switch(r.combine){case wl:t="ENVMAP_BLENDING_MULTIPLY";break;case Ed:t="ENVMAP_BLENDING_MIX";break;case Sd:t="ENVMAP_BLENDING_ADD";break}return t}function sI(r){const t=r.envMapCubeUVHeight;if(t===null)return null;const e=Math.log2(t)-2,i=1/t;return{texelWidth:1/(3*Math.max(Math.pow(2,e),112)),texelHeight:i,maxMip:e}}function rI(r,t,e,i){const n=r.getContext(),s=e.defines;let a=e.vertexShader,o=e.fragmentShader;const l=tI(e),A=eI(e),h=iI(e),c=nI(e),u=sI(e),d=Xm(e),p=Zm(s),m=n.createProgram();let g,f,y=e.glslVersion?"#version "+e.glslVersion+`
|
|
3883
|
+
`:"";e.isRawShaderMaterial?(g=["#define SHADER_TYPE "+e.shaderType,"#define SHADER_NAME "+e.shaderName,p].filter(nr).join(`
|
|
3884
3884
|
`),g.length>0&&(g+=`
|
|
3885
|
-
`),f=["#define SHADER_TYPE "+e.shaderType,"#define SHADER_NAME "+e.shaderName,p].filter(
|
|
3885
|
+
`),f=["#define SHADER_TYPE "+e.shaderType,"#define SHADER_NAME "+e.shaderName,p].filter(nr).join(`
|
|
3886
3886
|
`),f.length>0&&(f+=`
|
|
3887
|
-
`)):(g=[
|
|
3888
|
-
`].filter(
|
|
3889
|
-
`),f=[
|
|
3890
|
-
`].filter(
|
|
3891
|
-
`)),a=
|
|
3887
|
+
`)):(g=[qh(e),"#define SHADER_TYPE "+e.shaderType,"#define SHADER_NAME "+e.shaderName,p,e.extensionClipCullDistance?"#define USE_CLIP_DISTANCE":"",e.batching?"#define USE_BATCHING":"",e.batchingColor?"#define USE_BATCHING_COLOR":"",e.instancing?"#define USE_INSTANCING":"",e.instancingColor?"#define USE_INSTANCING_COLOR":"",e.instancingMorph?"#define USE_INSTANCING_MORPH":"",e.useFog&&e.fog?"#define USE_FOG":"",e.useFog&&e.fogExp2?"#define FOG_EXP2":"",e.map?"#define USE_MAP":"",e.envMap?"#define USE_ENVMAP":"",e.envMap?"#define "+h:"",e.lightMap?"#define USE_LIGHTMAP":"",e.aoMap?"#define USE_AOMAP":"",e.bumpMap?"#define USE_BUMPMAP":"",e.normalMap?"#define USE_NORMALMAP":"",e.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",e.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",e.displacementMap?"#define USE_DISPLACEMENTMAP":"",e.emissiveMap?"#define USE_EMISSIVEMAP":"",e.anisotropy?"#define USE_ANISOTROPY":"",e.anisotropyMap?"#define USE_ANISOTROPYMAP":"",e.clearcoatMap?"#define USE_CLEARCOATMAP":"",e.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",e.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",e.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",e.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",e.specularMap?"#define USE_SPECULARMAP":"",e.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",e.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",e.roughnessMap?"#define USE_ROUGHNESSMAP":"",e.metalnessMap?"#define USE_METALNESSMAP":"",e.alphaMap?"#define USE_ALPHAMAP":"",e.alphaHash?"#define USE_ALPHAHASH":"",e.transmission?"#define USE_TRANSMISSION":"",e.transmissionMap?"#define USE_TRANSMISSIONMAP":"",e.thicknessMap?"#define USE_THICKNESSMAP":"",e.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",e.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",e.mapUv?"#define MAP_UV "+e.mapUv:"",e.alphaMapUv?"#define ALPHAMAP_UV "+e.alphaMapUv:"",e.lightMapUv?"#define LIGHTMAP_UV "+e.lightMapUv:"",e.aoMapUv?"#define AOMAP_UV "+e.aoMapUv:"",e.emissiveMapUv?"#define EMISSIVEMAP_UV "+e.emissiveMapUv:"",e.bumpMapUv?"#define BUMPMAP_UV "+e.bumpMapUv:"",e.normalMapUv?"#define NORMALMAP_UV "+e.normalMapUv:"",e.displacementMapUv?"#define DISPLACEMENTMAP_UV "+e.displacementMapUv:"",e.metalnessMapUv?"#define METALNESSMAP_UV "+e.metalnessMapUv:"",e.roughnessMapUv?"#define ROUGHNESSMAP_UV "+e.roughnessMapUv:"",e.anisotropyMapUv?"#define ANISOTROPYMAP_UV "+e.anisotropyMapUv:"",e.clearcoatMapUv?"#define CLEARCOATMAP_UV "+e.clearcoatMapUv:"",e.clearcoatNormalMapUv?"#define CLEARCOAT_NORMALMAP_UV "+e.clearcoatNormalMapUv:"",e.clearcoatRoughnessMapUv?"#define CLEARCOAT_ROUGHNESSMAP_UV "+e.clearcoatRoughnessMapUv:"",e.iridescenceMapUv?"#define IRIDESCENCEMAP_UV "+e.iridescenceMapUv:"",e.iridescenceThicknessMapUv?"#define IRIDESCENCE_THICKNESSMAP_UV "+e.iridescenceThicknessMapUv:"",e.sheenColorMapUv?"#define SHEEN_COLORMAP_UV "+e.sheenColorMapUv:"",e.sheenRoughnessMapUv?"#define SHEEN_ROUGHNESSMAP_UV "+e.sheenRoughnessMapUv:"",e.specularMapUv?"#define SPECULARMAP_UV "+e.specularMapUv:"",e.specularColorMapUv?"#define SPECULAR_COLORMAP_UV "+e.specularColorMapUv:"",e.specularIntensityMapUv?"#define SPECULAR_INTENSITYMAP_UV "+e.specularIntensityMapUv:"",e.transmissionMapUv?"#define TRANSMISSIONMAP_UV "+e.transmissionMapUv:"",e.thicknessMapUv?"#define THICKNESSMAP_UV "+e.thicknessMapUv:"",e.vertexTangents&&e.flatShading===!1?"#define USE_TANGENT":"",e.vertexColors?"#define USE_COLOR":"",e.vertexAlphas?"#define USE_COLOR_ALPHA":"",e.vertexUv1s?"#define USE_UV1":"",e.vertexUv2s?"#define USE_UV2":"",e.vertexUv3s?"#define USE_UV3":"",e.pointsUvs?"#define USE_POINTS_UV":"",e.flatShading?"#define FLAT_SHADED":"",e.skinning?"#define USE_SKINNING":"",e.morphTargets?"#define USE_MORPHTARGETS":"",e.morphNormals&&e.flatShading===!1?"#define USE_MORPHNORMALS":"",e.morphColors?"#define USE_MORPHCOLORS":"",e.morphTargetsCount>0?"#define MORPHTARGETS_TEXTURE_STRIDE "+e.morphTextureStride:"",e.morphTargetsCount>0?"#define MORPHTARGETS_COUNT "+e.morphTargetsCount:"",e.doubleSided?"#define DOUBLE_SIDED":"",e.flipSided?"#define FLIP_SIDED":"",e.shadowMapEnabled?"#define USE_SHADOWMAP":"",e.shadowMapEnabled?"#define "+l:"",e.sizeAttenuation?"#define USE_SIZEATTENUATION":"",e.numLightProbes>0?"#define USE_LIGHT_PROBES":"",e.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",e.reversedDepthBuffer?"#define USE_REVERSEDEPTHBUF":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING"," attribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR"," attribute vec3 instanceColor;","#endif","#ifdef USE_INSTANCING_MORPH"," uniform sampler2D morphTexture;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_UV1"," attribute vec2 uv1;","#endif","#ifdef USE_UV2"," attribute vec2 uv2;","#endif","#ifdef USE_UV3"," attribute vec2 uv3;","#endif","#ifdef USE_TANGENT"," attribute vec4 tangent;","#endif","#if defined( USE_COLOR_ALPHA )"," attribute vec4 color;","#elif defined( USE_COLOR )"," attribute vec3 color;","#endif","#ifdef USE_SKINNING"," attribute vec4 skinIndex;"," attribute vec4 skinWeight;","#endif",`
|
|
3888
|
+
`].filter(nr).join(`
|
|
3889
|
+
`),f=[qh(e),"#define SHADER_TYPE "+e.shaderType,"#define SHADER_NAME "+e.shaderName,p,e.useFog&&e.fog?"#define USE_FOG":"",e.useFog&&e.fogExp2?"#define FOG_EXP2":"",e.alphaToCoverage?"#define ALPHA_TO_COVERAGE":"",e.map?"#define USE_MAP":"",e.matcap?"#define USE_MATCAP":"",e.envMap?"#define USE_ENVMAP":"",e.envMap?"#define "+A:"",e.envMap?"#define "+h:"",e.envMap?"#define "+c:"",u?"#define CUBEUV_TEXEL_WIDTH "+u.texelWidth:"",u?"#define CUBEUV_TEXEL_HEIGHT "+u.texelHeight:"",u?"#define CUBEUV_MAX_MIP "+u.maxMip+".0":"",e.lightMap?"#define USE_LIGHTMAP":"",e.aoMap?"#define USE_AOMAP":"",e.bumpMap?"#define USE_BUMPMAP":"",e.normalMap?"#define USE_NORMALMAP":"",e.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",e.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",e.emissiveMap?"#define USE_EMISSIVEMAP":"",e.anisotropy?"#define USE_ANISOTROPY":"",e.anisotropyMap?"#define USE_ANISOTROPYMAP":"",e.clearcoat?"#define USE_CLEARCOAT":"",e.clearcoatMap?"#define USE_CLEARCOATMAP":"",e.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",e.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",e.dispersion?"#define USE_DISPERSION":"",e.iridescence?"#define USE_IRIDESCENCE":"",e.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",e.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",e.specularMap?"#define USE_SPECULARMAP":"",e.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",e.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",e.roughnessMap?"#define USE_ROUGHNESSMAP":"",e.metalnessMap?"#define USE_METALNESSMAP":"",e.alphaMap?"#define USE_ALPHAMAP":"",e.alphaTest?"#define USE_ALPHATEST":"",e.alphaHash?"#define USE_ALPHAHASH":"",e.sheen?"#define USE_SHEEN":"",e.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",e.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",e.transmission?"#define USE_TRANSMISSION":"",e.transmissionMap?"#define USE_TRANSMISSIONMAP":"",e.thicknessMap?"#define USE_THICKNESSMAP":"",e.vertexTangents&&e.flatShading===!1?"#define USE_TANGENT":"",e.vertexColors||e.instancingColor||e.batchingColor?"#define USE_COLOR":"",e.vertexAlphas?"#define USE_COLOR_ALPHA":"",e.vertexUv1s?"#define USE_UV1":"",e.vertexUv2s?"#define USE_UV2":"",e.vertexUv3s?"#define USE_UV3":"",e.pointsUvs?"#define USE_POINTS_UV":"",e.gradientMap?"#define USE_GRADIENTMAP":"",e.flatShading?"#define FLAT_SHADED":"",e.doubleSided?"#define DOUBLE_SIDED":"",e.flipSided?"#define FLIP_SIDED":"",e.shadowMapEnabled?"#define USE_SHADOWMAP":"",e.shadowMapEnabled?"#define "+l:"",e.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",e.numLightProbes>0?"#define USE_LIGHT_PROBES":"",e.decodeVideoTexture?"#define DECODE_VIDEO_TEXTURE":"",e.decodeVideoTextureEmissive?"#define DECODE_VIDEO_TEXTURE_EMISSIVE":"",e.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",e.reversedDepthBuffer?"#define USE_REVERSEDEPTHBUF":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",e.toneMapping!==tn?"#define TONE_MAPPING":"",e.toneMapping!==tn?Ft.tonemapping_pars_fragment:"",e.toneMapping!==tn?Wm("toneMapping",e.toneMapping):"",e.dithering?"#define DITHERING":"",e.opaque?"#define OPAQUE":"",Ft.colorspace_pars_fragment,Vm("linearToOutputTexel",e.outputColorSpace),Ym(),e.useDepthPacking?"#define DEPTH_PACKING "+e.depthPacking:"",`
|
|
3890
|
+
`].filter(nr).join(`
|
|
3891
|
+
`)),a=CA(a),a=Jh(a,e),a=jh(a,e),o=CA(o),o=Jh(o,e),o=jh(o,e),a=Qh(a),o=Qh(o),e.isRawShaderMaterial!==!0&&(y=`#version 300 es
|
|
3892
3892
|
`,g=[d,"#define attribute in","#define varying out","#define texture2D texture"].join(`
|
|
3893
3893
|
`)+`
|
|
3894
|
-
`+g,f=["#define varying in",e.glslVersion===
|
|
3894
|
+
`+g,f=["#define varying in",e.glslVersion===Hl?"":"layout(location = 0) out highp vec4 pc_fragColor;",e.glslVersion===Hl?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join(`
|
|
3895
3895
|
`)+`
|
|
3896
|
-
`+f);const S=
|
|
3896
|
+
`+f);const S=y+g+a,v=y+f+o,w=Yh(n,n.VERTEX_SHADER,S),T=Yh(n,n.FRAGMENT_SHADER,v);n.attachShader(m,w),n.attachShader(m,T),e.index0AttributeName!==void 0?n.bindAttribLocation(m,0,e.index0AttributeName):e.morphTargets===!0&&n.bindAttribLocation(m,0,"position"),n.linkProgram(m);function R(b){if(r.debug.checkShaderErrors){const z=n.getProgramInfoLog(m)||"",F=n.getShaderInfoLog(w)||"",U=n.getShaderInfoLog(T)||"",W=z.trim(),Y=F.trim(),$=U.trim();let H=!0,rt=!0;if(n.getProgramParameter(m,n.LINK_STATUS)===!1)if(H=!1,typeof r.debug.onShaderError=="function")r.debug.onShaderError(n,m,w,T);else{const lt=Zh(n,w,"vertex"),mt=Zh(n,T,"fragment");console.error("THREE.WebGLProgram: Shader Error "+n.getError()+" - VALIDATE_STATUS "+n.getProgramParameter(m,n.VALIDATE_STATUS)+`
|
|
3897
3897
|
|
|
3898
3898
|
Material Name: `+b.name+`
|
|
3899
3899
|
Material Type: `+b.type+`
|
|
3900
3900
|
|
|
3901
3901
|
Program Info Log: `+W+`
|
|
3902
|
-
`+
|
|
3903
|
-
`+mt)}else W!==""?console.warn("THREE.WebGLProgram: Program Info Log:",W):(Y===""||$==="")&&(rt=!1);rt&&(b.diagnostics={runnable:H,programLog:W,vertexShader:{log:Y,prefix:g},fragmentShader:{log:$,prefix:f}})}n.deleteShader(T),n.deleteShader(_),P=new la(n,m),E=oC(n,m)}let P;this.getUniforms=function(){return P===void 0&&w(this),P};let E;this.getAttributes=function(){return E===void 0&&w(this),E};let x=e.rendererExtensionParallelShaderCompile===!1;return this.isReady=function(){return x===!1&&(x=n.getProgramParameter(m,Km)),x},this.destroy=function(){i.releaseStatesOfProgram(this),n.deleteProgram(m),this.program=void 0},this.type=e.shaderType,this.name=e.shaderName,this.id=$m++,this.cacheKey=t,this.usedTimes=1,this.program=m,this.vertexShader=T,this.fragmentShader=_,this}let IC=0;class vC{constructor(){this.shaderCache=new Map,this.materialCache=new Map}update(t){const e=t.vertexShader,i=t.fragmentShader,n=this._getShaderStage(e),r=this._getShaderStage(i),a=this._getShaderCacheForMaterial(t);return a.has(n)===!1&&(a.add(n),n.usedTimes++),a.has(r)===!1&&(a.add(r),r.usedTimes++),this}remove(t){const e=this.materialCache.get(t);for(const i of e)i.usedTimes--,i.usedTimes===0&&this.shaderCache.delete(i.code);return this.materialCache.delete(t),this}getVertexShaderID(t){return this._getShaderStage(t.vertexShader).id}getFragmentShaderID(t){return this._getShaderStage(t.fragmentShader).id}dispose(){this.shaderCache.clear(),this.materialCache.clear()}_getShaderCacheForMaterial(t){const e=this.materialCache;let i=e.get(t);return i===void 0&&(i=new Set,e.set(t,i)),i}_getShaderStage(t){const e=this.shaderCache;let i=e.get(t);return i===void 0&&(i=new xC(t),e.set(t,i)),i}}class xC{constructor(t){this.id=IC++,this.code=t,this.usedTimes=0}}function EC(s,t,e,i,n,r,a){const o=new sA,h=new vC,l=new Set,A=[],c=n.logarithmicDepthBuffer,u=n.vertexTextures;let d=n.precision;const p={MeshDepthMaterial:"depth",MeshDistanceMaterial:"distanceRGBA",MeshNormalMaterial:"normal",MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",MeshPhongMaterial:"phong",MeshToonMaterial:"toon",MeshStandardMaterial:"physical",MeshPhysicalMaterial:"physical",MeshMatcapMaterial:"matcap",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",PointsMaterial:"points",ShadowMaterial:"shadow",SpriteMaterial:"sprite"};function m(E){return l.add(E),E===0?"uv":`uv${E}`}function g(E,x,b,z,F){const U=z.fog,W=F.geometry,Y=E.isMeshStandardMaterial?z.environment:null,$=(E.isMeshStandardMaterial?e:t).get(E.envMap||Y),H=$&&$.mapping===Pr?$.image.height:null,rt=p[E.type];E.precision!==null&&(d=n.getMaxPrecision(E.precision),d!==E.precision&&console.warn("THREE.WebGLProgram.getParameters:",E.precision,"not supported, using",d,"instead."));const ht=W.morphAttributes.position||W.morphAttributes.normal||W.morphAttributes.color,mt=ht!==void 0?ht.length:0;let Ut=0;W.morphAttributes.position!==void 0&&(Ut=1),W.morphAttributes.normal!==void 0&&(Ut=2),W.morphAttributes.color!==void 0&&(Ut=3);let re,te,j,ot;if(rt){const Qt=Mi[rt];re=Qt.vertexShader,te=Qt.fragmentShader}else re=E.vertexShader,te=E.fragmentShader,h.update(E),j=h.getVertexShaderID(E),ot=h.getFragmentShaderID(E);const nt=s.getRenderTarget(),bt=s.state.buffers.depth.getReversed(),_t=F.isInstancedMesh===!0,Dt=F.isBatchedMesh===!0,fe=!!E.map,Yt=!!E.matcap,R=!!$,ie=!!E.aoMap,yt=!!E.lightMap,jt=!!E.bumpMap,Et=!!E.normalMap,ae=!!E.displacementMap,ft=!!E.emissiveMap,zt=!!E.metalnessMap,ye=!!E.roughnessMap,ge=E.anisotropy>0,y=E.clearcoat>0,C=E.dispersion>0,B=E.iridescence>0,Z=E.sheen>0,Q=E.transmission>0,X=ge&&!!E.anisotropyMap,xt=y&&!!E.clearcoatMap,it=y&&!!E.clearcoatNormalMap,Ct=y&&!!E.clearcoatRoughnessMap,It=B&&!!E.iridescenceMap,tt=B&&!!E.iridescenceThicknessMap,ct=Z&&!!E.sheenColorMap,wt=Z&&!!E.sheenRoughnessMap,vt=!!E.specularMap,lt=!!E.specularColorMap,Ft=!!E.specularIntensityMap,D=Q&&!!E.transmissionMap,et=Q&&!!E.thicknessMap,st=!!E.gradientMap,dt=!!E.alphaMap,q=E.alphaTest>0,J=!!E.alphaHash,pt=!!E.extensions;let Lt=sn;E.toneMapped&&(nt===null||nt.isXRRenderTarget===!0)&&(Lt=s.toneMapping);const ne={shaderID:rt,shaderType:E.type,shaderName:E.name,vertexShader:re,fragmentShader:te,defines:E.defines,customVertexShaderID:j,customFragmentShaderID:ot,isRawShaderMaterial:E.isRawShaderMaterial===!0,glslVersion:E.glslVersion,precision:d,batching:Dt,batchingColor:Dt&&F._colorsTexture!==null,instancing:_t,instancingColor:_t&&F.instanceColor!==null,instancingMorph:_t&&F.morphTexture!==null,supportsVertexTextures:u,outputColorSpace:nt===null?s.outputColorSpace:nt.isXRRenderTarget===!0?nt.texture.colorSpace:As,alphaToCoverage:!!E.alphaToCoverage,map:fe,matcap:Yt,envMap:R,envMapMode:R&&$.mapping,envMapCubeUVHeight:H,aoMap:ie,lightMap:yt,bumpMap:jt,normalMap:Et,displacementMap:u&&ae,emissiveMap:ft,normalMapObjectSpace:Et&&E.normalMapType===Xd,normalMapTangentSpace:Et&&E.normalMapType===Wh,metalnessMap:zt,roughnessMap:ye,anisotropy:ge,anisotropyMap:X,clearcoat:y,clearcoatMap:xt,clearcoatNormalMap:it,clearcoatRoughnessMap:Ct,dispersion:C,iridescence:B,iridescenceMap:It,iridescenceThicknessMap:tt,sheen:Z,sheenColorMap:ct,sheenRoughnessMap:wt,specularMap:vt,specularColorMap:lt,specularIntensityMap:Ft,transmission:Q,transmissionMap:D,thicknessMap:et,gradientMap:st,opaque:E.transparent===!1&&E.blending===as&&E.alphaToCoverage===!1,alphaMap:dt,alphaTest:q,alphaHash:J,combine:E.combine,mapUv:fe&&m(E.map.channel),aoMapUv:ie&&m(E.aoMap.channel),lightMapUv:yt&&m(E.lightMap.channel),bumpMapUv:jt&&m(E.bumpMap.channel),normalMapUv:Et&&m(E.normalMap.channel),displacementMapUv:ae&&m(E.displacementMap.channel),emissiveMapUv:ft&&m(E.emissiveMap.channel),metalnessMapUv:zt&&m(E.metalnessMap.channel),roughnessMapUv:ye&&m(E.roughnessMap.channel),anisotropyMapUv:X&&m(E.anisotropyMap.channel),clearcoatMapUv:xt&&m(E.clearcoatMap.channel),clearcoatNormalMapUv:it&&m(E.clearcoatNormalMap.channel),clearcoatRoughnessMapUv:Ct&&m(E.clearcoatRoughnessMap.channel),iridescenceMapUv:It&&m(E.iridescenceMap.channel),iridescenceThicknessMapUv:tt&&m(E.iridescenceThicknessMap.channel),sheenColorMapUv:ct&&m(E.sheenColorMap.channel),sheenRoughnessMapUv:wt&&m(E.sheenRoughnessMap.channel),specularMapUv:vt&&m(E.specularMap.channel),specularColorMapUv:lt&&m(E.specularColorMap.channel),specularIntensityMapUv:Ft&&m(E.specularIntensityMap.channel),transmissionMapUv:D&&m(E.transmissionMap.channel),thicknessMapUv:et&&m(E.thicknessMap.channel),alphaMapUv:dt&&m(E.alphaMap.channel),vertexTangents:!!W.attributes.tangent&&(Et||ge),vertexColors:E.vertexColors,vertexAlphas:E.vertexColors===!0&&!!W.attributes.color&&W.attributes.color.itemSize===4,pointsUvs:F.isPoints===!0&&!!W.attributes.uv&&(fe||dt),fog:!!U,useFog:E.fog===!0,fogExp2:!!U&&U.isFogExp2,flatShading:E.flatShading===!0&&E.wireframe===!1,sizeAttenuation:E.sizeAttenuation===!0,logarithmicDepthBuffer:c,reversedDepthBuffer:bt,skinning:F.isSkinnedMesh===!0,morphTargets:W.morphAttributes.position!==void 0,morphNormals:W.morphAttributes.normal!==void 0,morphColors:W.morphAttributes.color!==void 0,morphTargetsCount:mt,morphTextureStride:Ut,numDirLights:x.directional.length,numPointLights:x.point.length,numSpotLights:x.spot.length,numSpotLightMaps:x.spotLightMap.length,numRectAreaLights:x.rectArea.length,numHemiLights:x.hemi.length,numDirLightShadows:x.directionalShadowMap.length,numPointLightShadows:x.pointShadowMap.length,numSpotLightShadows:x.spotShadowMap.length,numSpotLightShadowsWithMaps:x.numSpotLightShadowsWithMaps,numLightProbes:x.numLightProbes,numClippingPlanes:a.numPlanes,numClipIntersection:a.numIntersection,dithering:E.dithering,shadowMapEnabled:s.shadowMap.enabled&&b.length>0,shadowMapType:s.shadowMap.type,toneMapping:Lt,decodeVideoTexture:fe&&E.map.isVideoTexture===!0&&Xt.getTransfer(E.map.colorSpace)===qt,decodeVideoTextureEmissive:ft&&E.emissiveMap.isVideoTexture===!0&&Xt.getTransfer(E.emissiveMap.colorSpace)===qt,premultipliedAlpha:E.premultipliedAlpha,doubleSided:E.side===Fi,flipSided:E.side===Ue,useDepthPacking:E.depthPacking>=0,depthPacking:E.depthPacking||0,index0AttributeName:E.index0AttributeName,extensionClipCullDistance:pt&&E.extensions.clipCullDistance===!0&&i.has("WEBGL_clip_cull_distance"),extensionMultiDraw:(pt&&E.extensions.multiDraw===!0||Dt)&&i.has("WEBGL_multi_draw"),rendererExtensionParallelShaderCompile:i.has("KHR_parallel_shader_compile"),customProgramCacheKey:E.customProgramCacheKey()};return ne.vertexUv1s=l.has(1),ne.vertexUv2s=l.has(2),ne.vertexUv3s=l.has(3),l.clear(),ne}function f(E){const x=[];if(E.shaderID?x.push(E.shaderID):(x.push(E.customVertexShaderID),x.push(E.customFragmentShaderID)),E.defines!==void 0)for(const b in E.defines)x.push(b),x.push(E.defines[b]);return E.isRawShaderMaterial===!1&&(M(x,E),S(x,E),x.push(s.outputColorSpace)),x.push(E.customProgramCacheKey),x.join()}function M(E,x){E.push(x.precision),E.push(x.outputColorSpace),E.push(x.envMapMode),E.push(x.envMapCubeUVHeight),E.push(x.mapUv),E.push(x.alphaMapUv),E.push(x.lightMapUv),E.push(x.aoMapUv),E.push(x.bumpMapUv),E.push(x.normalMapUv),E.push(x.displacementMapUv),E.push(x.emissiveMapUv),E.push(x.metalnessMapUv),E.push(x.roughnessMapUv),E.push(x.anisotropyMapUv),E.push(x.clearcoatMapUv),E.push(x.clearcoatNormalMapUv),E.push(x.clearcoatRoughnessMapUv),E.push(x.iridescenceMapUv),E.push(x.iridescenceThicknessMapUv),E.push(x.sheenColorMapUv),E.push(x.sheenRoughnessMapUv),E.push(x.specularMapUv),E.push(x.specularColorMapUv),E.push(x.specularIntensityMapUv),E.push(x.transmissionMapUv),E.push(x.thicknessMapUv),E.push(x.combine),E.push(x.fogExp2),E.push(x.sizeAttenuation),E.push(x.morphTargetsCount),E.push(x.morphAttributeCount),E.push(x.numDirLights),E.push(x.numPointLights),E.push(x.numSpotLights),E.push(x.numSpotLightMaps),E.push(x.numHemiLights),E.push(x.numRectAreaLights),E.push(x.numDirLightShadows),E.push(x.numPointLightShadows),E.push(x.numSpotLightShadows),E.push(x.numSpotLightShadowsWithMaps),E.push(x.numLightProbes),E.push(x.shadowMapType),E.push(x.toneMapping),E.push(x.numClippingPlanes),E.push(x.numClipIntersection),E.push(x.depthPacking)}function S(E,x){o.disableAll(),x.supportsVertexTextures&&o.enable(0),x.instancing&&o.enable(1),x.instancingColor&&o.enable(2),x.instancingMorph&&o.enable(3),x.matcap&&o.enable(4),x.envMap&&o.enable(5),x.normalMapObjectSpace&&o.enable(6),x.normalMapTangentSpace&&o.enable(7),x.clearcoat&&o.enable(8),x.iridescence&&o.enable(9),x.alphaTest&&o.enable(10),x.vertexColors&&o.enable(11),x.vertexAlphas&&o.enable(12),x.vertexUv1s&&o.enable(13),x.vertexUv2s&&o.enable(14),x.vertexUv3s&&o.enable(15),x.vertexTangents&&o.enable(16),x.anisotropy&&o.enable(17),x.alphaHash&&o.enable(18),x.batching&&o.enable(19),x.dispersion&&o.enable(20),x.batchingColor&&o.enable(21),x.gradientMap&&o.enable(22),E.push(o.mask),o.disableAll(),x.fog&&o.enable(0),x.useFog&&o.enable(1),x.flatShading&&o.enable(2),x.logarithmicDepthBuffer&&o.enable(3),x.reversedDepthBuffer&&o.enable(4),x.skinning&&o.enable(5),x.morphTargets&&o.enable(6),x.morphNormals&&o.enable(7),x.morphColors&&o.enable(8),x.premultipliedAlpha&&o.enable(9),x.shadowMapEnabled&&o.enable(10),x.doubleSided&&o.enable(11),x.flipSided&&o.enable(12),x.useDepthPacking&&o.enable(13),x.dithering&&o.enable(14),x.transmission&&o.enable(15),x.sheen&&o.enable(16),x.opaque&&o.enable(17),x.pointsUvs&&o.enable(18),x.decodeVideoTexture&&o.enable(19),x.decodeVideoTextureEmissive&&o.enable(20),x.alphaToCoverage&&o.enable(21),E.push(o.mask)}function v(E){const x=p[E.type];let b;if(x){const z=Mi[x];b=Sf.clone(z.uniforms)}else b=E.uniforms;return b}function T(E,x){let b;for(let z=0,F=A.length;z<F;z++){const U=A[z];if(U.cacheKey===x){b=U,++b.usedTimes;break}}return b===void 0&&(b=new CC(s,x,E,r),A.push(b)),b}function _(E){if(--E.usedTimes===0){const x=A.indexOf(E);A[x]=A[A.length-1],A.pop(),E.destroy()}}function w(E){h.remove(E)}function P(){h.dispose()}return{getParameters:g,getProgramCacheKey:f,getUniforms:v,acquireProgram:T,releaseProgram:_,releaseShaderCache:w,programs:A,dispose:P}}function SC(){let s=new WeakMap;function t(a){return s.has(a)}function e(a){let o=s.get(a);return o===void 0&&(o={},s.set(a,o)),o}function i(a){s.delete(a)}function n(a,o,h){s.get(a)[o]=h}function r(){s=new WeakMap}return{has:t,get:e,remove:i,update:n,dispose:r}}function yC(s,t){return s.groupOrder!==t.groupOrder?s.groupOrder-t.groupOrder:s.renderOrder!==t.renderOrder?s.renderOrder-t.renderOrder:s.material.id!==t.material.id?s.material.id-t.material.id:s.z!==t.z?s.z-t.z:s.id-t.id}function ac(s,t){return s.groupOrder!==t.groupOrder?s.groupOrder-t.groupOrder:s.renderOrder!==t.renderOrder?s.renderOrder-t.renderOrder:s.z!==t.z?t.z-s.z:s.id-t.id}function oc(){const s=[];let t=0;const e=[],i=[],n=[];function r(){t=0,e.length=0,i.length=0,n.length=0}function a(c,u,d,p,m,g){let f=s[t];return f===void 0?(f={id:c.id,object:c,geometry:u,material:d,groupOrder:p,renderOrder:c.renderOrder,z:m,group:g},s[t]=f):(f.id=c.id,f.object=c,f.geometry=u,f.material=d,f.groupOrder=p,f.renderOrder=c.renderOrder,f.z=m,f.group=g),t++,f}function o(c,u,d,p,m,g){const f=a(c,u,d,p,m,g);d.transmission>0?i.push(f):d.transparent===!0?n.push(f):e.push(f)}function h(c,u,d,p,m,g){const f=a(c,u,d,p,m,g);d.transmission>0?i.unshift(f):d.transparent===!0?n.unshift(f):e.unshift(f)}function l(c,u){e.length>1&&e.sort(c||yC),i.length>1&&i.sort(u||ac),n.length>1&&n.sort(u||ac)}function A(){for(let c=t,u=s.length;c<u;c++){const d=s[c];if(d.id===null)break;d.id=null,d.object=null,d.geometry=null,d.material=null,d.group=null}}return{opaque:e,transmissive:i,transparent:n,init:r,push:o,unshift:h,finish:A,sort:l}}function MC(){let s=new WeakMap;function t(i,n){const r=s.get(i);let a;return r===void 0?(a=new oc,s.set(i,[a])):n>=r.length?(a=new oc,r.push(a)):a=r[n],a}function e(){s=new WeakMap}return{get:t,dispose:e}}function bC(){const s={};return{get:function(t){if(s[t.id]!==void 0)return s[t.id];let e;switch(t.type){case"DirectionalLight":e={direction:new O,color:new Wt};break;case"SpotLight":e={position:new O,direction:new O,color:new Wt,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":e={position:new O,color:new Wt,distance:0,decay:0};break;case"HemisphereLight":e={direction:new O,skyColor:new Wt,groundColor:new Wt};break;case"RectAreaLight":e={color:new Wt,position:new O,halfWidth:new O,halfHeight:new O};break}return s[t.id]=e,e}}}function _C(){const s={};return{get:function(t){if(s[t.id]!==void 0)return s[t.id];let e;switch(t.type){case"DirectionalLight":e={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Nt};break;case"SpotLight":e={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Nt};break;case"PointLight":e={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Nt,shadowCameraNear:1,shadowCameraFar:1e3};break}return s[t.id]=e,e}}}let TC=0;function wC(s,t){return(t.castShadow?2:0)-(s.castShadow?2:0)+(t.map?1:0)-(s.map?1:0)}function RC(s){const t=new bC,e=_C(),i={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1,numSpotMaps:-1,numLightProbes:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotLightMap:[],spotShadow:[],spotShadowMap:[],spotLightMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],numSpotLightShadowsWithMaps:0,numLightProbes:0};for(let l=0;l<9;l++)i.probe.push(new O);const n=new O,r=new de,a=new de;function o(l){let A=0,c=0,u=0;for(let E=0;E<9;E++)i.probe[E].set(0,0,0);let d=0,p=0,m=0,g=0,f=0,M=0,S=0,v=0,T=0,_=0,w=0;l.sort(wC);for(let E=0,x=l.length;E<x;E++){const b=l[E],z=b.color,F=b.intensity,U=b.distance,W=b.shadow&&b.shadow.map?b.shadow.map.texture:null;if(b.isAmbientLight)A+=z.r*F,c+=z.g*F,u+=z.b*F;else if(b.isLightProbe){for(let Y=0;Y<9;Y++)i.probe[Y].addScaledVector(b.sh.coefficients[Y],F);w++}else if(b.isDirectionalLight){const Y=t.get(b);if(Y.color.copy(b.color).multiplyScalar(b.intensity),b.castShadow){const $=b.shadow,H=e.get(b);H.shadowIntensity=$.intensity,H.shadowBias=$.bias,H.shadowNormalBias=$.normalBias,H.shadowRadius=$.radius,H.shadowMapSize=$.mapSize,i.directionalShadow[d]=H,i.directionalShadowMap[d]=W,i.directionalShadowMatrix[d]=b.shadow.matrix,M++}i.directional[d]=Y,d++}else if(b.isSpotLight){const Y=t.get(b);Y.position.setFromMatrixPosition(b.matrixWorld),Y.color.copy(z).multiplyScalar(F),Y.distance=U,Y.coneCos=Math.cos(b.angle),Y.penumbraCos=Math.cos(b.angle*(1-b.penumbra)),Y.decay=b.decay,i.spot[m]=Y;const $=b.shadow;if(b.map&&(i.spotLightMap[T]=b.map,T++,$.updateMatrices(b),b.castShadow&&_++),i.spotLightMatrix[m]=$.matrix,b.castShadow){const H=e.get(b);H.shadowIntensity=$.intensity,H.shadowBias=$.bias,H.shadowNormalBias=$.normalBias,H.shadowRadius=$.radius,H.shadowMapSize=$.mapSize,i.spotShadow[m]=H,i.spotShadowMap[m]=W,v++}m++}else if(b.isRectAreaLight){const Y=t.get(b);Y.color.copy(z).multiplyScalar(F),Y.halfWidth.set(b.width*.5,0,0),Y.halfHeight.set(0,b.height*.5,0),i.rectArea[g]=Y,g++}else if(b.isPointLight){const Y=t.get(b);if(Y.color.copy(b.color).multiplyScalar(b.intensity),Y.distance=b.distance,Y.decay=b.decay,b.castShadow){const $=b.shadow,H=e.get(b);H.shadowIntensity=$.intensity,H.shadowBias=$.bias,H.shadowNormalBias=$.normalBias,H.shadowRadius=$.radius,H.shadowMapSize=$.mapSize,H.shadowCameraNear=$.camera.near,H.shadowCameraFar=$.camera.far,i.pointShadow[p]=H,i.pointShadowMap[p]=W,i.pointShadowMatrix[p]=b.shadow.matrix,S++}i.point[p]=Y,p++}else if(b.isHemisphereLight){const Y=t.get(b);Y.skyColor.copy(b.color).multiplyScalar(F),Y.groundColor.copy(b.groundColor).multiplyScalar(F),i.hemi[f]=Y,f++}}g>0&&(s.has("OES_texture_float_linear")===!0?(i.rectAreaLTC1=at.LTC_FLOAT_1,i.rectAreaLTC2=at.LTC_FLOAT_2):(i.rectAreaLTC1=at.LTC_HALF_1,i.rectAreaLTC2=at.LTC_HALF_2)),i.ambient[0]=A,i.ambient[1]=c,i.ambient[2]=u;const P=i.hash;(P.directionalLength!==d||P.pointLength!==p||P.spotLength!==m||P.rectAreaLength!==g||P.hemiLength!==f||P.numDirectionalShadows!==M||P.numPointShadows!==S||P.numSpotShadows!==v||P.numSpotMaps!==T||P.numLightProbes!==w)&&(i.directional.length=d,i.spot.length=m,i.rectArea.length=g,i.point.length=p,i.hemi.length=f,i.directionalShadow.length=M,i.directionalShadowMap.length=M,i.pointShadow.length=S,i.pointShadowMap.length=S,i.spotShadow.length=v,i.spotShadowMap.length=v,i.directionalShadowMatrix.length=M,i.pointShadowMatrix.length=S,i.spotLightMatrix.length=v+T-_,i.spotLightMap.length=T,i.numSpotLightShadowsWithMaps=_,i.numLightProbes=w,P.directionalLength=d,P.pointLength=p,P.spotLength=m,P.rectAreaLength=g,P.hemiLength=f,P.numDirectionalShadows=M,P.numPointShadows=S,P.numSpotShadows=v,P.numSpotMaps=T,P.numLightProbes=w,i.version=TC++)}function h(l,A){let c=0,u=0,d=0,p=0,m=0;const g=A.matrixWorldInverse;for(let f=0,M=l.length;f<M;f++){const S=l[f];if(S.isDirectionalLight){const v=i.directional[c];v.direction.setFromMatrixPosition(S.matrixWorld),n.setFromMatrixPosition(S.target.matrixWorld),v.direction.sub(n),v.direction.transformDirection(g),c++}else if(S.isSpotLight){const v=i.spot[d];v.position.setFromMatrixPosition(S.matrixWorld),v.position.applyMatrix4(g),v.direction.setFromMatrixPosition(S.matrixWorld),n.setFromMatrixPosition(S.target.matrixWorld),v.direction.sub(n),v.direction.transformDirection(g),d++}else if(S.isRectAreaLight){const v=i.rectArea[p];v.position.setFromMatrixPosition(S.matrixWorld),v.position.applyMatrix4(g),a.identity(),r.copy(S.matrixWorld),r.premultiply(g),a.extractRotation(r),v.halfWidth.set(S.width*.5,0,0),v.halfHeight.set(0,S.height*.5,0),v.halfWidth.applyMatrix4(a),v.halfHeight.applyMatrix4(a),p++}else if(S.isPointLight){const v=i.point[u];v.position.setFromMatrixPosition(S.matrixWorld),v.position.applyMatrix4(g),u++}else if(S.isHemisphereLight){const v=i.hemi[m];v.direction.setFromMatrixPosition(S.matrixWorld),v.direction.transformDirection(g),m++}}}return{setup:o,setupView:h,state:i}}function lc(s){const t=new RC(s),e=[],i=[];function n(A){l.camera=A,e.length=0,i.length=0}function r(A){e.push(A)}function a(A){i.push(A)}function o(){t.setup(e)}function h(A){t.setupView(e,A)}const l={lightsArray:e,shadowsArray:i,camera:null,lights:t,transmissionRenderTarget:{}};return{init:n,state:l,setupLights:o,setupLightsView:h,pushLight:r,pushShadow:a}}function PC(s){let t=new WeakMap;function e(n,r=0){const a=t.get(n);let o;return a===void 0?(o=new lc(s),t.set(n,[o])):r>=a.length?(o=new lc(s),a.push(o)):o=a[r],o}function i(){t=new WeakMap}return{get:e,dispose:i}}const DC=`void main() {
|
|
3902
|
+
`+lt+`
|
|
3903
|
+
`+mt)}else W!==""?console.warn("THREE.WebGLProgram: Program Info Log:",W):(Y===""||$==="")&&(rt=!1);rt&&(b.diagnostics={runnable:H,programLog:W,vertexShader:{log:Y,prefix:g},fragmentShader:{log:$,prefix:f}})}n.deleteShader(w),n.deleteShader(T),P=new na(n,m),E=Jm(n,m)}let P;this.getUniforms=function(){return P===void 0&&R(this),P};let E;this.getAttributes=function(){return E===void 0&&R(this),E};let x=e.rendererExtensionParallelShaderCompile===!1;return this.isReady=function(){return x===!1&&(x=n.getProgramParameter(m,zm)),x},this.destroy=function(){i.releaseStatesOfProgram(this),n.deleteProgram(m),this.program=void 0},this.type=e.shaderType,this.name=e.shaderName,this.id=Gm++,this.cacheKey=t,this.usedTimes=1,this.program=m,this.vertexShader=w,this.fragmentShader=T,this}let aI=0;class oI{constructor(){this.shaderCache=new Map,this.materialCache=new Map}update(t){const e=t.vertexShader,i=t.fragmentShader,n=this._getShaderStage(e),s=this._getShaderStage(i),a=this._getShaderCacheForMaterial(t);return a.has(n)===!1&&(a.add(n),n.usedTimes++),a.has(s)===!1&&(a.add(s),s.usedTimes++),this}remove(t){const e=this.materialCache.get(t);for(const i of e)i.usedTimes--,i.usedTimes===0&&this.shaderCache.delete(i.code);return this.materialCache.delete(t),this}getVertexShaderID(t){return this._getShaderStage(t.vertexShader).id}getFragmentShaderID(t){return this._getShaderStage(t.fragmentShader).id}dispose(){this.shaderCache.clear(),this.materialCache.clear()}_getShaderCacheForMaterial(t){const e=this.materialCache;let i=e.get(t);return i===void 0&&(i=new Set,e.set(t,i)),i}_getShaderStage(t){const e=this.shaderCache;let i=e.get(t);return i===void 0&&(i=new AI(t),e.set(t,i)),i}}class AI{constructor(t){this.id=aI++,this.code=t,this.usedTimes=0}}function lI(r,t,e,i,n,s,a){const o=new ql,l=new oI,A=new Set,h=[],c=n.logarithmicDepthBuffer,u=n.vertexTextures;let d=n.precision;const p={MeshDepthMaterial:"depth",MeshDistanceMaterial:"distanceRGBA",MeshNormalMaterial:"normal",MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",MeshPhongMaterial:"phong",MeshToonMaterial:"toon",MeshStandardMaterial:"physical",MeshPhysicalMaterial:"physical",MeshMatcapMaterial:"matcap",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",PointsMaterial:"points",ShadowMaterial:"shadow",SpriteMaterial:"sprite"};function m(E){return A.add(E),E===0?"uv":`uv${E}`}function g(E,x,b,z,F){const U=z.fog,W=F.geometry,Y=E.isMeshStandardMaterial?z.environment:null,$=(E.isMeshStandardMaterial?e:t).get(E.envMap||Y),H=$&&$.mapping===Tr?$.image.height:null,rt=p[E.type];E.precision!==null&&(d=n.getMaxPrecision(E.precision),d!==E.precision&&console.warn("THREE.WebGLProgram.getParameters:",E.precision,"not supported, using",d,"instead."));const lt=W.morphAttributes.position||W.morphAttributes.normal||W.morphAttributes.color,mt=lt!==void 0?lt.length:0;let Ot=0;W.morphAttributes.position!==void 0&&(Ot=1),W.morphAttributes.normal!==void 0&&(Ot=2),W.morphAttributes.color!==void 0&&(Ot=3);let se,$t,J,ot;if(rt){const Qt=Ei[rt];se=Qt.vertexShader,$t=Qt.fragmentShader}else se=E.vertexShader,$t=E.fragmentShader,l.update(E),J=l.getVertexShaderID(E),ot=l.getFragmentShaderID(E);const nt=r.getRenderTarget(),bt=r.state.buffers.depth.getReversed(),Tt=F.isInstancedMesh===!0,Dt=F.isBatchedMesh===!0,de=!!E.map,Wt=!!E.matcap,_=!!$,ee=!!E.aoMap,Mt=!!E.lightMap,Jt=!!E.bumpMap,Et=!!E.normalMap,re=!!E.displacementMap,ft=!!E.emissiveMap,Ut=!!E.metalnessMap,Ee=!!E.roughnessMap,fe=E.anisotropy>0,M=E.clearcoat>0,I=E.dispersion>0,O=E.iridescence>0,Z=E.sheen>0,Q=E.transmission>0,X=fe&&!!E.anisotropyMap,xt=M&&!!E.clearcoatMap,it=M&&!!E.clearcoatNormalMap,It=M&&!!E.clearcoatRoughnessMap,Ct=O&&!!E.iridescenceMap,tt=O&&!!E.iridescenceThicknessMap,ct=Z&&!!E.sheenColorMap,Rt=Z&&!!E.sheenRoughnessMap,vt=!!E.specularMap,At=!!E.specularColorMap,Bt=!!E.specularIntensityMap,D=Q&&!!E.transmissionMap,et=Q&&!!E.thicknessMap,st=!!E.gradientMap,dt=!!E.alphaMap,q=E.alphaTest>0,j=!!E.alphaHash,pt=!!E.extensions;let Lt=tn;E.toneMapped&&(nt===null||nt.isXRRenderTarget===!0)&&(Lt=r.toneMapping);const ie={shaderID:rt,shaderType:E.type,shaderName:E.name,vertexShader:se,fragmentShader:$t,defines:E.defines,customVertexShaderID:J,customFragmentShaderID:ot,isRawShaderMaterial:E.isRawShaderMaterial===!0,glslVersion:E.glslVersion,precision:d,batching:Dt,batchingColor:Dt&&F._colorsTexture!==null,instancing:Tt,instancingColor:Tt&&F.instanceColor!==null,instancingMorph:Tt&&F.morphTexture!==null,supportsVertexTextures:u,outputColorSpace:nt===null?r.outputColorSpace:nt.isXRRenderTarget===!0?nt.texture.colorSpace:ns,alphaToCoverage:!!E.alphaToCoverage,map:de,matcap:Wt,envMap:_,envMapMode:_&&$.mapping,envMapCubeUVHeight:H,aoMap:ee,lightMap:Mt,bumpMap:Jt,normalMap:Et,displacementMap:u&&re,emissiveMap:ft,normalMapObjectSpace:Et&&E.normalMapType===Nd,normalMapTangentSpace:Et&&E.normalMapType===Ul,metalnessMap:Ut,roughnessMap:Ee,anisotropy:fe,anisotropyMap:X,clearcoat:M,clearcoatMap:xt,clearcoatNormalMap:it,clearcoatRoughnessMap:It,dispersion:I,iridescence:O,iridescenceMap:Ct,iridescenceThicknessMap:tt,sheen:Z,sheenColorMap:ct,sheenRoughnessMap:Rt,specularMap:vt,specularColorMap:At,specularIntensityMap:Bt,transmission:Q,transmissionMap:D,thicknessMap:et,gradientMap:st,opaque:E.transparent===!1&&E.blending===$n&&E.alphaToCoverage===!1,alphaMap:dt,alphaTest:q,alphaHash:j,combine:E.combine,mapUv:de&&m(E.map.channel),aoMapUv:ee&&m(E.aoMap.channel),lightMapUv:Mt&&m(E.lightMap.channel),bumpMapUv:Jt&&m(E.bumpMap.channel),normalMapUv:Et&&m(E.normalMap.channel),displacementMapUv:re&&m(E.displacementMap.channel),emissiveMapUv:ft&&m(E.emissiveMap.channel),metalnessMapUv:Ut&&m(E.metalnessMap.channel),roughnessMapUv:Ee&&m(E.roughnessMap.channel),anisotropyMapUv:X&&m(E.anisotropyMap.channel),clearcoatMapUv:xt&&m(E.clearcoatMap.channel),clearcoatNormalMapUv:it&&m(E.clearcoatNormalMap.channel),clearcoatRoughnessMapUv:It&&m(E.clearcoatRoughnessMap.channel),iridescenceMapUv:Ct&&m(E.iridescenceMap.channel),iridescenceThicknessMapUv:tt&&m(E.iridescenceThicknessMap.channel),sheenColorMapUv:ct&&m(E.sheenColorMap.channel),sheenRoughnessMapUv:Rt&&m(E.sheenRoughnessMap.channel),specularMapUv:vt&&m(E.specularMap.channel),specularColorMapUv:At&&m(E.specularColorMap.channel),specularIntensityMapUv:Bt&&m(E.specularIntensityMap.channel),transmissionMapUv:D&&m(E.transmissionMap.channel),thicknessMapUv:et&&m(E.thicknessMap.channel),alphaMapUv:dt&&m(E.alphaMap.channel),vertexTangents:!!W.attributes.tangent&&(Et||fe),vertexColors:E.vertexColors,vertexAlphas:E.vertexColors===!0&&!!W.attributes.color&&W.attributes.color.itemSize===4,pointsUvs:F.isPoints===!0&&!!W.attributes.uv&&(de||dt),fog:!!U,useFog:E.fog===!0,fogExp2:!!U&&U.isFogExp2,flatShading:E.flatShading===!0&&E.wireframe===!1,sizeAttenuation:E.sizeAttenuation===!0,logarithmicDepthBuffer:c,reversedDepthBuffer:bt,skinning:F.isSkinnedMesh===!0,morphTargets:W.morphAttributes.position!==void 0,morphNormals:W.morphAttributes.normal!==void 0,morphColors:W.morphAttributes.color!==void 0,morphTargetsCount:mt,morphTextureStride:Ot,numDirLights:x.directional.length,numPointLights:x.point.length,numSpotLights:x.spot.length,numSpotLightMaps:x.spotLightMap.length,numRectAreaLights:x.rectArea.length,numHemiLights:x.hemi.length,numDirLightShadows:x.directionalShadowMap.length,numPointLightShadows:x.pointShadowMap.length,numSpotLightShadows:x.spotShadowMap.length,numSpotLightShadowsWithMaps:x.numSpotLightShadowsWithMaps,numLightProbes:x.numLightProbes,numClippingPlanes:a.numPlanes,numClipIntersection:a.numIntersection,dithering:E.dithering,shadowMapEnabled:r.shadowMap.enabled&&b.length>0,shadowMapType:r.shadowMap.type,toneMapping:Lt,decodeVideoTexture:de&&E.map.isVideoTexture===!0&&Yt.getTransfer(E.map.colorSpace)===qt,decodeVideoTextureEmissive:ft&&E.emissiveMap.isVideoTexture===!0&&Yt.getTransfer(E.emissiveMap.colorSpace)===qt,premultipliedAlpha:E.premultipliedAlpha,doubleSided:E.side===Li,flipSided:E.side===Fe,useDepthPacking:E.depthPacking>=0,depthPacking:E.depthPacking||0,index0AttributeName:E.index0AttributeName,extensionClipCullDistance:pt&&E.extensions.clipCullDistance===!0&&i.has("WEBGL_clip_cull_distance"),extensionMultiDraw:(pt&&E.extensions.multiDraw===!0||Dt)&&i.has("WEBGL_multi_draw"),rendererExtensionParallelShaderCompile:i.has("KHR_parallel_shader_compile"),customProgramCacheKey:E.customProgramCacheKey()};return ie.vertexUv1s=A.has(1),ie.vertexUv2s=A.has(2),ie.vertexUv3s=A.has(3),A.clear(),ie}function f(E){const x=[];if(E.shaderID?x.push(E.shaderID):(x.push(E.customVertexShaderID),x.push(E.customFragmentShaderID)),E.defines!==void 0)for(const b in E.defines)x.push(b),x.push(E.defines[b]);return E.isRawShaderMaterial===!1&&(y(x,E),S(x,E),x.push(r.outputColorSpace)),x.push(E.customProgramCacheKey),x.join()}function y(E,x){E.push(x.precision),E.push(x.outputColorSpace),E.push(x.envMapMode),E.push(x.envMapCubeUVHeight),E.push(x.mapUv),E.push(x.alphaMapUv),E.push(x.lightMapUv),E.push(x.aoMapUv),E.push(x.bumpMapUv),E.push(x.normalMapUv),E.push(x.displacementMapUv),E.push(x.emissiveMapUv),E.push(x.metalnessMapUv),E.push(x.roughnessMapUv),E.push(x.anisotropyMapUv),E.push(x.clearcoatMapUv),E.push(x.clearcoatNormalMapUv),E.push(x.clearcoatRoughnessMapUv),E.push(x.iridescenceMapUv),E.push(x.iridescenceThicknessMapUv),E.push(x.sheenColorMapUv),E.push(x.sheenRoughnessMapUv),E.push(x.specularMapUv),E.push(x.specularColorMapUv),E.push(x.specularIntensityMapUv),E.push(x.transmissionMapUv),E.push(x.thicknessMapUv),E.push(x.combine),E.push(x.fogExp2),E.push(x.sizeAttenuation),E.push(x.morphTargetsCount),E.push(x.morphAttributeCount),E.push(x.numDirLights),E.push(x.numPointLights),E.push(x.numSpotLights),E.push(x.numSpotLightMaps),E.push(x.numHemiLights),E.push(x.numRectAreaLights),E.push(x.numDirLightShadows),E.push(x.numPointLightShadows),E.push(x.numSpotLightShadows),E.push(x.numSpotLightShadowsWithMaps),E.push(x.numLightProbes),E.push(x.shadowMapType),E.push(x.toneMapping),E.push(x.numClippingPlanes),E.push(x.numClipIntersection),E.push(x.depthPacking)}function S(E,x){o.disableAll(),x.supportsVertexTextures&&o.enable(0),x.instancing&&o.enable(1),x.instancingColor&&o.enable(2),x.instancingMorph&&o.enable(3),x.matcap&&o.enable(4),x.envMap&&o.enable(5),x.normalMapObjectSpace&&o.enable(6),x.normalMapTangentSpace&&o.enable(7),x.clearcoat&&o.enable(8),x.iridescence&&o.enable(9),x.alphaTest&&o.enable(10),x.vertexColors&&o.enable(11),x.vertexAlphas&&o.enable(12),x.vertexUv1s&&o.enable(13),x.vertexUv2s&&o.enable(14),x.vertexUv3s&&o.enable(15),x.vertexTangents&&o.enable(16),x.anisotropy&&o.enable(17),x.alphaHash&&o.enable(18),x.batching&&o.enable(19),x.dispersion&&o.enable(20),x.batchingColor&&o.enable(21),x.gradientMap&&o.enable(22),E.push(o.mask),o.disableAll(),x.fog&&o.enable(0),x.useFog&&o.enable(1),x.flatShading&&o.enable(2),x.logarithmicDepthBuffer&&o.enable(3),x.reversedDepthBuffer&&o.enable(4),x.skinning&&o.enable(5),x.morphTargets&&o.enable(6),x.morphNormals&&o.enable(7),x.morphColors&&o.enable(8),x.premultipliedAlpha&&o.enable(9),x.shadowMapEnabled&&o.enable(10),x.doubleSided&&o.enable(11),x.flipSided&&o.enable(12),x.useDepthPacking&&o.enable(13),x.dithering&&o.enable(14),x.transmission&&o.enable(15),x.sheen&&o.enable(16),x.opaque&&o.enable(17),x.pointsUvs&&o.enable(18),x.decodeVideoTexture&&o.enable(19),x.decodeVideoTextureEmissive&&o.enable(20),x.alphaToCoverage&&o.enable(21),E.push(o.mask)}function v(E){const x=p[E.type];let b;if(x){const z=Ei[x];b=cf.clone(z.uniforms)}else b=E.uniforms;return b}function w(E,x){let b;for(let z=0,F=h.length;z<F;z++){const U=h[z];if(U.cacheKey===x){b=U,++b.usedTimes;break}}return b===void 0&&(b=new rI(r,x,E,s),h.push(b)),b}function T(E){if(--E.usedTimes===0){const x=h.indexOf(E);h[x]=h[h.length-1],h.pop(),E.destroy()}}function R(E){l.remove(E)}function P(){l.dispose()}return{getParameters:g,getProgramCacheKey:f,getUniforms:v,acquireProgram:w,releaseProgram:T,releaseShaderCache:R,programs:h,dispose:P}}function hI(){let r=new WeakMap;function t(a){return r.has(a)}function e(a){let o=r.get(a);return o===void 0&&(o={},r.set(a,o)),o}function i(a){r.delete(a)}function n(a,o,l){r.get(a)[o]=l}function s(){r=new WeakMap}return{has:t,get:e,remove:i,update:n,dispose:s}}function cI(r,t){return r.groupOrder!==t.groupOrder?r.groupOrder-t.groupOrder:r.renderOrder!==t.renderOrder?r.renderOrder-t.renderOrder:r.material.id!==t.material.id?r.material.id-t.material.id:r.z!==t.z?r.z-t.z:r.id-t.id}function Kh(r,t){return r.groupOrder!==t.groupOrder?r.groupOrder-t.groupOrder:r.renderOrder!==t.renderOrder?r.renderOrder-t.renderOrder:r.z!==t.z?t.z-r.z:r.id-t.id}function $h(){const r=[];let t=0;const e=[],i=[],n=[];function s(){t=0,e.length=0,i.length=0,n.length=0}function a(c,u,d,p,m,g){let f=r[t];return f===void 0?(f={id:c.id,object:c,geometry:u,material:d,groupOrder:p,renderOrder:c.renderOrder,z:m,group:g},r[t]=f):(f.id=c.id,f.object=c,f.geometry=u,f.material=d,f.groupOrder=p,f.renderOrder=c.renderOrder,f.z=m,f.group=g),t++,f}function o(c,u,d,p,m,g){const f=a(c,u,d,p,m,g);d.transmission>0?i.push(f):d.transparent===!0?n.push(f):e.push(f)}function l(c,u,d,p,m,g){const f=a(c,u,d,p,m,g);d.transmission>0?i.unshift(f):d.transparent===!0?n.unshift(f):e.unshift(f)}function A(c,u){e.length>1&&e.sort(c||cI),i.length>1&&i.sort(u||Kh),n.length>1&&n.sort(u||Kh)}function h(){for(let c=t,u=r.length;c<u;c++){const d=r[c];if(d.id===null)break;d.id=null,d.object=null,d.geometry=null,d.material=null,d.group=null}}return{opaque:e,transmissive:i,transparent:n,init:s,push:o,unshift:l,finish:h,sort:A}}function uI(){let r=new WeakMap;function t(i,n){const s=r.get(i);let a;return s===void 0?(a=new $h,r.set(i,[a])):n>=s.length?(a=new $h,s.push(a)):a=s[n],a}function e(){r=new WeakMap}return{get:t,dispose:e}}function dI(){const r={};return{get:function(t){if(r[t.id]!==void 0)return r[t.id];let e;switch(t.type){case"DirectionalLight":e={direction:new B,color:new Vt};break;case"SpotLight":e={position:new B,direction:new B,color:new Vt,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":e={position:new B,color:new Vt,distance:0,decay:0};break;case"HemisphereLight":e={direction:new B,skyColor:new Vt,groundColor:new Vt};break;case"RectAreaLight":e={color:new Vt,position:new B,halfWidth:new B,halfHeight:new B};break}return r[t.id]=e,e}}}function fI(){const r={};return{get:function(t){if(r[t.id]!==void 0)return r[t.id];let e;switch(t.type){case"DirectionalLight":e={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Zt};break;case"SpotLight":e={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Zt};break;case"PointLight":e={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Zt,shadowCameraNear:1,shadowCameraFar:1e3};break}return r[t.id]=e,e}}}let gI=0;function pI(r,t){return(t.castShadow?2:0)-(r.castShadow?2:0)+(t.map?1:0)-(r.map?1:0)}function mI(r){const t=new dI,e=fI(),i={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1,numSpotMaps:-1,numLightProbes:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotLightMap:[],spotShadow:[],spotShadowMap:[],spotLightMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],numSpotLightShadowsWithMaps:0,numLightProbes:0};for(let A=0;A<9;A++)i.probe.push(new B);const n=new B,s=new ue,a=new ue;function o(A){let h=0,c=0,u=0;for(let E=0;E<9;E++)i.probe[E].set(0,0,0);let d=0,p=0,m=0,g=0,f=0,y=0,S=0,v=0,w=0,T=0,R=0;A.sort(pI);for(let E=0,x=A.length;E<x;E++){const b=A[E],z=b.color,F=b.intensity,U=b.distance,W=b.shadow&&b.shadow.map?b.shadow.map.texture:null;if(b.isAmbientLight)h+=z.r*F,c+=z.g*F,u+=z.b*F;else if(b.isLightProbe){for(let Y=0;Y<9;Y++)i.probe[Y].addScaledVector(b.sh.coefficients[Y],F);R++}else if(b.isDirectionalLight){const Y=t.get(b);if(Y.color.copy(b.color).multiplyScalar(b.intensity),b.castShadow){const $=b.shadow,H=e.get(b);H.shadowIntensity=$.intensity,H.shadowBias=$.bias,H.shadowNormalBias=$.normalBias,H.shadowRadius=$.radius,H.shadowMapSize=$.mapSize,i.directionalShadow[d]=H,i.directionalShadowMap[d]=W,i.directionalShadowMatrix[d]=b.shadow.matrix,y++}i.directional[d]=Y,d++}else if(b.isSpotLight){const Y=t.get(b);Y.position.setFromMatrixPosition(b.matrixWorld),Y.color.copy(z).multiplyScalar(F),Y.distance=U,Y.coneCos=Math.cos(b.angle),Y.penumbraCos=Math.cos(b.angle*(1-b.penumbra)),Y.decay=b.decay,i.spot[m]=Y;const $=b.shadow;if(b.map&&(i.spotLightMap[w]=b.map,w++,$.updateMatrices(b),b.castShadow&&T++),i.spotLightMatrix[m]=$.matrix,b.castShadow){const H=e.get(b);H.shadowIntensity=$.intensity,H.shadowBias=$.bias,H.shadowNormalBias=$.normalBias,H.shadowRadius=$.radius,H.shadowMapSize=$.mapSize,i.spotShadow[m]=H,i.spotShadowMap[m]=W,v++}m++}else if(b.isRectAreaLight){const Y=t.get(b);Y.color.copy(z).multiplyScalar(F),Y.halfWidth.set(b.width*.5,0,0),Y.halfHeight.set(0,b.height*.5,0),i.rectArea[g]=Y,g++}else if(b.isPointLight){const Y=t.get(b);if(Y.color.copy(b.color).multiplyScalar(b.intensity),Y.distance=b.distance,Y.decay=b.decay,b.castShadow){const $=b.shadow,H=e.get(b);H.shadowIntensity=$.intensity,H.shadowBias=$.bias,H.shadowNormalBias=$.normalBias,H.shadowRadius=$.radius,H.shadowMapSize=$.mapSize,H.shadowCameraNear=$.camera.near,H.shadowCameraFar=$.camera.far,i.pointShadow[p]=H,i.pointShadowMap[p]=W,i.pointShadowMatrix[p]=b.shadow.matrix,S++}i.point[p]=Y,p++}else if(b.isHemisphereLight){const Y=t.get(b);Y.skyColor.copy(b.color).multiplyScalar(F),Y.groundColor.copy(b.groundColor).multiplyScalar(F),i.hemi[f]=Y,f++}}g>0&&(r.has("OES_texture_float_linear")===!0?(i.rectAreaLTC1=at.LTC_FLOAT_1,i.rectAreaLTC2=at.LTC_FLOAT_2):(i.rectAreaLTC1=at.LTC_HALF_1,i.rectAreaLTC2=at.LTC_HALF_2)),i.ambient[0]=h,i.ambient[1]=c,i.ambient[2]=u;const P=i.hash;(P.directionalLength!==d||P.pointLength!==p||P.spotLength!==m||P.rectAreaLength!==g||P.hemiLength!==f||P.numDirectionalShadows!==y||P.numPointShadows!==S||P.numSpotShadows!==v||P.numSpotMaps!==w||P.numLightProbes!==R)&&(i.directional.length=d,i.spot.length=m,i.rectArea.length=g,i.point.length=p,i.hemi.length=f,i.directionalShadow.length=y,i.directionalShadowMap.length=y,i.pointShadow.length=S,i.pointShadowMap.length=S,i.spotShadow.length=v,i.spotShadowMap.length=v,i.directionalShadowMatrix.length=y,i.pointShadowMatrix.length=S,i.spotLightMatrix.length=v+w-T,i.spotLightMap.length=w,i.numSpotLightShadowsWithMaps=T,i.numLightProbes=R,P.directionalLength=d,P.pointLength=p,P.spotLength=m,P.rectAreaLength=g,P.hemiLength=f,P.numDirectionalShadows=y,P.numPointShadows=S,P.numSpotShadows=v,P.numSpotMaps=w,P.numLightProbes=R,i.version=gI++)}function l(A,h){let c=0,u=0,d=0,p=0,m=0;const g=h.matrixWorldInverse;for(let f=0,y=A.length;f<y;f++){const S=A[f];if(S.isDirectionalLight){const v=i.directional[c];v.direction.setFromMatrixPosition(S.matrixWorld),n.setFromMatrixPosition(S.target.matrixWorld),v.direction.sub(n),v.direction.transformDirection(g),c++}else if(S.isSpotLight){const v=i.spot[d];v.position.setFromMatrixPosition(S.matrixWorld),v.position.applyMatrix4(g),v.direction.setFromMatrixPosition(S.matrixWorld),n.setFromMatrixPosition(S.target.matrixWorld),v.direction.sub(n),v.direction.transformDirection(g),d++}else if(S.isRectAreaLight){const v=i.rectArea[p];v.position.setFromMatrixPosition(S.matrixWorld),v.position.applyMatrix4(g),a.identity(),s.copy(S.matrixWorld),s.premultiply(g),a.extractRotation(s),v.halfWidth.set(S.width*.5,0,0),v.halfHeight.set(0,S.height*.5,0),v.halfWidth.applyMatrix4(a),v.halfHeight.applyMatrix4(a),p++}else if(S.isPointLight){const v=i.point[u];v.position.setFromMatrixPosition(S.matrixWorld),v.position.applyMatrix4(g),u++}else if(S.isHemisphereLight){const v=i.hemi[m];v.direction.setFromMatrixPosition(S.matrixWorld),v.direction.transformDirection(g),m++}}}return{setup:o,setupView:l,state:i}}function tc(r){const t=new mI(r),e=[],i=[];function n(h){A.camera=h,e.length=0,i.length=0}function s(h){e.push(h)}function a(h){i.push(h)}function o(){t.setup(e)}function l(h){t.setupView(e,h)}const A={lightsArray:e,shadowsArray:i,camera:null,lights:t,transmissionRenderTarget:{}};return{init:n,state:A,setupLights:o,setupLightsView:l,pushLight:s,pushShadow:a}}function II(r){let t=new WeakMap;function e(n,s=0){const a=t.get(n);let o;return a===void 0?(o=new tc(r),t.set(n,[o])):s>=a.length?(o=new tc(r),a.push(o)):o=a[s],o}function i(){t=new WeakMap}return{get:e,dispose:i}}const CI=`void main() {
|
|
3904
3904
|
gl_Position = vec4( position, 1.0 );
|
|
3905
|
-
}`,
|
|
3905
|
+
}`,vI=`uniform sampler2D shadow_pass;
|
|
3906
3906
|
uniform vec2 resolution;
|
|
3907
3907
|
uniform float radius;
|
|
3908
3908
|
#include <packing>
|
|
@@ -3928,12 +3928,12 @@ void main() {
|
|
|
3928
3928
|
squared_mean = squared_mean / samples;
|
|
3929
3929
|
float std_dev = sqrt( squared_mean - mean * mean );
|
|
3930
3930
|
gl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );
|
|
3931
|
-
}`;function NC(s,t,e){let i=new dl;const n=new Nt,r=new Nt,a=new ce,o=new Lf({depthPacking:Yd}),h=new Nf,l={},A=e.maxTextureSize,c={[en]:Ue,[Ue]:en,[Fi]:Fi},u=new cn({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new Nt},radius:{value:4}},vertexShader:DC,fragmentShader:LC}),d=u.clone();d.defines.HORIZONTAL_PASS=1;const p=new On;p.setAttribute("position",new yi(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const m=new Ci(p,u),g=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=Rh;let f=this.type;this.render=function(_,w,P){if(g.enabled===!1||g.autoUpdate===!1&&g.needsUpdate===!1||_.length===0)return;const E=s.getRenderTarget(),x=s.getActiveCubeFace(),b=s.getActiveMipmapLevel(),z=s.state;z.setBlending(nn),z.buffers.depth.getReversed()?z.buffers.color.setClear(0,0,0,0):z.buffers.color.setClear(1,1,1,1),z.buffers.depth.setTest(!0),z.setScissorTest(!1);const F=f!==Oi&&this.type===Oi,U=f===Oi&&this.type!==Oi;for(let W=0,Y=_.length;W<Y;W++){const $=_[W],H=$.shadow;if(H===void 0){console.warn("THREE.WebGLShadowMap:",$,"has no shadow.");continue}if(H.autoUpdate===!1&&H.needsUpdate===!1)continue;n.copy(H.mapSize);const rt=H.getFrameExtents();if(n.multiply(rt),r.copy(H.mapSize),(n.x>A||n.y>A)&&(n.x>A&&(r.x=Math.floor(A/rt.x),n.x=r.x*rt.x,H.mapSize.x=r.x),n.y>A&&(r.y=Math.floor(A/rt.y),n.y=r.y*rt.y,H.mapSize.y=r.y)),H.map===null||F===!0||U===!0){const mt=this.type!==Oi?{minFilter:ui,magFilter:ui}:{};H.map!==null&&H.map.dispose(),H.map=new Pn(n.x,n.y,mt),H.map.texture.name=$.name+".shadowMap",H.camera.updateProjectionMatrix()}s.setRenderTarget(H.map),s.clear();const ht=H.getViewportCount();for(let mt=0;mt<ht;mt++){const Ut=H.getViewport(mt);a.set(r.x*Ut.x,r.y*Ut.y,r.x*Ut.z,r.y*Ut.w),z.viewport(a),H.updateMatrices($,mt),i=H.getFrustum(),v(w,P,H.camera,$,this.type)}H.isPointLightShadow!==!0&&this.type===Oi&&M(H,P),H.needsUpdate=!1}f=this.type,g.needsUpdate=!1,s.setRenderTarget(E,x,b)};function M(_,w){const P=t.update(m);u.defines.VSM_SAMPLES!==_.blurSamples&&(u.defines.VSM_SAMPLES=_.blurSamples,d.defines.VSM_SAMPLES=_.blurSamples,u.needsUpdate=!0,d.needsUpdate=!0),_.mapPass===null&&(_.mapPass=new Pn(n.x,n.y)),u.uniforms.shadow_pass.value=_.map.texture,u.uniforms.resolution.value=_.mapSize,u.uniforms.radius.value=_.radius,s.setRenderTarget(_.mapPass),s.clear(),s.renderBufferDirect(w,null,P,u,m,null),d.uniforms.shadow_pass.value=_.mapPass.texture,d.uniforms.resolution.value=_.mapSize,d.uniforms.radius.value=_.radius,s.setRenderTarget(_.map),s.clear(),s.renderBufferDirect(w,null,P,d,m,null)}function S(_,w,P,E){let x=null;const b=P.isPointLight===!0?_.customDistanceMaterial:_.customDepthMaterial;if(b!==void 0)x=b;else if(x=P.isPointLight===!0?h:o,s.localClippingEnabled&&w.clipShadows===!0&&Array.isArray(w.clippingPlanes)&&w.clippingPlanes.length!==0||w.displacementMap&&w.displacementScale!==0||w.alphaMap&&w.alphaTest>0||w.map&&w.alphaTest>0||w.alphaToCoverage===!0){const z=x.uuid,F=w.uuid;let U=l[z];U===void 0&&(U={},l[z]=U);let W=U[F];W===void 0&&(W=x.clone(),U[F]=W,w.addEventListener("dispose",T)),x=W}if(x.visible=w.visible,x.wireframe=w.wireframe,E===Oi?x.side=w.shadowSide!==null?w.shadowSide:w.side:x.side=w.shadowSide!==null?w.shadowSide:c[w.side],x.alphaMap=w.alphaMap,x.alphaTest=w.alphaToCoverage===!0?.5:w.alphaTest,x.map=w.map,x.clipShadows=w.clipShadows,x.clippingPlanes=w.clippingPlanes,x.clipIntersection=w.clipIntersection,x.displacementMap=w.displacementMap,x.displacementScale=w.displacementScale,x.displacementBias=w.displacementBias,x.wireframeLinewidth=w.wireframeLinewidth,x.linewidth=w.linewidth,P.isPointLight===!0&&x.isMeshDistanceMaterial===!0){const z=s.properties.get(x);z.light=P}return x}function v(_,w,P,E,x){if(_.visible===!1)return;if(_.layers.test(w.layers)&&(_.isMesh||_.isLine||_.isPoints)&&(_.castShadow||_.receiveShadow&&x===Oi)&&(!_.frustumCulled||i.intersectsObject(_))){_.modelViewMatrix.multiplyMatrices(P.matrixWorldInverse,_.matrixWorld);const F=t.update(_),U=_.material;if(Array.isArray(U)){const W=F.groups;for(let Y=0,$=W.length;Y<$;Y++){const H=W[Y],rt=U[H.materialIndex];if(rt&&rt.visible){const ht=S(_,rt,E,x);_.onBeforeShadow(s,_,w,P,F,ht,H),s.renderBufferDirect(P,null,F,ht,_,H),_.onAfterShadow(s,_,w,P,F,ht,H)}}}else if(U.visible){const W=S(_,U,E,x);_.onBeforeShadow(s,_,w,P,F,W,null),s.renderBufferDirect(P,null,F,W,_,null),_.onAfterShadow(s,_,w,P,F,W,null)}}const z=_.children;for(let F=0,U=z.length;F<U;F++)v(z[F],w,P,E,x)}function T(_){_.target.removeEventListener("dispose",T);for(const P in l){const E=l[P],x=_.target.uuid;x in E&&(E[x].dispose(),delete E[x])}}}const OC={[Ja]:Qa,[qa]:to,[Ka]:eo,[os]:$a,[Qa]:Ja,[to]:qa,[eo]:Ka,[$a]:os};function FC(s,t){function e(){let D=!1;const et=new ce;let st=null;const dt=new ce(0,0,0,0);return{setMask:function(q){st!==q&&!D&&(s.colorMask(q,q,q,q),st=q)},setLocked:function(q){D=q},setClear:function(q,J,pt,Lt,ne){ne===!0&&(q*=Lt,J*=Lt,pt*=Lt),et.set(q,J,pt,Lt),dt.equals(et)===!1&&(s.clearColor(q,J,pt,Lt),dt.copy(et))},reset:function(){D=!1,st=null,dt.set(-1,0,0,0)}}}function i(){let D=!1,et=!1,st=null,dt=null,q=null;return{setReversed:function(J){if(et!==J){const pt=t.get("EXT_clip_control");J?pt.clipControlEXT(pt.LOWER_LEFT_EXT,pt.ZERO_TO_ONE_EXT):pt.clipControlEXT(pt.LOWER_LEFT_EXT,pt.NEGATIVE_ONE_TO_ONE_EXT),et=J;const Lt=q;q=null,this.setClear(Lt)}},getReversed:function(){return et},setTest:function(J){J?nt(s.DEPTH_TEST):bt(s.DEPTH_TEST)},setMask:function(J){st!==J&&!D&&(s.depthMask(J),st=J)},setFunc:function(J){if(et&&(J=OC[J]),dt!==J){switch(J){case Ja:s.depthFunc(s.NEVER);break;case Qa:s.depthFunc(s.ALWAYS);break;case qa:s.depthFunc(s.LESS);break;case os:s.depthFunc(s.LEQUAL);break;case Ka:s.depthFunc(s.EQUAL);break;case $a:s.depthFunc(s.GEQUAL);break;case to:s.depthFunc(s.GREATER);break;case eo:s.depthFunc(s.NOTEQUAL);break;default:s.depthFunc(s.LEQUAL)}dt=J}},setLocked:function(J){D=J},setClear:function(J){q!==J&&(et&&(J=1-J),s.clearDepth(J),q=J)},reset:function(){D=!1,st=null,dt=null,q=null,et=!1}}}function n(){let D=!1,et=null,st=null,dt=null,q=null,J=null,pt=null,Lt=null,ne=null;return{setTest:function(Qt){D||(Qt?nt(s.STENCIL_TEST):bt(s.STENCIL_TEST))},setMask:function(Qt){et!==Qt&&!D&&(s.stencilMask(Qt),et=Qt)},setFunc:function(Qt,Wi,bi){(st!==Qt||dt!==Wi||q!==bi)&&(s.stencilFunc(Qt,Wi,bi),st=Qt,dt=Wi,q=bi)},setOp:function(Qt,Wi,bi){(J!==Qt||pt!==Wi||Lt!==bi)&&(s.stencilOp(Qt,Wi,bi),J=Qt,pt=Wi,Lt=bi)},setLocked:function(Qt){D=Qt},setClear:function(Qt){ne!==Qt&&(s.clearStencil(Qt),ne=Qt)},reset:function(){D=!1,et=null,st=null,dt=null,q=null,J=null,pt=null,Lt=null,ne=null}}}const r=new e,a=new i,o=new n,h=new WeakMap,l=new WeakMap;let A={},c={},u=new WeakMap,d=[],p=null,m=!1,g=null,f=null,M=null,S=null,v=null,T=null,_=null,w=new Wt(0,0,0),P=0,E=!1,x=null,b=null,z=null,F=null,U=null;const W=s.getParameter(s.MAX_COMBINED_TEXTURE_IMAGE_UNITS);let Y=!1,$=0;const H=s.getParameter(s.VERSION);H.indexOf("WebGL")!==-1?($=parseFloat(/^WebGL (\d)/.exec(H)[1]),Y=$>=1):H.indexOf("OpenGL ES")!==-1&&($=parseFloat(/^OpenGL ES (\d)/.exec(H)[1]),Y=$>=2);let rt=null,ht={};const mt=s.getParameter(s.SCISSOR_BOX),Ut=s.getParameter(s.VIEWPORT),re=new ce().fromArray(mt),te=new ce().fromArray(Ut);function j(D,et,st,dt){const q=new Uint8Array(4),J=s.createTexture();s.bindTexture(D,J),s.texParameteri(D,s.TEXTURE_MIN_FILTER,s.NEAREST),s.texParameteri(D,s.TEXTURE_MAG_FILTER,s.NEAREST);for(let pt=0;pt<st;pt++)D===s.TEXTURE_3D||D===s.TEXTURE_2D_ARRAY?s.texImage3D(et,0,s.RGBA,1,1,dt,0,s.RGBA,s.UNSIGNED_BYTE,q):s.texImage2D(et+pt,0,s.RGBA,1,1,0,s.RGBA,s.UNSIGNED_BYTE,q);return J}const ot={};ot[s.TEXTURE_2D]=j(s.TEXTURE_2D,s.TEXTURE_2D,1),ot[s.TEXTURE_CUBE_MAP]=j(s.TEXTURE_CUBE_MAP,s.TEXTURE_CUBE_MAP_POSITIVE_X,6),ot[s.TEXTURE_2D_ARRAY]=j(s.TEXTURE_2D_ARRAY,s.TEXTURE_2D_ARRAY,1,1),ot[s.TEXTURE_3D]=j(s.TEXTURE_3D,s.TEXTURE_3D,1,1),r.setClear(0,0,0,1),a.setClear(1),o.setClear(0),nt(s.DEPTH_TEST),a.setFunc(os),jt(!1),Et(wh),nt(s.CULL_FACE),ie(nn);function nt(D){A[D]!==!0&&(s.enable(D),A[D]=!0)}function bt(D){A[D]!==!1&&(s.disable(D),A[D]=!1)}function _t(D,et){return c[D]!==et?(s.bindFramebuffer(D,et),c[D]=et,D===s.DRAW_FRAMEBUFFER&&(c[s.FRAMEBUFFER]=et),D===s.FRAMEBUFFER&&(c[s.DRAW_FRAMEBUFFER]=et),!0):!1}function Dt(D,et){let st=d,dt=!1;if(D){st=u.get(et),st===void 0&&(st=[],u.set(et,st));const q=D.textures;if(st.length!==q.length||st[0]!==s.COLOR_ATTACHMENT0){for(let J=0,pt=q.length;J<pt;J++)st[J]=s.COLOR_ATTACHMENT0+J;st.length=q.length,dt=!0}}else st[0]!==s.BACK&&(st[0]=s.BACK,dt=!0);dt&&s.drawBuffers(st)}function fe(D){return p!==D?(s.useProgram(D),p=D,!0):!1}const Yt={[Mn]:s.FUNC_ADD,[md]:s.FUNC_SUBTRACT,[Cd]:s.FUNC_REVERSE_SUBTRACT};Yt[Id]=s.MIN,Yt[vd]=s.MAX;const R={[xd]:s.ZERO,[Ed]:s.ONE,[Sd]:s.SRC_COLOR,[Za]:s.SRC_ALPHA,[wd]:s.SRC_ALPHA_SATURATE,[_d]:s.DST_COLOR,[Md]:s.DST_ALPHA,[yd]:s.ONE_MINUS_SRC_COLOR,[ja]:s.ONE_MINUS_SRC_ALPHA,[Td]:s.ONE_MINUS_DST_COLOR,[bd]:s.ONE_MINUS_DST_ALPHA,[Rd]:s.CONSTANT_COLOR,[Pd]:s.ONE_MINUS_CONSTANT_COLOR,[Dd]:s.CONSTANT_ALPHA,[Ld]:s.ONE_MINUS_CONSTANT_ALPHA};function ie(D,et,st,dt,q,J,pt,Lt,ne,Qt){if(D===nn){m===!0&&(bt(s.BLEND),m=!1);return}if(m===!1&&(nt(s.BLEND),m=!0),D!==pd){if(D!==g||Qt!==E){if((f!==Mn||v!==Mn)&&(s.blendEquation(s.FUNC_ADD),f=Mn,v=Mn),Qt)switch(D){case as:s.blendFuncSeparate(s.ONE,s.ONE_MINUS_SRC_ALPHA,s.ONE,s.ONE_MINUS_SRC_ALPHA);break;case Ph:s.blendFunc(s.ONE,s.ONE);break;case Dh:s.blendFuncSeparate(s.ZERO,s.ONE_MINUS_SRC_COLOR,s.ZERO,s.ONE);break;case Lh:s.blendFuncSeparate(s.DST_COLOR,s.ONE_MINUS_SRC_ALPHA,s.ZERO,s.ONE);break;default:console.error("THREE.WebGLState: Invalid blending: ",D);break}else switch(D){case as:s.blendFuncSeparate(s.SRC_ALPHA,s.ONE_MINUS_SRC_ALPHA,s.ONE,s.ONE_MINUS_SRC_ALPHA);break;case Ph:s.blendFuncSeparate(s.SRC_ALPHA,s.ONE,s.ONE,s.ONE);break;case Dh:console.error("THREE.WebGLState: SubtractiveBlending requires material.premultipliedAlpha = true");break;case Lh:console.error("THREE.WebGLState: MultiplyBlending requires material.premultipliedAlpha = true");break;default:console.error("THREE.WebGLState: Invalid blending: ",D);break}M=null,S=null,T=null,_=null,w.set(0,0,0),P=0,g=D,E=Qt}return}q=q||et,J=J||st,pt=pt||dt,(et!==f||q!==v)&&(s.blendEquationSeparate(Yt[et],Yt[q]),f=et,v=q),(st!==M||dt!==S||J!==T||pt!==_)&&(s.blendFuncSeparate(R[st],R[dt],R[J],R[pt]),M=st,S=dt,T=J,_=pt),(Lt.equals(w)===!1||ne!==P)&&(s.blendColor(Lt.r,Lt.g,Lt.b,ne),w.copy(Lt),P=ne),g=D,E=!1}function yt(D,et){D.side===Fi?bt(s.CULL_FACE):nt(s.CULL_FACE);let st=D.side===Ue;et&&(st=!st),jt(st),D.blending===as&&D.transparent===!1?ie(nn):ie(D.blending,D.blendEquation,D.blendSrc,D.blendDst,D.blendEquationAlpha,D.blendSrcAlpha,D.blendDstAlpha,D.blendColor,D.blendAlpha,D.premultipliedAlpha),a.setFunc(D.depthFunc),a.setTest(D.depthTest),a.setMask(D.depthWrite),r.setMask(D.colorWrite);const dt=D.stencilWrite;o.setTest(dt),dt&&(o.setMask(D.stencilWriteMask),o.setFunc(D.stencilFunc,D.stencilRef,D.stencilFuncMask),o.setOp(D.stencilFail,D.stencilZFail,D.stencilZPass)),ft(D.polygonOffset,D.polygonOffsetFactor,D.polygonOffsetUnits),D.alphaToCoverage===!0?nt(s.SAMPLE_ALPHA_TO_COVERAGE):bt(s.SAMPLE_ALPHA_TO_COVERAGE)}function jt(D){x!==D&&(D?s.frontFace(s.CW):s.frontFace(s.CCW),x=D)}function Et(D){D!==dd?(nt(s.CULL_FACE),D!==b&&(D===wh?s.cullFace(s.BACK):D===fd?s.cullFace(s.FRONT):s.cullFace(s.FRONT_AND_BACK))):bt(s.CULL_FACE),b=D}function ae(D){D!==z&&(Y&&s.lineWidth(D),z=D)}function ft(D,et,st){D?(nt(s.POLYGON_OFFSET_FILL),(F!==et||U!==st)&&(s.polygonOffset(et,st),F=et,U=st)):bt(s.POLYGON_OFFSET_FILL)}function zt(D){D?nt(s.SCISSOR_TEST):bt(s.SCISSOR_TEST)}function ye(D){D===void 0&&(D=s.TEXTURE0+W-1),rt!==D&&(s.activeTexture(D),rt=D)}function ge(D,et,st){st===void 0&&(rt===null?st=s.TEXTURE0+W-1:st=rt);let dt=ht[st];dt===void 0&&(dt={type:void 0,texture:void 0},ht[st]=dt),(dt.type!==D||dt.texture!==et)&&(rt!==st&&(s.activeTexture(st),rt=st),s.bindTexture(D,et||ot[D]),dt.type=D,dt.texture=et)}function y(){const D=ht[rt];D!==void 0&&D.type!==void 0&&(s.bindTexture(D.type,null),D.type=void 0,D.texture=void 0)}function C(){try{s.compressedTexImage2D(...arguments)}catch(D){console.error("THREE.WebGLState:",D)}}function B(){try{s.compressedTexImage3D(...arguments)}catch(D){console.error("THREE.WebGLState:",D)}}function Z(){try{s.texSubImage2D(...arguments)}catch(D){console.error("THREE.WebGLState:",D)}}function Q(){try{s.texSubImage3D(...arguments)}catch(D){console.error("THREE.WebGLState:",D)}}function X(){try{s.compressedTexSubImage2D(...arguments)}catch(D){console.error("THREE.WebGLState:",D)}}function xt(){try{s.compressedTexSubImage3D(...arguments)}catch(D){console.error("THREE.WebGLState:",D)}}function it(){try{s.texStorage2D(...arguments)}catch(D){console.error("THREE.WebGLState:",D)}}function Ct(){try{s.texStorage3D(...arguments)}catch(D){console.error("THREE.WebGLState:",D)}}function It(){try{s.texImage2D(...arguments)}catch(D){console.error("THREE.WebGLState:",D)}}function tt(){try{s.texImage3D(...arguments)}catch(D){console.error("THREE.WebGLState:",D)}}function ct(D){re.equals(D)===!1&&(s.scissor(D.x,D.y,D.z,D.w),re.copy(D))}function wt(D){te.equals(D)===!1&&(s.viewport(D.x,D.y,D.z,D.w),te.copy(D))}function vt(D,et){let st=l.get(et);st===void 0&&(st=new WeakMap,l.set(et,st));let dt=st.get(D);dt===void 0&&(dt=s.getUniformBlockIndex(et,D.name),st.set(D,dt))}function lt(D,et){const dt=l.get(et).get(D);h.get(et)!==dt&&(s.uniformBlockBinding(et,dt,D.__bindingPointIndex),h.set(et,dt))}function Ft(){s.disable(s.BLEND),s.disable(s.CULL_FACE),s.disable(s.DEPTH_TEST),s.disable(s.POLYGON_OFFSET_FILL),s.disable(s.SCISSOR_TEST),s.disable(s.STENCIL_TEST),s.disable(s.SAMPLE_ALPHA_TO_COVERAGE),s.blendEquation(s.FUNC_ADD),s.blendFunc(s.ONE,s.ZERO),s.blendFuncSeparate(s.ONE,s.ZERO,s.ONE,s.ZERO),s.blendColor(0,0,0,0),s.colorMask(!0,!0,!0,!0),s.clearColor(0,0,0,0),s.depthMask(!0),s.depthFunc(s.LESS),a.setReversed(!1),s.clearDepth(1),s.stencilMask(4294967295),s.stencilFunc(s.ALWAYS,0,4294967295),s.stencilOp(s.KEEP,s.KEEP,s.KEEP),s.clearStencil(0),s.cullFace(s.BACK),s.frontFace(s.CCW),s.polygonOffset(0,0),s.activeTexture(s.TEXTURE0),s.bindFramebuffer(s.FRAMEBUFFER,null),s.bindFramebuffer(s.DRAW_FRAMEBUFFER,null),s.bindFramebuffer(s.READ_FRAMEBUFFER,null),s.useProgram(null),s.lineWidth(1),s.scissor(0,0,s.canvas.width,s.canvas.height),s.viewport(0,0,s.canvas.width,s.canvas.height),A={},rt=null,ht={},c={},u=new WeakMap,d=[],p=null,m=!1,g=null,f=null,M=null,S=null,v=null,T=null,_=null,w=new Wt(0,0,0),P=0,E=!1,x=null,b=null,z=null,F=null,U=null,re.set(0,0,s.canvas.width,s.canvas.height),te.set(0,0,s.canvas.width,s.canvas.height),r.reset(),a.reset(),o.reset()}return{buffers:{color:r,depth:a,stencil:o},enable:nt,disable:bt,bindFramebuffer:_t,drawBuffers:Dt,useProgram:fe,setBlending:ie,setMaterial:yt,setFlipSided:jt,setCullFace:Et,setLineWidth:ae,setPolygonOffset:ft,setScissorTest:zt,activeTexture:ye,bindTexture:ge,unbindTexture:y,compressedTexImage2D:C,compressedTexImage3D:B,texImage2D:It,texImage3D:tt,updateUBOMapping:vt,uniformBlockBinding:lt,texStorage2D:it,texStorage3D:Ct,texSubImage2D:Z,texSubImage3D:Q,compressedTexSubImage2D:X,compressedTexSubImage3D:xt,scissor:ct,viewport:wt,reset:Ft}}function BC(s,t,e,i,n,r,a){const o=t.has("WEBGL_multisampled_render_to_texture")?t.get("WEBGL_multisampled_render_to_texture"):null,h=typeof navigator>"u"?!1:/OculusBrowser/g.test(navigator.userAgent),l=new Nt,A=new WeakMap;let c;const u=new WeakMap;let d=!1;try{d=typeof OffscreenCanvas<"u"&&new OffscreenCanvas(1,1).getContext("2d")!==null}catch{}function p(y,C){return d?new OffscreenCanvas(y,C):tr("canvas")}function m(y,C,B){let Z=1;const Q=ge(y);if((Q.width>B||Q.height>B)&&(Z=B/Math.max(Q.width,Q.height)),Z<1)if(typeof HTMLImageElement<"u"&&y instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&y instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&y instanceof ImageBitmap||typeof VideoFrame<"u"&&y instanceof VideoFrame){const X=Math.floor(Z*Q.width),xt=Math.floor(Z*Q.height);c===void 0&&(c=p(X,xt));const it=C?p(X,xt):c;return it.width=X,it.height=xt,it.getContext("2d").drawImage(y,0,0,X,xt),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+Q.width+"x"+Q.height+") to ("+X+"x"+xt+")."),it}else return"data"in y&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+Q.width+"x"+Q.height+")."),y;return y}function g(y){return y.generateMipmaps}function f(y){s.generateMipmap(y)}function M(y){return y.isWebGLCubeRenderTarget?s.TEXTURE_CUBE_MAP:y.isWebGL3DRenderTarget?s.TEXTURE_3D:y.isWebGLArrayRenderTarget||y.isCompressedArrayTexture?s.TEXTURE_2D_ARRAY:s.TEXTURE_2D}function S(y,C,B,Z,Q=!1){if(y!==null){if(s[y]!==void 0)return s[y];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+y+"'")}let X=C;if(C===s.RED&&(B===s.FLOAT&&(X=s.R32F),B===s.HALF_FLOAT&&(X=s.R16F),B===s.UNSIGNED_BYTE&&(X=s.R8)),C===s.RED_INTEGER&&(B===s.UNSIGNED_BYTE&&(X=s.R8UI),B===s.UNSIGNED_SHORT&&(X=s.R16UI),B===s.UNSIGNED_INT&&(X=s.R32UI),B===s.BYTE&&(X=s.R8I),B===s.SHORT&&(X=s.R16I),B===s.INT&&(X=s.R32I)),C===s.RG&&(B===s.FLOAT&&(X=s.RG32F),B===s.HALF_FLOAT&&(X=s.RG16F),B===s.UNSIGNED_BYTE&&(X=s.RG8)),C===s.RG_INTEGER&&(B===s.UNSIGNED_BYTE&&(X=s.RG8UI),B===s.UNSIGNED_SHORT&&(X=s.RG16UI),B===s.UNSIGNED_INT&&(X=s.RG32UI),B===s.BYTE&&(X=s.RG8I),B===s.SHORT&&(X=s.RG16I),B===s.INT&&(X=s.RG32I)),C===s.RGB_INTEGER&&(B===s.UNSIGNED_BYTE&&(X=s.RGB8UI),B===s.UNSIGNED_SHORT&&(X=s.RGB16UI),B===s.UNSIGNED_INT&&(X=s.RGB32UI),B===s.BYTE&&(X=s.RGB8I),B===s.SHORT&&(X=s.RGB16I),B===s.INT&&(X=s.RGB32I)),C===s.RGBA_INTEGER&&(B===s.UNSIGNED_BYTE&&(X=s.RGBA8UI),B===s.UNSIGNED_SHORT&&(X=s.RGBA16UI),B===s.UNSIGNED_INT&&(X=s.RGBA32UI),B===s.BYTE&&(X=s.RGBA8I),B===s.SHORT&&(X=s.RGBA16I),B===s.INT&&(X=s.RGBA32I)),C===s.RGB&&B===s.UNSIGNED_INT_5_9_9_9_REV&&(X=s.RGB9_E5),C===s.RGBA){const xt=Q?Ur:Xt.getTransfer(Z);B===s.FLOAT&&(X=s.RGBA32F),B===s.HALF_FLOAT&&(X=s.RGBA16F),B===s.UNSIGNED_BYTE&&(X=xt===qt?s.SRGB8_ALPHA8:s.RGBA8),B===s.UNSIGNED_SHORT_4_4_4_4&&(X=s.RGBA4),B===s.UNSIGNED_SHORT_5_5_5_1&&(X=s.RGB5_A1)}return(X===s.R16F||X===s.R32F||X===s.RG16F||X===s.RG32F||X===s.RGBA16F||X===s.RGBA32F)&&t.get("EXT_color_buffer_float"),X}function v(y,C){let B;return y?C===null||C===Tn||C===Js?B=s.DEPTH24_STENCIL8:C===Bi?B=s.DEPTH32F_STENCIL8:C===Zs&&(B=s.DEPTH24_STENCIL8,console.warn("DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.")):C===null||C===Tn||C===Js?B=s.DEPTH_COMPONENT24:C===Bi?B=s.DEPTH_COMPONENT32F:C===Zs&&(B=s.DEPTH_COMPONENT16),B}function T(y,C){return g(y)===!0||y.isFramebufferTexture&&y.minFilter!==ui&&y.minFilter!==vi?Math.log2(Math.max(C.width,C.height))+1:y.mipmaps!==void 0&&y.mipmaps.length>0?y.mipmaps.length:y.isCompressedTexture&&Array.isArray(y.image)?C.mipmaps.length:1}function _(y){const C=y.target;C.removeEventListener("dispose",_),P(C),C.isVideoTexture&&A.delete(C)}function w(y){const C=y.target;C.removeEventListener("dispose",w),x(C)}function P(y){const C=i.get(y);if(C.__webglInit===void 0)return;const B=y.source,Z=u.get(B);if(Z){const Q=Z[C.__cacheKey];Q.usedTimes--,Q.usedTimes===0&&E(y),Object.keys(Z).length===0&&u.delete(B)}i.remove(y)}function E(y){const C=i.get(y);s.deleteTexture(C.__webglTexture);const B=y.source,Z=u.get(B);delete Z[C.__cacheKey],a.memory.textures--}function x(y){const C=i.get(y);if(y.depthTexture&&(y.depthTexture.dispose(),i.remove(y.depthTexture)),y.isWebGLCubeRenderTarget)for(let Z=0;Z<6;Z++){if(Array.isArray(C.__webglFramebuffer[Z]))for(let Q=0;Q<C.__webglFramebuffer[Z].length;Q++)s.deleteFramebuffer(C.__webglFramebuffer[Z][Q]);else s.deleteFramebuffer(C.__webglFramebuffer[Z]);C.__webglDepthbuffer&&s.deleteRenderbuffer(C.__webglDepthbuffer[Z])}else{if(Array.isArray(C.__webglFramebuffer))for(let Z=0;Z<C.__webglFramebuffer.length;Z++)s.deleteFramebuffer(C.__webglFramebuffer[Z]);else s.deleteFramebuffer(C.__webglFramebuffer);if(C.__webglDepthbuffer&&s.deleteRenderbuffer(C.__webglDepthbuffer),C.__webglMultisampledFramebuffer&&s.deleteFramebuffer(C.__webglMultisampledFramebuffer),C.__webglColorRenderbuffer)for(let Z=0;Z<C.__webglColorRenderbuffer.length;Z++)C.__webglColorRenderbuffer[Z]&&s.deleteRenderbuffer(C.__webglColorRenderbuffer[Z]);C.__webglDepthRenderbuffer&&s.deleteRenderbuffer(C.__webglDepthRenderbuffer)}const B=y.textures;for(let Z=0,Q=B.length;Z<Q;Z++){const X=i.get(B[Z]);X.__webglTexture&&(s.deleteTexture(X.__webglTexture),a.memory.textures--),i.remove(B[Z])}i.remove(y)}let b=0;function z(){b=0}function F(){const y=b;return y>=n.maxTextures&&console.warn("THREE.WebGLTextures: Trying to use "+y+" texture units while this GPU supports only "+n.maxTextures),b+=1,y}function U(y){const C=[];return C.push(y.wrapS),C.push(y.wrapT),C.push(y.wrapR||0),C.push(y.magFilter),C.push(y.minFilter),C.push(y.anisotropy),C.push(y.internalFormat),C.push(y.format),C.push(y.type),C.push(y.generateMipmaps),C.push(y.premultiplyAlpha),C.push(y.flipY),C.push(y.unpackAlignment),C.push(y.colorSpace),C.join()}function W(y,C){const B=i.get(y);if(y.isVideoTexture&&zt(y),y.isRenderTargetTexture===!1&&y.isExternalTexture!==!0&&y.version>0&&B.__version!==y.version){const Z=y.image;if(Z===null)console.warn("THREE.WebGLRenderer: Texture marked for update but no image data found.");else if(Z.complete===!1)console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete");else{ot(B,y,C);return}}else y.isExternalTexture&&(B.__webglTexture=y.sourceTexture?y.sourceTexture:null);e.bindTexture(s.TEXTURE_2D,B.__webglTexture,s.TEXTURE0+C)}function Y(y,C){const B=i.get(y);if(y.isRenderTargetTexture===!1&&y.version>0&&B.__version!==y.version){ot(B,y,C);return}e.bindTexture(s.TEXTURE_2D_ARRAY,B.__webglTexture,s.TEXTURE0+C)}function $(y,C){const B=i.get(y);if(y.isRenderTargetTexture===!1&&y.version>0&&B.__version!==y.version){ot(B,y,C);return}e.bindTexture(s.TEXTURE_3D,B.__webglTexture,s.TEXTURE0+C)}function H(y,C){const B=i.get(y);if(y.version>0&&B.__version!==y.version){nt(B,y,C);return}e.bindTexture(s.TEXTURE_CUBE_MAP,B.__webglTexture,s.TEXTURE0+C)}const rt={[so]:s.REPEAT,[bn]:s.CLAMP_TO_EDGE,[ro]:s.MIRRORED_REPEAT},ht={[ui]:s.NEAREST,[Vd]:s.NEAREST_MIPMAP_NEAREST,[Dr]:s.NEAREST_MIPMAP_LINEAR,[vi]:s.LINEAR,[ao]:s.LINEAR_MIPMAP_NEAREST,[_n]:s.LINEAR_MIPMAP_LINEAR},mt={[Zd]:s.NEVER,[$d]:s.ALWAYS,[jd]:s.LESS,[Xh]:s.LEQUAL,[Jd]:s.EQUAL,[Kd]:s.GEQUAL,[Qd]:s.GREATER,[qd]:s.NOTEQUAL};function Ut(y,C){if(C.type===Bi&&t.has("OES_texture_float_linear")===!1&&(C.magFilter===vi||C.magFilter===ao||C.magFilter===Dr||C.magFilter===_n||C.minFilter===vi||C.minFilter===ao||C.minFilter===Dr||C.minFilter===_n)&&console.warn("THREE.WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device."),s.texParameteri(y,s.TEXTURE_WRAP_S,rt[C.wrapS]),s.texParameteri(y,s.TEXTURE_WRAP_T,rt[C.wrapT]),(y===s.TEXTURE_3D||y===s.TEXTURE_2D_ARRAY)&&s.texParameteri(y,s.TEXTURE_WRAP_R,rt[C.wrapR]),s.texParameteri(y,s.TEXTURE_MAG_FILTER,ht[C.magFilter]),s.texParameteri(y,s.TEXTURE_MIN_FILTER,ht[C.minFilter]),C.compareFunction&&(s.texParameteri(y,s.TEXTURE_COMPARE_MODE,s.COMPARE_REF_TO_TEXTURE),s.texParameteri(y,s.TEXTURE_COMPARE_FUNC,mt[C.compareFunction])),t.has("EXT_texture_filter_anisotropic")===!0){if(C.magFilter===ui||C.minFilter!==Dr&&C.minFilter!==_n||C.type===Bi&&t.has("OES_texture_float_linear")===!1)return;if(C.anisotropy>1||i.get(C).__currentAnisotropy){const B=t.get("EXT_texture_filter_anisotropic");s.texParameterf(y,B.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(C.anisotropy,n.getMaxAnisotropy())),i.get(C).__currentAnisotropy=C.anisotropy}}}function re(y,C){let B=!1;y.__webglInit===void 0&&(y.__webglInit=!0,C.addEventListener("dispose",_));const Z=C.source;let Q=u.get(Z);Q===void 0&&(Q={},u.set(Z,Q));const X=U(C);if(X!==y.__cacheKey){Q[X]===void 0&&(Q[X]={texture:s.createTexture(),usedTimes:0},a.memory.textures++,B=!0),Q[X].usedTimes++;const xt=Q[y.__cacheKey];xt!==void 0&&(Q[y.__cacheKey].usedTimes--,xt.usedTimes===0&&E(C)),y.__cacheKey=X,y.__webglTexture=Q[X].texture}return B}function te(y,C,B){return Math.floor(Math.floor(y/B)/C)}function j(y,C,B,Z){const X=y.updateRanges;if(X.length===0)e.texSubImage2D(s.TEXTURE_2D,0,0,0,C.width,C.height,B,Z,C.data);else{X.sort((tt,ct)=>tt.start-ct.start);let xt=0;for(let tt=1;tt<X.length;tt++){const ct=X[xt],wt=X[tt],vt=ct.start+ct.count,lt=te(wt.start,C.width,4),Ft=te(ct.start,C.width,4);wt.start<=vt+1&<===Ft&&te(wt.start+wt.count-1,C.width,4)===lt?ct.count=Math.max(ct.count,wt.start+wt.count-ct.start):(++xt,X[xt]=wt)}X.length=xt+1;const it=s.getParameter(s.UNPACK_ROW_LENGTH),Ct=s.getParameter(s.UNPACK_SKIP_PIXELS),It=s.getParameter(s.UNPACK_SKIP_ROWS);s.pixelStorei(s.UNPACK_ROW_LENGTH,C.width);for(let tt=0,ct=X.length;tt<ct;tt++){const wt=X[tt],vt=Math.floor(wt.start/4),lt=Math.ceil(wt.count/4),Ft=vt%C.width,D=Math.floor(vt/C.width),et=lt,st=1;s.pixelStorei(s.UNPACK_SKIP_PIXELS,Ft),s.pixelStorei(s.UNPACK_SKIP_ROWS,D),e.texSubImage2D(s.TEXTURE_2D,0,Ft,D,et,st,B,Z,C.data)}y.clearUpdateRanges(),s.pixelStorei(s.UNPACK_ROW_LENGTH,it),s.pixelStorei(s.UNPACK_SKIP_PIXELS,Ct),s.pixelStorei(s.UNPACK_SKIP_ROWS,It)}}function ot(y,C,B){let Z=s.TEXTURE_2D;(C.isDataArrayTexture||C.isCompressedArrayTexture)&&(Z=s.TEXTURE_2D_ARRAY),C.isData3DTexture&&(Z=s.TEXTURE_3D);const Q=re(y,C),X=C.source;e.bindTexture(Z,y.__webglTexture,s.TEXTURE0+B);const xt=i.get(X);if(X.version!==xt.__version||Q===!0){e.activeTexture(s.TEXTURE0+B);const it=Xt.getPrimaries(Xt.workingColorSpace),Ct=C.colorSpace===rn?null:Xt.getPrimaries(C.colorSpace),It=C.colorSpace===rn||it===Ct?s.NONE:s.BROWSER_DEFAULT_WEBGL;s.pixelStorei(s.UNPACK_FLIP_Y_WEBGL,C.flipY),s.pixelStorei(s.UNPACK_PREMULTIPLY_ALPHA_WEBGL,C.premultiplyAlpha),s.pixelStorei(s.UNPACK_ALIGNMENT,C.unpackAlignment),s.pixelStorei(s.UNPACK_COLORSPACE_CONVERSION_WEBGL,It);let tt=m(C.image,!1,n.maxTextureSize);tt=ye(C,tt);const ct=r.convert(C.format,C.colorSpace),wt=r.convert(C.type);let vt=S(C.internalFormat,ct,wt,C.colorSpace,C.isVideoTexture);Ut(Z,C);let lt;const Ft=C.mipmaps,D=C.isVideoTexture!==!0,et=xt.__version===void 0||Q===!0,st=X.dataReady,dt=T(C,tt);if(C.isDepthTexture)vt=v(C.format===qs,C.type),et&&(D?e.texStorage2D(s.TEXTURE_2D,1,vt,tt.width,tt.height):e.texImage2D(s.TEXTURE_2D,0,vt,tt.width,tt.height,0,ct,wt,null));else if(C.isDataTexture)if(Ft.length>0){D&&et&&e.texStorage2D(s.TEXTURE_2D,dt,vt,Ft[0].width,Ft[0].height);for(let q=0,J=Ft.length;q<J;q++)lt=Ft[q],D?st&&e.texSubImage2D(s.TEXTURE_2D,q,0,0,lt.width,lt.height,ct,wt,lt.data):e.texImage2D(s.TEXTURE_2D,q,vt,lt.width,lt.height,0,ct,wt,lt.data);C.generateMipmaps=!1}else D?(et&&e.texStorage2D(s.TEXTURE_2D,dt,vt,tt.width,tt.height),st&&j(C,tt,ct,wt)):e.texImage2D(s.TEXTURE_2D,0,vt,tt.width,tt.height,0,ct,wt,tt.data);else if(C.isCompressedTexture)if(C.isCompressedArrayTexture){D&&et&&e.texStorage3D(s.TEXTURE_2D_ARRAY,dt,vt,Ft[0].width,Ft[0].height,tt.depth);for(let q=0,J=Ft.length;q<J;q++)if(lt=Ft[q],C.format!==di)if(ct!==null)if(D){if(st)if(C.layerUpdates.size>0){const pt=LA(lt.width,lt.height,C.format,C.type);for(const Lt of C.layerUpdates){const ne=lt.data.subarray(Lt*pt/lt.data.BYTES_PER_ELEMENT,(Lt+1)*pt/lt.data.BYTES_PER_ELEMENT);e.compressedTexSubImage3D(s.TEXTURE_2D_ARRAY,q,0,0,Lt,lt.width,lt.height,1,ct,ne)}C.clearLayerUpdates()}else e.compressedTexSubImage3D(s.TEXTURE_2D_ARRAY,q,0,0,0,lt.width,lt.height,tt.depth,ct,lt.data)}else e.compressedTexImage3D(s.TEXTURE_2D_ARRAY,q,vt,lt.width,lt.height,tt.depth,0,lt.data,0,0);else console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()");else D?st&&e.texSubImage3D(s.TEXTURE_2D_ARRAY,q,0,0,0,lt.width,lt.height,tt.depth,ct,wt,lt.data):e.texImage3D(s.TEXTURE_2D_ARRAY,q,vt,lt.width,lt.height,tt.depth,0,ct,wt,lt.data)}else{D&&et&&e.texStorage2D(s.TEXTURE_2D,dt,vt,Ft[0].width,Ft[0].height);for(let q=0,J=Ft.length;q<J;q++)lt=Ft[q],C.format!==di?ct!==null?D?st&&e.compressedTexSubImage2D(s.TEXTURE_2D,q,0,0,lt.width,lt.height,ct,lt.data):e.compressedTexImage2D(s.TEXTURE_2D,q,vt,lt.width,lt.height,0,lt.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"):D?st&&e.texSubImage2D(s.TEXTURE_2D,q,0,0,lt.width,lt.height,ct,wt,lt.data):e.texImage2D(s.TEXTURE_2D,q,vt,lt.width,lt.height,0,ct,wt,lt.data)}else if(C.isDataArrayTexture)if(D){if(et&&e.texStorage3D(s.TEXTURE_2D_ARRAY,dt,vt,tt.width,tt.height,tt.depth),st)if(C.layerUpdates.size>0){const q=LA(tt.width,tt.height,C.format,C.type);for(const J of C.layerUpdates){const pt=tt.data.subarray(J*q/tt.data.BYTES_PER_ELEMENT,(J+1)*q/tt.data.BYTES_PER_ELEMENT);e.texSubImage3D(s.TEXTURE_2D_ARRAY,0,0,0,J,tt.width,tt.height,1,ct,wt,pt)}C.clearLayerUpdates()}else e.texSubImage3D(s.TEXTURE_2D_ARRAY,0,0,0,0,tt.width,tt.height,tt.depth,ct,wt,tt.data)}else e.texImage3D(s.TEXTURE_2D_ARRAY,0,vt,tt.width,tt.height,tt.depth,0,ct,wt,tt.data);else if(C.isData3DTexture)D?(et&&e.texStorage3D(s.TEXTURE_3D,dt,vt,tt.width,tt.height,tt.depth),st&&e.texSubImage3D(s.TEXTURE_3D,0,0,0,0,tt.width,tt.height,tt.depth,ct,wt,tt.data)):e.texImage3D(s.TEXTURE_3D,0,vt,tt.width,tt.height,tt.depth,0,ct,wt,tt.data);else if(C.isFramebufferTexture){if(et)if(D)e.texStorage2D(s.TEXTURE_2D,dt,vt,tt.width,tt.height);else{let q=tt.width,J=tt.height;for(let pt=0;pt<dt;pt++)e.texImage2D(s.TEXTURE_2D,pt,vt,q,J,0,ct,wt,null),q>>=1,J>>=1}}else if(Ft.length>0){if(D&&et){const q=ge(Ft[0]);e.texStorage2D(s.TEXTURE_2D,dt,vt,q.width,q.height)}for(let q=0,J=Ft.length;q<J;q++)lt=Ft[q],D?st&&e.texSubImage2D(s.TEXTURE_2D,q,0,0,ct,wt,lt):e.texImage2D(s.TEXTURE_2D,q,vt,ct,wt,lt);C.generateMipmaps=!1}else if(D){if(et){const q=ge(tt);e.texStorage2D(s.TEXTURE_2D,dt,vt,q.width,q.height)}st&&e.texSubImage2D(s.TEXTURE_2D,0,0,0,ct,wt,tt)}else e.texImage2D(s.TEXTURE_2D,0,vt,ct,wt,tt);g(C)&&f(Z),xt.__version=X.version,C.onUpdate&&C.onUpdate(C)}y.__version=C.version}function nt(y,C,B){if(C.image.length!==6)return;const Z=re(y,C),Q=C.source;e.bindTexture(s.TEXTURE_CUBE_MAP,y.__webglTexture,s.TEXTURE0+B);const X=i.get(Q);if(Q.version!==X.__version||Z===!0){e.activeTexture(s.TEXTURE0+B);const xt=Xt.getPrimaries(Xt.workingColorSpace),it=C.colorSpace===rn?null:Xt.getPrimaries(C.colorSpace),Ct=C.colorSpace===rn||xt===it?s.NONE:s.BROWSER_DEFAULT_WEBGL;s.pixelStorei(s.UNPACK_FLIP_Y_WEBGL,C.flipY),s.pixelStorei(s.UNPACK_PREMULTIPLY_ALPHA_WEBGL,C.premultiplyAlpha),s.pixelStorei(s.UNPACK_ALIGNMENT,C.unpackAlignment),s.pixelStorei(s.UNPACK_COLORSPACE_CONVERSION_WEBGL,Ct);const It=C.isCompressedTexture||C.image[0].isCompressedTexture,tt=C.image[0]&&C.image[0].isDataTexture,ct=[];for(let J=0;J<6;J++)!It&&!tt?ct[J]=m(C.image[J],!0,n.maxCubemapSize):ct[J]=tt?C.image[J].image:C.image[J],ct[J]=ye(C,ct[J]);const wt=ct[0],vt=r.convert(C.format,C.colorSpace),lt=r.convert(C.type),Ft=S(C.internalFormat,vt,lt,C.colorSpace),D=C.isVideoTexture!==!0,et=X.__version===void 0||Z===!0,st=Q.dataReady;let dt=T(C,wt);Ut(s.TEXTURE_CUBE_MAP,C);let q;if(It){D&&et&&e.texStorage2D(s.TEXTURE_CUBE_MAP,dt,Ft,wt.width,wt.height);for(let J=0;J<6;J++){q=ct[J].mipmaps;for(let pt=0;pt<q.length;pt++){const Lt=q[pt];C.format!==di?vt!==null?D?st&&e.compressedTexSubImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+J,pt,0,0,Lt.width,Lt.height,vt,Lt.data):e.compressedTexImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+J,pt,Ft,Lt.width,Lt.height,0,Lt.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()"):D?st&&e.texSubImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+J,pt,0,0,Lt.width,Lt.height,vt,lt,Lt.data):e.texImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+J,pt,Ft,Lt.width,Lt.height,0,vt,lt,Lt.data)}}}else{if(q=C.mipmaps,D&&et){q.length>0&&dt++;const J=ge(ct[0]);e.texStorage2D(s.TEXTURE_CUBE_MAP,dt,Ft,J.width,J.height)}for(let J=0;J<6;J++)if(tt){D?st&&e.texSubImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+J,0,0,0,ct[J].width,ct[J].height,vt,lt,ct[J].data):e.texImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+J,0,Ft,ct[J].width,ct[J].height,0,vt,lt,ct[J].data);for(let pt=0;pt<q.length;pt++){const ne=q[pt].image[J].image;D?st&&e.texSubImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+J,pt+1,0,0,ne.width,ne.height,vt,lt,ne.data):e.texImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+J,pt+1,Ft,ne.width,ne.height,0,vt,lt,ne.data)}}else{D?st&&e.texSubImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+J,0,0,0,vt,lt,ct[J]):e.texImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+J,0,Ft,vt,lt,ct[J]);for(let pt=0;pt<q.length;pt++){const Lt=q[pt];D?st&&e.texSubImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+J,pt+1,0,0,vt,lt,Lt.image[J]):e.texImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+J,pt+1,Ft,vt,lt,Lt.image[J])}}}g(C)&&f(s.TEXTURE_CUBE_MAP),X.__version=Q.version,C.onUpdate&&C.onUpdate(C)}y.__version=C.version}function bt(y,C,B,Z,Q,X){const xt=r.convert(B.format,B.colorSpace),it=r.convert(B.type),Ct=S(B.internalFormat,xt,it,B.colorSpace),It=i.get(C),tt=i.get(B);if(tt.__renderTarget=C,!It.__hasExternalTextures){const ct=Math.max(1,C.width>>X),wt=Math.max(1,C.height>>X);Q===s.TEXTURE_3D||Q===s.TEXTURE_2D_ARRAY?e.texImage3D(Q,X,Ct,ct,wt,C.depth,0,xt,it,null):e.texImage2D(Q,X,Ct,ct,wt,0,xt,it,null)}e.bindFramebuffer(s.FRAMEBUFFER,y),ft(C)?o.framebufferTexture2DMultisampleEXT(s.FRAMEBUFFER,Z,Q,tt.__webglTexture,0,ae(C)):(Q===s.TEXTURE_2D||Q>=s.TEXTURE_CUBE_MAP_POSITIVE_X&&Q<=s.TEXTURE_CUBE_MAP_NEGATIVE_Z)&&s.framebufferTexture2D(s.FRAMEBUFFER,Z,Q,tt.__webglTexture,X),e.bindFramebuffer(s.FRAMEBUFFER,null)}function _t(y,C,B){if(s.bindRenderbuffer(s.RENDERBUFFER,y),C.depthBuffer){const Z=C.depthTexture,Q=Z&&Z.isDepthTexture?Z.type:null,X=v(C.stencilBuffer,Q),xt=C.stencilBuffer?s.DEPTH_STENCIL_ATTACHMENT:s.DEPTH_ATTACHMENT,it=ae(C);ft(C)?o.renderbufferStorageMultisampleEXT(s.RENDERBUFFER,it,X,C.width,C.height):B?s.renderbufferStorageMultisample(s.RENDERBUFFER,it,X,C.width,C.height):s.renderbufferStorage(s.RENDERBUFFER,X,C.width,C.height),s.framebufferRenderbuffer(s.FRAMEBUFFER,xt,s.RENDERBUFFER,y)}else{const Z=C.textures;for(let Q=0;Q<Z.length;Q++){const X=Z[Q],xt=r.convert(X.format,X.colorSpace),it=r.convert(X.type),Ct=S(X.internalFormat,xt,it,X.colorSpace),It=ae(C);B&&ft(C)===!1?s.renderbufferStorageMultisample(s.RENDERBUFFER,It,Ct,C.width,C.height):ft(C)?o.renderbufferStorageMultisampleEXT(s.RENDERBUFFER,It,Ct,C.width,C.height):s.renderbufferStorage(s.RENDERBUFFER,Ct,C.width,C.height)}}s.bindRenderbuffer(s.RENDERBUFFER,null)}function Dt(y,C){if(C&&C.isWebGLCubeRenderTarget)throw new Error("Depth Texture with cube render targets is not supported");if(e.bindFramebuffer(s.FRAMEBUFFER,y),!(C.depthTexture&&C.depthTexture.isDepthTexture))throw new Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");const Z=i.get(C.depthTexture);Z.__renderTarget=C,(!Z.__webglTexture||C.depthTexture.image.width!==C.width||C.depthTexture.image.height!==C.height)&&(C.depthTexture.image.width=C.width,C.depthTexture.image.height=C.height,C.depthTexture.needsUpdate=!0),W(C.depthTexture,0);const Q=Z.__webglTexture,X=ae(C);if(C.depthTexture.format===Qs)ft(C)?o.framebufferTexture2DMultisampleEXT(s.FRAMEBUFFER,s.DEPTH_ATTACHMENT,s.TEXTURE_2D,Q,0,X):s.framebufferTexture2D(s.FRAMEBUFFER,s.DEPTH_ATTACHMENT,s.TEXTURE_2D,Q,0);else if(C.depthTexture.format===qs)ft(C)?o.framebufferTexture2DMultisampleEXT(s.FRAMEBUFFER,s.DEPTH_STENCIL_ATTACHMENT,s.TEXTURE_2D,Q,0,X):s.framebufferTexture2D(s.FRAMEBUFFER,s.DEPTH_STENCIL_ATTACHMENT,s.TEXTURE_2D,Q,0);else throw new Error("Unknown depthTexture format")}function fe(y){const C=i.get(y),B=y.isWebGLCubeRenderTarget===!0;if(C.__boundDepthTexture!==y.depthTexture){const Z=y.depthTexture;if(C.__depthDisposeCallback&&C.__depthDisposeCallback(),Z){const Q=()=>{delete C.__boundDepthTexture,delete C.__depthDisposeCallback,Z.removeEventListener("dispose",Q)};Z.addEventListener("dispose",Q),C.__depthDisposeCallback=Q}C.__boundDepthTexture=Z}if(y.depthTexture&&!C.__autoAllocateDepthBuffer){if(B)throw new Error("target.depthTexture not supported in Cube render targets");const Z=y.texture.mipmaps;Z&&Z.length>0?Dt(C.__webglFramebuffer[0],y):Dt(C.__webglFramebuffer,y)}else if(B){C.__webglDepthbuffer=[];for(let Z=0;Z<6;Z++)if(e.bindFramebuffer(s.FRAMEBUFFER,C.__webglFramebuffer[Z]),C.__webglDepthbuffer[Z]===void 0)C.__webglDepthbuffer[Z]=s.createRenderbuffer(),_t(C.__webglDepthbuffer[Z],y,!1);else{const Q=y.stencilBuffer?s.DEPTH_STENCIL_ATTACHMENT:s.DEPTH_ATTACHMENT,X=C.__webglDepthbuffer[Z];s.bindRenderbuffer(s.RENDERBUFFER,X),s.framebufferRenderbuffer(s.FRAMEBUFFER,Q,s.RENDERBUFFER,X)}}else{const Z=y.texture.mipmaps;if(Z&&Z.length>0?e.bindFramebuffer(s.FRAMEBUFFER,C.__webglFramebuffer[0]):e.bindFramebuffer(s.FRAMEBUFFER,C.__webglFramebuffer),C.__webglDepthbuffer===void 0)C.__webglDepthbuffer=s.createRenderbuffer(),_t(C.__webglDepthbuffer,y,!1);else{const Q=y.stencilBuffer?s.DEPTH_STENCIL_ATTACHMENT:s.DEPTH_ATTACHMENT,X=C.__webglDepthbuffer;s.bindRenderbuffer(s.RENDERBUFFER,X),s.framebufferRenderbuffer(s.FRAMEBUFFER,Q,s.RENDERBUFFER,X)}}e.bindFramebuffer(s.FRAMEBUFFER,null)}function Yt(y,C,B){const Z=i.get(y);C!==void 0&&bt(Z.__webglFramebuffer,y,y.texture,s.COLOR_ATTACHMENT0,s.TEXTURE_2D,0),B!==void 0&&fe(y)}function R(y){const C=y.texture,B=i.get(y),Z=i.get(C);y.addEventListener("dispose",w);const Q=y.textures,X=y.isWebGLCubeRenderTarget===!0,xt=Q.length>1;if(xt||(Z.__webglTexture===void 0&&(Z.__webglTexture=s.createTexture()),Z.__version=C.version,a.memory.textures++),X){B.__webglFramebuffer=[];for(let it=0;it<6;it++)if(C.mipmaps&&C.mipmaps.length>0){B.__webglFramebuffer[it]=[];for(let Ct=0;Ct<C.mipmaps.length;Ct++)B.__webglFramebuffer[it][Ct]=s.createFramebuffer()}else B.__webglFramebuffer[it]=s.createFramebuffer()}else{if(C.mipmaps&&C.mipmaps.length>0){B.__webglFramebuffer=[];for(let it=0;it<C.mipmaps.length;it++)B.__webglFramebuffer[it]=s.createFramebuffer()}else B.__webglFramebuffer=s.createFramebuffer();if(xt)for(let it=0,Ct=Q.length;it<Ct;it++){const It=i.get(Q[it]);It.__webglTexture===void 0&&(It.__webglTexture=s.createTexture(),a.memory.textures++)}if(y.samples>0&&ft(y)===!1){B.__webglMultisampledFramebuffer=s.createFramebuffer(),B.__webglColorRenderbuffer=[],e.bindFramebuffer(s.FRAMEBUFFER,B.__webglMultisampledFramebuffer);for(let it=0;it<Q.length;it++){const Ct=Q[it];B.__webglColorRenderbuffer[it]=s.createRenderbuffer(),s.bindRenderbuffer(s.RENDERBUFFER,B.__webglColorRenderbuffer[it]);const It=r.convert(Ct.format,Ct.colorSpace),tt=r.convert(Ct.type),ct=S(Ct.internalFormat,It,tt,Ct.colorSpace,y.isXRRenderTarget===!0),wt=ae(y);s.renderbufferStorageMultisample(s.RENDERBUFFER,wt,ct,y.width,y.height),s.framebufferRenderbuffer(s.FRAMEBUFFER,s.COLOR_ATTACHMENT0+it,s.RENDERBUFFER,B.__webglColorRenderbuffer[it])}s.bindRenderbuffer(s.RENDERBUFFER,null),y.depthBuffer&&(B.__webglDepthRenderbuffer=s.createRenderbuffer(),_t(B.__webglDepthRenderbuffer,y,!0)),e.bindFramebuffer(s.FRAMEBUFFER,null)}}if(X){e.bindTexture(s.TEXTURE_CUBE_MAP,Z.__webglTexture),Ut(s.TEXTURE_CUBE_MAP,C);for(let it=0;it<6;it++)if(C.mipmaps&&C.mipmaps.length>0)for(let Ct=0;Ct<C.mipmaps.length;Ct++)bt(B.__webglFramebuffer[it][Ct],y,C,s.COLOR_ATTACHMENT0,s.TEXTURE_CUBE_MAP_POSITIVE_X+it,Ct);else bt(B.__webglFramebuffer[it],y,C,s.COLOR_ATTACHMENT0,s.TEXTURE_CUBE_MAP_POSITIVE_X+it,0);g(C)&&f(s.TEXTURE_CUBE_MAP),e.unbindTexture()}else if(xt){for(let it=0,Ct=Q.length;it<Ct;it++){const It=Q[it],tt=i.get(It);let ct=s.TEXTURE_2D;(y.isWebGL3DRenderTarget||y.isWebGLArrayRenderTarget)&&(ct=y.isWebGL3DRenderTarget?s.TEXTURE_3D:s.TEXTURE_2D_ARRAY),e.bindTexture(ct,tt.__webglTexture),Ut(ct,It),bt(B.__webglFramebuffer,y,It,s.COLOR_ATTACHMENT0+it,ct,0),g(It)&&f(ct)}e.unbindTexture()}else{let it=s.TEXTURE_2D;if((y.isWebGL3DRenderTarget||y.isWebGLArrayRenderTarget)&&(it=y.isWebGL3DRenderTarget?s.TEXTURE_3D:s.TEXTURE_2D_ARRAY),e.bindTexture(it,Z.__webglTexture),Ut(it,C),C.mipmaps&&C.mipmaps.length>0)for(let Ct=0;Ct<C.mipmaps.length;Ct++)bt(B.__webglFramebuffer[Ct],y,C,s.COLOR_ATTACHMENT0,it,Ct);else bt(B.__webglFramebuffer,y,C,s.COLOR_ATTACHMENT0,it,0);g(C)&&f(it),e.unbindTexture()}y.depthBuffer&&fe(y)}function ie(y){const C=y.textures;for(let B=0,Z=C.length;B<Z;B++){const Q=C[B];if(g(Q)){const X=M(y),xt=i.get(Q).__webglTexture;e.bindTexture(X,xt),f(X),e.unbindTexture()}}}const yt=[],jt=[];function Et(y){if(y.samples>0){if(ft(y)===!1){const C=y.textures,B=y.width,Z=y.height;let Q=s.COLOR_BUFFER_BIT;const X=y.stencilBuffer?s.DEPTH_STENCIL_ATTACHMENT:s.DEPTH_ATTACHMENT,xt=i.get(y),it=C.length>1;if(it)for(let It=0;It<C.length;It++)e.bindFramebuffer(s.FRAMEBUFFER,xt.__webglMultisampledFramebuffer),s.framebufferRenderbuffer(s.FRAMEBUFFER,s.COLOR_ATTACHMENT0+It,s.RENDERBUFFER,null),e.bindFramebuffer(s.FRAMEBUFFER,xt.__webglFramebuffer),s.framebufferTexture2D(s.DRAW_FRAMEBUFFER,s.COLOR_ATTACHMENT0+It,s.TEXTURE_2D,null,0);e.bindFramebuffer(s.READ_FRAMEBUFFER,xt.__webglMultisampledFramebuffer);const Ct=y.texture.mipmaps;Ct&&Ct.length>0?e.bindFramebuffer(s.DRAW_FRAMEBUFFER,xt.__webglFramebuffer[0]):e.bindFramebuffer(s.DRAW_FRAMEBUFFER,xt.__webglFramebuffer);for(let It=0;It<C.length;It++){if(y.resolveDepthBuffer&&(y.depthBuffer&&(Q|=s.DEPTH_BUFFER_BIT),y.stencilBuffer&&y.resolveStencilBuffer&&(Q|=s.STENCIL_BUFFER_BIT)),it){s.framebufferRenderbuffer(s.READ_FRAMEBUFFER,s.COLOR_ATTACHMENT0,s.RENDERBUFFER,xt.__webglColorRenderbuffer[It]);const tt=i.get(C[It]).__webglTexture;s.framebufferTexture2D(s.DRAW_FRAMEBUFFER,s.COLOR_ATTACHMENT0,s.TEXTURE_2D,tt,0)}s.blitFramebuffer(0,0,B,Z,0,0,B,Z,Q,s.NEAREST),h===!0&&(yt.length=0,jt.length=0,yt.push(s.COLOR_ATTACHMENT0+It),y.depthBuffer&&y.resolveDepthBuffer===!1&&(yt.push(X),jt.push(X),s.invalidateFramebuffer(s.DRAW_FRAMEBUFFER,jt)),s.invalidateFramebuffer(s.READ_FRAMEBUFFER,yt))}if(e.bindFramebuffer(s.READ_FRAMEBUFFER,null),e.bindFramebuffer(s.DRAW_FRAMEBUFFER,null),it)for(let It=0;It<C.length;It++){e.bindFramebuffer(s.FRAMEBUFFER,xt.__webglMultisampledFramebuffer),s.framebufferRenderbuffer(s.FRAMEBUFFER,s.COLOR_ATTACHMENT0+It,s.RENDERBUFFER,xt.__webglColorRenderbuffer[It]);const tt=i.get(C[It]).__webglTexture;e.bindFramebuffer(s.FRAMEBUFFER,xt.__webglFramebuffer),s.framebufferTexture2D(s.DRAW_FRAMEBUFFER,s.COLOR_ATTACHMENT0+It,s.TEXTURE_2D,tt,0)}e.bindFramebuffer(s.DRAW_FRAMEBUFFER,xt.__webglMultisampledFramebuffer)}else if(y.depthBuffer&&y.resolveDepthBuffer===!1&&h){const C=y.stencilBuffer?s.DEPTH_STENCIL_ATTACHMENT:s.DEPTH_ATTACHMENT;s.invalidateFramebuffer(s.DRAW_FRAMEBUFFER,[C])}}}function ae(y){return Math.min(n.maxSamples,y.samples)}function ft(y){const C=i.get(y);return y.samples>0&&t.has("WEBGL_multisampled_render_to_texture")===!0&&C.__useRenderToTexture!==!1}function zt(y){const C=a.render.frame;A.get(y)!==C&&(A.set(y,C),y.update())}function ye(y,C){const B=y.colorSpace,Z=y.format,Q=y.type;return y.isCompressedTexture===!0||y.isVideoTexture===!0||B!==As&&B!==rn&&(Xt.getTransfer(B)===qt?(Z!==di||Q!==xi)&&console.warn("THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."):console.error("THREE.WebGLTextures: Unsupported texture color space:",B)),C}function ge(y){return typeof HTMLImageElement<"u"&&y instanceof HTMLImageElement?(l.width=y.naturalWidth||y.width,l.height=y.naturalHeight||y.height):typeof VideoFrame<"u"&&y instanceof VideoFrame?(l.width=y.displayWidth,l.height=y.displayHeight):(l.width=y.width,l.height=y.height),l}this.allocateTextureUnit=F,this.resetTextureUnits=z,this.setTexture2D=W,this.setTexture2DArray=Y,this.setTexture3D=$,this.setTextureCube=H,this.rebindTextures=Yt,this.setupRenderTarget=R,this.updateRenderTargetMipmap=ie,this.updateMultisampleRenderTarget=Et,this.setupDepthRenderbuffer=fe,this.setupFrameBufferTexture=bt,this.useMultisampledRTT=ft}function UC(s,t){function e(i,n=rn){let r;const a=Xt.getTransfer(n);if(i===xi)return s.UNSIGNED_BYTE;if(i===lo)return s.UNSIGNED_SHORT_4_4_4_4;if(i===ho)return s.UNSIGNED_SHORT_5_5_5_1;if(i===Uh)return s.UNSIGNED_INT_5_9_9_9_REV;if(i===Fh)return s.BYTE;if(i===Bh)return s.SHORT;if(i===Zs)return s.UNSIGNED_SHORT;if(i===oo)return s.INT;if(i===Tn)return s.UNSIGNED_INT;if(i===Bi)return s.FLOAT;if(i===js)return s.HALF_FLOAT;if(i===zh)return s.ALPHA;if(i===kh)return s.RGB;if(i===di)return s.RGBA;if(i===Qs)return s.DEPTH_COMPONENT;if(i===qs)return s.DEPTH_STENCIL;if(i===Gh)return s.RED;if(i===Ao)return s.RED_INTEGER;if(i===Hh)return s.RG;if(i===co)return s.RG_INTEGER;if(i===uo)return s.RGBA_INTEGER;if(i===Lr||i===Nr||i===Or||i===Fr)if(a===qt)if(r=t.get("WEBGL_compressed_texture_s3tc_srgb"),r!==null){if(i===Lr)return r.COMPRESSED_SRGB_S3TC_DXT1_EXT;if(i===Nr)return r.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;if(i===Or)return r.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;if(i===Fr)return r.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}else return null;else if(r=t.get("WEBGL_compressed_texture_s3tc"),r!==null){if(i===Lr)return r.COMPRESSED_RGB_S3TC_DXT1_EXT;if(i===Nr)return r.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(i===Or)return r.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(i===Fr)return r.COMPRESSED_RGBA_S3TC_DXT5_EXT}else return null;if(i===fo||i===go||i===po||i===mo)if(r=t.get("WEBGL_compressed_texture_pvrtc"),r!==null){if(i===fo)return r.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(i===go)return r.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(i===po)return r.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(i===mo)return r.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}else return null;if(i===Co||i===Io||i===vo)if(r=t.get("WEBGL_compressed_texture_etc"),r!==null){if(i===Co||i===Io)return a===qt?r.COMPRESSED_SRGB8_ETC2:r.COMPRESSED_RGB8_ETC2;if(i===vo)return a===qt?r.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:r.COMPRESSED_RGBA8_ETC2_EAC}else return null;if(i===xo||i===Eo||i===So||i===yo||i===Mo||i===bo||i===_o||i===To||i===wo||i===Ro||i===Po||i===Do||i===Lo||i===No)if(r=t.get("WEBGL_compressed_texture_astc"),r!==null){if(i===xo)return a===qt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:r.COMPRESSED_RGBA_ASTC_4x4_KHR;if(i===Eo)return a===qt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:r.COMPRESSED_RGBA_ASTC_5x4_KHR;if(i===So)return a===qt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:r.COMPRESSED_RGBA_ASTC_5x5_KHR;if(i===yo)return a===qt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:r.COMPRESSED_RGBA_ASTC_6x5_KHR;if(i===Mo)return a===qt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:r.COMPRESSED_RGBA_ASTC_6x6_KHR;if(i===bo)return a===qt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:r.COMPRESSED_RGBA_ASTC_8x5_KHR;if(i===_o)return a===qt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:r.COMPRESSED_RGBA_ASTC_8x6_KHR;if(i===To)return a===qt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:r.COMPRESSED_RGBA_ASTC_8x8_KHR;if(i===wo)return a===qt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:r.COMPRESSED_RGBA_ASTC_10x5_KHR;if(i===Ro)return a===qt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:r.COMPRESSED_RGBA_ASTC_10x6_KHR;if(i===Po)return a===qt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:r.COMPRESSED_RGBA_ASTC_10x8_KHR;if(i===Do)return a===qt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:r.COMPRESSED_RGBA_ASTC_10x10_KHR;if(i===Lo)return a===qt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:r.COMPRESSED_RGBA_ASTC_12x10_KHR;if(i===No)return a===qt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:r.COMPRESSED_RGBA_ASTC_12x12_KHR}else return null;if(i===Br||i===Oo||i===Fo)if(r=t.get("EXT_texture_compression_bptc"),r!==null){if(i===Br)return a===qt?r.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:r.COMPRESSED_RGBA_BPTC_UNORM_EXT;if(i===Oo)return r.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT;if(i===Fo)return r.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT}else return null;if(i===Vh||i===Bo||i===Uo||i===zo)if(r=t.get("EXT_texture_compression_rgtc"),r!==null){if(i===Br)return r.COMPRESSED_RED_RGTC1_EXT;if(i===Bo)return r.COMPRESSED_SIGNED_RED_RGTC1_EXT;if(i===Uo)return r.COMPRESSED_RED_GREEN_RGTC2_EXT;if(i===zo)return r.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT}else return null;return i===Js?s.UNSIGNED_INT_24_8:s[i]!==void 0?s[i]:null}return{convert:e}}class hc extends we{constructor(t=null){super(),this.sourceTexture=t,this.isExternalTexture=!0}}const zC=`
|
|
3931
|
+
}`;function xI(r,t,e){let i=new oA;const n=new Zt,s=new Zt,a=new he,o=new xf({depthPacking:Ld}),l=new Ef,A={},h=e.maxTextureSize,c={[Ki]:Fe,[Fe]:Ki,[Li]:Li},u=new An({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new Zt},radius:{value:4}},vertexShader:CI,fragmentShader:vI}),d=u.clone();d.defines.HORIZONTAL_PASS=1;const p=new wn;p.setAttribute("position",new xi(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const m=new fi(p,u),g=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=Ml;let f=this.type;this.render=function(T,R,P){if(g.enabled===!1||g.autoUpdate===!1&&g.needsUpdate===!1||T.length===0)return;const E=r.getRenderTarget(),x=r.getActiveCubeFace(),b=r.getActiveMipmapLevel(),z=r.state;z.setBlending($i),z.buffers.depth.getReversed()?z.buffers.color.setClear(0,0,0,0):z.buffers.color.setClear(1,1,1,1),z.buffers.depth.setTest(!0),z.setScissorTest(!1);const F=f!==Di&&this.type===Di,U=f===Di&&this.type!==Di;for(let W=0,Y=T.length;W<Y;W++){const $=T[W],H=$.shadow;if(H===void 0){console.warn("THREE.WebGLShadowMap:",$,"has no shadow.");continue}if(H.autoUpdate===!1&&H.needsUpdate===!1)continue;n.copy(H.mapSize);const rt=H.getFrameExtents();if(n.multiply(rt),s.copy(H.mapSize),(n.x>h||n.y>h)&&(n.x>h&&(s.x=Math.floor(h/rt.x),n.x=s.x*rt.x,H.mapSize.x=s.x),n.y>h&&(s.y=Math.floor(h/rt.y),n.y=s.y*rt.y,H.mapSize.y=s.y)),H.map===null||F===!0||U===!0){const mt=this.type!==Di?{minFilter:Ai,magFilter:Ai}:{};H.map!==null&&H.map.dispose(),H.map=new Mn(n.x,n.y,mt),H.map.texture.name=$.name+".shadowMap",H.camera.updateProjectionMatrix()}r.setRenderTarget(H.map),r.clear();const lt=H.getViewportCount();for(let mt=0;mt<lt;mt++){const Ot=H.getViewport(mt);a.set(s.x*Ot.x,s.y*Ot.y,s.x*Ot.z,s.y*Ot.w),z.viewport(a),H.updateMatrices($,mt),i=H.getFrustum(),v(R,P,H.camera,$,this.type)}H.isPointLightShadow!==!0&&this.type===Di&&y(H,P),H.needsUpdate=!1}f=this.type,g.needsUpdate=!1,r.setRenderTarget(E,x,b)};function y(T,R){const P=t.update(m);u.defines.VSM_SAMPLES!==T.blurSamples&&(u.defines.VSM_SAMPLES=T.blurSamples,d.defines.VSM_SAMPLES=T.blurSamples,u.needsUpdate=!0,d.needsUpdate=!0),T.mapPass===null&&(T.mapPass=new Mn(n.x,n.y)),u.uniforms.shadow_pass.value=T.map.texture,u.uniforms.resolution.value=T.mapSize,u.uniforms.radius.value=T.radius,r.setRenderTarget(T.mapPass),r.clear(),r.renderBufferDirect(R,null,P,u,m,null),d.uniforms.shadow_pass.value=T.mapPass.texture,d.uniforms.resolution.value=T.mapSize,d.uniforms.radius.value=T.radius,r.setRenderTarget(T.map),r.clear(),r.renderBufferDirect(R,null,P,d,m,null)}function S(T,R,P,E){let x=null;const b=P.isPointLight===!0?T.customDistanceMaterial:T.customDepthMaterial;if(b!==void 0)x=b;else if(x=P.isPointLight===!0?l:o,r.localClippingEnabled&&R.clipShadows===!0&&Array.isArray(R.clippingPlanes)&&R.clippingPlanes.length!==0||R.displacementMap&&R.displacementScale!==0||R.alphaMap&&R.alphaTest>0||R.map&&R.alphaTest>0||R.alphaToCoverage===!0){const z=x.uuid,F=R.uuid;let U=A[z];U===void 0&&(U={},A[z]=U);let W=U[F];W===void 0&&(W=x.clone(),U[F]=W,R.addEventListener("dispose",w)),x=W}if(x.visible=R.visible,x.wireframe=R.wireframe,E===Di?x.side=R.shadowSide!==null?R.shadowSide:R.side:x.side=R.shadowSide!==null?R.shadowSide:c[R.side],x.alphaMap=R.alphaMap,x.alphaTest=R.alphaToCoverage===!0?.5:R.alphaTest,x.map=R.map,x.clipShadows=R.clipShadows,x.clippingPlanes=R.clippingPlanes,x.clipIntersection=R.clipIntersection,x.displacementMap=R.displacementMap,x.displacementScale=R.displacementScale,x.displacementBias=R.displacementBias,x.wireframeLinewidth=R.wireframeLinewidth,x.linewidth=R.linewidth,P.isPointLight===!0&&x.isMeshDistanceMaterial===!0){const z=r.properties.get(x);z.light=P}return x}function v(T,R,P,E,x){if(T.visible===!1)return;if(T.layers.test(R.layers)&&(T.isMesh||T.isLine||T.isPoints)&&(T.castShadow||T.receiveShadow&&x===Di)&&(!T.frustumCulled||i.intersectsObject(T))){T.modelViewMatrix.multiplyMatrices(P.matrixWorldInverse,T.matrixWorld);const F=t.update(T),U=T.material;if(Array.isArray(U)){const W=F.groups;for(let Y=0,$=W.length;Y<$;Y++){const H=W[Y],rt=U[H.materialIndex];if(rt&&rt.visible){const lt=S(T,rt,E,x);T.onBeforeShadow(r,T,R,P,F,lt,H),r.renderBufferDirect(P,null,F,lt,T,H),T.onAfterShadow(r,T,R,P,F,lt,H)}}}else if(U.visible){const W=S(T,U,E,x);T.onBeforeShadow(r,T,R,P,F,W,null),r.renderBufferDirect(P,null,F,W,T,null),T.onAfterShadow(r,T,R,P,F,W,null)}}const z=T.children;for(let F=0,U=z.length;F<U;F++)v(z[F],R,P,E,x)}function w(T){T.target.removeEventListener("dispose",w);for(const P in A){const E=A[P],x=T.target.uuid;x in E&&(E[x].dispose(),delete E[x])}}}const EI={[Ha]:Va,[Wa]:Za,[Ya]:Ja,[ts]:Xa,[Va]:Ha,[Za]:Wa,[Ja]:Ya,[Xa]:ts};function SI(r,t){function e(){let D=!1;const et=new he;let st=null;const dt=new he(0,0,0,0);return{setMask:function(q){st!==q&&!D&&(r.colorMask(q,q,q,q),st=q)},setLocked:function(q){D=q},setClear:function(q,j,pt,Lt,ie){ie===!0&&(q*=Lt,j*=Lt,pt*=Lt),et.set(q,j,pt,Lt),dt.equals(et)===!1&&(r.clearColor(q,j,pt,Lt),dt.copy(et))},reset:function(){D=!1,st=null,dt.set(-1,0,0,0)}}}function i(){let D=!1,et=!1,st=null,dt=null,q=null;return{setReversed:function(j){if(et!==j){const pt=t.get("EXT_clip_control");j?pt.clipControlEXT(pt.LOWER_LEFT_EXT,pt.ZERO_TO_ONE_EXT):pt.clipControlEXT(pt.LOWER_LEFT_EXT,pt.NEGATIVE_ONE_TO_ONE_EXT),et=j;const Lt=q;q=null,this.setClear(Lt)}},getReversed:function(){return et},setTest:function(j){j?nt(r.DEPTH_TEST):bt(r.DEPTH_TEST)},setMask:function(j){st!==j&&!D&&(r.depthMask(j),st=j)},setFunc:function(j){if(et&&(j=EI[j]),dt!==j){switch(j){case Ha:r.depthFunc(r.NEVER);break;case Va:r.depthFunc(r.ALWAYS);break;case Wa:r.depthFunc(r.LESS);break;case ts:r.depthFunc(r.LEQUAL);break;case Ya:r.depthFunc(r.EQUAL);break;case Xa:r.depthFunc(r.GEQUAL);break;case Za:r.depthFunc(r.GREATER);break;case Ja:r.depthFunc(r.NOTEQUAL);break;default:r.depthFunc(r.LEQUAL)}dt=j}},setLocked:function(j){D=j},setClear:function(j){q!==j&&(et&&(j=1-j),r.clearDepth(j),q=j)},reset:function(){D=!1,st=null,dt=null,q=null,et=!1}}}function n(){let D=!1,et=null,st=null,dt=null,q=null,j=null,pt=null,Lt=null,ie=null;return{setTest:function(Qt){D||(Qt?nt(r.STENCIL_TEST):bt(r.STENCIL_TEST))},setMask:function(Qt){et!==Qt&&!D&&(r.stencilMask(Qt),et=Qt)},setFunc:function(Qt,ki,Si){(st!==Qt||dt!==ki||q!==Si)&&(r.stencilFunc(Qt,ki,Si),st=Qt,dt=ki,q=Si)},setOp:function(Qt,ki,Si){(j!==Qt||pt!==ki||Lt!==Si)&&(r.stencilOp(Qt,ki,Si),j=Qt,pt=ki,Lt=Si)},setLocked:function(Qt){D=Qt},setClear:function(Qt){ie!==Qt&&(r.clearStencil(Qt),ie=Qt)},reset:function(){D=!1,et=null,st=null,dt=null,q=null,j=null,pt=null,Lt=null,ie=null}}}const s=new e,a=new i,o=new n,l=new WeakMap,A=new WeakMap;let h={},c={},u=new WeakMap,d=[],p=null,m=!1,g=null,f=null,y=null,S=null,v=null,w=null,T=null,R=new Vt(0,0,0),P=0,E=!1,x=null,b=null,z=null,F=null,U=null;const W=r.getParameter(r.MAX_COMBINED_TEXTURE_IMAGE_UNITS);let Y=!1,$=0;const H=r.getParameter(r.VERSION);H.indexOf("WebGL")!==-1?($=parseFloat(/^WebGL (\d)/.exec(H)[1]),Y=$>=1):H.indexOf("OpenGL ES")!==-1&&($=parseFloat(/^OpenGL ES (\d)/.exec(H)[1]),Y=$>=2);let rt=null,lt={};const mt=r.getParameter(r.SCISSOR_BOX),Ot=r.getParameter(r.VIEWPORT),se=new he().fromArray(mt),$t=new he().fromArray(Ot);function J(D,et,st,dt){const q=new Uint8Array(4),j=r.createTexture();r.bindTexture(D,j),r.texParameteri(D,r.TEXTURE_MIN_FILTER,r.NEAREST),r.texParameteri(D,r.TEXTURE_MAG_FILTER,r.NEAREST);for(let pt=0;pt<st;pt++)D===r.TEXTURE_3D||D===r.TEXTURE_2D_ARRAY?r.texImage3D(et,0,r.RGBA,1,1,dt,0,r.RGBA,r.UNSIGNED_BYTE,q):r.texImage2D(et+pt,0,r.RGBA,1,1,0,r.RGBA,r.UNSIGNED_BYTE,q);return j}const ot={};ot[r.TEXTURE_2D]=J(r.TEXTURE_2D,r.TEXTURE_2D,1),ot[r.TEXTURE_CUBE_MAP]=J(r.TEXTURE_CUBE_MAP,r.TEXTURE_CUBE_MAP_POSITIVE_X,6),ot[r.TEXTURE_2D_ARRAY]=J(r.TEXTURE_2D_ARRAY,r.TEXTURE_2D_ARRAY,1,1),ot[r.TEXTURE_3D]=J(r.TEXTURE_3D,r.TEXTURE_3D,1,1),s.setClear(0,0,0,1),a.setClear(1),o.setClear(0),nt(r.DEPTH_TEST),a.setFunc(ts),Jt(!1),Et(Sl),nt(r.CULL_FACE),ee($i);function nt(D){h[D]!==!0&&(r.enable(D),h[D]=!0)}function bt(D){h[D]!==!1&&(r.disable(D),h[D]=!1)}function Tt(D,et){return c[D]!==et?(r.bindFramebuffer(D,et),c[D]=et,D===r.DRAW_FRAMEBUFFER&&(c[r.FRAMEBUFFER]=et),D===r.FRAMEBUFFER&&(c[r.DRAW_FRAMEBUFFER]=et),!0):!1}function Dt(D,et){let st=d,dt=!1;if(D){st=u.get(et),st===void 0&&(st=[],u.set(et,st));const q=D.textures;if(st.length!==q.length||st[0]!==r.COLOR_ATTACHMENT0){for(let j=0,pt=q.length;j<pt;j++)st[j]=r.COLOR_ATTACHMENT0+j;st.length=q.length,dt=!0}}else st[0]!==r.BACK&&(st[0]=r.BACK,dt=!0);dt&&r.drawBuffers(st)}function de(D){return p!==D?(r.useProgram(D),p=D,!0):!1}const Wt={[vn]:r.FUNC_ADD,[rd]:r.FUNC_SUBTRACT,[ad]:r.FUNC_REVERSE_SUBTRACT};Wt[od]=r.MIN,Wt[Ad]=r.MAX;const _={[ld]:r.ZERO,[hd]:r.ONE,[cd]:r.SRC_COLOR,[Ga]:r.SRC_ALPHA,[md]:r.SRC_ALPHA_SATURATE,[gd]:r.DST_COLOR,[dd]:r.DST_ALPHA,[ud]:r.ONE_MINUS_SRC_COLOR,[ka]:r.ONE_MINUS_SRC_ALPHA,[pd]:r.ONE_MINUS_DST_COLOR,[fd]:r.ONE_MINUS_DST_ALPHA,[Id]:r.CONSTANT_COLOR,[Cd]:r.ONE_MINUS_CONSTANT_COLOR,[vd]:r.CONSTANT_ALPHA,[xd]:r.ONE_MINUS_CONSTANT_ALPHA};function ee(D,et,st,dt,q,j,pt,Lt,ie,Qt){if(D===$i){m===!0&&(bt(r.BLEND),m=!1);return}if(m===!1&&(nt(r.BLEND),m=!0),D!==sd){if(D!==g||Qt!==E){if((f!==vn||v!==vn)&&(r.blendEquation(r.FUNC_ADD),f=vn,v=vn),Qt)switch(D){case $n:r.blendFuncSeparate(r.ONE,r.ONE_MINUS_SRC_ALPHA,r.ONE,r.ONE_MINUS_SRC_ALPHA);break;case yl:r.blendFunc(r.ONE,r.ONE);break;case bl:r.blendFuncSeparate(r.ZERO,r.ONE_MINUS_SRC_COLOR,r.ZERO,r.ONE);break;case Tl:r.blendFuncSeparate(r.DST_COLOR,r.ONE_MINUS_SRC_ALPHA,r.ZERO,r.ONE);break;default:console.error("THREE.WebGLState: Invalid blending: ",D);break}else switch(D){case $n:r.blendFuncSeparate(r.SRC_ALPHA,r.ONE_MINUS_SRC_ALPHA,r.ONE,r.ONE_MINUS_SRC_ALPHA);break;case yl:r.blendFuncSeparate(r.SRC_ALPHA,r.ONE,r.ONE,r.ONE);break;case bl:console.error("THREE.WebGLState: SubtractiveBlending requires material.premultipliedAlpha = true");break;case Tl:console.error("THREE.WebGLState: MultiplyBlending requires material.premultipliedAlpha = true");break;default:console.error("THREE.WebGLState: Invalid blending: ",D);break}y=null,S=null,w=null,T=null,R.set(0,0,0),P=0,g=D,E=Qt}return}q=q||et,j=j||st,pt=pt||dt,(et!==f||q!==v)&&(r.blendEquationSeparate(Wt[et],Wt[q]),f=et,v=q),(st!==y||dt!==S||j!==w||pt!==T)&&(r.blendFuncSeparate(_[st],_[dt],_[j],_[pt]),y=st,S=dt,w=j,T=pt),(Lt.equals(R)===!1||ie!==P)&&(r.blendColor(Lt.r,Lt.g,Lt.b,ie),R.copy(Lt),P=ie),g=D,E=!1}function Mt(D,et){D.side===Li?bt(r.CULL_FACE):nt(r.CULL_FACE);let st=D.side===Fe;et&&(st=!st),Jt(st),D.blending===$n&&D.transparent===!1?ee($i):ee(D.blending,D.blendEquation,D.blendSrc,D.blendDst,D.blendEquationAlpha,D.blendSrcAlpha,D.blendDstAlpha,D.blendColor,D.blendAlpha,D.premultipliedAlpha),a.setFunc(D.depthFunc),a.setTest(D.depthTest),a.setMask(D.depthWrite),s.setMask(D.colorWrite);const dt=D.stencilWrite;o.setTest(dt),dt&&(o.setMask(D.stencilWriteMask),o.setFunc(D.stencilFunc,D.stencilRef,D.stencilFuncMask),o.setOp(D.stencilFail,D.stencilZFail,D.stencilZPass)),ft(D.polygonOffset,D.polygonOffsetFactor,D.polygonOffsetUnits),D.alphaToCoverage===!0?nt(r.SAMPLE_ALPHA_TO_COVERAGE):bt(r.SAMPLE_ALPHA_TO_COVERAGE)}function Jt(D){x!==D&&(D?r.frontFace(r.CW):r.frontFace(r.CCW),x=D)}function Et(D){D!==ed?(nt(r.CULL_FACE),D!==b&&(D===Sl?r.cullFace(r.BACK):D===id?r.cullFace(r.FRONT):r.cullFace(r.FRONT_AND_BACK))):bt(r.CULL_FACE),b=D}function re(D){D!==z&&(Y&&r.lineWidth(D),z=D)}function ft(D,et,st){D?(nt(r.POLYGON_OFFSET_FILL),(F!==et||U!==st)&&(r.polygonOffset(et,st),F=et,U=st)):bt(r.POLYGON_OFFSET_FILL)}function Ut(D){D?nt(r.SCISSOR_TEST):bt(r.SCISSOR_TEST)}function Ee(D){D===void 0&&(D=r.TEXTURE0+W-1),rt!==D&&(r.activeTexture(D),rt=D)}function fe(D,et,st){st===void 0&&(rt===null?st=r.TEXTURE0+W-1:st=rt);let dt=lt[st];dt===void 0&&(dt={type:void 0,texture:void 0},lt[st]=dt),(dt.type!==D||dt.texture!==et)&&(rt!==st&&(r.activeTexture(st),rt=st),r.bindTexture(D,et||ot[D]),dt.type=D,dt.texture=et)}function M(){const D=lt[rt];D!==void 0&&D.type!==void 0&&(r.bindTexture(D.type,null),D.type=void 0,D.texture=void 0)}function I(){try{r.compressedTexImage2D(...arguments)}catch(D){console.error("THREE.WebGLState:",D)}}function O(){try{r.compressedTexImage3D(...arguments)}catch(D){console.error("THREE.WebGLState:",D)}}function Z(){try{r.texSubImage2D(...arguments)}catch(D){console.error("THREE.WebGLState:",D)}}function Q(){try{r.texSubImage3D(...arguments)}catch(D){console.error("THREE.WebGLState:",D)}}function X(){try{r.compressedTexSubImage2D(...arguments)}catch(D){console.error("THREE.WebGLState:",D)}}function xt(){try{r.compressedTexSubImage3D(...arguments)}catch(D){console.error("THREE.WebGLState:",D)}}function it(){try{r.texStorage2D(...arguments)}catch(D){console.error("THREE.WebGLState:",D)}}function It(){try{r.texStorage3D(...arguments)}catch(D){console.error("THREE.WebGLState:",D)}}function Ct(){try{r.texImage2D(...arguments)}catch(D){console.error("THREE.WebGLState:",D)}}function tt(){try{r.texImage3D(...arguments)}catch(D){console.error("THREE.WebGLState:",D)}}function ct(D){se.equals(D)===!1&&(r.scissor(D.x,D.y,D.z,D.w),se.copy(D))}function Rt(D){$t.equals(D)===!1&&(r.viewport(D.x,D.y,D.z,D.w),$t.copy(D))}function vt(D,et){let st=A.get(et);st===void 0&&(st=new WeakMap,A.set(et,st));let dt=st.get(D);dt===void 0&&(dt=r.getUniformBlockIndex(et,D.name),st.set(D,dt))}function At(D,et){const dt=A.get(et).get(D);l.get(et)!==dt&&(r.uniformBlockBinding(et,dt,D.__bindingPointIndex),l.set(et,dt))}function Bt(){r.disable(r.BLEND),r.disable(r.CULL_FACE),r.disable(r.DEPTH_TEST),r.disable(r.POLYGON_OFFSET_FILL),r.disable(r.SCISSOR_TEST),r.disable(r.STENCIL_TEST),r.disable(r.SAMPLE_ALPHA_TO_COVERAGE),r.blendEquation(r.FUNC_ADD),r.blendFunc(r.ONE,r.ZERO),r.blendFuncSeparate(r.ONE,r.ZERO,r.ONE,r.ZERO),r.blendColor(0,0,0,0),r.colorMask(!0,!0,!0,!0),r.clearColor(0,0,0,0),r.depthMask(!0),r.depthFunc(r.LESS),a.setReversed(!1),r.clearDepth(1),r.stencilMask(4294967295),r.stencilFunc(r.ALWAYS,0,4294967295),r.stencilOp(r.KEEP,r.KEEP,r.KEEP),r.clearStencil(0),r.cullFace(r.BACK),r.frontFace(r.CCW),r.polygonOffset(0,0),r.activeTexture(r.TEXTURE0),r.bindFramebuffer(r.FRAMEBUFFER,null),r.bindFramebuffer(r.DRAW_FRAMEBUFFER,null),r.bindFramebuffer(r.READ_FRAMEBUFFER,null),r.useProgram(null),r.lineWidth(1),r.scissor(0,0,r.canvas.width,r.canvas.height),r.viewport(0,0,r.canvas.width,r.canvas.height),h={},rt=null,lt={},c={},u=new WeakMap,d=[],p=null,m=!1,g=null,f=null,y=null,S=null,v=null,w=null,T=null,R=new Vt(0,0,0),P=0,E=!1,x=null,b=null,z=null,F=null,U=null,se.set(0,0,r.canvas.width,r.canvas.height),$t.set(0,0,r.canvas.width,r.canvas.height),s.reset(),a.reset(),o.reset()}return{buffers:{color:s,depth:a,stencil:o},enable:nt,disable:bt,bindFramebuffer:Tt,drawBuffers:Dt,useProgram:de,setBlending:ee,setMaterial:Mt,setFlipSided:Jt,setCullFace:Et,setLineWidth:re,setPolygonOffset:ft,setScissorTest:Ut,activeTexture:Ee,bindTexture:fe,unbindTexture:M,compressedTexImage2D:I,compressedTexImage3D:O,texImage2D:Ct,texImage3D:tt,updateUBOMapping:vt,uniformBlockBinding:At,texStorage2D:it,texStorage3D:It,texSubImage2D:Z,texSubImage3D:Q,compressedTexSubImage2D:X,compressedTexSubImage3D:xt,scissor:ct,viewport:Rt,reset:Bt}}function MI(r,t,e,i,n,s,a){const o=t.has("WEBGL_multisampled_render_to_texture")?t.get("WEBGL_multisampled_render_to_texture"):null,l=typeof navigator>"u"?!1:/OculusBrowser/g.test(navigator.userAgent),A=new Zt,h=new WeakMap;let c;const u=new WeakMap;let d=!1;try{d=typeof OffscreenCanvas<"u"&&new OffscreenCanvas(1,1).getContext("2d")!==null}catch{}function p(M,I){return d?new OffscreenCanvas(M,I):js("canvas")}function m(M,I,O){let Z=1;const Q=fe(M);if((Q.width>O||Q.height>O)&&(Z=O/Math.max(Q.width,Q.height)),Z<1)if(typeof HTMLImageElement<"u"&&M instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&M instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&M instanceof ImageBitmap||typeof VideoFrame<"u"&&M instanceof VideoFrame){const X=Math.floor(Z*Q.width),xt=Math.floor(Z*Q.height);c===void 0&&(c=p(X,xt));const it=I?p(X,xt):c;return it.width=X,it.height=xt,it.getContext("2d").drawImage(M,0,0,X,xt),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+Q.width+"x"+Q.height+") to ("+X+"x"+xt+")."),it}else return"data"in M&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+Q.width+"x"+Q.height+")."),M;return M}function g(M){return M.generateMipmaps}function f(M){r.generateMipmap(M)}function y(M){return M.isWebGLCubeRenderTarget?r.TEXTURE_CUBE_MAP:M.isWebGL3DRenderTarget?r.TEXTURE_3D:M.isWebGLArrayRenderTarget||M.isCompressedArrayTexture?r.TEXTURE_2D_ARRAY:r.TEXTURE_2D}function S(M,I,O,Z,Q=!1){if(M!==null){if(r[M]!==void 0)return r[M];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+M+"'")}let X=I;if(I===r.RED&&(O===r.FLOAT&&(X=r.R32F),O===r.HALF_FLOAT&&(X=r.R16F),O===r.UNSIGNED_BYTE&&(X=r.R8)),I===r.RED_INTEGER&&(O===r.UNSIGNED_BYTE&&(X=r.R8UI),O===r.UNSIGNED_SHORT&&(X=r.R16UI),O===r.UNSIGNED_INT&&(X=r.R32UI),O===r.BYTE&&(X=r.R8I),O===r.SHORT&&(X=r.R16I),O===r.INT&&(X=r.R32I)),I===r.RG&&(O===r.FLOAT&&(X=r.RG32F),O===r.HALF_FLOAT&&(X=r.RG16F),O===r.UNSIGNED_BYTE&&(X=r.RG8)),I===r.RG_INTEGER&&(O===r.UNSIGNED_BYTE&&(X=r.RG8UI),O===r.UNSIGNED_SHORT&&(X=r.RG16UI),O===r.UNSIGNED_INT&&(X=r.RG32UI),O===r.BYTE&&(X=r.RG8I),O===r.SHORT&&(X=r.RG16I),O===r.INT&&(X=r.RG32I)),I===r.RGB_INTEGER&&(O===r.UNSIGNED_BYTE&&(X=r.RGB8UI),O===r.UNSIGNED_SHORT&&(X=r.RGB16UI),O===r.UNSIGNED_INT&&(X=r.RGB32UI),O===r.BYTE&&(X=r.RGB8I),O===r.SHORT&&(X=r.RGB16I),O===r.INT&&(X=r.RGB32I)),I===r.RGBA_INTEGER&&(O===r.UNSIGNED_BYTE&&(X=r.RGBA8UI),O===r.UNSIGNED_SHORT&&(X=r.RGBA16UI),O===r.UNSIGNED_INT&&(X=r.RGBA32UI),O===r.BYTE&&(X=r.RGBA8I),O===r.SHORT&&(X=r.RGBA16I),O===r.INT&&(X=r.RGBA32I)),I===r.RGB&&O===r.UNSIGNED_INT_5_9_9_9_REV&&(X=r.RGB9_E5),I===r.RGBA){const xt=Q?Nr:Yt.getTransfer(Z);O===r.FLOAT&&(X=r.RGBA32F),O===r.HALF_FLOAT&&(X=r.RGBA16F),O===r.UNSIGNED_BYTE&&(X=xt===qt?r.SRGB8_ALPHA8:r.RGBA8),O===r.UNSIGNED_SHORT_4_4_4_4&&(X=r.RGBA4),O===r.UNSIGNED_SHORT_5_5_5_1&&(X=r.RGB5_A1)}return(X===r.R16F||X===r.R32F||X===r.RG16F||X===r.RG32F||X===r.RGBA16F||X===r.RGBA32F)&&t.get("EXT_color_buffer_float"),X}function v(M,I){let O;return M?I===null||I===Sn||I===Vs?O=r.DEPTH24_STENCIL8:I===Ni?O=r.DEPTH32F_STENCIL8:I===ks&&(O=r.DEPTH24_STENCIL8,console.warn("DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.")):I===null||I===Sn||I===Vs?O=r.DEPTH_COMPONENT24:I===Ni?O=r.DEPTH_COMPONENT32F:I===ks&&(O=r.DEPTH_COMPONENT16),O}function w(M,I){return g(M)===!0||M.isFramebufferTexture&&M.minFilter!==Ai&&M.minFilter!==mi?Math.log2(Math.max(I.width,I.height))+1:M.mipmaps!==void 0&&M.mipmaps.length>0?M.mipmaps.length:M.isCompressedTexture&&Array.isArray(M.image)?I.mipmaps.length:1}function T(M){const I=M.target;I.removeEventListener("dispose",T),P(I),I.isVideoTexture&&h.delete(I)}function R(M){const I=M.target;I.removeEventListener("dispose",R),x(I)}function P(M){const I=i.get(M);if(I.__webglInit===void 0)return;const O=M.source,Z=u.get(O);if(Z){const Q=Z[I.__cacheKey];Q.usedTimes--,Q.usedTimes===0&&E(M),Object.keys(Z).length===0&&u.delete(O)}i.remove(M)}function E(M){const I=i.get(M);r.deleteTexture(I.__webglTexture);const O=M.source,Z=u.get(O);delete Z[I.__cacheKey],a.memory.textures--}function x(M){const I=i.get(M);if(M.depthTexture&&(M.depthTexture.dispose(),i.remove(M.depthTexture)),M.isWebGLCubeRenderTarget)for(let Z=0;Z<6;Z++){if(Array.isArray(I.__webglFramebuffer[Z]))for(let Q=0;Q<I.__webglFramebuffer[Z].length;Q++)r.deleteFramebuffer(I.__webglFramebuffer[Z][Q]);else r.deleteFramebuffer(I.__webglFramebuffer[Z]);I.__webglDepthbuffer&&r.deleteRenderbuffer(I.__webglDepthbuffer[Z])}else{if(Array.isArray(I.__webglFramebuffer))for(let Z=0;Z<I.__webglFramebuffer.length;Z++)r.deleteFramebuffer(I.__webglFramebuffer[Z]);else r.deleteFramebuffer(I.__webglFramebuffer);if(I.__webglDepthbuffer&&r.deleteRenderbuffer(I.__webglDepthbuffer),I.__webglMultisampledFramebuffer&&r.deleteFramebuffer(I.__webglMultisampledFramebuffer),I.__webglColorRenderbuffer)for(let Z=0;Z<I.__webglColorRenderbuffer.length;Z++)I.__webglColorRenderbuffer[Z]&&r.deleteRenderbuffer(I.__webglColorRenderbuffer[Z]);I.__webglDepthRenderbuffer&&r.deleteRenderbuffer(I.__webglDepthRenderbuffer)}const O=M.textures;for(let Z=0,Q=O.length;Z<Q;Z++){const X=i.get(O[Z]);X.__webglTexture&&(r.deleteTexture(X.__webglTexture),a.memory.textures--),i.remove(O[Z])}i.remove(M)}let b=0;function z(){b=0}function F(){const M=b;return M>=n.maxTextures&&console.warn("THREE.WebGLTextures: Trying to use "+M+" texture units while this GPU supports only "+n.maxTextures),b+=1,M}function U(M){const I=[];return I.push(M.wrapS),I.push(M.wrapT),I.push(M.wrapR||0),I.push(M.magFilter),I.push(M.minFilter),I.push(M.anisotropy),I.push(M.internalFormat),I.push(M.format),I.push(M.type),I.push(M.generateMipmaps),I.push(M.premultiplyAlpha),I.push(M.flipY),I.push(M.unpackAlignment),I.push(M.colorSpace),I.join()}function W(M,I){const O=i.get(M);if(M.isVideoTexture&&Ut(M),M.isRenderTargetTexture===!1&&M.isExternalTexture!==!0&&M.version>0&&O.__version!==M.version){const Z=M.image;if(Z===null)console.warn("THREE.WebGLRenderer: Texture marked for update but no image data found.");else if(Z.complete===!1)console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete");else{ot(O,M,I);return}}else M.isExternalTexture&&(O.__webglTexture=M.sourceTexture?M.sourceTexture:null);e.bindTexture(r.TEXTURE_2D,O.__webglTexture,r.TEXTURE0+I)}function Y(M,I){const O=i.get(M);if(M.isRenderTargetTexture===!1&&M.version>0&&O.__version!==M.version){ot(O,M,I);return}e.bindTexture(r.TEXTURE_2D_ARRAY,O.__webglTexture,r.TEXTURE0+I)}function $(M,I){const O=i.get(M);if(M.isRenderTargetTexture===!1&&M.version>0&&O.__version!==M.version){ot(O,M,I);return}e.bindTexture(r.TEXTURE_3D,O.__webglTexture,r.TEXTURE0+I)}function H(M,I){const O=i.get(M);if(M.version>0&&O.__version!==M.version){nt(O,M,I);return}e.bindTexture(r.TEXTURE_CUBE_MAP,O.__webglTexture,r.TEXTURE0+I)}const rt={[qa]:r.REPEAT,[xn]:r.CLAMP_TO_EDGE,[Ka]:r.MIRRORED_REPEAT},lt={[Ai]:r.NEAREST,[Pd]:r.NEAREST_MIPMAP_NEAREST,[wr]:r.NEAREST_MIPMAP_LINEAR,[mi]:r.LINEAR,[$a]:r.LINEAR_MIPMAP_NEAREST,[En]:r.LINEAR_MIPMAP_LINEAR},mt={[Bd]:r.NEVER,[kd]:r.ALWAYS,[Fd]:r.LESS,[Gl]:r.LEQUAL,[Od]:r.EQUAL,[Gd]:r.GEQUAL,[Ud]:r.GREATER,[zd]:r.NOTEQUAL};function Ot(M,I){if(I.type===Ni&&t.has("OES_texture_float_linear")===!1&&(I.magFilter===mi||I.magFilter===$a||I.magFilter===wr||I.magFilter===En||I.minFilter===mi||I.minFilter===$a||I.minFilter===wr||I.minFilter===En)&&console.warn("THREE.WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device."),r.texParameteri(M,r.TEXTURE_WRAP_S,rt[I.wrapS]),r.texParameteri(M,r.TEXTURE_WRAP_T,rt[I.wrapT]),(M===r.TEXTURE_3D||M===r.TEXTURE_2D_ARRAY)&&r.texParameteri(M,r.TEXTURE_WRAP_R,rt[I.wrapR]),r.texParameteri(M,r.TEXTURE_MAG_FILTER,lt[I.magFilter]),r.texParameteri(M,r.TEXTURE_MIN_FILTER,lt[I.minFilter]),I.compareFunction&&(r.texParameteri(M,r.TEXTURE_COMPARE_MODE,r.COMPARE_REF_TO_TEXTURE),r.texParameteri(M,r.TEXTURE_COMPARE_FUNC,mt[I.compareFunction])),t.has("EXT_texture_filter_anisotropic")===!0){if(I.magFilter===Ai||I.minFilter!==wr&&I.minFilter!==En||I.type===Ni&&t.has("OES_texture_float_linear")===!1)return;if(I.anisotropy>1||i.get(I).__currentAnisotropy){const O=t.get("EXT_texture_filter_anisotropic");r.texParameterf(M,O.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(I.anisotropy,n.getMaxAnisotropy())),i.get(I).__currentAnisotropy=I.anisotropy}}}function se(M,I){let O=!1;M.__webglInit===void 0&&(M.__webglInit=!0,I.addEventListener("dispose",T));const Z=I.source;let Q=u.get(Z);Q===void 0&&(Q={},u.set(Z,Q));const X=U(I);if(X!==M.__cacheKey){Q[X]===void 0&&(Q[X]={texture:r.createTexture(),usedTimes:0},a.memory.textures++,O=!0),Q[X].usedTimes++;const xt=Q[M.__cacheKey];xt!==void 0&&(Q[M.__cacheKey].usedTimes--,xt.usedTimes===0&&E(I)),M.__cacheKey=X,M.__webglTexture=Q[X].texture}return O}function $t(M,I,O){return Math.floor(Math.floor(M/O)/I)}function J(M,I,O,Z){const X=M.updateRanges;if(X.length===0)e.texSubImage2D(r.TEXTURE_2D,0,0,0,I.width,I.height,O,Z,I.data);else{X.sort((tt,ct)=>tt.start-ct.start);let xt=0;for(let tt=1;tt<X.length;tt++){const ct=X[xt],Rt=X[tt],vt=ct.start+ct.count,At=$t(Rt.start,I.width,4),Bt=$t(ct.start,I.width,4);Rt.start<=vt+1&&At===Bt&&$t(Rt.start+Rt.count-1,I.width,4)===At?ct.count=Math.max(ct.count,Rt.start+Rt.count-ct.start):(++xt,X[xt]=Rt)}X.length=xt+1;const it=r.getParameter(r.UNPACK_ROW_LENGTH),It=r.getParameter(r.UNPACK_SKIP_PIXELS),Ct=r.getParameter(r.UNPACK_SKIP_ROWS);r.pixelStorei(r.UNPACK_ROW_LENGTH,I.width);for(let tt=0,ct=X.length;tt<ct;tt++){const Rt=X[tt],vt=Math.floor(Rt.start/4),At=Math.ceil(Rt.count/4),Bt=vt%I.width,D=Math.floor(vt/I.width),et=At,st=1;r.pixelStorei(r.UNPACK_SKIP_PIXELS,Bt),r.pixelStorei(r.UNPACK_SKIP_ROWS,D),e.texSubImage2D(r.TEXTURE_2D,0,Bt,D,et,st,O,Z,I.data)}M.clearUpdateRanges(),r.pixelStorei(r.UNPACK_ROW_LENGTH,it),r.pixelStorei(r.UNPACK_SKIP_PIXELS,It),r.pixelStorei(r.UNPACK_SKIP_ROWS,Ct)}}function ot(M,I,O){let Z=r.TEXTURE_2D;(I.isDataArrayTexture||I.isCompressedArrayTexture)&&(Z=r.TEXTURE_2D_ARRAY),I.isData3DTexture&&(Z=r.TEXTURE_3D);const Q=se(M,I),X=I.source;e.bindTexture(Z,M.__webglTexture,r.TEXTURE0+O);const xt=i.get(X);if(X.version!==xt.__version||Q===!0){e.activeTexture(r.TEXTURE0+O);const it=Yt.getPrimaries(Yt.workingColorSpace),It=I.colorSpace===en?null:Yt.getPrimaries(I.colorSpace),Ct=I.colorSpace===en||it===It?r.NONE:r.BROWSER_DEFAULT_WEBGL;r.pixelStorei(r.UNPACK_FLIP_Y_WEBGL,I.flipY),r.pixelStorei(r.UNPACK_PREMULTIPLY_ALPHA_WEBGL,I.premultiplyAlpha),r.pixelStorei(r.UNPACK_ALIGNMENT,I.unpackAlignment),r.pixelStorei(r.UNPACK_COLORSPACE_CONVERSION_WEBGL,Ct);let tt=m(I.image,!1,n.maxTextureSize);tt=Ee(I,tt);const ct=s.convert(I.format,I.colorSpace),Rt=s.convert(I.type);let vt=S(I.internalFormat,ct,Rt,I.colorSpace,I.isVideoTexture);Ot(Z,I);let At;const Bt=I.mipmaps,D=I.isVideoTexture!==!0,et=xt.__version===void 0||Q===!0,st=X.dataReady,dt=w(I,tt);if(I.isDepthTexture)vt=v(I.format===Ys,I.type),et&&(D?e.texStorage2D(r.TEXTURE_2D,1,vt,tt.width,tt.height):e.texImage2D(r.TEXTURE_2D,0,vt,tt.width,tt.height,0,ct,Rt,null));else if(I.isDataTexture)if(Bt.length>0){D&&et&&e.texStorage2D(r.TEXTURE_2D,dt,vt,Bt[0].width,Bt[0].height);for(let q=0,j=Bt.length;q<j;q++)At=Bt[q],D?st&&e.texSubImage2D(r.TEXTURE_2D,q,0,0,At.width,At.height,ct,Rt,At.data):e.texImage2D(r.TEXTURE_2D,q,vt,At.width,At.height,0,ct,Rt,At.data);I.generateMipmaps=!1}else D?(et&&e.texStorage2D(r.TEXTURE_2D,dt,vt,tt.width,tt.height),st&&J(I,tt,ct,Rt)):e.texImage2D(r.TEXTURE_2D,0,vt,tt.width,tt.height,0,ct,Rt,tt.data);else if(I.isCompressedTexture)if(I.isCompressedArrayTexture){D&&et&&e.texStorage3D(r.TEXTURE_2D_ARRAY,dt,vt,Bt[0].width,Bt[0].height,tt.depth);for(let q=0,j=Bt.length;q<j;q++)if(At=Bt[q],I.format!==li)if(ct!==null)if(D){if(st)if(I.layerUpdates.size>0){const pt=yh(At.width,At.height,I.format,I.type);for(const Lt of I.layerUpdates){const ie=At.data.subarray(Lt*pt/At.data.BYTES_PER_ELEMENT,(Lt+1)*pt/At.data.BYTES_PER_ELEMENT);e.compressedTexSubImage3D(r.TEXTURE_2D_ARRAY,q,0,0,Lt,At.width,At.height,1,ct,ie)}I.clearLayerUpdates()}else e.compressedTexSubImage3D(r.TEXTURE_2D_ARRAY,q,0,0,0,At.width,At.height,tt.depth,ct,At.data)}else e.compressedTexImage3D(r.TEXTURE_2D_ARRAY,q,vt,At.width,At.height,tt.depth,0,At.data,0,0);else console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()");else D?st&&e.texSubImage3D(r.TEXTURE_2D_ARRAY,q,0,0,0,At.width,At.height,tt.depth,ct,Rt,At.data):e.texImage3D(r.TEXTURE_2D_ARRAY,q,vt,At.width,At.height,tt.depth,0,ct,Rt,At.data)}else{D&&et&&e.texStorage2D(r.TEXTURE_2D,dt,vt,Bt[0].width,Bt[0].height);for(let q=0,j=Bt.length;q<j;q++)At=Bt[q],I.format!==li?ct!==null?D?st&&e.compressedTexSubImage2D(r.TEXTURE_2D,q,0,0,At.width,At.height,ct,At.data):e.compressedTexImage2D(r.TEXTURE_2D,q,vt,At.width,At.height,0,At.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"):D?st&&e.texSubImage2D(r.TEXTURE_2D,q,0,0,At.width,At.height,ct,Rt,At.data):e.texImage2D(r.TEXTURE_2D,q,vt,At.width,At.height,0,ct,Rt,At.data)}else if(I.isDataArrayTexture)if(D){if(et&&e.texStorage3D(r.TEXTURE_2D_ARRAY,dt,vt,tt.width,tt.height,tt.depth),st)if(I.layerUpdates.size>0){const q=yh(tt.width,tt.height,I.format,I.type);for(const j of I.layerUpdates){const pt=tt.data.subarray(j*q/tt.data.BYTES_PER_ELEMENT,(j+1)*q/tt.data.BYTES_PER_ELEMENT);e.texSubImage3D(r.TEXTURE_2D_ARRAY,0,0,0,j,tt.width,tt.height,1,ct,Rt,pt)}I.clearLayerUpdates()}else e.texSubImage3D(r.TEXTURE_2D_ARRAY,0,0,0,0,tt.width,tt.height,tt.depth,ct,Rt,tt.data)}else e.texImage3D(r.TEXTURE_2D_ARRAY,0,vt,tt.width,tt.height,tt.depth,0,ct,Rt,tt.data);else if(I.isData3DTexture)D?(et&&e.texStorage3D(r.TEXTURE_3D,dt,vt,tt.width,tt.height,tt.depth),st&&e.texSubImage3D(r.TEXTURE_3D,0,0,0,0,tt.width,tt.height,tt.depth,ct,Rt,tt.data)):e.texImage3D(r.TEXTURE_3D,0,vt,tt.width,tt.height,tt.depth,0,ct,Rt,tt.data);else if(I.isFramebufferTexture){if(et)if(D)e.texStorage2D(r.TEXTURE_2D,dt,vt,tt.width,tt.height);else{let q=tt.width,j=tt.height;for(let pt=0;pt<dt;pt++)e.texImage2D(r.TEXTURE_2D,pt,vt,q,j,0,ct,Rt,null),q>>=1,j>>=1}}else if(Bt.length>0){if(D&&et){const q=fe(Bt[0]);e.texStorage2D(r.TEXTURE_2D,dt,vt,q.width,q.height)}for(let q=0,j=Bt.length;q<j;q++)At=Bt[q],D?st&&e.texSubImage2D(r.TEXTURE_2D,q,0,0,ct,Rt,At):e.texImage2D(r.TEXTURE_2D,q,vt,ct,Rt,At);I.generateMipmaps=!1}else if(D){if(et){const q=fe(tt);e.texStorage2D(r.TEXTURE_2D,dt,vt,q.width,q.height)}st&&e.texSubImage2D(r.TEXTURE_2D,0,0,0,ct,Rt,tt)}else e.texImage2D(r.TEXTURE_2D,0,vt,ct,Rt,tt);g(I)&&f(Z),xt.__version=X.version,I.onUpdate&&I.onUpdate(I)}M.__version=I.version}function nt(M,I,O){if(I.image.length!==6)return;const Z=se(M,I),Q=I.source;e.bindTexture(r.TEXTURE_CUBE_MAP,M.__webglTexture,r.TEXTURE0+O);const X=i.get(Q);if(Q.version!==X.__version||Z===!0){e.activeTexture(r.TEXTURE0+O);const xt=Yt.getPrimaries(Yt.workingColorSpace),it=I.colorSpace===en?null:Yt.getPrimaries(I.colorSpace),It=I.colorSpace===en||xt===it?r.NONE:r.BROWSER_DEFAULT_WEBGL;r.pixelStorei(r.UNPACK_FLIP_Y_WEBGL,I.flipY),r.pixelStorei(r.UNPACK_PREMULTIPLY_ALPHA_WEBGL,I.premultiplyAlpha),r.pixelStorei(r.UNPACK_ALIGNMENT,I.unpackAlignment),r.pixelStorei(r.UNPACK_COLORSPACE_CONVERSION_WEBGL,It);const Ct=I.isCompressedTexture||I.image[0].isCompressedTexture,tt=I.image[0]&&I.image[0].isDataTexture,ct=[];for(let j=0;j<6;j++)!Ct&&!tt?ct[j]=m(I.image[j],!0,n.maxCubemapSize):ct[j]=tt?I.image[j].image:I.image[j],ct[j]=Ee(I,ct[j]);const Rt=ct[0],vt=s.convert(I.format,I.colorSpace),At=s.convert(I.type),Bt=S(I.internalFormat,vt,At,I.colorSpace),D=I.isVideoTexture!==!0,et=X.__version===void 0||Z===!0,st=Q.dataReady;let dt=w(I,Rt);Ot(r.TEXTURE_CUBE_MAP,I);let q;if(Ct){D&&et&&e.texStorage2D(r.TEXTURE_CUBE_MAP,dt,Bt,Rt.width,Rt.height);for(let j=0;j<6;j++){q=ct[j].mipmaps;for(let pt=0;pt<q.length;pt++){const Lt=q[pt];I.format!==li?vt!==null?D?st&&e.compressedTexSubImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+j,pt,0,0,Lt.width,Lt.height,vt,Lt.data):e.compressedTexImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+j,pt,Bt,Lt.width,Lt.height,0,Lt.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()"):D?st&&e.texSubImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+j,pt,0,0,Lt.width,Lt.height,vt,At,Lt.data):e.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+j,pt,Bt,Lt.width,Lt.height,0,vt,At,Lt.data)}}}else{if(q=I.mipmaps,D&&et){q.length>0&&dt++;const j=fe(ct[0]);e.texStorage2D(r.TEXTURE_CUBE_MAP,dt,Bt,j.width,j.height)}for(let j=0;j<6;j++)if(tt){D?st&&e.texSubImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+j,0,0,0,ct[j].width,ct[j].height,vt,At,ct[j].data):e.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+j,0,Bt,ct[j].width,ct[j].height,0,vt,At,ct[j].data);for(let pt=0;pt<q.length;pt++){const ie=q[pt].image[j].image;D?st&&e.texSubImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+j,pt+1,0,0,ie.width,ie.height,vt,At,ie.data):e.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+j,pt+1,Bt,ie.width,ie.height,0,vt,At,ie.data)}}else{D?st&&e.texSubImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+j,0,0,0,vt,At,ct[j]):e.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+j,0,Bt,vt,At,ct[j]);for(let pt=0;pt<q.length;pt++){const Lt=q[pt];D?st&&e.texSubImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+j,pt+1,0,0,vt,At,Lt.image[j]):e.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+j,pt+1,Bt,vt,At,Lt.image[j])}}}g(I)&&f(r.TEXTURE_CUBE_MAP),X.__version=Q.version,I.onUpdate&&I.onUpdate(I)}M.__version=I.version}function bt(M,I,O,Z,Q,X){const xt=s.convert(O.format,O.colorSpace),it=s.convert(O.type),It=S(O.internalFormat,xt,it,O.colorSpace),Ct=i.get(I),tt=i.get(O);if(tt.__renderTarget=I,!Ct.__hasExternalTextures){const ct=Math.max(1,I.width>>X),Rt=Math.max(1,I.height>>X);Q===r.TEXTURE_3D||Q===r.TEXTURE_2D_ARRAY?e.texImage3D(Q,X,It,ct,Rt,I.depth,0,xt,it,null):e.texImage2D(Q,X,It,ct,Rt,0,xt,it,null)}e.bindFramebuffer(r.FRAMEBUFFER,M),ft(I)?o.framebufferTexture2DMultisampleEXT(r.FRAMEBUFFER,Z,Q,tt.__webglTexture,0,re(I)):(Q===r.TEXTURE_2D||Q>=r.TEXTURE_CUBE_MAP_POSITIVE_X&&Q<=r.TEXTURE_CUBE_MAP_NEGATIVE_Z)&&r.framebufferTexture2D(r.FRAMEBUFFER,Z,Q,tt.__webglTexture,X),e.bindFramebuffer(r.FRAMEBUFFER,null)}function Tt(M,I,O){if(r.bindRenderbuffer(r.RENDERBUFFER,M),I.depthBuffer){const Z=I.depthTexture,Q=Z&&Z.isDepthTexture?Z.type:null,X=v(I.stencilBuffer,Q),xt=I.stencilBuffer?r.DEPTH_STENCIL_ATTACHMENT:r.DEPTH_ATTACHMENT,it=re(I);ft(I)?o.renderbufferStorageMultisampleEXT(r.RENDERBUFFER,it,X,I.width,I.height):O?r.renderbufferStorageMultisample(r.RENDERBUFFER,it,X,I.width,I.height):r.renderbufferStorage(r.RENDERBUFFER,X,I.width,I.height),r.framebufferRenderbuffer(r.FRAMEBUFFER,xt,r.RENDERBUFFER,M)}else{const Z=I.textures;for(let Q=0;Q<Z.length;Q++){const X=Z[Q],xt=s.convert(X.format,X.colorSpace),it=s.convert(X.type),It=S(X.internalFormat,xt,it,X.colorSpace),Ct=re(I);O&&ft(I)===!1?r.renderbufferStorageMultisample(r.RENDERBUFFER,Ct,It,I.width,I.height):ft(I)?o.renderbufferStorageMultisampleEXT(r.RENDERBUFFER,Ct,It,I.width,I.height):r.renderbufferStorage(r.RENDERBUFFER,It,I.width,I.height)}}r.bindRenderbuffer(r.RENDERBUFFER,null)}function Dt(M,I){if(I&&I.isWebGLCubeRenderTarget)throw new Error("Depth Texture with cube render targets is not supported");if(e.bindFramebuffer(r.FRAMEBUFFER,M),!(I.depthTexture&&I.depthTexture.isDepthTexture))throw new Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");const Z=i.get(I.depthTexture);Z.__renderTarget=I,(!Z.__webglTexture||I.depthTexture.image.width!==I.width||I.depthTexture.image.height!==I.height)&&(I.depthTexture.image.width=I.width,I.depthTexture.image.height=I.height,I.depthTexture.needsUpdate=!0),W(I.depthTexture,0);const Q=Z.__webglTexture,X=re(I);if(I.depthTexture.format===Ws)ft(I)?o.framebufferTexture2DMultisampleEXT(r.FRAMEBUFFER,r.DEPTH_ATTACHMENT,r.TEXTURE_2D,Q,0,X):r.framebufferTexture2D(r.FRAMEBUFFER,r.DEPTH_ATTACHMENT,r.TEXTURE_2D,Q,0);else if(I.depthTexture.format===Ys)ft(I)?o.framebufferTexture2DMultisampleEXT(r.FRAMEBUFFER,r.DEPTH_STENCIL_ATTACHMENT,r.TEXTURE_2D,Q,0,X):r.framebufferTexture2D(r.FRAMEBUFFER,r.DEPTH_STENCIL_ATTACHMENT,r.TEXTURE_2D,Q,0);else throw new Error("Unknown depthTexture format")}function de(M){const I=i.get(M),O=M.isWebGLCubeRenderTarget===!0;if(I.__boundDepthTexture!==M.depthTexture){const Z=M.depthTexture;if(I.__depthDisposeCallback&&I.__depthDisposeCallback(),Z){const Q=()=>{delete I.__boundDepthTexture,delete I.__depthDisposeCallback,Z.removeEventListener("dispose",Q)};Z.addEventListener("dispose",Q),I.__depthDisposeCallback=Q}I.__boundDepthTexture=Z}if(M.depthTexture&&!I.__autoAllocateDepthBuffer){if(O)throw new Error("target.depthTexture not supported in Cube render targets");const Z=M.texture.mipmaps;Z&&Z.length>0?Dt(I.__webglFramebuffer[0],M):Dt(I.__webglFramebuffer,M)}else if(O){I.__webglDepthbuffer=[];for(let Z=0;Z<6;Z++)if(e.bindFramebuffer(r.FRAMEBUFFER,I.__webglFramebuffer[Z]),I.__webglDepthbuffer[Z]===void 0)I.__webglDepthbuffer[Z]=r.createRenderbuffer(),Tt(I.__webglDepthbuffer[Z],M,!1);else{const Q=M.stencilBuffer?r.DEPTH_STENCIL_ATTACHMENT:r.DEPTH_ATTACHMENT,X=I.__webglDepthbuffer[Z];r.bindRenderbuffer(r.RENDERBUFFER,X),r.framebufferRenderbuffer(r.FRAMEBUFFER,Q,r.RENDERBUFFER,X)}}else{const Z=M.texture.mipmaps;if(Z&&Z.length>0?e.bindFramebuffer(r.FRAMEBUFFER,I.__webglFramebuffer[0]):e.bindFramebuffer(r.FRAMEBUFFER,I.__webglFramebuffer),I.__webglDepthbuffer===void 0)I.__webglDepthbuffer=r.createRenderbuffer(),Tt(I.__webglDepthbuffer,M,!1);else{const Q=M.stencilBuffer?r.DEPTH_STENCIL_ATTACHMENT:r.DEPTH_ATTACHMENT,X=I.__webglDepthbuffer;r.bindRenderbuffer(r.RENDERBUFFER,X),r.framebufferRenderbuffer(r.FRAMEBUFFER,Q,r.RENDERBUFFER,X)}}e.bindFramebuffer(r.FRAMEBUFFER,null)}function Wt(M,I,O){const Z=i.get(M);I!==void 0&&bt(Z.__webglFramebuffer,M,M.texture,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,0),O!==void 0&&de(M)}function _(M){const I=M.texture,O=i.get(M),Z=i.get(I);M.addEventListener("dispose",R);const Q=M.textures,X=M.isWebGLCubeRenderTarget===!0,xt=Q.length>1;if(xt||(Z.__webglTexture===void 0&&(Z.__webglTexture=r.createTexture()),Z.__version=I.version,a.memory.textures++),X){O.__webglFramebuffer=[];for(let it=0;it<6;it++)if(I.mipmaps&&I.mipmaps.length>0){O.__webglFramebuffer[it]=[];for(let It=0;It<I.mipmaps.length;It++)O.__webglFramebuffer[it][It]=r.createFramebuffer()}else O.__webglFramebuffer[it]=r.createFramebuffer()}else{if(I.mipmaps&&I.mipmaps.length>0){O.__webglFramebuffer=[];for(let it=0;it<I.mipmaps.length;it++)O.__webglFramebuffer[it]=r.createFramebuffer()}else O.__webglFramebuffer=r.createFramebuffer();if(xt)for(let it=0,It=Q.length;it<It;it++){const Ct=i.get(Q[it]);Ct.__webglTexture===void 0&&(Ct.__webglTexture=r.createTexture(),a.memory.textures++)}if(M.samples>0&&ft(M)===!1){O.__webglMultisampledFramebuffer=r.createFramebuffer(),O.__webglColorRenderbuffer=[],e.bindFramebuffer(r.FRAMEBUFFER,O.__webglMultisampledFramebuffer);for(let it=0;it<Q.length;it++){const It=Q[it];O.__webglColorRenderbuffer[it]=r.createRenderbuffer(),r.bindRenderbuffer(r.RENDERBUFFER,O.__webglColorRenderbuffer[it]);const Ct=s.convert(It.format,It.colorSpace),tt=s.convert(It.type),ct=S(It.internalFormat,Ct,tt,It.colorSpace,M.isXRRenderTarget===!0),Rt=re(M);r.renderbufferStorageMultisample(r.RENDERBUFFER,Rt,ct,M.width,M.height),r.framebufferRenderbuffer(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0+it,r.RENDERBUFFER,O.__webglColorRenderbuffer[it])}r.bindRenderbuffer(r.RENDERBUFFER,null),M.depthBuffer&&(O.__webglDepthRenderbuffer=r.createRenderbuffer(),Tt(O.__webglDepthRenderbuffer,M,!0)),e.bindFramebuffer(r.FRAMEBUFFER,null)}}if(X){e.bindTexture(r.TEXTURE_CUBE_MAP,Z.__webglTexture),Ot(r.TEXTURE_CUBE_MAP,I);for(let it=0;it<6;it++)if(I.mipmaps&&I.mipmaps.length>0)for(let It=0;It<I.mipmaps.length;It++)bt(O.__webglFramebuffer[it][It],M,I,r.COLOR_ATTACHMENT0,r.TEXTURE_CUBE_MAP_POSITIVE_X+it,It);else bt(O.__webglFramebuffer[it],M,I,r.COLOR_ATTACHMENT0,r.TEXTURE_CUBE_MAP_POSITIVE_X+it,0);g(I)&&f(r.TEXTURE_CUBE_MAP),e.unbindTexture()}else if(xt){for(let it=0,It=Q.length;it<It;it++){const Ct=Q[it],tt=i.get(Ct);let ct=r.TEXTURE_2D;(M.isWebGL3DRenderTarget||M.isWebGLArrayRenderTarget)&&(ct=M.isWebGL3DRenderTarget?r.TEXTURE_3D:r.TEXTURE_2D_ARRAY),e.bindTexture(ct,tt.__webglTexture),Ot(ct,Ct),bt(O.__webglFramebuffer,M,Ct,r.COLOR_ATTACHMENT0+it,ct,0),g(Ct)&&f(ct)}e.unbindTexture()}else{let it=r.TEXTURE_2D;if((M.isWebGL3DRenderTarget||M.isWebGLArrayRenderTarget)&&(it=M.isWebGL3DRenderTarget?r.TEXTURE_3D:r.TEXTURE_2D_ARRAY),e.bindTexture(it,Z.__webglTexture),Ot(it,I),I.mipmaps&&I.mipmaps.length>0)for(let It=0;It<I.mipmaps.length;It++)bt(O.__webglFramebuffer[It],M,I,r.COLOR_ATTACHMENT0,it,It);else bt(O.__webglFramebuffer,M,I,r.COLOR_ATTACHMENT0,it,0);g(I)&&f(it),e.unbindTexture()}M.depthBuffer&&de(M)}function ee(M){const I=M.textures;for(let O=0,Z=I.length;O<Z;O++){const Q=I[O];if(g(Q)){const X=y(M),xt=i.get(Q).__webglTexture;e.bindTexture(X,xt),f(X),e.unbindTexture()}}}const Mt=[],Jt=[];function Et(M){if(M.samples>0){if(ft(M)===!1){const I=M.textures,O=M.width,Z=M.height;let Q=r.COLOR_BUFFER_BIT;const X=M.stencilBuffer?r.DEPTH_STENCIL_ATTACHMENT:r.DEPTH_ATTACHMENT,xt=i.get(M),it=I.length>1;if(it)for(let Ct=0;Ct<I.length;Ct++)e.bindFramebuffer(r.FRAMEBUFFER,xt.__webglMultisampledFramebuffer),r.framebufferRenderbuffer(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0+Ct,r.RENDERBUFFER,null),e.bindFramebuffer(r.FRAMEBUFFER,xt.__webglFramebuffer),r.framebufferTexture2D(r.DRAW_FRAMEBUFFER,r.COLOR_ATTACHMENT0+Ct,r.TEXTURE_2D,null,0);e.bindFramebuffer(r.READ_FRAMEBUFFER,xt.__webglMultisampledFramebuffer);const It=M.texture.mipmaps;It&&It.length>0?e.bindFramebuffer(r.DRAW_FRAMEBUFFER,xt.__webglFramebuffer[0]):e.bindFramebuffer(r.DRAW_FRAMEBUFFER,xt.__webglFramebuffer);for(let Ct=0;Ct<I.length;Ct++){if(M.resolveDepthBuffer&&(M.depthBuffer&&(Q|=r.DEPTH_BUFFER_BIT),M.stencilBuffer&&M.resolveStencilBuffer&&(Q|=r.STENCIL_BUFFER_BIT)),it){r.framebufferRenderbuffer(r.READ_FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.RENDERBUFFER,xt.__webglColorRenderbuffer[Ct]);const tt=i.get(I[Ct]).__webglTexture;r.framebufferTexture2D(r.DRAW_FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,tt,0)}r.blitFramebuffer(0,0,O,Z,0,0,O,Z,Q,r.NEAREST),l===!0&&(Mt.length=0,Jt.length=0,Mt.push(r.COLOR_ATTACHMENT0+Ct),M.depthBuffer&&M.resolveDepthBuffer===!1&&(Mt.push(X),Jt.push(X),r.invalidateFramebuffer(r.DRAW_FRAMEBUFFER,Jt)),r.invalidateFramebuffer(r.READ_FRAMEBUFFER,Mt))}if(e.bindFramebuffer(r.READ_FRAMEBUFFER,null),e.bindFramebuffer(r.DRAW_FRAMEBUFFER,null),it)for(let Ct=0;Ct<I.length;Ct++){e.bindFramebuffer(r.FRAMEBUFFER,xt.__webglMultisampledFramebuffer),r.framebufferRenderbuffer(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0+Ct,r.RENDERBUFFER,xt.__webglColorRenderbuffer[Ct]);const tt=i.get(I[Ct]).__webglTexture;e.bindFramebuffer(r.FRAMEBUFFER,xt.__webglFramebuffer),r.framebufferTexture2D(r.DRAW_FRAMEBUFFER,r.COLOR_ATTACHMENT0+Ct,r.TEXTURE_2D,tt,0)}e.bindFramebuffer(r.DRAW_FRAMEBUFFER,xt.__webglMultisampledFramebuffer)}else if(M.depthBuffer&&M.resolveDepthBuffer===!1&&l){const I=M.stencilBuffer?r.DEPTH_STENCIL_ATTACHMENT:r.DEPTH_ATTACHMENT;r.invalidateFramebuffer(r.DRAW_FRAMEBUFFER,[I])}}}function re(M){return Math.min(n.maxSamples,M.samples)}function ft(M){const I=i.get(M);return M.samples>0&&t.has("WEBGL_multisampled_render_to_texture")===!0&&I.__useRenderToTexture!==!1}function Ut(M){const I=a.render.frame;h.get(M)!==I&&(h.set(M,I),M.update())}function Ee(M,I){const O=M.colorSpace,Z=M.format,Q=M.type;return M.isCompressedTexture===!0||M.isVideoTexture===!0||O!==ns&&O!==en&&(Yt.getTransfer(O)===qt?(Z!==li||Q!==Ii)&&console.warn("THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."):console.error("THREE.WebGLTextures: Unsupported texture color space:",O)),I}function fe(M){return typeof HTMLImageElement<"u"&&M instanceof HTMLImageElement?(A.width=M.naturalWidth||M.width,A.height=M.naturalHeight||M.height):typeof VideoFrame<"u"&&M instanceof VideoFrame?(A.width=M.displayWidth,A.height=M.displayHeight):(A.width=M.width,A.height=M.height),A}this.allocateTextureUnit=F,this.resetTextureUnits=z,this.setTexture2D=W,this.setTexture2DArray=Y,this.setTexture3D=$,this.setTextureCube=H,this.rebindTextures=Wt,this.setupRenderTarget=_,this.updateRenderTargetMipmap=ee,this.updateMultisampleRenderTarget=Et,this.setupDepthRenderbuffer=de,this.setupFrameBufferTexture=bt,this.useMultisampledRTT=ft}function yI(r,t){function e(i,n=en){let s;const a=Yt.getTransfer(n);if(i===Ii)return r.UNSIGNED_BYTE;if(i===eo)return r.UNSIGNED_SHORT_4_4_4_4;if(i===io)return r.UNSIGNED_SHORT_5_5_5_1;if(i===Dl)return r.UNSIGNED_INT_5_9_9_9_REV;if(i===_l)return r.BYTE;if(i===Pl)return r.SHORT;if(i===ks)return r.UNSIGNED_SHORT;if(i===to)return r.INT;if(i===Sn)return r.UNSIGNED_INT;if(i===Ni)return r.FLOAT;if(i===Hs)return r.HALF_FLOAT;if(i===Ll)return r.ALPHA;if(i===Nl)return r.RGB;if(i===li)return r.RGBA;if(i===Ws)return r.DEPTH_COMPONENT;if(i===Ys)return r.DEPTH_STENCIL;if(i===Bl)return r.RED;if(i===no)return r.RED_INTEGER;if(i===Fl)return r.RG;if(i===so)return r.RG_INTEGER;if(i===ro)return r.RGBA_INTEGER;if(i===Rr||i===_r||i===Pr||i===Dr)if(a===qt)if(s=t.get("WEBGL_compressed_texture_s3tc_srgb"),s!==null){if(i===Rr)return s.COMPRESSED_SRGB_S3TC_DXT1_EXT;if(i===_r)return s.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;if(i===Pr)return s.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;if(i===Dr)return s.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}else return null;else if(s=t.get("WEBGL_compressed_texture_s3tc"),s!==null){if(i===Rr)return s.COMPRESSED_RGB_S3TC_DXT1_EXT;if(i===_r)return s.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(i===Pr)return s.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(i===Dr)return s.COMPRESSED_RGBA_S3TC_DXT5_EXT}else return null;if(i===ao||i===oo||i===Ao||i===lo)if(s=t.get("WEBGL_compressed_texture_pvrtc"),s!==null){if(i===ao)return s.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(i===oo)return s.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(i===Ao)return s.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(i===lo)return s.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}else return null;if(i===ho||i===co||i===uo)if(s=t.get("WEBGL_compressed_texture_etc"),s!==null){if(i===ho||i===co)return a===qt?s.COMPRESSED_SRGB8_ETC2:s.COMPRESSED_RGB8_ETC2;if(i===uo)return a===qt?s.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:s.COMPRESSED_RGBA8_ETC2_EAC}else return null;if(i===fo||i===go||i===po||i===mo||i===Io||i===Co||i===vo||i===xo||i===Eo||i===So||i===Mo||i===yo||i===bo||i===To)if(s=t.get("WEBGL_compressed_texture_astc"),s!==null){if(i===fo)return a===qt?s.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:s.COMPRESSED_RGBA_ASTC_4x4_KHR;if(i===go)return a===qt?s.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:s.COMPRESSED_RGBA_ASTC_5x4_KHR;if(i===po)return a===qt?s.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:s.COMPRESSED_RGBA_ASTC_5x5_KHR;if(i===mo)return a===qt?s.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:s.COMPRESSED_RGBA_ASTC_6x5_KHR;if(i===Io)return a===qt?s.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:s.COMPRESSED_RGBA_ASTC_6x6_KHR;if(i===Co)return a===qt?s.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:s.COMPRESSED_RGBA_ASTC_8x5_KHR;if(i===vo)return a===qt?s.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:s.COMPRESSED_RGBA_ASTC_8x6_KHR;if(i===xo)return a===qt?s.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:s.COMPRESSED_RGBA_ASTC_8x8_KHR;if(i===Eo)return a===qt?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:s.COMPRESSED_RGBA_ASTC_10x5_KHR;if(i===So)return a===qt?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:s.COMPRESSED_RGBA_ASTC_10x6_KHR;if(i===Mo)return a===qt?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:s.COMPRESSED_RGBA_ASTC_10x8_KHR;if(i===yo)return a===qt?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:s.COMPRESSED_RGBA_ASTC_10x10_KHR;if(i===bo)return a===qt?s.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:s.COMPRESSED_RGBA_ASTC_12x10_KHR;if(i===To)return a===qt?s.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:s.COMPRESSED_RGBA_ASTC_12x12_KHR}else return null;if(i===Lr||i===wo||i===Ro)if(s=t.get("EXT_texture_compression_bptc"),s!==null){if(i===Lr)return a===qt?s.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:s.COMPRESSED_RGBA_BPTC_UNORM_EXT;if(i===wo)return s.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT;if(i===Ro)return s.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT}else return null;if(i===Ol||i===_o||i===Po||i===Do)if(s=t.get("EXT_texture_compression_rgtc"),s!==null){if(i===Lr)return s.COMPRESSED_RED_RGTC1_EXT;if(i===_o)return s.COMPRESSED_SIGNED_RED_RGTC1_EXT;if(i===Po)return s.COMPRESSED_RED_GREEN_RGTC2_EXT;if(i===Do)return s.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT}else return null;return i===Vs?r.UNSIGNED_INT_24_8:r[i]!==void 0?r[i]:null}return{convert:e}}class ec extends Te{constructor(t=null){super(),this.sourceTexture=t,this.isExternalTexture=!0}}const bI=`
|
|
3932
3932
|
void main() {
|
|
3933
3933
|
|
|
3934
3934
|
gl_Position = vec4( position, 1.0 );
|
|
3935
3935
|
|
|
3936
|
-
}`,
|
|
3936
|
+
}`,TI=`
|
|
3937
3937
|
uniform sampler2DArray depthColor;
|
|
3938
3938
|
uniform float depthWidth;
|
|
3939
3939
|
uniform float depthHeight;
|
|
@@ -3952,7 +3952,7 @@ void main() {
|
|
|
3952
3952
|
|
|
3953
3953
|
}
|
|
3954
3954
|
|
|
3955
|
-
}`;class GC{constructor(){this.texture=null,this.mesh=null,this.depthNear=0,this.depthFar=0}init(t,e){if(this.texture===null){const i=new hc(t.texture);(t.depthNear!==e.depthNear||t.depthFar!==e.depthFar)&&(this.depthNear=t.depthNear,this.depthFar=t.depthFar),this.texture=i}}getMesh(t){if(this.texture!==null&&this.mesh===null){const e=t.cameras[0].viewport,i=new cn({vertexShader:zC,fragmentShader:kC,uniforms:{depthColor:{value:this.texture},depthWidth:{value:e.z},depthHeight:{value:e.w}}});this.mesh=new Ci(new or(20,20),i)}return this.mesh}reset(){this.texture=null,this.mesh=null}getDepthTexture(){return this.texture}}class HC extends wn{constructor(t,e){super();const i=this;let n=null,r=1,a=null,o="local-floor",h=1,l=null,A=null,c=null,u=null,d=null,p=null;const m=new GC,g={},f=e.getContextAttributes();let M=null,S=null;const v=[],T=[],_=new Nt;let w=null;const P=new ke;P.viewport=new ce;const E=new ke;E.viewport=new ce;const x=[P,E],b=new Hf;let z=null,F=null;this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(j){let ot=v[j];return ot===void 0&&(ot=new Al,v[j]=ot),ot.getTargetRaySpace()},this.getControllerGrip=function(j){let ot=v[j];return ot===void 0&&(ot=new Al,v[j]=ot),ot.getGripSpace()},this.getHand=function(j){let ot=v[j];return ot===void 0&&(ot=new Al,v[j]=ot),ot.getHandSpace()};function U(j){const ot=T.indexOf(j.inputSource);if(ot===-1)return;const nt=v[ot];nt!==void 0&&(nt.update(j.inputSource,j.frame,l||a),nt.dispatchEvent({type:j.type,data:j.inputSource}))}function W(){n.removeEventListener("select",U),n.removeEventListener("selectstart",U),n.removeEventListener("selectend",U),n.removeEventListener("squeeze",U),n.removeEventListener("squeezestart",U),n.removeEventListener("squeezeend",U),n.removeEventListener("end",W),n.removeEventListener("inputsourceschange",Y);for(let j=0;j<v.length;j++){const ot=T[j];ot!==null&&(T[j]=null,v[j].disconnect(ot))}z=null,F=null,m.reset();for(const j in g)delete g[j];t.setRenderTarget(M),d=null,u=null,c=null,n=null,S=null,te.stop(),i.isPresenting=!1,t.setPixelRatio(w),t.setSize(_.width,_.height,!1),i.dispatchEvent({type:"sessionend"})}this.setFramebufferScaleFactor=function(j){r=j,i.isPresenting===!0&&console.warn("THREE.WebXRManager: Cannot change framebuffer scale while presenting.")},this.setReferenceSpaceType=function(j){o=j,i.isPresenting===!0&&console.warn("THREE.WebXRManager: Cannot change reference space type while presenting.")},this.getReferenceSpace=function(){return l||a},this.setReferenceSpace=function(j){l=j},this.getBaseLayer=function(){return u!==null?u:d},this.getBinding=function(){return c},this.getFrame=function(){return p},this.getSession=function(){return n},this.setSession=async function(j){if(n=j,n!==null){if(M=t.getRenderTarget(),n.addEventListener("select",U),n.addEventListener("selectstart",U),n.addEventListener("selectend",U),n.addEventListener("squeeze",U),n.addEventListener("squeezestart",U),n.addEventListener("squeezeend",U),n.addEventListener("end",W),n.addEventListener("inputsourceschange",Y),f.xrCompatible!==!0&&await e.makeXRCompatible(),w=t.getPixelRatio(),t.getSize(_),typeof XRWebGLBinding<"u"&&(c=new XRWebGLBinding(n,e)),c!==null&&"createProjectionLayer"in XRWebGLBinding.prototype){let nt=null,bt=null,_t=null;f.depth&&(_t=f.stencil?e.DEPTH24_STENCIL8:e.DEPTH_COMPONENT24,nt=f.stencil?qs:Qs,bt=f.stencil?Js:Tn);const Dt={colorFormat:e.RGBA8,depthFormat:_t,scaleFactor:r};u=c.createProjectionLayer(Dt),n.updateRenderState({layers:[u]}),t.setPixelRatio(1),t.setSize(u.textureWidth,u.textureHeight,!1),S=new Pn(u.textureWidth,u.textureHeight,{format:di,type:xi,depthTexture:new yA(u.textureWidth,u.textureHeight,bt,void 0,void 0,void 0,void 0,void 0,void 0,nt),stencilBuffer:f.stencil,colorSpace:t.outputColorSpace,samples:f.antialias?4:0,resolveDepthBuffer:u.ignoreDepthValues===!1,resolveStencilBuffer:u.ignoreDepthValues===!1})}else{const nt={antialias:f.antialias,alpha:!0,depth:f.depth,stencil:f.stencil,framebufferScaleFactor:r};d=new XRWebGLLayer(n,e,nt),n.updateRenderState({baseLayer:d}),t.setPixelRatio(1),t.setSize(d.framebufferWidth,d.framebufferHeight,!1),S=new Pn(d.framebufferWidth,d.framebufferHeight,{format:di,type:xi,colorSpace:t.outputColorSpace,stencilBuffer:f.stencil,resolveDepthBuffer:d.ignoreDepthValues===!1,resolveStencilBuffer:d.ignoreDepthValues===!1})}S.isXRRenderTarget=!0,this.setFoveation(h),l=null,a=await n.requestReferenceSpace(o),te.setContext(n),te.start(),i.isPresenting=!0,i.dispatchEvent({type:"sessionstart"})}},this.getEnvironmentBlendMode=function(){if(n!==null)return n.environmentBlendMode},this.getDepthTexture=function(){return m.getDepthTexture()};function Y(j){for(let ot=0;ot<j.removed.length;ot++){const nt=j.removed[ot],bt=T.indexOf(nt);bt>=0&&(T[bt]=null,v[bt].disconnect(nt))}for(let ot=0;ot<j.added.length;ot++){const nt=j.added[ot];let bt=T.indexOf(nt);if(bt===-1){for(let Dt=0;Dt<v.length;Dt++)if(Dt>=T.length){T.push(nt),bt=Dt;break}else if(T[Dt]===null){T[Dt]=nt,bt=Dt;break}if(bt===-1)break}const _t=v[bt];_t&&_t.connect(nt)}}const $=new O,H=new O;function rt(j,ot,nt){$.setFromMatrixPosition(ot.matrixWorld),H.setFromMatrixPosition(nt.matrixWorld);const bt=$.distanceTo(H),_t=ot.projectionMatrix.elements,Dt=nt.projectionMatrix.elements,fe=_t[14]/(_t[10]-1),Yt=_t[14]/(_t[10]+1),R=(_t[9]+1)/_t[5],ie=(_t[9]-1)/_t[5],yt=(_t[8]-1)/_t[0],jt=(Dt[8]+1)/Dt[0],Et=fe*yt,ae=fe*jt,ft=bt/(-yt+jt),zt=ft*-yt;if(ot.matrixWorld.decompose(j.position,j.quaternion,j.scale),j.translateX(zt),j.translateZ(ft),j.matrixWorld.compose(j.position,j.quaternion,j.scale),j.matrixWorldInverse.copy(j.matrixWorld).invert(),_t[10]===-1)j.projectionMatrix.copy(ot.projectionMatrix),j.projectionMatrixInverse.copy(ot.projectionMatrixInverse);else{const ye=fe+ft,ge=Yt+ft,y=Et-zt,C=ae+(bt-zt),B=R*Yt/ge*ye,Z=ie*Yt/ge*ye;j.projectionMatrix.makePerspective(y,C,B,Z,ye,ge),j.projectionMatrixInverse.copy(j.projectionMatrix).invert()}}function ht(j,ot){ot===null?j.matrixWorld.copy(j.matrix):j.matrixWorld.multiplyMatrices(ot.matrixWorld,j.matrix),j.matrixWorldInverse.copy(j.matrixWorld).invert()}this.updateCamera=function(j){if(n===null)return;let ot=j.near,nt=j.far;m.texture!==null&&(m.depthNear>0&&(ot=m.depthNear),m.depthFar>0&&(nt=m.depthFar)),b.near=E.near=P.near=ot,b.far=E.far=P.far=nt,(z!==b.near||F!==b.far)&&(n.updateRenderState({depthNear:b.near,depthFar:b.far}),z=b.near,F=b.far),b.layers.mask=j.layers.mask|6,P.layers.mask=b.layers.mask&3,E.layers.mask=b.layers.mask&5;const bt=j.parent,_t=b.cameras;ht(b,bt);for(let Dt=0;Dt<_t.length;Dt++)ht(_t[Dt],bt);_t.length===2?rt(b,P,E):b.projectionMatrix.copy(P.projectionMatrix),mt(j,b,bt)};function mt(j,ot,nt){nt===null?j.matrix.copy(ot.matrixWorld):(j.matrix.copy(nt.matrixWorld),j.matrix.invert(),j.matrix.multiply(ot.matrixWorld)),j.matrix.decompose(j.position,j.quaternion,j.scale),j.updateMatrixWorld(!0),j.projectionMatrix.copy(ot.projectionMatrix),j.projectionMatrixInverse.copy(ot.projectionMatrixInverse),j.isPerspectiveCamera&&(j.fov=Gr*2*Math.atan(1/j.projectionMatrix.elements[5]),j.zoom=1)}this.getCamera=function(){return b},this.getFoveation=function(){if(!(u===null&&d===null))return h},this.setFoveation=function(j){h=j,u!==null&&(u.fixedFoveation=j),d!==null&&d.fixedFoveation!==void 0&&(d.fixedFoveation=j)},this.hasDepthSensing=function(){return m.texture!==null},this.getDepthSensingMesh=function(){return m.getMesh(b)},this.getCameraTexture=function(j){return g[j]};let Ut=null;function re(j,ot){if(A=ot.getViewerPose(l||a),p=ot,A!==null){const nt=A.views;d!==null&&(t.setRenderTargetFramebuffer(S,d.framebuffer),t.setRenderTarget(S));let bt=!1;nt.length!==b.cameras.length&&(b.cameras.length=0,bt=!0);for(let Yt=0;Yt<nt.length;Yt++){const R=nt[Yt];let ie=null;if(d!==null)ie=d.getViewport(R);else{const jt=c.getViewSubImage(u,R);ie=jt.viewport,Yt===0&&(t.setRenderTargetTextures(S,jt.colorTexture,jt.depthStencilTexture),t.setRenderTarget(S))}let yt=x[Yt];yt===void 0&&(yt=new ke,yt.layers.enable(Yt),yt.viewport=new ce,x[Yt]=yt),yt.matrix.fromArray(R.transform.matrix),yt.matrix.decompose(yt.position,yt.quaternion,yt.scale),yt.projectionMatrix.fromArray(R.projectionMatrix),yt.projectionMatrixInverse.copy(yt.projectionMatrix).invert(),yt.viewport.set(ie.x,ie.y,ie.width,ie.height),Yt===0&&(b.matrix.copy(yt.matrix),b.matrix.decompose(b.position,b.quaternion,b.scale)),bt===!0&&b.cameras.push(yt)}const _t=n.enabledFeatures;if(_t&&_t.includes("depth-sensing")&&n.depthUsage=="gpu-optimized"&&c){const Yt=c.getDepthInformation(nt[0]);Yt&&Yt.isValid&&Yt.texture&&m.init(Yt,n.renderState)}if(_t&&_t.includes("camera-access")&&(t.state.unbindTexture(),c))for(let Yt=0;Yt<nt.length;Yt++){const R=nt[Yt].camera;if(R){let ie=g[R];ie||(ie=new hc,g[R]=ie);const yt=c.getCameraImage(R);ie.sourceTexture=yt}}}for(let nt=0;nt<v.length;nt++){const bt=T[nt],_t=v[nt];bt!==null&&_t!==void 0&&_t.update(bt,ot,l||a)}Ut&&Ut(j,ot),ot.detectedPlanes&&i.dispatchEvent({type:"planesdetected",data:ot}),p=null}const te=new NA;te.setAnimationLoop(re),this.setAnimationLoop=function(j){Ut=j},this.dispose=function(){}}}const Gn=new Si,VC=new de;function WC(s,t){function e(g,f){g.matrixAutoUpdate===!0&&g.updateMatrix(),f.value.copy(g.matrix)}function i(g,f){f.color.getRGB(g.fogColor.value,mA(s)),f.isFog?(g.fogNear.value=f.near,g.fogFar.value=f.far):f.isFogExp2&&(g.fogDensity.value=f.density)}function n(g,f,M,S,v){f.isMeshBasicMaterial||f.isMeshLambertMaterial?r(g,f):f.isMeshToonMaterial?(r(g,f),c(g,f)):f.isMeshPhongMaterial?(r(g,f),A(g,f)):f.isMeshStandardMaterial?(r(g,f),u(g,f),f.isMeshPhysicalMaterial&&d(g,f,v)):f.isMeshMatcapMaterial?(r(g,f),p(g,f)):f.isMeshDepthMaterial?r(g,f):f.isMeshDistanceMaterial?(r(g,f),m(g,f)):f.isMeshNormalMaterial?r(g,f):f.isLineBasicMaterial?(a(g,f),f.isLineDashedMaterial&&o(g,f)):f.isPointsMaterial?h(g,f,M,S):f.isSpriteMaterial?l(g,f):f.isShadowMaterial?(g.color.value.copy(f.color),g.opacity.value=f.opacity):f.isShaderMaterial&&(f.uniformsNeedUpdate=!1)}function r(g,f){g.opacity.value=f.opacity,f.color&&g.diffuse.value.copy(f.color),f.emissive&&g.emissive.value.copy(f.emissive).multiplyScalar(f.emissiveIntensity),f.map&&(g.map.value=f.map,e(f.map,g.mapTransform)),f.alphaMap&&(g.alphaMap.value=f.alphaMap,e(f.alphaMap,g.alphaMapTransform)),f.bumpMap&&(g.bumpMap.value=f.bumpMap,e(f.bumpMap,g.bumpMapTransform),g.bumpScale.value=f.bumpScale,f.side===Ue&&(g.bumpScale.value*=-1)),f.normalMap&&(g.normalMap.value=f.normalMap,e(f.normalMap,g.normalMapTransform),g.normalScale.value.copy(f.normalScale),f.side===Ue&&g.normalScale.value.negate()),f.displacementMap&&(g.displacementMap.value=f.displacementMap,e(f.displacementMap,g.displacementMapTransform),g.displacementScale.value=f.displacementScale,g.displacementBias.value=f.displacementBias),f.emissiveMap&&(g.emissiveMap.value=f.emissiveMap,e(f.emissiveMap,g.emissiveMapTransform)),f.specularMap&&(g.specularMap.value=f.specularMap,e(f.specularMap,g.specularMapTransform)),f.alphaTest>0&&(g.alphaTest.value=f.alphaTest);const M=t.get(f),S=M.envMap,v=M.envMapRotation;S&&(g.envMap.value=S,Gn.copy(v),Gn.x*=-1,Gn.y*=-1,Gn.z*=-1,S.isCubeTexture&&S.isRenderTargetTexture===!1&&(Gn.y*=-1,Gn.z*=-1),g.envMapRotation.value.setFromMatrix4(VC.makeRotationFromEuler(Gn)),g.flipEnvMap.value=S.isCubeTexture&&S.isRenderTargetTexture===!1?-1:1,g.reflectivity.value=f.reflectivity,g.ior.value=f.ior,g.refractionRatio.value=f.refractionRatio),f.lightMap&&(g.lightMap.value=f.lightMap,g.lightMapIntensity.value=f.lightMapIntensity,e(f.lightMap,g.lightMapTransform)),f.aoMap&&(g.aoMap.value=f.aoMap,g.aoMapIntensity.value=f.aoMapIntensity,e(f.aoMap,g.aoMapTransform))}function a(g,f){g.diffuse.value.copy(f.color),g.opacity.value=f.opacity,f.map&&(g.map.value=f.map,e(f.map,g.mapTransform))}function o(g,f){g.dashSize.value=f.dashSize,g.totalSize.value=f.dashSize+f.gapSize,g.scale.value=f.scale}function h(g,f,M,S){g.diffuse.value.copy(f.color),g.opacity.value=f.opacity,g.size.value=f.size*M,g.scale.value=S*.5,f.map&&(g.map.value=f.map,e(f.map,g.uvTransform)),f.alphaMap&&(g.alphaMap.value=f.alphaMap,e(f.alphaMap,g.alphaMapTransform)),f.alphaTest>0&&(g.alphaTest.value=f.alphaTest)}function l(g,f){g.diffuse.value.copy(f.color),g.opacity.value=f.opacity,g.rotation.value=f.rotation,f.map&&(g.map.value=f.map,e(f.map,g.mapTransform)),f.alphaMap&&(g.alphaMap.value=f.alphaMap,e(f.alphaMap,g.alphaMapTransform)),f.alphaTest>0&&(g.alphaTest.value=f.alphaTest)}function A(g,f){g.specular.value.copy(f.specular),g.shininess.value=Math.max(f.shininess,1e-4)}function c(g,f){f.gradientMap&&(g.gradientMap.value=f.gradientMap)}function u(g,f){g.metalness.value=f.metalness,f.metalnessMap&&(g.metalnessMap.value=f.metalnessMap,e(f.metalnessMap,g.metalnessMapTransform)),g.roughness.value=f.roughness,f.roughnessMap&&(g.roughnessMap.value=f.roughnessMap,e(f.roughnessMap,g.roughnessMapTransform)),f.envMap&&(g.envMapIntensity.value=f.envMapIntensity)}function d(g,f,M){g.ior.value=f.ior,f.sheen>0&&(g.sheenColor.value.copy(f.sheenColor).multiplyScalar(f.sheen),g.sheenRoughness.value=f.sheenRoughness,f.sheenColorMap&&(g.sheenColorMap.value=f.sheenColorMap,e(f.sheenColorMap,g.sheenColorMapTransform)),f.sheenRoughnessMap&&(g.sheenRoughnessMap.value=f.sheenRoughnessMap,e(f.sheenRoughnessMap,g.sheenRoughnessMapTransform))),f.clearcoat>0&&(g.clearcoat.value=f.clearcoat,g.clearcoatRoughness.value=f.clearcoatRoughness,f.clearcoatMap&&(g.clearcoatMap.value=f.clearcoatMap,e(f.clearcoatMap,g.clearcoatMapTransform)),f.clearcoatRoughnessMap&&(g.clearcoatRoughnessMap.value=f.clearcoatRoughnessMap,e(f.clearcoatRoughnessMap,g.clearcoatRoughnessMapTransform)),f.clearcoatNormalMap&&(g.clearcoatNormalMap.value=f.clearcoatNormalMap,e(f.clearcoatNormalMap,g.clearcoatNormalMapTransform),g.clearcoatNormalScale.value.copy(f.clearcoatNormalScale),f.side===Ue&&g.clearcoatNormalScale.value.negate())),f.dispersion>0&&(g.dispersion.value=f.dispersion),f.iridescence>0&&(g.iridescence.value=f.iridescence,g.iridescenceIOR.value=f.iridescenceIOR,g.iridescenceThicknessMinimum.value=f.iridescenceThicknessRange[0],g.iridescenceThicknessMaximum.value=f.iridescenceThicknessRange[1],f.iridescenceMap&&(g.iridescenceMap.value=f.iridescenceMap,e(f.iridescenceMap,g.iridescenceMapTransform)),f.iridescenceThicknessMap&&(g.iridescenceThicknessMap.value=f.iridescenceThicknessMap,e(f.iridescenceThicknessMap,g.iridescenceThicknessMapTransform))),f.transmission>0&&(g.transmission.value=f.transmission,g.transmissionSamplerMap.value=M.texture,g.transmissionSamplerSize.value.set(M.width,M.height),f.transmissionMap&&(g.transmissionMap.value=f.transmissionMap,e(f.transmissionMap,g.transmissionMapTransform)),g.thickness.value=f.thickness,f.thicknessMap&&(g.thicknessMap.value=f.thicknessMap,e(f.thicknessMap,g.thicknessMapTransform)),g.attenuationDistance.value=f.attenuationDistance,g.attenuationColor.value.copy(f.attenuationColor)),f.anisotropy>0&&(g.anisotropyVector.value.set(f.anisotropy*Math.cos(f.anisotropyRotation),f.anisotropy*Math.sin(f.anisotropyRotation)),f.anisotropyMap&&(g.anisotropyMap.value=f.anisotropyMap,e(f.anisotropyMap,g.anisotropyMapTransform))),g.specularIntensity.value=f.specularIntensity,g.specularColor.value.copy(f.specularColor),f.specularColorMap&&(g.specularColorMap.value=f.specularColorMap,e(f.specularColorMap,g.specularColorMapTransform)),f.specularIntensityMap&&(g.specularIntensityMap.value=f.specularIntensityMap,e(f.specularIntensityMap,g.specularIntensityMapTransform))}function p(g,f){f.matcap&&(g.matcap.value=f.matcap)}function m(g,f){const M=t.get(f).light;g.referencePosition.value.setFromMatrixPosition(M.matrixWorld),g.nearDistance.value=M.shadow.camera.near,g.farDistance.value=M.shadow.camera.far}return{refreshFogUniforms:i,refreshMaterialUniforms:n}}function YC(s,t,e,i){let n={},r={},a=[];const o=s.getParameter(s.MAX_UNIFORM_BUFFER_BINDINGS);function h(M,S){const v=S.program;i.uniformBlockBinding(M,v)}function l(M,S){let v=n[M.id];v===void 0&&(p(M),v=A(M),n[M.id]=v,M.addEventListener("dispose",g));const T=S.program;i.updateUBOMapping(M,T);const _=t.render.frame;r[M.id]!==_&&(u(M),r[M.id]=_)}function A(M){const S=c();M.__bindingPointIndex=S;const v=s.createBuffer(),T=M.__size,_=M.usage;return s.bindBuffer(s.UNIFORM_BUFFER,v),s.bufferData(s.UNIFORM_BUFFER,T,_),s.bindBuffer(s.UNIFORM_BUFFER,null),s.bindBufferBase(s.UNIFORM_BUFFER,S,v),v}function c(){for(let M=0;M<o;M++)if(a.indexOf(M)===-1)return a.push(M),M;return console.error("THREE.WebGLRenderer: Maximum number of simultaneously usable uniforms groups reached."),0}function u(M){const S=n[M.id],v=M.uniforms,T=M.__cache;s.bindBuffer(s.UNIFORM_BUFFER,S);for(let _=0,w=v.length;_<w;_++){const P=Array.isArray(v[_])?v[_]:[v[_]];for(let E=0,x=P.length;E<x;E++){const b=P[E];if(d(b,_,E,T)===!0){const z=b.__offset,F=Array.isArray(b.value)?b.value:[b.value];let U=0;for(let W=0;W<F.length;W++){const Y=F[W],$=m(Y);typeof Y=="number"||typeof Y=="boolean"?(b.__data[0]=Y,s.bufferSubData(s.UNIFORM_BUFFER,z+U,b.__data)):Y.isMatrix3?(b.__data[0]=Y.elements[0],b.__data[1]=Y.elements[1],b.__data[2]=Y.elements[2],b.__data[3]=0,b.__data[4]=Y.elements[3],b.__data[5]=Y.elements[4],b.__data[6]=Y.elements[5],b.__data[7]=0,b.__data[8]=Y.elements[6],b.__data[9]=Y.elements[7],b.__data[10]=Y.elements[8],b.__data[11]=0):(Y.toArray(b.__data,U),U+=$.storage/Float32Array.BYTES_PER_ELEMENT)}s.bufferSubData(s.UNIFORM_BUFFER,z,b.__data)}}}s.bindBuffer(s.UNIFORM_BUFFER,null)}function d(M,S,v,T){const _=M.value,w=S+"_"+v;if(T[w]===void 0)return typeof _=="number"||typeof _=="boolean"?T[w]=_:T[w]=_.clone(),!0;{const P=T[w];if(typeof _=="number"||typeof _=="boolean"){if(P!==_)return T[w]=_,!0}else if(P.equals(_)===!1)return P.copy(_),!0}return!1}function p(M){const S=M.uniforms;let v=0;const T=16;for(let w=0,P=S.length;w<P;w++){const E=Array.isArray(S[w])?S[w]:[S[w]];for(let x=0,b=E.length;x<b;x++){const z=E[x],F=Array.isArray(z.value)?z.value:[z.value];for(let U=0,W=F.length;U<W;U++){const Y=F[U],$=m(Y),H=v%T,rt=H%$.boundary,ht=H+rt;v+=rt,ht!==0&&T-ht<$.storage&&(v+=T-ht),z.__data=new Float32Array($.storage/Float32Array.BYTES_PER_ELEMENT),z.__offset=v,v+=$.storage}}}const _=v%T;return _>0&&(v+=T-_),M.__size=v,M.__cache={},this}function m(M){const S={boundary:0,storage:0};return typeof M=="number"||typeof M=="boolean"?(S.boundary=4,S.storage=4):M.isVector2?(S.boundary=8,S.storage=8):M.isVector3||M.isColor?(S.boundary=16,S.storage=12):M.isVector4?(S.boundary=16,S.storage=16):M.isMatrix3?(S.boundary=48,S.storage=48):M.isMatrix4?(S.boundary=64,S.storage=64):M.isTexture?console.warn("THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group."):console.warn("THREE.WebGLRenderer: Unsupported uniform value type.",M),S}function g(M){const S=M.target;S.removeEventListener("dispose",g);const v=a.indexOf(S.__bindingPointIndex);a.splice(v,1),s.deleteBuffer(n[S.id]),delete n[S.id],delete r[S.id]}function f(){for(const M in n)s.deleteBuffer(n[M]);a=[],n={},r={}}return{bind:h,update:l,dispose:f}}class Ac{constructor(t={}){const{canvas:e=nf(),context:i=null,depth:n=!0,stencil:r=!1,alpha:a=!1,antialias:o=!1,premultipliedAlpha:h=!0,preserveDrawingBuffer:l=!1,powerPreference:A="default",failIfMajorPerformanceCaveat:c=!1,reversedDepthBuffer:u=!1}=t;this.isWebGLRenderer=!0;let d;if(i!==null){if(typeof WebGLRenderingContext<"u"&&i instanceof WebGLRenderingContext)throw new Error("THREE.WebGLRenderer: WebGL 1 is not supported since r163.");d=i.getContextAttributes().alpha}else d=a;const p=new Uint32Array(4),m=new Int32Array(4);let g=null,f=null;const M=[],S=[];this.domElement=e,this.debug={checkShaderErrors:!0,onShaderError:null},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.toneMapping=sn,this.toneMappingExposure=1,this.transmissionResolutionScale=1;const v=this;let T=!1;this._outputColorSpace=Pe;let _=0,w=0,P=null,E=-1,x=null;const b=new ce,z=new ce;let F=null;const U=new Wt(0);let W=0,Y=e.width,$=e.height,H=1,rt=null,ht=null;const mt=new ce(0,0,Y,$),Ut=new ce(0,0,Y,$);let re=!1;const te=new dl;let j=!1,ot=!1;const nt=new de,bt=new O,_t=new ce,Dt={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};let fe=!1;function Yt(){return P===null?H:1}let R=i;function ie(I,L){return e.getContext(I,L)}try{const I={alpha:!0,depth:n,stencil:r,antialias:o,premultipliedAlpha:h,preserveDrawingBuffer:l,powerPreference:A,failIfMajorPerformanceCaveat:c};if("setAttribute"in e&&e.setAttribute("data-engine",`three.js r${Xa}`),e.addEventListener("webglcontextlost",st,!1),e.addEventListener("webglcontextrestored",dt,!1),e.addEventListener("webglcontextcreationerror",q,!1),R===null){const L="webgl2";if(R=ie(L,I),R===null)throw ie(L)?new Error("Error creating WebGL context with your selected attributes."):new Error("Error creating WebGL context.")}}catch(I){throw console.error("THREE.WebGLRenderer: "+I.message),I}let yt,jt,Et,ae,ft,zt,ye,ge,y,C,B,Z,Q,X,xt,it,Ct,It,tt,ct,wt,vt,lt,Ft;function D(){yt=new im(R),yt.init(),vt=new UC(R,yt),jt=new Jp(R,yt,t,vt),Et=new FC(R,yt),jt.reversedDepthBuffer&&u&&Et.buffers.depth.setReversed(!0),ae=new rm(R),ft=new SC,zt=new BC(R,yt,Et,ft,jt,vt,ae),ye=new qp(v),ge=new em(v),y=new Yf(R),lt=new Zp(R,y),C=new nm(R,y,ae,lt),B=new om(R,C,y,ae),tt=new am(R,jt,zt),it=new Qp(ft),Z=new EC(v,ye,ge,yt,jt,lt,it),Q=new WC(v,ft),X=new MC,xt=new PC(yt),It=new Xp(v,ye,ge,Et,B,d,h),Ct=new NC(v,B,jt),Ft=new YC(R,ae,jt,Et),ct=new jp(R,yt,ae),wt=new sm(R,yt,ae),ae.programs=Z.programs,v.capabilities=jt,v.extensions=yt,v.properties=ft,v.renderLists=X,v.shadowMap=Ct,v.state=Et,v.info=ae}D();const et=new HC(v,R);this.xr=et,this.getContext=function(){return R},this.getContextAttributes=function(){return R.getContextAttributes()},this.forceContextLoss=function(){const I=yt.get("WEBGL_lose_context");I&&I.loseContext()},this.forceContextRestore=function(){const I=yt.get("WEBGL_lose_context");I&&I.restoreContext()},this.getPixelRatio=function(){return H},this.setPixelRatio=function(I){I!==void 0&&(H=I,this.setSize(Y,$,!1))},this.getSize=function(I){return I.set(Y,$)},this.setSize=function(I,L,k=!0){if(et.isPresenting){console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting.");return}Y=I,$=L,e.width=Math.floor(I*H),e.height=Math.floor(L*H),k===!0&&(e.style.width=I+"px",e.style.height=L+"px"),this.setViewport(0,0,I,L)},this.getDrawingBufferSize=function(I){return I.set(Y*H,$*H).floor()},this.setDrawingBufferSize=function(I,L,k){Y=I,$=L,H=k,e.width=Math.floor(I*k),e.height=Math.floor(L*k),this.setViewport(0,0,I,L)},this.getCurrentViewport=function(I){return I.copy(b)},this.getViewport=function(I){return I.copy(mt)},this.setViewport=function(I,L,k,G){I.isVector4?mt.set(I.x,I.y,I.z,I.w):mt.set(I,L,k,G),Et.viewport(b.copy(mt).multiplyScalar(H).round())},this.getScissor=function(I){return I.copy(Ut)},this.setScissor=function(I,L,k,G){I.isVector4?Ut.set(I.x,I.y,I.z,I.w):Ut.set(I,L,k,G),Et.scissor(z.copy(Ut).multiplyScalar(H).round())},this.getScissorTest=function(){return re},this.setScissorTest=function(I){Et.setScissorTest(re=I)},this.setOpaqueSort=function(I){rt=I},this.setTransparentSort=function(I){ht=I},this.getClearColor=function(I){return I.copy(It.getClearColor())},this.setClearColor=function(){It.setClearColor(...arguments)},this.getClearAlpha=function(){return It.getClearAlpha()},this.setClearAlpha=function(){It.setClearAlpha(...arguments)},this.clear=function(I=!0,L=!0,k=!0){let G=0;if(I){let N=!1;if(P!==null){const K=P.texture.format;N=K===uo||K===co||K===Ao}if(N){const K=P.texture.type,At=K===xi||K===Tn||K===Zs||K===Js||K===lo||K===ho,gt=It.getClearColor(),ut=It.getClearAlpha(),Tt=gt.r,Pt=gt.g,St=gt.b;At?(p[0]=Tt,p[1]=Pt,p[2]=St,p[3]=ut,R.clearBufferuiv(R.COLOR,0,p)):(m[0]=Tt,m[1]=Pt,m[2]=St,m[3]=ut,R.clearBufferiv(R.COLOR,0,m))}else G|=R.COLOR_BUFFER_BIT}L&&(G|=R.DEPTH_BUFFER_BIT),k&&(G|=R.STENCIL_BUFFER_BIT,this.state.buffers.stencil.setMask(4294967295)),R.clear(G)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.dispose=function(){e.removeEventListener("webglcontextlost",st,!1),e.removeEventListener("webglcontextrestored",dt,!1),e.removeEventListener("webglcontextcreationerror",q,!1),It.dispose(),X.dispose(),xt.dispose(),ft.dispose(),ye.dispose(),ge.dispose(),B.dispose(),lt.dispose(),Ft.dispose(),Z.dispose(),et.dispose(),et.removeEventListener("sessionstart",bi),et.removeEventListener("sessionend",Ic),Hn.stop()};function st(I){I.preventDefault(),console.log("THREE.WebGLRenderer: Context Lost."),T=!0}function dt(){console.log("THREE.WebGLRenderer: Context Restored."),T=!1;const I=ae.autoReset,L=Ct.enabled,k=Ct.autoUpdate,G=Ct.needsUpdate,N=Ct.type;D(),ae.autoReset=I,Ct.enabled=L,Ct.autoUpdate=k,Ct.needsUpdate=G,Ct.type=N}function q(I){console.error("THREE.WebGLRenderer: A WebGL context could not be created. Reason: ",I.statusMessage)}function J(I){const L=I.target;L.removeEventListener("dispose",J),pt(L)}function pt(I){Lt(I),ft.remove(I)}function Lt(I){const L=ft.get(I).programs;L!==void 0&&(L.forEach(function(k){Z.releaseProgram(k)}),I.isShaderMaterial&&Z.releaseShaderCache(I))}this.renderBufferDirect=function(I,L,k,G,N,K){L===null&&(L=Dt);const At=N.isMesh&&N.matrixWorld.determinant()<0,gt=fI(I,L,k,G,N);Et.setMaterial(G,At);let ut=k.index,Tt=1;if(G.wireframe===!0){if(ut=C.getWireframeAttribute(k),ut===void 0)return;Tt=2}const Pt=k.drawRange,St=k.attributes.position;let Gt=Pt.start*Tt,$t=(Pt.start+Pt.count)*Tt;K!==null&&(Gt=Math.max(Gt,K.start*Tt),$t=Math.min($t,(K.start+K.count)*Tt)),ut!==null?(Gt=Math.max(Gt,0),$t=Math.min($t,ut.count)):St!=null&&(Gt=Math.max(Gt,0),$t=Math.min($t,St.count));const ue=$t-Gt;if(ue<0||ue===1/0)return;lt.setup(N,G,gt,k,ut);let se,ee=ct;if(ut!==null&&(se=y.get(ut),ee=wt,ee.setIndex(se)),N.isMesh)G.wireframe===!0?(Et.setLineWidth(G.wireframeLinewidth*Yt()),ee.setMode(R.LINES)):ee.setMode(R.TRIANGLES);else if(N.isLine){let Mt=G.linewidth;Mt===void 0&&(Mt=1),Et.setLineWidth(Mt*Yt()),N.isLineSegments?ee.setMode(R.LINES):N.isLineLoop?ee.setMode(R.LINE_LOOP):ee.setMode(R.LINE_STRIP)}else N.isPoints?ee.setMode(R.POINTS):N.isSprite&&ee.setMode(R.TRIANGLES);if(N.isBatchedMesh)if(N._multiDrawInstances!==null)us("THREE.WebGLRenderer: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection."),ee.renderMultiDrawInstances(N._multiDrawStarts,N._multiDrawCounts,N._multiDrawCount,N._multiDrawInstances);else if(yt.get("WEBGL_multi_draw"))ee.renderMultiDraw(N._multiDrawStarts,N._multiDrawCounts,N._multiDrawCount);else{const Mt=N._multiDrawStarts,oe=N._multiDrawCounts,Zt=N._multiDrawCount,Je=ut?y.get(ut).bytesPerElement:1,Ls=ft.get(G).currentProgram.getUniforms();for(let Qe=0;Qe<Zt;Qe++)Ls.setValue(R,"_gl_DrawID",Qe),ee.render(Mt[Qe]/Je,oe[Qe])}else if(N.isInstancedMesh)ee.renderInstances(Gt,ue,N.count);else if(k.isInstancedBufferGeometry){const Mt=k._maxInstanceCount!==void 0?k._maxInstanceCount:1/0,oe=Math.min(k.instanceCount,Mt);ee.renderInstances(Gt,ue,oe)}else ee.render(Gt,ue)};function ne(I,L,k){I.transparent===!0&&I.side===Fi&&I.forceSinglePass===!1?(I.side=Ue,I.needsUpdate=!0,fa(I,L,k),I.side=en,I.needsUpdate=!0,fa(I,L,k),I.side=Fi):fa(I,L,k)}this.compile=function(I,L,k=null){k===null&&(k=I),f=xt.get(k),f.init(L),S.push(f),k.traverseVisible(function(N){N.isLight&&N.layers.test(L.layers)&&(f.pushLight(N),N.castShadow&&f.pushShadow(N))}),I!==k&&I.traverseVisible(function(N){N.isLight&&N.layers.test(L.layers)&&(f.pushLight(N),N.castShadow&&f.pushShadow(N))}),f.setupLights();const G=new Set;return I.traverse(function(N){if(!(N.isMesh||N.isPoints||N.isLine||N.isSprite))return;const K=N.material;if(K)if(Array.isArray(K))for(let At=0;At<K.length;At++){const gt=K[At];ne(gt,k,N),G.add(gt)}else ne(K,k,N),G.add(K)}),f=S.pop(),G},this.compileAsync=function(I,L,k=null){const G=this.compile(I,L,k);return new Promise(N=>{function K(){if(G.forEach(function(At){ft.get(At).currentProgram.isReady()&&G.delete(At)}),G.size===0){N(I);return}setTimeout(K,10)}yt.get("KHR_parallel_shader_compile")!==null?K():setTimeout(K,10)})};let Qt=null;function Wi(I){Qt&&Qt(I)}function bi(){Hn.stop()}function Ic(){Hn.start()}const Hn=new NA;Hn.setAnimationLoop(Wi),typeof self<"u"&&Hn.setContext(self),this.setAnimationLoop=function(I){Qt=I,et.setAnimationLoop(I),I===null?Hn.stop():Hn.start()},et.addEventListener("sessionstart",bi),et.addEventListener("sessionend",Ic),this.render=function(I,L){if(L!==void 0&&L.isCamera!==!0){console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");return}if(T===!0)return;if(I.matrixWorldAutoUpdate===!0&&I.updateMatrixWorld(),L.parent===null&&L.matrixWorldAutoUpdate===!0&&L.updateMatrixWorld(),et.enabled===!0&&et.isPresenting===!0&&(et.cameraAutoUpdate===!0&&et.updateCamera(L),L=et.getCamera()),I.isScene===!0&&I.onBeforeRender(v,I,L,P),f=xt.get(I,S.length),f.init(L),S.push(f),nt.multiplyMatrices(L.projectionMatrix,L.matrixWorldInverse),te.setFromProjectionMatrix(nt,Ei,L.reversedDepth),ot=this.localClippingEnabled,j=it.init(this.clippingPlanes,ot),g=X.get(I,M.length),g.init(),M.push(g),et.enabled===!0&&et.isPresenting===!0){const K=v.xr.getDepthSensingMesh();K!==null&&Rl(K,L,-1/0,v.sortObjects)}Rl(I,L,0,v.sortObjects),g.finish(),v.sortObjects===!0&&g.sort(rt,ht),fe=et.enabled===!1||et.isPresenting===!1||et.hasDepthSensing()===!1,fe&&It.addToRenderList(g,I),this.info.render.frame++,j===!0&&it.beginShadows();const k=f.state.shadowsArray;Ct.render(k,I,L),j===!0&&it.endShadows(),this.info.autoReset===!0&&this.info.reset();const G=g.opaque,N=g.transmissive;if(f.setupLights(),L.isArrayCamera){const K=L.cameras;if(N.length>0)for(let At=0,gt=K.length;At<gt;At++){const ut=K[At];xc(G,N,I,ut)}fe&&It.render(I);for(let At=0,gt=K.length;At<gt;At++){const ut=K[At];vc(g,I,ut,ut.viewport)}}else N.length>0&&xc(G,N,I,L),fe&&It.render(I),vc(g,I,L);P!==null&&w===0&&(zt.updateMultisampleRenderTarget(P),zt.updateRenderTargetMipmap(P)),I.isScene===!0&&I.onAfterRender(v,I,L),lt.resetDefaultState(),E=-1,x=null,S.pop(),S.length>0?(f=S[S.length-1],j===!0&&it.setGlobalState(v.clippingPlanes,f.state.camera)):f=null,M.pop(),M.length>0?g=M[M.length-1]:g=null};function Rl(I,L,k,G){if(I.visible===!1)return;if(I.layers.test(L.layers)){if(I.isGroup)k=I.renderOrder;else if(I.isLOD)I.autoUpdate===!0&&I.update(L);else if(I.isLight)f.pushLight(I),I.castShadow&&f.pushShadow(I);else if(I.isSprite){if(!I.frustumCulled||te.intersectsSprite(I)){G&&_t.setFromMatrixPosition(I.matrixWorld).applyMatrix4(nt);const At=B.update(I),gt=I.material;gt.visible&&g.push(I,At,gt,k,_t.z,null)}}else if((I.isMesh||I.isLine||I.isPoints)&&(!I.frustumCulled||te.intersectsObject(I))){const At=B.update(I),gt=I.material;if(G&&(I.boundingSphere!==void 0?(I.boundingSphere===null&&I.computeBoundingSphere(),_t.copy(I.boundingSphere.center)):(At.boundingSphere===null&&At.computeBoundingSphere(),_t.copy(At.boundingSphere.center)),_t.applyMatrix4(I.matrixWorld).applyMatrix4(nt)),Array.isArray(gt)){const ut=At.groups;for(let Tt=0,Pt=ut.length;Tt<Pt;Tt++){const St=ut[Tt],Gt=gt[St.materialIndex];Gt&&Gt.visible&&g.push(I,At,Gt,k,_t.z,St)}}else gt.visible&&g.push(I,At,gt,k,_t.z,null)}}const K=I.children;for(let At=0,gt=K.length;At<gt;At++)Rl(K[At],L,k,G)}function vc(I,L,k,G){const N=I.opaque,K=I.transmissive,At=I.transparent;f.setupLightsView(k),j===!0&&it.setGlobalState(v.clippingPlanes,k),G&&Et.viewport(b.copy(G)),N.length>0&&da(N,L,k),K.length>0&&da(K,L,k),At.length>0&&da(At,L,k),Et.buffers.depth.setTest(!0),Et.buffers.depth.setMask(!0),Et.buffers.color.setMask(!0),Et.setPolygonOffset(!1)}function xc(I,L,k,G){if((k.isScene===!0?k.overrideMaterial:null)!==null)return;f.state.transmissionRenderTarget[G.id]===void 0&&(f.state.transmissionRenderTarget[G.id]=new Pn(1,1,{generateMipmaps:!0,type:yt.has("EXT_color_buffer_half_float")||yt.has("EXT_color_buffer_float")?js:xi,minFilter:_n,samples:4,stencilBuffer:r,resolveDepthBuffer:!1,resolveStencilBuffer:!1,colorSpace:Xt.workingColorSpace}));const K=f.state.transmissionRenderTarget[G.id],At=G.viewport||b;K.setSize(At.z*v.transmissionResolutionScale,At.w*v.transmissionResolutionScale);const gt=v.getRenderTarget(),ut=v.getActiveCubeFace(),Tt=v.getActiveMipmapLevel();v.setRenderTarget(K),v.getClearColor(U),W=v.getClearAlpha(),W<1&&v.setClearColor(16777215,.5),v.clear(),fe&&It.render(k);const Pt=v.toneMapping;v.toneMapping=sn;const St=G.viewport;if(G.viewport!==void 0&&(G.viewport=void 0),f.setupLightsView(G),j===!0&&it.setGlobalState(v.clippingPlanes,G),da(I,k,G),zt.updateMultisampleRenderTarget(K),zt.updateRenderTargetMipmap(K),yt.has("WEBGL_multisampled_render_to_texture")===!1){let Gt=!1;for(let $t=0,ue=L.length;$t<ue;$t++){const se=L[$t],ee=se.object,Mt=se.geometry,oe=se.material,Zt=se.group;if(oe.side===Fi&&ee.layers.test(G.layers)){const Je=oe.side;oe.side=Ue,oe.needsUpdate=!0,Ec(ee,k,G,Mt,oe,Zt),oe.side=Je,oe.needsUpdate=!0,Gt=!0}}Gt===!0&&(zt.updateMultisampleRenderTarget(K),zt.updateRenderTargetMipmap(K))}v.setRenderTarget(gt,ut,Tt),v.setClearColor(U,W),St!==void 0&&(G.viewport=St),v.toneMapping=Pt}function da(I,L,k){const G=L.isScene===!0?L.overrideMaterial:null;for(let N=0,K=I.length;N<K;N++){const At=I[N],gt=At.object,ut=At.geometry,Tt=At.group;let Pt=At.material;Pt.allowOverride===!0&&G!==null&&(Pt=G),gt.layers.test(k.layers)&&Ec(gt,L,k,ut,Pt,Tt)}}function Ec(I,L,k,G,N,K){I.onBeforeRender(v,L,k,G,N,K),I.modelViewMatrix.multiplyMatrices(k.matrixWorldInverse,I.matrixWorld),I.normalMatrix.getNormalMatrix(I.modelViewMatrix),N.onBeforeRender(v,L,k,G,I,K),N.transparent===!0&&N.side===Fi&&N.forceSinglePass===!1?(N.side=Ue,N.needsUpdate=!0,v.renderBufferDirect(k,L,G,N,I,K),N.side=en,N.needsUpdate=!0,v.renderBufferDirect(k,L,G,N,I,K),N.side=Fi):v.renderBufferDirect(k,L,G,N,I,K),I.onAfterRender(v,L,k,G,N,K)}function fa(I,L,k){L.isScene!==!0&&(L=Dt);const G=ft.get(I),N=f.state.lights,K=f.state.shadowsArray,At=N.state.version,gt=Z.getParameters(I,N.state,K,L,k),ut=Z.getProgramCacheKey(gt);let Tt=G.programs;G.environment=I.isMeshStandardMaterial?L.environment:null,G.fog=L.fog,G.envMap=(I.isMeshStandardMaterial?ge:ye).get(I.envMap||G.environment),G.envMapRotation=G.environment!==null&&I.envMap===null?L.environmentRotation:I.envMapRotation,Tt===void 0&&(I.addEventListener("dispose",J),Tt=new Map,G.programs=Tt);let Pt=Tt.get(ut);if(Pt!==void 0){if(G.currentProgram===Pt&&G.lightsStateVersion===At)return yc(I,gt),Pt}else gt.uniforms=Z.getUniforms(I),I.onBeforeCompile(gt,v),Pt=Z.acquireProgram(gt,ut),Tt.set(ut,Pt),G.uniforms=gt.uniforms;const St=G.uniforms;return(!I.isShaderMaterial&&!I.isRawShaderMaterial||I.clipping===!0)&&(St.clippingPlanes=it.uniform),yc(I,gt),G.needsLights=pI(I),G.lightsStateVersion=At,G.needsLights&&(St.ambientLightColor.value=N.state.ambient,St.lightProbe.value=N.state.probe,St.directionalLights.value=N.state.directional,St.directionalLightShadows.value=N.state.directionalShadow,St.spotLights.value=N.state.spot,St.spotLightShadows.value=N.state.spotShadow,St.rectAreaLights.value=N.state.rectArea,St.ltc_1.value=N.state.rectAreaLTC1,St.ltc_2.value=N.state.rectAreaLTC2,St.pointLights.value=N.state.point,St.pointLightShadows.value=N.state.pointShadow,St.hemisphereLights.value=N.state.hemi,St.directionalShadowMap.value=N.state.directionalShadowMap,St.directionalShadowMatrix.value=N.state.directionalShadowMatrix,St.spotShadowMap.value=N.state.spotShadowMap,St.spotLightMatrix.value=N.state.spotLightMatrix,St.spotLightMap.value=N.state.spotLightMap,St.pointShadowMap.value=N.state.pointShadowMap,St.pointShadowMatrix.value=N.state.pointShadowMatrix),G.currentProgram=Pt,G.uniformsList=null,Pt}function Sc(I){if(I.uniformsList===null){const L=I.currentProgram.getUniforms();I.uniformsList=la.seqWithValue(L.seq,I.uniforms)}return I.uniformsList}function yc(I,L){const k=ft.get(I);k.outputColorSpace=L.outputColorSpace,k.batching=L.batching,k.batchingColor=L.batchingColor,k.instancing=L.instancing,k.instancingColor=L.instancingColor,k.instancingMorph=L.instancingMorph,k.skinning=L.skinning,k.morphTargets=L.morphTargets,k.morphNormals=L.morphNormals,k.morphColors=L.morphColors,k.morphTargetsCount=L.morphTargetsCount,k.numClippingPlanes=L.numClippingPlanes,k.numIntersection=L.numClipIntersection,k.vertexAlphas=L.vertexAlphas,k.vertexTangents=L.vertexTangents,k.toneMapping=L.toneMapping}function fI(I,L,k,G,N){L.isScene!==!0&&(L=Dt),zt.resetTextureUnits();const K=L.fog,At=G.isMeshStandardMaterial?L.environment:null,gt=P===null?v.outputColorSpace:P.isXRRenderTarget===!0?P.texture.colorSpace:As,ut=(G.isMeshStandardMaterial?ge:ye).get(G.envMap||At),Tt=G.vertexColors===!0&&!!k.attributes.color&&k.attributes.color.itemSize===4,Pt=!!k.attributes.tangent&&(!!G.normalMap||G.anisotropy>0),St=!!k.morphAttributes.position,Gt=!!k.morphAttributes.normal,$t=!!k.morphAttributes.color;let ue=sn;G.toneMapped&&(P===null||P.isXRRenderTarget===!0)&&(ue=v.toneMapping);const se=k.morphAttributes.position||k.morphAttributes.normal||k.morphAttributes.color,ee=se!==void 0?se.length:0,Mt=ft.get(G),oe=f.state.lights;if(j===!0&&(ot===!0||I!==x)){const Le=I===x&&G.id===E;it.setState(G,I,Le)}let Zt=!1;G.version===Mt.__version?(Mt.needsLights&&Mt.lightsStateVersion!==oe.state.version||Mt.outputColorSpace!==gt||N.isBatchedMesh&&Mt.batching===!1||!N.isBatchedMesh&&Mt.batching===!0||N.isBatchedMesh&&Mt.batchingColor===!0&&N.colorTexture===null||N.isBatchedMesh&&Mt.batchingColor===!1&&N.colorTexture!==null||N.isInstancedMesh&&Mt.instancing===!1||!N.isInstancedMesh&&Mt.instancing===!0||N.isSkinnedMesh&&Mt.skinning===!1||!N.isSkinnedMesh&&Mt.skinning===!0||N.isInstancedMesh&&Mt.instancingColor===!0&&N.instanceColor===null||N.isInstancedMesh&&Mt.instancingColor===!1&&N.instanceColor!==null||N.isInstancedMesh&&Mt.instancingMorph===!0&&N.morphTexture===null||N.isInstancedMesh&&Mt.instancingMorph===!1&&N.morphTexture!==null||Mt.envMap!==ut||G.fog===!0&&Mt.fog!==K||Mt.numClippingPlanes!==void 0&&(Mt.numClippingPlanes!==it.numPlanes||Mt.numIntersection!==it.numIntersection)||Mt.vertexAlphas!==Tt||Mt.vertexTangents!==Pt||Mt.morphTargets!==St||Mt.morphNormals!==Gt||Mt.morphColors!==$t||Mt.toneMapping!==ue||Mt.morphTargetsCount!==ee)&&(Zt=!0):(Zt=!0,Mt.__version=G.version);let Je=Mt.currentProgram;Zt===!0&&(Je=fa(G,L,N));let Ls=!1,Qe=!1,hr=!1;const le=Je.getUniforms(),ii=Mt.uniforms;if(Et.useProgram(Je.program)&&(Ls=!0,Qe=!0,hr=!0),G.id!==E&&(E=G.id,Qe=!0),Ls||x!==I){Et.buffers.depth.getReversed()&&I.reversedDepth!==!0&&(I._reversedDepth=!0,I.updateProjectionMatrix()),le.setValue(R,"projectionMatrix",I.projectionMatrix),le.setValue(R,"viewMatrix",I.matrixWorldInverse);const He=le.map.cameraPosition;He!==void 0&&He.setValue(R,bt.setFromMatrixPosition(I.matrixWorld)),jt.logarithmicDepthBuffer&&le.setValue(R,"logDepthBufFC",2/(Math.log(I.far+1)/Math.LN2)),(G.isMeshPhongMaterial||G.isMeshToonMaterial||G.isMeshLambertMaterial||G.isMeshBasicMaterial||G.isMeshStandardMaterial||G.isShaderMaterial)&&le.setValue(R,"isOrthographic",I.isOrthographicCamera===!0),x!==I&&(x=I,Qe=!0,hr=!0)}if(N.isSkinnedMesh){le.setOptional(R,N,"bindMatrix"),le.setOptional(R,N,"bindMatrixInverse");const Le=N.skeleton;Le&&(Le.boneTexture===null&&Le.computeBoneTexture(),le.setValue(R,"boneTexture",Le.boneTexture,zt))}N.isBatchedMesh&&(le.setOptional(R,N,"batchingTexture"),le.setValue(R,"batchingTexture",N._matricesTexture,zt),le.setOptional(R,N,"batchingIdTexture"),le.setValue(R,"batchingIdTexture",N._indirectTexture,zt),le.setOptional(R,N,"batchingColorTexture"),N._colorsTexture!==null&&le.setValue(R,"batchingColorTexture",N._colorsTexture,zt));const ni=k.morphAttributes;if((ni.position!==void 0||ni.normal!==void 0||ni.color!==void 0)&&tt.update(N,k,Je),(Qe||Mt.receiveShadow!==N.receiveShadow)&&(Mt.receiveShadow=N.receiveShadow,le.setValue(R,"receiveShadow",N.receiveShadow)),G.isMeshGouraudMaterial&&G.envMap!==null&&(ii.envMap.value=ut,ii.flipEnvMap.value=ut.isCubeTexture&&ut.isRenderTargetTexture===!1?-1:1),G.isMeshStandardMaterial&&G.envMap===null&&L.environment!==null&&(ii.envMapIntensity.value=L.environmentIntensity),Qe&&(le.setValue(R,"toneMappingExposure",v.toneMappingExposure),Mt.needsLights&&gI(ii,hr),K&&G.fog===!0&&Q.refreshFogUniforms(ii,K),Q.refreshMaterialUniforms(ii,G,H,$,f.state.transmissionRenderTarget[I.id]),la.upload(R,Sc(Mt),ii,zt)),G.isShaderMaterial&&G.uniformsNeedUpdate===!0&&(la.upload(R,Sc(Mt),ii,zt),G.uniformsNeedUpdate=!1),G.isSpriteMaterial&&le.setValue(R,"center",N.center),le.setValue(R,"modelViewMatrix",N.modelViewMatrix),le.setValue(R,"normalMatrix",N.normalMatrix),le.setValue(R,"modelMatrix",N.matrixWorld),G.isShaderMaterial||G.isRawShaderMaterial){const Le=G.uniformsGroups;for(let He=0,Pl=Le.length;He<Pl;He++){const Vn=Le[He];Ft.update(Vn,Je),Ft.bind(Vn,Je)}}return Je}function gI(I,L){I.ambientLightColor.needsUpdate=L,I.lightProbe.needsUpdate=L,I.directionalLights.needsUpdate=L,I.directionalLightShadows.needsUpdate=L,I.pointLights.needsUpdate=L,I.pointLightShadows.needsUpdate=L,I.spotLights.needsUpdate=L,I.spotLightShadows.needsUpdate=L,I.rectAreaLights.needsUpdate=L,I.hemisphereLights.needsUpdate=L}function pI(I){return I.isMeshLambertMaterial||I.isMeshToonMaterial||I.isMeshPhongMaterial||I.isMeshStandardMaterial||I.isShadowMaterial||I.isShaderMaterial&&I.lights===!0}this.getActiveCubeFace=function(){return _},this.getActiveMipmapLevel=function(){return w},this.getRenderTarget=function(){return P},this.setRenderTargetTextures=function(I,L,k){const G=ft.get(I);G.__autoAllocateDepthBuffer=I.resolveDepthBuffer===!1,G.__autoAllocateDepthBuffer===!1&&(G.__useRenderToTexture=!1),ft.get(I.texture).__webglTexture=L,ft.get(I.depthTexture).__webglTexture=G.__autoAllocateDepthBuffer?void 0:k,G.__hasExternalTextures=!0},this.setRenderTargetFramebuffer=function(I,L){const k=ft.get(I);k.__webglFramebuffer=L,k.__useDefaultFramebuffer=L===void 0};const mI=R.createFramebuffer();this.setRenderTarget=function(I,L=0,k=0){P=I,_=L,w=k;let G=!0,N=null,K=!1,At=!1;if(I){const ut=ft.get(I);if(ut.__useDefaultFramebuffer!==void 0)Et.bindFramebuffer(R.FRAMEBUFFER,null),G=!1;else if(ut.__webglFramebuffer===void 0)zt.setupRenderTarget(I);else if(ut.__hasExternalTextures)zt.rebindTextures(I,ft.get(I.texture).__webglTexture,ft.get(I.depthTexture).__webglTexture);else if(I.depthBuffer){const St=I.depthTexture;if(ut.__boundDepthTexture!==St){if(St!==null&&ft.has(St)&&(I.width!==St.image.width||I.height!==St.image.height))throw new Error("WebGLRenderTarget: Attached DepthTexture is initialized to the incorrect size.");zt.setupDepthRenderbuffer(I)}}const Tt=I.texture;(Tt.isData3DTexture||Tt.isDataArrayTexture||Tt.isCompressedArrayTexture)&&(At=!0);const Pt=ft.get(I).__webglFramebuffer;I.isWebGLCubeRenderTarget?(Array.isArray(Pt[L])?N=Pt[L][k]:N=Pt[L],K=!0):I.samples>0&&zt.useMultisampledRTT(I)===!1?N=ft.get(I).__webglMultisampledFramebuffer:Array.isArray(Pt)?N=Pt[k]:N=Pt,b.copy(I.viewport),z.copy(I.scissor),F=I.scissorTest}else b.copy(mt).multiplyScalar(H).floor(),z.copy(Ut).multiplyScalar(H).floor(),F=re;if(k!==0&&(N=mI),Et.bindFramebuffer(R.FRAMEBUFFER,N)&&G&&Et.drawBuffers(I,N),Et.viewport(b),Et.scissor(z),Et.setScissorTest(F),K){const ut=ft.get(I.texture);R.framebufferTexture2D(R.FRAMEBUFFER,R.COLOR_ATTACHMENT0,R.TEXTURE_CUBE_MAP_POSITIVE_X+L,ut.__webglTexture,k)}else if(At){const ut=L;for(let Tt=0;Tt<I.textures.length;Tt++){const Pt=ft.get(I.textures[Tt]);R.framebufferTextureLayer(R.FRAMEBUFFER,R.COLOR_ATTACHMENT0+Tt,Pt.__webglTexture,k,ut)}}else if(I!==null&&k!==0){const ut=ft.get(I.texture);R.framebufferTexture2D(R.FRAMEBUFFER,R.COLOR_ATTACHMENT0,R.TEXTURE_2D,ut.__webglTexture,k)}E=-1},this.readRenderTargetPixels=function(I,L,k,G,N,K,At,gt=0){if(!(I&&I.isWebGLRenderTarget)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");return}let ut=ft.get(I).__webglFramebuffer;if(I.isWebGLCubeRenderTarget&&At!==void 0&&(ut=ut[At]),ut){Et.bindFramebuffer(R.FRAMEBUFFER,ut);try{const Tt=I.textures[gt],Pt=Tt.format,St=Tt.type;if(!jt.textureFormatReadable(Pt)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");return}if(!jt.textureTypeReadable(St)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");return}L>=0&&L<=I.width-G&&k>=0&&k<=I.height-N&&(I.textures.length>1&&R.readBuffer(R.COLOR_ATTACHMENT0+gt),R.readPixels(L,k,G,N,vt.convert(Pt),vt.convert(St),K))}finally{const Tt=P!==null?ft.get(P).__webglFramebuffer:null;Et.bindFramebuffer(R.FRAMEBUFFER,Tt)}}},this.readRenderTargetPixelsAsync=async function(I,L,k,G,N,K,At,gt=0){if(!(I&&I.isWebGLRenderTarget))throw new Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let ut=ft.get(I).__webglFramebuffer;if(I.isWebGLCubeRenderTarget&&At!==void 0&&(ut=ut[At]),ut)if(L>=0&&L<=I.width-G&&k>=0&&k<=I.height-N){Et.bindFramebuffer(R.FRAMEBUFFER,ut);const Tt=I.textures[gt],Pt=Tt.format,St=Tt.type;if(!jt.textureFormatReadable(Pt))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.");if(!jt.textureTypeReadable(St))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.");const Gt=R.createBuffer();R.bindBuffer(R.PIXEL_PACK_BUFFER,Gt),R.bufferData(R.PIXEL_PACK_BUFFER,K.byteLength,R.STREAM_READ),I.textures.length>1&&R.readBuffer(R.COLOR_ATTACHMENT0+gt),R.readPixels(L,k,G,N,vt.convert(Pt),vt.convert(St),0);const $t=P!==null?ft.get(P).__webglFramebuffer:null;Et.bindFramebuffer(R.FRAMEBUFFER,$t);const ue=R.fenceSync(R.SYNC_GPU_COMMANDS_COMPLETE,0);return R.flush(),await sf(R,ue,4),R.bindBuffer(R.PIXEL_PACK_BUFFER,Gt),R.getBufferSubData(R.PIXEL_PACK_BUFFER,0,K),R.deleteBuffer(Gt),R.deleteSync(ue),K}else throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.")},this.copyFramebufferToTexture=function(I,L=null,k=0){const G=Math.pow(2,-k),N=Math.floor(I.image.width*G),K=Math.floor(I.image.height*G),At=L!==null?L.x:0,gt=L!==null?L.y:0;zt.setTexture2D(I,0),R.copyTexSubImage2D(R.TEXTURE_2D,k,0,0,At,gt,N,K),Et.unbindTexture()};const CI=R.createFramebuffer(),II=R.createFramebuffer();this.copyTextureToTexture=function(I,L,k=null,G=null,N=0,K=null){K===null&&(N!==0?(us("WebGLRenderer: copyTextureToTexture function signature has changed to support src and dst mipmap levels."),K=N,N=0):K=0);let At,gt,ut,Tt,Pt,St,Gt,$t,ue;const se=I.isCompressedTexture?I.mipmaps[K]:I.image;if(k!==null)At=k.max.x-k.min.x,gt=k.max.y-k.min.y,ut=k.isBox3?k.max.z-k.min.z:1,Tt=k.min.x,Pt=k.min.y,St=k.isBox3?k.min.z:0;else{const ni=Math.pow(2,-N);At=Math.floor(se.width*ni),gt=Math.floor(se.height*ni),I.isDataArrayTexture?ut=se.depth:I.isData3DTexture?ut=Math.floor(se.depth*ni):ut=1,Tt=0,Pt=0,St=0}G!==null?(Gt=G.x,$t=G.y,ue=G.z):(Gt=0,$t=0,ue=0);const ee=vt.convert(L.format),Mt=vt.convert(L.type);let oe;L.isData3DTexture?(zt.setTexture3D(L,0),oe=R.TEXTURE_3D):L.isDataArrayTexture||L.isCompressedArrayTexture?(zt.setTexture2DArray(L,0),oe=R.TEXTURE_2D_ARRAY):(zt.setTexture2D(L,0),oe=R.TEXTURE_2D),R.pixelStorei(R.UNPACK_FLIP_Y_WEBGL,L.flipY),R.pixelStorei(R.UNPACK_PREMULTIPLY_ALPHA_WEBGL,L.premultiplyAlpha),R.pixelStorei(R.UNPACK_ALIGNMENT,L.unpackAlignment);const Zt=R.getParameter(R.UNPACK_ROW_LENGTH),Je=R.getParameter(R.UNPACK_IMAGE_HEIGHT),Ls=R.getParameter(R.UNPACK_SKIP_PIXELS),Qe=R.getParameter(R.UNPACK_SKIP_ROWS),hr=R.getParameter(R.UNPACK_SKIP_IMAGES);R.pixelStorei(R.UNPACK_ROW_LENGTH,se.width),R.pixelStorei(R.UNPACK_IMAGE_HEIGHT,se.height),R.pixelStorei(R.UNPACK_SKIP_PIXELS,Tt),R.pixelStorei(R.UNPACK_SKIP_ROWS,Pt),R.pixelStorei(R.UNPACK_SKIP_IMAGES,St);const le=I.isDataArrayTexture||I.isData3DTexture,ii=L.isDataArrayTexture||L.isData3DTexture;if(I.isDepthTexture){const ni=ft.get(I),Le=ft.get(L),He=ft.get(ni.__renderTarget),Pl=ft.get(Le.__renderTarget);Et.bindFramebuffer(R.READ_FRAMEBUFFER,He.__webglFramebuffer),Et.bindFramebuffer(R.DRAW_FRAMEBUFFER,Pl.__webglFramebuffer);for(let Vn=0;Vn<ut;Vn++)le&&(R.framebufferTextureLayer(R.READ_FRAMEBUFFER,R.COLOR_ATTACHMENT0,ft.get(I).__webglTexture,N,St+Vn),R.framebufferTextureLayer(R.DRAW_FRAMEBUFFER,R.COLOR_ATTACHMENT0,ft.get(L).__webglTexture,K,ue+Vn)),R.blitFramebuffer(Tt,Pt,At,gt,Gt,$t,At,gt,R.DEPTH_BUFFER_BIT,R.NEAREST);Et.bindFramebuffer(R.READ_FRAMEBUFFER,null),Et.bindFramebuffer(R.DRAW_FRAMEBUFFER,null)}else if(N!==0||I.isRenderTargetTexture||ft.has(I)){const ni=ft.get(I),Le=ft.get(L);Et.bindFramebuffer(R.READ_FRAMEBUFFER,CI),Et.bindFramebuffer(R.DRAW_FRAMEBUFFER,II);for(let He=0;He<ut;He++)le?R.framebufferTextureLayer(R.READ_FRAMEBUFFER,R.COLOR_ATTACHMENT0,ni.__webglTexture,N,St+He):R.framebufferTexture2D(R.READ_FRAMEBUFFER,R.COLOR_ATTACHMENT0,R.TEXTURE_2D,ni.__webglTexture,N),ii?R.framebufferTextureLayer(R.DRAW_FRAMEBUFFER,R.COLOR_ATTACHMENT0,Le.__webglTexture,K,ue+He):R.framebufferTexture2D(R.DRAW_FRAMEBUFFER,R.COLOR_ATTACHMENT0,R.TEXTURE_2D,Le.__webglTexture,K),N!==0?R.blitFramebuffer(Tt,Pt,At,gt,Gt,$t,At,gt,R.COLOR_BUFFER_BIT,R.NEAREST):ii?R.copyTexSubImage3D(oe,K,Gt,$t,ue+He,Tt,Pt,At,gt):R.copyTexSubImage2D(oe,K,Gt,$t,Tt,Pt,At,gt);Et.bindFramebuffer(R.READ_FRAMEBUFFER,null),Et.bindFramebuffer(R.DRAW_FRAMEBUFFER,null)}else ii?I.isDataTexture||I.isData3DTexture?R.texSubImage3D(oe,K,Gt,$t,ue,At,gt,ut,ee,Mt,se.data):L.isCompressedArrayTexture?R.compressedTexSubImage3D(oe,K,Gt,$t,ue,At,gt,ut,ee,se.data):R.texSubImage3D(oe,K,Gt,$t,ue,At,gt,ut,ee,Mt,se):I.isDataTexture?R.texSubImage2D(R.TEXTURE_2D,K,Gt,$t,At,gt,ee,Mt,se.data):I.isCompressedTexture?R.compressedTexSubImage2D(R.TEXTURE_2D,K,Gt,$t,se.width,se.height,ee,se.data):R.texSubImage2D(R.TEXTURE_2D,K,Gt,$t,At,gt,ee,Mt,se);R.pixelStorei(R.UNPACK_ROW_LENGTH,Zt),R.pixelStorei(R.UNPACK_IMAGE_HEIGHT,Je),R.pixelStorei(R.UNPACK_SKIP_PIXELS,Ls),R.pixelStorei(R.UNPACK_SKIP_ROWS,Qe),R.pixelStorei(R.UNPACK_SKIP_IMAGES,hr),K===0&&L.generateMipmaps&&R.generateMipmap(oe),Et.unbindTexture()},this.copyTextureToTexture3D=function(I,L,k=null,G=null,N=0){return us('WebGLRenderer: copyTextureToTexture3D function has been deprecated. Use "copyTextureToTexture" instead.'),this.copyTextureToTexture(I,L,k,G,N)},this.initRenderTarget=function(I){ft.get(I).__webglFramebuffer===void 0&&zt.setupRenderTarget(I)},this.initTexture=function(I){I.isCubeTexture?zt.setTextureCube(I,0):I.isData3DTexture?zt.setTexture3D(I,0):I.isDataArrayTexture||I.isCompressedArrayTexture?zt.setTexture2DArray(I,0):zt.setTexture2D(I,0),Et.unbindTexture()},this.resetState=function(){_=0,w=0,P=null,Et.reset(),lt.reset()},typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}get coordinateSystem(){return Ei}get outputColorSpace(){return this._outputColorSpace}set outputColorSpace(t){this._outputColorSpace=t;const e=this.getContext();e.drawingBufferColorSpace=Xt._getDrawingBufferColorSpace(t),e.unpackColorSpace=Xt._getUnpackColorSpace()}}const cc={type:"change"},bl={type:"start"},uc={type:"end"},Aa=new eA,dc=new dn,XC=Math.cos(70*ef.DEG2RAD),ve=new O,Ge=2*Math.PI,Kt={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6},_l=1e-6;class ZC extends Vf{constructor(t,e=null){super(t,e),this.state=Kt.NONE,this.target=new O,this.cursor=new O,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minTargetRadius=0,this.maxTargetRadius=1/0,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.enableDamping=!1,this.dampingFactor=.05,this.enableZoom=!0,this.zoomSpeed=1,this.enableRotate=!0,this.rotateSpeed=1,this.keyRotateSpeed=1,this.enablePan=!0,this.panSpeed=1,this.screenSpacePanning=!0,this.keyPanSpeed=7,this.zoomToCursor=!1,this.autoRotate=!1,this.autoRotateSpeed=2,this.keys={LEFT:"ArrowLeft",UP:"ArrowUp",RIGHT:"ArrowRight",BOTTOM:"ArrowDown"},this.mouseButtons={LEFT:ss.ROTATE,MIDDLE:ss.DOLLY,RIGHT:ss.PAN},this.touches={ONE:rs.ROTATE,TWO:rs.DOLLY_PAN},this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this._domElementKeyEvents=null,this._lastPosition=new O,this._lastQuaternion=new Rn,this._lastTargetPosition=new O,this._quat=new Rn().setFromUnitVectors(t.up,new O(0,1,0)),this._quatInverse=this._quat.clone().invert(),this._spherical=new DA,this._sphericalDelta=new DA,this._scale=1,this._panOffset=new O,this._rotateStart=new Nt,this._rotateEnd=new Nt,this._rotateDelta=new Nt,this._panStart=new Nt,this._panEnd=new Nt,this._panDelta=new Nt,this._dollyStart=new Nt,this._dollyEnd=new Nt,this._dollyDelta=new Nt,this._dollyDirection=new O,this._mouse=new Nt,this._performCursorZoom=!1,this._pointers=[],this._pointerPositions={},this._controlActive=!1,this._onPointerMove=JC.bind(this),this._onPointerDown=jC.bind(this),this._onPointerUp=QC.bind(this),this._onContextMenu=nI.bind(this),this._onMouseWheel=$C.bind(this),this._onKeyDown=tI.bind(this),this._onTouchStart=eI.bind(this),this._onTouchMove=iI.bind(this),this._onMouseDown=qC.bind(this),this._onMouseMove=KC.bind(this),this._interceptControlDown=sI.bind(this),this._interceptControlUp=rI.bind(this),this.domElement!==null&&this.connect(this.domElement),this.update()}connect(t){super.connect(t),this.domElement.addEventListener("pointerdown",this._onPointerDown),this.domElement.addEventListener("pointercancel",this._onPointerUp),this.domElement.addEventListener("contextmenu",this._onContextMenu),this.domElement.addEventListener("wheel",this._onMouseWheel,{passive:!1}),this.domElement.getRootNode().addEventListener("keydown",this._interceptControlDown,{passive:!0,capture:!0}),this.domElement.style.touchAction="none"}disconnect(){this.domElement.removeEventListener("pointerdown",this._onPointerDown),this.domElement.removeEventListener("pointermove",this._onPointerMove),this.domElement.removeEventListener("pointerup",this._onPointerUp),this.domElement.removeEventListener("pointercancel",this._onPointerUp),this.domElement.removeEventListener("wheel",this._onMouseWheel),this.domElement.removeEventListener("contextmenu",this._onContextMenu),this.stopListenToKeyEvents(),this.domElement.getRootNode().removeEventListener("keydown",this._interceptControlDown,{capture:!0}),this.domElement.style.touchAction="auto"}dispose(){this.disconnect()}getPolarAngle(){return this._spherical.phi}getAzimuthalAngle(){return this._spherical.theta}getDistance(){return this.object.position.distanceTo(this.target)}listenToKeyEvents(t){t.addEventListener("keydown",this._onKeyDown),this._domElementKeyEvents=t}stopListenToKeyEvents(){this._domElementKeyEvents!==null&&(this._domElementKeyEvents.removeEventListener("keydown",this._onKeyDown),this._domElementKeyEvents=null)}saveState(){this.target0.copy(this.target),this.position0.copy(this.object.position),this.zoom0=this.object.zoom}reset(){this.target.copy(this.target0),this.object.position.copy(this.position0),this.object.zoom=this.zoom0,this.object.updateProjectionMatrix(),this.dispatchEvent(cc),this.update(),this.state=Kt.NONE}update(t=null){const e=this.object.position;ve.copy(e).sub(this.target),ve.applyQuaternion(this._quat),this._spherical.setFromVector3(ve),this.autoRotate&&this.state===Kt.NONE&&this._rotateLeft(this._getAutoRotationAngle(t)),this.enableDamping?(this._spherical.theta+=this._sphericalDelta.theta*this.dampingFactor,this._spherical.phi+=this._sphericalDelta.phi*this.dampingFactor):(this._spherical.theta+=this._sphericalDelta.theta,this._spherical.phi+=this._sphericalDelta.phi);let i=this.minAzimuthAngle,n=this.maxAzimuthAngle;isFinite(i)&&isFinite(n)&&(i<-Math.PI?i+=Ge:i>Math.PI&&(i-=Ge),n<-Math.PI?n+=Ge:n>Math.PI&&(n-=Ge),i<=n?this._spherical.theta=Math.max(i,Math.min(n,this._spherical.theta)):this._spherical.theta=this._spherical.theta>(i+n)/2?Math.max(i,this._spherical.theta):Math.min(n,this._spherical.theta)),this._spherical.phi=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,this._spherical.phi)),this._spherical.makeSafe(),this.enableDamping===!0?this.target.addScaledVector(this._panOffset,this.dampingFactor):this.target.add(this._panOffset),this.target.sub(this.cursor),this.target.clampLength(this.minTargetRadius,this.maxTargetRadius),this.target.add(this.cursor);let r=!1;if(this.zoomToCursor&&this._performCursorZoom||this.object.isOrthographicCamera)this._spherical.radius=this._clampDistance(this._spherical.radius);else{const a=this._spherical.radius;this._spherical.radius=this._clampDistance(this._spherical.radius*this._scale),r=a!=this._spherical.radius}if(ve.setFromSpherical(this._spherical),ve.applyQuaternion(this._quatInverse),e.copy(this.target).add(ve),this.object.lookAt(this.target),this.enableDamping===!0?(this._sphericalDelta.theta*=1-this.dampingFactor,this._sphericalDelta.phi*=1-this.dampingFactor,this._panOffset.multiplyScalar(1-this.dampingFactor)):(this._sphericalDelta.set(0,0,0),this._panOffset.set(0,0,0)),this.zoomToCursor&&this._performCursorZoom){let a=null;if(this.object.isPerspectiveCamera){const o=ve.length();a=this._clampDistance(o*this._scale);const h=o-a;this.object.position.addScaledVector(this._dollyDirection,h),this.object.updateMatrixWorld(),r=!!h}else if(this.object.isOrthographicCamera){const o=new O(this._mouse.x,this._mouse.y,0);o.unproject(this.object);const h=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),this.object.updateProjectionMatrix(),r=h!==this.object.zoom;const l=new O(this._mouse.x,this._mouse.y,0);l.unproject(this.object),this.object.position.sub(l).add(o),this.object.updateMatrixWorld(),a=ve.length()}else console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."),this.zoomToCursor=!1;a!==null&&(this.screenSpacePanning?this.target.set(0,0,-1).transformDirection(this.object.matrix).multiplyScalar(a).add(this.object.position):(Aa.origin.copy(this.object.position),Aa.direction.set(0,0,-1).transformDirection(this.object.matrix),Math.abs(this.object.up.dot(Aa.direction))<XC?this.object.lookAt(this.target):(dc.setFromNormalAndCoplanarPoint(this.object.up,this.target),Aa.intersectPlane(dc,this.target))))}else if(this.object.isOrthographicCamera){const a=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),a!==this.object.zoom&&(this.object.updateProjectionMatrix(),r=!0)}return this._scale=1,this._performCursorZoom=!1,r||this._lastPosition.distanceToSquared(this.object.position)>_l||8*(1-this._lastQuaternion.dot(this.object.quaternion))>_l||this._lastTargetPosition.distanceToSquared(this.target)>_l?(this.dispatchEvent(cc),this._lastPosition.copy(this.object.position),this._lastQuaternion.copy(this.object.quaternion),this._lastTargetPosition.copy(this.target),!0):!1}_getAutoRotationAngle(t){return t!==null?Ge/60*this.autoRotateSpeed*t:Ge/60/60*this.autoRotateSpeed}_getZoomScale(t){const e=Math.abs(t*.01);return Math.pow(.95,this.zoomSpeed*e)}_rotateLeft(t){this._sphericalDelta.theta-=t}_rotateUp(t){this._sphericalDelta.phi-=t}_panLeft(t,e){ve.setFromMatrixColumn(e,0),ve.multiplyScalar(-t),this._panOffset.add(ve)}_panUp(t,e){this.screenSpacePanning===!0?ve.setFromMatrixColumn(e,1):(ve.setFromMatrixColumn(e,0),ve.crossVectors(this.object.up,ve)),ve.multiplyScalar(t),this._panOffset.add(ve)}_pan(t,e){const i=this.domElement;if(this.object.isPerspectiveCamera){const n=this.object.position;ve.copy(n).sub(this.target);let r=ve.length();r*=Math.tan(this.object.fov/2*Math.PI/180),this._panLeft(2*t*r/i.clientHeight,this.object.matrix),this._panUp(2*e*r/i.clientHeight,this.object.matrix)}else this.object.isOrthographicCamera?(this._panLeft(t*(this.object.right-this.object.left)/this.object.zoom/i.clientWidth,this.object.matrix),this._panUp(e*(this.object.top-this.object.bottom)/this.object.zoom/i.clientHeight,this.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),this.enablePan=!1)}_dollyOut(t){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale/=t:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_dollyIn(t){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale*=t:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_updateZoomParameters(t,e){if(!this.zoomToCursor)return;this._performCursorZoom=!0;const i=this.domElement.getBoundingClientRect(),n=t-i.left,r=e-i.top,a=i.width,o=i.height;this._mouse.x=n/a*2-1,this._mouse.y=-(r/o)*2+1,this._dollyDirection.set(this._mouse.x,this._mouse.y,1).unproject(this.object).sub(this.object.position).normalize()}_clampDistance(t){return Math.max(this.minDistance,Math.min(this.maxDistance,t))}_handleMouseDownRotate(t){this._rotateStart.set(t.clientX,t.clientY)}_handleMouseDownDolly(t){this._updateZoomParameters(t.clientX,t.clientX),this._dollyStart.set(t.clientX,t.clientY)}_handleMouseDownPan(t){this._panStart.set(t.clientX,t.clientY)}_handleMouseMoveRotate(t){this._rotateEnd.set(t.clientX,t.clientY),this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const e=this.domElement;this._rotateLeft(Ge*this._rotateDelta.x/e.clientHeight),this._rotateUp(Ge*this._rotateDelta.y/e.clientHeight),this._rotateStart.copy(this._rotateEnd),this.update()}_handleMouseMoveDolly(t){this._dollyEnd.set(t.clientX,t.clientY),this._dollyDelta.subVectors(this._dollyEnd,this._dollyStart),this._dollyDelta.y>0?this._dollyOut(this._getZoomScale(this._dollyDelta.y)):this._dollyDelta.y<0&&this._dollyIn(this._getZoomScale(this._dollyDelta.y)),this._dollyStart.copy(this._dollyEnd),this.update()}_handleMouseMovePan(t){this._panEnd.set(t.clientX,t.clientY),this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd),this.update()}_handleMouseWheel(t){this._updateZoomParameters(t.clientX,t.clientY),t.deltaY<0?this._dollyIn(this._getZoomScale(t.deltaY)):t.deltaY>0&&this._dollyOut(this._getZoomScale(t.deltaY)),this.update()}_handleKeyDown(t){let e=!1;switch(t.code){case this.keys.UP:t.ctrlKey||t.metaKey||t.shiftKey?this.enableRotate&&this._rotateUp(Ge*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,this.keyPanSpeed),e=!0;break;case this.keys.BOTTOM:t.ctrlKey||t.metaKey||t.shiftKey?this.enableRotate&&this._rotateUp(-Ge*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,-this.keyPanSpeed),e=!0;break;case this.keys.LEFT:t.ctrlKey||t.metaKey||t.shiftKey?this.enableRotate&&this._rotateLeft(Ge*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(this.keyPanSpeed,0),e=!0;break;case this.keys.RIGHT:t.ctrlKey||t.metaKey||t.shiftKey?this.enableRotate&&this._rotateLeft(-Ge*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(-this.keyPanSpeed,0),e=!0;break}e&&(t.preventDefault(),this.update())}_handleTouchStartRotate(t){if(this._pointers.length===1)this._rotateStart.set(t.pageX,t.pageY);else{const e=this._getSecondPointerPosition(t),i=.5*(t.pageX+e.x),n=.5*(t.pageY+e.y);this._rotateStart.set(i,n)}}_handleTouchStartPan(t){if(this._pointers.length===1)this._panStart.set(t.pageX,t.pageY);else{const e=this._getSecondPointerPosition(t),i=.5*(t.pageX+e.x),n=.5*(t.pageY+e.y);this._panStart.set(i,n)}}_handleTouchStartDolly(t){const e=this._getSecondPointerPosition(t),i=t.pageX-e.x,n=t.pageY-e.y,r=Math.sqrt(i*i+n*n);this._dollyStart.set(0,r)}_handleTouchStartDollyPan(t){this.enableZoom&&this._handleTouchStartDolly(t),this.enablePan&&this._handleTouchStartPan(t)}_handleTouchStartDollyRotate(t){this.enableZoom&&this._handleTouchStartDolly(t),this.enableRotate&&this._handleTouchStartRotate(t)}_handleTouchMoveRotate(t){if(this._pointers.length==1)this._rotateEnd.set(t.pageX,t.pageY);else{const i=this._getSecondPointerPosition(t),n=.5*(t.pageX+i.x),r=.5*(t.pageY+i.y);this._rotateEnd.set(n,r)}this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const e=this.domElement;this._rotateLeft(Ge*this._rotateDelta.x/e.clientHeight),this._rotateUp(Ge*this._rotateDelta.y/e.clientHeight),this._rotateStart.copy(this._rotateEnd)}_handleTouchMovePan(t){if(this._pointers.length===1)this._panEnd.set(t.pageX,t.pageY);else{const e=this._getSecondPointerPosition(t),i=.5*(t.pageX+e.x),n=.5*(t.pageY+e.y);this._panEnd.set(i,n)}this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd)}_handleTouchMoveDolly(t){const e=this._getSecondPointerPosition(t),i=t.pageX-e.x,n=t.pageY-e.y,r=Math.sqrt(i*i+n*n);this._dollyEnd.set(0,r),this._dollyDelta.set(0,Math.pow(this._dollyEnd.y/this._dollyStart.y,this.zoomSpeed)),this._dollyOut(this._dollyDelta.y),this._dollyStart.copy(this._dollyEnd);const a=(t.pageX+e.x)*.5,o=(t.pageY+e.y)*.5;this._updateZoomParameters(a,o)}_handleTouchMoveDollyPan(t){this.enableZoom&&this._handleTouchMoveDolly(t),this.enablePan&&this._handleTouchMovePan(t)}_handleTouchMoveDollyRotate(t){this.enableZoom&&this._handleTouchMoveDolly(t),this.enableRotate&&this._handleTouchMoveRotate(t)}_addPointer(t){this._pointers.push(t.pointerId)}_removePointer(t){delete this._pointerPositions[t.pointerId];for(let e=0;e<this._pointers.length;e++)if(this._pointers[e]==t.pointerId){this._pointers.splice(e,1);return}}_isTrackingPointer(t){for(let e=0;e<this._pointers.length;e++)if(this._pointers[e]==t.pointerId)return!0;return!1}_trackPointer(t){let e=this._pointerPositions[t.pointerId];e===void 0&&(e=new Nt,this._pointerPositions[t.pointerId]=e),e.set(t.pageX,t.pageY)}_getSecondPointerPosition(t){const e=t.pointerId===this._pointers[0]?this._pointers[1]:this._pointers[0];return this._pointerPositions[e]}_customWheelEvent(t){const e=t.deltaMode,i={clientX:t.clientX,clientY:t.clientY,deltaY:t.deltaY};switch(e){case 1:i.deltaY*=16;break;case 2:i.deltaY*=100;break}return t.ctrlKey&&!this._controlActive&&(i.deltaY*=10),i}}function jC(s){this.enabled!==!1&&(this._pointers.length===0&&(this.domElement.setPointerCapture(s.pointerId),this.domElement.addEventListener("pointermove",this._onPointerMove),this.domElement.addEventListener("pointerup",this._onPointerUp)),!this._isTrackingPointer(s)&&(this._addPointer(s),s.pointerType==="touch"?this._onTouchStart(s):this._onMouseDown(s)))}function JC(s){this.enabled!==!1&&(s.pointerType==="touch"?this._onTouchMove(s):this._onMouseMove(s))}function QC(s){switch(this._removePointer(s),this._pointers.length){case 0:this.domElement.releasePointerCapture(s.pointerId),this.domElement.removeEventListener("pointermove",this._onPointerMove),this.domElement.removeEventListener("pointerup",this._onPointerUp),this.dispatchEvent(uc),this.state=Kt.NONE;break;case 1:const t=this._pointers[0],e=this._pointerPositions[t];this._onTouchStart({pointerId:t,pageX:e.x,pageY:e.y});break}}function qC(s){let t;switch(s.button){case 0:t=this.mouseButtons.LEFT;break;case 1:t=this.mouseButtons.MIDDLE;break;case 2:t=this.mouseButtons.RIGHT;break;default:t=-1}switch(t){case ss.DOLLY:if(this.enableZoom===!1)return;this._handleMouseDownDolly(s),this.state=Kt.DOLLY;break;case ss.ROTATE:if(s.ctrlKey||s.metaKey||s.shiftKey){if(this.enablePan===!1)return;this._handleMouseDownPan(s),this.state=Kt.PAN}else{if(this.enableRotate===!1)return;this._handleMouseDownRotate(s),this.state=Kt.ROTATE}break;case ss.PAN:if(s.ctrlKey||s.metaKey||s.shiftKey){if(this.enableRotate===!1)return;this._handleMouseDownRotate(s),this.state=Kt.ROTATE}else{if(this.enablePan===!1)return;this._handleMouseDownPan(s),this.state=Kt.PAN}break;default:this.state=Kt.NONE}this.state!==Kt.NONE&&this.dispatchEvent(bl)}function KC(s){switch(this.state){case Kt.ROTATE:if(this.enableRotate===!1)return;this._handleMouseMoveRotate(s);break;case Kt.DOLLY:if(this.enableZoom===!1)return;this._handleMouseMoveDolly(s);break;case Kt.PAN:if(this.enablePan===!1)return;this._handleMouseMovePan(s);break}}function $C(s){this.enabled===!1||this.enableZoom===!1||this.state!==Kt.NONE||(s.preventDefault(),this.dispatchEvent(bl),this._handleMouseWheel(this._customWheelEvent(s)),this.dispatchEvent(uc))}function tI(s){this.enabled!==!1&&this._handleKeyDown(s)}function eI(s){switch(this._trackPointer(s),this._pointers.length){case 1:switch(this.touches.ONE){case rs.ROTATE:if(this.enableRotate===!1)return;this._handleTouchStartRotate(s),this.state=Kt.TOUCH_ROTATE;break;case rs.PAN:if(this.enablePan===!1)return;this._handleTouchStartPan(s),this.state=Kt.TOUCH_PAN;break;default:this.state=Kt.NONE}break;case 2:switch(this.touches.TWO){case rs.DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this._handleTouchStartDollyPan(s),this.state=Kt.TOUCH_DOLLY_PAN;break;case rs.DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchStartDollyRotate(s),this.state=Kt.TOUCH_DOLLY_ROTATE;break;default:this.state=Kt.NONE}break;default:this.state=Kt.NONE}this.state!==Kt.NONE&&this.dispatchEvent(bl)}function iI(s){switch(this._trackPointer(s),this.state){case Kt.TOUCH_ROTATE:if(this.enableRotate===!1)return;this._handleTouchMoveRotate(s),this.update();break;case Kt.TOUCH_PAN:if(this.enablePan===!1)return;this._handleTouchMovePan(s),this.update();break;case Kt.TOUCH_DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this._handleTouchMoveDollyPan(s),this.update();break;case Kt.TOUCH_DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchMoveDollyRotate(s),this.update();break;default:this.state=Kt.NONE}}function nI(s){this.enabled!==!1&&s.preventDefault()}function sI(s){s.key==="Control"&&(this._controlActive=!0,this.domElement.getRootNode().addEventListener("keyup",this._interceptControlUp,{passive:!0,capture:!0}))}function rI(s){s.key==="Control"&&(this._controlActive=!1,this.domElement.getRootNode().removeEventListener("keyup",this._interceptControlUp,{passive:!0,capture:!0}))}const fc={LANGUAGE_CHANGE_CONFIRMED:ga.LANGUAGE_CHANGE_CONFIRMED},aI=new Set([Jt.ENGLISH_UNITED_KINGDOM]),Tl={selected:Jt.ENGLISH_UNITED_KINGDOM,options:aI},oI=`<section class="root">
|
|
3955
|
+
}`;class wI{constructor(){this.texture=null,this.mesh=null,this.depthNear=0,this.depthFar=0}init(t,e){if(this.texture===null){const i=new ec(t.texture);(t.depthNear!==e.depthNear||t.depthFar!==e.depthFar)&&(this.depthNear=t.depthNear,this.depthFar=t.depthFar),this.texture=i}}getMesh(t){if(this.texture!==null&&this.mesh===null){const e=t.cameras[0].viewport,i=new An({vertexShader:bI,fragmentShader:TI,uniforms:{depthColor:{value:this.texture},depthWidth:{value:e.z},depthHeight:{value:e.w}}});this.mesh=new fi(new ir(20,20),i)}return this.mesh}reset(){this.texture=null,this.mesh=null}getDepthTexture(){return this.texture}}class RI extends rs{constructor(t,e){super();const i=this;let n=null,s=1,a=null,o="local-floor",l=1,A=null,h=null,c=null,u=null,d=null,p=null;const m=new wI,g={},f=e.getContextAttributes();let y=null,S=null;const v=[],w=[],T=new Zt;let R=null;const P=new Ue;P.viewport=new he;const E=new Ue;E.viewport=new he;const x=[P,E],b=new _f;let z=null,F=null;this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(J){let ot=v[J];return ot===void 0&&(ot=new sA,v[J]=ot),ot.getTargetRaySpace()},this.getControllerGrip=function(J){let ot=v[J];return ot===void 0&&(ot=new sA,v[J]=ot),ot.getGripSpace()},this.getHand=function(J){let ot=v[J];return ot===void 0&&(ot=new sA,v[J]=ot),ot.getHandSpace()};function U(J){const ot=w.indexOf(J.inputSource);if(ot===-1)return;const nt=v[ot];nt!==void 0&&(nt.update(J.inputSource,J.frame,A||a),nt.dispatchEvent({type:J.type,data:J.inputSource}))}function W(){n.removeEventListener("select",U),n.removeEventListener("selectstart",U),n.removeEventListener("selectend",U),n.removeEventListener("squeeze",U),n.removeEventListener("squeezestart",U),n.removeEventListener("squeezeend",U),n.removeEventListener("end",W),n.removeEventListener("inputsourceschange",Y);for(let J=0;J<v.length;J++){const ot=w[J];ot!==null&&(w[J]=null,v[J].disconnect(ot))}z=null,F=null,m.reset();for(const J in g)delete g[J];t.setRenderTarget(y),d=null,u=null,c=null,n=null,S=null,$t.stop(),i.isPresenting=!1,t.setPixelRatio(R),t.setSize(T.width,T.height,!1),i.dispatchEvent({type:"sessionend"})}this.setFramebufferScaleFactor=function(J){s=J,i.isPresenting===!0&&console.warn("THREE.WebXRManager: Cannot change framebuffer scale while presenting.")},this.setReferenceSpaceType=function(J){o=J,i.isPresenting===!0&&console.warn("THREE.WebXRManager: Cannot change reference space type while presenting.")},this.getReferenceSpace=function(){return A||a},this.setReferenceSpace=function(J){A=J},this.getBaseLayer=function(){return u!==null?u:d},this.getBinding=function(){return c},this.getFrame=function(){return p},this.getSession=function(){return n},this.setSession=async function(J){if(n=J,n!==null){if(y=t.getRenderTarget(),n.addEventListener("select",U),n.addEventListener("selectstart",U),n.addEventListener("selectend",U),n.addEventListener("squeeze",U),n.addEventListener("squeezestart",U),n.addEventListener("squeezeend",U),n.addEventListener("end",W),n.addEventListener("inputsourceschange",Y),f.xrCompatible!==!0&&await e.makeXRCompatible(),R=t.getPixelRatio(),t.getSize(T),typeof XRWebGLBinding<"u"&&(c=new XRWebGLBinding(n,e)),c!==null&&"createProjectionLayer"in XRWebGLBinding.prototype){let nt=null,bt=null,Tt=null;f.depth&&(Tt=f.stencil?e.DEPTH24_STENCIL8:e.DEPTH_COMPONENT24,nt=f.stencil?Ys:Ws,bt=f.stencil?Vs:Sn);const Dt={colorFormat:e.RGBA8,depthFormat:Tt,scaleFactor:s};u=c.createProjectionLayer(Dt),n.updateRenderState({layers:[u]}),t.setPixelRatio(1),t.setSize(u.textureWidth,u.textureHeight,!1),S=new Mn(u.textureWidth,u.textureHeight,{format:li,type:Ii,depthTexture:new mh(u.textureWidth,u.textureHeight,bt,void 0,void 0,void 0,void 0,void 0,void 0,nt),stencilBuffer:f.stencil,colorSpace:t.outputColorSpace,samples:f.antialias?4:0,resolveDepthBuffer:u.ignoreDepthValues===!1,resolveStencilBuffer:u.ignoreDepthValues===!1})}else{const nt={antialias:f.antialias,alpha:!0,depth:f.depth,stencil:f.stencil,framebufferScaleFactor:s};d=new XRWebGLLayer(n,e,nt),n.updateRenderState({baseLayer:d}),t.setPixelRatio(1),t.setSize(d.framebufferWidth,d.framebufferHeight,!1),S=new Mn(d.framebufferWidth,d.framebufferHeight,{format:li,type:Ii,colorSpace:t.outputColorSpace,stencilBuffer:f.stencil,resolveDepthBuffer:d.ignoreDepthValues===!1,resolveStencilBuffer:d.ignoreDepthValues===!1})}S.isXRRenderTarget=!0,this.setFoveation(l),A=null,a=await n.requestReferenceSpace(o),$t.setContext(n),$t.start(),i.isPresenting=!0,i.dispatchEvent({type:"sessionstart"})}},this.getEnvironmentBlendMode=function(){if(n!==null)return n.environmentBlendMode},this.getDepthTexture=function(){return m.getDepthTexture()};function Y(J){for(let ot=0;ot<J.removed.length;ot++){const nt=J.removed[ot],bt=w.indexOf(nt);bt>=0&&(w[bt]=null,v[bt].disconnect(nt))}for(let ot=0;ot<J.added.length;ot++){const nt=J.added[ot];let bt=w.indexOf(nt);if(bt===-1){for(let Dt=0;Dt<v.length;Dt++)if(Dt>=w.length){w.push(nt),bt=Dt;break}else if(w[Dt]===null){w[Dt]=nt,bt=Dt;break}if(bt===-1)break}const Tt=v[bt];Tt&&Tt.connect(nt)}}const $=new B,H=new B;function rt(J,ot,nt){$.setFromMatrixPosition(ot.matrixWorld),H.setFromMatrixPosition(nt.matrixWorld);const bt=$.distanceTo(H),Tt=ot.projectionMatrix.elements,Dt=nt.projectionMatrix.elements,de=Tt[14]/(Tt[10]-1),Wt=Tt[14]/(Tt[10]+1),_=(Tt[9]+1)/Tt[5],ee=(Tt[9]-1)/Tt[5],Mt=(Tt[8]-1)/Tt[0],Jt=(Dt[8]+1)/Dt[0],Et=de*Mt,re=de*Jt,ft=bt/(-Mt+Jt),Ut=ft*-Mt;if(ot.matrixWorld.decompose(J.position,J.quaternion,J.scale),J.translateX(Ut),J.translateZ(ft),J.matrixWorld.compose(J.position,J.quaternion,J.scale),J.matrixWorldInverse.copy(J.matrixWorld).invert(),Tt[10]===-1)J.projectionMatrix.copy(ot.projectionMatrix),J.projectionMatrixInverse.copy(ot.projectionMatrixInverse);else{const Ee=de+ft,fe=Wt+ft,M=Et-Ut,I=re+(bt-Ut),O=_*Wt/fe*Ee,Z=ee*Wt/fe*Ee;J.projectionMatrix.makePerspective(M,I,O,Z,Ee,fe),J.projectionMatrixInverse.copy(J.projectionMatrix).invert()}}function lt(J,ot){ot===null?J.matrixWorld.copy(J.matrix):J.matrixWorld.multiplyMatrices(ot.matrixWorld,J.matrix),J.matrixWorldInverse.copy(J.matrixWorld).invert()}this.updateCamera=function(J){if(n===null)return;let ot=J.near,nt=J.far;m.texture!==null&&(m.depthNear>0&&(ot=m.depthNear),m.depthFar>0&&(nt=m.depthFar)),b.near=E.near=P.near=ot,b.far=E.far=P.far=nt,(z!==b.near||F!==b.far)&&(n.updateRenderState({depthNear:b.near,depthFar:b.far}),z=b.near,F=b.far),b.layers.mask=J.layers.mask|6,P.layers.mask=b.layers.mask&3,E.layers.mask=b.layers.mask&5;const bt=J.parent,Tt=b.cameras;lt(b,bt);for(let Dt=0;Dt<Tt.length;Dt++)lt(Tt[Dt],bt);Tt.length===2?rt(b,P,E):b.projectionMatrix.copy(P.projectionMatrix),mt(J,b,bt)};function mt(J,ot,nt){nt===null?J.matrix.copy(ot.matrixWorld):(J.matrix.copy(nt.matrixWorld),J.matrix.invert(),J.matrix.multiply(ot.matrixWorld)),J.matrix.decompose(J.position,J.quaternion,J.scale),J.updateMatrixWorld(!0),J.projectionMatrix.copy(ot.projectionMatrix),J.projectionMatrixInverse.copy(ot.projectionMatrixInverse),J.isPerspectiveCamera&&(J.fov=Fr*2*Math.atan(1/J.projectionMatrix.elements[5]),J.zoom=1)}this.getCamera=function(){return b},this.getFoveation=function(){if(!(u===null&&d===null))return l},this.setFoveation=function(J){l=J,u!==null&&(u.fixedFoveation=J),d!==null&&d.fixedFoveation!==void 0&&(d.fixedFoveation=J)},this.hasDepthSensing=function(){return m.texture!==null},this.getDepthSensingMesh=function(){return m.getMesh(b)},this.getCameraTexture=function(J){return g[J]};let Ot=null;function se(J,ot){if(h=ot.getViewerPose(A||a),p=ot,h!==null){const nt=h.views;d!==null&&(t.setRenderTargetFramebuffer(S,d.framebuffer),t.setRenderTarget(S));let bt=!1;nt.length!==b.cameras.length&&(b.cameras.length=0,bt=!0);for(let Wt=0;Wt<nt.length;Wt++){const _=nt[Wt];let ee=null;if(d!==null)ee=d.getViewport(_);else{const Jt=c.getViewSubImage(u,_);ee=Jt.viewport,Wt===0&&(t.setRenderTargetTextures(S,Jt.colorTexture,Jt.depthStencilTexture),t.setRenderTarget(S))}let Mt=x[Wt];Mt===void 0&&(Mt=new Ue,Mt.layers.enable(Wt),Mt.viewport=new he,x[Wt]=Mt),Mt.matrix.fromArray(_.transform.matrix),Mt.matrix.decompose(Mt.position,Mt.quaternion,Mt.scale),Mt.projectionMatrix.fromArray(_.projectionMatrix),Mt.projectionMatrixInverse.copy(Mt.projectionMatrix).invert(),Mt.viewport.set(ee.x,ee.y,ee.width,ee.height),Wt===0&&(b.matrix.copy(Mt.matrix),b.matrix.decompose(b.position,b.quaternion,b.scale)),bt===!0&&b.cameras.push(Mt)}const Tt=n.enabledFeatures;if(Tt&&Tt.includes("depth-sensing")&&n.depthUsage=="gpu-optimized"&&c){const Wt=c.getDepthInformation(nt[0]);Wt&&Wt.isValid&&Wt.texture&&m.init(Wt,n.renderState)}if(Tt&&Tt.includes("camera-access")&&(t.state.unbindTexture(),c))for(let Wt=0;Wt<nt.length;Wt++){const _=nt[Wt].camera;if(_){let ee=g[_];ee||(ee=new ec,g[_]=ee);const Mt=c.getCameraImage(_);ee.sourceTexture=Mt}}}for(let nt=0;nt<v.length;nt++){const bt=w[nt],Tt=v[nt];bt!==null&&Tt!==void 0&&Tt.update(bt,ot,A||a)}Ot&&Ot(J,ot),ot.detectedPlanes&&i.dispatchEvent({type:"planesdetected",data:ot}),p=null}const $t=new bh;$t.setAnimationLoop(se),this.setAnimationLoop=function(J){Ot=J},this.dispose=function(){}}}const Bn=new vi,_I=new ue;function PI(r,t){function e(g,f){g.matrixAutoUpdate===!0&&g.updateMatrix(),f.value.copy(g.matrix)}function i(g,f){f.color.getRGB(g.fogColor.value,hh(r)),f.isFog?(g.fogNear.value=f.near,g.fogFar.value=f.far):f.isFogExp2&&(g.fogDensity.value=f.density)}function n(g,f,y,S,v){f.isMeshBasicMaterial||f.isMeshLambertMaterial?s(g,f):f.isMeshToonMaterial?(s(g,f),c(g,f)):f.isMeshPhongMaterial?(s(g,f),h(g,f)):f.isMeshStandardMaterial?(s(g,f),u(g,f),f.isMeshPhysicalMaterial&&d(g,f,v)):f.isMeshMatcapMaterial?(s(g,f),p(g,f)):f.isMeshDepthMaterial?s(g,f):f.isMeshDistanceMaterial?(s(g,f),m(g,f)):f.isMeshNormalMaterial?s(g,f):f.isLineBasicMaterial?(a(g,f),f.isLineDashedMaterial&&o(g,f)):f.isPointsMaterial?l(g,f,y,S):f.isSpriteMaterial?A(g,f):f.isShadowMaterial?(g.color.value.copy(f.color),g.opacity.value=f.opacity):f.isShaderMaterial&&(f.uniformsNeedUpdate=!1)}function s(g,f){g.opacity.value=f.opacity,f.color&&g.diffuse.value.copy(f.color),f.emissive&&g.emissive.value.copy(f.emissive).multiplyScalar(f.emissiveIntensity),f.map&&(g.map.value=f.map,e(f.map,g.mapTransform)),f.alphaMap&&(g.alphaMap.value=f.alphaMap,e(f.alphaMap,g.alphaMapTransform)),f.bumpMap&&(g.bumpMap.value=f.bumpMap,e(f.bumpMap,g.bumpMapTransform),g.bumpScale.value=f.bumpScale,f.side===Fe&&(g.bumpScale.value*=-1)),f.normalMap&&(g.normalMap.value=f.normalMap,e(f.normalMap,g.normalMapTransform),g.normalScale.value.copy(f.normalScale),f.side===Fe&&g.normalScale.value.negate()),f.displacementMap&&(g.displacementMap.value=f.displacementMap,e(f.displacementMap,g.displacementMapTransform),g.displacementScale.value=f.displacementScale,g.displacementBias.value=f.displacementBias),f.emissiveMap&&(g.emissiveMap.value=f.emissiveMap,e(f.emissiveMap,g.emissiveMapTransform)),f.specularMap&&(g.specularMap.value=f.specularMap,e(f.specularMap,g.specularMapTransform)),f.alphaTest>0&&(g.alphaTest.value=f.alphaTest);const y=t.get(f),S=y.envMap,v=y.envMapRotation;S&&(g.envMap.value=S,Bn.copy(v),Bn.x*=-1,Bn.y*=-1,Bn.z*=-1,S.isCubeTexture&&S.isRenderTargetTexture===!1&&(Bn.y*=-1,Bn.z*=-1),g.envMapRotation.value.setFromMatrix4(_I.makeRotationFromEuler(Bn)),g.flipEnvMap.value=S.isCubeTexture&&S.isRenderTargetTexture===!1?-1:1,g.reflectivity.value=f.reflectivity,g.ior.value=f.ior,g.refractionRatio.value=f.refractionRatio),f.lightMap&&(g.lightMap.value=f.lightMap,g.lightMapIntensity.value=f.lightMapIntensity,e(f.lightMap,g.lightMapTransform)),f.aoMap&&(g.aoMap.value=f.aoMap,g.aoMapIntensity.value=f.aoMapIntensity,e(f.aoMap,g.aoMapTransform))}function a(g,f){g.diffuse.value.copy(f.color),g.opacity.value=f.opacity,f.map&&(g.map.value=f.map,e(f.map,g.mapTransform))}function o(g,f){g.dashSize.value=f.dashSize,g.totalSize.value=f.dashSize+f.gapSize,g.scale.value=f.scale}function l(g,f,y,S){g.diffuse.value.copy(f.color),g.opacity.value=f.opacity,g.size.value=f.size*y,g.scale.value=S*.5,f.map&&(g.map.value=f.map,e(f.map,g.uvTransform)),f.alphaMap&&(g.alphaMap.value=f.alphaMap,e(f.alphaMap,g.alphaMapTransform)),f.alphaTest>0&&(g.alphaTest.value=f.alphaTest)}function A(g,f){g.diffuse.value.copy(f.color),g.opacity.value=f.opacity,g.rotation.value=f.rotation,f.map&&(g.map.value=f.map,e(f.map,g.mapTransform)),f.alphaMap&&(g.alphaMap.value=f.alphaMap,e(f.alphaMap,g.alphaMapTransform)),f.alphaTest>0&&(g.alphaTest.value=f.alphaTest)}function h(g,f){g.specular.value.copy(f.specular),g.shininess.value=Math.max(f.shininess,1e-4)}function c(g,f){f.gradientMap&&(g.gradientMap.value=f.gradientMap)}function u(g,f){g.metalness.value=f.metalness,f.metalnessMap&&(g.metalnessMap.value=f.metalnessMap,e(f.metalnessMap,g.metalnessMapTransform)),g.roughness.value=f.roughness,f.roughnessMap&&(g.roughnessMap.value=f.roughnessMap,e(f.roughnessMap,g.roughnessMapTransform)),f.envMap&&(g.envMapIntensity.value=f.envMapIntensity)}function d(g,f,y){g.ior.value=f.ior,f.sheen>0&&(g.sheenColor.value.copy(f.sheenColor).multiplyScalar(f.sheen),g.sheenRoughness.value=f.sheenRoughness,f.sheenColorMap&&(g.sheenColorMap.value=f.sheenColorMap,e(f.sheenColorMap,g.sheenColorMapTransform)),f.sheenRoughnessMap&&(g.sheenRoughnessMap.value=f.sheenRoughnessMap,e(f.sheenRoughnessMap,g.sheenRoughnessMapTransform))),f.clearcoat>0&&(g.clearcoat.value=f.clearcoat,g.clearcoatRoughness.value=f.clearcoatRoughness,f.clearcoatMap&&(g.clearcoatMap.value=f.clearcoatMap,e(f.clearcoatMap,g.clearcoatMapTransform)),f.clearcoatRoughnessMap&&(g.clearcoatRoughnessMap.value=f.clearcoatRoughnessMap,e(f.clearcoatRoughnessMap,g.clearcoatRoughnessMapTransform)),f.clearcoatNormalMap&&(g.clearcoatNormalMap.value=f.clearcoatNormalMap,e(f.clearcoatNormalMap,g.clearcoatNormalMapTransform),g.clearcoatNormalScale.value.copy(f.clearcoatNormalScale),f.side===Fe&&g.clearcoatNormalScale.value.negate())),f.dispersion>0&&(g.dispersion.value=f.dispersion),f.iridescence>0&&(g.iridescence.value=f.iridescence,g.iridescenceIOR.value=f.iridescenceIOR,g.iridescenceThicknessMinimum.value=f.iridescenceThicknessRange[0],g.iridescenceThicknessMaximum.value=f.iridescenceThicknessRange[1],f.iridescenceMap&&(g.iridescenceMap.value=f.iridescenceMap,e(f.iridescenceMap,g.iridescenceMapTransform)),f.iridescenceThicknessMap&&(g.iridescenceThicknessMap.value=f.iridescenceThicknessMap,e(f.iridescenceThicknessMap,g.iridescenceThicknessMapTransform))),f.transmission>0&&(g.transmission.value=f.transmission,g.transmissionSamplerMap.value=y.texture,g.transmissionSamplerSize.value.set(y.width,y.height),f.transmissionMap&&(g.transmissionMap.value=f.transmissionMap,e(f.transmissionMap,g.transmissionMapTransform)),g.thickness.value=f.thickness,f.thicknessMap&&(g.thicknessMap.value=f.thicknessMap,e(f.thicknessMap,g.thicknessMapTransform)),g.attenuationDistance.value=f.attenuationDistance,g.attenuationColor.value.copy(f.attenuationColor)),f.anisotropy>0&&(g.anisotropyVector.value.set(f.anisotropy*Math.cos(f.anisotropyRotation),f.anisotropy*Math.sin(f.anisotropyRotation)),f.anisotropyMap&&(g.anisotropyMap.value=f.anisotropyMap,e(f.anisotropyMap,g.anisotropyMapTransform))),g.specularIntensity.value=f.specularIntensity,g.specularColor.value.copy(f.specularColor),f.specularColorMap&&(g.specularColorMap.value=f.specularColorMap,e(f.specularColorMap,g.specularColorMapTransform)),f.specularIntensityMap&&(g.specularIntensityMap.value=f.specularIntensityMap,e(f.specularIntensityMap,g.specularIntensityMapTransform))}function p(g,f){f.matcap&&(g.matcap.value=f.matcap)}function m(g,f){const y=t.get(f).light;g.referencePosition.value.setFromMatrixPosition(y.matrixWorld),g.nearDistance.value=y.shadow.camera.near,g.farDistance.value=y.shadow.camera.far}return{refreshFogUniforms:i,refreshMaterialUniforms:n}}function DI(r,t,e,i){let n={},s={},a=[];const o=r.getParameter(r.MAX_UNIFORM_BUFFER_BINDINGS);function l(y,S){const v=S.program;i.uniformBlockBinding(y,v)}function A(y,S){let v=n[y.id];v===void 0&&(p(y),v=h(y),n[y.id]=v,y.addEventListener("dispose",g));const w=S.program;i.updateUBOMapping(y,w);const T=t.render.frame;s[y.id]!==T&&(u(y),s[y.id]=T)}function h(y){const S=c();y.__bindingPointIndex=S;const v=r.createBuffer(),w=y.__size,T=y.usage;return r.bindBuffer(r.UNIFORM_BUFFER,v),r.bufferData(r.UNIFORM_BUFFER,w,T),r.bindBuffer(r.UNIFORM_BUFFER,null),r.bindBufferBase(r.UNIFORM_BUFFER,S,v),v}function c(){for(let y=0;y<o;y++)if(a.indexOf(y)===-1)return a.push(y),y;return console.error("THREE.WebGLRenderer: Maximum number of simultaneously usable uniforms groups reached."),0}function u(y){const S=n[y.id],v=y.uniforms,w=y.__cache;r.bindBuffer(r.UNIFORM_BUFFER,S);for(let T=0,R=v.length;T<R;T++){const P=Array.isArray(v[T])?v[T]:[v[T]];for(let E=0,x=P.length;E<x;E++){const b=P[E];if(d(b,T,E,w)===!0){const z=b.__offset,F=Array.isArray(b.value)?b.value:[b.value];let U=0;for(let W=0;W<F.length;W++){const Y=F[W],$=m(Y);typeof Y=="number"||typeof Y=="boolean"?(b.__data[0]=Y,r.bufferSubData(r.UNIFORM_BUFFER,z+U,b.__data)):Y.isMatrix3?(b.__data[0]=Y.elements[0],b.__data[1]=Y.elements[1],b.__data[2]=Y.elements[2],b.__data[3]=0,b.__data[4]=Y.elements[3],b.__data[5]=Y.elements[4],b.__data[6]=Y.elements[5],b.__data[7]=0,b.__data[8]=Y.elements[6],b.__data[9]=Y.elements[7],b.__data[10]=Y.elements[8],b.__data[11]=0):(Y.toArray(b.__data,U),U+=$.storage/Float32Array.BYTES_PER_ELEMENT)}r.bufferSubData(r.UNIFORM_BUFFER,z,b.__data)}}}r.bindBuffer(r.UNIFORM_BUFFER,null)}function d(y,S,v,w){const T=y.value,R=S+"_"+v;if(w[R]===void 0)return typeof T=="number"||typeof T=="boolean"?w[R]=T:w[R]=T.clone(),!0;{const P=w[R];if(typeof T=="number"||typeof T=="boolean"){if(P!==T)return w[R]=T,!0}else if(P.equals(T)===!1)return P.copy(T),!0}return!1}function p(y){const S=y.uniforms;let v=0;const w=16;for(let R=0,P=S.length;R<P;R++){const E=Array.isArray(S[R])?S[R]:[S[R]];for(let x=0,b=E.length;x<b;x++){const z=E[x],F=Array.isArray(z.value)?z.value:[z.value];for(let U=0,W=F.length;U<W;U++){const Y=F[U],$=m(Y),H=v%w,rt=H%$.boundary,lt=H+rt;v+=rt,lt!==0&&w-lt<$.storage&&(v+=w-lt),z.__data=new Float32Array($.storage/Float32Array.BYTES_PER_ELEMENT),z.__offset=v,v+=$.storage}}}const T=v%w;return T>0&&(v+=w-T),y.__size=v,y.__cache={},this}function m(y){const S={boundary:0,storage:0};return typeof y=="number"||typeof y=="boolean"?(S.boundary=4,S.storage=4):y.isVector2?(S.boundary=8,S.storage=8):y.isVector3||y.isColor?(S.boundary=16,S.storage=12):y.isVector4?(S.boundary=16,S.storage=16):y.isMatrix3?(S.boundary=48,S.storage=48):y.isMatrix4?(S.boundary=64,S.storage=64):y.isTexture?console.warn("THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group."):console.warn("THREE.WebGLRenderer: Unsupported uniform value type.",y),S}function g(y){const S=y.target;S.removeEventListener("dispose",g);const v=a.indexOf(S.__bindingPointIndex);a.splice(v,1),r.deleteBuffer(n[S.id]),delete n[S.id],delete s[S.id]}function f(){for(const y in n)r.deleteBuffer(n[y]);a=[],n={},s={}}return{bind:l,update:A,dispose:f}}class ic{constructor(t={}){const{canvas:e=Vd(),context:i=null,depth:n=!0,stencil:s=!1,alpha:a=!1,antialias:o=!1,premultipliedAlpha:l=!0,preserveDrawingBuffer:A=!1,powerPreference:h="default",failIfMajorPerformanceCaveat:c=!1,reversedDepthBuffer:u=!1}=t;this.isWebGLRenderer=!0;let d;if(i!==null){if(typeof WebGLRenderingContext<"u"&&i instanceof WebGLRenderingContext)throw new Error("THREE.WebGLRenderer: WebGL 1 is not supported since r163.");d=i.getContextAttributes().alpha}else d=a;const p=new Uint32Array(4),m=new Int32Array(4);let g=null,f=null;const y=[],S=[];this.domElement=e,this.debug={checkShaderErrors:!0,onShaderError:null},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.toneMapping=tn,this.toneMappingExposure=1,this.transmissionResolutionScale=1;const v=this;let w=!1;this._outputColorSpace=Re;let T=0,R=0,P=null,E=-1,x=null;const b=new he,z=new he;let F=null;const U=new Vt(0);let W=0,Y=e.width,$=e.height,H=1,rt=null,lt=null;const mt=new he(0,0,Y,$),Ot=new he(0,0,Y,$);let se=!1;const $t=new oA;let J=!1,ot=!1;const nt=new ue,bt=new B,Tt=new he,Dt={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};let de=!1;function Wt(){return P===null?H:1}let _=i;function ee(C,L){return e.getContext(C,L)}try{const C={alpha:!0,depth:n,stencil:s,antialias:o,premultipliedAlpha:l,preserveDrawingBuffer:A,powerPreference:h,failIfMajorPerformanceCaveat:c};if("setAttribute"in e&&e.setAttribute("data-engine",`three.js r${za}`),e.addEventListener("webglcontextlost",st,!1),e.addEventListener("webglcontextrestored",dt,!1),e.addEventListener("webglcontextcreationerror",q,!1),_===null){const L="webgl2";if(_=ee(L,C),_===null)throw ee(L)?new Error("Error creating WebGL context with your selected attributes."):new Error("Error creating WebGL context.")}}catch(C){throw console.error("THREE.WebGLRenderer: "+C.message),C}let Mt,Jt,Et,re,ft,Ut,Ee,fe,M,I,O,Z,Q,X,xt,it,It,Ct,tt,ct,Rt,vt,At,Bt;function D(){Mt=new Vp(_),Mt.init(),vt=new yI(_,Mt),Jt=new Fp(_,Mt,t,vt),Et=new SI(_,Mt),Jt.reversedDepthBuffer&&u&&Et.buffers.depth.setReversed(!0),re=new Xp(_),ft=new hI,Ut=new MI(_,Mt,Et,ft,Jt,vt,re),Ee=new Up(v),fe=new Hp(v),M=new Df(_),At=new Np(_,M),I=new Wp(_,M,re,At),O=new Jp(_,I,M,re),tt=new Zp(_,Jt,Ut),it=new Op(ft),Z=new lI(v,Ee,fe,Mt,Jt,At,it),Q=new PI(v,ft),X=new uI,xt=new II(Mt),Ct=new Lp(v,Ee,fe,Et,O,d,l),It=new xI(v,O,Jt),Bt=new DI(_,re,Jt,Et),ct=new Bp(_,Mt,re),Rt=new Yp(_,Mt,re),re.programs=Z.programs,v.capabilities=Jt,v.extensions=Mt,v.properties=ft,v.renderLists=X,v.shadowMap=It,v.state=Et,v.info=re}D();const et=new RI(v,_);this.xr=et,this.getContext=function(){return _},this.getContextAttributes=function(){return _.getContextAttributes()},this.forceContextLoss=function(){const C=Mt.get("WEBGL_lose_context");C&&C.loseContext()},this.forceContextRestore=function(){const C=Mt.get("WEBGL_lose_context");C&&C.restoreContext()},this.getPixelRatio=function(){return H},this.setPixelRatio=function(C){C!==void 0&&(H=C,this.setSize(Y,$,!1))},this.getSize=function(C){return C.set(Y,$)},this.setSize=function(C,L,G=!0){if(et.isPresenting){console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting.");return}Y=C,$=L,e.width=Math.floor(C*H),e.height=Math.floor(L*H),G===!0&&(e.style.width=C+"px",e.style.height=L+"px"),this.setViewport(0,0,C,L)},this.getDrawingBufferSize=function(C){return C.set(Y*H,$*H).floor()},this.setDrawingBufferSize=function(C,L,G){Y=C,$=L,H=G,e.width=Math.floor(C*G),e.height=Math.floor(L*G),this.setViewport(0,0,C,L)},this.getCurrentViewport=function(C){return C.copy(b)},this.getViewport=function(C){return C.copy(mt)},this.setViewport=function(C,L,G,k){C.isVector4?mt.set(C.x,C.y,C.z,C.w):mt.set(C,L,G,k),Et.viewport(b.copy(mt).multiplyScalar(H).round())},this.getScissor=function(C){return C.copy(Ot)},this.setScissor=function(C,L,G,k){C.isVector4?Ot.set(C.x,C.y,C.z,C.w):Ot.set(C,L,G,k),Et.scissor(z.copy(Ot).multiplyScalar(H).round())},this.getScissorTest=function(){return se},this.setScissorTest=function(C){Et.setScissorTest(se=C)},this.setOpaqueSort=function(C){rt=C},this.setTransparentSort=function(C){lt=C},this.getClearColor=function(C){return C.copy(Ct.getClearColor())},this.setClearColor=function(){Ct.setClearColor(...arguments)},this.getClearAlpha=function(){return Ct.getClearAlpha()},this.setClearAlpha=function(){Ct.setClearAlpha(...arguments)},this.clear=function(C=!0,L=!0,G=!0){let k=0;if(C){let N=!1;if(P!==null){const K=P.texture.format;N=K===ro||K===so||K===no}if(N){const K=P.texture.type,ht=K===Ii||K===Sn||K===ks||K===Vs||K===eo||K===io,gt=Ct.getClearColor(),ut=Ct.getClearAlpha(),wt=gt.r,Pt=gt.g,St=gt.b;ht?(p[0]=wt,p[1]=Pt,p[2]=St,p[3]=ut,_.clearBufferuiv(_.COLOR,0,p)):(m[0]=wt,m[1]=Pt,m[2]=St,m[3]=ut,_.clearBufferiv(_.COLOR,0,m))}else k|=_.COLOR_BUFFER_BIT}L&&(k|=_.DEPTH_BUFFER_BIT),G&&(k|=_.STENCIL_BUFFER_BIT,this.state.buffers.stencil.setMask(4294967295)),_.clear(k)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.dispose=function(){e.removeEventListener("webglcontextlost",st,!1),e.removeEventListener("webglcontextrestored",dt,!1),e.removeEventListener("webglcontextcreationerror",q,!1),Ct.dispose(),X.dispose(),xt.dispose(),ft.dispose(),Ee.dispose(),fe.dispose(),O.dispose(),At.dispose(),Bt.dispose(),Z.dispose(),et.dispose(),et.removeEventListener("sessionstart",Si),et.removeEventListener("sessionend",oc),On.stop()};function st(C){C.preventDefault(),console.log("THREE.WebGLRenderer: Context Lost."),w=!0}function dt(){console.log("THREE.WebGLRenderer: Context Restored."),w=!1;const C=re.autoReset,L=It.enabled,G=It.autoUpdate,k=It.needsUpdate,N=It.type;D(),re.autoReset=C,It.enabled=L,It.autoUpdate=G,It.needsUpdate=k,It.type=N}function q(C){console.error("THREE.WebGLRenderer: A WebGL context could not be created. Reason: ",C.statusMessage)}function j(C){const L=C.target;L.removeEventListener("dispose",j),pt(L)}function pt(C){Lt(C),ft.remove(C)}function Lt(C){const L=ft.get(C).programs;L!==void 0&&(L.forEach(function(G){Z.releaseProgram(G)}),C.isShaderMaterial&&Z.releaseShaderCache(C))}this.renderBufferDirect=function(C,L,G,k,N,K){L===null&&(L=Dt);const ht=N.isMesh&&N.matrixWorld.determinant()<0,gt=HI(C,L,G,k,N);Et.setMaterial(k,ht);let ut=G.index,wt=1;if(k.wireframe===!0){if(ut=I.getWireframeAttribute(G),ut===void 0)return;wt=2}const Pt=G.drawRange,St=G.attributes.position;let zt=Pt.start*wt,Kt=(Pt.start+Pt.count)*wt;K!==null&&(zt=Math.max(zt,K.start*wt),Kt=Math.min(Kt,(K.start+K.count)*wt)),ut!==null?(zt=Math.max(zt,0),Kt=Math.min(Kt,ut.count)):St!=null&&(zt=Math.max(zt,0),Kt=Math.min(Kt,St.count));const ce=Kt-zt;if(ce<0||ce===1/0)return;At.setup(N,k,gt,G,ut);let ne,te=ct;if(ut!==null&&(ne=M.get(ut),te=Rt,te.setIndex(ne)),N.isMesh)k.wireframe===!0?(Et.setLineWidth(k.wireframeLinewidth*Wt()),te.setMode(_.LINES)):te.setMode(_.TRIANGLES);else if(N.isLine){let yt=k.linewidth;yt===void 0&&(yt=1),Et.setLineWidth(yt*Wt()),N.isLineSegments?te.setMode(_.LINES):N.isLineLoop?te.setMode(_.LINE_LOOP):te.setMode(_.LINE_STRIP)}else N.isPoints?te.setMode(_.POINTS):N.isSprite&&te.setMode(_.TRIANGLES);if(N.isBatchedMesh)if(N._multiDrawInstances!==null)as("THREE.WebGLRenderer: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection."),te.renderMultiDrawInstances(N._multiDrawStarts,N._multiDrawCounts,N._multiDrawCount,N._multiDrawInstances);else if(Mt.get("WEBGL_multi_draw"))te.renderMultiDraw(N._multiDrawStarts,N._multiDrawCounts,N._multiDrawCount);else{const yt=N._multiDrawStarts,ae=N._multiDrawCounts,Xt=N._multiDrawCount,Xe=ut?M.get(ut).bytesPerElement:1,Ts=ft.get(k).currentProgram.getUniforms();for(let Ze=0;Ze<Xt;Ze++)Ts.setValue(_,"_gl_DrawID",Ze),te.render(yt[Ze]/Xe,ae[Ze])}else if(N.isInstancedMesh)te.renderInstances(zt,ce,N.count);else if(G.isInstancedBufferGeometry){const yt=G._maxInstanceCount!==void 0?G._maxInstanceCount:1/0,ae=Math.min(G.instanceCount,yt);te.renderInstances(zt,ce,ae)}else te.render(zt,ce)};function ie(C,L,G){C.transparent===!0&&C.side===Li&&C.forceSinglePass===!1?(C.side=Fe,C.needsUpdate=!0,Aa(C,L,G),C.side=Ki,C.needsUpdate=!0,Aa(C,L,G),C.side=Li):Aa(C,L,G)}this.compile=function(C,L,G=null){G===null&&(G=C),f=xt.get(G),f.init(L),S.push(f),G.traverseVisible(function(N){N.isLight&&N.layers.test(L.layers)&&(f.pushLight(N),N.castShadow&&f.pushShadow(N))}),C!==G&&C.traverseVisible(function(N){N.isLight&&N.layers.test(L.layers)&&(f.pushLight(N),N.castShadow&&f.pushShadow(N))}),f.setupLights();const k=new Set;return C.traverse(function(N){if(!(N.isMesh||N.isPoints||N.isLine||N.isSprite))return;const K=N.material;if(K)if(Array.isArray(K))for(let ht=0;ht<K.length;ht++){const gt=K[ht];ie(gt,G,N),k.add(gt)}else ie(K,G,N),k.add(K)}),f=S.pop(),k},this.compileAsync=function(C,L,G=null){const k=this.compile(C,L,G);return new Promise(N=>{function K(){if(k.forEach(function(ht){ft.get(ht).currentProgram.isReady()&&k.delete(ht)}),k.size===0){N(C);return}setTimeout(K,10)}Mt.get("KHR_parallel_shader_compile")!==null?K():setTimeout(K,10)})};let Qt=null;function ki(C){Qt&&Qt(C)}function Si(){On.stop()}function oc(){On.start()}const On=new bh;On.setAnimationLoop(ki),typeof self<"u"&&On.setContext(self),this.setAnimationLoop=function(C){Qt=C,et.setAnimationLoop(C),C===null?On.stop():On.start()},et.addEventListener("sessionstart",Si),et.addEventListener("sessionend",oc),this.render=function(C,L){if(L!==void 0&&L.isCamera!==!0){console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");return}if(w===!0)return;if(C.matrixWorldAutoUpdate===!0&&C.updateMatrixWorld(),L.parent===null&&L.matrixWorldAutoUpdate===!0&&L.updateMatrixWorld(),et.enabled===!0&&et.isPresenting===!0&&(et.cameraAutoUpdate===!0&&et.updateCamera(L),L=et.getCamera()),C.isScene===!0&&C.onBeforeRender(v,C,L,P),f=xt.get(C,S.length),f.init(L),S.push(f),nt.multiplyMatrices(L.projectionMatrix,L.matrixWorldInverse),$t.setFromProjectionMatrix(nt,Ci,L.reversedDepth),ot=this.localClippingEnabled,J=it.init(this.clippingPlanes,ot),g=X.get(C,y.length),g.init(),y.push(g),et.enabled===!0&&et.isPresenting===!0){const K=v.xr.getDepthSensingMesh();K!==null&&MA(K,L,-1/0,v.sortObjects)}MA(C,L,0,v.sortObjects),g.finish(),v.sortObjects===!0&&g.sort(rt,lt),de=et.enabled===!1||et.isPresenting===!1||et.hasDepthSensing()===!1,de&&Ct.addToRenderList(g,C),this.info.render.frame++,J===!0&&it.beginShadows();const G=f.state.shadowsArray;It.render(G,C,L),J===!0&&it.endShadows(),this.info.autoReset===!0&&this.info.reset();const k=g.opaque,N=g.transmissive;if(f.setupLights(),L.isArrayCamera){const K=L.cameras;if(N.length>0)for(let ht=0,gt=K.length;ht<gt;ht++){const ut=K[ht];lc(k,N,C,ut)}de&&Ct.render(C);for(let ht=0,gt=K.length;ht<gt;ht++){const ut=K[ht];Ac(g,C,ut,ut.viewport)}}else N.length>0&&lc(k,N,C,L),de&&Ct.render(C),Ac(g,C,L);P!==null&&R===0&&(Ut.updateMultisampleRenderTarget(P),Ut.updateRenderTargetMipmap(P)),C.isScene===!0&&C.onAfterRender(v,C,L),At.resetDefaultState(),E=-1,x=null,S.pop(),S.length>0?(f=S[S.length-1],J===!0&&it.setGlobalState(v.clippingPlanes,f.state.camera)):f=null,y.pop(),y.length>0?g=y[y.length-1]:g=null};function MA(C,L,G,k){if(C.visible===!1)return;if(C.layers.test(L.layers)){if(C.isGroup)G=C.renderOrder;else if(C.isLOD)C.autoUpdate===!0&&C.update(L);else if(C.isLight)f.pushLight(C),C.castShadow&&f.pushShadow(C);else if(C.isSprite){if(!C.frustumCulled||$t.intersectsSprite(C)){k&&Tt.setFromMatrixPosition(C.matrixWorld).applyMatrix4(nt);const ht=O.update(C),gt=C.material;gt.visible&&g.push(C,ht,gt,G,Tt.z,null)}}else if((C.isMesh||C.isLine||C.isPoints)&&(!C.frustumCulled||$t.intersectsObject(C))){const ht=O.update(C),gt=C.material;if(k&&(C.boundingSphere!==void 0?(C.boundingSphere===null&&C.computeBoundingSphere(),Tt.copy(C.boundingSphere.center)):(ht.boundingSphere===null&&ht.computeBoundingSphere(),Tt.copy(ht.boundingSphere.center)),Tt.applyMatrix4(C.matrixWorld).applyMatrix4(nt)),Array.isArray(gt)){const ut=ht.groups;for(let wt=0,Pt=ut.length;wt<Pt;wt++){const St=ut[wt],zt=gt[St.materialIndex];zt&&zt.visible&&g.push(C,ht,zt,G,Tt.z,St)}}else gt.visible&&g.push(C,ht,gt,G,Tt.z,null)}}const K=C.children;for(let ht=0,gt=K.length;ht<gt;ht++)MA(K[ht],L,G,k)}function Ac(C,L,G,k){const N=C.opaque,K=C.transmissive,ht=C.transparent;f.setupLightsView(G),J===!0&&it.setGlobalState(v.clippingPlanes,G),k&&Et.viewport(b.copy(k)),N.length>0&&oa(N,L,G),K.length>0&&oa(K,L,G),ht.length>0&&oa(ht,L,G),Et.buffers.depth.setTest(!0),Et.buffers.depth.setMask(!0),Et.buffers.color.setMask(!0),Et.setPolygonOffset(!1)}function lc(C,L,G,k){if((G.isScene===!0?G.overrideMaterial:null)!==null)return;f.state.transmissionRenderTarget[k.id]===void 0&&(f.state.transmissionRenderTarget[k.id]=new Mn(1,1,{generateMipmaps:!0,type:Mt.has("EXT_color_buffer_half_float")||Mt.has("EXT_color_buffer_float")?Hs:Ii,minFilter:En,samples:4,stencilBuffer:s,resolveDepthBuffer:!1,resolveStencilBuffer:!1,colorSpace:Yt.workingColorSpace}));const K=f.state.transmissionRenderTarget[k.id],ht=k.viewport||b;K.setSize(ht.z*v.transmissionResolutionScale,ht.w*v.transmissionResolutionScale);const gt=v.getRenderTarget(),ut=v.getActiveCubeFace(),wt=v.getActiveMipmapLevel();v.setRenderTarget(K),v.getClearColor(U),W=v.getClearAlpha(),W<1&&v.setClearColor(16777215,.5),v.clear(),de&&Ct.render(G);const Pt=v.toneMapping;v.toneMapping=tn;const St=k.viewport;if(k.viewport!==void 0&&(k.viewport=void 0),f.setupLightsView(k),J===!0&&it.setGlobalState(v.clippingPlanes,k),oa(C,G,k),Ut.updateMultisampleRenderTarget(K),Ut.updateRenderTargetMipmap(K),Mt.has("WEBGL_multisampled_render_to_texture")===!1){let zt=!1;for(let Kt=0,ce=L.length;Kt<ce;Kt++){const ne=L[Kt],te=ne.object,yt=ne.geometry,ae=ne.material,Xt=ne.group;if(ae.side===Li&&te.layers.test(k.layers)){const Xe=ae.side;ae.side=Fe,ae.needsUpdate=!0,hc(te,G,k,yt,ae,Xt),ae.side=Xe,ae.needsUpdate=!0,zt=!0}}zt===!0&&(Ut.updateMultisampleRenderTarget(K),Ut.updateRenderTargetMipmap(K))}v.setRenderTarget(gt,ut,wt),v.setClearColor(U,W),St!==void 0&&(k.viewport=St),v.toneMapping=Pt}function oa(C,L,G){const k=L.isScene===!0?L.overrideMaterial:null;for(let N=0,K=C.length;N<K;N++){const ht=C[N],gt=ht.object,ut=ht.geometry,wt=ht.group;let Pt=ht.material;Pt.allowOverride===!0&&k!==null&&(Pt=k),gt.layers.test(G.layers)&&hc(gt,L,G,ut,Pt,wt)}}function hc(C,L,G,k,N,K){C.onBeforeRender(v,L,G,k,N,K),C.modelViewMatrix.multiplyMatrices(G.matrixWorldInverse,C.matrixWorld),C.normalMatrix.getNormalMatrix(C.modelViewMatrix),N.onBeforeRender(v,L,G,k,C,K),N.transparent===!0&&N.side===Li&&N.forceSinglePass===!1?(N.side=Fe,N.needsUpdate=!0,v.renderBufferDirect(G,L,k,N,C,K),N.side=Ki,N.needsUpdate=!0,v.renderBufferDirect(G,L,k,N,C,K),N.side=Li):v.renderBufferDirect(G,L,k,N,C,K),C.onAfterRender(v,L,G,k,N,K)}function Aa(C,L,G){L.isScene!==!0&&(L=Dt);const k=ft.get(C),N=f.state.lights,K=f.state.shadowsArray,ht=N.state.version,gt=Z.getParameters(C,N.state,K,L,G),ut=Z.getProgramCacheKey(gt);let wt=k.programs;k.environment=C.isMeshStandardMaterial?L.environment:null,k.fog=L.fog,k.envMap=(C.isMeshStandardMaterial?fe:Ee).get(C.envMap||k.environment),k.envMapRotation=k.environment!==null&&C.envMap===null?L.environmentRotation:C.envMapRotation,wt===void 0&&(C.addEventListener("dispose",j),wt=new Map,k.programs=wt);let Pt=wt.get(ut);if(Pt!==void 0){if(k.currentProgram===Pt&&k.lightsStateVersion===ht)return uc(C,gt),Pt}else gt.uniforms=Z.getUniforms(C),C.onBeforeCompile(gt,v),Pt=Z.acquireProgram(gt,ut),wt.set(ut,Pt),k.uniforms=gt.uniforms;const St=k.uniforms;return(!C.isShaderMaterial&&!C.isRawShaderMaterial||C.clipping===!0)&&(St.clippingPlanes=it.uniform),uc(C,gt),k.needsLights=WI(C),k.lightsStateVersion=ht,k.needsLights&&(St.ambientLightColor.value=N.state.ambient,St.lightProbe.value=N.state.probe,St.directionalLights.value=N.state.directional,St.directionalLightShadows.value=N.state.directionalShadow,St.spotLights.value=N.state.spot,St.spotLightShadows.value=N.state.spotShadow,St.rectAreaLights.value=N.state.rectArea,St.ltc_1.value=N.state.rectAreaLTC1,St.ltc_2.value=N.state.rectAreaLTC2,St.pointLights.value=N.state.point,St.pointLightShadows.value=N.state.pointShadow,St.hemisphereLights.value=N.state.hemi,St.directionalShadowMap.value=N.state.directionalShadowMap,St.directionalShadowMatrix.value=N.state.directionalShadowMatrix,St.spotShadowMap.value=N.state.spotShadowMap,St.spotLightMatrix.value=N.state.spotLightMatrix,St.spotLightMap.value=N.state.spotLightMap,St.pointShadowMap.value=N.state.pointShadowMap,St.pointShadowMatrix.value=N.state.pointShadowMatrix),k.currentProgram=Pt,k.uniformsList=null,Pt}function cc(C){if(C.uniformsList===null){const L=C.currentProgram.getUniforms();C.uniformsList=na.seqWithValue(L.seq,C.uniforms)}return C.uniformsList}function uc(C,L){const G=ft.get(C);G.outputColorSpace=L.outputColorSpace,G.batching=L.batching,G.batchingColor=L.batchingColor,G.instancing=L.instancing,G.instancingColor=L.instancingColor,G.instancingMorph=L.instancingMorph,G.skinning=L.skinning,G.morphTargets=L.morphTargets,G.morphNormals=L.morphNormals,G.morphColors=L.morphColors,G.morphTargetsCount=L.morphTargetsCount,G.numClippingPlanes=L.numClippingPlanes,G.numIntersection=L.numClipIntersection,G.vertexAlphas=L.vertexAlphas,G.vertexTangents=L.vertexTangents,G.toneMapping=L.toneMapping}function HI(C,L,G,k,N){L.isScene!==!0&&(L=Dt),Ut.resetTextureUnits();const K=L.fog,ht=k.isMeshStandardMaterial?L.environment:null,gt=P===null?v.outputColorSpace:P.isXRRenderTarget===!0?P.texture.colorSpace:ns,ut=(k.isMeshStandardMaterial?fe:Ee).get(k.envMap||ht),wt=k.vertexColors===!0&&!!G.attributes.color&&G.attributes.color.itemSize===4,Pt=!!G.attributes.tangent&&(!!k.normalMap||k.anisotropy>0),St=!!G.morphAttributes.position,zt=!!G.morphAttributes.normal,Kt=!!G.morphAttributes.color;let ce=tn;k.toneMapped&&(P===null||P.isXRRenderTarget===!0)&&(ce=v.toneMapping);const ne=G.morphAttributes.position||G.morphAttributes.normal||G.morphAttributes.color,te=ne!==void 0?ne.length:0,yt=ft.get(k),ae=f.state.lights;if(J===!0&&(ot===!0||C!==x)){const Pe=C===x&&k.id===E;it.setState(k,C,Pe)}let Xt=!1;k.version===yt.__version?(yt.needsLights&&yt.lightsStateVersion!==ae.state.version||yt.outputColorSpace!==gt||N.isBatchedMesh&&yt.batching===!1||!N.isBatchedMesh&&yt.batching===!0||N.isBatchedMesh&&yt.batchingColor===!0&&N.colorTexture===null||N.isBatchedMesh&&yt.batchingColor===!1&&N.colorTexture!==null||N.isInstancedMesh&&yt.instancing===!1||!N.isInstancedMesh&&yt.instancing===!0||N.isSkinnedMesh&&yt.skinning===!1||!N.isSkinnedMesh&&yt.skinning===!0||N.isInstancedMesh&&yt.instancingColor===!0&&N.instanceColor===null||N.isInstancedMesh&&yt.instancingColor===!1&&N.instanceColor!==null||N.isInstancedMesh&&yt.instancingMorph===!0&&N.morphTexture===null||N.isInstancedMesh&&yt.instancingMorph===!1&&N.morphTexture!==null||yt.envMap!==ut||k.fog===!0&&yt.fog!==K||yt.numClippingPlanes!==void 0&&(yt.numClippingPlanes!==it.numPlanes||yt.numIntersection!==it.numIntersection)||yt.vertexAlphas!==wt||yt.vertexTangents!==Pt||yt.morphTargets!==St||yt.morphNormals!==zt||yt.morphColors!==Kt||yt.toneMapping!==ce||yt.morphTargetsCount!==te)&&(Xt=!0):(Xt=!0,yt.__version=k.version);let Xe=yt.currentProgram;Xt===!0&&(Xe=Aa(k,L,N));let Ts=!1,Ze=!1,sr=!1;const oe=Xe.getUniforms(),Ke=yt.uniforms;if(Et.useProgram(Xe.program)&&(Ts=!0,Ze=!0,sr=!0),k.id!==E&&(E=k.id,Ze=!0),Ts||x!==C){Et.buffers.depth.getReversed()&&C.reversedDepth!==!0&&(C._reversedDepth=!0,C.updateProjectionMatrix()),oe.setValue(_,"projectionMatrix",C.projectionMatrix),oe.setValue(_,"viewMatrix",C.matrixWorldInverse);const ze=oe.map.cameraPosition;ze!==void 0&&ze.setValue(_,bt.setFromMatrixPosition(C.matrixWorld)),Jt.logarithmicDepthBuffer&&oe.setValue(_,"logDepthBufFC",2/(Math.log(C.far+1)/Math.LN2)),(k.isMeshPhongMaterial||k.isMeshToonMaterial||k.isMeshLambertMaterial||k.isMeshBasicMaterial||k.isMeshStandardMaterial||k.isShaderMaterial)&&oe.setValue(_,"isOrthographic",C.isOrthographicCamera===!0),x!==C&&(x=C,Ze=!0,sr=!0)}if(N.isSkinnedMesh){oe.setOptional(_,N,"bindMatrix"),oe.setOptional(_,N,"bindMatrixInverse");const Pe=N.skeleton;Pe&&(Pe.boneTexture===null&&Pe.computeBoneTexture(),oe.setValue(_,"boneTexture",Pe.boneTexture,Ut))}N.isBatchedMesh&&(oe.setOptional(_,N,"batchingTexture"),oe.setValue(_,"batchingTexture",N._matricesTexture,Ut),oe.setOptional(_,N,"batchingIdTexture"),oe.setValue(_,"batchingIdTexture",N._indirectTexture,Ut),oe.setOptional(_,N,"batchingColorTexture"),N._colorsTexture!==null&&oe.setValue(_,"batchingColorTexture",N._colorsTexture,Ut));const $e=G.morphAttributes;if(($e.position!==void 0||$e.normal!==void 0||$e.color!==void 0)&&tt.update(N,G,Xe),(Ze||yt.receiveShadow!==N.receiveShadow)&&(yt.receiveShadow=N.receiveShadow,oe.setValue(_,"receiveShadow",N.receiveShadow)),k.isMeshGouraudMaterial&&k.envMap!==null&&(Ke.envMap.value=ut,Ke.flipEnvMap.value=ut.isCubeTexture&&ut.isRenderTargetTexture===!1?-1:1),k.isMeshStandardMaterial&&k.envMap===null&&L.environment!==null&&(Ke.envMapIntensity.value=L.environmentIntensity),Ze&&(oe.setValue(_,"toneMappingExposure",v.toneMappingExposure),yt.needsLights&&VI(Ke,sr),K&&k.fog===!0&&Q.refreshFogUniforms(Ke,K),Q.refreshMaterialUniforms(Ke,k,H,$,f.state.transmissionRenderTarget[C.id]),na.upload(_,cc(yt),Ke,Ut)),k.isShaderMaterial&&k.uniformsNeedUpdate===!0&&(na.upload(_,cc(yt),Ke,Ut),k.uniformsNeedUpdate=!1),k.isSpriteMaterial&&oe.setValue(_,"center",N.center),oe.setValue(_,"modelViewMatrix",N.modelViewMatrix),oe.setValue(_,"normalMatrix",N.normalMatrix),oe.setValue(_,"modelMatrix",N.matrixWorld),k.isShaderMaterial||k.isRawShaderMaterial){const Pe=k.uniformsGroups;for(let ze=0,yA=Pe.length;ze<yA;ze++){const Un=Pe[ze];Bt.update(Un,Xe),Bt.bind(Un,Xe)}}return Xe}function VI(C,L){C.ambientLightColor.needsUpdate=L,C.lightProbe.needsUpdate=L,C.directionalLights.needsUpdate=L,C.directionalLightShadows.needsUpdate=L,C.pointLights.needsUpdate=L,C.pointLightShadows.needsUpdate=L,C.spotLights.needsUpdate=L,C.spotLightShadows.needsUpdate=L,C.rectAreaLights.needsUpdate=L,C.hemisphereLights.needsUpdate=L}function WI(C){return C.isMeshLambertMaterial||C.isMeshToonMaterial||C.isMeshPhongMaterial||C.isMeshStandardMaterial||C.isShadowMaterial||C.isShaderMaterial&&C.lights===!0}this.getActiveCubeFace=function(){return T},this.getActiveMipmapLevel=function(){return R},this.getRenderTarget=function(){return P},this.setRenderTargetTextures=function(C,L,G){const k=ft.get(C);k.__autoAllocateDepthBuffer=C.resolveDepthBuffer===!1,k.__autoAllocateDepthBuffer===!1&&(k.__useRenderToTexture=!1),ft.get(C.texture).__webglTexture=L,ft.get(C.depthTexture).__webglTexture=k.__autoAllocateDepthBuffer?void 0:G,k.__hasExternalTextures=!0},this.setRenderTargetFramebuffer=function(C,L){const G=ft.get(C);G.__webglFramebuffer=L,G.__useDefaultFramebuffer=L===void 0};const YI=_.createFramebuffer();this.setRenderTarget=function(C,L=0,G=0){P=C,T=L,R=G;let k=!0,N=null,K=!1,ht=!1;if(C){const ut=ft.get(C);if(ut.__useDefaultFramebuffer!==void 0)Et.bindFramebuffer(_.FRAMEBUFFER,null),k=!1;else if(ut.__webglFramebuffer===void 0)Ut.setupRenderTarget(C);else if(ut.__hasExternalTextures)Ut.rebindTextures(C,ft.get(C.texture).__webglTexture,ft.get(C.depthTexture).__webglTexture);else if(C.depthBuffer){const St=C.depthTexture;if(ut.__boundDepthTexture!==St){if(St!==null&&ft.has(St)&&(C.width!==St.image.width||C.height!==St.image.height))throw new Error("WebGLRenderTarget: Attached DepthTexture is initialized to the incorrect size.");Ut.setupDepthRenderbuffer(C)}}const wt=C.texture;(wt.isData3DTexture||wt.isDataArrayTexture||wt.isCompressedArrayTexture)&&(ht=!0);const Pt=ft.get(C).__webglFramebuffer;C.isWebGLCubeRenderTarget?(Array.isArray(Pt[L])?N=Pt[L][G]:N=Pt[L],K=!0):C.samples>0&&Ut.useMultisampledRTT(C)===!1?N=ft.get(C).__webglMultisampledFramebuffer:Array.isArray(Pt)?N=Pt[G]:N=Pt,b.copy(C.viewport),z.copy(C.scissor),F=C.scissorTest}else b.copy(mt).multiplyScalar(H).floor(),z.copy(Ot).multiplyScalar(H).floor(),F=se;if(G!==0&&(N=YI),Et.bindFramebuffer(_.FRAMEBUFFER,N)&&k&&Et.drawBuffers(C,N),Et.viewport(b),Et.scissor(z),Et.setScissorTest(F),K){const ut=ft.get(C.texture);_.framebufferTexture2D(_.FRAMEBUFFER,_.COLOR_ATTACHMENT0,_.TEXTURE_CUBE_MAP_POSITIVE_X+L,ut.__webglTexture,G)}else if(ht){const ut=L;for(let wt=0;wt<C.textures.length;wt++){const Pt=ft.get(C.textures[wt]);_.framebufferTextureLayer(_.FRAMEBUFFER,_.COLOR_ATTACHMENT0+wt,Pt.__webglTexture,G,ut)}}else if(C!==null&&G!==0){const ut=ft.get(C.texture);_.framebufferTexture2D(_.FRAMEBUFFER,_.COLOR_ATTACHMENT0,_.TEXTURE_2D,ut.__webglTexture,G)}E=-1},this.readRenderTargetPixels=function(C,L,G,k,N,K,ht,gt=0){if(!(C&&C.isWebGLRenderTarget)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");return}let ut=ft.get(C).__webglFramebuffer;if(C.isWebGLCubeRenderTarget&&ht!==void 0&&(ut=ut[ht]),ut){Et.bindFramebuffer(_.FRAMEBUFFER,ut);try{const wt=C.textures[gt],Pt=wt.format,St=wt.type;if(!Jt.textureFormatReadable(Pt)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");return}if(!Jt.textureTypeReadable(St)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");return}L>=0&&L<=C.width-k&&G>=0&&G<=C.height-N&&(C.textures.length>1&&_.readBuffer(_.COLOR_ATTACHMENT0+gt),_.readPixels(L,G,k,N,vt.convert(Pt),vt.convert(St),K))}finally{const wt=P!==null?ft.get(P).__webglFramebuffer:null;Et.bindFramebuffer(_.FRAMEBUFFER,wt)}}},this.readRenderTargetPixelsAsync=async function(C,L,G,k,N,K,ht,gt=0){if(!(C&&C.isWebGLRenderTarget))throw new Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let ut=ft.get(C).__webglFramebuffer;if(C.isWebGLCubeRenderTarget&&ht!==void 0&&(ut=ut[ht]),ut)if(L>=0&&L<=C.width-k&&G>=0&&G<=C.height-N){Et.bindFramebuffer(_.FRAMEBUFFER,ut);const wt=C.textures[gt],Pt=wt.format,St=wt.type;if(!Jt.textureFormatReadable(Pt))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.");if(!Jt.textureTypeReadable(St))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.");const zt=_.createBuffer();_.bindBuffer(_.PIXEL_PACK_BUFFER,zt),_.bufferData(_.PIXEL_PACK_BUFFER,K.byteLength,_.STREAM_READ),C.textures.length>1&&_.readBuffer(_.COLOR_ATTACHMENT0+gt),_.readPixels(L,G,k,N,vt.convert(Pt),vt.convert(St),0);const Kt=P!==null?ft.get(P).__webglFramebuffer:null;Et.bindFramebuffer(_.FRAMEBUFFER,Kt);const ce=_.fenceSync(_.SYNC_GPU_COMMANDS_COMPLETE,0);return _.flush(),await Wd(_,ce,4),_.bindBuffer(_.PIXEL_PACK_BUFFER,zt),_.getBufferSubData(_.PIXEL_PACK_BUFFER,0,K),_.deleteBuffer(zt),_.deleteSync(ce),K}else throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.")},this.copyFramebufferToTexture=function(C,L=null,G=0){const k=Math.pow(2,-G),N=Math.floor(C.image.width*k),K=Math.floor(C.image.height*k),ht=L!==null?L.x:0,gt=L!==null?L.y:0;Ut.setTexture2D(C,0),_.copyTexSubImage2D(_.TEXTURE_2D,G,0,0,ht,gt,N,K),Et.unbindTexture()};const XI=_.createFramebuffer(),ZI=_.createFramebuffer();this.copyTextureToTexture=function(C,L,G=null,k=null,N=0,K=null){K===null&&(N!==0?(as("WebGLRenderer: copyTextureToTexture function signature has changed to support src and dst mipmap levels."),K=N,N=0):K=0);let ht,gt,ut,wt,Pt,St,zt,Kt,ce;const ne=C.isCompressedTexture?C.mipmaps[K]:C.image;if(G!==null)ht=G.max.x-G.min.x,gt=G.max.y-G.min.y,ut=G.isBox3?G.max.z-G.min.z:1,wt=G.min.x,Pt=G.min.y,St=G.isBox3?G.min.z:0;else{const $e=Math.pow(2,-N);ht=Math.floor(ne.width*$e),gt=Math.floor(ne.height*$e),C.isDataArrayTexture?ut=ne.depth:C.isData3DTexture?ut=Math.floor(ne.depth*$e):ut=1,wt=0,Pt=0,St=0}k!==null?(zt=k.x,Kt=k.y,ce=k.z):(zt=0,Kt=0,ce=0);const te=vt.convert(L.format),yt=vt.convert(L.type);let ae;L.isData3DTexture?(Ut.setTexture3D(L,0),ae=_.TEXTURE_3D):L.isDataArrayTexture||L.isCompressedArrayTexture?(Ut.setTexture2DArray(L,0),ae=_.TEXTURE_2D_ARRAY):(Ut.setTexture2D(L,0),ae=_.TEXTURE_2D),_.pixelStorei(_.UNPACK_FLIP_Y_WEBGL,L.flipY),_.pixelStorei(_.UNPACK_PREMULTIPLY_ALPHA_WEBGL,L.premultiplyAlpha),_.pixelStorei(_.UNPACK_ALIGNMENT,L.unpackAlignment);const Xt=_.getParameter(_.UNPACK_ROW_LENGTH),Xe=_.getParameter(_.UNPACK_IMAGE_HEIGHT),Ts=_.getParameter(_.UNPACK_SKIP_PIXELS),Ze=_.getParameter(_.UNPACK_SKIP_ROWS),sr=_.getParameter(_.UNPACK_SKIP_IMAGES);_.pixelStorei(_.UNPACK_ROW_LENGTH,ne.width),_.pixelStorei(_.UNPACK_IMAGE_HEIGHT,ne.height),_.pixelStorei(_.UNPACK_SKIP_PIXELS,wt),_.pixelStorei(_.UNPACK_SKIP_ROWS,Pt),_.pixelStorei(_.UNPACK_SKIP_IMAGES,St);const oe=C.isDataArrayTexture||C.isData3DTexture,Ke=L.isDataArrayTexture||L.isData3DTexture;if(C.isDepthTexture){const $e=ft.get(C),Pe=ft.get(L),ze=ft.get($e.__renderTarget),yA=ft.get(Pe.__renderTarget);Et.bindFramebuffer(_.READ_FRAMEBUFFER,ze.__webglFramebuffer),Et.bindFramebuffer(_.DRAW_FRAMEBUFFER,yA.__webglFramebuffer);for(let Un=0;Un<ut;Un++)oe&&(_.framebufferTextureLayer(_.READ_FRAMEBUFFER,_.COLOR_ATTACHMENT0,ft.get(C).__webglTexture,N,St+Un),_.framebufferTextureLayer(_.DRAW_FRAMEBUFFER,_.COLOR_ATTACHMENT0,ft.get(L).__webglTexture,K,ce+Un)),_.blitFramebuffer(wt,Pt,ht,gt,zt,Kt,ht,gt,_.DEPTH_BUFFER_BIT,_.NEAREST);Et.bindFramebuffer(_.READ_FRAMEBUFFER,null),Et.bindFramebuffer(_.DRAW_FRAMEBUFFER,null)}else if(N!==0||C.isRenderTargetTexture||ft.has(C)){const $e=ft.get(C),Pe=ft.get(L);Et.bindFramebuffer(_.READ_FRAMEBUFFER,XI),Et.bindFramebuffer(_.DRAW_FRAMEBUFFER,ZI);for(let ze=0;ze<ut;ze++)oe?_.framebufferTextureLayer(_.READ_FRAMEBUFFER,_.COLOR_ATTACHMENT0,$e.__webglTexture,N,St+ze):_.framebufferTexture2D(_.READ_FRAMEBUFFER,_.COLOR_ATTACHMENT0,_.TEXTURE_2D,$e.__webglTexture,N),Ke?_.framebufferTextureLayer(_.DRAW_FRAMEBUFFER,_.COLOR_ATTACHMENT0,Pe.__webglTexture,K,ce+ze):_.framebufferTexture2D(_.DRAW_FRAMEBUFFER,_.COLOR_ATTACHMENT0,_.TEXTURE_2D,Pe.__webglTexture,K),N!==0?_.blitFramebuffer(wt,Pt,ht,gt,zt,Kt,ht,gt,_.COLOR_BUFFER_BIT,_.NEAREST):Ke?_.copyTexSubImage3D(ae,K,zt,Kt,ce+ze,wt,Pt,ht,gt):_.copyTexSubImage2D(ae,K,zt,Kt,wt,Pt,ht,gt);Et.bindFramebuffer(_.READ_FRAMEBUFFER,null),Et.bindFramebuffer(_.DRAW_FRAMEBUFFER,null)}else Ke?C.isDataTexture||C.isData3DTexture?_.texSubImage3D(ae,K,zt,Kt,ce,ht,gt,ut,te,yt,ne.data):L.isCompressedArrayTexture?_.compressedTexSubImage3D(ae,K,zt,Kt,ce,ht,gt,ut,te,ne.data):_.texSubImage3D(ae,K,zt,Kt,ce,ht,gt,ut,te,yt,ne):C.isDataTexture?_.texSubImage2D(_.TEXTURE_2D,K,zt,Kt,ht,gt,te,yt,ne.data):C.isCompressedTexture?_.compressedTexSubImage2D(_.TEXTURE_2D,K,zt,Kt,ne.width,ne.height,te,ne.data):_.texSubImage2D(_.TEXTURE_2D,K,zt,Kt,ht,gt,te,yt,ne);_.pixelStorei(_.UNPACK_ROW_LENGTH,Xt),_.pixelStorei(_.UNPACK_IMAGE_HEIGHT,Xe),_.pixelStorei(_.UNPACK_SKIP_PIXELS,Ts),_.pixelStorei(_.UNPACK_SKIP_ROWS,Ze),_.pixelStorei(_.UNPACK_SKIP_IMAGES,sr),K===0&&L.generateMipmaps&&_.generateMipmap(ae),Et.unbindTexture()},this.copyTextureToTexture3D=function(C,L,G=null,k=null,N=0){return as('WebGLRenderer: copyTextureToTexture3D function has been deprecated. Use "copyTextureToTexture" instead.'),this.copyTextureToTexture(C,L,G,k,N)},this.initRenderTarget=function(C){ft.get(C).__webglFramebuffer===void 0&&Ut.setupRenderTarget(C)},this.initTexture=function(C){C.isCubeTexture?Ut.setTextureCube(C,0):C.isData3DTexture?Ut.setTexture3D(C,0):C.isDataArrayTexture||C.isCompressedArrayTexture?Ut.setTexture2DArray(C,0):Ut.setTexture2D(C,0),Et.unbindTexture()},this.resetState=function(){T=0,R=0,P=null,Et.reset(),At.reset()},typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}get coordinateSystem(){return Ci}get outputColorSpace(){return this._outputColorSpace}set outputColorSpace(t){this._outputColorSpace=t;const e=this.getContext();e.drawingBufferColorSpace=Yt._getDrawingBufferColorSpace(t),e.unpackColorSpace=Yt._getUnpackColorSpace()}}const nc={LANGUAGE_CHANGE_CONFIRMED:la.LANGUAGE_CHANGE_CONFIRMED},LI=new Set([jt.ENGLISH_UNITED_KINGDOM]),vA={selected:jt.ENGLISH_UNITED_KINGDOM,options:LI},ra={OPTIONS:"languages",SELECTED:"selected"},NI=`<section class="root">
|
|
3956
3956
|
<canvas></canvas>
|
|
3957
3957
|
<section class="menu-container">
|
|
3958
3958
|
<bar-menu visibleButtons="1" cyclicalNavigation="true"></bar-menu>
|
|
@@ -3962,25 +3962,27 @@ void main() {
|
|
|
3962
3962
|
headline="Switch language?"
|
|
3963
3963
|
></confirmation-dialog>
|
|
3964
3964
|
</section>
|
|
3965
|
-
`,lI=":host{display:block;width:100%;height:100%}.root{position:relative;width:100%;height:100%;overflow:hidden}canvas{position:absolute;inset:0;display:block;touch-action:none}.menu-container{position:absolute;bottom:25%;left:50%}",gc=new CSSStyleSheet;gc.replaceSync(lI);const ca={LANGUAGES:"languages",SELECTED:"selected"};class wl extends HTMLElement{static textureLoader=new MA;shadowRoot;static get observedAttributes(){return Object.values(ca)}_renderer;_scene;_camera;_root;_canvas;_controls;_resizeObserver;_clock=new PA;_lastTime=0;_lights=[];_spotlight;_flagsGroup;_wind=null;_circleRadius=5;_cameraLookAtY=2;_targetGroupRotation=0;_currentGroupRotation=0;_unwrappedGroupRotation=0;_animationFrameId=0;_introCameraStartPosition=new O(0,5,10);_introCameraEndPosition=new O(0,5,10);_introCameraElapsed=0;_introCameraMoveDuration=2.2;_introCameraHoldDuration=.4;_isIntroCameraAnimating=!1;_isIntroCameraHolding=!1;options=Tl.options;flags=[];selected=Tl.selected;selectedTmp=Tl.selected;_menuContainer;_menuIntroStartScale=.72;_barMenu;_languageButtons=[];_confirmationDialog;_isInitialized=!1;_isInitializing=!1;_barMenuVisibleIndex=-1;_programmaticScrollTimer=null;constructor(){super(),this.shadowRoot=this.attachShadow({mode:"open"}),this.shadowRoot.adoptedStyleSheets.push(gc)}attributeChangedCallback(t,e,i){if(!(e===i||i==null))switch(t){case ca.LANGUAGES:{const n=JSON.parse(i);this._initializeComponent(new Set(n))}break;case ca.SELECTED:{const n=i;this.selectLanguage(n)}break}}connectedCallback(){this._isInitialized&&this._animationFrameId===0&&(this._animationFrameId=requestAnimationFrame(this._animate))}disconnectedCallback(){cancelAnimationFrame(this._animationFrameId),this._animationFrameId=0,this._programmaticScrollTimer!==null&&(clearTimeout(this._programmaticScrollTimer),this._programmaticScrollTimer=null),this.flags.forEach(t=>{t.flagGroup?.destroy(),this._scene.remove(t.object)}),this._lights.forEach(t=>{t.dispose()}),this._scene.clear(),this._renderer.dispose(),this._resizeObserver.disconnect()}_initializeComponent(t){if(!(this._isInitialized||this._isInitializing)){if(this.options=t,this.options.size===0){console.warn("LanguagePickerComponent: No languages provided");return}this._isInitializing=!0,this.setupHtmlElements(),this.setupScene(),this.setupUI(),this.setupFlags(),this.setupConfirmationDialog(),this._isInitialized=!0,this._isInitializing=!1,this.isConnected&&this._animationFrameId===0&&(this._animationFrameId=requestAnimationFrame(this._animate))}}setupHtmlElements(){this.shadowRoot.innerHTML=oI,this._root=this.shadowRoot.querySelector(".root")??(()=>{throw new Error(`${this.constructor.name}: root element not found`)})(),this._canvas=this.shadowRoot.querySelector(Dl.CANVAS)??(()=>{throw new Error(`${this.constructor.name}: canvas element not found`)})(),this._confirmationDialog=this.shadowRoot.querySelector(gn.selector)??(()=>{throw new Error(`${this.constructor.name}: confirmation-dialog element not found`)})()}setupScene(){this._scene=new EA,this._scene.background=new Wt(1710618),this._scene.fog=new cl(1710618,8,50),this._camera=new ke(45,1,.1,100),this._camera.position.set(0,5,10),this._camera.lookAt(0,2,0),this._scene.add(this._camera),this._renderer=new Ac({antialias:!0,canvas:this._canvas,alpha:!0}),this._renderer.debug.checkShaderErrors=!0,this._renderer.setPixelRatio(Math.min(window.devicePixelRatio,2)),this._renderer.shadowMap.enabled=!1,this._controls=new ZC(this._camera,this._canvas),this._controls.enableDamping=!0,this._controls.dampingFactor=.05,this._controls.autoRotate=!1,this._controls.enableRotate=!1,this._controls.enablePan=!1,this._controls.enableZoom=!1,this._controls.target.set(0,this._cameraLookAtY,0);const t=new Gf(16777215,.3);this._scene.add(t),this._lights.push(t);const e=new RA(14674943,3);e.position.set(10,20,10),this._scene.add(e),this._lights.push(e);const i=new RA(11329439,.15);i.position.set(0,-1,0),this._scene.add(i),this._lights.push(i),this._spotlight=new zf(16777215,150),this._spotlight.angle=Math.PI/6,this._spotlight.penumbra=.3,this._spotlight.decay=2,this._spotlight.distance=30,this._scene.add(this._spotlight),this._scene.add(this._spotlight.target),this._lights.push(this._spotlight);const n=new Ci(new or(100,100),new Df({color:1710618,roughness:.8,metalness:.2}));n.rotation.x=-Math.PI/2,n.receiveShadow=!0,this._scene.add(n),this.resizeHandler(),this.shadowRoot.appendChild(this._root)}setupFlags(){this._flagsGroup=new ar,this._scene.add(this._flagsGroup),this._wind=new Ni.Wind({speed:8,direction:new O(1,0,0)});const t=this.options.size;this._circleRadius=Math.max(5,3+t*.5),this._cameraLookAtY=this._circleRadius*.4,[...this.options].forEach((n,r)=>{const a=-(r/t*Math.PI*2),o=-Math.sin(a)*this._circleRadius,h=Math.cos(a)*this._circleRadius,l=Ni.buildFlag(),A=Ni.buildFlagpole({flagpoleType:Ni.FLAG_POLE_TYPE.VERTICAL},l),c=new Ni.FlagGroup({flagpole:A,flag:l});c.object.position.set(o,0,h);const u=pa.get(n)?.isoCode,d=u!=null?Wn[u]:void 0;d!=null&&wl.textureLoader.load(d,p=>{c.setTexture(p)},void 0,()=>{console.warn(`LanguagePickerComponent: Failed to load texture for ${n}`)}),this._flagsGroup.add(c.object),this.flags.push({id:n,flagGroup:c,object:c.object,angle:a,windPhase:Math.random()*Math.PI*2,randomSeed:Math.random()})});const e=this.flags.find(n=>n.id===this.selected)??this.flags[0];if(e===void 0)return;this.selected=e.id,this.selectedTmp=this.selected,this._targetGroupRotation=e.angle,this._currentGroupRotation=e.angle,this._unwrappedGroupRotation=e.angle,this._flagsGroup.rotation.y=e.angle;const i=this._computeIntroCameraEndPosition();this._introCameraEndPosition.copy(i),this._introCameraStartPosition.set(0,i.y+this._circleRadius*3.1,i.z+this._circleRadius*4.6),this._camera.position.copy(this._introCameraStartPosition),this._controls.target.set(0,this._cameraLookAtY,0),this._controls.update(),this._introCameraElapsed=0,this._isIntroCameraHolding=!0,this._isIntroCameraAnimating=!0,this._setMenuIntroScale(0),this._spotlight.position.set(0,8,this._circleRadius),this._spotlight.target.position.set(0,0,this._circleRadius),this._spotlight.target.updateMatrixWorld()}resizeHandler=()=>{const t=()=>{const e=this._root.clientWidth,i=this._root.clientHeight;e===0||i===0||(this._camera.aspect=e/i,this._camera.updateProjectionMatrix(),this._renderer.setSize(e,i,!1))};this._resizeObserver=new ResizeObserver(t),this._resizeObserver.observe(this._root),t()};listenToBarMenuNavigation(){new MutationObserver(()=>{if(this._programmaticScrollTimer!==null)return;const e=this._barMenu.querySelectorAll(Bl.selector);for(let i=0;i<e.length;i++){const n=window.getComputedStyle(e[i]);if(n.display!=="none"&&n.visibility!=="hidden"&&parseFloat(n.opacity)>0){if(i===this._barMenuVisibleIndex)return;this._barMenuVisibleIndex=i;const a=[...this.options][i];if(a==null)return;this.selectedTmp=a,this._rotateToId(a);break}}}).observe(this._barMenu,{attributes:!0,subtree:!0,attributeFilter:["style","class"]})}setupUI(){this._menuContainer=this.shadowRoot.querySelector(".menu-container")??(()=>{throw new Error(`${this.constructor.name}: menu-container not found`)})(),this._barMenu=this.shadowRoot.querySelector(iu.selector)??(()=>{throw new Error(`${this.constructor.name}: bar menu element not found`)})()}_computeIntroCameraEndPosition(){const t=new gs().setFromObject(this._flagsGroup),e=new O,i=new O;t.getSize(e),t.getCenter(i);const n=t.min.y,r=Math.max(e.x,e.y,e.z)*.5,a=this._camera.fov*Math.PI/180,o=this._camera.aspect>0?this._camera.aspect:1,h=2*Math.atan(Math.tan(a*.5)*o),l=Math.max(r/Math.tan(a*.5),r/Math.tan(h*.5))*1.05,A=n+e.y*.25;this._cameraLookAtY=A+e.y*.06;const c=A+Math.max(e.y*.8,this._circleRadius*.28),u=i.z+l+this._circleRadius*.01;return new O(0,c,u)}selectLanguage(t){if(this._isInitialized===!1){this.selected=t,this.selectedTmp=t;return}if(this.options.has(t)===!1){console.warn(`LanguagePickerComponent: Language '${t}' not found`);return}t!==this.selected&&(this.selected=t,this.selectedTmp=t,this._rotateToId(this.selected),this._syncBarMenuToId(this.selected))}addLanguage(t){}addLocales(t){}removeLanguage(t){}removeLocales(t){}_rotateToId(t){const e=this.flags.find(r=>r.id===t);if(e===void 0)return;const i=2*Math.PI;let n=e.angle;for(;Math.abs(n-this._unwrappedGroupRotation)>Math.PI;)n+=n<this._unwrappedGroupRotation?i:-i;this._targetGroupRotation=n,this._unwrappedGroupRotation=n,this._controls.enabled=!1}_syncBarMenuToId(t){const e=[...this.options].indexOf(t);e!==-1&&(this._barMenuVisibleIndex=e,this._programmaticScrollTimer!==null&&clearTimeout(this._programmaticScrollTimer),this._programmaticScrollTimer=setTimeout(()=>{this._programmaticScrollTimer=null},500),this._barMenu.scrollToButton(e))}setupConfirmationDialog(){this._confirmationDialog.addEventListener(gn.COMPONENT_CUSTOM_MESSAGES.CONFIRMATION_DIALOG_CONFIRM,this._handleConfirmation),this.options.forEach(t=>{const e=document.createElement(Bl.selector);e.textContent=pa.get(t)?.autonyms??t,e.addEventListener(ma.CLICK,()=>{this.barMenuButtonClickHandler()}),this._languageButtons.push(e),this._barMenu.appendChild(e)}),this._barMenu.visibleButtons=1,this._barMenu.cyclicalNavigation=!0,requestAnimationFrame(()=>{this._syncBarMenuToId(this.selected),this.listenToBarMenuNavigation()})}barMenuButtonClickHandler=()=>{const t=pa.get(this.selectedTmp);t!==void 0&&(this._confirmationDialog.text=`Switch to ${t.language.toLowerCase()}?`,this._confirmationDialog.showModal())};_handleConfirmation=()=>{this.selectedTmp!==this.selected&&this.dispatchEvent(new CustomEvent(fc.LANGUAGE_CHANGE_CONFIRMED,{detail:{value:this.selectedTmp},bubbles:!0,composed:!0}))};_animate=()=>{this._animationFrameId=requestAnimationFrame(this._animate);try{if(!this._isInitialized||this._camera==null||this._renderer==null)return;const t=this._clock.getElapsedTime(),e=t-this._lastTime;this._lastTime=t,this._wind?.update(),this.flags.forEach((i,n)=>{if(i.flagGroup==null)return;i.windPhase+=e*(.5+i.randomSeed*1.5),Ni.applyGravityToCloth(i.flagGroup.flag.cloth,i.flagGroup.flag.object),this._wind!=null&&Ni.applyWindForceToCloth(i.flagGroup.flag.cloth,this._wind,i.flagGroup.flag.object,{randomizeAmount:.6,randomSeed:i.randomSeed});const r=new Ni.Wind({speed:.3+Math.sin(i.windPhase)*.2,direction:new O(Math.sin(i.windPhase+n)*.5,Math.cos(i.windPhase*.7),Math.sin(i.windPhase*.5+n)).normalize()});Ni.applyWindForceToCloth(i.flagGroup.flag.cloth,r,i.flagGroup.flag.object,{randomizeAmount:.5,randomSeed:i.randomSeed*2}),i.flagGroup.simulate(e),i.flagGroup.render()}),this._updateGroupRotation(),this._updateIntroCamera(e),this._controls.update(),this._renderer.render(this._scene,this._camera)}catch(t){console.error("Animation loop error:",t),cancelAnimationFrame(this._animationFrameId)}};_updateGroupRotation(){if(this._flagsGroup==null)return;const t=this._targetGroupRotation-this._currentGroupRotation;this._currentGroupRotation+=t*.1,this._flagsGroup.rotation.y=this._currentGroupRotation,Math.abs(t)<.01&&(this._controls.enabled=!0)}_updateIntroCamera(t){if(!this._isIntroCameraAnimating)return;if(this._isIntroCameraHolding){this._introCameraElapsed+=t,this._camera.position.copy(this._introCameraStartPosition),this._controls.target.set(0,this._cameraLookAtY,0),this._setMenuIntroScale(0),this._introCameraElapsed>=this._introCameraHoldDuration&&(this._isIntroCameraHolding=!1,this._introCameraElapsed=0);return}this._introCameraElapsed+=t;const e=Math.min(1,this._introCameraElapsed/this._introCameraMoveDuration),i=e*e*(3-2*e),n=1-Math.pow(1-e,4);this._camera.position.set(0,this._introCameraStartPosition.y+(this._introCameraEndPosition.y-this._introCameraStartPosition.y)*n,this._introCameraStartPosition.z+(this._introCameraEndPosition.z-this._introCameraStartPosition.z)*i),this._controls.target.set(0,this._cameraLookAtY,0),this._setMenuIntroScale(i),e>=1&&(this._isIntroCameraAnimating=!1,this._camera.position.copy(this._introCameraEndPosition),this._setMenuIntroScale(1))}_setMenuIntroScale(t){if(this._menuContainer==null)return;const e=Math.min(1,Math.max(0,t)),i=this._menuIntroStartScale+(1-this._menuIntroStartScale)*e;this._menuContainer.style.transform=`translateX(-50%) scale(${i})`}}const hI=Object.freeze(Object.defineProperty({__proto__:null,COMPONENT_CUSTOM_MESSAGES:fc,LanguagePickerComponent:wl,OBSERVED_ATTRIBUTES:ca,selector:"as-language-picker"},Symbol.toStringTag,{value:"Module"})),pc={THEME_CHANGE_CONFIRMED:ga.THEME_CHANGE_CONFIRMED},ua={RIGHT:new O(1,0,0),LEFT:new O(-1,0,0),TOP:new O(0,1,0),BOTTOM:new O(0,-1,0),FRONT:new O(0,0,1),BACK:new O(0,0,-1)},mc=`<section class="root">
|
|
3965
|
+
`,BI=":host{display:block;width:100%;height:100%}.root{position:relative;width:100%;height:100%;overflow:hidden}canvas{position:absolute;inset:0;width:100%;height:100%;display:block;touch-action:none}.menu-container{position:absolute;bottom:clamp(1rem,12vh,25%);left:50%}@media(max-width:768px){.menu-container{bottom:max(1rem,env(safe-area-inset-bottom) + 1rem)}}",sc=new CSSStyleSheet;sc.replaceSync(BI);class xA extends HTMLElement{static textureLoader=new Ih;shadowRoot;static get observedAttributes(){return Object.values(ra)}options=vA.options;flags=[];selected=vA.selected;selectedTmp=vA.selected;_renderer;_scene;_camera;_root;_canvas;_resizeObserver;_clock=new Mh;_lastTime=0;_spotlight;_flagsGroup;_wind=null;_circleRadius=5;_cameraLookAtY=2;_targetGroupRotation=0;_currentGroupRotation=0;_unwrappedGroupRotation=0;_animationFrameId=0;_introCameraStartPosition=new B(0,5,10);_introCameraEndPosition=new B(0,5,10);_introCameraElapsed=0;_introCameraMoveDuration=2.2;_introCameraHoldDuration=.4;_isIntroCameraAnimating=!1;_isIntroCameraHolding=!1;_menuContainer;_menuIntroStartScale=.72;_barMenu;_confirmationDialog;_isInitialized=!1;_isInitializing=!1;_barMenuVisibleIndex=-1;_floorGeometry;_floorMaterial;_programmaticScrollTimer=null;constructor(){super(),this.shadowRoot=this.attachShadow({mode:"open"}),this.shadowRoot.adoptedStyleSheets.push(sc)}attributeChangedCallback(t,e,i){if(!(e===i||i==null))switch(t){case ra.OPTIONS:{const n=JSON.parse(i);this.init(new Set(n))}break;case ra.SELECTED:{const n=i;this.select(n)}break}}connectedCallback(){this._isInitialized&&this._animationFrameId===0&&(this._animationFrameId=requestAnimationFrame(this._animate))}disconnectedCallback(){cancelAnimationFrame(this._animationFrameId),this._animationFrameId=0,this._programmaticScrollTimer!==null&&(clearTimeout(this._programmaticScrollTimer),this._programmaticScrollTimer=null),this.flags.forEach(t=>{t.flagGroup?.destroy()}),this.flags=[],this._floorGeometry.dispose(),this._floorMaterial.dispose(),this._scene.clear(),this._renderer.dispose(),this._resizeObserver.disconnect(),this._confirmationDialog?.removeEventListener(Wi.COMPONENT_CUSTOM_MESSAGES.CONFIRMATION_DIALOG_CONFIRM,this._handleConfirmation)}init(t){if(!(this._isInitialized||this._isInitializing)){if(this.options=t,this.options.size===0){console.warn(`${this.constructor.name}: No languages provided`);return}this._isInitializing=!0,this.setupHtmlElements(),this.setupScene(),this.setupUI(),this.setupFlags(),this.setupConfirmationDialog(),this._isInitialized=!0,this._isInitializing=!1,this.isConnected&&this._animationFrameId===0&&(this._animationFrameId=requestAnimationFrame(this._animate))}}setupHtmlElements(){this.shadowRoot.innerHTML=NI,this._root=this.shadowRoot.querySelector(".root")??(()=>{throw new Error(`${this.constructor.name}: root element not found`)})(),this._canvas=this.shadowRoot.querySelector(bA.CANVAS)??(()=>{throw new Error(`${this.constructor.name}: canvas element not found`)})(),this._confirmationDialog=this.shadowRoot.querySelector(Wi.selector)??(()=>{throw new Error(`${this.constructor.name}: confirmation-dialog element not found`)})()}setupScene(){this._scene=new gh,this._scene.background=new Vt(1710618),this._scene.fog=new rA(1710618,8,50),this._camera=new Ue(45,1,.1,100),this._camera.position.set(0,5,10),this._camera.lookAt(0,2,0),this._scene.add(this._camera),this._renderer=new ic({antialias:!0,canvas:this._canvas,alpha:!0}),this._renderer.debug.checkShaderErrors=!0,this._renderer.setPixelRatio(Math.min(window.devicePixelRatio,2)),this._renderer.shadowMap.enabled=!1;const t=new Rf(16777215,.3);this._scene.add(t);const e=new Sh(14674943,3);e.position.set(10,20,10),this._scene.add(e);const i=new Sh(11329439,.15);i.position.set(0,-1,0),this._scene.add(i),this._spotlight=new Tf(16777215,150),this._spotlight.angle=Math.PI/6,this._spotlight.penumbra=.3,this._spotlight.decay=2,this._spotlight.distance=30,this._scene.add(this._spotlight),this._scene.add(this._spotlight.target);const n=100;this._floorGeometry=new ir(n,n),this._floorMaterial=new vf({color:1710618,roughness:.8,metalness:.2});const s=new fi(this._floorGeometry,this._floorMaterial);s.rotation.x=-Math.PI/2,s.receiveShadow=!0,this._scene.add(s),this.resizeHandler(),this.shadowRoot.appendChild(this._root)}setupFlags(){this._flagsGroup=new er,this._scene.add(this._flagsGroup),this._wind=new Pi.Wind({speed:8,direction:new B(1,0,0)});const t=this.options.size;this._circleRadius=Math.max(5,3+t*.5),this._cameraLookAtY=this._circleRadius*.4,[...this.options].forEach((n,s)=>{const a=-(s/t*Math.PI*2),o=-Math.sin(a)*this._circleRadius,l=Math.cos(a)*this._circleRadius,A=Pi.buildFlag(),h=Pi.buildFlagpole({flagpoleType:Pi.FLAG_POLE_TYPE.VERTICAL},A),c=new Pi.FlagGroup({flagpole:h,flag:A});c.object.position.set(o,0,l);const u=ha.get(n)?.isoCode,d=u!=null?zn[u]:void 0;d!=null&&xA.textureLoader.load(d,p=>{c.setTexture(p)},void 0,()=>{console.warn(`LanguagePickerComponent: Failed to load texture for ${n}`)}),this._flagsGroup.add(c.object),this.flags.push({id:n,flagGroup:c,angle:a,windPhase:Math.random()*Math.PI*2,randomSeed:Math.random()})});const e=this.flags.find(n=>n.id===this.selected)??this.flags[0];if(e===void 0)return;this.selected=e.id,this.selectedTmp=this.selected,this._targetGroupRotation=e.angle,this._currentGroupRotation=e.angle,this._unwrappedGroupRotation=e.angle,this._flagsGroup.rotation.y=e.angle;const i=this._computeIntroCameraEndPosition();this._introCameraEndPosition.copy(i),this._introCameraStartPosition.set(0,i.y+this._circleRadius*3.1,i.z+this._circleRadius*4.6),this._camera.position.copy(this._introCameraStartPosition),this._camera.lookAt(0,this._cameraLookAtY,0),this._introCameraElapsed=0,this._isIntroCameraHolding=!0,this._isIntroCameraAnimating=!0,this._setMenuIntroScale(0),this._spotlight.position.set(0,8,this._circleRadius),this._spotlight.target.position.set(0,0,this._circleRadius),this._spotlight.target.updateMatrixWorld()}resizeHandler=()=>{const t=()=>{const e=this._root.clientWidth,i=this._root.clientHeight;e===0||i===0||(this._camera.aspect=e/i,this._camera.updateProjectionMatrix(),this._renderer.setSize(e,i,!1))};this._resizeObserver=new ResizeObserver(t),this._resizeObserver.observe(this._root),t()};listenToBarMenuNavigation(){new MutationObserver(()=>{if(this._programmaticScrollTimer!==null)return;const e=this._barMenu.querySelectorAll(PA.selector);for(let i=0;i<e.length;i++){const n=window.getComputedStyle(e[i]);if(n.display!=="none"&&n.visibility!=="hidden"&&parseFloat(n.opacity)>0){if(i===this._barMenuVisibleIndex)return;this._barMenuVisibleIndex=i;const a=[...this.options][i];if(a==null)return;this.selectedTmp=a,this._rotateToId(a);break}}}).observe(this._barMenu,{attributes:!0,subtree:!0,attributeFilter:["style","class"]})}setupUI(){this._menuContainer=this.shadowRoot.querySelector(".menu-container")??(()=>{throw new Error(`${this.constructor.name}: menu-container not found`)})(),this._barMenu=this.shadowRoot.querySelector(Wc.selector)??(()=>{throw new Error(`${this.constructor.name}: bar menu element not found`)})()}_computeIntroCameraEndPosition(){const t=new ls().setFromObject(this._flagsGroup),e=new B,i=new B;t.getSize(e),t.getCenter(i);const n=t.min.y,s=Math.max(e.x,e.y,e.z)*.5,a=this._camera.fov*Math.PI/180,o=this._camera.aspect>0?this._camera.aspect:1,l=2*Math.atan(Math.tan(a*.5)*o),A=Math.max(s/Math.tan(a*.5),s/Math.tan(l*.5))*1.05,h=n+e.y*.25;this._cameraLookAtY=h+e.y*.06;const c=h+Math.max(e.y*.8,this._circleRadius*.28),u=i.z+A+this._circleRadius*.01;return new B(0,c,u)}select(t){if(this._isInitialized===!1){this.selected=t,this.selectedTmp=t;return}if(this.options.has(t)===!1){console.warn(`LanguagePickerComponent: Language '${t}' not found`);return}t!==this.selected&&(this.selected=t,this.selectedTmp=t,this._rotateToId(this.selected),this._syncBarMenuToId(this.selected))}_rotateToId(t){const e=this.flags.find(s=>s.id===t);if(e===void 0)return;const i=2*Math.PI;let n=e.angle;for(;Math.abs(n-this._unwrappedGroupRotation)>Math.PI;)n+=n<this._unwrappedGroupRotation?i:-i;this._targetGroupRotation=n,this._unwrappedGroupRotation=n}_syncBarMenuToId(t){const e=[...this.options].indexOf(t);e!==-1&&(this._barMenuVisibleIndex=e,this._programmaticScrollTimer!==null&&clearTimeout(this._programmaticScrollTimer),this._programmaticScrollTimer=setTimeout(()=>{this._programmaticScrollTimer=null},500),this._barMenu.scrollToButton(e))}setupConfirmationDialog(){this._confirmationDialog.addEventListener(Wi.COMPONENT_CUSTOM_MESSAGES.CONFIRMATION_DIALOG_CONFIRM,this._handleConfirmation),this.options.forEach(t=>{const e=document.createElement(PA.selector);e.textContent=ha.get(t)?.autonyms??t,e.addEventListener(rr.CLICK,()=>{this.barMenuButtonClickHandler()}),this._barMenu.appendChild(e)}),this._barMenu.visibleButtons=1,this._barMenu.cyclicalNavigation=!0,requestAnimationFrame(()=>{this._syncBarMenuToId(this.selected),this.listenToBarMenuNavigation()})}barMenuButtonClickHandler=()=>{const t=ha.get(this.selectedTmp);t!==void 0&&(this._confirmationDialog.text=`Switch to ${t.language.toLowerCase()}?`,this._confirmationDialog.showModal())};_handleConfirmation=()=>{this.selectedTmp!==this.selected&&this.dispatchEvent(new CustomEvent(nc.LANGUAGE_CHANGE_CONFIRMED,{detail:{value:this.selectedTmp},bubbles:!0,composed:!0}))};_animate=()=>{this._animationFrameId=requestAnimationFrame(this._animate);try{if(!this._isInitialized||this._camera==null||this._renderer==null)return;const t=this._clock.getElapsedTime(),e=t-this._lastTime;this._lastTime=t,this._wind!=null&&this._wind.update(),this.flags.forEach((i,n)=>{if(i.flagGroup==null)return;i.windPhase+=e*(.5+i.randomSeed*1.5),Pi.applyGravityToCloth(i.flagGroup.flag.cloth,i.flagGroup.flag.object),this._wind!=null&&Pi.applyWindForceToCloth(i.flagGroup.flag.cloth,this._wind,i.flagGroup.flag.object,{randomizeAmount:.6,randomSeed:i.randomSeed});const s=new Pi.Wind({speed:.3+Math.sin(i.windPhase)*.2,direction:new B(Math.sin(i.windPhase+n)*.5,Math.cos(i.windPhase*.7),Math.sin(i.windPhase*.5+n)).normalize()});Pi.applyWindForceToCloth(i.flagGroup.flag.cloth,s,i.flagGroup.flag.object,{randomizeAmount:.5,randomSeed:i.randomSeed*2}),i.flagGroup.simulate(e),i.flagGroup.render()}),this._updateGroupRotation(),this._updateIntroCamera(e),this._camera.lookAt(0,this._cameraLookAtY,0),this._renderer.render(this._scene,this._camera)}catch(t){console.error("Animation loop error:",t),cancelAnimationFrame(this._animationFrameId)}};_updateGroupRotation(){if(this._flagsGroup==null)return;const t=this._targetGroupRotation-this._currentGroupRotation;this._currentGroupRotation+=t*.1,this._flagsGroup.rotation.y=this._currentGroupRotation}_updateIntroCamera(t){if(!this._isIntroCameraAnimating)return;if(this._isIntroCameraHolding){this._introCameraElapsed+=t,this._camera.position.copy(this._introCameraStartPosition),this._setMenuIntroScale(0),this._introCameraElapsed>=this._introCameraHoldDuration&&(this._isIntroCameraHolding=!1,this._introCameraElapsed=0);return}this._introCameraElapsed+=t;const e=Math.min(1,this._introCameraElapsed/this._introCameraMoveDuration),i=e*e*(3-2*e),n=1-Math.pow(1-e,4);this._camera.position.set(0,this._introCameraStartPosition.y+(this._introCameraEndPosition.y-this._introCameraStartPosition.y)*n,this._introCameraStartPosition.z+(this._introCameraEndPosition.z-this._introCameraStartPosition.z)*i),this._setMenuIntroScale(i),e>=1&&(this._isIntroCameraAnimating=!1,this._camera.position.copy(this._introCameraEndPosition),this._setMenuIntroScale(1))}_setMenuIntroScale(t){if(this._menuContainer==null)return;const e=Math.min(1,Math.max(0,t)),i=this._menuIntroStartScale+(1-this._menuIntroStartScale)*e;this._menuContainer.style.transform=`translateX(-50%) scale(${i})`}addLanguage(t){}addLocales(t){}removeLanguage(t){}removeLocales(t){}}const FI=Object.freeze(Object.defineProperty({__proto__:null,COMPONENT_CUSTOM_MESSAGES:nc,LanguagePickerComponent:xA,OBSERVED_ATTRIBUTES:ra,selector:"as-language-picker"},Symbol.toStringTag,{value:"Module"})),rc={THEME_CHANGE_CONFIRMED:la.THEME_CHANGE_CONFIRMED},EA={RIGHT:new B(1,0,0),LEFT:new B(-1,0,0),TOP:new B(0,1,0),BOTTOM:new B(0,-1,0),FRONT:new B(0,0,1),BACK:new B(0,0,-1)},OI=new Set([gi.DARK_PURPLE]),SA={selected:gi.DARK_PURPLE,options:OI},aa={OPTIONS:"themes",SELECTED:"selected"},UI=`<section class="root">
|
|
3966
3966
|
<canvas></canvas>
|
|
3967
|
-
<
|
|
3968
|
-
<
|
|
3969
|
-
<
|
|
3970
|
-
|
|
3971
|
-
|
|
3972
|
-
|
|
3973
|
-
|
|
3974
|
-
|
|
3975
|
-
|
|
3976
|
-
<
|
|
3977
|
-
|
|
3978
|
-
|
|
3979
|
-
|
|
3980
|
-
<
|
|
3981
|
-
|
|
3982
|
-
|
|
3983
|
-
|
|
3967
|
+
<section class="preview-dialog-container">
|
|
3968
|
+
<header-body-footer-dialog class="preview-dialog">
|
|
3969
|
+
<section slot="header" class="header">
|
|
3970
|
+
<div class="title">Pick your theme</div>
|
|
3971
|
+
<span class="subtitle">
|
|
3972
|
+
Rotate to preview, then apply to confirm your pick. Six themes, one
|
|
3973
|
+
cube... pick yours!
|
|
3974
|
+
</span>
|
|
3975
|
+
</section>
|
|
3976
|
+
<section slot="body" class="body">
|
|
3977
|
+
<div class="preview-title title"></div>
|
|
3978
|
+
<div class="preview-sub subtitle"></div>
|
|
3979
|
+
</section>
|
|
3980
|
+
<section slot="footer" class="footer">
|
|
3981
|
+
<base-button class="apply-btn" commandfor="confirmation-dialog">
|
|
3982
|
+
</base-button>
|
|
3983
|
+
</section>
|
|
3984
|
+
</header-body-footer-dialog>
|
|
3985
|
+
</section>
|
|
3984
3986
|
<confirmation-dialog id="confirmation-dialog"></confirmation-dialog>
|
|
3985
3987
|
</section>
|
|
3986
|
-
`,AI=":host{display:block;width:100%;height:100%}.root{position:relative;width:100%;height:100%;overflow:hidden}canvas{position:absolute;inset:0;display:block;touch-action:none;cursor:grab}canvas.dragging{cursor:grabbing}.dialog-details{position:absolute;right:var(--panel-left, 60%);top:var(--panel-top, 50%);transform:translateY(-50%);width:30%;min-width:50px;max-width:300px;display:block}.dialog-details::part(dialog){translate:0 -50%}.dialog-details .title{font-size:16px;font-weight:700;letter-spacing:.01em}.dialog-details .subtitle{font-size:12px;opacity:.75}.dialog-details .header,.dialog-details .body{display:flex;flex-direction:column;gap:4px}.dialog-details .footer{display:flex;flex-direction:row-reverse}",Cc=new CSSStyleSheet;Cc.replaceSync(AI);const cI={options:new Set,selected:void 0},uI=4;class ei extends HTMLElement{static FACE_VISUALS={ferrari:{name:"Ferrari",icon:"🏎️",description:"Bold red contrast with racing-inspired accents"},light:{name:"Light",icon:"☀️",description:"Clean neutral palette for high readability"},"light-blue":{name:"Light Blue",icon:"🫧",description:"Soft blue gradients with crisp foreground contrast"},dark:{name:"Dark",icon:"🌙",description:"Deep graphite style with cool highlights"},"dark-purple":{name:"Dark Purple",icon:"🌑",description:"Night-mode violet with luminous accents"}};static CUBE_SIDE_LENGTH=2;static textureLoader=new MA;shadowRoot;static themesAttribute="themes";static selectedAttribute="selected";_root;_canvas;_hintTop;_previewTitle;_previewSub;_applyBtn;_confirmationDialog;_isConfirmationDialogOpen=!1;_renderer;_scene;_camera;_cube;_cubeGeometry;_cubeMaterials=[];_clock=new PA;_animFrameId=0;_resizeObserver;_themes=[];_themeTextures={};_selected=null;_currentFaceThemeId=null;_isDragging=!1;_lastPointerX=0;_lastPointerY=0;_dragPointerId=null;_rotX=.24;_rotY=.45;_idleSeconds=0;_autoSpinEnabled=!1;_autoVelX=0;_autoVelY=0;_isInitialized=!1;_isInitializing=!1;_tmpCamDir=new O;_tmpWorldNormal=new O;static get observedAttributes(){return[ei.themesAttribute,ei.selectedAttribute]}constructor(t){super(),this.shadowRoot=this.attachShadow({mode:"open"}),this.shadowRoot.adoptedStyleSheets.push(Cc);const{options:e,selected:i}={...cI,...t};this.initializeComponent(e,i)}attributeChangedCallback(t,e,i){if(e!==i){if(!this._isInitialized&&!this._isInitializing){const n=this._parseThemesAttribute(this.getAttribute(ei.themesAttribute)),r=this.getAttribute(ei.selectedAttribute);n.length>0&&this.initializeComponent(new Set(n),r??void 0);return}if(this._isInitialized&&t===ei.selectedAttribute){this._selected=i,this._restoreThemePreview(),this._updatePreviewDialog(this._currentFaceThemeId);return}}}connectedCallback(){this._isInitialized&&this._animFrameId===0&&(this._clock.start(),this._animFrameId=requestAnimationFrame(this._animate))}disconnectedCallback(){cancelAnimationFrame(this._animFrameId),this._animFrameId=0,this._resizeObserver?.disconnect(),this._unbindEvents();for(const t of this._cubeMaterials)t.map?.dispose(),t.dispose();this._cubeMaterials=[],this._cubeGeometry?.dispose(),this._renderer?.dispose(),this._scene?.clear(),this._restoreThemePreview(),this._confirmationDialog?.removeEventListener(gn.COMPONENT_CUSTOM_MESSAGES.CONFIRMATION_DIALOG_CONFIRM,this._handleConfirmation),this._confirmationDialog?.removeEventListener(gn.COMPONENT_CUSTOM_MESSAGES.CONFIRMATION_DIALOG_UNDO,this._handleConfirmationCancel)}initializeComponent(t,e,i){if(this._isInitialized||this._isInitializing)return;this._isInitializing=!0;const n=this._sanitizeThemes([...t]);this._themes=n,this._themeTextures=i??{},this._selected=e??null,this.setupHtmlElements(),this._setupDOM(),this._setupScene(),this._setupCube(),this._setupConfirmationDialog(),this._setupApplyButton(),this._bindEvents(),this._updatePreviewDialog(null),this._isInitialized=!0,this._isInitializing=!1,this._updatePanelPosition(),this.isConnected&&(this._clock.start(),this._animFrameId=requestAnimationFrame(this._animate))}setupHtmlElements(){this.shadowRoot.innerHTML=mc,this._root=this.shadowRoot.querySelector(".root")??(()=>{throw new Error("ThemeCubeComponent: .root not found")})(),this._canvas=this.shadowRoot.querySelector(Dl.CANVAS)??(()=>{throw new Error("ThemeCubeComponent: canvas not found")})(),this._confirmationDialog=this.shadowRoot.querySelector(gn.selector)??(()=>{throw new Error("ThemeCubeComponent: confirmation-dialog not found")})()}_sanitizeThemes(t){const e=t.length>0?t:Object.values(Xi),i=[];for(const n of e){if(typeof n!="string")continue;const r=n.trim();if(r.length!==0&&(i.push(r),i.length>=Object.keys(ua).length))break}return i}_setupDOM(){this.shadowRoot.innerHTML=mc;const t=this.shadowRoot.querySelector(".dialog-details");t!=null&&(this._hintTop=t,setTimeout(()=>{this._hintTop.show()})),this._previewTitle=this.shadowRoot.querySelector(".preview-title")??(()=>{throw new Error("ThemeCubeComponent: .preview-title not found")})(),this._previewSub=this.shadowRoot.querySelector(".preview-sub")??(()=>{throw new Error("ThemeCubeComponent: .preview-sub not found")})(),this._applyBtn=this.shadowRoot.querySelector(".apply-btn")??(()=>{throw new Error("ThemeCubeComponent: .apply-btn not found")})()}_setupScene(){const t=this._root.clientWidth!==0?this._root.clientWidth:800,e=this._root.clientHeight!==0?this._root.clientHeight:600;this._renderer=new Ac({canvas:this._canvas,antialias:!0,alpha:!0}),this._renderer.setPixelRatio(Math.min(window.devicePixelRatio,2)),this._renderer.setSize(t,e,!1),this._renderer.setClearColor(0,0),this._scene=new EA,this._scene.background=new Wt(1710618),this._camera=new ke(44,t/e,.1,100),this._updateCameraForLayout(),this._camera.lookAt(0,0,0);let i=0,n=0;this._resizeObserver=new ResizeObserver(r=>{const a=r[0];if(a==null)return;const o=Math.floor(a.contentRect.width),h=Math.floor(a.contentRect.height);o===0||h===0||o===i&&h===n||(i=o,n=h,this._renderer.setSize(o,h,!1),this._camera.aspect=o/h,this._camera.updateProjectionMatrix(),this._updateCameraForLayout(),this._updatePanelPosition())}),this._resizeObserver.observe(this)}_setupCube(){const t=Object.keys(ua).length;this._cubeMaterials=Array.from({length:t},(e,i)=>{const n=this._getThemeIdForFace(i),r=this._resolveThemeFaceVisual(n),a=new ol({color:"#ece9e4"});return this._setMaterialTexture(a,n,r),a}),this._cubeGeometry=new Ms(ei.CUBE_SIDE_LENGTH,ei.CUBE_SIDE_LENGTH,ei.CUBE_SIDE_LENGTH),this._cube=new Ci(this._cubeGeometry,this._cubeMaterials),this._cube.rotation.x=this._rotX,this._cube.rotation.y=this._rotY,this._scene.add(this._cube)}_setupApplyButton(){this._applyBtn.addEventListener(ma.CLICK,this._handleApplyClick)}_handleApplyClick=()=>{this._applyTheme()};_applyTheme(){if(this._currentFaceThemeId==null)return;const t=this._resolveThemeFaceVisual(this._currentFaceThemeId);this._confirmationDialog.value=this._currentFaceThemeId,this._confirmationDialog.headline="Apply theme?",this._confirmationDialog.text=`Are you sure you want to apply the theme ${t.name}?`,this._confirmationDialog.showModal(),this._isConfirmationDialogOpen=!0,this._stopAutoSpinFromInteraction()}_updatePreviewDialog(t){if(t==null){this._applyBtn.disabled=!0;return}const e=this._resolveThemeFaceVisual(t),i=t===this._selected;this._previewTitle.textContent=`${e.icon} ${e.name}`,this._previewSub.textContent=e.description,this._applyBtn.disabled=i,this._applyBtn.textContent=i?"Already active":"Apply",this._applyBtn.title=i?"Already the active theme":"Apply this theme"}_animate=()=>{if(this._animFrameId=requestAnimationFrame(this._animate),!this._isInitialized||this._camera==null||this._renderer==null)return;const t=Math.min(this._clock.getDelta(),1/24);!this._isDragging&&!this._isConfirmationDialogOpen&&this._updateIdleAutoSpin(t),this._cube.rotation.x=this._rotX,this._cube.rotation.y=this._rotY;const e=this._getFrontFaceIndex(),i=e>=0?this._getThemeIdForFace(e):null;i!==this._currentFaceThemeId&&(this._currentFaceThemeId=i,this._updatePreviewDialog(i),i!=null?Ia(i):this._restoreThemePreview()),this._renderer.render(this._scene,this._camera)};_updateIdleAutoSpin(t){this._isConfirmationDialogOpen||(this._idleSeconds+=t,!this._autoSpinEnabled&&this._idleSeconds>=uI&&(this._autoSpinEnabled=!0,this._autoVelX=.0015,this._autoVelY=.0015*(1+Math.sqrt(5))/2),this._autoSpinEnabled&&(this._rotX+=this._autoVelX,this._rotY+=this._autoVelY,this._rotX>Math.PI/2.2&&(this._autoVelX=-Math.abs(this._autoVelX)),this._rotX<-Math.PI/2.2&&(this._autoVelX=Math.abs(this._autoVelX))))}_getFrontFaceIndex(){this._camera.getWorldDirection(this._tmpCamDir),this._tmpCamDir.negate();const t=Object.values(ua);let e=-1,i=-1/0;for(let n=0;n<t.length;n+=1){this._tmpWorldNormal.copy(t[n]).applyQuaternion(this._cube.quaternion);const r=this._tmpWorldNormal.dot(this._tmpCamDir);r>i&&(i=r,e=n)}return e}_updateCameraForLayout(){const i=this._camera.aspect*-1;this._camera.position.set(i,.9,8),this._camera.lookAt(i,0,0)}_updatePanelPosition(){if(this._renderer==null||this._camera==null||this._root==null)return;const t=new O(0,0,0);t.project(this._camera);const e=ua.LEFT.clone();e.project(this._camera);const i=this._renderer.domElement.clientWidth,n=this._renderer.domElement.clientHeight,r=(t.x*.5+.5)*i,a=(t.y*-.5+.5)*n,o=(e.x*.5+.5)*i,h=Math.abs(r-o),l=i-(r-h-16);this._root.style.setProperty("--panel-right",`${Math.round(l)}px`),this._root.style.setProperty("--panel-top",`${Math.round(a)}px`)}_setMaterialTexture(t,e,i){const n=this._themeTextures[e];if(n==null||n.length===0){t.map?.dispose();const r=this._createFallbackFaceTexture(i);t.map=r,t.needsUpdate=!0;return}ei.textureLoader.load(n,r=>{r.colorSpace=Pe,r.needsUpdate=!0,t.map?.dispose(),t.map=r,t.needsUpdate=!0},void 0,()=>{t.map?.dispose();const r=this._createFallbackFaceTexture(i);t.map=r,t.needsUpdate=!0})}_createFallbackFaceTexture(t){const i=document.createElement("canvas");i.width=768,i.height=768;const n=i.getContext("2d");if(n==null){const o=new SA(i);return o.colorSpace=Pe,o}const r=n.createLinearGradient(0,0,768,768);r.addColorStop(0,"#ece9e4"),r.addColorStop(1,"#ddd9d2"),n.fillStyle=r,n.fillRect(0,0,768,768),n.fillStyle="rgba(0, 0, 0, 0.04)",n.beginPath(),n.roundRect(48,48,672,672,28),n.fill(),n.strokeStyle="#f3f3f3",n.lineWidth=6,n.beginPath(),n.roundRect(48,48,672,672,28),n.stroke(),n.fillStyle="#6366f1",n.fillRect(48,48,672,6),n.fillStyle="#141414",n.font="140px serif",n.textAlign="center",n.textBaseline="middle",n.fillText(t.icon,768/2,768/2-70),n.font="bold 72px sans-serif",n.fillText(t.name,768/2,768/2+80,648);const a=new SA(i);return a.colorSpace=Pe,a.needsUpdate=!0,a}_getThemeIdForFace(t){return this._themes.length===0?Xi.DARK:this._themes[t%this._themes.length]??Xi.DARK}_formatThemeName(t){return t.split("-").map(e=>e.length>0?e.charAt(0).toUpperCase()+e.slice(1):"").join(" ").trim()}_restoreThemePreview(){if(this._selected!=null){Ia(this._selected);return}Ol()}_stopAutoSpinFromInteraction(){this._idleSeconds=0,this._autoSpinEnabled=!1,this._autoVelX=0,this._autoVelY=0}_onPointerDown=t=>{this._isDragging=!0,this._dragPointerId=t.pointerId,this._lastPointerX=t.clientX,this._lastPointerY=t.clientY,this._canvas.classList.add("dragging"),this._stopAutoSpinFromInteraction(),this._canvas.setPointerCapture(t.pointerId)};_onPointerMove=t=>{if(!this._isDragging||this._dragPointerId!==t.pointerId)return;const e=t.clientX-this._lastPointerX,i=t.clientY-this._lastPointerY;this._rotY+=e*.008,this._rotX+=i*.008,this._lastPointerX=t.clientX,this._lastPointerY=t.clientY,this._stopAutoSpinFromInteraction()};_onPointerUp=t=>{this._dragPointerId===t.pointerId&&(this._isDragging=!1,this._dragPointerId=null,this._canvas.classList.remove("dragging"),this._idleSeconds=0)};_bindEvents(){this._canvas.addEventListener(Yi.POINTER_DOWN,this._onPointerDown),this._canvas.addEventListener(Yi.POINTER_MOVE,this._onPointerMove),window.addEventListener(Yi.POINTER_UP,this._onPointerUp),window.addEventListener(Yi.POINTER_CANCEL,this._onPointerUp)}_unbindEvents(){this._applyBtn?.removeEventListener(ma.CLICK,this._handleApplyClick),this._canvas?.removeEventListener(Yi.POINTER_DOWN,this._onPointerDown),this._canvas?.removeEventListener(Yi.POINTER_MOVE,this._onPointerMove),window.removeEventListener(Yi.POINTER_UP,this._onPointerUp),window.removeEventListener(Yi.POINTER_CANCEL,this._onPointerUp)}_parseThemesAttribute(t){if(t==null||t.length===0)return[];try{const e=JSON.parse(t);return Array.isArray(e)?e:[]}catch{return t.split(",").map(e=>e.trim()).filter(e=>e.length>0)}}_setupConfirmationDialog(){this._confirmationDialog.addEventListener(gn.COMPONENT_CUSTOM_MESSAGES.CONFIRMATION_DIALOG_CONFIRM,this._handleConfirmation),this._confirmationDialog.addEventListener(gn.COMPONENT_CUSTOM_MESSAGES.CONFIRMATION_DIALOG_UNDO,this._handleConfirmationCancel)}_handleConfirmation=()=>{this._isConfirmationDialogOpen=!1;const t=this._confirmationDialog.value;t==null||t===this._selected||(this._selected=t,Ia(this._selected),this._updatePreviewDialog(this._selected),this.dispatchEvent(new CustomEvent(pc.THEME_CHANGE_CONFIRMED,{detail:{selected:this._selected},bubbles:!0,composed:!0})))};_handleConfirmationCancel=()=>{this._isConfirmationDialogOpen=!1};_resolveThemeFaceVisual(t){const e=ei.FACE_VISUALS[t.toLowerCase()];return e!=null?{id:t,...e}:{id:t,name:this._formatThemeName(t),icon:"🎨",description:`Custom theme ${this._formatThemeName(t)}`}}}const dI=Object.freeze(Object.defineProperty({__proto__:null,COMPONENT_CUSTOM_MESSAGES:pc,ThemeCubeComponent:ei,selector:"theme-picker"},Symbol.toStringTag,{value:"Module"}));si.APPLICATION_NAME=Ns,si.CUSTOM_MESSAGES=ga,si.LanguagePicker=hI,si.THEME_TEXTURES_MAPPER=kc,si.ThemePicker=dI,si.WebComponentsRegistry=Mc,Object.defineProperty(si,Symbol.toStringTag,{value:"Module"})}));
|
|
3988
|
+
`,zI=":host{display:block;width:100%;height:100%}.root{position:relative;width:100%;height:100%;overflow:hidden}canvas{position:absolute;inset:0;width:100%;height:100%;display:block;touch-action:none;cursor:grab}canvas.dragging{cursor:grabbing}.preview-dialog-container{position:absolute;bottom:clamp(0rem,40vh,35%);left:50%;transform:translate(-50%);width:30%}.preview-dialog-container .preview-dialog{display:block;width:100%}.preview-dialog-container .preview-dialog::part(dialog){translate:0 0}.preview-dialog-container .preview-dialog .title{font-size:16px;font-weight:700;letter-spacing:.01em}.preview-dialog-container .preview-dialog .subtitle{font-size:12px;opacity:.75}@media(max-width:768px){.preview-dialog-container{bottom:clamp(0rem,40vh,40%);width:90%}}",ac=new CSSStyleSheet;ac.replaceSync(zI);const GI=3;class Fn extends HTMLElement{static textureLoader=new Ih;shadowRoot;static get observedAttributes(){return Object.values(aa)}static FACE_VISUALS={ferrari:{name:"Ferrari",icon:"🏎️",description:"Bold red contrast with racing-inspired accents"},light:{name:"Light",icon:"☀️",description:"Clean neutral palette for high readability"},"light-blue":{name:"Light Blue",icon:"🫧",description:"Soft blue gradients with crisp foreground contrast"},dark:{name:"Dark",icon:"🌙",description:"Deep graphite style with cool highlights"},"dark-purple":{name:"Dark Purple",icon:"🌑",description:"Night-mode violet with luminous accents"}};static CUBE_SIDE_LENGTH=2;options=SA.options;selected=SA.selected;_renderer;_scene;_camera;_root;_canvas;_cube;_cubeGeometry;_cubeMaterials=[];_resizeObserver;_clock=new Mh;_lastTime=0;_animationFrameId=0;_hintTop=null;_previewTitle;_previewSub;_applyBtn;_confirmationDialog;_isConfirmationDialogOpen=!1;_themeTextures={};_currentFaceThemeId=null;_isDragging=!1;_lastPointerX=0;_lastPointerY=0;_dragPointerId=null;_rotX=.24;_rotY=.45;_idleSeconds=0;_autoSpinEnabled=!1;_autoVelX=0;_autoVelY=0;_isInitialized=!1;_isInitializing=!1;_tmpCamDir=new B;_tmpWorldNormal=new B;constructor(){super(),this.shadowRoot=this.attachShadow({mode:"open"}),this.shadowRoot.adoptedStyleSheets.push(ac)}attributeChangedCallback(t,e,i){if(!(e===i||i==null))switch(t){case aa.OPTIONS:{const n=this._parseThemesAttribute(i);this.init(new Set(n))}break;case aa.SELECTED:this.select(i);break}}connectedCallback(){this._isInitialized&&this._animationFrameId===0&&(this._clock.start(),this._animationFrameId=requestAnimationFrame(this._animate))}disconnectedCallback(){cancelAnimationFrame(this._animationFrameId),this._animationFrameId=0,this._unbindEvents(),this._cubeMaterials.forEach(t=>{t.map?.dispose(),t.dispose()}),this._cubeMaterials=[],this._cubeGeometry!=null&&this._cubeGeometry.dispose(),this._scene!=null&&this._scene.clear(),this._renderer!=null&&this._renderer.dispose(),this._resizeObserver!=null&&this._resizeObserver.disconnect(),this._confirmationDialog?.removeEventListener(Wi.COMPONENT_CUSTOM_MESSAGES.CONFIRMATION_DIALOG_CONFIRM,this._handleConfirmation),this._confirmationDialog?.removeEventListener(Wi.COMPONENT_CUSTOM_MESSAGES.CONFIRMATION_DIALOG_UNDO,this._handleConfirmationCancel)}init(t){if(this._isInitialized||this._isInitializing)return;const e=this._normalizeOptions(t);if(this.options=e,this.options.size===0){console.warn(`${this.constructor.name}: No themes provided`);return}this._isInitializing=!0,this.setupHtmlElements(),this.setupScene(),this.setupUI(),this.setupCube(),this.setupConfirmationDialog(),this.setupApplyButton(),this._bindEvents(),this._isInitialized=!0,this._isInitializing=!1,this._updatePreviewDialog(this.selected),this._syncRotationToSelected(),this._updatePanelPosition(),this.isConnected&&this._animationFrameId===0&&(this._clock.start(),this._animationFrameId=requestAnimationFrame(this._animate))}setupHtmlElements(){this.shadowRoot.innerHTML=UI,this._root=this.shadowRoot.querySelector(".root")??(()=>{throw new Error(`${this.constructor.name}: root element not found`)})(),this._canvas=this.shadowRoot.querySelector(bA.CANVAS)??(()=>{throw new Error(`${this.constructor.name}: canvas element not found`)})(),this._confirmationDialog=this.shadowRoot.querySelector(Wi.selector)??(()=>{throw new Error(`${this.constructor.name}: confirmation-dialog element not found`)})()}setupScene(){const t=this._root.clientWidth!==0?this._root.clientWidth:800,e=this._root.clientHeight!==0?this._root.clientHeight:600;this._renderer=new ic({canvas:this._canvas,antialias:!0,alpha:!0}),this._renderer.setPixelRatio(Math.min(window.devicePixelRatio,2)),this._renderer.setSize(t,e,!1),this._renderer.setClearColor(0,0),this._scene=new gh,this._scene.background=new Vt(1710618),this._camera=new Ue(44,t/e,.1,100),this._updateCameraForLayout(),this._camera.lookAt(0,0,0),this.resizeHandler()}setupUI(){this._hintTop=this.shadowRoot.querySelector(".preview-dialog"),this._hintTop!=null&&setTimeout(()=>{this._hintTop?.show()}),this._previewTitle=this.shadowRoot.querySelector(".preview-title")??(()=>{throw new Error(`${this.constructor.name}: .preview-title not found`)})(),this._previewSub=this.shadowRoot.querySelector(".preview-sub")??(()=>{throw new Error(`${this.constructor.name}: .preview-sub not found`)})(),this._applyBtn=this.shadowRoot.querySelector(".apply-btn")??(()=>{throw new Error(`${this.constructor.name}: .apply-btn not found`)})()}setupCube(){const t=Object.keys(EA).length;this._cubeMaterials=Array.from({length:t},(e,i)=>{const n=this._getThemeIdForFace(i),s=this._resolveThemeFaceVisual(n),a=new eA({color:"#ece9e4"});return this._setMaterialTexture(a,n,s),a}),this._cubeGeometry=new Cs(Fn.CUBE_SIDE_LENGTH,Fn.CUBE_SIDE_LENGTH,Fn.CUBE_SIDE_LENGTH),this._cube=new fi(this._cubeGeometry,this._cubeMaterials),this._cube.rotation.x=this._rotX,this._cube.rotation.y=this._rotY,this._cube.translateY(1.25),this._scene.add(this._cube)}resizeHandler=()=>{const t=()=>{const e=this._root.clientWidth,i=this._root.clientHeight;e===0||i===0||(this._renderer.setSize(e,i,!1),this._camera.aspect=e/i,this._camera.updateProjectionMatrix(),this._updateCameraForLayout(),this._updatePanelPosition())};this._resizeObserver=new ResizeObserver(t),this._resizeObserver.observe(this._root),t()};setupApplyButton(){this._applyBtn.addEventListener(rr.CLICK,this._handleApplyClick)}setupConfirmationDialog(){this._confirmationDialog.addEventListener(Wi.COMPONENT_CUSTOM_MESSAGES.CONFIRMATION_DIALOG_CONFIRM,this._handleConfirmation),this._confirmationDialog.addEventListener(Wi.COMPONENT_CUSTOM_MESSAGES.CONFIRMATION_DIALOG_UNDO,this._handleConfirmationCancel)}select(t){this.selected=t,this._isInitialized&&(this._syncRotationToSelected(),this._updatePreviewDialog(t))}_syncRotationToSelected(){const t=[...this.options],e=t.indexOf(this.selected);if(e<0)return;const i=Math.PI*2/t.length;this._rotY=-e*i,this._currentFaceThemeId=this.selected}_handleApplyClick=()=>{this._applyTheme()};_applyTheme(){if(this._currentFaceThemeId==null)return;const t=this._resolveThemeFaceVisual(this._currentFaceThemeId);this._confirmationDialog.value=this._currentFaceThemeId,this._confirmationDialog.headline="Apply theme?",this._confirmationDialog.text=`Are you sure you want to apply the theme ${t.name}?`,this._confirmationDialog.showModal(),this._isConfirmationDialogOpen=!0,this._stopAutoSpinFromInteraction()}_updatePreviewDialog(t){if(t==null){this._previewTitle.textContent="Pick your theme",this._previewSub.textContent="Rotate the cube to preview each theme.",this._applyBtn.disabled=!0,this._applyBtn.textContent="Apply";return}const e=this._resolveThemeFaceVisual(t),i=t===this.selected;this._previewTitle.textContent=`${e.icon} ${e.name}`,this._previewSub.textContent=e.description,this._applyBtn.disabled=i,this._applyBtn.textContent=i?"Already active":"Apply",this._applyBtn.title=i?"Already the active theme":"Apply this theme"}_animate=()=>{this._animationFrameId=requestAnimationFrame(this._animate);try{if(!this._isInitialized)return;const t=this._clock.getElapsedTime(),e=t-this._lastTime;this._lastTime=t;const i=Math.min(Math.max(e,0),1/24);!this._isDragging&&!this._isConfirmationDialogOpen&&this._updateIdleAutoSpin(i),this._cube.rotation.x=this._rotX,this._cube.rotation.y=this._rotY;const n=this._getFrontFaceIndex(),s=n>=0?this._getThemeIdForFace(n):null;s!==this._currentFaceThemeId&&(this._currentFaceThemeId=s,this._updatePreviewDialog(s),s!=null?ua(s):this._restoreThemePreview()),this._renderer.render(this._scene,this._camera)}catch(t){console.error("Animation loop error:",t),cancelAnimationFrame(this._animationFrameId),this._animationFrameId=0}};_updateIdleAutoSpin(t){this._idleSeconds+=t,!this._autoSpinEnabled&&this._idleSeconds>=GI&&(this._autoSpinEnabled=!0,this._autoVelX=.0015,this._autoVelY=.0015*(1+Math.sqrt(5))/2),this._autoSpinEnabled&&(this._rotX+=this._autoVelX,this._rotY+=this._autoVelY,this._rotX>Math.PI/2.2&&(this._autoVelX=-Math.abs(this._autoVelX)),this._rotX<-Math.PI/2.2&&(this._autoVelX=Math.abs(this._autoVelX)))}_getFrontFaceIndex(){this._camera.getWorldDirection(this._tmpCamDir),this._tmpCamDir.negate();const t=Object.values(EA);let e=-1,i=-1/0;for(let n=0;n<t.length;n+=1){this._tmpWorldNormal.copy(t[n]).applyQuaternion(this._cube.quaternion);const s=this._tmpWorldNormal.dot(this._tmpCamDir);s>i&&(i=s,e=n)}return e}_updateCameraForLayout(){this._camera.position.set(0,.9,8),this._camera.lookAt(0,0,0)}_updatePanelPosition(){}_setMaterialTexture(t,e,i){const n=this._themeTextures[e];if(n==null||n.length===0){t.map?.dispose(),t.map=this._createFallbackFaceTexture(i),t.needsUpdate=!0;return}Fn.textureLoader.load(n,s=>{s.colorSpace=Re,s.needsUpdate=!0,t.map?.dispose(),t.map=s,t.needsUpdate=!0},void 0,()=>{t.map?.dispose(),t.map=this._createFallbackFaceTexture(i),t.needsUpdate=!0})}_createFallbackFaceTexture(t){const i=document.createElement("canvas");i.width=768,i.height=768;const n=i.getContext("2d");if(n==null){const o=new ph(i);return o.colorSpace=Re,o}const s=n.createLinearGradient(0,0,768,768);s.addColorStop(0,"#ece9e4"),s.addColorStop(1,"#ddd9d2"),n.fillStyle=s,n.fillRect(0,0,768,768),n.fillStyle="rgba(0, 0, 0, 0.04)",n.beginPath(),n.roundRect(48,48,672,672,28),n.fill(),n.strokeStyle="#f3f3f3",n.lineWidth=6,n.beginPath(),n.roundRect(48,48,672,672,28),n.stroke(),n.fillStyle="#6366f1",n.fillRect(48,48,672,6),n.fillStyle="#141414",n.font="140px serif",n.textAlign="center",n.textBaseline="middle",n.fillText(t.icon,768/2,768/2-70),n.font="bold 72px sans-serif",n.fillText(t.name,768/2,768/2+80,648);const a=new ph(i);return a.colorSpace=Re,a.needsUpdate=!0,a}_getThemeIdForFace(t){const e=[...this.options];return e.length===0?gi.DARK:e[t%e.length]??gi.DARK}_formatThemeName(t){return t.split("-").map(e=>e.length>0?e.charAt(0).toUpperCase()+e.slice(1):"").join(" ").trim()}_restoreThemePreview(){if(this.selected!=null){ua(this.selected);return}RA()}_stopAutoSpinFromInteraction(){this._idleSeconds=0,this._autoSpinEnabled=!1,this._autoVelX=0,this._autoVelY=0}_onPointerDown=t=>{this._isDragging=!0,this._dragPointerId=t.pointerId,this._lastPointerX=t.clientX,this._lastPointerY=t.clientY,this._canvas.classList.add("dragging"),this._stopAutoSpinFromInteraction(),this._canvas.setPointerCapture(t.pointerId)};_onPointerMove=t=>{if(!this._isDragging||this._dragPointerId!==t.pointerId)return;const e=t.clientX-this._lastPointerX,i=t.clientY-this._lastPointerY;this._rotY+=e*.008,this._rotX+=i*.008,this._lastPointerX=t.clientX,this._lastPointerY=t.clientY,this._stopAutoSpinFromInteraction()};_onPointerUp=t=>{this._dragPointerId===t.pointerId&&(this._isDragging=!1,this._dragPointerId=null,this._canvas.classList.remove("dragging"),this._idleSeconds=0)};_bindEvents(){this._canvas.addEventListener(Hi.POINTER_DOWN,this._onPointerDown),this._canvas.addEventListener(Hi.POINTER_MOVE,this._onPointerMove),this._applyBtn.addEventListener(rr.CLICK,this._handleApplyClick),window.addEventListener(Hi.POINTER_UP,this._onPointerUp),window.addEventListener(Hi.POINTER_CANCEL,this._onPointerUp)}_unbindEvents(){this._canvas?.removeEventListener(Hi.POINTER_DOWN,this._onPointerDown),this._canvas?.removeEventListener(Hi.POINTER_MOVE,this._onPointerMove),this._applyBtn?.removeEventListener(rr.CLICK,this._handleApplyClick),window.removeEventListener(Hi.POINTER_UP,this._onPointerUp),window.removeEventListener(Hi.POINTER_CANCEL,this._onPointerUp)}_parseThemesAttribute(t){try{const e=JSON.parse(t),i=Array.isArray(e)?e:[];return this._sanitizeThemes(i)}catch{const e=t.split(",").map(i=>i.trim()).filter(i=>i.length>0);return this._sanitizeThemes(e)}}_sanitizeThemes(t){const e=t.length>0?t:Object.values(gi),i=[];for(const n of e){if(typeof n!="string")continue;const s=n.trim();if(s.length!==0&&(i.push(s),i.length>=Object.keys(EA).length))break}return i}_normalizeOptions(t){const e=this._sanitizeThemes([...t]);return e.length===0?new Set([SA.selected]):new Set(e)}_handleConfirmation=()=>{this._isConfirmationDialogOpen=!1;const t=this._confirmationDialog.value;if(t==null||t===this.selected){this._restoreThemePreview();return}this.selected=t,ua(t),this._updatePreviewDialog(t),this.dispatchEvent(new CustomEvent(rc.THEME_CHANGE_CONFIRMED,{detail:{selected:t},bubbles:!0,composed:!0}))};_handleConfirmationCancel=()=>{this._isConfirmationDialogOpen=!1,this._restoreThemePreview()};_resolveThemeFaceVisual(t){const e=Fn.FACE_VISUALS[t.toLowerCase()];return e!=null?{id:t,...e}:{id:t,name:this._formatThemeName(t),icon:"🎨",description:`Custom theme ${this._formatThemeName(t)}`}}}const kI=Object.freeze(Object.defineProperty({__proto__:null,COMPONENT_CUSTOM_MESSAGES:rc,OBSERVED_ATTRIBUTES:aa,ThemeCubeComponent:Fn,selector:"theme-picker"},Symbol.toStringTag,{value:"Module"}));ti.APPLICATION_NAME=ws,ti.CUSTOM_MESSAGES=la,ti.LanguagePicker=FI,ti.THEME_TEXTURES_MAPPER=wc,ti.ThemePicker=kI,ti.WebComponentsRegistry=dc,Object.defineProperty(ti,Symbol.toStringTag,{value:"Module"})}));
|